[xiph-commits] r16580 - in trunk: . theora-exp theora-exp/doc theora-exp/doc/theory theora-exp/examples theora-exp/include theora-exp/include/theora theora-exp/include/theora/compat theora-exp/include/theora/compat/theora theora-exp/lib theora-exp/lib/x86 theora-exp/m4 theora-exp/macosx theora-exp/macosx/English.lproj theora-exp/macosx/TheoraExp.xcodeproj theora-exp/tests theora-exp/tools theora-exp/unix theora-exp/win32 theora-exp/win32/VS2005 theora-exp/win32/VS2005/libtheora-exp_dec theora-exp/win32/VS2005/libtheora-exp_enc theora-exp/win32/VS2008 theora-exp/win32/VS2008/libtheora-exp_dec theora-exp/win32/VS2008/libtheora-exp_enc theora-exp/win32/compatibility theora-exp/win32/msvc60

cristianadam at svn.xiph.org cristianadam at svn.xiph.org
Fri Sep 25 14:46:10 PDT 2009


Author: cristianadam
Date: 2009-09-25 14:45:30 -0700 (Fri, 25 Sep 2009)
New Revision: 16580

Added:
   trunk/theora-exp/
   trunk/theora-exp/LICENSE
   trunk/theora-exp/Makefile.am
   trunk/theora-exp/README
   trunk/theora-exp/acinclude.m4
   trunk/theora-exp/autogen.sh
   trunk/theora-exp/configure.ac
   trunk/theora-exp/doc/
   trunk/theora-exp/doc/Doxyfile
   trunk/theora-exp/doc/theory/
   trunk/theora-exp/doc/theory/color.nb
   trunk/theora-exp/doc/theory/psych.nb
   trunk/theora-exp/examples/
   trunk/theora-exp/examples/Makefile.am
   trunk/theora-exp/examples/dump_video.c
   trunk/theora-exp/examples/encoder_example.c
   trunk/theora-exp/examples/player_example.c
   trunk/theora-exp/examples/rehuff.c
   trunk/theora-exp/include/
   trunk/theora-exp/include/Makefile.am
   trunk/theora-exp/include/theora/
   trunk/theora-exp/include/theora/Makefile.am
   trunk/theora-exp/include/theora/codec.h
   trunk/theora-exp/include/theora/compat/
   trunk/theora-exp/include/theora/compat/Makefile.am
   trunk/theora-exp/include/theora/compat/theora/
   trunk/theora-exp/include/theora/compat/theora/Makefile.am
   trunk/theora-exp/include/theora/compat/theora/theora.h
   trunk/theora-exp/include/theora/theoradec.h
   trunk/theora-exp/include/theora/theoraenc.h
   trunk/theora-exp/lib/
   trunk/theora-exp/lib/Makefile.am
   trunk/theora-exp/lib/apiwrapper.c
   trunk/theora-exp/lib/apiwrapper.h
   trunk/theora-exp/lib/bitrate.c
   trunk/theora-exp/lib/dct.h
   trunk/theora-exp/lib/decapiwrapper.c
   trunk/theora-exp/lib/decinfo.c
   trunk/theora-exp/lib/decint.h
   trunk/theora-exp/lib/decode.c
   trunk/theora-exp/lib/dequant.c
   trunk/theora-exp/lib/dequant.h
   trunk/theora-exp/lib/encapiwrapper.c
   trunk/theora-exp/lib/encinfo.c
   trunk/theora-exp/lib/encint.h
   trunk/theora-exp/lib/encmsc.c
   trunk/theora-exp/lib/encode.c
   trunk/theora-exp/lib/encvbr.c
   trunk/theora-exp/lib/encvbr.h
   trunk/theora-exp/lib/enquant.c
   trunk/theora-exp/lib/enquant.h
   trunk/theora-exp/lib/fdct.c
   trunk/theora-exp/lib/fdct.h
   trunk/theora-exp/lib/fragment.c
   trunk/theora-exp/lib/huffdec.c
   trunk/theora-exp/lib/huffdec.h
   trunk/theora-exp/lib/huffenc.c
   trunk/theora-exp/lib/huffenc.h
   trunk/theora-exp/lib/huffman.h
   trunk/theora-exp/lib/idct.c
   trunk/theora-exp/lib/idct.h
   trunk/theora-exp/lib/impmap.c
   trunk/theora-exp/lib/info.c
   trunk/theora-exp/lib/internal.c
   trunk/theora-exp/lib/internal.h
   trunk/theora-exp/lib/mcenc.c
   trunk/theora-exp/lib/ocintrin.h
   trunk/theora-exp/lib/psych.c
   trunk/theora-exp/lib/psych.h
   trunk/theora-exp/lib/quant.c
   trunk/theora-exp/lib/quant.h
   trunk/theora-exp/lib/recode.c
   trunk/theora-exp/lib/recode.h
   trunk/theora-exp/lib/state.c
   trunk/theora-exp/lib/x86/
   trunk/theora-exp/lib/x86/cpu.c
   trunk/theora-exp/lib/x86/cpu.h
   trunk/theora-exp/lib/x86/mmxfrag.c
   trunk/theora-exp/lib/x86/mmxidct.c
   trunk/theora-exp/lib/x86/mmxstate.c
   trunk/theora-exp/lib/x86/x86int.h
   trunk/theora-exp/lib/x86/x86state.c
   trunk/theora-exp/m4/
   trunk/theora-exp/m4/as-ac-expand.m4
   trunk/theora-exp/m4/ogg.m4
   trunk/theora-exp/m4/pkg.m4
   trunk/theora-exp/m4/sdl.m4
   trunk/theora-exp/m4/vorbis.m4
   trunk/theora-exp/macosx/
   trunk/theora-exp/macosx/English.lproj/
   trunk/theora-exp/macosx/English.lproj/InfoPlist.strings
   trunk/theora-exp/macosx/Info.plist
   trunk/theora-exp/macosx/TheoraExp.xcodeproj/
   trunk/theora-exp/macosx/TheoraExp.xcodeproj/project.pbxproj
   trunk/theora-exp/macosx/TheoraExp_Prefix.pch
   trunk/theora-exp/tests/
   trunk/theora-exp/tests/Makefile.am
   trunk/theora-exp/tests/comment-test.c
   trunk/theora-exp/tests/noop.c
   trunk/theora-exp/tests/tests.h
   trunk/theora-exp/theoracompat-uninstalled.pc.in
   trunk/theora-exp/theoracompat.pc.in
   trunk/theora-exp/theoradec-uninstalled.pc.in
   trunk/theora-exp/theoradec.pc.in
   trunk/theora-exp/theoraenc-uninstalled.pc.in
   trunk/theora-exp/theoraenc.pc.in
   trunk/theora-exp/tools/
   trunk/theora-exp/tools/colorreg.c
   trunk/theora-exp/tools/csfgen.c
   trunk/theora-exp/tools/dumpstats.c
   trunk/theora-exp/tools/extgen.c
   trunk/theora-exp/tools/filec.c
   trunk/theora-exp/tools/huffgen.c
   trunk/theora-exp/tools/quantgen.c
   trunk/theora-exp/tools/yuv2yuv4mpeg.c
   trunk/theora-exp/unix/
   trunk/theora-exp/unix/Makefile
   trunk/theora-exp/win32/
   trunk/theora-exp/win32/VS2005/
   trunk/theora-exp/win32/VS2005/libtheora-exp_dec/
   trunk/theora-exp/win32/VS2005/libtheora-exp_dec/libtheora-exp_dec.vcproj
   trunk/theora-exp/win32/VS2005/libtheora-exp_enc/
   trunk/theora-exp/win32/VS2005/libtheora-exp_enc/libtheora-exp_enc.vcproj
   trunk/theora-exp/win32/VS2008/
   trunk/theora-exp/win32/VS2008/libtheora-exp_dec/
   trunk/theora-exp/win32/VS2008/libtheora-exp_dec/libtheora-exp_dec.vcproj
   trunk/theora-exp/win32/VS2008/libtheora-exp_enc/
   trunk/theora-exp/win32/VS2008/libtheora-exp_enc/libtheora-exp_enc.vcproj
   trunk/theora-exp/win32/compatibility/
   trunk/theora-exp/win32/compatibility/README.txt
   trunk/theora-exp/win32/compatibility/getopt.c
   trunk/theora-exp/win32/compatibility/getopt.h
   trunk/theora-exp/win32/compatibility/getopt_long.c
   trunk/theora-exp/win32/compatibility/unistd.h
   trunk/theora-exp/win32/msvc60/
   trunk/theora-exp/win32/msvc60/dump_video.dsp
   trunk/theora-exp/win32/msvc60/encoder_example.dsp
   trunk/theora-exp/win32/msvc60/theora_static.dsw
   trunk/theora-exp/win32/msvc60/theorabase_static.dsp
   trunk/theora-exp/win32/msvc60/theoradec_static.dsp
   trunk/theora-exp/win32/msvc60/theoraenc_static.dsp
Log:
Adding r16578 back into trunk due to accidental deletion.

Added: trunk/theora-exp/LICENSE
===================================================================
--- trunk/theora-exp/LICENSE	                        (rev 0)
+++ trunk/theora-exp/LICENSE	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,39 @@
+Copyright (c) 2003-2004 Xiph.org Foundation and contributors.
+
+Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED.
+IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+- In addition, On2 Technologies, Inc. makes the following statement regarding
+ technology used in this software:
+
+  On2 represents and warrants that it shall not assert any rights relating to
+   infringement of On2's registered patents, nor initiate any litigation
+   asserting such rights, against any person who, or entity which utilizes the
+   On2 VP3 Codec Software, including any use, distribution, and sale of said
+   Software; which make changes, modifications, and improvements in said
+   Software; and to use, distribute, and sell said changes as well as
+   applications for other fields of use.

Added: trunk/theora-exp/Makefile.am
===================================================================
--- trunk/theora-exp/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,25 @@
+
+AUTOMAKE_OPTIONS = foreign 1.6 dist-zip dist-bzip2
+
+EXTRA_DIST = doc
+
+SUBDIRS = lib include examples tests
+
+if TH_ENCODER
+TH_ENCODER_FILES=theoraenc.pc 
+else
+TH_ENCODER_FILES=
+endif
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = $(TH_ENCODER_FILES) theoradec.pc theoracompat.pc
+
+dist-hook:
+	rm -rf `find $(distdir)/doc -name .svn`
+
+
+debug:
+	$(MAKE) all CFLAGS="@DEBUG@"
+
+profile:
+	$(MAKE) all CFLAGS="@PROFILE@"

Added: trunk/theora-exp/README
===================================================================
--- trunk/theora-exp/README	                        (rev 0)
+++ trunk/theora-exp/README	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,77 @@
+These libraries were created to allow me to run my own personal experiments
+ with Theora.
+They are not currently part of the official Theora distribution.
+Although they are based upon the VP3.2 and Theora source, which as of the time
+ of this writing serve as the only complete documentation of the VP3 and Theora
+ formats, they were written from scratch.
+
+Decoder:
+The decoder here is feature-complete, up to and including all planned bitstream
+ features for the initial Theora release.
+Some of these are not yet present even in the reference decoder. This decoder
+is strictly better than the reference decoder - it is both more complete, more
+secure, and faster.
+These include:
+- Support for non-VP3 style quantization matrices (i.e., complete support for
+   the additional flexibility added to the quantization matrix specification).
+- Support for additional pixel formats: 4:4:4 and 4:2:2 (in addition to the
+   4:2:0 format supported by VP3).
+- Support for block-level qi values.
+Additional features of the new library design:
+- Improved API design.
+  Internal structures are hidden better, making it easier to upgrade the
+   library and maintain binary compatibility.
+  Generic ioctl-style API allows some encoder and decoder parameters to be
+   modified on the fly, and provides a route of future extensibility.
+  Additional minor improvements.
+- The decoder library is completely separated from the encoder library, so
+   applications need only link against the portions they use.
+- Hardened against invalid video data.
+  Special attention has been paid to eliminate possible buffer overflows and
+   access violations when receiving invalid video data, for better security.
+- A backwards-compatibility API wrapper, for applications that use the older
+  libtheora API.
+Algorithmic optimizations:
+- DCT token and motion vector decoding have been optimized to use fewer calls
+   to oggpackB_read().
+- All DCT tokens are decoded in an initial pass.
+  This allows us to buffer the tokens, instead of the complete set of DCT
+   coefficients, yielding a reduced memory footprint and increased cache
+   coherency.
+- Striped decoding API.
+  After the tokens are decoded, the remaining steps are pipelined and clients
+   receive decoded frame data as soon as it is available, while it is still in
+   cache.
+Currently missing features:
+- Advanced buffering API: Client-specified buffers.
+  Clients could provide external buffers to decode into when out-of-loop
+   post-processing is enabled (if it isn't enabled, a copy has to be done
+   anyway).
+
+Encoder:
+The encoder is highly experimental.
+It currently generates bitstreams using ALL of the decoder features supported
+ above.
+There are still a few outstanding bugs, and the HVS model is very experimental.
+The encoder is not built by default.
+
+Compatibility Layer:
+theora-exp comes with a compatibility layer for libtheora so it can be used
+as a drop in replacement(only decoding right now). To do so, just change your
+pkg-config call from "theora" to "theoracompat"
+
+Building:
+On Unix or Cygwin, building through automake is now supported.
+On a fresh checkout, run:
+./autogen.sh --enable-encode
+From a distribution tarball, run:
+./configure --enable-encode
+Then run:
+make
+make install
+
+For Windows, MSVC++ 6 project files are provided.
+
+A simple GNU Makefile is also provided.
+Edit to taste.
+This will likely disappear in a future version.

Added: trunk/theora-exp/acinclude.m4
===================================================================
--- trunk/theora-exp/acinclude.m4	                        (rev 0)
+++ trunk/theora-exp/acinclude.m4	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,399 @@
+# Configure paths for libogg
+# Jack Moffitt <jack at icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+
+dnl XIPH_PATH_OGG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libogg, and define OGG_CFLAGS and OGG_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_OGG],
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(ogg,[  --with-ogg=PFX   Prefix where libogg is installed (optional)], ogg_prefix="$withval", ogg_prefix="")
+AC_ARG_WITH(ogg-libraries,[  --with-ogg-libraries=DIR   Directory where libogg library is installed (optional)], ogg_libraries="$withval", ogg_libraries="")
+AC_ARG_WITH(ogg-includes,[  --with-ogg-includes=DIR   Directory where libogg header files are installed (optional)], ogg_includes="$withval", ogg_includes="")
+AC_ARG_ENABLE(oggtest, [  --disable-oggtest       Do not try to compile and run a test Ogg program],, enable_oggtest=yes)
+
+  if test "x$ogg_libraries" != "x" ; then
+    OGG_LIBS="-L$ogg_libraries"
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_LIBS="-L$ogg_prefix/lib"
+  elif test "x$prefix" != "xNONE" ; then
+    OGG_LIBS="-L$prefix/lib"
+  fi
+
+  OGG_LIBS="$OGG_LIBS -logg"
+
+  if test "x$ogg_includes" != "x" ; then
+    OGG_CFLAGS="-I$ogg_includes"
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_CFLAGS="-I$ogg_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    OGG_CFLAGS="-I$prefix/include"
+  fi
+
+  AC_MSG_CHECKING(for Ogg)
+  no_ogg=""
+
+
+  if test "x$enable_oggtest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Ogg is sufficiently new.
+dnl
+      rm -f conf.oggtest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+
+int main ()
+{
+  system("touch conf.oggtest");
+  return 0;
+}
+
+],, no_ogg=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_ogg" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.oggtest ; then
+       :
+     else
+       echo "*** Could not run Ogg test program, checking why..."
+       CFLAGS="$CFLAGS $OGG_CFLAGS"
+       LIBS="$LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <ogg/ogg.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Ogg or finding the wrong"
+       echo "*** version of Ogg. If it is not finding Ogg, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Ogg was incorrectly installed"
+       echo "*** or that you have moved Ogg since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     OGG_CFLAGS=""
+     OGG_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(OGG_CFLAGS)
+  AC_SUBST(OGG_LIBS)
+  rm -f conf.oggtest
+])
+# Configure paths for libvorbis
+# Jack Moffitt <jack at icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+# thomasvs added check for vorbis_bitrate_addblock which is new in rc3
+
+dnl XIPH_PATH_VORBIS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libvorbis, and define VORBIS_CFLAGS and VORBIS_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_VORBIS],
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(vorbis,[  --with-vorbis=PFX   Prefix where libvorbis is installed (optional)], vorbis_prefix="$withval", vorbis_prefix="")
+AC_ARG_WITH(vorbis-libraries,[  --with-vorbis-libraries=DIR   Directory where libvorbis library is installed (optional)], vorbis_libraries="$withval", vorbis_libraries="")
+AC_ARG_WITH(vorbis-includes,[  --with-vorbis-includes=DIR   Directory where libvorbis header files are installed (optional)], vorbis_includes="$withval", vorbis_includes="")
+AC_ARG_ENABLE(vorbistest, [  --disable-vorbistest       Do not try to compile and run a test Vorbis program],, enable_vorbistest=yes)
+
+  if test "x$vorbis_libraries" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_libraries"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_LIBS="-L$prefix/lib"
+  fi
+
+  VORBIS_LIBS="$VORBIS_LIBS -lvorbis -lm"
+  VORBISFILE_LIBS="-lvorbisfile"
+  VORBISENC_LIBS="-lvorbisenc"
+
+  if test "x$vorbis_includes" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_includes"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_CFLAGS="-I$prefix/include"
+  fi
+
+
+  AC_MSG_CHECKING(for Vorbis)
+  no_vorbis=""
+
+
+  if test "x$enable_vorbistest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $VORBIS_CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $VORBIS_LIBS $VORBISENC_LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Vorbis is sufficiently new.
+dnl
+      rm -f conf.vorbistest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <vorbis/codec.h>
+#include <vorbis/vorbisenc.h>
+
+int main ()
+{
+    vorbis_block 	vb;
+    vorbis_dsp_state	vd;
+    vorbis_info		vi;
+
+    vorbis_info_init (&vi);
+    vorbis_encode_init (&vi, 2, 44100, -1, 128000, -1);
+    vorbis_analysis_init (&vd, &vi);
+    vorbis_block_init (&vd, &vb);
+    /* this function was added in 1.0rc3, so this is what we're testing for */
+    vorbis_bitrate_addblock (&vb);
+
+    system("touch conf.vorbistest");
+    return 0;
+}
+
+],, no_vorbis=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_vorbis" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.vorbistest ; then
+       :
+     else
+       echo "*** Could not run Vorbis test program, checking why..."
+       CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+       LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <vorbis/codec.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Vorbis or finding the wrong"
+       echo "*** version of Vorbis. If it is not finding Vorbis, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Vorbis was incorrectly installed"
+       echo "*** or that you have moved Vorbis since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     VORBIS_CFLAGS=""
+     VORBIS_LIBS=""
+     VORBISFILE_LIBS=""
+     VORBISENC_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(VORBIS_CFLAGS)
+  AC_SUBST(VORBIS_LIBS)
+  AC_SUBST(VORBISFILE_LIBS)
+  AC_SUBST(VORBISENC_LIBS)
+  rm -f conf.vorbistest
+])
+# Configure paths for SDL
+# Sam Lantinga 9/21/99
+# stolen from Manish Singh
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
+dnl
+AC_DEFUN([AM_PATH_SDL],
+[dnl 
+dnl Get the cflags and libraries from the sdl-config script
+dnl
+AC_ARG_WITH(sdl-prefix,[  --with-sdl-prefix=PFX   Prefix where SDL is installed (optional)],
+            sdl_prefix="$withval", sdl_prefix="")
+AC_ARG_WITH(sdl-exec-prefix,[  --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
+            sdl_exec_prefix="$withval", sdl_exec_prefix="")
+AC_ARG_ENABLE(sdltest, [  --disable-sdltest       Do not try to compile and run a test SDL program],
+		    , enable_sdltest=yes)
+
+  if test x$sdl_exec_prefix != x ; then
+     sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
+     if test x${SDL_CONFIG+set} != xset ; then
+        SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+     fi
+  fi
+  if test x$sdl_prefix != x ; then
+     sdl_args="$sdl_args --prefix=$sdl_prefix"
+     if test x${SDL_CONFIG+set} != xset ; then
+        SDL_CONFIG=$sdl_prefix/bin/sdl-config
+     fi
+  fi
+
+  AC_REQUIRE([AC_CANONICAL_TARGET])
+  PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+  AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
+  min_sdl_version=ifelse([$1], ,0.11.0,$1)
+  AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
+  no_sdl=""
+  if test "$SDL_CONFIG" = "no" ; then
+    no_sdl=yes
+  else
+    SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
+    SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
+
+    sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    if test "x$enable_sdltest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $SDL_CFLAGS"
+      LIBS="$LIBS $SDL_LIBS"
+dnl
+dnl Now check if the installed SDL is sufficiently new. (Also sanity
+dnl checks the results of sdl-config to some extent
+dnl
+      rm -f conf.sdltest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+  char *new_str;
+  
+  if (str)
+    {
+      new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+      strcpy (new_str, str);
+    }
+  else
+    new_str = NULL;
+  
+  return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  /* This hangs on some systems (?)
+  system ("touch conf.sdltest");
+  */
+  { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = my_strdup("$min_sdl_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_sdl_version");
+     exit(1);
+   }
+
+   if (($sdl_major_version > major) ||
+      (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+      (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+    {
+      return 0;
+    }
+  else
+    {
+      printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+      printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+      printf("*** best to upgrade to the required version.\n");
+      printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+      printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+      printf("*** config.cache before re-running configure\n");
+      return 1;
+    }
+}
+
+],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_sdl" = x ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$2], , :, [$2])     
+  else
+     AC_MSG_RESULT(no)
+     if test "$SDL_CONFIG" = "no" ; then
+       echo "*** The sdl-config script installed by SDL could not be found"
+       echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+       echo "*** your path, or set the SDL_CONFIG environment variable to the"
+       echo "*** full path to sdl-config."
+     else
+       if test -f conf.sdltest ; then
+        :
+       else
+          echo "*** Could not run SDL test program, checking why..."
+          CFLAGS="$CFLAGS $SDL_CFLAGS"
+          LIBS="$LIBS $SDL_LIBS"
+          AC_TRY_LINK([
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef  main
+#define main K_and_R_C_main
+],      [ return 0; ],
+        [ echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding SDL or finding the wrong"
+          echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+	  echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+        [ echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+          echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+          echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
+          CFLAGS="$ac_save_CFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     SDL_CFLAGS=""
+     SDL_LIBS=""
+     ifelse([$3], , :, [$3])
+  fi
+  AC_SUBST(SDL_CFLAGS)
+  AC_SUBST(SDL_LIBS)
+  rm -f conf.sdltest
+])

Added: trunk/theora-exp/autogen.sh
===================================================================
--- trunk/theora-exp/autogen.sh	                        (rev 0)
+++ trunk/theora-exp/autogen.sh	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,129 @@
+#!/bin/sh
+# Run this to set up the build system: configure, makefiles, etc.
+# (based on the version in enlightenment's cvs)
+
+package="theora-exp"
+
+ACLOCAL_FLAGS="-I m4"
+
+olddir=`pwd`
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+cd "$srcdir"
+DIE=0
+
+echo "checking for autoconf... "
+(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
+}
+
+VERSIONGREP="sed -e s/.*[^0-9\.]\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/"
+VERSIONMKMAJ="sed -e s/\([0-9][0-9]*\)[^0-9].*/\\1/"
+VERSIONMKMIN="sed -e s/.*[0-9][0-9]*\.//"
+
+# do we need automake?
+if test -r Makefile.am; then
+  AM_OPTIONS=`fgrep AUTOMAKE_OPTIONS Makefile.am`
+  AM_NEEDED=`echo $AM_OPTIONS | $VERSIONGREP`
+  if test x"$AM_NEEDED" = "x$AM_OPTIONS"; then
+    AM_NEEDED=""
+  fi
+  if test -z $AM_NEEDED; then
+    echo -n "checking for automake... "
+    AUTOMAKE=automake
+    ACLOCAL=aclocal
+    if ($AUTOMAKE --version < /dev/null > /dev/null 2>&1); then
+      echo "yes"
+    else
+      echo "no"
+      AUTOMAKE=
+    fi
+  else
+    echo -n "checking for automake $AM_NEEDED or later... "
+    majneeded=`echo $AM_NEEDED | $VERSIONMKMAJ`
+    minneeded=`echo $AM_NEEDED | $VERSIONMKMIN`
+    for am in automake-$AM_NEEDED automake$AM_NEEDED \
+	automake automake-1.7 automake-1.8 automake-1.9 automake-1.10; do
+      ($am --version < /dev/null > /dev/null 2>&1) || continue
+      ver=`$am --version < /dev/null | head -n 1 | $VERSIONGREP`
+      maj=`echo $ver | $VERSIONMKMAJ`
+      min=`echo $ver | $VERSIONMKMIN`
+      if test $maj -eq $majneeded -a $min -ge $minneeded; then
+        AUTOMAKE=$am
+        echo $AUTOMAKE
+        break
+      fi
+    done
+    test -z $AUTOMAKE &&  echo "no"
+    echo -n "checking for aclocal $AM_NEEDED or later... "
+    for ac in aclocal-$AM_NEEDED aclocal$AM_NEEDED \
+	aclocal aclocal-1.7 aclocal-1.8 aclocal-1.9 aclocal-1.10; do
+      ($ac --version < /dev/null > /dev/null 2>&1) || continue
+      ver=`$ac --version < /dev/null | head -n 1 | $VERSIONGREP`
+      maj=`echo $ver | $VERSIONMKMAJ`
+      min=`echo $ver | $VERSIONMKMIN`
+      if test $maj -eq $majneeded -a $min -ge $minneeded; then
+        ACLOCAL=$ac
+        echo $ACLOCAL
+        break
+      fi
+    done
+    test -z $ACLOCAL && echo "no"
+  fi
+  test -z $AUTOMAKE || test -z $ACLOCAL && {
+        echo
+        echo "You must have automake 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/"
+        exit 1
+  }
+fi
+
+echo -n "checking for libtool... "
+for LIBTOOLIZE in libtoolize glibtoolize nope; do
+  ($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 && break
+done
+if test x$LIBTOOLIZE = xnope; then
+  echo "nope."
+  LIBTOOLIZE=libtoolize
+else
+  echo $LIBTOOLIZE
+fi
+($LIBTOOLIZE --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 || exit 1
+echo "  $LIBTOOLIZE --automake"
+$LIBTOOLIZE --automake || exit 1
+echo "  autoheader"
+autoheader || exit 1
+echo "  $AUTOMAKE --add-missing $AUTOMAKE_FLAGS"
+$AUTOMAKE --add-missing $AUTOMAKE_FLAGS || exit 1
+echo "  autoconf"
+autoconf || exit 1
+
+cd $olddir
+$srcdir/configure --enable-maintainer-mode "$@" && echo

Added: trunk/theora-exp/configure.ac
===================================================================
--- trunk/theora-exp/configure.ac	                        (rev 0)
+++ trunk/theora-exp/configure.ac	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,224 @@
+dnl Process this file with autoconf to produce a configure script
+AC_INIT(theora-exp, [0.1], [theora-dev at xiph.org])
+
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+AM_CONFIG_HEADER([config.h])
+AM_INIT_AUTOMAKE
+
+V_LIB_CURRENT=0
+V_LIB_REVISION=1
+V_LIB_AGE=0
+AC_SUBST(V_LIB_CURRENT)
+AC_SUBST(V_LIB_REVISION)
+AC_SUBST(V_LIB_AGE)
+
+dnl --------------------------------------------------  
+dnl Check for programs
+dnl --------------------------------------------------  
+
+dnl save $CFLAGS since AC_PROG_CC likes to insert "-g -O2"
+dnl if $CFLAGS is blank
+cflags_save="$CFLAGS"
+AC_PROG_CC
+AC_PROG_CPP
+CFLAGS="$cflags_save"
+
+AM_PROG_LIBTOOL
+
+dnl Add parameters for aclocal
+AC_SUBST(ACLOCAL_AMFLAGS, "-I m4")
+
+dnl Check for sdl-config
+AC_CHECK_PROG(HAVE_SDL_CONFIG, sdl-config, true, false)
+AM_CONDITIONAL(HAVE_SDL_CONFIG,$HAVE_SDL_CONFIG)
+
+dnl check for Ogg
+HAVE_OGG=no
+
+dnl first check through pkg-config since it's more flexible
+
+dnl check for pkg-config itself so we don't try the m4 macro without pkg-config
+AC_CHECK_PROG(HAVE_PKG_CONFIG, pkg-config, yes)
+if test "x$HAVE_PKG_CONFIG" = "xyes"
+then
+  PKG_CHECK_MODULES(OGG, ogg >= 1.1, HAVE_OGG=yes, HAVE_OGG=no)
+fi
+if test "x$HAVE_OGG" = "xno"
+then
+  dnl fall back to the old school test
+  XIPH_PATH_OGG(, AC_MSG_ERROR([
+    libogg is required to build this package!
+    please see http://www.xiph.org/ for how to
+    obtain a copy.
+  ]))
+  cflags_save=$CFLAGS
+  libs_save=$LIBS
+  CFLAGS="$CFLAGS $OGG_CFLAGS"
+  LIBS="$LIBS $OGG_LIBS"
+  AC_CHECK_FUNC(oggpackB_read, , [
+    AC_MSG_ERROR([newer libogg version (>1.0) required])
+  ])
+  CFLAGS=$cflags_save
+  LIBS=$libs_save
+fi
+
+dnl check for Vorbis
+HAVE_VORBIS=no
+
+dnl first check through pkg-config since it's more flexible
+
+if test "x$HAVE_PKG_CONFIG" = "xyes"
+then
+  PKG_CHECK_MODULES(VORBIS, vorbis >= 1.0.1, HAVE_VORBIS=yes, HAVE_VORBIS=no)
+  dnl also set VORBISENC_LIBS since an examples needs it
+  dnl the old .m4 sets this to a value to use on top of VORBIS_LIBS,
+  dnl so we do the same here.
+  VORBISENC_LIBS="-lvorbisenc"
+  AC_SUBST(VORBISENC_LIBS)
+fi
+if test "x$HAVE_VORBIS" = "xno"
+then
+  dnl fall back to the old school test
+  XIPH_PATH_VORBIS(HAVE_VORBIS=yes, HAVE_VORBIS=no)
+fi
+
+AM_PATH_SDL(,[
+	HAVE_SDL=yes
+	SDL_LIBS=`$SDL_CONFIG --libs`
+],AC_MSG_WARN([*** Unable to find SDL -- Not compiling example players ***]))
+
+AM_PATH_SDL(,[
+	HAVE_SDL=yes
+	SDL_LIBS=`$SDL_CONFIG --libs`
+],AC_MSG_WARN([*** Unable to find SDL -- Not compiling example players ***]))
+
+
+AC_CHECK_HEADERS([sys/soundcard.h soundcard.h machine/soundcard.h],[
+  HAVE_OSS=yes
+  break
+])
+if test x$HAVE_OSS != xyes; then
+  AC_MSG_WARN([OSS audio support not found -- not compiling player_example])
+fi
+
+if test x$HAVE_SDL = xyes -a x$HAVE_OSS = xyes; then
+  BUILDABLE_EXAMPLES="$BUILDABLE_EXAMPLES player_example"
+fi
+AC_SUBST(BUILDABLE_EXAMPLES)
+
+dnl Checks for libraries.
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h unistd.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+
+dnl Checks for library functions.
+AC_PROG_GCC_TRADITIONAL
+AC_FUNC_MEMCMP
+AC_TYPE_SIGNAL
+AC_CHECK_FUNCS(gettimeofday select strstr)
+
+dnl Check for optimization
+ac_enable_x86asm=yes
+AC_ARG_ENABLE(x86asm,
+    AS_HELP_STRING([--enable-x86asm],
+    [enable x86 assambler optimization, default=autodetect]),
+    []
+)
+
+if test "$enable_x86asm" != "no"; then
+    case "$target_cpu" in
+        i[[3456]]86)
+            AC_DEFINE([OC_X86ASM], [], [enable x86 assambler optimization])
+            AM_CONDITIONAL(OC_X86ASM,true)
+            ;;
+        x86_64) 
+            AC_DEFINE([OC_X86ASM], [], [enable x86 assambler optimization])
+            AM_CONDITIONAL(OC_X86ASM,true)
+            ;;
+        *) 
+            AM_CONDITIONAL(OC_X86ASM,false)
+            ;;
+    esac
+else
+    AM_CONDITIONAL(OC_X86ASM,false)
+    ac_enable_x86asm=no
+fi
+
+DEBUG="-g -Wall -DDEBUG -D__NO_MATH_INLINES"
+PROFILE="-g -p -O3 -DDEBUG";
+AC_SUBST(DEBUG)
+AC_SUBST(PROFILE)
+
+dnl enable experimental encoder
+ac_enable_encode=no
+AC_ARG_ENABLE(encode,
+     [  --enable-encode        enable encoding support(experimental) ],
+     [ ac_enable_encode=$enableval ], [ ac_enable_encode=no] )
+
+if test "x${ac_enable_encode}" != xno ; then
+    AC_DEFINE([TH_ENCODER], [], [ enable experimental encoder])
+    BUILDABLE_EXAMPLES="$BUILDABLE_EXAMPLES encoder_example"
+fi
+AM_CONDITIONAL(TH_ENCODER, [test "x${ac_enable_encode}" != xno])
+
+
+dnl Enable some opzimization for gcc
+OPTIMIZATION_CFLAGS="-O3 -fforce-addr -fomit-frame-pointer"
+AC_SUBST(OPTIMIZATION_CFLAGS)
+
+AC_OUTPUT([
+  Makefile
+  lib/Makefile
+  include/Makefile
+  include/theora/Makefile
+  include/theora/compat/Makefile
+  include/theora/compat/theora/Makefile
+  examples/Makefile
+  tests/Makefile
+  theoradec.pc
+  theoraenc.pc
+  theoracompat.pc
+  theoradec-uninstalled.pc
+  theoraenc-uninstalled.pc
+  theoracompat-uninstalled.pc
+])
+
+AS_AC_EXPAND(LIBDIR, ${libdir})
+AS_AC_EXPAND(INCLUDEDIR, ${includedir})
+AS_AC_EXPAND(BINDIR, ${bindir})
+AS_AC_EXPAND(DOCDIR, ${datadir}/doc)
+
+AC_MSG_RESULT([
+------------------------------------------------------------------------
+  $PACKAGE $VERSION:  Automatic configuration OK.
+
+  General configuration:
+
+    x86 assambler optimization: ...... ${ac_enable_x86asm}
+    Encoding support(experimental): .. ${ac_enable_encode}
+
+
+  Installation paths:
+
+    libtheora: ....................... ${LIBDIR}
+    C header files: .................. ${INCLUDEDIR}/theora
+    Documentation: ................... ${DOCDIR}/$PACKAGE
+
+  Building:
+
+    Type 'make' to compile $PACKAGE.
+
+    Type 'make install' to install $PACKAGE.
+
+  Example programs will be built but not installed.
+------------------------------------------------------------------------
+])
+

Added: trunk/theora-exp/doc/Doxyfile
===================================================================
--- trunk/theora-exp/doc/Doxyfile	                        (rev 0)
+++ trunk/theora-exp/doc/Doxyfile	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,1142 @@
+# Doxyfile 1.3.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = Theora
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = Experimental
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = libtheora
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 2 levels of 10 sub-directories under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of source 
+# files, where putting all generated files in the same directory would otherwise 
+# cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
+# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, 
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is used 
+# as the annotated text. Otherwise, the brief description is used as-is. If left 
+# blank, the following values are used ("$name" is automatically replaced with the 
+# name of the entity): "The $name class" "The $name widget" "The $name file" 
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+# members of a class in the documentation of that class as if those members were 
+# ordinary class members. Constructors, destructors and assignment operators of 
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = ../include
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ../include/theora
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse the 
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off. Note that this 
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is 
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes that 
+# lay further from the root node will be omitted. Note that setting this option to 
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
+# note that a graph may be further truncated if the graph's image dimensions are 
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO

Added: trunk/theora-exp/doc/theory/color.nb
===================================================================
--- trunk/theora-exp/doc/theory/color.nb	                        (rev 0)
+++ trunk/theora-exp/doc/theory/color.nb	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,283 @@
+(***********************************************************************
+
+                    Mathematica-Compatible Notebook
+
+This notebook can be used on any computer system with Mathematica 3.0,
+MathReader 3.0, or any compatible application. The data for the notebook 
+starts with the line of stars above.
+
+To get the notebook into a Mathematica-compatible application, do one of 
+the following:
+
+* Save the data starting with the line of stars above into a file
+  with a name ending in .nb, then open the file inside the application;
+
+* Copy the data starting with the line of stars above to the
+  clipboard, then use the Paste menu command inside the application.
+
+Data for notebooks contains only printable 7-bit ASCII and can be
+sent directly in email or through ftp in text mode.  Newlines can be
+CR, LF or CRLF (Unix, Macintosh or MS-DOS style).
+
+NOTE: If you modify the data for this notebook not in a Mathematica-
+compatible application, you must delete the line below containing the 
+word CacheID, otherwise Mathematica-compatible applications may try to 
+use invalid cache data.
+
+For more information on notebooks and Mathematica-compatible 
+applications, contact Wolfram Research:
+  web: http://www.wolfram.com
+  email: info at wolfram.com
+  phone: +1-217-398-0700 (U.S.)
+
+Notebook reader applications are available free of charge from 
+Wolfram Research.
+***********************************************************************)
+
+(*CacheID: 232*)
+
+
+(*NotebookFileLineBreakTest
+NotebookFileLineBreakTest*)
+(*NotebookOptionsPosition[      7352,        208]*)
+(*NotebookOutlinePosition[      8005,        231]*)
+(*  CellTagsIndexPosition[      7961,        227]*)
+(*WindowFrame->Normal*)
+
+
+
+Notebook[{
+
+Cell[CellGroupData[{
+Cell[BoxData[
+    \(Simplify[
+      Solve[{\((1 + \[Epsilon])\)*\((\[Delta]^\[Beta])\) - \[Epsilon] == 
+            \[Alpha]*\[Delta], 
+          \[Beta]*\((1 + \[Epsilon])\)*\((\[Delta]^\((\[Beta] - 1)\))\) == 
+            \[Alpha]}, {\[Alpha], \[Epsilon]}]]\)], "Input"],
+
+Cell[BoxData[
+    \({{\[Alpha] \[Rule] 
+          \(\[Beta]\ \[Delta]\^\(\(-1\) + \[Beta]\)\)\/\(1 + 
+              \((\(-1\) + \[Beta])\)\ \[Delta]\^\[Beta]\), 
+        \[Epsilon] \[Rule] 
+          \(-\(\(\((\(-1\) + \[Beta])\)\ \[Delta]\^\[Beta]\)\/\(1 + 
+                  \((\(-1\) + \[Beta])\)\ \[Delta]\^\[Beta]\)\)\)}}\)], 
+  "Output"]
+}, Open  ]],
+
+Cell[BoxData[
+    \(rgb2xyz[c_] := 
+      Block[{f, s}, \n\t\t
+        f := {{c[\([1, 1]\)]/c[\([1, 2]\)], c[\([2, 1]\)]/c[\([2, 2]\)], 
+              c[\([3, 1]\)]/c[\([3, 2]\)]}, {1, 1, 1}, {
+              \((1 - c[\([1, 1]\)] - c[\([1, 2]\)])\)/c[\([1, 2]\)], 
+              \((1 - c[\([2, 1]\)] - c[\([2, 2]\)])\)/c[\([2, 2]\)], 
+              \((1 - c[\([3, 1]\)] - c[\([3, 2]\)])\)/c[\([3, 2]\)]}}; \n\t\t
+        s := Inverse[
+              f].{{c[\([4, 1]\)]/c[\([4, 2]\)]}, {1}, {
+                \((1 - c[\([4, 1]\)] - c[\([4, 2]\)])\)/c[\([4, 2]\)]}}; \n
+        \t\t{{f[\([1, 1]\)]*s[\([1, 1]\)], f[\([1, 2]\)]*s[\([2, 1]\)], 
+            f[\([1, 3]\)]*s[\([3, 1]\)]}, {f[\([2, 1]\)]*s[\([1, 1]\)], 
+            f[\([2, 2]\)]*s[\([2, 1]\)], f[\([2, 3]\)]*s[\([3, 1]\)]}, {
+            f[\([3, 1]\)]*s[\([1, 1]\)], f[\([3, 2]\)]*s[\([2, 1]\)], 
+            f[\([3, 3]\)]*s[\([3, 1]\)]}}]\)], "Input"],
+
+Cell[BoxData[
+    \(rgb2xyz470m := 
+      rgb2xyz[{{0.67, 0.33}, {0.21, 0.71}, {0.14, 0.08}, {0.31006, 0.31616}}]
+        \)], "Input"],
+
+Cell[BoxData[
+    \(rgb2xyz470bg := 
+      rgb2xyz[{{0.64, 0.33}, {0.29, 0.60}, {0.15, 0.06}, {0.312713, 
+            0.329016}}]\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(Inverse[rgb2xyz470m].rgb2xyz470bg\)], "Input"],
+
+Cell[BoxData[
+    \({{0.698396023265322796`, 0.238769879837914045`, 
+        0.0319418141018277257`}, {0.0193016340794852858`, 
+        1.07270629882618173`, \(-0.0595741939777363604`\)}, {
+        0.0169397711000759425`, 0.0525463647870810568`, 
+        0.844972920358327428`}}\)], "Output"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \({{0.698396023265322796`, 0.238769879837914045`, 
+        0.0319418141018277257`}, {0.0193016340794852858`, 
+        1.07270629882618173`, \(-0.0595741939777363604`\)}, {
+        0.0169397711000759425`, 0.0525463647870810568`, 
+        0.844972920358327428`}}\)], "Input"],
+
+Cell[BoxData[
+    \({{0.698396023265322796`, 0.238769879837914045`, 
+        0.0319418141018277257`}, {0.0193016340794852858`, 
+        1.07270629882618173`, \(-0.0595741939777363604`\)}, {
+        0.0169397711000759425`, 0.0525463647870810568`, 
+        0.844972920358327428`}}\)], "Output"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(Inverse[rgb2xyz470bg].rgb2xyz470m\)], "Input"],
+
+Cell[BoxData[
+    \({{1.44248717582308438`, \(-0.317311108580498713`\), 
+        \(-0.0769009386960246565`\)}, {\(-0.0274664218099758317`\), 
+        0.93505506441107542`, 0.0669636597378669851`}, {
+        \(-0.0272105074605999508`\), \(-0.051786945959321704`\), 
+        1.18084729506325203`}}\)], "Output"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \({{1.44248717582308438`, \(-0.317311108580498713`\), 
+        \(-0.0769009386960246565`\)}, {\(-0.0274664218099758317`\), 
+        0.93505506441107542`, 0.0669636597378669851`}, {
+        \(-0.0272105074605999508`\), \(-0.051786945959321704`\), 
+        1.18084729506325203`}}\)], "Input"],
+
+Cell[BoxData[
+    \({{1.44248717582308438`, \(-0.317311108580498713`\), 
+        \(-0.0769009386960246565`\)}, {\(-0.0274664218099758317`\), 
+        0.93505506441107542`, 0.0669636597378669851`}, {
+        \(-0.0272105074605999508`\), \(-0.051786945959321704`\), 
+        1.18084729506325203`}}\)], "Output"]
+}, Open  ]],
+
+Cell[BoxData[
+    \(yuv2rgb[kb_, kr_]
+         := {{1, 0, 2*\((1 - kr)\)}, {1, 
+          2*\((\((kb - 1)\)*kb/\((1 - kb - kr)\))\), 
+          2*\((\((kr - 1)\)*kr/\((1 - kb - kr)\))\)}, {1, 2*\((1 - kb)\), 0}}
+        \)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(yuv2rgb[0.114, 0.299] // MatrixForm\)], "Input"],
+
+Cell[BoxData[
+    TagBox[
+      RowBox[{"(", GridBox[{
+            {"1", "0", "1.40200000000000013`"},
+            {"1", \(-0.344136286201022167`\), \(-0.714136286201022052`\)},
+            {"1", "1.77200000000000006`", "0"}
+            }], ")"}],
+      (MatrixForm[ #]&)]], "Output"]
+}, Open  ]],
+
+Cell[BoxData[
+    \(rgb2yuv[kb_, kr_]
+         := {{kr, \((1 - kr - kb)\), kb}, {
+          \((1/2)\)*\((\(-kr\))\)/\((1 - kb)\), 
+          \((1/2)\)*\((kr + kb - 1)\)/\((1 - kb)\), 
+          \((1/2)\)*\((1 - kb)\)/\((1 - kb)\)}, {
+          \((1/2)\)*\((1 - kr)\)/\((1 - kr)\), 
+          \((1/2)\)*\((kr + kb - 1)\)/\((1 - kr)\), 
+          \((1/2)\)*\((\(-kb\))\)/\((1 - kr)\)}}\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(rgb2yuv[0.114, 0.299] // MatrixForm\)], "Input"],
+
+Cell[BoxData[
+    TagBox[
+      RowBox[{"(", GridBox[{
+            {
+              StyleBox["0.298999999999999985`",
+                StyleBoxAutoDelete->True,
+                PrintPrecision->3], "0.587000000000000099`", 
+              StyleBox["0.114000000000000012`",
+                StyleBoxAutoDelete->True,
+                PrintPrecision->3]},
+            {\(-0.16873589164785554`\), \(-0.331264108352144504`\), "0.5`"},
+            {"0.5`", \(-0.418687589158345119`\), \(-0.0813124108416547741`\)}
+            }], ")"}],
+      (MatrixForm[ #]&)]], "Output"]
+}, Open  ]]
+},
+FrontEndVersion->"Microsoft Windows 3.0",
+ScreenRectangle->{{0, 1600}, {0, 1142}},
+WindowSize->{463, 704},
+WindowMargins->{{436, Automatic}, {47, Automatic}}
+]
+
+
+(***********************************************************************
+Cached data follows.  If you edit this Notebook file directly, not using
+Mathematica, you must remove the line containing CacheID at the top of 
+the file.  The cache data will then be recreated when you save this file 
+from within Mathematica.
+***********************************************************************)
+
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+
+(*NotebookFileOutline
+Notebook[{
+
+Cell[CellGroupData[{
+Cell[1731, 51, 272, 5, 48, "Input"],
+Cell[2006, 58, 343, 7, 48, "Output"]
+}, Open  ]],
+Cell[2364, 68, 911, 15, 200, "Input"],
+Cell[3278, 85, 135, 3, 48, "Input"],
+Cell[3416, 90, 142, 3, 48, "Input"],
+
+Cell[CellGroupData[{
+Cell[3583, 97, 66, 1, 29, "Input"],
+Cell[3652, 100, 292, 5, 67, "Output"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+Cell[3981, 110, 291, 5, 105, "Input"],
+Cell[4275, 117, 292, 5, 67, "Output"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+Cell[4604, 127, 66, 1, 29, "Input"],
+Cell[4673, 130, 309, 5, 67, "Output"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+Cell[5019, 140, 308, 5, 105, "Input"],
+Cell[5330, 147, 309, 5, 67, "Output"]
+}, Open  ]],
+Cell[5654, 155, 233, 5, 67, "Input"],
+
+Cell[CellGroupData[{
+Cell[5912, 164, 68, 1, 29, "Input"],
+Cell[5983, 167, 284, 7, 73, "Output"]
+}, Open  ]],
+Cell[6282, 177, 396, 8, 86, "Input"],
+
+Cell[CellGroupData[{
+Cell[6703, 189, 68, 1, 29, "Input"],
+Cell[6774, 192, 562, 13, 73, "Output"]
+}, Open  ]]
+}
+]
+*)
+
+
+
+
+(***********************************************************************
+End of Mathematica Notebook file.
+***********************************************************************)
+

Added: trunk/theora-exp/doc/theory/psych.nb
===================================================================
--- trunk/theora-exp/doc/theory/psych.nb	                        (rev 0)
+++ trunk/theora-exp/doc/theory/psych.nb	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,28621 @@
+(***********************************************************************
+
+                    Mathematica-Compatible Notebook
+
+This notebook can be used on any computer system with Mathematica 3.0,
+MathReader 3.0, or any compatible application. The data for the notebook 
+starts with the line of stars above.
+
+To get the notebook into a Mathematica-compatible application, do one of 
+the following:
+
+* Save the data starting with the line of stars above into a file
+  with a name ending in .nb, then open the file inside the application;
+
+* Copy the data starting with the line of stars above to the
+  clipboard, then use the Paste menu command inside the application.
+
+Data for notebooks contains only printable 7-bit ASCII and can be
+sent directly in email or through ftp in text mode.  Newlines can be
+CR, LF or CRLF (Unix, Macintosh or MS-DOS style).
+
+NOTE: If you modify the data for this notebook not in a Mathematica-
+compatible application, you must delete the line below containing the 
+word CacheID, otherwise Mathematica-compatible applications may try to 
+use invalid cache data.
+
+For more information on notebooks and Mathematica-compatible 
+applications, contact Wolfram Research:
+  web: http://www.wolfram.com
+  email: info at wolfram.com
+  phone: +1-217-398-0700 (U.S.)
+
+Notebook reader applications are available free of charge from 
+Wolfram Research.
+***********************************************************************)
+
+(*CacheID: 232*)
+
+
+(*NotebookFileLineBreakTest
+NotebookFileLineBreakTest*)
+(*NotebookOptionsPosition[   1120038,      28463]*)
+(*NotebookOutlinePosition[   1120690,      28486]*)
+(*  CellTagsIndexPosition[   1120646,      28482]*)
+(*WindowFrame->Normal*)
+
+
+
+Notebook[{
+Cell[BoxData[
+    \(Off[General::spell1]\)], "Input"],
+
+Cell[BoxData[
+    \(<< Graphics`Graphics`\)], "Input"],
+
+Cell["\<\
+First we set up a few contrast sensitivity functions using the data from \
+chapter 5 of Nadenau's thesis. There is an error in Table 5.3 on page 83: the \
+roles of a1 and a2 are reversed. Simply swapping the data for these two \
+parameters yields correct results, i.e. the graph below matches the one in \
+Figure 5.9 on page 85.\
+\>", "Text"],
+
+Cell[BoxData[
+    \(sl[f_, a1_, a2_, b1_, b2_, c1_, c2_, s_] := 
+      s*\((a1*\((f^2)\)*Exp[b1*\((f^c1)\)] + a2*Exp[b2*\((f^c2)\)])\)\)], 
+  "Input"],
+
+Cell[BoxData[
+    \(sc[f_, a1_, b1_, c1_, s_] := s*\((a1*Exp[b1*\((f^c1)\)])\)\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrsl[f_] := 
+      sl[f, 0.9973, 0.221, \(-0.9699\), \(-0.800\), 0.7578, 1.999, 267.5]\)], 
+  "Input"],
+
+Cell[BoxData[
+    \(ycbcrsrg[f_] := sc[f, 1.000, \(-0.1521\), 0.893, 45.44]\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrsby[f_] := sc[f, 1.00, \(-0.2041\), 0.900, 28.92]\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(LogLogPlot[{ycbcrsl[f], ycbcrsrg[f], ycbcrsby[f]}, {f, .5, 20}, 
+      PlotRange -> {{0.5, 20}, {10, 300}}, AspectRatio -> 2, 
+      PlotStyle -> {{RGBColor[0, 0, 0]}, {RGBColor[1, 0, 0]}, {
+            RGBColor[0, 0, 1]}}]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 2 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.187902 0.624196 -1.35398 1.35398 [
+[.1879 -0.0125 -6 -15 ]
+[.1879 -0.0125 6 0 ]
+[.29782 -0.0125 -13 -15 ]
+[.29782 -0.0125 13 0 ]
+[.3758 -0.0125 -6 -15 ]
+[.3758 -0.0125 6 0 ]
+[.48572 -0.0125 -6 -15 ]
+[.48572 -0.0125 6 0 ]
+[.6242 -0.0125 -6 -15 ]
+[.6242 -0.0125 6 0 ]
+[.71541 -0.0125 -6 -15 ]
+[.71541 -0.0125 6 0 ]
+[.8121 -0.0125 -9.5 -15 ]
+[.8121 -0.0125 9.5 0 ]
+[.92201 -0.0125 -9.5 -15 ]
+[.92201 -0.0125 9.5 0 ]
+[1 -0.0125 -9.5 -15 ]
+[1 -0.0125 9.5 0 ]
+[-0.0125 .23842 -19 -7.5 ]
+[-0.0125 .23842 0 7.5 ]
+[-0.0125 .40759 -19 -7.5 ]
+[-0.0125 .40759 0 7.5 ]
+[-0.0125 .64602 -19 -7.5 ]
+[-0.0125 .64602 0 7.5 ]
+[-0.0125 .94639 -19 -7.5 ]
+[-0.0125 .94639 0 7.5 ]
+[-0.0125 1.14425 -19 -7.5 ]
+[-0.0125 1.14425 0 7.5 ]
+[-0.0125 1.35398 -26 -7.5 ]
+[-0.0125 1.35398 0 7.5 ]
+[-0.0125 1.59241 -26 -7.5 ]
+[-0.0125 1.59241 0 7.5 ]
+[-0.0125 1.76158 -26 -7.5 ]
+[-0.0125 1.76158 0 7.5 ]
+[-0.0125 2 -26 -7.5 ]
+[-0.0125 2 0 7.5 ]
+[ -0.0005 -0.0005 0 0 ]
+[ 1 2 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.1879 0 m
+.1879 .00625 L
+s
+gsave
+.1879 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.29782 0 m
+.29782 .00625 L
+s
+gsave
+.29782 -0.0125 -74 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1.5) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.3758 0 m
+.3758 .00625 L
+s
+gsave
+.3758 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(2) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.48572 0 m
+.48572 .00625 L
+s
+gsave
+.48572 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(3) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.6242 0 m
+.6242 .00625 L
+s
+gsave
+.6242 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(5) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.71541 0 m
+.71541 .00625 L
+s
+gsave
+.71541 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(7) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.8121 0 m
+.8121 .00625 L
+s
+gsave
+.8121 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(10) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.92201 0 m
+.92201 .00625 L
+s
+gsave
+.92201 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(15) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+1 0 m
+1 .00625 L
+s
+gsave
+1 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+.21374 0 m
+.21374 .00375 L
+s
+.23733 0 m
+.23733 .00375 L
+s
+.25902 0 m
+.25902 .00375 L
+s
+.27911 0 m
+.27911 .00375 L
+s
+.31531 0 m
+.31531 .00375 L
+s
+.33175 0 m
+.33175 .00375 L
+s
+.34724 0 m
+.34724 .00375 L
+s
+.3619 0 m
+.3619 .00375 L
+s
+.56371 0 m
+.56371 .00375 L
+s
+.67362 0 m
+.67362 .00375 L
+s
+.75161 0 m
+.75161 .00375 L
+s
+.78354 0 m
+.78354 .00375 L
+s
+.83794 0 m
+.83794 .00375 L
+s
+.86152 0 m
+.86152 .00375 L
+s
+.88322 0 m
+.88322 .00375 L
+s
+.90331 0 m
+.90331 .00375 L
+s
+.93951 0 m
+.93951 .00375 L
+s
+.95594 0 m
+.95594 .00375 L
+s
+.97144 0 m
+.97144 .00375 L
+s
+.9861 0 m
+.9861 .00375 L
+s
+.25 Mabswid
+0 0 m
+1 0 L
+s
+0 .23842 m
+.00625 .23842 L
+s
+gsave
+-0.0125 .23842 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(15) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .40759 m
+.00625 .40759 L
+s
+gsave
+-0.0125 .40759 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .64602 m
+.00625 .64602 L
+s
+gsave
+-0.0125 .64602 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(30) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .94639 m
+.00625 .94639 L
+s
+gsave
+-0.0125 .94639 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(50) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.14425 m
+.00625 1.14425 L
+s
+gsave
+-0.0125 1.14425 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(70) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.35398 m
+.00625 1.35398 L
+s
+gsave
+-0.0125 1.35398 -87 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(100) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.59241 m
+.00625 1.59241 L
+s
+gsave
+-0.0125 1.59241 -87 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(150) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.76158 m
+.00625 1.76158 L
+s
+gsave
+-0.0125 1.76158 -87 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(200) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 2 m
+.00625 2 L
+s
+gsave
+-0.0125 2 -87 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(300) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+0 .05605 m
+.00375 .05605 L
+s
+0 .10721 m
+.00375 .10721 L
+s
+0 .15428 m
+.00375 .15428 L
+s
+0 .19786 m
+.00375 .19786 L
+s
+0 .27638 m
+.00375 .27638 L
+s
+0 .31202 m
+.00375 .31202 L
+s
+0 .34564 m
+.00375 .34564 L
+s
+0 .37743 m
+.00375 .37743 L
+s
+0 .81518 m
+.00375 .81518 L
+s
+0 1.05361 m
+.00375 1.05361 L
+s
+0 1.22277 m
+.00375 1.22277 L
+s
+0 1.29203 m
+.00375 1.29203 L
+s
+0 1.41003 m
+.00375 1.41003 L
+s
+0 1.4612 m
+.00375 1.4612 L
+s
+0 1.50826 m
+.00375 1.50826 L
+s
+0 1.55184 m
+.00375 1.55184 L
+s
+0 1.63036 m
+.00375 1.63036 L
+s
+0 1.66601 m
+.00375 1.66601 L
+s
+0 1.69962 m
+.00375 1.69962 L
+s
+0 1.73141 m
+.00375 1.73141 L
+s
+.25 Mabswid
+0 0 m
+0 2 L
+s
+0 0 m
+1 0 L
+1 2 L
+0 2 L
+closepath
+clip
+newpath
+0 0 0 r
+.5 Mabswid
+0 1.26514 m
+.25715 1.60262 L
+.33219 1.72187 L
+.39588 1.81712 L
+.44462 1.87649 L
+.46342 1.89457 L
+.48245 1.90962 L
+.49207 1.9159 L
+.50066 1.9207 L
+.50913 1.92466 L
+.51682 1.9276 L
+.52469 1.92991 L
+.52877 1.93084 L
+.53309 1.93161 L
+.53522 1.93191 L
+.53753 1.93218 L
+.5397 1.93237 L
+.54169 1.9325 L
+.54365 1.93258 L
+.54542 1.93261 L
+.54639 1.93261 L
+.54744 1.9326 L
+.54933 1.93254 L
+.55114 1.93245 L
+.55278 1.93233 L
+.55466 1.93215 L
+.55643 1.93194 L
+.55955 1.93148 L
+.56289 1.93085 L
+.57033 1.92893 L
+.57704 1.92659 L
+.59021 1.92025 L
+.60353 1.91142 L
+.62591 1.89084 L
+.64536 1.8668 L
+.68242 1.80393 L
+.71697 1.72341 L
+.74653 1.63603 L
+.77222 1.5451 L
+.79712 1.44256 L
+.81911 1.33944 L
+.84067 1.22609 L
+.85994 1.11394 L
+.87727 1.00385 L
+.89457 .88481 L
+.91024 .76865 L
+.9245 .6558 L
+.9389 .53462 L
+.95207 .41718 L
+.96541 .2916 L
+Mistroke
+.97766 .17007 L
+.98895 .05276 L
+Mfstroke
+.98895 .05276 m
+.99381 0 L
+s
+1 0 0 r
+0 .842 m
+.08486 .82647 L
+.15481 .80996 L
+.25715 .7778 L
+.33769 .74367 L
+.39588 .71271 L
+.48136 .655 L
+.54985 .59548 L
+.60267 .53948 L
+.6453 .48661 L
+.68432 .43125 L
+.71723 .3787 L
+.74551 .32878 L
+.77269 .2762 L
+.7965 .2261 L
+.81971 .17333 L
+.84034 .12293 L
+.85879 .07483 L
+.87715 .02402 L
+s
+.87715 .02402 m
+.88534 0 L
+s
+0 0 1 r
+0 .56014 m
+.08486 .53921 L
+.15481 .51693 L
+.25715 .47342 L
+.33769 .42712 L
+.39588 .38506 L
+.48136 .3065 L
+.54985 .22532 L
+.60267 .14882 L
+.6453 .0765 L
+.68432 .00071 L
+s
+.68432 .00071 m
+.68465 0 L
+s
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{384, 768},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`400060000302000`400?l00000o`00003oo`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00G at 3oool00`000000oooo0?ooo`0L0?ooo`050000
+003oool0oooo0?ooo`0000000P3oool3000001D0oooo1 at 00000Q0?ooo`<00000;@3oool3000001`0
+oooo00<000000?ooo`3oool07 at 3oool010000000oooo0?ooo`3oool3000001l0oooo00 at 000000?oo
+o`3oool0oooo0`00000A0?ooo`D000000P3oool3000000P0oooo001M0?ooo`030000003oool0oooo
+01`0oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?ooo`3oool0000001D0oooo00<00000
+0?ooo`3oool08 at 3oool01@000000oooo0?ooo`3oool0000002/0oooo00D000000?ooo`3oool0oooo
+0000000K0?ooo`030000003oool0oooo01d0oooo00 at 000000?ooo`3oool000000`3oool00`000000
+oooo0?ooo`0L0?ooo`040000003oool0oooo000000<0oooo00<000000?ooo`3oool03`3oool00`00
+0000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000001`3oool005d0oooo00<000000?oo
+o`3oool0703oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo01 at 0oooo00<000000?oo
+o`3oool0903oool00`000000oooo0?ooo`0]0?ooo`030000003oool0oooo01X0oooo00<000000?oo
+o`3oool0703oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo01`0oooo00<00000
+0?ooo`3oool0103oool00`000000oooo0?ooo`0 at 0?ooo`050000003oool0oooo0?ooo`0000000`3o
+ool00`000000oooo0?ooo`050?ooo`00G at 3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0
+oooo00<0oooo00D000000?ooo`3oool0oooo0000000G0?ooo`030000003oool0oooo0240oooo0P00
+000/0?ooo`050000003oool0oooo0?ooo`000000703oool00`000000oooo0?ooo`0L0?ooo`040000
+003oool0oooo000000<0oooo00<000000?ooo`3oool0703oool010000000oooo0?ooo`0000030?oo
+o`030000003oool0oooo0140oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`05
+0?ooo`00F`3oool00`000000oooo0000000L0?ooo`030000003oool0000000D0oooo1000000I0?oo
+o`030000003oool0oooo0280oooo00<000000?ooo`3oool0:@3oool4000001h0oooo00<000000?oo
+o`3oool06 at 3oool00`000000oooo000000020?ooo`050000003oool0oooo0?ooo`000000703oool0
+0`000000oooo000000020?ooo`@000005 at 3oool00`000000oooo000000030?ooo`030000003oool0
+oooo00D0oooo001L0?ooo`8000007 at 3oool2000000H0oooo00<000000?ooo`3oool05 at 3oool01@00
+0000oooo0?ooo`3oool000000200oooo00D000000?ooo`3oool0oooo0000000/0?ooo`030000003o
+ool0oooo01h0oooo00<000000?ooo`3oool06P3oool200000080oooo00D000000?ooo`3oool0oooo
+0000000M0?ooo`8000000`3oool00`000000oooo0?ooo`0A0?ooo`070000003oool0oooo0?ooo`00
+0000oooo000000030?ooo`030000003oool0oooo00D0oooo001M0?ooo`030000003oool0oooo01`0
+oooo00<000000?ooo`3oool0103oool4000001D0oooo0`00000R0?ooo`<00000;@3oool4000001X0
+oooo1 at 00000L0?ooo`040000003oool0oooo0?ooo`<000007`3oool010000000oooo0?ooo`3oool4
+00000140oooo0`0000030?ooo`<00000203oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0oooo
+P at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool001h0oooo
+j`0000000`000?l0000000000012000000030?l000000000000002D000002P3oool001h0oooo00<0
+00000?ooo`3oool0?@3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo00D0oooo00<0
+00000?ooo`3oool01 at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo00<0oooo00<0
+00000?ooo`3oool00`3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0080oooo00<0
+00000?ooo`3oool00P3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo0280oooo00<0
+00000?ooo`3oool0603oool00`000000oooo0?ooo`0B0?ooo`030000003oool0oooo00h0oooo00 at 0
+00000?ooo`3oool0003o2P3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0oooo00P0oooo
+00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo00D0oooo
+00<000000?ooo`3oool01 at 3oool00`000000o`000?ooo`040?ooo`030000003oool0oooo00<0oooo
+00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0080oooo
+00<000000?ooo`3oool00P3oool01P000000oooo0?ooo`000000oooo000000X0oooo000N0?ooo`03
+0000003oool0oooo03d0oooo00<000000?ooo`3oool08`3oool00`000000oooo0?ooo`0H0?ooo`03
+0000003oool0oooo0280oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`0A0?ooo`03
+0000o`3oool0oooo00P0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`0E0?ooo`03
+0?l0003oool0oooo00X0oooo00<000000?ooo`3oool05P3oool00`000000oooo0000000:0?ooo`00
+7P3oool00`000000oooo0?ooo`3V0?ooo`030000o`3oool0oooo04<0oooo00<0o`000?ooo`3oool0
+8`3oool00`000000oooo0?ooo`0:0?ooo`007P3oool00`000000oooo0?ooo`3V0?ooo`030000o`3o
+ool0oooo0480oooo00<0o`000?ooo`3oool0903oool00`000000oooo0?ooo`0:0?ooo`007P3oool0
+0`000000oooo0?ooo`3U0?ooo`030000o`3oool0oooo04<0oooo00<0o`000?ooo`3oool08`3oool0
+0`000000oooo0?ooo`0;0?ooo`007P3oool00`000000oooo0?ooo`3U0?ooo`030000o`3oool0oooo
+04<0oooo00<0o`000?ooo`3oool08`3oool00`000000oooo0?ooo`0;0?ooo`007P3oool00`000000
+oooo0?ooo`3T0?ooo`030000o`3oool0oooo04<0oooo00<0o`000?ooo`3oool0903oool00`000000
+oooo0?ooo`0;0?ooo`007P3oool00`000000oooo0?ooo`3T0?ooo`030000o`3oool0oooo04<0oooo
+00<0o`000?ooo`3oool0903oool00`000000oooo0?ooo`0;0?ooo`007P3oool00`000000oooo0?oo
+o`3S0?ooo`030000o`3oool0oooo04 at 0oooo00<0o`000?ooo`3oool0903oool00`000000oooo0?oo
+o`0;0?ooo`007P3oool00`000000oooo0?ooo`3S0?ooo`030000o`3oool0oooo04<0oooo00<0o`00
+0?ooo`3oool09 at 3oool00`000000oooo0?ooo`0;0?ooo`007P3oool00`000000oooo0?ooo`3R0?oo
+o`030000o`3oool0oooo04 at 0oooo00<0o`000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0;0?oo
+o`007P3oool00`000000oooo0?ooo`3R0?ooo`030000o`3oool0oooo04 at 0oooo00<0o`000?ooo`3o
+ool09 at 3oool00`000000oooo0?ooo`0;0?ooo`007P3oool00`000000oooo0?ooo`3Q0?ooo`030000
+o`3oool0oooo04 at 0oooo00<0o`000?ooo`3oool09P3oool00`000000oooo0?ooo`0;0?ooo`007P3o
+ool00`000000oooo0?ooo`3P0?ooo`030000o`3oool0oooo04D0oooo00<0o`000?ooo`3oool09 at 3o
+ool00`000000oooo0?ooo`0<0?ooo`007P3oool00`000000oooo0?ooo`3P0?ooo`030000o`3oool0
+oooo04D0oooo00<0o`000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0<0?ooo`007P3oool00`00
+0000oooo0?ooo`3O0?ooo`030000o`3oool0oooo04D0oooo00<0o`000?ooo`3oool09P3oool00`00
+0000oooo0?ooo`0<0?ooo`007P3oool00`000000oooo0?ooo`3O0?ooo`030000o`3oool0oooo04D0
+oooo00<0o`000?ooo`3oool09P3oool00`000000oooo0?ooo`0<0?ooo`007P3oool00`000000oooo
+0?ooo`3N0?ooo`030000o`3oool0oooo04D0oooo00<0o`000?ooo`3oool09`3oool00`000000oooo
+0?ooo`0<0?ooo`007P3oool200000=l0oooo00<0003o0?ooo`3oool0A at 3oool00`3o0000oooo0?oo
+o`0W0?ooo`030000003oool0oooo00`0oooo000N0?ooo`030000003oool0oooo0=d0oooo00<0003o
+0?ooo`3oool0AP3oool00`3o0000oooo0?ooo`0W0?ooo`030000003oool0oooo00`0oooo000N0?oo
+o`030000003oool0oooo0=d0oooo00<0003o0?ooo`3oool0A at 3oool00`3o0000oooo0?ooo`0X0?oo
+o`030000003oool0oooo00`0oooo000N0?ooo`030000003oool0oooo0=`0oooo00<0003o0?ooo`3o
+ool0AP3oool00`3o0000oooo0?ooo`0X0?ooo`030000003oool0oooo00`0oooo000N0?ooo`030000
+003oool0oooo0=`0oooo00<0003o0?ooo`3oool0AP3oool00`3o0000oooo0?ooo`0W0?ooo`030000
+003oool0oooo00d0oooo000N0?ooo`030000003oool0oooo0=/0oooo00<0003o0?ooo`3oool0AP3o
+ool00`3o0000oooo0?ooo`0X0?ooo`030000003oool0oooo00d0oooo000N0?ooo`030000003oool0
+oooo0=/0oooo00<0003o0?ooo`3oool0AP3oool00`3o0000oooo0?ooo`0X0?ooo`030000003oool0
+oooo00d0oooo000N0?ooo`030000003oool0oooo0=X0oooo00<0003o0?ooo`3oool0A`3oool00`3o
+0000oooo0?ooo`0X0?ooo`030000003oool0oooo00d0oooo000N0?ooo`030000003oool0oooo0=T0
+oooo00<0003o0?ooo`3oool0A`3oool00`3o0000oooo0?ooo`0Y0?ooo`030000003oool0oooo00d0
+oooo000N0?ooo`030000003oool0oooo0=T0oooo00<0003o0?ooo`3oool0A`3oool00`3o0000oooo
+0?ooo`0Y0?ooo`030000003oool0oooo00d0oooo000N0?ooo`030000003oool0oooo0=P0oooo00<0
+003o0?ooo`3oool0A`3oool00`3o0000oooo0?ooo`0Z0?ooo`030000003oool0oooo00d0oooo000N
+0?ooo`030000003oool0oooo0=P0oooo00<0003o0?ooo`3oool0A`3oool00`3o0000oooo0?ooo`0Z
+0?ooo`030000003oool0oooo00d0oooo000N0?ooo`030000003oool0oooo0=L0oooo00<0003o0?oo
+o`3oool0B03oool00`3o0000oooo0?ooo`0Z0?ooo`030000003oool0oooo00d0oooo000N0?ooo`03
+0000003oool0oooo0=L0oooo00<0003o0?ooo`3oool0A`3oool00`3o0000oooo0?ooo`0[0?ooo`03
+0000003oool0oooo00d0oooo000N0?ooo`030000003oool0oooo0=H0oooo00<0003o0?ooo`3oool0
+B03oool00`3o0000oooo0?ooo`0Z0?ooo`030000003oool0oooo00h0oooo000N0?ooo`030000003o
+ool0oooo0=H0oooo00<0003o0?ooo`3oool0A`3oool00`3o0000oooo0?ooo`0[0?ooo`030000003o
+ool0oooo00h0oooo000N0?ooo`030000003oool0oooo0=D0oooo00<0003o0?ooo`3oool0B03oool0
+0`3o0000oooo0?ooo`0[0?ooo`030000003oool0oooo00h0oooo000N0?ooo`800000e at 3oool00`00
+0?l0oooo0?ooo`180?ooo`030?l0003oool0oooo02`0oooo00<000000?ooo`3oool03P3oool001h0
+oooo00<000000?ooo`3oool0e03oool00`000?l0oooo0?ooo`180?ooo`030?l0003oool0oooo02`0
+oooo00<000000?ooo`3oool03P3oool001h0oooo00<000000?ooo`3oool0d`3oool00`000?l0oooo
+0?ooo`190?ooo`030?l0003oool0oooo02`0oooo00<000000?ooo`3oool03P3oool001h0oooo00<0
+00000?ooo`3oool0d`3oool00`000?l0oooo0?ooo`180?ooo`030?l0003oool0oooo02d0oooo00<0
+00000?ooo`3oool03P3oool001h0oooo00<000000?ooo`3oool0dP3oool00`000?l0oooo0?ooo`19
+0?ooo`030?l0003oool0oooo02d0oooo00<000000?ooo`3oool03P3oool001h0oooo00<000000?oo
+o`3oool0dP3oool00`000?l0oooo0?ooo`180?ooo`030?l0003oool0oooo02h0oooo00<000000?oo
+o`3oool03P3oool001h0oooo00<000000?ooo`3oool0d at 3oool00`000?l0oooo0?ooo`190?ooo`03
+0?l0003oool0oooo02h0oooo00<000000?ooo`3oool03P3oool001h0oooo00<000000?ooo`3oool0
+d03oool00`000?l0oooo0?ooo`1:0?ooo`030?l0003oool0oooo02d0oooo00<000000?ooo`3oool0
+3`3oool001h0oooo00<000000?ooo`3oool0d03oool00`000?l0oooo0?ooo`190?ooo`030?l0003o
+ool0oooo02h0oooo00<000000?ooo`3oool03`3oool001h0oooo00<000000?ooo`3oool0c`3oool0
+0`000?l0oooo0?ooo`1:0?ooo`030?l0003oool0oooo02h0oooo00<000000?ooo`3oool03`3oool0
+01h0oooo00<000000?ooo`3oool0c`3oool00`000?l0oooo0?ooo`190?ooo`030?l0003oool0oooo
+02l0oooo00<000000?ooo`3oool03`3oool001h0oooo00<000000?ooo`3oool0cP3oool00`000?l0
+oooo0?ooo`1:0?ooo`030?l0003oool0oooo02l0oooo00<000000?ooo`3oool03`3oool001h0oooo
+00<000000?ooo`3oool0cP3oool00`000?l0oooo0?ooo`1:0?ooo`030?l0003oool0oooo02l0oooo
+00<000000?ooo`3oool03`3oool001h0oooo00<000000?ooo`3oool0c at 3oool00`000?l0oooo0?oo
+o`1:0?ooo`030?l0003oool0oooo0300oooo00<000000?ooo`3oool03`3oool001h0oooo00<00000
+0?ooo`3oool0c at 3oool00`000?l0oooo0?ooo`1:0?ooo`030?l0003oool0oooo0300oooo00<00000
+0?ooo`3oool03`3oool001h0oooo00<000000?ooo`3oool0c03oool00`000?l0oooo0?ooo`1:0?oo
+o`030?l0003oool0oooo0340oooo00<000000?ooo`3oool03`3oool001h0oooo00<000000?ooo`3o
+ool0b`3oool00`000?l0oooo0?ooo`1;0?ooo`030?l0003oool0oooo0340oooo00<000000?ooo`3o
+ool03`3oool001h0oooo0P00003<0?ooo`030000o`3oool0oooo04X0oooo00<0o`000?ooo`3oool0
+<@3oool00`000000oooo0?ooo`0 at 0?ooo`007P3oool00`000000oooo0?ooo`3:0?ooo`030000o`3o
+ool0oooo04/0oooo00<0o`000?ooo`3oool0<@3oool00`000000oooo0?ooo`0 at 0?ooo`007P3oool0
+0`000000oooo0?ooo`390?ooo`030000o`3oool0oooo04`0oooo00<0o`000?ooo`3oool0<@3oool0
+0`000000oooo0?ooo`0 at 0?ooo`007P3oool00`000000oooo0?ooo`390?ooo`030000o`3oool0oooo
+04/0oooo00<0o`000?ooo`3oool0<P3oool00`000000oooo0?ooo`0 at 0?ooo`007P3oool00`000000
+oooo0?ooo`380?ooo`030000o`3oool0oooo04`0oooo00<0o`000?ooo`3oool0<P3oool00`000000
+oooo0?ooo`0 at 0?ooo`007P3oool00`000000oooo0?ooo`370?ooo`030000o`3oool0oooo04`0oooo
+00<0o`000?ooo`3oool0<`3oool00`000000oooo0?ooo`0 at 0?ooo`007P3oool00`000000oooo0?oo
+o`360?ooo`030000o`3oool0oooo04d0oooo00<0o`000?ooo`3oool0<`3oool00`000000oooo0?oo
+o`0 at 0?ooo`007P3oool00`000000oooo0?ooo`360?ooo`030000o`3oool0oooo04d0oooo00<0o`00
+0?ooo`3oool0<`3oool00`000000oooo0?ooo`0 at 0?ooo`007P3oool00`000000oooo0?ooo`350?oo
+o`030000o`3oool0oooo04d0oooo00<0o`000?ooo`3oool0=03oool00`000000oooo0?ooo`0 at 0?oo
+o`007P3oool00`000000oooo0?ooo`340?ooo`030000o`3oool0oooo04h0oooo00<0o`000?ooo`3o
+ool0=03oool00`000000oooo0?ooo`0 at 0?ooo`007P3oool00`000000oooo0?ooo`340?ooo`030000
+o`3oool0oooo04d0oooo00<0o`000?ooo`3oool0=@3oool00`000000oooo0?ooo`0 at 0?ooo`007P3o
+ool00`000000oooo0?ooo`330?ooo`030000o`3oool0oooo04h0oooo00<0o`000?ooo`3oool0=03o
+ool00`000000oooo0?ooo`0A0?ooo`007P3oool00`000000oooo0?ooo`320?ooo`030000o`3oool0
+oooo04h0oooo00<0o`000?ooo`3oool0=@3oool00`000000oooo0?ooo`0A0?ooo`007P3oool00`00
+0000oooo0?ooo`320?ooo`030000o`3oool0oooo04h0oooo00<0o`000?ooo`3oool0=@3oool00`00
+0000oooo0?ooo`0A0?ooo`007P3oool00`000000oooo0?ooo`310?ooo`030000o`3oool0oooo04h0
+oooo00<0o`000?ooo`3oool0=P3oool00`000000oooo0?ooo`0A0?ooo`007P3oool200000<40oooo
+00<0003o0?ooo`3oool0C`3oool00`3o0000oooo0?ooo`0f0?ooo`030000003oool0oooo0140oooo
+000N0?ooo`030000003oool0oooo0<00oooo00<0003o0?ooo`3oool0C`3oool00`3o0000oooo0?oo
+o`0f0?ooo`030000003oool0oooo0140oooo000N0?ooo`030000003oool0oooo0;l0oooo00<0003o
+0?ooo`3oool0C`3oool00`3o0000oooo0?ooo`0g0?ooo`030000003oool0oooo0140oooo000N0?oo
+o`030000003oool0oooo0;h0oooo00<0003o0?ooo`3oool0D03oool00`3o0000oooo0?ooo`0g0?oo
+o`030000003oool0oooo0140oooo000N0?ooo`030000003oool0oooo0;d0oooo00<0003o0?ooo`3o
+ool0D03oool00`3o0000oooo0?ooo`0h0?ooo`030000003oool0oooo0140oooo000N0?ooo`030000
+003oool0oooo0;d0oooo00<0003o0?ooo`3oool0D03oool00`3o0000oooo0?ooo`0h0?ooo`030000
+003oool0oooo0140oooo000N0?ooo`030000003oool0oooo0;`0oooo00<0003o0?ooo`3oool0D03o
+ool00`3o0000oooo0?ooo`0h0?ooo`030000003oool0oooo0180oooo000N0?ooo`030000003oool0
+oooo0;/0oooo00<0003o0?ooo`3oool0D at 3oool00`3o0000oooo0?ooo`0h0?ooo`030000003oool0
+oooo0180oooo000N0?ooo`030000003oool0oooo0;/0oooo00<0003o0?ooo`3oool0D03oool00`3o
+0000oooo0?ooo`0i0?ooo`030000003oool0oooo0180oooo000N0?ooo`030000003oool0oooo0;X0
+oooo00<0003o0?ooo`3oool0D at 3oool00`3o0000oooo0?ooo`0i0?ooo`030000003oool0oooo0180
+oooo000N0?ooo`030000003oool0oooo0;T0oooo00<0003o0?ooo`3oool0DP3oool00`3o0000oooo
+0?ooo`0i0?ooo`030000003oool0oooo0180oooo000N0?ooo`030000003oool0oooo0;P0oooo00<0
+003o0?ooo`3oool0DP3oool00`3o0000oooo0?ooo`0j0?ooo`030000003oool0oooo0180oooo000<
+0?ooo`040000003oool0oooo0?ooo`<000002`3oool00`000000oooo0?ooo`2g0?ooo`030000o`3o
+ool0oooo05<0oooo00<0o`000?ooo`3oool0>P3oool00`000000oooo0?ooo`0B0?ooo`00303oool0
+10000000oooo0?ooo`0000030?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0]`3o
+ool00`000?l0oooo0?ooo`1B0?ooo`030?l0003oool0oooo03/0oooo00<000000?ooo`3oool04P3o
+ool000`0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`080?ooo`<00000]P3oool0
+0`000?l0oooo0?ooo`1C0?ooo`030?l0003oool0oooo03/0oooo00<000000?ooo`3oool04P3oool0
+00`0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`080?ooo`030000003oool0
+oooo0;D0oooo00<0003o0?ooo`3oool0D`3oool00`3o0000oooo0?ooo`0l0?ooo`030000003oool0
+oooo0180oooo000:0?ooo`030000003oool000000080oooo1000000;0?ooo`030000003oool0oooo
+0;@0oooo00<0003o0?ooo`3oool0E03oool00`3o0000oooo0?ooo`0l0?ooo`030000003oool0oooo
+0180oooo000;0?ooo`8000000`3oool00`000000oooo0?ooo`0;0?ooo`030000003oool0oooo0;<0
+oooo00<0003o0?ooo`3oool0E03oool00`3o0000oooo0?ooo`0l0?ooo`030000003oool0oooo01<0
+oooo000<0?ooo`040000003oool0oooo0?ooo`@000002P3oool00`000000oooo0?ooo`2b0?ooo`03
+0000o`3oool0oooo05D0oooo00<0o`000?ooo`3oool0?03oool00`000000oooo0?ooo`0C0?ooo`00
+7P3oool00`000000oooo0?ooo`2a0?ooo`030000o`3oool0oooo05D0oooo00<0o`000?ooo`3oool0
+?@3oool00`000000oooo0?ooo`0C0?ooo`007P3oool00`000000oooo0?ooo`2a0?ooo`030000o`3o
+ool0oooo05D0oooo00<0o`000?ooo`3oool0?@3oool00`000000oooo0?ooo`0C0?ooo`007P3oool0
+0`000000oooo0?ooo`2`0?ooo`030000o`3oool0oooo05D0oooo00<0o`000?ooo`3oool0?P3oool0
+0`000000oooo0?ooo`0C0?ooo`007P3oool00`000000oooo0?ooo`2_0?ooo`030000o`3oool0oooo
+05H0oooo00<0o`000?ooo`3oool0?P3oool00`000000oooo0?ooo`0C0?ooo`007P3oool00`000000
+oooo0?ooo`2^0?ooo`030000o`3oool0oooo05H0oooo00<0o`000?ooo`3oool0?`3oool00`000000
+oooo0?ooo`0C0?ooo`007P3oool00`000000oooo0?ooo`2]0?ooo`030000o`3oool0oooo05L0oooo
+00<0o`000?ooo`3oool0?`3oool00`000000oooo0?ooo`0C0?ooo`007P3oool00`000000oooo0?oo
+o`2/0?ooo`030000o`3oool0oooo05L0oooo00<0o`000?ooo`3oool0 at 03oool00`000000oooo0?oo
+o`0C0?ooo`007P3oool00`000000oooo0?ooo`2[0?ooo`030000o`3oool0oooo05P0oooo00<0o`00
+0?ooo`3oool0 at 03oool00`000000oooo0?ooo`0C0?ooo`007P3oool200000:`0oooo00<0003o0?oo
+o`3oool0F03oool00`3o0000oooo0?ooo`0o0?ooo`030000003oool0oooo01 at 0oooo000N0?ooo`03
+0000003oool0oooo0:X0oooo00<0003o0?ooo`3oool0F03oool00`3o0000oooo0?ooo`100?ooo`03
+0000003oool0oooo01 at 0oooo000N0?ooo`030000003oool0oooo0:T0oooo00<0003o0?ooo`3oool0
+F at 3oool00`3o0000oooo0?ooo`100?ooo`030000003oool0oooo01 at 0oooo000N0?ooo`030000003o
+ool0oooo0:P0oooo00<0003o0?ooo`3oool0F at 3oool00`3o0000oooo0?ooo`110?ooo`030000003o
+ool0oooo01 at 0oooo000N0?ooo`030000003oool0oooo0:L0oooo00<0003o0?ooo`3oool0FP3oool0
+0`3o0000oooo0?ooo`110?ooo`030000003oool0oooo01 at 0oooo000N0?ooo`030000003oool0oooo
+0:H0oooo00<0003o0?ooo`3oool0FP3oool00`3o0000oooo0?ooo`120?ooo`030000003oool0oooo
+01 at 0oooo000N0?ooo`030000003oool0oooo0:D0oooo00<0003o0?ooo`3oool0F`3oool00`3o0000
+oooo0?ooo`120?ooo`030000003oool0oooo01 at 0oooo000N0?ooo`030000003oool0oooo0:D0oooo
+00<0003o0?ooo`3oool0FP3oool00`3o0000oooo0?ooo`130?ooo`030000003oool0oooo01 at 0oooo
+000N0?ooo`030000003oool0oooo0:@0oooo00<0003o0?ooo`3oool0F`3oool00`3o0000oooo0?oo
+o`130?ooo`030000003oool0oooo01 at 0oooo000N0?ooo`030000003oool0oooo0:<0oooo00<0003o
+0?ooo`3oool0F`3oool00`3o0000oooo0?ooo`140?ooo`030000003oool0oooo01 at 0oooo000N0?oo
+o`030000003oool0oooo0:80oooo00<0003o0?ooo`3oool0G03oool00`3o0000oooo0?ooo`140?oo
+o`030000003oool0oooo01 at 0oooo000N0?ooo`030000003oool0oooo0:40oooo00<0003o0?ooo`3o
+ool0G03oool00`3o0000oooo0?ooo`140?ooo`030000003oool0oooo01D0oooo000N0?ooo`800000
+X at 3oool00`000?l0oooo0?ooo`1M0?ooo`030?l0003oool0oooo04 at 0oooo00<000000?ooo`3oool0
+5 at 3oool001h0oooo00<000000?ooo`3oool0W`3oool00`000?l0oooo0?ooo`1M0?ooo`030?l0003o
+ool0oooo04D0oooo00<000000?ooo`3oool05 at 3oool001h0oooo00<000000?ooo`3oool0WP3oool0
+0`000?l0oooo0?ooo`1N0?ooo`030?l0003oool0oooo04D0oooo00<000000?ooo`3oool05 at 3oool0
+01h0oooo00<000000?ooo`3oool0W at 3oool00`000?l0oooo0?ooo`1N0?ooo`030?l0003oool0oooo
+04H0oooo00<000000?ooo`3oool05 at 3oool001h0oooo00<000000?ooo`3oool0W03oool00`000?l0
+oooo0?ooo`1O0?ooo`030?l0003oool0oooo04H0oooo00<000000?ooo`3oool05 at 3oool001h0oooo
+00<000000?ooo`3oool0VP3oool20000of40oooo00<0o`000?ooo`3oool0A`3oool00`000000oooo
+0?ooo`0E0?ooo`007P3oool00`000000oooo0?ooo`2I0?ooo`030000o`3oool0oooo0640oooo00<0
+o`000?ooo`3oool0A`3oool00`000000oooo0?ooo`0E0?ooo`007P3oool00`000000oooo0?ooo`2H
+0?ooo`030000o`3oool0oooo0640oooo00<0o`000?ooo`3oool0B03oool00`000000oooo0?ooo`0E
+0?ooo`007P3oool00`000000oooo0?ooo`2G0?ooo`030000o`3oool0oooo0680oooo00<0o`000?oo
+o`3oool0B03oool00`000000oooo0?ooo`0E0?ooo`007P3oool00`000000oooo0?ooo`2F0?ooo`03
+0000o`3oool0oooo0680oooo00<0o`000?ooo`3oool0B at 3oool00`000000oooo0?ooo`0E0?ooo`00
+7P3oool00`000000oooo0?ooo`2E0?ooo`030000o`3oool0oooo06<0oooo00<0o`000?ooo`3oool0
+B03oool00`000000oooo0?ooo`0F0?ooo`007P3oool2000009D0oooo00<0003o0?ooo`3oool0H`3o
+ool00`3o0000oooo0?ooo`190?ooo`030000003oool0oooo01H0oooo000N0?ooo`030000003oool0
+oooo09<0oooo00<0003o0?ooo`3oool0H`3oool00`3o0000oooo0?ooo`1:0?ooo`030000003oool0
+oooo01H0oooo000N0?ooo`030000003oool0oooo0980oooo00<0003o0?ooo`3oool0I03oool00`3o
+0000oooo0?ooo`1:0?ooo`030000003oool0oooo01H0oooo000N0?ooo`030000003oool0oooo0940
+oooo00<0003o0?ooo`3oool0I03oool00`3o0000oooo0?ooo`1;0?ooo`030000003oool0oooo01H0
+oooo000N0?ooo`030000003oool0oooo0900oooo00<0003o0?ooo`3oool0I at 3oool00`3o0000oooo
+0?ooo`1;0?ooo`030000003oool0oooo01H0oooo000N0?ooo`030000003oool0oooo08l0oooo00<0
+003o0?ooo`3oool0I at 3oool00`3o0000oooo0?ooo`1<0?ooo`030000003oool0oooo01H0oooo000N
+0?ooo`030000003oool0oooo08h0oooo00<0003o0?ooo`3oool0IP3oool00`3o0000oooo0?ooo`1<
+0?ooo`030000003oool0oooo01H0oooo000N0?ooo`030000003oool0oooo08`0oooo0P000?mX0?oo
+o`030?l0003oool0oooo04d0oooo00<000000?ooo`3oool05P3oool001h0oooo00<000000?ooo`3o
+ool0R`3oool00`000?l0oooo0?ooo`1W0?ooo`030?l0003oool0oooo04h0oooo00<000000?ooo`3o
+ool05P3oool001h0oooo00<000000?ooo`3oool0RP3oool00`000?l0oooo0?ooo`1X0?ooo`030?l0
+003oool0oooo04d0oooo00<000000?ooo`3oool05`3oool001h0oooo00<000000?ooo`3oool0R at 3o
+ool00`000?l0oooo0?ooo`1X0?ooo`030?l0003oool0oooo04h0oooo00<000000?ooo`3oool05`3o
+ool001h0oooo0P0000290?ooo`030000o`3oool0oooo06T0oooo00<0o`000?ooo`3oool0CP3oool0
+0`000000oooo0?ooo`0G0?ooo`007P3oool00`000000oooo0?ooo`270?ooo`030000o`3oool0oooo
+06T0oooo00<0o`000?ooo`3oool0C`3oool00`000000oooo0?ooo`0G0?ooo`007P3oool00`000000
+oooo0?ooo`260?ooo`030000o`3oool0oooo06T0oooo00<0o`000?ooo`3oool0D03oool00`000000
+oooo0?ooo`0G0?ooo`007P3oool00`000000oooo0?ooo`250?ooo`030000o`3oool0oooo06X0oooo
+00<0o`000?ooo`3oool0D03oool00`000000oooo0?ooo`0G0?ooo`007P3oool00`000000oooo0?oo
+o`230?ooo`80003oK03oool00`3o0000oooo0?ooo`1A0?ooo`030000003oool0oooo01L0oooo000N
+0?ooo`030000003oool0oooo0880oooo00<0003o0?ooo`3oool0K03oool00`3o0000oooo0?ooo`1A
+0?ooo`030000003oool0oooo01L0oooo000N0?ooo`030000003oool0oooo0840oooo00<0003o0?oo
+o`3oool0K03oool00`3o0000oooo0?ooo`1B0?ooo`030000003oool0oooo01L0oooo000N0?ooo`03
+0000003oool0oooo07l0oooo0P000?m^0?ooo`030?l0003oool0oooo05<0oooo00<000000?ooo`3o
+ool05`3oool001h0oooo00<000000?ooo`3oool0OP3oool00`000?l0oooo0?ooo`1^0?ooo`030?l0
+003oool0oooo05<0oooo00<000000?ooo`3oool05`3oool000T0oooo1 at 0000020?ooo`<000002`3o
+ool00`000000oooo0?ooo`1l0?ooo`80003oL03oool00`3o0000oooo0?ooo`1C0?ooo`030000003o
+ool0oooo01P0oooo000:0?ooo`030000003oool0oooo0080oooo00D000000?ooo`3oool0oooo0000
+000:0?ooo`030000003oool0oooo07/0oooo00<0003o0?ooo`3oool0K`3oool00`3o0000oooo0?oo
+o`1D0?ooo`030000003oool0oooo01P0oooo000;0?ooo`050000003oool0oooo0?ooo`0000000`3o
+ool00`000000oooo0?ooo`080?ooo`<00000N at 3oool20000og80oooo00<0o`000?ooo`3oool0E03o
+ool00`000000oooo0?ooo`0H0?ooo`00303oool010000000oooo0?ooo`0000030?ooo`030000003o
+ool0oooo00P0oooo00<000000?ooo`3oool0N03oool00`000?l0oooo0?ooo`1a0?ooo`030?l0003o
+ool0oooo05D0oooo00<000000?ooo`3oool0603oool000d0oooo00<000000?ooo`0000000`3oool0
+0`000000oooo0?ooo`080?ooo`030000003oool0oooo07L0oooo00<0003o0?ooo`3oool0LP3oool0
+0`3o0000oooo0?ooo`1E0?ooo`030000003oool0oooo01P0oooo00090?ooo`070000003oool0oooo
+0?ooo`000000oooo000000030?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0M at 3o
+ool20000og at 0oooo00<0o`000?ooo`3oool0EP3oool00`000000oooo0?ooo`0H0?ooo`002P3oool3
+000000<0oooo0`00000;0?ooo`030000003oool0oooo07 at 0oooo00<0003o0?ooo`3oool0L`3oool0
+0`3o0000oooo0?ooo`1G0?ooo`030000003oool0oooo01P0oooo000N0?ooo`030000003oool0oooo
+0780oooo0P000?mf0?ooo`030?l0003oool0oooo05L0oooo00<000000?ooo`3oool0603oool001h0
+oooo00<000000?ooo`3oool0L at 3oool00`000?l0oooo0?ooo`1e0?ooo`030?l0003oool0oooo05P0
+oooo00<000000?ooo`3oool0603oool001h0oooo00<000000?ooo`3oool0K`3oool20000ogP0oooo
+00<0o`000?ooo`3oool0E`3oool00`000000oooo0?ooo`0I0?ooo`007P3oool00`000000oooo0?oo
+o`1]0?ooo`80003oN at 3oool00`3o0000oooo0?ooo`1H0?ooo`030000003oool0oooo01T0oooo000N
+0?ooo`030000003oool0oooo06/0oooo0P000?mj0?ooo`030?l0003oool0oooo05T0oooo00<00000
+0?ooo`3oool06 at 3oool001h0oooo00<000000?ooo`3oool0JP3oool00`000?l0oooo0?ooo`1j0?oo
+o`030?l0003oool0oooo05T0oooo00<000000?ooo`3oool06 at 3oool001h0oooo00<000000?ooo`3o
+ool0J03oool20000og`0oooo00<0o`000?ooo`3oool0FP3oool00`000000oooo0?ooo`0I0?ooo`00
+7P3oool00`000000oooo0?ooo`1V0?ooo`80003oO at 3oool00`3o0000oooo0?ooo`1K0?ooo`030000
+003oool0oooo01T0oooo000N0?ooo`030000003oool0oooo06 at 0oooo0P000?mn0?ooo`030?l0003o
+ool0oooo05`0oooo00<000000?ooo`3oool06 at 3oool001h0oooo00<000000?ooo`3oool0H`3oool0
+0`000?l0oooo0?ooo`1n0?ooo`030?l0003oool0oooo05`0oooo00<000000?ooo`3oool06 at 3oool0
+01h0oooo00<000000?ooo`3oool0H at 3oool20000oh00oooo00<0o`000?ooo`3oool0G03oool00`00
+0000oooo0?ooo`0J0?ooo`007P3oool00`000000oooo0?ooo`1O0?ooo`80003oP at 3oool00`3o0000
+oooo0?ooo`1M0?ooo`030000003oool0oooo01X0oooo000N0?ooo`030000003oool0oooo05d0oooo
+0P000?n20?ooo`030?l0003oool0oooo05h0oooo00<000000?ooo`3oool06P3oool001h0oooo00<0
+00000?ooo`3oool0G03oool00`000?l0oooo0?ooo`220?ooo`030?l0003oool0oooo05h0oooo00<0
+00000?ooo`3oool06P3oool001h0oooo00<000000?ooo`3oool0FP3oool20000oh at 0oooo00<0o`00
+0?ooo`3oool0G`3oool00`000000oooo0?ooo`0J0?ooo`007P3oool00`000000oooo0?ooo`1H0?oo
+o`80003oQ at 3oool00`3o0000oooo0?ooo`1P0?ooo`030000003oool0oooo01X0oooo000N0?ooo`03
+0000003oool0oooo05H0oooo0P000?n60?ooo`030?l0003oool0oooo0640oooo00<000000?ooo`3o
+ool06P3oool001h0oooo00<000000?ooo`3oool0E03oool20000ohP0oooo00<0o`000?ooo`3oool0
+H at 3oool00`000000oooo0?ooo`0J0?ooo`007P3oool00`000000oooo0?ooo`1B0?ooo`80003oR at 3o
+ool00`3o0000oooo0?ooo`1Q0?ooo`030000003oool0oooo01/0oooo000N0?ooo`030000003oool0
+oooo0500oooo0P000?n:0?ooo`030?l0003oool0oooo0680oooo00<000000?ooo`3oool06`3oool0
+01h0oooo00<000000?ooo`3oool0C at 3oool30000oh/0oooo00<0o`000?ooo`3oool0H`3oool00`00
+0000oooo0?ooo`0K0?ooo`007P3oool00`000000oooo0?ooo`1;0?ooo`80003oSP3oool00`3o0000
+oooo0?ooo`1S0?ooo`030000003oool0oooo01/0oooo000N0?ooo`030000003oool0oooo04T0oooo
+0P000?n?0?ooo`030?l0003oool0oooo06 at 0oooo00<000000?ooo`3oool06`3oool001h0oooo00<0
+00000?ooo`3oool0AP3oool30000oi00oooo00<0o`000?ooo`3oool0I at 3oool00`000000oooo0?oo
+o`0K0?ooo`007P3oool00`000000oooo0?ooo`140?ooo`80003oTP3oool00`3o0000oooo0?ooo`1V
+0?ooo`030000003oool0oooo01/0oooo000N0?ooo`030000003oool0oooo0480oooo0P000?nD0?oo
+o`030?l0003oool0oooo06H0oooo00<000000?ooo`3oool06`3oool001h0oooo00<000000?ooo`3o
+ool0?`3oool30000oiD0oooo00<0o`000?ooo`3oool0IP3oool00`000000oooo0?ooo`0L0?ooo`00
+7P3oool00`000000oooo0?ooo`0m0?ooo`80003oU`3oool00`3o0000oooo0?ooo`1W0?ooo`030000
+003oool0oooo01`0oooo000N0?ooo`030000003oool0oooo03/0oooo0P000?nH0?ooo`030?l0003o
+ool0oooo06P0oooo00<000000?ooo`3oool0703oool001h0oooo00<000000?ooo`3oool0>03oool3
+0000oiX0oooo00<0o`000?ooo`3oool0J03oool00`000000oooo0?ooo`0L0?ooo`007P3oool00`00
+0000oooo0?ooo`0f0?ooo`80003oW03oool00`3o0000oooo0?ooo`1Y0?ooo`030000003oool0oooo
+01`0oooo000N0?ooo`030000003oool0oooo03 at 0oooo0P000?nM0?ooo`030?l0003oool0oooo06X0
+oooo00<000000?ooo`3oool0703oool001h0oooo00<000000?ooo`3oool0<@3oool30000oih0oooo
+00<0o`000?ooo`3oool0J`3oool00`000000oooo0?ooo`0L0?ooo`007P3oool00`000000oooo0?oo
+o`0^0?ooo`<0003oX03oool00`3o0000oooo0?ooo`1/0?ooo`030000003oool0oooo01`0oooo000N
+0?ooo`030000003oool0oooo02/0oooo0`000?nS0?ooo`030?l0003oool0oooo06/0oooo00<00000
+0?ooo`3oool07 at 3oool001h0oooo00<000000?ooo`3oool0:03oool30000ojD0oooo00<0o`000?oo
+o`3oool0K03oool00`000000oooo0?ooo`0M0?ooo`007P3oool00`000000oooo0?ooo`0U0?ooo`<0
+003oY`3oool00`3o0000oooo0?ooo`1]0?ooo`030000003oool0oooo01d0oooo000N0?ooo`030000
+003oool0oooo0280oooo0`000?nY0?ooo`030?l0003oool0oooo06h0oooo00<000000?ooo`3oool0
+7 at 3oool001h0oooo00<000000?ooo`3oool07`3oool30000oj`0oooo00<0o`000?ooo`3oool0KP3o
+ool00`000000oooo0?ooo`0M0?ooo`007P3oool00`000000oooo0?ooo`0L0?ooo`<0003o[P3oool0
+0`3o0000oooo0?ooo`1_0?ooo`030000003oool0oooo01d0oooo000N0?ooo`030000003oool0oooo
+01P0oooo10000?n`0?ooo`030?l0003oool0oooo0700oooo00<000000?ooo`3oool07 at 3oool001h0
+oooo00<000000?ooo`3oool0503oool40000ok<0oooo00<0o`000?ooo`3oool0L at 3oool00`000000
+oooo0?ooo`0M0?ooo`007P3oool00`000000oooo0?ooo`0 at 0?ooo`@0003o]P3oool00`3o0000oooo
+0?ooo`1b0?ooo`030000003oool0oooo01d0oooo000N0?ooo`030000003oool0oooo00`0oooo1000
+0?ni0?ooo`030?l0003oool0oooo0780oooo00<000000?ooo`3oool07P3oool001h0oooo00<00000
+0?ooo`3oool0203oool40000ok`0oooo00<0o`000?ooo`3oool0L`3oool00`000000oooo0?ooo`0N
+0?ooo`007P3oool00`000000oooo0?ooo`040?ooo`@0003o_`3oool00`3o0000oooo0?ooo`1d0?oo
+o`030000003oool0oooo01h0oooo000N0?ooo`030000003oool0oooo00 at 0003o`P3oool00`3o0000
+oooo0?ooo`1e0?ooo`030000003oool0oooo01h0oooo000N0?ooo`<0003oa at 3oool00`3o0000oooo
+0?ooo`1f0?ooo`030000003oool0oooo01h0oooo000N0?ooo`030000003oool0oooo0<@0oooo00<0
+o`000?ooo`3oool0M`3oool00`000000oooo0?ooo`0N0?ooo`007P3oool00`000000oooo0?ooo`33
+0?ooo`030?l0003oool0oooo07P0oooo00<000000?ooo`3oool07P3oool001h0oooo00<000000?oo
+o`3oool0``3oool00`3o0000oooo0?ooo`1h0?ooo`030000003oool0oooo01h0oooo000N0?ooo`03
+0000003oool0oooo0<80oooo00<0o`000?ooo`3oool0N03oool00`000000oooo0?ooo`0O0?ooo`00
+7P3oool00`000000oooo0?ooo`310?ooo`030?l0003oool0oooo07T0oooo00<000000?ooo`3oool0
+7`3oool001h0oooo00<000000?ooo`3oool0`03oool00`3o0000oooo0?ooo`1j0?ooo`030000003o
+ool0oooo01l0oooo000N0?ooo`030000003oool0oooo0;l0oooo00<0o`000?ooo`3oool0N`3oool0
+0`000000oooo0?ooo`0O0?ooo`007P3oool00`000000oooo0?ooo`2n0?ooo`030?l0003oool0oooo
+07`0oooo00<000000?ooo`3oool07`3oool001h0oooo00<000000?ooo`3oool0_ at 3oool00`3o0000
+oooo0?ooo`1m0?ooo`030000003oool0oooo01l0oooo000N0?ooo`030000003oool0oooo0;`0oooo
+00<0o`000?ooo`3oool0OP3oool00`000000oooo0?ooo`0O0?ooo`007P3oool00`000000oooo0?oo
+o`2k0?ooo`030?l0003oool0oooo07l0oooo00<000000?ooo`3oool07`3oool001h0oooo00<00000
+0?ooo`3oool0^P3oool00`3o0000oooo0?ooo`1o0?ooo`030000003oool0oooo0200oooo000N0?oo
+o`030000003oool0oooo0;T0oooo00<0o`000?ooo`3oool0P03oool00`000000oooo0?ooo`0P0?oo
+o`007P3oool00`000000oooo0?ooo`2h0?ooo`030?l0003oool0oooo0840oooo00<000000?ooo`3o
+ool0803oool001h0oooo00<000000?ooo`3oool0]P3oool20?l008 at 0oooo00<000000?ooo`3oool0
+803oool001h0oooo00<000000?ooo`3oool0]@3oool00`3o0000oooo0?ooo`240?ooo`030000003o
+ool0oooo0200oooo000N0?ooo`030000003oool0oooo0;@0oooo00<0o`000?ooo`3oool0Q at 3oool0
+0`000000oooo0?ooo`0P0?ooo`007P3oool00`000000oooo0?ooo`2c0?ooo`030?l0003oool0oooo
+08H0oooo00<000000?ooo`3oool0803oool001h0oooo00<000000?ooo`3oool0/P3oool00`3o0000
+oooo0?ooo`270?ooo`030000003oool0oooo0200oooo000N0?ooo`030000003oool0oooo0;00oooo
+0P3o002:0?ooo`030000003oool0oooo0200oooo000N0?ooo`030000003oool0oooo0:l0oooo00<0
+o`000?ooo`3oool0R at 3oool00`000000oooo0?ooo`0Q0?ooo`007P3oool00`000000oooo0?ooo`2^
+0?ooo`030?l0003oool0oooo08X0oooo00<000000?ooo`3oool08 at 3oool001h0oooo00<000000?oo
+o`3oool0[@3oool00`3o0000oooo0?ooo`2;0?ooo`030000003oool0oooo0240oooo000N0?ooo`03
+0000003oool0oooo0:`0oooo00<0o`000?ooo`3oool0S03oool00`000000oooo0?ooo`0Q0?ooo`00
+7P3oool00`000000oooo0?ooo`2Z0?ooo`80o`00S`3oool00`000000oooo0?ooo`0Q0?ooo`007P3o
+ool00`000000oooo0?ooo`2Y0?ooo`030?l0003oool0oooo08l0oooo00<000000?ooo`3oool08 at 3o
+ool001h0oooo00<000000?ooo`3oool0Z03oool00`3o0000oooo0?ooo`2 at 0?ooo`030000003oool0
+oooo0240oooo000:0?ooo`<000000`3oool3000000/0oooo00<000000?ooo`3oool0Y`3oool00`3o
+0000oooo0?ooo`2A0?ooo`030000003oool0oooo0240oooo00090?ooo`070000003oool0oooo0?oo
+o`000000oooo000000030?ooo`030000003oool0oooo00P0oooo0`00002V0?ooo`030?l0003oool0
+oooo0940oooo00<000000?ooo`3oool08P3oool000d0oooo00<000000?ooo`0000000`3oool00`00
+0000oooo0?ooo`080?ooo`030000003oool0oooo0:@0oooo0P3o002D0?ooo`030000003oool0oooo
+0280oooo000;0?ooo`8000000P3oool01 at 000000oooo0?ooo`3oool0000000X0oooo00<000000?oo
+o`3oool0X`3oool00`3o0000oooo0?ooo`2D0?ooo`030000003oool0oooo0280oooo000=0?ooo`03
+0000003oool0000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`2R0?ooo`03
+0?l0003oool0oooo09D0oooo00<000000?ooo`3oool08P3oool000T0oooo00L000000?ooo`3oool0
+oooo0000003oool0000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`2P0?oo
+o`80o`00V03oool00`000000oooo0?ooo`0R0?ooo`002P3oool3000000<0oooo0`00000;0?ooo`03
+0000003oool0oooo09l0oooo00<0o`000?ooo`3oool0V03oool00`000000oooo0?ooo`0R0?ooo`00
+7P3oool00`000000oooo0?ooo`2M0?ooo`80o`00V`3oool00`000000oooo0?ooo`0R0?ooo`007P3o
+ool00`000000oooo0?ooo`2L0?ooo`030?l0003oool0oooo09/0oooo00<000000?ooo`3oool08P3o
+ool001h0oooo00<000000?ooo`3oool0V`3oool00`3o0000oooo0?ooo`2K0?ooo`030000003oool0
+oooo02<0oooo000N0?ooo`030000003oool0oooo09T0oooo0P3o002N0?ooo`030000003oool0oooo
+02<0oooo000N0?ooo`030000003oool0oooo09P0oooo00<0o`000?ooo`3oool0WP3oool00`000000
+oooo0?ooo`0S0?ooo`007P3oool00`000000oooo0?ooo`2F0?ooo`80o`00X at 3oool00`000000oooo
+0?ooo`0S0?ooo`007P3oool00`000000oooo0?ooo`2E0?ooo`030?l0003oool0oooo0:40oooo00<0
+00000?ooo`3oool08`3oool001h0oooo00<000000?ooo`3oool0T`3oool20?l00:@0oooo00<00000
+0?ooo`3oool08`3oool001h0oooo00<000000?ooo`3oool0TP3oool00`3o0000oooo0?ooo`2T0?oo
+o`030000003oool0oooo02<0oooo000N0?ooo`030000003oool0oooo0900oooo0P3o002W0?ooo`03
+0000003oool0oooo02<0oooo000N0?ooo`030000003oool0oooo08l0oooo00<0o`000?ooo`3oool0
+YP3oool00`000000oooo0?ooo`0T0?ooo`007P3oool00`000000oooo0?ooo`2=0?ooo`80o`00Z at 3o
+ool00`000000oooo0?ooo`0T0?ooo`007P3oool00`000000oooo0?ooo`2<0?ooo`030?l0003oool0
+oooo0:T0oooo00<000000?ooo`3oool0903oool001h0oooo00<000000?ooo`3oool0R`3oool00`3o
+0000oooo0?ooo`2Z0?ooo`030000003oool0oooo02 at 0oooo000N0?ooo`030000003oool0oooo08T0
+oooo0P3o002]0?ooo`030000003oool0oooo02 at 0oooo000N0?ooo`030000003oool0oooo08P0oooo
+00<0o`000?ooo`3oool0[@3oool00`000000oooo0?ooo`0T0?ooo`007P3oool00`000000oooo0?oo
+o`260?ooo`80o`00/03oool00`000000oooo0?ooo`0T0?ooo`007P3oool00`000000oooo0?ooo`25
+0?ooo`030?l0003oool0oooo0:l0oooo00<000000?ooo`3oool09 at 3oool001h0oooo00<000000?oo
+o`3oool0P`3oool20?l00;80oooo00<000000?ooo`3oool09 at 3oool001h0oooo00<000000?ooo`3o
+ool0P at 3oool20?l00;@0oooo00<000000?ooo`3oool09 at 3oool001h0oooo00<000000?ooo`3oool0
+O`3oool20?l00;H0oooo00<000000?ooo`3oool09 at 3oool001h0oooo00<000000?ooo`3oool0O at 3o
+ool20?l00;P0oooo00<000000?ooo`3oool09 at 3oool001h0oooo00<000000?ooo`3oool0O03oool0
+0`3o0000oooo0?ooo`2h0?ooo`030000003oool0oooo02D0oooo000N0?ooo`030000003oool0oooo
+07X0oooo0P3o002k0?ooo`030000003oool0oooo02D0oooo000N0?ooo`030000003oool0oooo07P0
+oooo0P3o002m0?ooo`030000003oool0oooo02D0oooo000N0?ooo`030000003oool0oooo07H0oooo
+0P3o002n0?ooo`030000003oool0oooo02H0oooo000N0?ooo`030000003oool0oooo07 at 0oooo0P3o
+00300?ooo`030000003oool0oooo02H0oooo000N0?ooo`030000003oool0oooo0780oooo0P3o0032
+0?ooo`030000003oool0oooo02H0oooo000N0?ooo`030000003oool0oooo0700oooo0P3o00340?oo
+o`030000003oool0oooo02H0oooo000N0?ooo`030000003oool0oooo06h0oooo0P3o00360?ooo`03
+0000003oool0oooo02H0oooo000N0?ooo`030000003oool0oooo06`0oooo0P3o00380?ooo`030000
+003oool0oooo02H0oooo000N0?ooo`030000003oool0oooo06T0oooo0`3o003:0?ooo`030000003o
+ool0oooo02H0oooo000N0?ooo`030000003oool0oooo06L0oooo0P3o003=0?ooo`030000003oool0
+oooo02H0oooo000N0?ooo`030000003oool0oooo06D0oooo0P3o003>0?ooo`030000003oool0oooo
+02L0oooo000N0?ooo`030000003oool0oooo0680oooo0`3o003 at 0?ooo`030000003oool0oooo02L0
+oooo000N0?ooo`030000003oool0oooo0600oooo0P3o003C0?ooo`030000003oool0oooo02L0oooo
+000N0?ooo`030000003oool0oooo05h0oooo0P3o003E0?ooo`030000003oool0oooo02L0oooo000N
+0?ooo`030000003oool0oooo05/0oooo0`3o003G0?ooo`030000003oool0oooo02L0oooo000N0?oo
+o`030000003oool0oooo05T0oooo0P3o003J0?ooo`030000003oool0oooo02L0oooo000N0?ooo`03
+0000003oool0oooo05L0oooo0P3o003L0?ooo`030000003oool0oooo02L0oooo000N0?ooo`030000
+003oool0oooo05 at 0oooo0`3o003M0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003o
+ool0oooo0540oooo0`3o003P0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003oool0
+oooo04h0oooo0`3o003S0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003oool0oooo
+04X0oooo103o003V0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003oool0oooo04L0
+oooo0`3o003Z0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003oool0oooo04 at 0oooo
+0`3o003]0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003oool0oooo0440oooo0`3o
+003`0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003oool0oooo03h0oooo0`3o003c
+0?ooo`030000003oool0oooo02P0oooo000N0?ooo`030000003oool0oooo03X0oooo103o003e0?oo
+o`030000003oool0oooo02T0oooo000N0?ooo`030000003oool0oooo03L0oooo0`3o003i0?ooo`03
+0000003oool0oooo02T0oooo000N0?ooo`030000003oool0oooo03 at 0oooo0`3o003l0?ooo`030000
+003oool0oooo02T0oooo000N0?ooo`030000003oool0oooo0300oooo103o003o0?ooo`030000003o
+ool0oooo02T0oooo000N0?ooo`800000;03oool50?l00?l0oooo103oool00`000000oooo0?ooo`0Y
+0?ooo`007P3oool00`000000oooo0?ooo`0W0?ooo`@0o`00o`3oool90?ooo`030000003oool0oooo
+02T0oooo000N0?ooo`030000003oool0oooo0280oooo1 at 3o003o0?ooo`d0oooo00<000000?ooo`3o
+ool0:@3oool001h0oooo00<000000?ooo`3oool07 at 3oool50?l00?l0oooo4P3oool00`000000oooo
+0?ooo`0Y0?ooo`007P3oool00`000000oooo0?ooo`0H0?ooo`D0o`00o`3ooolF0?ooo`030000003o
+ool0oooo02X0oooo000N0?ooo`030000003oool0oooo01<0oooo1 at 3o003o0?oooa/0oooo00<00000
+0?ooo`3oool0:P3oool001h0oooo00<000000?ooo`3oool03P3oool50?l00?l0oooo803oool00`00
+0000oooo0?ooo`0Z0?ooo`007P3oool00`000000oooo0?ooo`0:0?ooo`@0o`00o`3ooolU0?ooo`03
+0000003oool0oooo02X0oooo000N0?ooo`030000003oool0oooo00D0oooo1 at 3o003o0?ooobT0oooo
+00<000000?ooo`3oool0:P3oool001h0oooo00<000000?ooo`3oool01 at 3o003o0?ooobh0oooo00<0
+00000?ooo`3oool0:P3oool001h0oooo0`3o003o0?oooc<0oooo00<000000?ooo`3oool0:P3oool0
+01h0oooo00<000000?ooo`3oool0o`3ooolc0?ooo`030000003oool0oooo02X0oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo<P3oool00`000000oooo0?ooo`0[0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?oooc80oooo00<000000?ooo`3oool0:`3oool001h0oooo00<000000?ooo`3oool0o`3o
+oolb0?ooo`030000003oool0oooo02/0oooo000N0?ooo`030000003oool0oooo0?l0oooo<P3oool0
+0`000000oooo0?ooo`0[0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc80oooo00<000000?oo
+o`3oool0:`3oool001h0oooo00<000000?ooo`3oool0o`3ooolb0?ooo`030000003oool0oooo02/0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo<P3oool00`000000oooo0?ooo`0[0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?oooc80oooo00<000000?ooo`3oool0:`3oool001h0oooo00<00000
+0?ooo`3oool0o`3ooola0?ooo`030000003oool0oooo02`0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo<@3oool00`000000oooo0?ooo`0/0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc40
+oooo00<000000?ooo`3oool0;03oool001h0oooo00<000000?ooo`3oool0o`3ooola0?ooo`030000
+003oool0oooo02`0oooo000N0?ooo`030000003oool0oooo0?l0oooo<@3oool00`000000oooo0?oo
+o`0/0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc40oooo00<000000?ooo`3oool0;03oool0
+01h0oooo00<000000?ooo`3oool0o`3ooola0?ooo`030000003oool0oooo02`0oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo<@3oool00`000000oooo0?ooo`0/0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?oooc00oooo00<000000?ooo`3oool0;@3oool001h0oooo00<000000?ooo`3oool0o`3o
+ool`0?ooo`030000003oool0oooo02d0oooo000N0?ooo`030000003oool0oooo0?l0oooo<03oool0
+0`000000oooo0?ooo`0]0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc00oooo00<000000?oo
+o`3oool0;@3oool001h0oooo00<000000?ooo`3oool0o`3oool`0?ooo`030000003oool0oooo02d0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo<03oool00`000000oooo0?ooo`0]0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?oooc00oooo00<000000?ooo`3oool0;@3oool001h0oooo00<00000
+0?ooo`3oool0o`3oool_0?ooo`030000003oool0oooo02h0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo;`3oool00`000000oooo0?ooo`0^0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobl0
+oooo00<000000?ooo`3oool0;P3oool001h0oooo00<000000?ooo`3oool0o`3oool_0?ooo`030000
+003oool0oooo02h0oooo000N0?ooo`030000003oool0oooo0?l0oooo;`3oool00`000000oooo0?oo
+o`0^0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobl0oooo00<000000?ooo`3oool0;P3oool0
+01h0oooo00<000000?ooo`3oool0o`3oool_0?ooo`030000003oool0oooo02h0oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo;P3oool00`000000oooo0?ooo`0_0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooobh0oooo00<000000?ooo`3oool0;`3oool000X0oooo0`0000030?ooo`<000002`3o
+ool00`000000oooo0?ooo`3o0?ooobh0oooo00<000000?ooo`3oool0;`3oool000T0oooo00L00000
+0?ooo`3oool0oooo0000003oool0000000<0oooo00<000000?ooo`3oool0203oool300000?l0oooo
+;P3oool00`000000oooo0?ooo`0_0?ooo`003 at 3oool00`000000oooo000000030?ooo`030000003o
+ool0oooo00P0oooo00<000000?ooo`3oool0o`3oool^0?ooo`030000003oool0oooo02l0oooo0009
+0?ooo`070000003oool0oooo0?ooo`000000oooo000000030?ooo`030000003oool0oooo00P0oooo
+00<000000?ooo`3oool0o`3oool^0?ooo`030000003oool0oooo02l0oooo00090?ooo`@000000P3o
+ool01 at 000000oooo0?ooo`3oool0000000X0oooo00<000000?ooo`3oool0o`3oool]0?ooo`030000
+003oool0oooo0300oooo000:0?ooo`030000003oool0oooo0080oooo00D000000?ooo`3oool0oooo
+0000000:0?ooo`030000003oool0oooo0?l0oooo;@3oool00`000000oooo0?ooo`0`0?ooo`002P3o
+ool400000080oooo0`00000;0?ooo`030000003oool0oooo0?l0oooo;@3oool00`000000oooo0?oo
+o`0`0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobd0oooo00<000000?ooo`3oool0<03oool0
+01h0oooo00<000000?ooo`3oool0o`3oool]0?ooo`030000003oool0oooo0300oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo;@3oool00`000000oooo0?ooo`0`0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooobd0oooo00<000000?ooo`3oool0<03oool001h0oooo00<000000?ooo`3oool0o`3o
+ool/0?ooo`030000003oool0oooo0340oooo000N0?ooo`030000003oool0oooo0?l0oooo;03oool0
+0`000000oooo0?ooo`0a0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob`0oooo00<000000?oo
+o`3oool0<@3oool001h0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030000003oool0oooo0340
+oooo000N0?ooo`030000003oool0oooo0?l0oooo;03oool00`000000oooo0?ooo`0a0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooob`0oooo00<000000?ooo`3oool0<@3oool001h0oooo00<00000
+0?ooo`3oool0o`3oool/0?ooo`030000003oool0oooo0340oooo000N0?ooo`030000003oool0oooo
+0?l0oooo:`3oool00`000000oooo0?ooo`0b0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob/0
+oooo00<000000?ooo`3oool0<P3oool001h0oooo00<000000?ooo`3oool0o`3oool[0?ooo`030000
+003oool0oooo0380oooo000N0?ooo`030000003oool0oooo0?l0oooo:`3oool00`000000oooo0?oo
+o`0b0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob/0oooo00<000000?ooo`3oool0<P3oool0
+01h0oooo00<000000?ooo`3oool0o`3oool[0?ooo`030000003oool0oooo0380oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo:`3oool00`000000oooo0?ooo`0b0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooobX0oooo00<000000?ooo`3oool0<`3oool001h0oooo00<000000?ooo`3oool0o`3o
+oolZ0?ooo`030000003oool0oooo03<0oooo000N0?ooo`030000003oool0oooo0?l0oooo:P3oool0
+0`000000oooo0?ooo`0c0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobX0oooo00<000000?oo
+o`3oool0<`3oool001h0oooo00<000000?ooo`3oool0o`3ooolZ0?ooo`030000003oool0oooo03<0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo:P3oool00`000000oooo0?ooo`0c0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooobT0oooo00<000000?ooo`3oool0=03oool001h0oooo00<00000
+0?ooo`3oool0o`3ooolY0?ooo`030000003oool0oooo03 at 0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo:@3oool00`000000oooo0?ooo`0d0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobT0
+oooo00<000000?ooo`3oool0=03oool001h0oooo00<000000?ooo`3oool0o`3ooolY0?ooo`030000
+003oool0oooo03 at 0oooo000N0?ooo`030000003oool0oooo0?l0oooo:@3oool00`000000oooo0?oo
+o`0d0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobP0oooo00<000000?ooo`3oool0=@3oool0
+01h0oooo0P00003o0?ooobT0oooo00<000000?ooo`3oool0=@3oool001h0oooo00<000000?ooo`3o
+ool0o`3ooolX0?ooo`030000003oool0oooo03D0oooo000N0?ooo`030000003oool0oooo0?l0oooo
+:03oool00`000000oooo0?ooo`0e0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobP0oooo00<0
+00000?ooo`3oool0=@3oool001h0oooo00<000000?ooo`3oool0o`3ooolX0?ooo`030000003oool0
+oooo03D0oooo000N0?ooo`030000003oool0oooo0?l0oooo:03oool00`000000oooo0?ooo`0e0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooobL0oooo00<000000?ooo`3oool0=P3oool001h0oooo
+00<000000?ooo`3oool0o`3ooolW0?ooo`030000003oool0oooo03H0oooo000N0?ooo`030000003o
+ool0oooo0?l0oooo9`3oool00`000000oooo0?ooo`0f0?ooo`007P3oool00`000000oooo0?ooo`3o
+0?ooobL0oooo00<000000?ooo`3oool0=P3oool001h0oooo00<000000?ooo`3oool0o`3ooolW0?oo
+o`030000003oool0oooo03H0oooo000N0?ooo`030000003oool0oooo0?l0oooo9`3oool00`000000
+oooo0?ooo`0f0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobH0oooo00<000000?ooo`3oool0
+=`3oool001h0oooo00<000000?ooo`3oool0o`3ooolV0?ooo`030000003oool0oooo03L0oooo000N
+0?ooo`030000003oool0oooo0?l0oooo9P3oool00`000000oooo0?ooo`0g0?ooo`007P3oool00`00
+0000oooo0?ooo`3o0?ooobH0oooo00<000000?ooo`3oool0=`3oool001h0oooo00<000000?ooo`3o
+ool0o`3ooolV0?ooo`030000003oool0oooo03L0oooo000N0?ooo`030000003oool0oooo0?l0oooo
+9P3oool00`000000oooo0?ooo`0g0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobD0oooo00<0
+00000?ooo`3oool0>03oool001h0oooo00<000000?ooo`3oool0o`3ooolU0?ooo`030000003oool0
+oooo03P0oooo000N0?ooo`030000003oool0oooo0?l0oooo9 at 3oool00`000000oooo0?ooo`0h0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooobD0oooo00<000000?ooo`3oool0>03oool001h0oooo
+00<000000?ooo`3oool0o`3ooolU0?ooo`030000003oool0oooo03P0oooo000N0?ooo`030000003o
+ool0oooo0?l0oooo9 at 3oool00`000000oooo0?ooo`0h0?ooo`007P3oool00`000000oooo0?ooo`3o
+0?ooob at 0oooo00<000000?ooo`3oool0>@3oool001h0oooo00<000000?ooo`3oool0o`3ooolT0?oo
+o`030000003oool0oooo03T0oooo000N0?ooo`030000003oool0oooo0?l0oooo903oool00`000000
+oooo0?ooo`0i0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob at 0oooo00<000000?ooo`3oool0
+>@3oool001h0oooo00<000000?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo03T0oooo000N
+0?ooo`030000003oool0oooo0?l0oooo903oool00`000000oooo0?ooo`0i0?ooo`002P3oool00`00
+0000oooo0?ooo`030?ooo`<000002`3oool00`000000oooo0?ooo`3o0?ooob<0oooo00<000000?oo
+o`3oool0>P3oool000X0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`3oool00000
+00X0oooo0`00003o0?ooob<0oooo00<000000?ooo`3oool0>P3oool000/0oooo00D000000?ooo`3o
+ool0oooo000000030?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0o`3ooolS0?oo
+o`030000003oool0oooo03X0oooo000;0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`00
+0000oooo0?ooo`080?ooo`030000003oool0oooo0?l0oooo8`3oool00`000000oooo0?ooo`0j0?oo
+o`00303oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo00P0oooo00<000000?oo
+o`3oool0o`3ooolS0?ooo`030000003oool0oooo03X0oooo000<0?ooo`040000003oool0oooo0000
+00<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`3o0?ooob80oooo00<000000?oo
+o`3oool0>`3oool000T0oooo1 at 0000020?ooo`<000002`3oool00`000000oooo0?ooo`3o0?ooob80
+oooo00<000000?ooo`3oool0>`3oool001h0oooo00<000000?ooo`3oool0o`3ooolR0?ooo`030000
+003oool0oooo03/0oooo000N0?ooo`030000003oool0oooo0?l0oooo8P3oool00`000000oooo0?oo
+o`0k0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob80oooo00<000000?ooo`3oool0>`3oool0
+01h0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`030000003oool0oooo03`0oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo8 at 3oool00`000000oooo0?ooo`0l0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooob40oooo00<000000?ooo`3oool0?03oool001h0oooo00<000000?ooo`3oool0o`3o
+oolQ0?ooo`030000003oool0oooo03`0oooo000N0?ooo`030000003oool0oooo0?l0oooo8 at 3oool0
+0`000000oooo0?ooo`0l0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob40oooo00<000000?oo
+o`3oool0?03oool001h0oooo00<000000?ooo`3oool0o`3ooolP0?ooo`030000003oool0oooo03d0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo803oool00`000000oooo0?ooo`0m0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooob00oooo00<000000?ooo`3oool0?@3oool001h0oooo00<00000
+0?ooo`3oool0o`3ooolP0?ooo`030000003oool0oooo03d0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo803oool00`000000oooo0?ooo`0m0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooal0
+oooo00<000000?ooo`3oool0?P3oool001h0oooo00<000000?ooo`3oool0o`3ooolO0?ooo`030000
+003oool0oooo03h0oooo000N0?ooo`030000003oool0oooo0?l0oooo7`3oool00`000000oooo0?oo
+o`0n0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooal0oooo00<000000?ooo`3oool0?P3oool0
+01h0oooo00<000000?ooo`3oool0o`3ooolO0?ooo`030000003oool0oooo03h0oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo7`3oool00`000000oooo0?ooo`0n0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?oooah0oooo00<000000?ooo`3oool0?`3oool001h0oooo0P00003o0?oooal0oooo00<0
+00000?ooo`3oool0?`3oool001h0oooo00<000000?ooo`3oool0o`3ooolN0?ooo`030000003oool0
+oooo03l0oooo000N0?ooo`030000003oool0oooo0?l0oooo7P3oool00`000000oooo0?ooo`0o0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?oooah0oooo00<000000?ooo`3oool0?`3oool001h0oooo
+00<000000?ooo`3oool0o`3ooolM0?ooo`030000003oool0oooo0400oooo000N0?ooo`030000003o
+ool0oooo0?l0oooo7 at 3oool00`000000oooo0?ooo`100?ooo`007P3oool00`000000oooo0?ooo`3o
+0?oooad0oooo00<000000?ooo`3oool0 at 03oool001h0oooo00<000000?ooo`3oool0o`3ooolM0?oo
+o`030000003oool0oooo0400oooo000N0?ooo`030000003oool0oooo0?l0oooo7 at 3oool00`000000
+oooo0?ooo`100?ooo`007P3oool00`000000oooo0?ooo`3o0?oooad0oooo00<000000?ooo`3oool0
+ at 03oool001h0oooo00<000000?ooo`3oool0o`3ooolL0?ooo`030000003oool0oooo0440oooo000N
+0?ooo`030000003oool0oooo0?l0oooo703oool00`000000oooo0?ooo`110?ooo`007P3oool00`00
+0000oooo0?ooo`3o0?oooa`0oooo00<000000?ooo`3oool0@@3oool001h0oooo00<000000?ooo`3o
+ool0o`3ooolL0?ooo`030000003oool0oooo0440oooo000N0?ooo`030000003oool0oooo0?l0oooo
+703oool00`000000oooo0?ooo`110?ooo`007P3oool00`000000oooo0?ooo`3o0?oooa/0oooo00<0
+00000?ooo`3oool0 at P3oool001h0oooo0P00003o0?oooa`0oooo00<000000?ooo`3oool0 at P3oool0
+01h0oooo00<000000?ooo`000000o`3ooolK0?ooo`030000003oool0oooo0480oooo000N0?ooo`03
+0000003oool000000?l0oooo6`3oool00`000000oooo0?ooo`120?ooo`007P3oool010000000oooo
+0?ooo`00003o0?oooaX0oooo00<000000?ooo`3oool0 at P3oool001h0oooo00D000000?ooo`3oool0
+oooo0000003o0?oooaT0oooo00<000000?ooo`3oool0 at P3oool001h0oooo00<000000?ooo`3oool0
+0P3oool00`000000oooo0?ooo`3o0?oooaD0oooo00<000000?ooo`3oool0@`3oool001h0oooo00<0
+00000?ooo`3oool00P3oool00`000000oooo0?ooo`3o0?oooaD0oooo00<000000?ooo`3oool0@`3o
+ool001h0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`3o0?oooa at 0oooo00<00000
+0?ooo`3oool0@`3oool001h0oooo0P0000050?ooo`030000003oool0oooo0?l0oooo4`3oool00`00
+0000oooo0?ooo`130?ooo`007P3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo0?l0
+oooo4P3oool00`000000oooo0?ooo`130?ooo`007P3oool00`000000oooo0?ooo`050?ooo`030000
+003oool0oooo0?l0oooo4P3oool00`000000oooo0?ooo`130?ooo`007P3oool00`000000oooo0?oo
+o`060?ooo`030000003oool0oooo0?l0oooo403oool00`000000oooo0?ooo`140?ooo`007P3oool0
+0`000000oooo0?ooo`070?ooo`030000003oool0oooo0?l0oooo3`3oool00`000000oooo0?ooo`14
+0?ooo`007P3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo0?l0oooo3P3oool00`00
+0000oooo0?ooo`140?ooo`007P3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo0?l0
+oooo3P3oool00`000000oooo0?ooo`140?ooo`007P3oool00`000000oooo0?ooo`090?ooo`030000
+003oool0oooo0?l0oooo3 at 3oool00`000000oooo0?ooo`140?ooo`007P3oool00`000000oooo0?oo
+o`0:0?ooo`030000003oool0oooo0?l0oooo2`3oool00`000000oooo0?ooo`150?ooo`007P3oool0
+0`000000oooo0?ooo`0;0?ooo`030000003oool0oooo0?l0oooo2P3oool00`000000oooo0?ooo`15
+0?ooo`007P3oool00`000000oooo0?ooo`0;0?ooo`030000003oool0oooo0?l0oooo2P3oool00`00
+0000oooo0?ooo`150?ooo`007P3oool00`000000oooo0?ooo`0<0?ooo`030000003oool0oooo0?l0
+oooo2 at 3oool00`000000oooo0?ooo`150?ooo`007P3oool00`000000oooo0?ooo`0=0?ooo`030000
+003oool0oooo0?l0oooo203oool00`000000oooo0?ooo`150?ooo`007P3oool00`000000oooo0?oo
+o`0>0?ooo`030000003oool0oooo0?l0oooo1`3oool00`000000oooo0?ooo`150?ooo`007P3oool0
+0`000000oooo0?ooo`0>0?ooo`030000003oool0oooo0?l0oooo1P3oool00`000000oooo0?ooo`16
+0?ooo`007P3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo0?l0oooo1 at 3oool00`00
+0000oooo0?ooo`160?ooo`007P3oool00`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo0?l0
+oooo103oool00`000000oooo0?ooo`160?ooo`007P3oool00`000000oooo0?ooo`0A0?ooo`030000
+003oool0oooo0?l0oooo0`3oool00`000000oooo0?ooo`160?ooo`007P3oool00`000000oooo0?oo
+o`0A0?ooo`030000003oool0oooo0?l0oooo0`3oool00`000000oooo0?ooo`160?ooo`007P3oool0
+0`000000oooo0?ooo`0B0?ooo`030000003oool0oooo0?l0oooo0 at 3oool00`000000oooo0?ooo`17
+0?ooo`001 at 3oool010000000oooo0?ooo`3oool3000000<0oooo0`00000<0?ooo`030000003oool0
+oooo01<0oooo00<000000?ooo`3oool0o`3oool00`000000oooo0?ooo`170?ooo`001 at 3oool01000
+0000oooo0?ooo`0000030?ooo`030000003oool0000000<0oooo00<000000?ooo`3oool02 at 3oool3
+000001 at 0oooo00<000000?ooo`3oool0oP3oool00`000000oooo0?ooo`170?ooo`001 at 3oool01000
+0000oooo0?ooo`0000030?ooo`030000003oool0000000<0oooo00<000000?ooo`3oool02 at 3oool0
+0`000000oooo0?ooo`0E0?ooo`030000003oool0oooo0?d0oooo00<000000?ooo`3oool0A`3oool0
+00D0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo000000030?ooo`030000003oool0
+oooo00T0oooo00<000000?ooo`3oool05 at 3oool00`000000oooo0?ooo`3l0?ooo`030000003oool0
+oooo04P0oooo00030?ooo`030000003oool000000080oooo00L000000?ooo`3oool0oooo0000003o
+ool0000000<0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`0F0?ooo`030000003o
+ool0oooo0?/0oooo00<000000?ooo`3oool0B03oool000 at 0oooo0P0000020?ooo`070000003oool0
+oooo0?ooo`000000oooo000000030?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0
+5`3oool00`000000oooo0?ooo`3j0?ooo`030000003oool0oooo04P0oooo00050?ooo`040000003o
+ool0oooo0?ooo`<000000`3oool3000000`0oooo00<000000?ooo`3oool0603oool00`000000oooo
+0?ooo`3i0?ooo`030000003oool0oooo04P0oooo000N0?ooo`030000003oool0oooo01P0oooo00<0
+00000?ooo`3oool0n at 3oool00`000000oooo0?ooo`180?ooo`007P3oool00`000000oooo0?ooo`0I
+0?ooo`030000003oool0oooo0?L0oooo00<000000?ooo`3oool0B at 3oool001h0oooo00<000000?oo
+o`3oool06P3oool00`000000oooo0?ooo`3f0?ooo`030000003oool0oooo04T0oooo000N0?ooo`03
+0000003oool0oooo01/0oooo00<000000?ooo`3oool0m at 3oool00`000000oooo0?ooo`190?ooo`00
+7P3oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo0?D0oooo00<000000?ooo`3oool0
+B at 3oool001h0oooo00<000000?ooo`3oool0703oool00`000000oooo0?ooo`3c0?ooo`030000003o
+ool0oooo04X0oooo000N0?ooo`030000003oool0oooo01d0oooo00<000000?ooo`3oool0lP3oool0
+0`000000oooo0?ooo`1:0?ooo`007P3oool00`000000oooo0?ooo`0N0?ooo`030000003oool0oooo
+0?40oooo00<000000?ooo`3oool0BP3oool001h0oooo00<000000?ooo`3oool07P3oool00`000000
+oooo0?ooo`3a0?ooo`030000003oool0oooo04X0oooo000N0?ooo`030000003oool0oooo01l0oooo
+00<000000?ooo`3oool0l03oool00`000000oooo0?ooo`1:0?ooo`007P3oool00`000000oooo0?oo
+o`0P0?ooo`030000003oool0oooo0>h0oooo00<000000?ooo`3oool0B`3oool001h0oooo00<00000
+0?ooo`3oool08 at 3oool00`000000oooo0?ooo`3]0?ooo`030000003oool0oooo04/0oooo000N0?oo
+o`030000003oool0oooo0240oooo00<000000?ooo`3oool0k at 3oool00`000000oooo0?ooo`1;0?oo
+o`007P3oool00`000000oooo0?ooo`0R0?ooo`030000003oool0oooo0>`0oooo00<000000?ooo`3o
+ool0B`3oool001h0oooo0P00000T0?ooo`030000003oool0oooo0>X0oooo00<000000?ooo`3oool0
+C03oool001h0oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`3Y0?ooo`030000003o
+ool0oooo04`0oooo000N0?ooo`030000003oool0oooo02 at 0oooo00<000000?ooo`3oool0j at 3oool0
+0`000000oooo0?ooo`1<0?ooo`007P3oool00`000000oooo0?ooo`0U0?ooo`030000003oool0oooo
+0>P0oooo00<000000?ooo`3oool0C03oool001h0oooo00<000000?ooo`3oool09P3oool00`000000
+oooo0?ooo`3W0?ooo`030000003oool0oooo04`0oooo000N0?ooo`030000003oool0oooo02L0oooo
+00<000000?ooo`3oool0i at 3oool00`000000oooo0?ooo`1=0?ooo`007P3oool00`000000oooo0?oo
+o`0W0?ooo`030000003oool0oooo0>D0oooo00<000000?ooo`3oool0C at 3oool001h0oooo00<00000
+0?ooo`3oool0:03oool00`000000oooo0?ooo`3T0?ooo`030000003oool0oooo04d0oooo000N0?oo
+o`030000003oool0oooo02T0oooo00<000000?ooo`3oool0h`3oool00`000000oooo0?ooo`1=0?oo
+o`007P3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo0>40oooo00<000000?ooo`3o
+ool0CP3oool001h0oooo00<000000?ooo`3oool0:`3oool00`000000oooo0?ooo`3P0?ooo`030000
+003oool0oooo04h0oooo000N0?ooo`030000003oool0oooo02/0oooo00<000000?ooo`3oool0h03o
+ool00`000000oooo0?ooo`1>0?ooo`007P3oool00`000000oooo0?ooo`0/0?ooo`030000003oool0
+oooo0=l0oooo00<000000?ooo`3oool0CP3oool001h0oooo00<000000?ooo`3oool0;@3oool00`00
+0000oooo0?ooo`3N0?ooo`030000003oool0oooo04h0oooo000N0?ooo`030000003oool0oooo02h0
+oooo00<000000?ooo`3oool0g03oool00`000000oooo0?ooo`1?0?ooo`007P3oool00`000000oooo
+0?ooo`0^0?ooo`030000003oool0oooo0=`0oooo00<000000?ooo`3oool0C`3oool001h0oooo00<0
+00000?ooo`3oool0;`3oool00`000000oooo0?ooo`3K0?ooo`030000003oool0oooo04l0oooo000N
+0?ooo`800000<@3oool00`000000oooo0?ooo`3J0?ooo`030000003oool0oooo04l0oooo000N0?oo
+o`030000003oool0oooo0340oooo00<000000?ooo`3oool0f03oool00`000000oooo0?ooo`1 at 0?oo
+o`007P3oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo0=P0oooo00<000000?ooo`3o
+ool0D03oool001h0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`3G0?ooo`030000
+003oool0oooo0500oooo000N0?ooo`030000003oool0oooo03<0oooo00<000000?ooo`3oool0eP3o
+ool00`000000oooo0?ooo`1 at 0?ooo`007P3oool00`000000oooo0?ooo`0d0?ooo`030000003oool0
+oooo0=@0oooo00<000000?ooo`3oool0D at 3oool001h0oooo00<000000?ooo`3oool0=03oool00`00
+0000oooo0?ooo`3D0?ooo`030000003oool0oooo0540oooo000N0?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool0d`3oool00`000000oooo0?ooo`1A0?ooo`007P3oool00`000000oooo
+0?ooo`0f0?ooo`030000003oool0oooo0=80oooo00<000000?ooo`3oool0D at 3oool001h0oooo00<0
+00000?ooo`3oool0=`3oool00`000000oooo0?ooo`3A0?ooo`030000003oool0oooo0540oooo000N
+0?ooo`030000003oool0oooo03L0oooo00<000000?ooo`3oool0d03oool00`000000oooo0?ooo`1B
+0?ooo`007P3oool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo0<l0oooo00<000000?oo
+o`3oool0DP3oool001h0oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`3>0?ooo`03
+0000003oool0oooo0580oooo000N0?ooo`030000003oool0oooo03X0oooo00<000000?ooo`3oool0
+c at 3oool00`000000oooo0?ooo`1B0?ooo`007P3oool00`000000oooo0?ooo`0j0?ooo`030000003o
+ool0oooo0<`0oooo00<000000?ooo`3oool0D`3oool001h0oooo00<000000?ooo`3oool0>`3oool0
+0`000000oooo0?ooo`3;0?ooo`030000003oool0oooo05<0oooo000N0?ooo`800000?@3oool00`00
+0000oooo0?ooo`3:0?ooo`030000003oool0oooo05<0oooo000N0?ooo`030000003oool0oooo03d0
+oooo00<000000?ooo`3oool0b at 3oool00`000000oooo0?ooo`1C0?ooo`007P3oool00`000000oooo
+0?ooo`0m0?ooo`030000003oool0oooo0<T0oooo00<000000?ooo`3oool0D`3oool001h0oooo00<0
+00000?ooo`3oool0?P3oool00`000000oooo0?ooo`370?ooo`030000003oool0oooo05 at 0oooo000N
+0?ooo`030000003oool0oooo03l0oooo00<000000?ooo`3oool0aP3oool00`000000oooo0?ooo`1D
+0?ooo`007P3oool00`000000oooo0?ooo`100?ooo`030000003oool0oooo0<D0oooo00<000000?oo
+o`3oool0E03oool001h0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`340?ooo`03
+0000003oool0oooo05 at 0oooo000N0?ooo`030000003oool0oooo0440oooo00<000000?ooo`3oool0
+``3oool00`000000oooo0?ooo`1E0?ooo`007P3oool00`000000oooo0?ooo`120?ooo`030000003o
+ool0oooo0<80oooo00<000000?ooo`3oool0E at 3oool001h0oooo00<000000?ooo`3oool0@`3oool0
+0`000000oooo0?ooo`310?ooo`030000003oool0oooo05D0oooo000N0?ooo`030000003oool0oooo
+04 at 0oooo00<000000?ooo`3oool0`03oool00`000000oooo0?ooo`1E0?ooo`007P3oool00`000000
+oooo0?ooo`140?ooo`030000003oool0oooo0;l0oooo00<000000?ooo`3oool0EP3oool001h0oooo
+00<000000?ooo`3oool0A at 3oool00`000000oooo0?ooo`2n0?ooo`030000003oool0oooo05H0oooo
+000N0?ooo`030000003oool0oooo04H0oooo00<000000?ooo`3oool0_ at 3oool00`000000oooo0?oo
+o`1F0?ooo`007P3oool00`000000oooo0?ooo`170?ooo`030000003oool0oooo0;`0oooo00<00000
+0?ooo`3oool0EP3oool001h0oooo0P0000180?ooo`030000003oool0oooo0;/0oooo00<000000?oo
+o`3oool0E`3oool001h0oooo00<000000?ooo`3oool0B03oool00`000000oooo0?ooo`2j0?ooo`03
+0000003oool0oooo05L0oooo000N0?ooo`030000003oool0oooo04T0oooo00<000000?ooo`3oool0
+^@3oool00`000000oooo0?ooo`1G0?ooo`007P3oool00`000000oooo0?ooo`1:0?ooo`030000003o
+ool0oooo0;P0oooo00<000000?ooo`3oool0E`3oool001h0oooo00<000000?ooo`3oool0BP3oool0
+0`000000oooo0?ooo`2g0?ooo`030000003oool0oooo05P0oooo000N0?ooo`030000003oool0oooo
+04/0oooo00<000000?ooo`3oool0]P3oool00`000000oooo0?ooo`1H0?ooo`007P3oool00`000000
+oooo0?ooo`1<0?ooo`030000003oool0oooo0;D0oooo00<000000?ooo`3oool0F03oool001h0oooo
+00<000000?ooo`3oool0C at 3oool00`000000oooo0?ooo`2c0?ooo`030000003oool0oooo05T0oooo
+000N0?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3oool0/`3oool00`000000oooo0?oo
+o`1I0?ooo`007P3oool00`000000oooo0?ooo`1>0?ooo`030000003oool0oooo0;80oooo00<00000
+0?ooo`3oool0F at 3oool001h0oooo00<000000?ooo`3oool0C`3oool00`000000oooo0?ooo`2a0?oo
+o`030000003oool0oooo05T0oooo000N0?ooo`030000003oool0oooo0500oooo00<000000?ooo`3o
+ool0[`3oool00`000000oooo0?ooo`1J0?ooo`007P3oool00`000000oooo0?ooo`1 at 0?ooo`030000
+003oool0oooo0:l0oooo00<000000?ooo`3oool0FP3oool000D0oooo00 at 000000?ooo`3oool0oooo
+0`0000030?ooo`<00000303oool00`000000oooo0?ooo`1A0?ooo`030000003oool0oooo0:h0oooo
+00<000000?ooo`3oool0FP3oool000D0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo
+000000030?ooo`030000003oool0oooo00T0oooo0`00001B0?ooo`030000003oool0oooo0:`0oooo
+00<000000?ooo`3oool0F`3oool000D0oooo00<000000?ooo`3oool0103oool00`000000oooo0000
+00030?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0D`3oool00`000000oooo0?oo
+o`2[0?ooo`030000003oool0oooo05/0oooo00050?ooo`040000003oool0oooo000000<0oooo00<0
+00000?ooo`0000000`3oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo05<0oooo00<0
+00000?ooo`3oool0Z`3oool00`000000oooo0?ooo`1K0?ooo`000`3oool00`000000oooo00000002
+0?ooo`@000000P3oool01 at 000000oooo0?ooo`3oool0000000/0oooo00<000000?ooo`3oool0E03o
+ool00`000000oooo0?ooo`2Y0?ooo`030000003oool0oooo05`0oooo00040?ooo`8000000`3oool0
+0`000000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000002`3oool00`000000oooo0?oo
+o`1E0?ooo`030000003oool0oooo0:P0oooo00<000000?ooo`3oool0G03oool000D0oooo00 at 00000
+0?ooo`3oool0oooo100000020?ooo`<00000303oool00`000000oooo0?ooo`1F0?ooo`030000003o
+ool0oooo0:L0oooo00<000000?ooo`3oool0G03oool001h0oooo00<000000?ooo`3oool0EP3oool0
+0`000000oooo0?ooo`2W0?ooo`030000003oool0oooo05`0oooo000N0?ooo`030000003oool0oooo
+05L0oooo00<000000?ooo`3oool0Y at 3oool00`000000oooo0?ooo`1M0?ooo`007P3oool00`000000
+oooo0?ooo`1H0?ooo`030000003oool0oooo0:@0oooo00<000000?ooo`3oool0G at 3oool001h0oooo
+00<000000?ooo`3oool0F03oool00`000000oooo0?ooo`2T0?ooo`030000003oool0oooo05d0oooo
+000N0?ooo`030000003oool0oooo05T0oooo00<000000?ooo`3oool0XP3oool00`000000oooo0?oo
+o`1N0?ooo`007P3oool00`000000oooo0?ooo`1I0?ooo`030000003oool0oooo0:80oooo00<00000
+0?ooo`3oool0GP3oool001h0oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?ooo`2Q0?oo
+o`030000003oool0oooo05h0oooo000N0?ooo`800000G03oool00`000000oooo0?ooo`2P0?ooo`03
+0000003oool0oooo05h0oooo000N0?ooo`030000003oool0oooo05/0oooo00<000000?ooo`3oool0
+W`3oool00`000000oooo0?ooo`1O0?ooo`007P3oool00`000000oooo0?ooo`1L0?ooo`030000003o
+ool0oooo09h0oooo00<000000?ooo`3oool0G`3oool001h0oooo00<000000?ooo`3oool0G at 3oool0
+0`000000oooo0?ooo`2M0?ooo`030000003oool0oooo05l0oooo000N0?ooo`030000003oool0oooo
+05d0oooo00<000000?ooo`3oool0W03oool00`000000oooo0?ooo`1P0?ooo`007P3oool00`000000
+oooo0?ooo`1N0?ooo`030000003oool0oooo09/0oooo00<000000?ooo`3oool0H03oool001h0oooo
+00<000000?ooo`3oool0G`3oool00`000000oooo0?ooo`2J0?ooo`030000003oool0oooo0600oooo
+000N0?ooo`030000003oool0oooo05l0oooo00<000000?ooo`3oool0V at 3oool00`000000oooo0?oo
+o`1Q0?ooo`007P3oool00`000000oooo0?ooo`1P0?ooo`030000003oool0oooo09P0oooo00<00000
+0?ooo`3oool0H at 3oool001h0oooo00<000000?ooo`3oool0H03oool00`000000oooo0?ooo`2H0?oo
+o`030000003oool0oooo0640oooo000N0?ooo`030000003oool0oooo0640oooo00<000000?ooo`3o
+ool0UP3oool00`000000oooo0?ooo`1R0?ooo`007P3oool00`000000oooo0?ooo`1R0?ooo`030000
+003oool0oooo09D0oooo00<000000?ooo`3oool0HP3oool001h0oooo0P00001S0?ooo`030000003o
+ool0oooo09D0oooo00<000000?ooo`3oool0HP3oool001h0oooo00<000000?ooo`3oool0H`3oool0
+0`000000oooo0?ooo`2C0?ooo`030000003oool0oooo06<0oooo000N0?ooo`030000003oool0oooo
+06 at 0oooo00<000000?ooo`3oool0TP3oool00`000000oooo0?ooo`1S0?ooo`007P3oool00`000000
+oooo0?ooo`1T0?ooo`030000003oool0oooo0980oooo00<000000?ooo`3oool0H`3oool001h0oooo
+00<000000?ooo`3oool0I at 3oool00`000000oooo0?ooo`2 at 0?ooo`030000003oool0oooo06 at 0oooo
+000N0?ooo`030000003oool0oooo06D0oooo00<000000?ooo`3oool0T03oool00`000000oooo0?oo
+o`1T0?ooo`007P3oool00`000000oooo0?ooo`1V0?ooo`030000003oool0oooo08l0oooo00<00000
+0?ooo`3oool0I03oool001h0oooo00<000000?ooo`3oool0I`3oool00`000000oooo0?ooo`2=0?oo
+o`030000003oool0oooo06D0oooo000N0?ooo`030000003oool0oooo06L0oooo00<000000?ooo`3o
+ool0S at 3oool00`000000oooo0?ooo`1U0?ooo`007P3oool00`000000oooo0?ooo`1X0?ooo`030000
+003oool0oooo08`0oooo00<000000?ooo`3oool0I at 3oool001h0oooo00<000000?ooo`3oool0J at 3o
+ool00`000000oooo0?ooo`2:0?ooo`030000003oool0oooo06H0oooo000N0?ooo`030000003oool0
+oooo06T0oooo00<000000?ooo`3oool0RP3oool00`000000oooo0?ooo`1V0?ooo`007P3oool20000
+06/0oooo00<000000?ooo`3oool0R at 3oool00`000000oooo0?ooo`1V0?ooo`007P3oool00`000000
+oooo0?ooo`1[0?ooo`030000003oool0oooo08L0oooo00<000000?ooo`3oool0I`3oool001h0oooo
+00<000000?ooo`3oool0J`3oool00`000000oooo0?ooo`270?ooo`030000003oool0oooo06L0oooo
+000N0?ooo`030000003oool0oooo06`0oooo00<000000?ooo`3oool0QP3oool00`000000oooo0?oo
+o`1W0?ooo`007P3oool00`000000oooo0?ooo`1/0?ooo`030000003oool0oooo08D0oooo00<00000
+0?ooo`3oool0J03oool001h0oooo00<000000?ooo`3oool0K at 3oool00`000000oooo0?ooo`240?oo
+o`030000003oool0oooo06P0oooo000N0?ooo`030000003oool0oooo06h0oooo00<000000?ooo`3o
+ool0P`3oool00`000000oooo0?ooo`1X0?ooo`007P3oool00`000000oooo0?ooo`1^0?ooo`030000
+003oool0oooo0880oooo00<000000?ooo`3oool0J at 3oool001h0oooo00<000000?ooo`3oool0K`3o
+ool00`000000oooo0?ooo`210?ooo`030000003oool0oooo06T0oooo000N0?ooo`030000003oool0
+oooo0700oooo00<000000?ooo`3oool0P03oool00`000000oooo0?ooo`1Y0?ooo`007P3oool00`00
+0000oooo0?ooo`1`0?ooo`030000003oool0oooo07l0oooo00<000000?ooo`3oool0JP3oool001h0
+oooo0P00001b0?ooo`030000003oool0oooo07h0oooo00<000000?ooo`3oool0JP3oool001h0oooo
+00<000000?ooo`3oool0LP3oool00`000000oooo0?ooo`1l0?ooo`030000003oool0oooo06/0oooo
+000N0?ooo`030000003oool0oooo0780oooo00<000000?ooo`3oool0O03oool00`000000oooo0?oo
+o`1[0?ooo`007P3oool00`000000oooo0?ooo`1c0?ooo`030000003oool0oooo07X0oooo00<00000
+0?ooo`3oool0K03oool001h0oooo00<000000?ooo`3oool0M03oool00`000000oooo0?ooo`1i0?oo
+o`030000003oool0oooo06`0oooo000N0?ooo`030000003oool0oooo07 at 0oooo00<000000?ooo`3o
+ool0N at 3oool00`000000oooo0?ooo`1/0?ooo`007P3oool00`000000oooo0?ooo`1e0?ooo`030000
+003oool0oooo07L0oooo00<000000?ooo`3oool0K at 3oool001h0oooo00<000000?ooo`3oool0MP3o
+ool00`000000oooo0?ooo`1f0?ooo`030000003oool0oooo06d0oooo000N0?ooo`030000003oool0
+oooo07L0oooo00<000000?ooo`3oool0M03oool00`000000oooo0?ooo`1^0?ooo`000P3oool50000
+0080oooo0`0000030?ooo`<00000303oool00`000000oooo0?ooo`1g0?ooo`030000003oool0oooo
+07 at 0oooo00<000000?ooo`3oool0KP3oool000<0oooo00<000000?ooo`3oool00P3oool01`000000
+oooo0?ooo`3oool000000?ooo`0000000`3oool00`000000oooo0?ooo`090?ooo`<00000N03oool0
+0`000000oooo0?ooo`1b0?ooo`030000003oool0oooo06l0oooo00040?ooo`050000003oool0oooo
+0?ooo`0000000`3oool00`000000oooo000000030?ooo`030000003oool0oooo00T0oooo00<00000
+0?ooo`3oool0N at 3oool00`000000oooo0?ooo`1a0?ooo`030000003oool0oooo06l0oooo00050?oo
+o`040000003oool0oooo000000<0oooo00<000000?ooo`0000000`3oool00`000000oooo0?ooo`09
+0?ooo`030000003oool0oooo07T0oooo00<000000?ooo`3oool0L at 3oool00`000000oooo0?ooo`1_
+0?ooo`001P3oool00`000000oooo000000030?ooo`030000003oool0000000<0oooo00<000000?oo
+o`3oool02 at 3oool00`000000oooo0?ooo`1j0?ooo`030000003oool0oooo06l0oooo00<000000?oo
+o`3oool0L03oool00080oooo00L000000?ooo`3oool0oooo0000003oool0000000<0oooo00<00000
+0?ooo`0000000`3oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo07/0oooo00<00000
+0?ooo`3oool0KP3oool00`000000oooo0?ooo`1`0?ooo`000`3oool3000000<0oooo0`0000030?oo
+o`<00000303oool00`000000oooo0?ooo`1k0?ooo`030000003oool0oooo06d0oooo00<000000?oo
+o`3oool0L at 3oool001h0oooo00<000000?ooo`3oool0O03oool00`000000oooo0?ooo`1/0?ooo`03
+0000003oool0oooo0740oooo000N0?ooo`030000003oool0oooo07d0oooo00<000000?ooo`3oool0
+JP3oool00`000000oooo0?ooo`1b0?ooo`007P3oool00`000000oooo0?ooo`1m0?ooo`030000003o
+ool0oooo06X0oooo00<000000?ooo`3oool0LP3oool001h0oooo00<000000?ooo`3oool0OP3oool0
+0`000000oooo0?ooo`1Y0?ooo`030000003oool0oooo0780oooo000N0?ooo`030000003oool0oooo
+07l0oooo00<000000?ooo`3oool0I`3oool00`000000oooo0?ooo`1c0?ooo`007P3oool00`000000
+oooo0?ooo`1o0?ooo`030000003oool0oooo06L0oooo00<000000?ooo`3oool0L`3oool001h0oooo
+00<000000?ooo`3oool0P03oool00`000000oooo0?ooo`1U0?ooo`030000003oool0oooo07 at 0oooo
+000N0?ooo`030000003oool0oooo0840oooo00<000000?ooo`3oool0I03oool00`000000oooo0?oo
+o`1d0?ooo`007P3oool00`000000oooo0?ooo`220?ooo`030000003oool0oooo0680oooo00<00000
+0?ooo`3oool0M at 3oool001h0oooo00<000000?ooo`3oool0PP3oool00`000000oooo0?ooo`1R0?oo
+o`030000003oool0oooo07D0oooo000N0?ooo`030000003oool0oooo08<0oooo00<000000?ooo`3o
+ool0H03oool00`000000oooo0?ooo`1f0?ooo`007P3oool00`000000oooo0?ooo`240?ooo`030000
+003oool0oooo05l0oooo00<000000?ooo`3oool0MP3oool001h0oooo00<000000?ooo`3oool0Q03o
+ool00`000000oooo0?ooo`1N0?ooo`030000003oool0oooo07L0oooo000N0?ooo`030000003oool0
+oooo08D0oooo00<000000?ooo`3oool0G at 3oool00`000000oooo0?ooo`1g0?ooo`007P3oool00`00
+0000oooo0?ooo`260?ooo`030000003oool0oooo05/0oooo00<000000?ooo`3oool0N03oool001h0
+oooo00<000000?ooo`3oool0Q`3oool00`000000oooo0?ooo`1I0?ooo`030000003oool0oooo07T0
+oooo000N0?ooo`030000003oool0oooo08L0oooo00<000000?ooo`3oool0F at 3oool00`000000oooo
+0?ooo`1i0?ooo`007P3oool00`000000oooo0?ooo`280?ooo`030000003oool0oooo05L0oooo00<0
+00000?ooo`3oool0NP3oool001h0oooo00<000000?ooo`3oool0R at 3oool00`000000oooo0?ooo`1E
+0?ooo`030000003oool0oooo07/0oooo000N0?ooo`030000003oool0oooo08X0oooo00<000000?oo
+o`3oool0E03oool00`000000oooo0?ooo`1k0?ooo`007P3oool00`000000oooo0?ooo`2:0?ooo`03
+0000003oool0oooo05<0oooo00<000000?ooo`3oool0O03oool001h0oooo00<000000?ooo`3oool0
+R`3oool00`000000oooo0?ooo`1B0?ooo`030000003oool0oooo07`0oooo000N0?ooo`030000003o
+ool0oooo08`0oooo00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`1m0?ooo`007P3oool0
+0`000000oooo0?ooo`2=0?ooo`030000003oool0oooo04h0oooo00<000000?ooo`3oool0OP3oool0
+01h0oooo00<000000?ooo`3oool0S at 3oool00`000000oooo0?ooo`1>0?ooo`030000003oool0oooo
+07h0oooo000N0?ooo`030000003oool0oooo08h0oooo00<000000?ooo`3oool0C03oool00`000000
+oooo0?ooo`1o0?ooo`007P3oool00`000000oooo0?ooo`2?0?ooo`030000003oool0oooo04X0oooo
+00<000000?ooo`3oool0P03oool001h0oooo00<000000?ooo`3oool0T03oool00`000000oooo0?oo
+o`190?ooo`030000003oool0oooo0800oooo000N0?ooo`030000003oool0oooo0900oooo00<00000
+0?ooo`3oool0B03oool00`000000oooo0?ooo`210?ooo`007P3oool00`000000oooo0?ooo`2A0?oo
+o`030000003oool0oooo04L0oooo00<000000?ooo`3oool0P at 3oool001h0oooo00<000000?ooo`3o
+ool0TP3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo0880oooo000N0?ooo`030000
+003oool0oooo09<0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`230?ooo`007P3o
+ool00`000000oooo0?ooo`2C0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool0P`3o
+ool001h0oooo00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`110?ooo`030000003oool0
+oooo08 at 0oooo000N0?ooo`030000003oool0oooo09D0oooo00<000000?ooo`3oool0?`3oool00`00
+0000oooo0?ooo`250?ooo`007P3oool00`000000oooo0?ooo`2F0?ooo`030000003oool0oooo03h0
+oooo00<000000?ooo`3oool0Q at 3oool001h0oooo00<000000?ooo`3oool0U`3oool00`000000oooo
+0?ooo`0l0?ooo`030000003oool0oooo08H0oooo000N0?ooo`030000003oool0oooo09P0oooo0P00
+000k0?ooo`030000003oool0oooo08L0oooo000N0?ooo`030000003oool0oooo09X0oooo00<00000
+0?ooo`3oool0>03oool00`000000oooo0?ooo`270?ooo`007P3oool00`000000oooo0?ooo`2K0?oo
+o`030000003oool0oooo03H0oooo00<000000?ooo`3oool0R03oool001h0oooo00<000000?ooo`3o
+ool0W03oool00`000000oooo0?ooo`0d0?ooo`030000003oool0oooo08T0oooo000N0?ooo`030000
+003oool0oooo09d0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`2:0?ooo`007P3o
+ool00`000000oooo0?ooo`2N0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3oool0R`3o
+ool001h0oooo00<000000?ooo`3oool0W`3oool2000002h0oooo0P00002>0?ooo`007P3oool00`00
+0000oooo0?ooo`2Q0?ooo`030000003oool0oooo02X0oooo00<000000?ooo`3oool0SP3oool001h0
+oooo00<000000?ooo`3oool0XP3oool00`000000oooo0?ooo`0X0?ooo`030000003oool0oooo08l0
+oooo000N0?ooo`030000003oool0oooo0:<0oooo0P00000W0?ooo`030000003oool0oooo0900oooo
+000N0?ooo`030000003oool0oooo0:D0oooo0P00000S0?ooo`800000T`3oool001h0oooo00<00000
+0?ooo`3oool0Y`3oool2000001l0oooo0P00002E0?ooo`007P3oool00`000000oooo0?ooo`2Y0?oo
+o`800000703oool00`000000oooo0?ooo`2E0?ooo`007P3oool00`000000oooo0?ooo`2[0?ooo`80
+0000603oool2000009P0oooo000N0?ooo`030000003oool0oooo0:d0oooo0`00000C0?ooo`800000
+VP3oool001h0oooo00<000000?ooo`3oool0/03oool3000000/0oooo1 at 00002L0?ooo`007P3oool0
+0`000000oooo0?ooo`2c0?ooo`/00000X at 3oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0oooo
+H03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o
+0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3o
+ool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003o
+ool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`00
+0000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo
+00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N
+0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0oooo
+H03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o
+0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool000<0oooo0`0000030?ooo`<0
+00000`3oool3000000`0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`000P3oool01`000000oooo
+0?ooo`3oool000000?ooo`0000000`3oool00`000000oooo000000030?ooo`030000003oool0oooo
+00T0oooo0`00003o0?ooof00oooo00060?ooo`030000003oool0000000<0oooo00<000000?ooo`00
+00000`3oool00`000000oooo0?ooo`3o0?ooof`0oooo00040?ooo`8000000P3oool01`000000oooo
+0?ooo`3oool000000?ooo`0000000`3oool00`000000oooo0?ooo`3o0?ooof`0oooo00060?ooo`03
+0000003oool0000000<0oooo00<000000?ooo`0000000`3oool00`000000oooo0?ooo`3o0?ooof`0
+oooo00020?ooo`070000003oool0oooo0?ooo`000000oooo000000030?ooo`030000003oool00000
+00<0oooo00<000000?ooo`3oool0o`3ooom/0?ooo`000`3oool3000000<0oooo0`0000030?ooo`<0
+0000o`3ooom_0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?oo
+o`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?oo
+o`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?oo
+o`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?oo
+o`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?oo
+o`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?oo
+o`00\
+\>"],
+  ImageRangeCache->{{{0, 383}, {767, 0}} -> {-0.44243, 0.900604, 0.00466792, 
+  0.00215195}}]
+}, Open  ]],
+
+Cell["\<\
+Now we set up variations of the CSF functions for different contrast \
+levels.\
+\>", "Text"],
+
+Cell[BoxData[
+    \(ycbcrstsl[f_, c_] := 1/\((c^\((1/.5)\) + 1/ycbcrsl[f])\)\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrstsrg[f_, c_] := 1/\((c^\((1/.5)\) + 1/ycbcrsrg[f])\)\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrstsby[f_, c_] := 1/\((c^\((1/.5)\) + 1/ycbcrsby[f])\)\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(LogLogPlot[{ycbcrstsl[f, .1], ycbcrstsl[f, .2], ycbcrstsl[f, .3], 
+        ycbcrstsl[f, .4], ycbcrstsl[f, .5], ycbcrstsl[f, .6], 
+        ycbcrstsl[f, .7], ycbcrstsl[f, .8], ycbcrstsl[f, .9], 
+        ycbcrstsl[f, 1.0]}, {f, .5, 30}, PlotRange -> {{.5, 30}, {.5, 75}}, 
+      AspectRatio -> 2, PlotStyle -> {{RGBColor[0, 0, 0]}}]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 2 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.169294 0.562382 0.27667 0.919079 [
+[.16929 -0.0125 -6 -15 ]
+[.16929 -0.0125 6 0 ]
+[.26832 -0.0125 -13 -15 ]
+[.26832 -0.0125 13 0 ]
+[.33859 -0.0125 -6 -15 ]
+[.33859 -0.0125 6 0 ]
+[.43762 -0.0125 -6 -15 ]
+[.43762 -0.0125 6 0 ]
+[.56238 -0.0125 -6 -15 ]
+[.56238 -0.0125 6 0 ]
+[.64456 -0.0125 -6 -15 ]
+[.64456 -0.0125 6 0 ]
+[.73168 -0.0125 -9.5 -15 ]
+[.73168 -0.0125 9.5 0 ]
+[.83071 -0.0125 -9.5 -15 ]
+[.83071 -0.0125 9.5 0 ]
+[.90097 -0.0125 -9.5 -15 ]
+[.90097 -0.0125 9.5 0 ]
+[-0.0125 .27667 -12 -7.5 ]
+[-0.0125 .27667 0 7.5 ]
+[-0.0125 .55334 -12 -7.5 ]
+[-0.0125 .55334 0 7.5 ]
+[-0.0125 .91908 -12 -7.5 ]
+[-0.0125 .91908 0 7.5 ]
+[-0.0125 1.19575 -19 -7.5 ]
+[-0.0125 1.19575 0 7.5 ]
+[-0.0125 1.47242 -19 -7.5 ]
+[-0.0125 1.47242 0 7.5 ]
+[-0.0125 1.83816 -19 -7.5 ]
+[-0.0125 1.83816 0 7.5 ]
+[ -0.0005 -0.0005 0 0 ]
+[ 1 2 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.16929 0 m
+.16929 .00625 L
+s
+gsave
+.16929 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.26832 0 m
+.26832 .00625 L
+s
+gsave
+.26832 -0.0125 -74 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1.5) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.33859 0 m
+.33859 .00625 L
+s
+gsave
+.33859 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(2) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.43762 0 m
+.43762 .00625 L
+s
+gsave
+.43762 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(3) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.56238 0 m
+.56238 .00625 L
+s
+gsave
+.56238 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(5) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.64456 0 m
+.64456 .00625 L
+s
+gsave
+.64456 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(7) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.73168 0 m
+.73168 .00625 L
+s
+gsave
+.73168 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(10) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.83071 0 m
+.83071 .00625 L
+s
+gsave
+.83071 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(15) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.90097 0 m
+.90097 .00625 L
+s
+gsave
+.90097 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+.19257 0 m
+.19257 .00375 L
+s
+.21382 0 m
+.21382 .00375 L
+s
+.23337 0 m
+.23337 .00375 L
+s
+.25147 0 m
+.25147 .00375 L
+s
+.28409 0 m
+.28409 .00375 L
+s
+.29889 0 m
+.29889 .00375 L
+s
+.31285 0 m
+.31285 .00375 L
+s
+.32606 0 m
+.32606 .00375 L
+s
+.50788 0 m
+.50788 .00375 L
+s
+.60691 0 m
+.60691 .00375 L
+s
+.67718 0 m
+.67718 .00375 L
+s
+.70594 0 m
+.70594 .00375 L
+s
+.75495 0 m
+.75495 .00375 L
+s
+.77621 0 m
+.77621 .00375 L
+s
+.79576 0 m
+.79576 .00375 L
+s
+.81386 0 m
+.81386 .00375 L
+s
+.84647 0 m
+.84647 .00375 L
+s
+.86128 0 m
+.86128 .00375 L
+s
+.87524 0 m
+.87524 .00375 L
+s
+.88844 0 m
+.88844 .00375 L
+s
+.25 Mabswid
+0 0 m
+1 0 L
+s
+0 .27667 m
+.00625 .27667 L
+s
+gsave
+-0.0125 .27667 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .55334 m
+.00625 .55334 L
+s
+gsave
+-0.0125 .55334 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(2) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .91908 m
+.00625 .91908 L
+s
+gsave
+-0.0125 .91908 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(5) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.19575 m
+.00625 1.19575 L
+s
+gsave
+-0.0125 1.19575 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(10) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.47242 m
+.00625 1.47242 L
+s
+gsave
+-0.0125 1.47242 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.83816 m
+.00625 1.83816 L
+s
+gsave
+-0.0125 1.83816 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(50) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+0 .71518 m
+.00375 .71518 L
+s
+0 .83001 m
+.00375 .83001 L
+s
+0 .99185 m
+.00375 .99185 L
+s
+0 1.05338 m
+.00375 1.05338 L
+s
+0 1.10668 m
+.00375 1.10668 L
+s
+0 1.15369 m
+.00375 1.15369 L
+s
+0 1.63426 m
+.00375 1.63426 L
+s
+0 1.74909 m
+.00375 1.74909 L
+s
+0 1.91093 m
+.00375 1.91093 L
+s
+0 1.97246 m
+.00375 1.97246 L
+s
+.25 Mabswid
+0 0 m
+0 2 L
+s
+0 0 m
+1 0 L
+1 2 L
+0 2 L
+closepath
+clip
+newpath
+0 0 0 r
+.5 Mabswid
+0 1.80687 m
+.18867 1.89329 L
+.29842 1.94344 L
+.3383 1.95891 L
+.3748 1.97068 L
+.39353 1.97566 L
+.40941 1.97926 L
+.42359 1.98197 L
+.43777 1.9842 L
+.44943 1.98567 L
+.45539 1.98628 L
+.46165 1.98684 L
+.46725 1.98724 L
+.47226 1.98754 L
+.4772 1.98777 L
+.4818 1.98792 L
+.48454 1.98799 L
+.487 1.98803 L
+.48835 1.98805 L
+.4898 1.98806 L
+.49241 1.98806 L
+.49484 1.98805 L
+.49738 1.98802 L
+.49953 1.98798 L
+.50187 1.98793 L
+.5046 1.98784 L
+.50706 1.98774 L
+.51251 1.98746 L
+.51745 1.98714 L
+.52204 1.98677 L
+.53869 1.98486 L
+.54668 1.98362 L
+.55521 1.98204 L
+.58235 1.97512 L
+.59603 1.97041 L
+.60794 1.96553 L
+.63281 1.95267 L
+.65338 1.93877 L
+.67406 1.92113 L
+.69361 1.90032 L
+.71011 1.87898 L
+.74042 1.82853 L
+.76799 1.76656 L
+.79186 1.69715 L
+.81493 1.61329 L
+.83526 1.52363 L
+.85333 1.43021 L
+.87121 1.32419 L
+.88726 1.21694 L
+.90324 1.0985 L
+Mistroke
+.9177 .98109 L
+.93085 .86585 L
+.9441 .7414 L
+.95622 .62031 L
+.96847 .4907 L
+.97972 .36521 L
+.99007 .24414 L
+1 .12298 L
+Mfstroke
+0 1.45961 m
+.18867 1.49357 L
+.29842 1.51127 L
+.3383 1.51644 L
+.3748 1.52029 L
+.39353 1.52189 L
+.40941 1.52304 L
+.42359 1.5239 L
+.43777 1.52461 L
+.44943 1.52507 L
+.45539 1.52527 L
+.46165 1.52544 L
+.46725 1.52557 L
+.47226 1.52566 L
+.4772 1.52574 L
+.4818 1.52578 L
+.48454 1.5258 L
+.487 1.52582 L
+.48835 1.52582 L
+.4898 1.52583 L
+.49241 1.52583 L
+.49484 1.52582 L
+.49738 1.52581 L
+.49953 1.5258 L
+.50187 1.52578 L
+.5046 1.52576 L
+.50706 1.52573 L
+.51251 1.52564 L
+.51745 1.52554 L
+.52204 1.52542 L
+.53869 1.52482 L
+.54668 1.52443 L
+.55521 1.52393 L
+.58235 1.52172 L
+.59603 1.5202 L
+.60794 1.51861 L
+.63281 1.51437 L
+.65338 1.50968 L
+.67406 1.50357 L
+.69216 1.49676 L
+.71011 1.48825 L
+.72604 1.47887 L
+.7422 1.46712 L
+.76958 1.44038 L
+.78213 1.42438 L
+.79474 1.40526 L
+.81594 1.36469 L
+.83665 1.31205 L
+.85505 1.25167 L
+.8732 1.17693 L
+Mistroke
+.88949 1.0951 L
+.9042 1.00808 L
+.91894 .90766 L
+.93234 .8046 L
+.94581 .68958 L
+.95813 .57455 L
+.96942 .46091 L
+.98088 .33772 L
+.99143 .21742 L
+1 .11492 L
+Mfstroke
+0 1.18929 m
+.18867 1.20618 L
+.29842 1.2147 L
+.3383 1.21715 L
+.3748 1.21897 L
+.39353 1.21972 L
+.40941 1.22026 L
+.42359 1.22066 L
+.43777 1.22099 L
+.44943 1.22121 L
+.45539 1.2213 L
+.46165 1.22138 L
+.46725 1.22144 L
+.47226 1.22148 L
+.4772 1.22152 L
+.4818 1.22154 L
+.48454 1.22155 L
+.487 1.22156 L
+.48835 1.22156 L
+.4898 1.22156 L
+.49241 1.22156 L
+.49484 1.22156 L
+.49738 1.22155 L
+.49953 1.22155 L
+.50187 1.22154 L
+.5046 1.22153 L
+.50706 1.22151 L
+.51251 1.22147 L
+.51745 1.22142 L
+.52204 1.22137 L
+.53869 1.22109 L
+.54668 1.22091 L
+.55521 1.22067 L
+.58235 1.21964 L
+.59603 1.21892 L
+.60794 1.21818 L
+.63281 1.21617 L
+.65338 1.21394 L
+.67406 1.21102 L
+.69216 1.20773 L
+.71011 1.20359 L
+.72604 1.19896 L
+.7422 1.19309 L
+.76958 1.17941 L
+.78213 1.17101 L
+.79474 1.16076 L
+.81594 1.13826 L
+.83665 1.10756 L
+.85505 1.0703 L
+.8732 1.02127 L
+Mistroke
+.88949 .96407 L
+.9042 .89955 L
+.91894 .82085 L
+.93234 .73595 L
+.94581 .63704 L
+.95813 .53453 L
+.96942 .43044 L
+.98088 .31512 L
+.99143 .20058 L
+1 .10183 L
+Mfstroke
+0 .98014 m
+.18867 .99005 L
+.29842 .99499 L
+.3383 .9964 L
+.3748 .99744 L
+.39353 .99787 L
+.40941 .99818 L
+.42359 .99841 L
+.43777 .9986 L
+.44943 .99873 L
+.45539 .99878 L
+.46165 .99883 L
+.46725 .99886 L
+.47226 .99889 L
+.4772 .9989 L
+.4818 .99892 L
+.48454 .99892 L
+.487 .99893 L
+.48835 .99893 L
+.4898 .99893 L
+.49241 .99893 L
+.49484 .99893 L
+.49738 .99893 L
+.49953 .99892 L
+.50187 .99892 L
+.5046 .99891 L
+.50706 .9989 L
+.51251 .99888 L
+.51745 .99885 L
+.52204 .99882 L
+.53869 .99866 L
+.54668 .99855 L
+.55521 .99842 L
+.58235 .99783 L
+.59603 .99742 L
+.60794 .99699 L
+.63281 .99584 L
+.65338 .99455 L
+.67406 .99286 L
+.69216 .99095 L
+.71011 .98854 L
+.72714 .98562 L
+.7422 .98238 L
+.7686 .97461 L
+.78119 .96962 L
+.79386 .96348 L
+.81512 .94977 L
+.82536 .94117 L
+.8359 .93058 L
+.85547 .90482 L
+Mistroke
+.87295 .8729 L
+.88866 .83447 L
+.90434 .78425 L
+.91854 .72617 L
+.93277 .65377 L
+.94574 .57393 L
+.9576 .48852 L
+.96962 .38956 L
+.98066 .2876 L
+.99082 .18454 L
+1 .08419 L
+Mfstroke
+0 .81186 m
+.18867 .81834 L
+.29842 .82154 L
+.3383 .82245 L
+.3748 .82313 L
+.39353 .82341 L
+.40941 .82361 L
+.42359 .82375 L
+.43777 .82388 L
+.44943 .82396 L
+.45539 .82399 L
+.46165 .82402 L
+.46725 .82404 L
+.47226 .82406 L
+.4772 .82407 L
+.4818 .82408 L
+.48454 .82408 L
+.487 .82409 L
+.48835 .82409 L
+.4898 .82409 L
+.49241 .82409 L
+.49484 .82409 L
+.49738 .82408 L
+.49953 .82408 L
+.50187 .82408 L
+.5046 .82407 L
+.50706 .82407 L
+.51251 .82405 L
+.51745 .82404 L
+.52204 .82402 L
+.53869 .82391 L
+.54668 .82385 L
+.55521 .82376 L
+.58235 .82338 L
+.59603 .82311 L
+.60794 .82283 L
+.63281 .82209 L
+.65338 .82126 L
+.67406 .82016 L
+.69216 .81892 L
+.71011 .81735 L
+.72714 .81545 L
+.7422 .81333 L
+.7686 .80823 L
+.78119 .80493 L
+.79386 .80085 L
+.81512 .79168 L
+.82536 .78588 L
+.8359 .77866 L
+.85547 .76088 L
+Mistroke
+.87295 .73836 L
+.88866 .71055 L
+.90434 .67313 L
+.91854 .6284 L
+.93277 .57065 L
+.94574 .50465 L
+.9576 .43168 L
+.96962 .34453 L
+.98066 .25229 L
+.99082 .157 L
+1 .06261 L
+Mfstroke
+0 .67177 m
+.18867 .67632 L
+.29842 .67856 L
+.3383 .6792 L
+.3748 .67967 L
+.39353 .67986 L
+.40941 .68 L
+.42359 .68011 L
+.43777 .68019 L
+.44943 .68025 L
+.45539 .68027 L
+.46165 .68029 L
+.46725 .68031 L
+.47226 .68032 L
+.4772 .68033 L
+.4818 .68033 L
+.48454 .68034 L
+.487 .68034 L
+.48835 .68034 L
+.4898 .68034 L
+.49241 .68034 L
+.49484 .68034 L
+.49738 .68034 L
+.49953 .68034 L
+.50187 .68034 L
+.5046 .68033 L
+.50706 .68033 L
+.51251 .68032 L
+.51745 .68031 L
+.52204 .68029 L
+.53869 .68022 L
+.54668 .68017 L
+.55521 .68011 L
+.58235 .67984 L
+.59603 .67966 L
+.60794 .67947 L
+.63281 .67894 L
+.65338 .67836 L
+.67406 .6776 L
+.69216 .67673 L
+.71011 .67563 L
+.72714 .6743 L
+.7422 .67281 L
+.7686 .66921 L
+.78119 .66688 L
+.79386 .66399 L
+.81512 .65746 L
+.82536 .6533 L
+.8359 .64812 L
+.84546 .64242 L
+Mistroke
+.85547 .63522 L
+.87295 .61865 L
+.88964 .59635 L
+.90469 .56858 L
+.91973 .53101 L
+.93339 .48578 L
+.94585 .4331 L
+.95845 .36681 L
+.96999 .29305 L
+.9806 .21347 L
+.99141 .12039 L
+1 .03772 L
+Mfstroke
+0 .55204 m
+.18867 .55541 L
+.29842 .55706 L
+.3383 .55753 L
+.3748 .55788 L
+.39353 .55802 L
+.40941 .55812 L
+.42359 .5582 L
+.43777 .55826 L
+.44943 .5583 L
+.45539 .55832 L
+.46165 .55834 L
+.46725 .55835 L
+.47226 .55836 L
+.4772 .55836 L
+.4818 .55837 L
+.48454 .55837 L
+.487 .55837 L
+.48835 .55837 L
+.4898 .55837 L
+.49241 .55837 L
+.49484 .55837 L
+.49738 .55837 L
+.49953 .55837 L
+.50187 .55837 L
+.5046 .55836 L
+.50706 .55836 L
+.51251 .55835 L
+.51745 .55835 L
+.52204 .55834 L
+.53869 .55828 L
+.54668 .55825 L
+.55521 .5582 L
+.58235 .55801 L
+.59603 .55787 L
+.60794 .55773 L
+.63281 .55734 L
+.65338 .55691 L
+.67406 .55635 L
+.69216 .55571 L
+.71011 .5549 L
+.72714 .55391 L
+.7422 .55281 L
+.7686 .55014 L
+.78119 .54841 L
+.79386 .54626 L
+.81512 .54139 L
+.82536 .53828 L
+.8359 .53438 L
+.84546 .53009 L
+Mistroke
+.85547 .52464 L
+.87295 .51202 L
+.88118 .5043 L
+.88964 .49484 L
+.9056 .47159 L
+.92005 .4425 L
+.9332 .40716 L
+.94644 .36053 L
+.95855 .30602 L
+.96966 .24437 L
+.98095 .1689 L
+.99135 .08725 L
+1 .01017 L
+Mfstroke
+0 .44762 m
+.18867 .45021 L
+.29842 .45148 L
+.3383 .45184 L
+.3748 .4521 L
+.39353 .45221 L
+.40941 .45229 L
+.42359 .45235 L
+.43777 .4524 L
+.44943 .45243 L
+.45539 .45244 L
+.46165 .45246 L
+.46725 .45246 L
+.47226 .45247 L
+.4772 .45248 L
+.4818 .45248 L
+.48454 .45248 L
+.487 .45248 L
+.48835 .45248 L
+.4898 .45248 L
+.49241 .45248 L
+.49484 .45248 L
+.49738 .45248 L
+.49953 .45248 L
+.50187 .45248 L
+.5046 .45248 L
+.50706 .45247 L
+.51251 .45247 L
+.51745 .45246 L
+.52204 .45245 L
+.53869 .45241 L
+.54668 .45239 L
+.55521 .45235 L
+.58235 .4522 L
+.59603 .4521 L
+.60794 .45199 L
+.63281 .45169 L
+.65338 .45136 L
+.67406 .45093 L
+.69216 .45044 L
+.71011 .44981 L
+.72714 .44906 L
+.7422 .44821 L
+.7686 .44615 L
+.78119 .44482 L
+.79386 .44316 L
+.81512 .43939 L
+.82536 .43698 L
+.8359 .43396 L
+.84546 .43062 L
+Mistroke
+.85547 .42636 L
+.87295 .41646 L
+.88118 .41037 L
+.88964 .40287 L
+.9056 .3843 L
+.92005 .36076 L
+.9332 .33173 L
+.94644 .29275 L
+.95855 .24628 L
+.96966 .19265 L
+.98095 .12563 L
+.99135 .05164 L
+Mfstroke
+.99135 .05164 m
+.99764 0 L
+s
+0 .35509 m
+.18867 .35714 L
+.29842 .35815 L
+.3383 .35843 L
+.3748 .35864 L
+.39353 .35873 L
+.40941 .35879 L
+.42359 .35884 L
+.43777 .35888 L
+.44943 .3589 L
+.45539 .35891 L
+.46165 .35892 L
+.46725 .35893 L
+.47226 .35893 L
+.4772 .35894 L
+.4818 .35894 L
+.48454 .35894 L
+.487 .35894 L
+.48835 .35894 L
+.4898 .35894 L
+.49241 .35894 L
+.49484 .35894 L
+.49738 .35894 L
+.49953 .35894 L
+.50187 .35894 L
+.5046 .35894 L
+.50706 .35894 L
+.51251 .35893 L
+.51745 .35893 L
+.52204 .35892 L
+.53869 .35889 L
+.54668 .35887 L
+.55521 .35884 L
+.58235 .35872 L
+.59603 .35864 L
+.60794 .35855 L
+.63281 .35832 L
+.65338 .35806 L
+.67406 .35771 L
+.69216 .35732 L
+.71011 .35683 L
+.72714 .35623 L
+.7422 .35556 L
+.7686 .35393 L
+.78119 .35287 L
+.79386 .35155 L
+.81512 .34855 L
+.82536 .34663 L
+.8359 .34422 L
+.84546 .34155 L
+Mistroke
+.85547 .33814 L
+.87295 .33018 L
+.88118 .32527 L
+.88964 .3192 L
+.9056 .30407 L
+.92005 .28472 L
+.9332 .26058 L
+.94644 .22771 L
+.95855 .18789 L
+.96966 .14114 L
+.98095 .08166 L
+.99135 .01478 L
+Mfstroke
+.99135 .01478 m
+.99331 0 L
+s
+0 .27205 m
+.18867 .27372 L
+.29842 .27454 L
+.3383 .27477 L
+.3748 .27494 L
+.39353 .27501 L
+.40941 .27506 L
+.42359 .2751 L
+.43777 .27513 L
+.44943 .27515 L
+.45539 .27516 L
+.46165 .27516 L
+.46725 .27517 L
+.47226 .27517 L
+.4772 .27518 L
+.4818 .27518 L
+.48454 .27518 L
+.487 .27518 L
+.48835 .27518 L
+.4898 .27518 L
+.49241 .27518 L
+.49484 .27518 L
+.49738 .27518 L
+.49953 .27518 L
+.50187 .27518 L
+.5046 .27518 L
+.50706 .27518 L
+.51251 .27517 L
+.51745 .27517 L
+.52204 .27516 L
+.53869 .27514 L
+.54668 .27512 L
+.55521 .2751 L
+.58235 .275 L
+.59603 .27493 L
+.60794 .27486 L
+.63281 .27467 L
+.65338 .27446 L
+.67406 .27419 L
+.69216 .27387 L
+.71011 .27347 L
+.72714 .27298 L
+.7422 .27243 L
+.7686 .27111 L
+.78119 .27025 L
+.79386 .26918 L
+.81512 .26674 L
+.82536 .26517 L
+.8359 .2632 L
+.84546 .26102 L
+Mistroke
+.85547 .25823 L
+.87295 .25171 L
+.88118 .24767 L
+.88964 .24266 L
+.89744 .23711 L
+.9056 .23014 L
+.92005 .21399 L
+.93401 .19219 L
+.94674 .16498 L
+.95838 .13193 L
+.97019 .08826 L
+.98105 .03714 L
+Mfstroke
+.98105 .03714 m
+.98739 0 L
+s
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{385, 770},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40006100030R000`400?l00000o`00003oo`3ooon2
+0?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon2
+0?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon2
+0?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon2
+0?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon20?ooo`00o`3ooon2
+0?ooo`00D`3oool00`000000oooo0?ooo`0J0?ooo`050000003oool0oooo0?ooo`0000000P3oool3
+000001<0oooo1 at 00000P0?ooo`<00000:P3oool3000001X0oooo00<000000?ooo`3oool06`3oool0
+10000000oooo0?ooo`3oool3000001d0oooo00 at 000000?ooo`3oool0oooo0`00000?0?ooo`D00000
+0P3oool3000002<0oooo001C0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool00`3o
+ool01 at 000000oooo0?ooo`3oool0000001<0oooo00<000000?ooo`3oool0803oool01 at 000000oooo
+0?ooo`3oool0000002P0oooo00D000000?ooo`3oool0oooo0000000I0?ooo`030000003oool0oooo
+01/0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`0J0?ooo`040000003oool0
+oooo000000<0oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`020?ooo`050000003o
+ool0oooo0?ooo`0000008P3oool005<0oooo00<000000?ooo`3oool06P3oool00`000000oooo0?oo
+o`070?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool08`3oool00`000000oooo0?oo
+o`0Z0?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool06P3oool010000000oooo0?oo
+o`0000030?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0103oool00`000000oooo
+0?ooo`0>0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0P0?ooo`00
+D`3oool00`000000oooo0?ooo`0J0?ooo`030000003oool0oooo00<0oooo00D000000?ooo`3oool0
+oooo0000000E0?ooo`030000003oool0oooo0200oooo0P00000Y0?ooo`050000003oool0oooo0?oo
+o`0000006P3oool00`000000oooo0?ooo`0J0?ooo`040000003oool0oooo000000<0oooo00<00000
+0?ooo`3oool06P3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo00l0oooo00 at 0
+00000?ooo`3oool000000`3oool00`000000oooo0?ooo`0P0?ooo`00D at 3oool00`000000oooo0000
+000J0?ooo`030000003oool0000000D0oooo1000000G0?ooo`030000003oool0oooo0240oooo00<0
+00000?ooo`3oool09P3oool4000001`0oooo00<000000?ooo`3oool05`3oool00`000000oooo0000
+00020?ooo`050000003oool0oooo0?ooo`0000006P3oool00`000000oooo000000020?ooo`@00000
+4`3oool00`000000oooo000000030?ooo`030000003oool0oooo0200oooo001B0?ooo`8000006`3o
+ool2000000H0oooo00<000000?ooo`3oool04`3oool01 at 000000oooo0?ooo`3oool0000001l0oooo
+00D000000?ooo`3oool0oooo0000000Y0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3o
+ool0603oool200000080oooo00D000000?ooo`3oool0oooo0000000K0?ooo`8000000`3oool00`00
+0000oooo0?ooo`0?0?ooo`070000003oool0oooo0?ooo`000000oooo000000030?ooo`030000003o
+ool0oooo0200oooo001C0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0103oool4
+000001<0oooo0`00000Q0?ooo`<00000:P3oool4000001P0oooo1 at 00000J0?ooo`040000003oool0
+oooo0?ooo`<000007 at 3oool010000000oooo0?ooo`3oool4000000l0oooo0`0000030?ooo`<00000
+8`3oool00?l0ooooPP3oool00?l0ooooPP3oool00?l0ooooPP3oool00?l0ooooPP3oool00?l0oooo
+PP3oool00?l0ooooPP3oool001L0ooooo`00001[000000005`3oool00`000000oooo0?ooo`0j0?oo
+o`030000003oool0oooo00D0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`040?oo
+o`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`020?oo
+o`030000003oool0oooo00<0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`020?oo
+o`050000003oool0oooo0?ooo`0000008`3oool00`000000oooo0?ooo`0F0?ooo`030000003oool0
+oooo0140oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0
+oooo00T0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`070?ooo`030000003oool0
+oooo00D0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo00<0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`030?ooo`030000003oool0
+oooo0080oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00<0
+00000?ooo`3oool0703oool01 at 000000oooo0000003oool000000040oooo000G0?ooo`030000003o
+ool0oooo03X0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`050?ooo`030000003o
+ool0oooo00 at 0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`030?ooo`030000003o
+ool0oooo0080oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`020?ooo`030000003o
+ool0oooo0080oooo00D000000?ooo`3oool0oooo0000000S0?ooo`030000003oool0oooo01H0oooo
+00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`0=0?ooo`030000003oool0oooo00X0oooo
+00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo00L0oooo
+00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo00 at 0oooo
+00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo00<0oooo
+00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`030?ooo`050000003oool0oooo0?ooo`00
+0000103oool00`000000oooo0?ooo`0L0?ooo`050000003oool000000?ooo`0000000 at 3oool001L0
+oooo00<000000?ooo`3oool0>P3oool00`000000oooo0?ooo`0Q0?ooo`030000003oool0oooo01H0
+oooo00<000000?ooo`3oool08 at 3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo01X0
+oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo01L0
+oooo00<000000?ooo`3oool0703oool200000080oooo0 at 0000010?ooo`005`3oool00`000000oooo
+0?ooo`3o0?ooof40oooo00H000000?ooo`000000oooo0000003oool1000000005`3oool00`000000
+oooo0?ooo`3o0?ooof40oooo00H000000?ooo`000000oooo0000003oool1000000005`3oool00`00
+0000oooo0?ooo`3o0?ooof40oooo00H000000?ooo`000000oooo0000003oool1000000005`3oool0
+0`000000oooo0?ooo`3o0?ooof40oooo00H000000?ooo`000000oooo0000003oool1000000005`3o
+ool00`000000oooo0?ooo`3o0?ooof40oooo00 at 000000?ooo`000000oooo0P0000010?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?ooof40oooo00 at 000000?ooo`000000oooo0P0000010?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?ooof40oooo0P000000103oool000000?ooo`0000010?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?ooof00oooo00L000000?ooo`000000oooo0000003oool000000040
+oooo000G0?ooo`030000003oool0oooo0?l0ooooH03oool01`000000oooo0000003oool000000?oo
+o`0000000 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`070000003oool000000?oo
+o`000000oooo000000010?ooo`005`3oool00`000000oooo0?ooo`3o0?ooof00oooo00H000000?oo
+o`000000oooo0000003oool2000000005`3oool00`000000oooo0?ooo`3o0?ooof00oooo00 at 00000
+0?ooo`000000oooo0P0000010?ooo`400000000G0?ooo`030000003oool0oooo0?l0ooooH03oool0
+1`000000oooo000000000000oooo0000003oool00 at 00000001L0oooo00<000000?ooo`3oool0o`3o
+oomO0?ooo`030000003oool0oooo0080000000<0oooo0000003oool00 at 00000001L0oooo00<00000
+0?ooo`3oool0o`3ooomO0?ooo`060000003oool000000?ooo`000000oooo0P0000010?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?oooel0oooo00H000000?ooo`000000oooo0000003oool200000040
+oooo000G0?ooo`030000003oool0oooo0?l0ooooG`3oool01P000000oooo0000003oool000000?oo
+o`8000000 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooomN0?ooo`070000003oool0oooo0000
+003oool000000?ooo`0200000040oooo000G0?ooo`030000003oool0oooo0?l0ooooGP3oool01 at 00
+0000oooo0?ooo`000000oooo008000000 at 3oool100000040oooo000G0?ooo`030000003oool0oooo
+0?l0ooooGP3oool01 at 000000oooo0?ooo`000000oooo008000000 at 3oool1000000400000000G0?oo
+o`030000003oool0oooo0?l0ooooGP3oool00`000000oooo0?ooo`02000000030?ooo`000000oooo
+00800000000G0?ooo`030000003oool0oooo0?l0ooooGP3oool00`000000oooo0?ooo`0200000003
+0?ooo`000000oooo00800000000G0?ooo`030000003oool0oooo0?l0ooooG at 3oool01`000000oooo
+0?ooo`000000oooo0000003oool00P0000010?ooo`400000000G0?ooo`030000003oool0oooo0?l0
+ooooG at 3oool01`000000oooo0?ooo`000000oooo0000003oool00P0000010?ooo`400000000G0?oo
+o`030000003oool0oooo0?l0ooooG at 3oool01`000000oooo0?ooo`000000oooo0000003oool00`00
+00010?ooo`005`3oool00`000000oooo0?ooo`3o0?oooed0oooo00D000000?ooo`3oool000000?oo
+o`02000000030?ooo`00000000000040oooo000G0?ooo`030000003oool0oooo0?l0ooooG03oool0
+1P000000oooo0?ooo`3oool000000?ooo`80000000<0oooo0000000000000 at 3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`060000003oool0oooo0?ooo`000000oooo0P0000000`3oool0
+000000000001000000005`3oool00`000000oooo0?ooo`3o0?oooe`0oooo00H000000?ooo`3oool0
+oooo0000003oool2000000030?ooo`000000000000400000000G0?ooo`030000003oool0oooo0?l0
+ooooG03oool01`000000oooo0?ooo`000000oooo0000003oool00P0000010?ooo`4000000 at 000000
+01L0oooo00<000000?ooo`3oool0o`3ooomK0?ooo`080000003oool0oooo0?ooo`000000oooo0000
+003oool200000040oooo0 at 000001000000005`3oool00`000000oooo0?ooo`3o0?oooe/0oooo00P0
+00000?ooo`3oool0oooo0000003oool000000?ooo`8000000 at 3oool1000000400000000G0?ooo`03
+0000003oool0oooo0?l0ooooF`3oool020000000oooo0?ooo`3oool000000?ooo`000000oooo1000
+00010?ooo`005`3oool00`000000oooo0?ooo`3o0?oooeX0oooo00<000000?ooo`3oool00P3oool0
+1 at 000000oooo000000000000oooo00@00000000G0?ooo`030000003oool0oooo0?l0ooooFP3oool0
+1 at 000000oooo0?ooo`3oool000000080oooo0P0000000`3oool0000000000002000000005`3oool0
+0`000000oooo0?ooo`3o0?oooeX0oooo00D000000?ooo`3oool0oooo000000020?ooo`80000000<0
+oooo0000000000000P00000001L0oooo00<000000?ooo`3oool0o`3ooomI0?ooo`030000003oool0
+oooo0080oooo00<000000?ooo`3oool00P0000000`3oool0000000000002000000005`3oool00`00
+0000oooo0?ooo`3o0?oooeT0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`030000
+00030?ooo`000000000000400000000G0?ooo`030000003oool0oooo0?l0ooooF at 3oool00`000000
+oooo0?ooo`020?ooo`040000003oool000000?ooo`80000000<0oooo0000000000000 at 00000001L0
+oooo00<000000?ooo`3oool0o`3ooomI0?ooo`030000003oool0oooo0080oooo00 at 000000?ooo`00
+0000oooo0P0000000`3oool0000000000001000000005`3oool00`000000oooo0?ooo`3o0?oooeP0
+oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`000000oooo0080000000<0oooo0000
+000000000 at 00000001L0oooo00<000000?ooo`3oool0o`3ooomH0?ooo`030000003oool0oooo0080
+oooo00D000000?ooo`3oool000000?ooo`06000000005`3oool00`000000oooo0?ooo`3o0?oooeP0
+oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`000000oooo00H00000000G0?ooo`03
+0000003oool0oooo0?l0ooooE`3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0080
+000000<0oooo0000000000000`00000001L0oooo00<000000?ooo`3oool0o`3ooomG0?ooo`030000
+003oool0oooo00<0oooo00<000000?ooo`3oool00P0000000`3oool0000000000003000000005`3o
+ool00`000000oooo0?ooo`3o0?oooeL0oooo00<000000?ooo`3oool00P3oool01`000000oooo0?oo
+o`000000oooo0000003oool01 at 00000001L0oooo00<000000?ooo`3oool0o`3ooomF0?ooo`030000
+003oool0oooo00<0oooo00D000000?ooo`3oool000000?ooo`02000000030?ooo`00000000000080
+0000000G0?ooo`030000003oool0oooo0?l0ooooEP3oool00`000000oooo0?ooo`030?ooo`050000
+003oool0oooo0000003oool00P000000103oool000000000000000010?ooo`005`3oool00`000000
+oooo0?ooo`3o0?oooeH0oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?ooo`000000oooo
+0080000000 at 0oooo00000000000000000@3oool001L0oooo00<000000?ooo`3oool0o`3ooomE0?oo
+o`030000003oool0oooo00 at 0oooo00D000000?ooo`3oool000000?ooo`03000000030?ooo`000000
+00000040oooo000G0?ooo`030000003oool0oooo0?l0ooooE at 3oool00`000000oooo0?ooo`030?oo
+o`060000003oool0oooo0?ooo`000000oooo1P0000010?ooo`005`3oool00`000000oooo0?ooo`3o
+0?oooeD0oooo00<000000?ooo`3oool00`3oool010000000oooo0?ooo`0000020?ooo`H000000 at 3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooomD0?ooo`030000003oool0oooo00 at 0oooo00@00000
+0?ooo`3oool000000P3oool600000040oooo000G0?ooo`030000003oool0oooo0?l0ooooE03oool0
+0`000000oooo0?ooo`040?ooo`070000003oool0oooo0000003oool000000?ooo`0500000040oooo
+000G0?ooo`030000003oool0oooo0?l0ooooE03oool00`000000oooo0?ooo`030?ooo`080000003o
+ool0oooo0?ooo`000000oooo0000003oool500000040oooo000G0?ooo`030000003oool0oooo0?l0
+ooooD`3oool00`000000oooo0?ooo`040?ooo`080000003oool0oooo0?ooo`000000oooo0000003o
+ool500000040oooo000G0?ooo`030000003oool0oooo0?l0ooooD`3oool00`000000oooo0?ooo`04
+0?ooo`080000003oool0oooo0?ooo`000000oooo0000003oool500000040oooo000G0?ooo`030000
+003oool0oooo0?l0ooooD`3oool00`000000oooo0?ooo`040?ooo`040000003oool0oooo00000080
+oooo0P0000000`3oool000000000000200000040oooo000G0?ooo`030000003oool0oooo0?l0oooo
+DP3oool00`000000oooo0?ooo`040?ooo`050000003oool0oooo0?ooo`0000000P3oool200000004
+0?ooo`000000000000000080oooo000G0?ooo`030000003oool0oooo0?l0ooooDP3oool00`000000
+oooo0?ooo`040?ooo`050000003oool0oooo0?ooo`0000000P3oool600000080oooo000G0?ooo`03
+0000003oool0oooo0?l0ooooD at 3oool00`000000oooo0?ooo`050?ooo`050000003oool0oooo0?oo
+o`0000000P3oool600000080oooo000G0?ooo`030000003oool0oooo0?l0ooooD at 3oool00`000000
+oooo0?ooo`050?ooo`080000003oool0oooo0?ooo`000000oooo0000003oool500000080oooo000G
+0?ooo`030000003oool0oooo0?l0ooooD at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo0080oooo00 at 000000?ooo`000000oooo1 at 0000020?ooo`005`3oool00`000000oooo0?ooo`3o
+0?oooe00oooo00<000000?ooo`3oool01 at 3oool01@000000oooo0?ooo`3oool000000080oooo00<0
+00000?ooo`000000100000020?ooo`005`3oool00`000000oooo0?ooo`3o0?oooe00oooo00<00000
+0?ooo`3oool01 at 3oool01@000000oooo0?ooo`3oool000000080oooo00<000000?ooo`0000001000
+00020?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodl0oooo00<000000?ooo`3oool01P3oool0
+1 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`000000100000020?ooo`005`3oool0
+0`000000oooo0?ooo`3o0?ooodl0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`02
+0?ooo`050000003oool0oooo0000003oool01 at 0000020?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooodh0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?ooo`050000003oool0
+oooo0000003oool01 at 0000020?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodh0oooo00<00000
+0?ooo`3oool01P3oool00`000000oooo0?ooo`020?ooo`060000003oool000000?ooo`000000oooo
+0`0000030?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodd0oooo00<000000?ooo`3oool01P3o
+ool00`000000oooo0?ooo`020?ooo`070000003oool0oooo0000003oool000000?ooo`03000000<0
+oooo000G0?ooo`030000003oool0oooo0?l0ooooC03oool00`000000oooo0?ooo`070?ooo`030000
+003oool0oooo0080oooo00D000000?ooo`3oool000000?ooo`05000000<0oooo000G0?ooo`030000
+003oool0oooo0?l0ooooB`3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo00<0oooo
+00D000000?ooo`3oool000000?ooo`05000000<0oooo000G0?ooo`030000003oool0oooo0?l0oooo
+B`3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo00<0oooo00D000000?ooo`3oool0
+00000?ooo`05000000<0oooo000G0?ooo`030000003oool0oooo0?l0ooooBP3oool00`000000oooo
+0?ooo`080?ooo`030000003oool0oooo00<0oooo00D000000?ooo`3oool000000?ooo`05000000<0
+oooo000G0?ooo`030000003oool0oooo0?l0ooooB at 3oool00`000000oooo0?ooo`080?ooo`030000
+003oool0oooo00<0oooo00 at 000000?ooo`3oool000000P3oool5000000<0oooo000G0?ooo`030000
+003oool0oooo0?l0ooooB03oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo00<0oooo
+00 at 000000?ooo`3oool000000P3oool5000000<0oooo000G0?ooo`030000003oool0oooo0?l0oooo
+A`3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0oooo00<0oooo00 at 000000?ooo`3oool0
+00000P3oool5000000<0oooo000G0?ooo`030000003oool0oooo0?l0ooooAP3oool00`000000oooo
+0?ooo`0:0?ooo`030000003oool0oooo00 at 0oooo00L000000?ooo`3oool000000?ooo`000000oooo
+00 at 000000`3oool001L0oooo00<000000?ooo`3oool0o`3ooom50?ooo`030000003oool0oooo00/0
+oooo00<000000?ooo`3oool00`3oool020000000oooo0?ooo`3oool000000?ooo`000000oooo1000
+00030?ooo`005`3oool00`000000oooo0?ooo`3o0?oood at 0oooo00<000000?ooo`3oool0303oool0
+0`000000oooo0?ooo`030?ooo`080000003oool0oooo0?ooo`000000oooo0000003oool3000000 at 0
+oooo000G0?ooo`030000003oool0oooo0?l0oooo@`3oool00`000000oooo0?ooo`0<0?ooo`030000
+003oool0oooo00 at 0oooo00P000000?ooo`3oool0oooo0000003oool000000?ooo`<00000103oool0
+01L0oooo00<000000?ooo`3oool0o`3ooom30?ooo`030000003oool0oooo00`0oooo00<000000?oo
+o`3oool0103oool010000000oooo0?ooo`0000020?ooo`030000003oool0000000800000103oool0
+01L0oooo00<000000?ooo`3oool0o`3ooom20?ooo`030000003oool0oooo00`0oooo00<000000?oo
+o`3oool01 at 3oool010000000oooo0?ooo`0000020?ooo`D00000103oool001L0oooo00<000000?oo
+o`3oool0o`3ooom00?ooo`8000003`3oool00`000000oooo0?ooo`040?ooo`050000003oool0oooo
+0?ooo`0000000P3oool5000000 at 0oooo000G0?ooo`030000003oool0oooo0?l0oooo?`3oool00`00
+0000oooo0?ooo`0>0?ooo`030000003oool0oooo00D0oooo00P000000?ooo`3oool0oooo0000003o
+ool000000?ooo`@00000103oool001L0oooo00<000000?ooo`3oool0o`3ooolm0?ooo`8000004 at 3o
+ool00`000000oooo0?ooo`050?ooo`080000003oool0oooo0?ooo`000000oooo0000003oool40000
+00 at 0oooo000G0?ooo`030000003oool0oooo0?l0oooo>`3oool2000001<0oooo00<000000?ooo`3o
+ool01 at 3oool020000000oooo0?ooo`3oool000000?ooo`000000oooo100000040?ooo`005`3oool0
+0`000000oooo0?ooo`3o0?ooocP0oooo0`00000D0?ooo`030000003oool0oooo00D0oooo00D00000
+0?ooo`3oool0oooo000000020?ooo`030000003oool0000000<00000103oool001L0oooo00<00000
+0?ooo`3oool0o`3ooold0?ooo`@000005`3oool00`000000oooo0?ooo`050?ooo`050000003oool0
+oooo0?ooo`0000000P3oool00`000000oooo00000003000000 at 0oooo000G0?ooo`030000003oool0
+oooo0?l0oooo<@3oool3000001X0oooo00<000000?ooo`3oool01P3oool01 at 000000oooo0?ooo`3o
+ool000000080oooo00<000000?ooo`0000000`0000040?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooobh0oooo0`00000M0?ooo`030000003oool0oooo00H0oooo00D000000?ooo`3oool0oooo0000
+00020?ooo`030000003oool00000008000001 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolZ
+0?ooo`@00000803oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo0080oooo00D00000
+0?ooo`3oool000000?ooo`03000000D0oooo000G0?ooo`030000003oool0oooo0?l0oooo8 at 3oool9
+000002<0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?ooo`060000003oool0
+00000?ooo`000000oooo0P0000050?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa/0oooo1P00
+000/0?ooo`030000003oool0oooo00H0oooo00D000000?ooo`3oool0oooo000000020?ooo`040000
+003oool000000?ooo`8000001 at 3oool001L0oooo8P00003X0?oooa<00000<@3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo0080oooo00D000000?ooo`3oool000000?ooo`04000000D0
+oooo000<0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool07`3ooooX000004 at 0oooo
+00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0000003o
+ool0100000050?ooo`00303oool00`000000oooo0?ooo`080?ooo`<00000o`3ooom;0?ooo`030000
+003oool0oooo00L0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`000000oooo00 at 0
+00001 at 3oool000`0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`3o0?oood/0oooo
+00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`030?ooo`050000003oool0oooo0000003o
+ool0100000050?ooo`00303oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo0?l0oooo
+BP3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo00<0oooo00D000000?ooo`3oool0
+00000?ooo`04000000D0oooo000:0?ooo`030000003oool0000000X0oooo00<000000?ooo`3oool0
+o`3ooom:0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool00P3oool010000000oooo
+0?ooo`0000020?ooo`@000001 at 3oool000/0oooo0P00000:0?ooo`030000003oool0oooo0?l0oooo
+B at 3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo0080oooo00L000000?ooo`3oool0
+00000?ooo`000000oooo00<000001 at 3oool000`0oooo00<000000?ooo`3oool0203oool00`000000
+oooo0?ooo`3o0?ooodP0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`030?ooo`07
+0000003oool0oooo0000003oool000000?ooo`02000000H0oooo000G0?ooo`030000003oool0oooo
+0?l0ooooA`3oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo00<0oooo00L000000?oo
+o`3oool000000?ooo`000000oooo008000001P3oool001L0oooo00<000000?ooo`3oool0o`3ooom7
+0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool00`3oool01`000000oooo0?ooo`00
+0000oooo0000003oool00P0000060?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodH0oooo00<0
+00000?ooo`3oool02 at 3oool00`000000oooo0?ooo`040?ooo`070000003oool0oooo0000003oool0
+00000?ooo`02000000H0oooo000G0?ooo`030000003oool0oooo0?l0ooooA at 3oool00`000000oooo
+0?ooo`0:0?ooo`030000003oool0oooo00<0oooo00H000000?ooo`3oool0oooo0000003oool40000
+00H0oooo000G0?ooo`030000003oool0oooo0?l0ooooA03oool00`000000oooo0?ooo`0;0?ooo`03
+0000003oool0oooo00<0oooo00 at 000000?ooo`3oool000000P3oool4000000H0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo@`3oool00`000000oooo0?ooo`0;0?ooo`030000003oool0oooo00 at 0
+oooo00 at 000000?ooo`3oool000000P3oool4000000H0oooo000G0?ooo`030000003oool0oooo0?l0
+oooo at P3oool00`000000oooo0?ooo`0<0?ooo`030000003oool0oooo00 at 0oooo00L000000?ooo`3o
+ool000000?ooo`000000oooo00<000001P3oool001L0oooo00<000000?ooo`3oool0o`3ooom10?oo
+o`030000003oool0oooo00`0oooo00<000000?ooo`3oool0103oool020000000oooo0?ooo`3oool0
+00000?ooo`000000oooo0`0000060?ooo`005`3oool00`000000oooo0?ooo`3o0?oood00oooo00<0
+00000?ooo`3oool03 at 3oool00`000000oooo0?ooo`040?ooo`080000003oool0oooo0?ooo`000000
+oooo0000003oool3000000H0oooo000G0?ooo`030000003oool0oooo0?l0oooo?`3oool00`000000
+oooo0?ooo`0>0?ooo`030000003oool0oooo00 at 0oooo00P000000?ooo`3oool0oooo0000003oool0
+00000?ooo`<000001P3oool001L0oooo00<000000?ooo`3oool0o`3oooln0?ooo`030000003oool0
+oooo00h0oooo00<000000?ooo`3oool01 at 3oool010000000oooo0?ooo`0000020?ooo`040000003o
+ool00000000000L0oooo000G0?ooo`030000003oool0oooo0?l0oooo?@3oool00`000000oooo0?oo
+o`0?0?ooo`030000003oool0oooo00 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`040000
+003oool00000000000L0oooo000G0?ooo`030000003oool0oooo0?l0oooo>`3oool200000180oooo
+00<000000?ooo`3oool0103oool01 at 000000oooo0?ooo`3oool000000080oooo0P0000000`3oool0
+00000?ooo`060?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocP0oooo0`00000C0?ooo`030000
+003oool0oooo00D0oooo00D000000?ooo`3oool0oooo000000020?ooo`@000001`3oool001L0oooo
+00<000000?ooo`3oool0o`3ooolf0?ooo`8000005P3oool00`000000oooo0?ooo`050?ooo`080000
+003oool0oooo0?ooo`000000oooo0000003oool3000000L0oooo000G0?ooo`030000003oool0oooo
+0?l0oooo=03oool2000001P0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`020?oo
+o`040000003oool000000?ooo`<000001`3oool001L0oooo00<000000?ooo`3oool0o`3ooola0?oo
+o`<000006 at 3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo0080oooo00 at 000000?oo
+o`000000oooo0`0000070?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobh0oooo0`00000L0?oo
+o`030000003oool0oooo00D0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0
+0000008000001`3oool001L0oooo00<000000?ooo`3oool0o`3ooolZ0?ooo`@000007P3oool00`00
+0000oooo0?ooo`060?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo00000002
+000000L0oooo000G0?ooo`030000003oool0oooo0?l0oooo9`3oool300000280oooo00<000000?oo
+o`3oool01 at 3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0000003oool00`000007
+0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooob40oooo1P00000U0?ooo`030000003oool0oooo
+00D0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`000000oooo00<000001`3oool0
+01L0oooo00<000000?ooo`3oool0o`3ooolF0?ooo`/00000:P3oool00`000000oooo0?ooo`060?oo
+o`030000003oool0oooo0080oooo00D000000?ooo`3oool000000?ooo`02000000P0oooo000G0?oo
+ob800000j03oool>000003D0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?oo
+o`040000003oool000000?ooo`<00000203oool001L0oooo00<000000?ooo`3oool07`3ooomO0000
+05l0oooo:P0000120?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool00P3oool01 at 00
+0000oooo0?ooo`000000oooo00<00000203oool001L0oooo00<000000?ooo`3oool0OP3ooomO0000
+06`0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo
+0000003oool00`0000080?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodT0oooo00<000000?oo
+o`3oool01`3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0000003oool00`000008
+0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodT0oooo00<000000?ooo`3oool01P3oool00`00
+0000oooo0?ooo`030?ooo`050000003oool0oooo0000003oool00`0000080?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?ooodP0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`030?oo
+o`050000003oool0oooo0000003oool00`0000080?ooo`005`3oool00`000000oooo0?ooo`3o0?oo
+odL0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`030?ooo`030000003oool00000
+0080oooo0`0000080?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodL0oooo00<000000?ooo`3o
+ool0203oool00`000000oooo0?ooo`020?ooo`040000003oool0oooo00000080oooo00<000000?oo
+o`000000203oool001L0oooo00<000000?ooo`3oool0o`3ooom60?ooo`030000003oool0oooo00P0
+oooo00<000000?ooo`3oool00`3oool010000000oooo0?ooo`0000020?ooo`<00000203oool001L0
+oooo00<000000?ooo`3oool0o`3ooom50?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3o
+ool00`3oool01 at 000000oooo0?ooo`000000oooo00 at 00000203oool001L0oooo00<000000?ooo`3o
+ool0o`3ooom50?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool00`3oool01 at 000000
+oooo0?ooo`000000oooo00<000002 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooom40?ooo`03
+0000003oool0oooo00T0oooo00<000000?ooo`3oool0103oool01 at 000000oooo0?ooo`000000oooo
+00<000002 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooom30?ooo`030000003oool0oooo00X0
+oooo00<000000?ooo`3oool00`3oool010000000oooo0?ooo`0000020?ooo`<000002 at 3oool001L0
+oooo00<000000?ooo`3oool0o`3ooom20?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3o
+ool00`3oool010000000oooo0?ooo`0000020?ooo`<000002 at 3oool001L0oooo00<000000?ooo`3o
+ool0o`3ooom10?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool0103oool010000000
+oooo0?ooo`0000020?ooo`<000002 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooom10?ooo`03
+0000003oool0oooo00/0oooo00<000000?ooo`3oool0103oool010000000oooo0?ooo`0000020?oo
+o`030000003oool0000000T0oooo000G0?ooo`030000003oool0oooo0?l0oooo at 03oool00`000000
+oooo0?ooo`0<0?ooo`030000003oool0oooo00<0oooo00D000000?ooo`3oool0oooo000000020?oo
+o`<000002 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolo0?ooo`030000003oool0oooo00d0
+oooo00<000000?ooo`3oool00`3oool01P000000oooo0?ooo`3oool000000?ooo`@000002 at 3oool0
+01L0oooo00<000000?ooo`3oool0o`3oooln0?ooo`030000003oool0oooo00d0oooo00<000000?oo
+o`3oool0103oool01P000000oooo0?ooo`3oool000000?ooo`@000002 at 3oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolm0?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0103oool0
+10000000oooo0?ooo`0000020?ooo`@000002 at 3oool001L0oooo00<000000?ooo`3oool0o`3oooll
+0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool0103oool010000000oooo0?ooo`00
+00020?ooo`@000002 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolj0?ooo`8000004 at 3oool0
+0`000000oooo0?ooo`040?ooo`050000003oool0oooo0?ooo`0000000P3oool3000000X0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo>@3oool00`000000oooo0?ooo`0A0?ooo`030000003oool0
+oooo00 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`<000002P3oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolg0?ooo`800000503oool00`000000oooo0?ooo`040?ooo`050000003oool0
+oooo0?ooo`0000000P3oool00`000000oooo0000000:0?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooocD0oooo0P00000E0?ooo`030000003oool0oooo00D0oooo00H000000?ooo`3oool0oooo0000
+003oool2000000030?ooo`000000oooo00T0oooo000G0?ooo`030000003oool0oooo0?l0oooo<`3o
+ool2000001L0oooo00<000000?ooo`3oool01 at 3oool010000000oooo0?ooo`0000020?ooo`@00000
+2P3oool001L0oooo00<000000?ooo`3oool0o`3ooola0?ooo`8000006 at 3oool00`000000oooo0?oo
+o`040?ooo`050000003oool0oooo0?ooo`0000000P3oool4000000X0oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo;`3oool2000001/0oooo00<000000?ooo`3oool0103oool01 at 000000oooo0?oo
+o`3oool000000080oooo1000000:0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobd0oooo0P00
+000L0?ooo`030000003oool0oooo00D0oooo00D000000?ooo`3oool0oooo000000020?ooo`@00000
+2P3oool001L0oooo00<000000?ooo`3oool0o`3ooolZ0?ooo`<000007P3oool00`000000oooo0?oo
+o`050?ooo`050000003oool0oooo0?ooo`0000000P3oool4000000X0oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo9`3oool300000240oooo00<000000?ooo`3oool0103oool00`000000oooo0?oo
+o`020?ooo`030000003oool0oooo00 at 000002P3oool001L0oooo00<000000?ooo`3oool0o`3ooolQ
+0?ooo`H000008`3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo0080oooo00 at 00000
+0?ooo`000000oooo0`00000:0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa/0oooo1P00000Y
+0?ooo`030000003oool0oooo00D0oooo00D000000?ooo`3oool0oooo000000020?ooo`80000000<0
+oooo0000000000002P3oool001L0oooo00<000000?ooo`3oool0o`3oool?0?ooo``00000;P3oool0
+0`000000oooo0?ooo`060?ooo`050000003oool0oooo0?ooo`0000000P3oool2000000030?ooo`00
+0000oooo00X0oooo000G0?ooob800000g03ooolC000003X0oooo00<000000?ooo`3oool01 at 3oool0
+0`000000oooo0?ooo`020?ooo`030000003oool0oooo00 at 000002`3oool001L0oooo00<000000?oo
+o`3oool07`3ooooL000004`0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?oo
+o`030000003oool0oooo00 at 000002`3oool001L0oooo00<000000?ooo`3oool0o`3ooom80?ooo`03
+0000003oool0oooo00H0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`04000000/0
+oooo000G0?ooo`030000003oool0oooo0?l0ooooA`3oool00`000000oooo0?ooo`070?ooo`030000
+003oool0oooo0080oooo00<000000?ooo`3oool01000000;0?ooo`005`3oool00`000000oooo0?oo
+o`3o0?ooodH0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`020?ooo`050000003o
+ool0oooo0000003oool00`00000;0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodH0oooo00<0
+00000?ooo`3oool01`3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0000003oool0
+0`00000;0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooodD0oooo00<000000?ooo`3oool0203o
+ool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0000003oool00`00000;0?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?ooodD0oooo00<000000?ooo`3oool0203oool00`000000oooo0?oo
+o`020?ooo`050000003oool0oooo0000003oool00`00000;0?ooo`005`3oool00`000000oooo0?oo
+o`3o0?oood at 0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`030?ooo`030000003o
+ool0oooo0080000000<0oooo0000000000002`3oool001L0oooo00<000000?ooo`3oool0o`3ooom3
+0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`02
+000000030?ooo`000000000000/0oooo000G0?ooo`030000003oool0oooo0?l0oooo@`3oool00`00
+0000oooo0?ooo`090?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool01000000<0?oo
+o`005`3oool00`000000oooo0?ooo`3o0?oood80oooo00<000000?ooo`3oool02P3oool00`000000
+oooo0?ooo`020?ooo`050000003oool0oooo0000003oool00`00000<0?ooo`005`3oool00`000000
+oooo0?ooo`3o0?oood80oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`030?ooo`05
+0000003oool0oooo0000003oool00`00000<0?ooo`005`3oool00`000000oooo0?ooo`3o0?oood40
+oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`030?ooo`050000003oool0oooo0000
+003oool00`00000<0?ooo`005`3oool00`000000oooo0?ooo`3o0?oood40oooo00<000000?ooo`3o
+ool02P3oool00`000000oooo0?ooo`030?ooo`050000003oool0oooo0000003oool00`00000<0?oo
+o`005`3oool00`000000oooo0?ooo`3o0?oood00oooo00<000000?ooo`3oool02`3oool00`000000
+oooo0?ooo`030?ooo`050000003oool0oooo0000003oool00`00000<0?ooo`005`3oool00`000000
+oooo0?ooo`3o0?oood00oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`040?ooo`05
+0000003oool0oooo0000003oool00`00000<0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocl0
+oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`030?ooo`040000003oool0oooo0?oo
+o`80000000<0oooo000000000000303oool001L0oooo00<000000?ooo`3oool0o`3oooln0?ooo`03
+0000003oool0oooo00`0oooo00<000000?ooo`3oool00`3oool01`000000oooo0?ooo`000000oooo
+0000003oool00P00000<0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocd0oooo00<000000?oo
+o`3oool03 at 3oool00`000000oooo0?ooo`030?ooo`070000003oool0oooo0000003oool000000?oo
+o`02000000`0oooo000G0?ooo`030000003oool0oooo0?l0oooo?03oool00`000000oooo0?ooo`0=
+0?ooo`030000003oool0oooo00 at 0oooo00D000000?ooo`3oool000000?ooo`02000000030?ooo`00
+0000oooo00/0oooo000G0?ooo`030000003oool0oooo0?l0oooo>`3oool00`000000oooo0?ooo`0>
+0?ooo`030000003oool0oooo00 at 0oooo00D000000?ooo`3oool000000?ooo`03000000d0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo>P3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0
+oooo00 at 0oooo00D000000?ooo`3oool000000?ooo`03000000d0oooo000G0?ooo`030000003oool0
+oooo0?l0oooo>@3oool00`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo00<0oooo00H00000
+0?ooo`3oool0oooo0000003oool3000000d0oooo000G0?ooo`030000003oool0oooo0?l0oooo=`3o
+ool200000180oooo00<000000?ooo`3oool0103oool01P000000oooo0?ooo`3oool000000?ooo`<0
+00003 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooole0?ooo`800000503oool00`000000oooo
+0?ooo`040?ooo`060000003oool0oooo0?ooo`000000oooo0`00000=0?ooo`005`3oool00`000000
+oooo0?ooo`3o0?oooc<0oooo0P00000F0?ooo`030000003oool0oooo00 at 0oooo00@000000?ooo`3o
+ool000000P3oool3000000d0oooo000G0?ooo`030000003oool0oooo0?l0oooo<P3oool00`000000
+oooo0?ooo`0F0?ooo`030000003oool0oooo00 at 0oooo00L000000?ooo`3oool000000?ooo`000000
+oooo008000003 at 3oool001L0oooo00<000000?ooo`3oool0o`3oool`0?ooo`800000603oool00`00
+0000oooo0?ooo`040?ooo`080000003oool0oooo0?ooo`000000oooo0000003oool2000000d0oooo
+000G0?ooo`030000003oool0oooo0?l0oooo;`3oool00`000000oooo0?ooo`0H0?ooo`030000003o
+ool0oooo00 at 0oooo00P000000?ooo`3oool0oooo0000003oool000000?ooo`8000003 at 3oool001L0
+oooo00<000000?ooo`3oool0o`3oool]0?ooo`8000006`3oool00`000000oooo0?ooo`040?ooo`06
+0000003oool0oooo0?ooo`000000oooo0P0000000`3oool000000?ooo`0<0?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?ooobX0oooo0`00000M0?ooo`030000003oool0oooo00 at 0oooo00H000000?oo
+o`3oool0oooo0000003oool2000000030?ooo`000000oooo00`0oooo000G0?ooo`030000003oool0
+oooo0?l0oooo9`3oool3000001l0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`02
+0?ooo`060000003oool000000000003oool000003 at 3oool001L0oooo00<000000?ooo`3oool0o`3o
+oolS0?ooo`@000008P3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo0080oooo00<0
+00000?ooo`0000000P00000>0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooal0oooo1000000U
+0?ooo`030000003oool0oooo00D0oooo00D000000?ooo`3oool0oooo000000020?ooo`<000003P3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolK0?ooo`@00000:@3oool00`000000oooo0?ooo`05
+0?ooo`050000003oool0oooo0?ooo`0000000P3oool3000000h0oooo00090?ooo`D000002 at 3oool0
+0`000000oooo0?ooo`3o0?oooaH0oooo1 at 00000/0?ooo`030000003oool0oooo00H0oooo00P00000
+0?ooo`3oool0oooo0000003oool000000?ooo`8000003P3oool000X0oooo00<000000?ooo`3oool0
+2P3ooolR00000>l0oooo1`00000a0?ooo`030000003oool0oooo00D0oooo00<000000?ooo`3oool0
+0P3oool010000000oooo0000003oool2000000h0oooo000;0?ooo`030000003oool0oooo00T0oooo
+0`00000O0?ooocH00000YP3ooolC000003L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`020?ooo`040000003oool000000?ooo`8000003P3oool000`0oooo00<000000?ooo`3oool0
+203oool00`000000oooo0?ooo`1E0?oood at 00000:`3ooolg000004X0oooo00<000000?ooo`3oool0
+1P3oool00`000000oooo0?ooo`020?ooo`040000003oool000000?ooo`8000003P3oool000d0oooo
+00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`2I0?ooob/00000P03oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo0080oooo00H000000?ooo`00000000000?ooo`00000>0?oo
+o`002 at 3oool01@000000oooo0?ooo`3oool0000000T0oooo00<000000?ooo`3oool0o`3ooom50?oo
+o`030000003oool0oooo00L0oooo00<000000?ooo`3oool00P3oool01P000000oooo000000000000
+oooo000000h0oooo000:0?ooo`<000002P3oool00`000000oooo0?ooo`3o0?oood at 0oooo00<00000
+0?ooo`3oool01`3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo0080000000<0oooo
+0000003oool03 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooom40?ooo`030000003oool0oooo
+00L0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`02000000030?ooo`000000oooo
+00d0oooo000G0?ooo`030000003oool0oooo0?l0oooo@`3oool00`000000oooo0?ooo`080?ooo`03
+0000003oool0oooo0080oooo00<000000?ooo`3oool00P0000000`3oool000000?ooo`0=0?ooo`00
+5`3oool00`000000oooo0?ooo`3o0?oood<0oooo00<000000?ooo`3oool0203oool00`000000oooo
+0?ooo`020?ooo`040000003oool000000?ooo`8000003`3oool001L0oooo00<000000?ooo`3oool0
+o`3ooom20?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool00P3oool010000000oooo
+0000003oool2000000l0oooo000G0?ooo`030000003oool0oooo0?l0oooo at P3oool00`000000oooo
+0?ooo`080?ooo`030000003oool0oooo00<0oooo00 at 000000?ooo`000000oooo0P00000?0?ooo`00
+5`3oool00`000000oooo0?ooo`3o0?oood40oooo00<000000?ooo`3oool02 at 3oool00`000000oooo
+0?ooo`020?ooo`050000003oool0oooo0000003oool00P00000?0?ooo`005`3oool00`000000oooo
+0?ooo`3o0?oood40oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`020?ooo`050000
+003oool0oooo0000003oool00P00000?0?ooo`005`3oool00`000000oooo0?ooo`3o0?oood00oooo
+00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0000003o
+ool00P00000?0?ooo`005`3oool00`000000oooo0?ooo`3o0?oood00oooo00<000000?ooo`3oool0
+2 at 3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0080000000<0oooo0000003oool0
+3P3oool001L0oooo00<000000?ooo`3oool0o`3ooolo0?ooo`030000003oool0oooo00X0oooo00<0
+00000?ooo`3oool00`3oool00`000000oooo0?ooo`02000000030?ooo`000000oooo00h0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo?`3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0
+oooo00<0oooo00<000000?ooo`3oool00P0000000`3oool000000?ooo`0>0?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?oooch0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`020?oo
+o`040000003oool0oooo0?ooo`80000000<0oooo0000003oool03P3oool001L0oooo00<000000?oo
+o`3oool0o`3ooolm0?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool00`3oool02000
+0000oooo0?ooo`000000oooo0000003oool000003`3oool001L0oooo00<000000?ooo`3oool0o`3o
+oolm0?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool00`3oool020000000oooo0?oo
+o`000000oooo0000003oool000003`3oool001L0oooo00<000000?ooo`3oool0o`3oooll0?ooo`03
+0000003oool0oooo00`0oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?ooo`000000oooo
+00800000403oool001L0oooo00<000000?ooo`3oool0o`3ooolk0?ooo`030000003oool0oooo00d0
+oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?ooo`000000oooo00800000403oool001L0
+oooo00<000000?ooo`3oool0o`3ooolj0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3o
+ool0103oool01 at 000000oooo0?ooo`000000oooo00800000403oool001L0oooo00<000000?ooo`3o
+ool0o`3ooolj0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool00`3oool01P000000
+oooo0?ooo`3oool000000?ooo`800000403oool001L0oooo00<000000?ooo`3oool0o`3oooli0?oo
+o`030000003oool0oooo00h0oooo00<000000?ooo`3oool00`3oool010000000oooo0?ooo`3oool2
+000000030?ooo`000000oooo00l0oooo000G0?ooo`030000003oool0oooo0?l0oooo>03oool00`00
+0000oooo0?ooo`0?0?ooo`030000003oool0oooo00<0oooo00 at 000000?ooo`3oool0oooo0P000000
+0`3oool000000?ooo`0?0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocL0oooo00<000000?oo
+o`3oool03`3oool00`000000oooo0?ooo`040?ooo`040000003oool0oooo0?ooo`80000000<0oooo
+0000003oool03`3oool001L0oooo00<000000?ooo`3oool0o`3ooole0?ooo`8000004P3oool00`00
+0000oooo0?ooo`040?ooo`080000003oool0oooo0000003oool000000?ooo`00000 at 0?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?oooc at 0oooo00<000000?ooo`3oool04P3oool00`000000oooo0?oo
+o`040?ooo`080000003oool0oooo0000003oool000000?ooo`00000 at 0?ooo`005`3oool00`000000
+oooo0?ooo`3o0?oooc<0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`030?ooo`09
+0000003oool0oooo0?ooo`000000oooo0000003oool000000100oooo000G0?ooo`030000003oool0
+oooo0?l0oooo<P3oool00`000000oooo0?ooo`0C0?ooo`030000003oool0oooo00 at 0oooo00H00000
+0?ooo`3oool0oooo0000003oool200000140oooo000G0?ooo`030000003oool0oooo0?l0oooo<@3o
+ool00`000000oooo0?ooo`0D0?ooo`030000003oool0oooo00 at 0oooo00H000000?ooo`3oool0oooo
+0000003oool200000140oooo000G0?ooo`030000003oool0oooo0?l0oooo<03oool00`000000oooo
+0?ooo`0E0?ooo`030000003oool0oooo00 at 0oooo00H000000?ooo`3oool0oooo0000003oool20000
+0140oooo000G0?ooo`030000003oool0oooo0?l0oooo;`3oool00`000000oooo0?ooo`0E0?ooo`03
+0000003oool0oooo00D0oooo00H000000?ooo`3oool0oooo0000003oool200000140oooo000G0?oo
+o`030000003oool0oooo0?l0oooo;@3oool2000001P0oooo00<000000?ooo`3oool01 at 3oool01P00
+0000oooo0?ooo`3oool000000?ooo`8000004 at 3oool001L0oooo00<000000?ooo`3oool0o`3oool[
+0?ooo`8000006P3oool00`000000oooo0?ooo`040?ooo`090000003oool0oooo0?ooo`000000oooo
+0000003oool000000140oooo000G0?ooo`030000003oool0oooo0?l0oooo:@3oool2000001/0oooo
+00<000000?ooo`3oool01 at 3oool02@000000oooo0?ooo`3oool000000?ooo`000000oooo0000000A
+0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobL0oooo0P00000M0?ooo`030000003oool0oooo
+00D0oooo00T000000?ooo`3oool0oooo0000003oool000000?ooo`0000004 at 3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolS0?ooo`@000007`3oool00`000000oooo0?ooo`050?ooo`090000003o
+ool0oooo0?ooo`000000oooo0000003oool000000140oooo000G0?ooo`030000003oool0oooo0?l0
+oooo8 at 3oool2000002<0oooo00<000000?ooo`3oool01 at 3oool01P000000oooo0?ooo`3oool00000
+0?ooo`8000004P3oool001L0oooo00<000000?ooo`3oool0o`3ooolN0?ooo`<00000903oool00`00
+0000oooo0?ooo`050?ooo`030000003oool0oooo0080oooo00 at 000000?ooo`00000000004P3oool0
+01L0oooo00<000000?ooo`3oool0o`3ooolK0?ooo`<000009`3oool00`000000oooo0?ooo`050?oo
+o`030000003oool0oooo0080oooo00 at 000000?ooo`00000000004P3oool001L0oooo00<000000?oo
+o`3oool0o`3ooolF0?ooo`D00000:P3oool00`000000oooo0?ooo`050?ooo`050000003oool0oooo
+0?ooo`0000000P3oool200000180oooo000G0?oooa400000o`3oool10?ooo`L00000;P3oool00`00
+0000oooo0?ooo`060?ooo`050000003oool0oooo0?ooo`0000000P3oool200000180oooo000G0?oo
+o`030000003oool0oooo00h0oooo8P00003A0?ooo`d00000=@3oool00`000000oooo0?ooo`060?oo
+o`050000003oool0oooo0?ooo`0000000P3oool200000180oooo000G0?ooo`030000003oool0oooo
+0300oooo9 at 00002O0?ooo`d00000 at P3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo
+0080oooo00D000000?ooo`000000oooo0000000B0?ooo`005`3oool00`000000oooo0?ooo`1E0?oo
+odl000005 at 3ooolk000004h0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?oo
+o`050000003oool000000?ooo`0000004P3oool001L0oooo00<000000?ooo`3oool0Y03ooolE0000
+08T0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020?ooo`040000003oool00000
+000001<0oooo000G0?ooo`030000003oool0oooo0?l0oooo at P3oool00`000000oooo0?ooo`070?oo
+o`030000003oool0oooo0080oooo00 at 000000?ooo`00000000004`3oool001L0oooo00<000000?oo
+o`3oool0o`3ooom20?ooo`030000003oool0oooo00L0oooo00D000000?ooo`3oool0oooo00000002
+0?ooo`8000004`3oool001L0oooo00<000000?ooo`3oool0o`3ooom10?ooo`030000003oool0oooo
+00L0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`02000001<0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo@@3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo0080
+oooo00<000000?ooo`3oool00P00000C0?ooo`005`3oool00`000000oooo0?ooo`3o0?oood00oooo
+00<000000?ooo`3oool0203oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo00800000
+4`3oool001L0oooo00<000000?ooo`3oool0o`3ooom00?ooo`030000003oool0oooo00P0oooo00<0
+00000?ooo`3oool00P3oool00`000000oooo0?ooo`02000001<0oooo000G0?ooo`030000003oool0
+oooo0?l0oooo?`3oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo0080oooo00<00000
+0?ooo`3oool00P00000C0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocl0oooo00<000000?oo
+o`3oool02 at 3oool00`000000oooo0?ooo`020?ooo`050000003oool000000?ooo`0000004`3oool0
+01L0oooo00<000000?ooo`3oool0o`3oooln0?ooo`030000003oool0oooo00T0oooo00<000000?oo
+o`3oool00`3oool010000000oooo00000000000D0?ooo`005`3oool00`000000oooo0?ooo`3o0?oo
+och0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo
+00800000503oool001L0oooo00<000000?ooo`3oool0o`3ooolm0?ooo`030000003oool0oooo00X0
+oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`02000001 at 0oooo000G0?ooo`800000
+o`3oooln0?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3oool00P3oool00`000000oooo
+0?ooo`02000001 at 0oooo000G0?ooo`030000003oool0oooo0?l0oooo?03oool00`000000oooo0?oo
+o`0;0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool00P00000D0?ooo`005`3oool0
+0`000000oooo0?ooo`3o0?oooc`0oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`03
+0?ooo`030000003oool0oooo00800000503oool001L0oooo00<000000?ooo`3oool0o`3ooolk0?oo
+o`030000003oool0oooo00/0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`020000
+01 at 0oooo000G0?ooo`030000003oool0oooo0?l0oooo>`3oool00`000000oooo0?ooo`0;0?ooo`03
+0000003oool0oooo00<0oooo00D000000?ooo`000000oooo0000000D0?ooo`005`3oool00`000000
+oooo0?ooo`3o0?ooocX0oooo00<000000?ooo`3oool0303oool00`000000oooo0?ooo`020?ooo`06
+0000003oool0oooo0000003oool00000503oool001L0oooo00<000000?ooo`3oool0o`3ooolj0?oo
+o`030000003oool0oooo00`0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`020000
+01D0oooo000G0?ooo`030000003oool0oooo0?l0oooo>@3oool00`000000oooo0?ooo`0<0?ooo`03
+0000003oool0oooo00<0oooo00<000000?ooo`3oool00P00000E0?ooo`005`3oool00`000000oooo
+0?ooo`3o0?ooocT0oooo00<000000?ooo`3oool0303oool00`000000oooo0?ooo`030?ooo`030000
+003oool0oooo008000005 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolh0?ooo`030000003o
+ool0oooo00d0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`02000001D0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo=`3oool00`000000oooo0?ooo`0>0?ooo`030000003oool0
+oooo00<0oooo00<000000?ooo`3oool00P00000E0?ooo`005`3oool00`000000oooo0?ooo`3o0?oo
+ocL0oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`030?ooo`040000003oool0oooo
+0?ooo`8000005 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolf0?ooo`030000003oool0oooo
+00h0oooo00<000000?ooo`3oool00`3oool01P000000oooo0?ooo`000000oooo000001D0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo=@3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0
+oooo00<0oooo00H000000?ooo`3oool000000?ooo`00000E0?ooo`005`3oool00`000000oooo0?oo
+o`3o0?oooc at 0oooo00<000000?ooo`3oool0403oool00`000000oooo0?ooo`030?ooo`060000003o
+ool0oooo0000003oool000005 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooold0?ooo`030000
+003oool0oooo00l0oooo00<000000?ooo`3oool0103oool01P000000oooo0?ooo`000000oooo0000
+01D0oooo000G0?ooo`030000003oool0oooo0?l0oooo<`3oool00`000000oooo0?ooo`0 at 0?ooo`03
+0000003oool0oooo00 at 0oooo00<000000?ooo`3oool00P00000F0?ooo`005`3oool00`000000oooo
+0?ooo`3o0?oooc80oooo00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`030?ooo`040000
+003oool0oooo0?ooo`8000005P3oool001L0oooo00<000000?ooo`3oool0o`3ooola0?ooo`030000
+003oool0oooo0180oooo00<000000?ooo`3oool00`3oool010000000oooo0?ooo`3oool2000001H0
+oooo000G0?ooo`030000003oool0oooo0?l0oooo<03oool00`000000oooo0?ooo`0B0?ooo`030000
+003oool0oooo00 at 0oooo00@000000?ooo`3oool0oooo0P00000F0?ooo`005`3oool00`000000oooo
+0?ooo`3o0?ooobh0oooo0P00000E0?ooo`030000003oool0oooo00 at 0oooo00H000000?ooo`3oool0
+00000?ooo`00000F0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobd0oooo00<000000?ooo`3o
+ool05 at 3oool00`000000oooo0?ooo`040?ooo`060000003oool0oooo0000003oool000005P3oool0
+01L0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030000003oool0oooo01H0oooo00<000000?oo
+o`3oool0103oool01P000000oooo0?ooo`000000oooo000001H0oooo000G0?ooo`030000003oool0
+oooo0?l0oooo:`3oool00`000000oooo0?ooo`0F0?ooo`030000003oool0oooo00 at 0oooo00L00000
+0?ooo`3oool0oooo0000003oool0000001H0oooo000G0?ooo`030000003oool0oooo0?l0oooo:P3o
+ool00`000000oooo0?ooo`0G0?ooo`030000003oool0oooo00 at 0oooo00L000000?ooo`3oool0oooo
+0000003oool0000001H0oooo000G0?ooo`030000003oool0oooo0?l0oooo:@3oool00`000000oooo
+0?ooo`0H0?ooo`030000003oool0oooo00 at 0oooo00L000000?ooo`3oool0oooo0000003oool00000
+01H0oooo000G0?ooo`030000003oool0oooo0?l0oooo:03oool00`000000oooo0?ooo`0I0?ooo`03
+0000003oool0oooo00 at 0oooo00L000000?ooo`3oool0oooo0000003oool0000001H0oooo000G0?oo
+o`030000003oool0oooo0?l0oooo9P3oool2000001/0oooo00<000000?ooo`3oool01 at 3oool01000
+0000oooo0?ooo`3oool2000001L0oooo000G0?ooo`030000003oool0oooo0?l0oooo8`3oool30000
+01d0oooo00<000000?ooo`3oool01 at 3oool01P000000oooo0?ooo`000000oooo000001L0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo8 at 3oool200000200oooo00<000000?ooo`3oool0103oool0
+1`000000oooo0?ooo`3oool000000?ooo`0000005`3oool001L0oooo00<000000?ooo`3oool0o`3o
+oolN0?ooo`<000008 at 3oool00`000000oooo0?ooo`050?ooo`070000003oool0oooo0?ooo`000000
+oooo0000000G0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa/0oooo0`00000T0?ooo`030000
+003oool0oooo00D0oooo00L000000?ooo`3oool0oooo0000003oool0000001L0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo5`3oool4000002L0oooo00<000000?ooo`3oool01 at 3oool01`000000
+oooo0?ooo`3oool000000?ooo`0000005`3oool001L0oooo00<000000?ooo`3oool0o`3ooolE0?oo
+o`800000:P3oool00`000000oooo0?ooo`060?ooo`070000003oool0oooo0?ooo`000000oooo0000
+000G0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooo`l0oooo1P00000/0?ooo`030000003oool0
+oooo00H0oooo00L000000?ooo`3oool0oooo0000003oool0000001L0oooo000G0?oooa400000n at 3o
+ool700000380oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`020?ooo`030000003o
+ool0000001L0oooo000G0?ooo`030000003oool0oooo00h0oooo8P00003A0?ooo`H00000>03oool0
+0`000000oooo0?ooo`060?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?oo
+o`0E0?ooo`005`3oool00`000000oooo0?ooo`0`0?ooobD00000W`3oool=000003h0oooo00<00000
+0?ooo`3oool01P3oool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool05 at 3o
+ool001L0oooo00<000000?ooo`3oool0E at 3ooolK000007H0oooo3P00001;0?ooo`030000003oool0
+oooo00H0oooo00L000000?ooo`3oool0oooo0000003oool0000001P0oooo000G0?ooo`030000003o
+ool0oooo0700ooooMP00001H0?ooo`030000003oool0oooo00L0oooo00L000000?ooo`3oool0oooo
+0000003oool0000001P0oooo000G0?ooo`030000003oool0oooo0?l0oooo?`3oool00`000000oooo
+0?ooo`070?ooo`070000003oool0oooo0?ooo`000000oooo0000000H0?ooo`005`3oool200000?l0
+oooo at 03oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo0080oooo00<000000?ooo`00
+0000603oool001L0oooo00<000000?ooo`3oool0o`3oooln0?ooo`030000003oool0oooo00L0oooo
+00<000000?ooo`3oool00P3oool00`000000oooo0000000H0?ooo`005`3oool00`000000oooo0?oo
+o`3o0?oooch0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`020?ooo`030000003o
+ool0000001P0oooo000G0?ooo`030000003oool0oooo0?l0oooo?P3oool00`000000oooo0?ooo`07
+0?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`0F0?ooo`005`3oool0
+0`000000oooo0?ooo`3o0?ooocd0oooo00<000000?ooo`3oool0203oool01 at 000000oooo0?ooo`3o
+ool000000080oooo00<000000?ooo`3oool05P3oool001L0oooo00<000000?ooo`3oool0o`3ooolm
+0?ooo`030000003oool0oooo00P0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003o
+ool0oooo01H0oooo000G0?ooo`030000003oool0oooo0?l0oooo?@3oool00`000000oooo0?ooo`07
+0?ooo`030000003oool0oooo0080oooo00 at 000000?ooo`3oool00000603oool001L0oooo00<00000
+0?ooo`3oool0o`3oooll0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool00P3oool0
+10000000oooo0?ooo`00000H0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooc`0oooo00<00000
+0?ooo`3oool0203oool00`000000oooo0?ooo`020?ooo`030000003oool0000001T0oooo000G0?oo
+o`030000003oool0oooo0?l0oooo>`3oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo
+0080oooo00<000000?ooo`0000006 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolk0?ooo`03
+0000003oool0oooo00T0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo
+01L0oooo000G0?ooo`030000003oool0oooo0?l0oooo>`3oool00`000000oooo0?ooo`090?ooo`05
+0000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`0G0?ooo`005`3oool00`000000
+oooo0?ooo`3o0?ooocX0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`020?ooo`04
+0000003oool0oooo000001T0oooo000G0?ooo`030000003oool0oooo0?l0oooo>P3oool00`000000
+oooo0?ooo`090?ooo`030000003oool0oooo0080oooo00 at 000000?ooo`3oool000006 at 3oool001L0
+oooo00<000000?ooo`3oool0o`3ooolj0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3o
+ool00P3oool010000000oooo0?ooo`00000I0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocT0
+oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`020?ooo`040000003oool0oooo0000
+01T0oooo000G0?ooo`030000003oool0oooo0?l0oooo>@3oool00`000000oooo0?ooo`0:0?ooo`03
+0000003oool0oooo0080oooo00 at 000000?ooo`3oool000006 at 3oool001L0oooo00<000000?ooo`3o
+ool0o`3ooolh0?ooo`030000003oool0oooo00/0oooo00D000000?ooo`3oool0oooo000000030?oo
+o`030000003oool0oooo01L0oooo000G0?ooo`030000003oool0oooo0?l0oooo>03oool00`000000
+oooo0?ooo`0:0?ooo`030000003oool0oooo0080oooo00 at 000000?ooo`3oool000006P3oool001L0
+oooo00<000000?ooo`3oool0o`3ooolg0?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3o
+ool00P3oool010000000oooo0?ooo`00000J0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocH0
+oooo00<000000?ooo`3oool0303oool00`000000oooo0?ooo`020?ooo`040000003oool0oooo0000
+01X0oooo000G0?ooo`030000003oool0oooo0?l0oooo=P3oool00`000000oooo0?ooo`0<0?ooo`03
+0000003oool0oooo0080oooo00 at 000000?ooo`3oool000006P3oool001L0oooo00<000000?ooo`3o
+ool0o`3ooole0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool00P3oool010000000
+oooo0?ooo`00000J0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocD0oooo00<000000?ooo`3o
+ool03 at 3oool00`000000oooo0?ooo`020?ooo`040000003oool0oooo000001X0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo=03oool00`000000oooo0?ooo`0=0?ooo`030000003oool0oooo00<0
+oooo00 at 000000?ooo`3oool000006P3oool001L0oooo00<000000?ooo`3oool0o`3ooolc0?ooo`03
+0000003oool0oooo00h0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`3oool00000
+01X0oooo000G0?ooo`030000003oool0oooo0?l0oooo<`3oool00`000000oooo0?ooo`0>0?ooo`03
+0000003oool0oooo0080oooo00 at 000000?ooo`3oool000006`3oool001L0oooo00<000000?ooo`3o
+ool0o`3ooolb0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool00P3oool010000000
+oooo0?ooo`00000K0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooc40oooo00<000000?ooo`3o
+ool0403oool00`000000oooo0?ooo`020?ooo`040000003oool0oooo000001/0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo<@3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo00<0
+oooo00 at 000000?ooo`3oool000006`3oool001L0oooo00<000000?ooo`3oool0o`3oool`0?ooo`03
+0000003oool0oooo0100oooo00<000000?ooo`3oool00`3oool010000000oooo0?ooo`00000K0?oo
+o`002P3oool3000000X0oooo00<000000?ooo`3oool0o`3oool_0?ooo`030000003oool0oooo0140
+oooo00<000000?ooo`3oool00`3oool010000000oooo0?ooo`00000K0?ooo`002 at 3oool01@000000
+oooo0?ooo`3oool0000000T0oooo00<000000?ooo`3oool0o`3oool^0?ooo`030000003oool0oooo
+0180oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`3oool0000001/0oooo000=0?oo
+o`030000003oool0oooo00L0oooo0`00003o0?ooobh0oooo00<000000?ooo`3oool04 at 3oool00`00
+0000oooo0?ooo`030?ooo`050000003oool0oooo0?ooo`0000006`3oool000T0oooo00D000000?oo
+o`3oool0oooo000000090?ooo`030000003oool0oooo0?l0oooo;@3oool00`000000oooo0?ooo`0B
+0?ooo`030000003oool0oooo00<0oooo00 at 000000?ooo`3oool00000703oool000T0oooo1000000:
+0?ooo`030000003oool0oooo0?l0oooo;03oool00`000000oooo0?ooo`0C0?ooo`030000003oool0
+oooo00<0oooo00 at 000000?ooo`3oool00000703oool000X0oooo00<000000?ooo`3oool02P3oool0
+0`000000oooo0?ooo`3o0?ooob`0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`03
+0?ooo`040000003oool0oooo000001`0oooo000:0?ooo`@000002 at 3oool00`000000oooo0?ooo`3o
+0?ooob/0oooo00<000000?ooo`3oool0503oool00`000000oooo0?ooo`030?ooo`040000003oool0
+oooo000001`0oooo000G0?ooo`030000003oool0oooo0?l0oooo:P3oool00`000000oooo0?ooo`0D
+0?ooo`030000003oool0oooo00 at 0oooo00@000000?ooo`3oool00000703oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolY0?ooo`030000003oool0oooo01D0oooo00<000000?ooo`3oool0103oool0
+10000000oooo0?ooo`00000L0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobT0oooo00<00000
+0?ooo`3oool05 at 3oool00`000000oooo0?ooo`030?ooo`050000003oool0oooo0?ooo`000000703o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolX0?ooo`030000003oool0oooo01H0oooo00<00000
+0?ooo`3oool00`3oool01 at 000000oooo0?ooo`3oool0000001`0oooo000G0?ooo`030000003oool0
+oooo0?l0oooo9`3oool00`000000oooo0?ooo`0G0?ooo`030000003oool0oooo00<0oooo00D00000
+0?ooo`3oool0oooo0000000L0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobD0oooo0P00000I
+0?ooo`030000003oool0oooo00 at 0oooo00@000000?ooo`3oool000007 at 3oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3oool0103oool0
+10000000oooo0?ooo`00000M0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooob80oooo0P00000L
+0?ooo`030000003oool0oooo00 at 0oooo00@000000?ooo`3oool000007 at 3oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolQ0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0103oool0
+10000000oooo0?ooo`00000M0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooal0oooo0P00000N
+0?ooo`030000003oool0oooo00 at 0oooo00D000000?ooo`3oool0oooo0000000M0?ooo`005`3oool0
+0`000000oooo0?ooo`3o0?oooad0oooo0P00000P0?ooo`030000003oool0oooo00 at 0oooo00D00000
+0?ooo`3oool0oooo0000000M0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa`0oooo00<00000
+0?ooo`3oool0803oool00`000000oooo0?ooo`040?ooo`050000003oool0oooo0?ooo`0000007 at 3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolJ0?ooo`8000008`3oool00`000000oooo0?ooo`04
+0?ooo`050000003oool0oooo0?ooo`0000007 at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolG
+0?ooo`<00000903oool00`000000oooo0?ooo`050?ooo`040000003oool0oooo000001h0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo5 at 3oool2000002L0oooo00<000000?ooo`3oool01 at 3oool0
+10000000oooo0?ooo`00000N0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa40oooo1000000Y
+0?ooo`030000003oool0oooo00D0oooo00 at 000000?ooo`3oool000007P3oool001L0oooo00<00000
+0?ooo`3oool0o`3oool=0?ooo`@00000;03oool00`000000oooo0?ooo`050?ooo`050000003oool0
+oooo0?ooo`0000007P3oool001L0oooo3000003o0?ooo`@00000<03oool00`000000oooo0?ooo`05
+0?ooo`050000003oool0oooo0?ooo`0000007P3oool001L0oooo00<000000?ooo`3oool02 at 3ooolF
+00000>H0oooo0`00000d0?ooo`030000003oool0oooo00D0oooo00D000000?ooo`3oool0oooo0000
+000N0?ooo`005`3oool00`000000oooo0?ooo`0O0?oooaL00000b`3oool4000003L0oooo00<00000
+0?ooo`3oool01 at 3oool01@000000oooo0?ooo`3oool0000001h0oooo000G0?ooo`030000003oool0
+oooo03H0oooo5 at 00002Y0?ooo`d00000>P3oool00`000000oooo0?ooo`060?ooo`050000003oool0
+oooo0?ooo`0000007P3oool001L0oooo0P00001<0?oooa at 00000SP3oool7000004L0oooo00<00000
+0?ooo`3oool01P3oool01 at 000000oooo0?ooo`3oool0000001h0oooo000G0?ooo`030000003oool0
+oooo05l0oooo7`00001O0?oooa000000CP3oool00`000000oooo0?ooo`060?ooo`040000003oool0
+oooo000001l0oooo000G0?ooo`030000003oool0oooo07h0ooooG`00001M0?ooo`030000003oool0
+oooo00L0oooo00 at 000000?ooo`3oool000007`3oool001L0oooo00<000000?ooo`3oool0o`3ooolk
+0?ooo`030000003oool0oooo00H0oooo00D000000?ooo`3oool0oooo0000000O0?ooo`005`3oool0
+0`000000oooo0?ooo`3o0?oooc/0oooo00<000000?ooo`3oool01P3oool01 at 000000oooo0?ooo`3o
+ool0000001l0oooo000G0?ooo`030000003oool0oooo0?l0oooo>P3oool00`000000oooo0?ooo`07
+0?ooo`050000003oool0oooo0?ooo`0000007`3oool001L0oooo00<000000?ooo`3oool0o`3ooolj
+0?ooo`030000003oool0oooo00L0oooo00D000000?ooo`3oool0oooo0000000O0?ooo`005`3oool0
+0`000000oooo0?ooo`3o0?ooocX0oooo00<000000?ooo`3oool01`3oool01 at 000000oooo0?ooo`3o
+ool0000001l0oooo000G0?ooo`030000003oool0oooo0?l0oooo>P3oool00`000000oooo0?ooo`07
+0?ooo`050000003oool0oooo0?ooo`0000007`3oool001L0oooo00<000000?ooo`3oool0o`3oooli
+0?ooo`030000003oool0oooo00P0oooo00 at 000000?ooo`3oool00000803oool001L0oooo00<00000
+0?ooo`3oool0o`3oooli0?ooo`030000003oool0oooo00L0oooo00D000000?ooo`3oool0oooo0000
+000P0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocT0oooo00<000000?ooo`3oool01`3oool0
+1 at 000000oooo0?ooo`3oool000000200oooo000G0?ooo`030000003oool0oooo0?l0oooo>03oool0
+0`000000oooo0?ooo`080?ooo`050000003oool0oooo0?ooo`000000803oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolh0?ooo`030000003oool0oooo00P0oooo00D000000?ooo`3oool0oooo0000
+000P0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocL0oooo00<000000?ooo`3oool02 at 3oool0
+1 at 000000oooo0?ooo`3oool000000200oooo000G0?ooo`030000003oool0oooo0?l0oooo=`3oool0
+0`000000oooo0?ooo`090?ooo`050000003oool0oooo0?ooo`000000803oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolg0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool00P3oool0
+0`000000oooo0?ooo`0N0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocH0oooo00<000000?oo
+o`3oool02 at 3oool01@000000oooo0?ooo`3oool000000240oooo000G0?ooo`030000003oool0oooo
+0?l0oooo=P3oool00`000000oooo0?ooo`090?ooo`050000003oool0oooo0?ooo`0000008 at 3oool0
+01L0oooo00<000000?ooo`3oool0o`3ooole0?ooo`030000003oool0oooo00X0oooo00D000000?oo
+o`3oool0oooo0000000Q0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooocD0oooo00<000000?oo
+o`3oool02P3oool01 at 000000oooo0?ooo`3oool000000240oooo000G0?ooo`030000003oool0oooo
+0?l0oooo=@3oool00`000000oooo0?ooo`0:0?ooo`050000003oool0oooo0?ooo`0000008 at 3oool0
+01L0oooo0P00003o0?ooocD0oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`020?oo
+o`030000003oool0oooo01l0oooo000G0?ooo`030000003oool0oooo0?l0oooo=03oool00`000000
+oooo0?ooo`0:0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool07`3oool001L0oooo
+00<000000?ooo`3oool0o`3ooold0?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3oool0
+0P3oool00`000000oooo0?ooo`0O0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooc<0oooo00<0
+00000?ooo`3oool02`3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo01l0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo<`3oool00`000000oooo0?ooo`0;0?ooo`050000003oool0
+oooo0?ooo`0000008P3oool001L0oooo00<000000?ooo`3oool0o`3ooolb0?ooo`030000003oool0
+oooo00`0oooo00D000000?ooo`3oool0oooo0000000R0?ooo`005`3oool00`000000oooo0?ooo`3o
+0?oooc80oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`020?ooo`030000003oool0
+oooo0200oooo000G0?ooo`030000003oool0oooo0?l0oooo<P3oool00`000000oooo0?ooo`0;0?oo
+o`030000003oool0oooo0080oooo00<000000?ooo`3oool0803oool001L0oooo00<000000?ooo`3o
+ool0o`3ooola0?ooo`030000003oool0oooo00`0oooo00<000000?ooo`3oool00P3oool00`000000
+oooo0?ooo`0P0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooc40oooo00<000000?ooo`3oool0
+303oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo0200oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo<03oool00`000000oooo0?ooo`0=0?ooo`030000003oool0oooo0080oooo00<0
+00000?ooo`3oool0803oool001L0oooo00<000000?ooo`3oool0o`3oool`0?ooo`030000003oool0
+oooo00d0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`0P0?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?ooobl0oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`020?oo
+o`030000003oool0oooo0240oooo000G0?ooo`030000003oool0oooo0?l0oooo;`3oool00`000000
+oooo0?ooo`0=0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool08 at 3oool001L0oooo
+00<000000?ooo`3oool0o`3oool_0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool0
+0P3oool00`000000oooo0?ooo`0Q0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobh0oooo00<0
+00000?ooo`3oool03P3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo0240oooo000G
+0?ooo`030000003oool0oooo0?l0oooo;P3oool00`000000oooo0?ooo`0>0?ooo`030000003oool0
+oooo0080oooo00<000000?ooo`3oool08 at 3oool001L0oooo00<000000?ooo`3oool0o`3oool]0?oo
+o`030000003oool0oooo00l0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`0Q0?oo
+o`005`3oool00`000000oooo0?ooo`3o0?ooobd0oooo00<000000?ooo`3oool03P3oool00`000000
+oooo0?ooo`030?ooo`030000003oool0oooo0240oooo000G0?ooo`800000o`3oool]0?ooo`030000
+003oool0oooo00l0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`0Q0?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?ooob`0oooo00<000000?ooo`3oool03`3oool00`000000oooo0?oo
+o`020?ooo`030000003oool0oooo0280oooo000G0?ooo`030000003oool0oooo0?l0oooo:`3oool0
+0`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool08P3oool0
+01L0oooo00<000000?ooo`3oool0o`3oool[0?ooo`030000003oool0oooo0100oooo00<000000?oo
+o`3oool00P3oool00`000000oooo0?ooo`0R0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobX0
+oooo00<000000?ooo`3oool0403oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0280
+oooo000G0?ooo`030000003oool0oooo0?l0oooo:@3oool00`000000oooo0?ooo`0A0?ooo`030000
+003oool0oooo00<0oooo00<000000?ooo`3oool08P3oool001L0oooo00<000000?ooo`3oool0o`3o
+oolX0?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool00`3oool00`000000oooo0?oo
+o`0R0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobP0oooo00<000000?ooo`3oool04P3oool0
+0`000000oooo0?ooo`030?ooo`030000003oool0oooo0280oooo000G0?ooo`030000003oool0oooo
+0?l0oooo9`3oool00`000000oooo0?ooo`0C0?ooo`030000003oool0oooo0080oooo00<000000?oo
+o`3oool08`3oool001L0oooo00<000000?ooo`3oool0o`3ooolV0?ooo`030000003oool0oooo01<0
+oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`0S0?ooo`005`3oool00`000000oooo
+0?ooo`3o0?ooobD0oooo00<000000?ooo`3oool0503oool00`000000oooo0?ooo`030?ooo`030000
+003oool0oooo02<0oooo000G0?ooo`030000003oool0oooo0?l0oooo9 at 3oool00`000000oooo0?oo
+o`0D0?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool08`3oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo01D0oooo00<000000?ooo`3oool00`3oool0
+0`000000oooo0?ooo`0S0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooob<0oooo00<000000?oo
+o`3oool05P3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo02<0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo8P3oool00`000000oooo0?ooo`0F0?ooo`030000003oool0oooo00 at 0
+oooo00<000000?ooo`3oool08`3oool001L0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`030000
+003oool0oooo01L0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`0T0?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?ooob00oooo00<000000?ooo`3oool0603oool00`000000oooo0?oo
+o`030?ooo`030000003oool0oooo02 at 0oooo000G0?ooo`800000o`3ooolQ0?ooo`030000003oool0
+oooo01P0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`0T0?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?oooal0oooo00<000000?ooo`3oool06 at 3oool00`000000oooo0?ooo`030?oo
+o`030000003oool0oooo02 at 0oooo000G0?ooo`030000003oool0oooo0?l0oooo7P3oool00`000000
+oooo0?ooo`0I0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0903oool001L0oooo
+00<000000?ooo`3oool0o`3ooolM0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0
+103oool00`000000oooo0?ooo`0T0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa/0oooo0P00
+000M0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0903oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolI0?ooo`8000007`3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo02 at 0oooo000G0?ooo`030000003oool0oooo0?l0oooo603oool00`000000oooo0?ooo`0O0?oo
+o`030000003oool0oooo00<0oooo00<000000?ooo`3oool09 at 3oool001L0oooo00<000000?ooo`3o
+ool0o`3ooolF0?ooo`8000008 at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo02D0
+oooo000G0?ooo`030000003oool0oooo0?l0oooo503oool2000002<0oooo00<000000?ooo`3oool0
+103oool00`000000oooo0?ooo`0U0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa<0oooo00<0
+00000?ooo`3oool08`3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo02D0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo4 at 3oool2000002H0oooo00<000000?ooo`3oool0103oool0
+0`000000oooo0?ooo`0U0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooo`l0oooo0P00000W0?oo
+o`030000003oool0oooo00D0oooo00<000000?ooo`3oool09 at 3oool001L0oooo00<000000?ooo`3o
+ool0o`3oool=0?ooo`800000:@3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo02D0
+oooo000G0?ooo`H00000o`3oool80?ooo`800000:`3oool00`000000oooo0?ooo`040?ooo`030000
+003oool0oooo02H0oooo00050?ooo`040000003oool0oooo0?ooo`<000002`3oool00`000000oooo
+0?ooo`030?ooo`/00000nP3oool2000002d0oooo00<000000?ooo`3oool0103oool00`000000oooo
+0?ooo`0V0?ooo`001 at 3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo00P0oooo
+0`00000>0?ooo``00000j`3oool3000002h0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo
+0?ooo`0V0?ooo`001 at 3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo00P0oooo
+00<000000?ooo`3oool06P3oool;00000=d0oooo0`00000a0?ooo`030000003oool0oooo00D0oooo
+00<000000?ooo`3oool09P3oool000D0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo
+0?ooo`080?ooo`030000003oool0oooo02D0oooo2`00003?0?ooo`<00000=03oool00`000000oooo
+0?ooo`050?ooo`030000003oool0oooo02H0oooo00030?ooo`030000003oool000000080oooo00D0
+00000?ooo`3oool0oooo0000000:0?ooo`030000003oool0oooo0300oooo300000300?ooo`<00000
+=`3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo02H0oooo00040?ooo`8000000P3o
+ool01 at 000000oooo0?ooo`3oool0000000X0oooo00<000000?ooo`3oool0?03oool<00000;40oooo
+0`00000i0?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool09P3oool000D0oooo00 at 0
+00000?ooo`3oool0oooo0`00000;0?ooo`030000003oool0oooo04P0oooo3 at 00002O0?ooo`D00000
+?03oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo02L0oooo000G0?ooo`030000003o
+ool0oooo05D0oooo3P00002:0?ooo`L00000@@3oool00`000000oooo0?ooo`050?ooo`030000003o
+ool0oooo02L0oooo000G0?ooo`030000003oool0oooo06<0oooo3 at 00001f0?ooo`L00000A`3oool0
+0`000000oooo0?ooo`060?ooo`030000003oool0oooo02L0oooo000G0?ooo`030000003oool0oooo
+0700oooo3P00001I0?ooo`l00000CP3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo
+02L0oooo000G0?ooo`030000003oool0oooo07h0oooo8P00000M0?oooaX00000G at 3oool00`000000
+oooo0?ooo`060?ooo`030000003oool0oooo02L0oooo000G0?ooo`030000003oool0oooo0:00oooo
+7 at 00001g0?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool09`3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooold0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool09`3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooold0?ooo`030000003oool0oooo00H0oooo00<00000
+0?ooo`3oool0:03oool001L0oooo00<000000?ooo`3oool0o`3ooold0?ooo`030000003oool0oooo
+00H0oooo00<000000?ooo`3oool0:03oool001L0oooo00<000000?ooo`3oool0o`3ooold0?ooo`03
+0000003oool0oooo00H0oooo00<000000?ooo`3oool0:03oool001L0oooo00<000000?ooo`3oool0
+o`3ooolc0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool0:03oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolc0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool0:03o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolc0?ooo`030000003oool0oooo00L0oooo00<00000
+0?ooo`3oool0:03oool001L0oooo00<000000?ooo`3oool0o`3ooolc0?ooo`030000003oool0oooo
+00H0oooo00<000000?ooo`3oool0:@3oool001L0oooo00<000000?ooo`3oool0o`3ooolb0?ooo`03
+0000003oool0oooo00L0oooo00<000000?ooo`3oool0:@3oool001L0oooo00<000000?ooo`3oool0
+o`3ooolb0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool0:@3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolb0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool0:@3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooola0?ooo`030000003oool0oooo00P0oooo00<00000
+0?ooo`3oool0:@3oool001L0oooo00<000000?ooo`3oool0o`3ooola0?ooo`030000003oool0oooo
+00P0oooo00<000000?ooo`3oool0:@3oool001L0oooo00<000000?ooo`3oool0o`3ooola0?ooo`03
+0000003oool0oooo00P0oooo00<000000?ooo`3oool0:@3oool001L0oooo00<000000?ooo`3oool0
+o`3ooola0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool0:P3oool001L0oooo00<0
+00000?ooo`3oool0o`3oool`0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0:P3o
+ool001L0oooo00<000000?ooo`3oool0o`3oool`0?ooo`030000003oool0oooo00P0oooo00<00000
+0?ooo`3oool0:P3oool001L0oooo00<000000?ooo`3oool0o`3oool`0?ooo`030000003oool0oooo
+00P0oooo00<000000?ooo`3oool0:P3oool001L0oooo00<000000?ooo`3oool0o`3oool`0?ooo`03
+0000003oool0oooo00P0oooo00<000000?ooo`3oool0:P3oool001L0oooo00<000000?ooo`3oool0
+o`3oool_0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0:P3oool001L0oooo00<0
+00000?ooo`3oool0o`3oool_0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0:`3o
+ool001L0oooo00<000000?ooo`3oool0o`3oool_0?ooo`030000003oool0oooo00P0oooo00<00000
+0?ooo`3oool0:`3oool001L0oooo00<000000?ooo`3oool0o`3oool^0?ooo`030000003oool0oooo
+00T0oooo00<000000?ooo`3oool0:`3oool001L0oooo00<000000?ooo`3oool0o`3oool^0?ooo`03
+0000003oool0oooo00T0oooo00<000000?ooo`3oool0:`3oool001L0oooo00<000000?ooo`3oool0
+o`3oool^0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0:`3oool001L0oooo00<0
+00000?ooo`3oool0o`3oool^0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0:`3o
+ool001L0oooo00<000000?ooo`3oool0o`3oool]0?ooo`030000003oool0oooo00X0oooo00<00000
+0?ooo`3oool0:`3oool001L0oooo00<000000?ooo`3oool0o`3oool]0?ooo`030000003oool0oooo
+00T0oooo00<000000?ooo`3oool0;03oool001L0oooo00<000000?ooo`3oool0o`3oool]0?ooo`03
+0000003oool0oooo00T0oooo00<000000?ooo`3oool0;03oool001L0oooo00<000000?ooo`3oool0
+o`3oool]0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0;03oool001L0oooo00<0
+00000?ooo`3oool0o`3oool/0?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3oool0;03o
+ool001L0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030000003oool0oooo00X0oooo00<00000
+0?ooo`3oool0;03oool001L0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030000003oool0oooo
+00X0oooo00<000000?ooo`3oool0;03oool001L0oooo00<000000?ooo`3oool0o`3oool[0?ooo`03
+0000003oool0oooo00X0oooo00<000000?ooo`3oool0;@3oool001L0oooo00<000000?ooo`3oool0
+o`3oool[0?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3oool0;@3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolZ0?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool0;@3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolZ0?ooo`030000003oool0oooo00/0oooo00<00000
+0?ooo`3oool0;@3oool001L0oooo00<000000?ooo`3oool0o`3ooolY0?ooo`030000003oool0oooo
+00`0oooo00<000000?ooo`3oool0;@3oool001L0oooo00<000000?ooo`3oool0o`3ooolY0?ooo`03
+0000003oool0oooo00`0oooo00<000000?ooo`3oool0;@3oool001L0oooo00<000000?ooo`3oool0
+o`3ooolY0?ooo`030000003oool0oooo00`0oooo00<000000?ooo`3oool0;@3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolX0?ooo`030000003oool0oooo00`0oooo00<000000?ooo`3oool0;P3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolX0?ooo`030000003oool0oooo00`0oooo00<00000
+0?ooo`3oool0;P3oool001L0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`030000003oool0oooo
+00d0oooo00<000000?ooo`3oool0;P3oool001L0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`03
+0000003oool0oooo00d0oooo00<000000?ooo`3oool0;P3oool001L0oooo00<000000?ooo`3oool0
+o`3ooolW0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool0;P3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolV0?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0;P3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolV0?ooo`030000003oool0oooo00d0oooo00<00000
+0?ooo`3oool0;`3oool001L0oooo00<000000?ooo`3oool0o`3ooolU0?ooo`030000003oool0oooo
+00h0oooo00<000000?ooo`3oool0;`3oool001L0oooo00<000000?ooo`3oool0o`3ooolU0?ooo`03
+0000003oool0oooo00h0oooo00<000000?ooo`3oool0;`3oool001L0oooo00<000000?ooo`3oool0
+o`3ooolT0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool0;`3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool0;`3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo00l0oooo00<00000
+0?ooo`3oool0;`3oool001L0oooo00<000000?ooo`3oool0o`3ooolS0?ooo`030000003oool0oooo
+00l0oooo00<000000?ooo`3oool0<03oool001L0oooo00<000000?ooo`3oool0o`3ooolS0?ooo`03
+0000003oool0oooo00l0oooo00<000000?ooo`3oool0<03oool001L0oooo00<000000?ooo`3oool0
+o`3ooolR0?ooo`030000003oool0oooo0100oooo00<000000?ooo`3oool0<03oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolR0?ooo`030000003oool0oooo0100oooo00<000000?ooo`3oool0<03o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`030000003oool0oooo0140oooo00<00000
+0?ooo`3oool0<03oool001L0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`030000003oool0oooo
+0140oooo00<000000?ooo`3oool0<03oool001L0oooo00<000000?ooo`3oool0o`3ooolP0?ooo`03
+0000003oool0oooo0180oooo00<000000?ooo`3oool0<03oool001L0oooo00<000000?ooo`3oool0
+o`3ooolP0?ooo`030000003oool0oooo0140oooo00<000000?ooo`3oool0<@3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolO0?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool0<@3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolO0?ooo`030000003oool0oooo0180oooo00<00000
+0?ooo`3oool0<@3oool001L0oooo00<000000?ooo`3oool0o`3ooolN0?ooo`030000003oool0oooo
+01<0oooo00<000000?ooo`3oool0<@3oool001L0oooo00<000000?ooo`3oool0o`3ooolN0?ooo`03
+0000003oool0oooo01<0oooo00<000000?ooo`3oool0<@3oool001L0oooo00<000000?ooo`3oool0
+o`3ooolM0?ooo`030000003oool0oooo01 at 0oooo00<000000?ooo`3oool0<@3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolM0?ooo`030000003oool0oooo01<0oooo00<000000?ooo`3oool0<P3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolL0?ooo`030000003oool0oooo01 at 0oooo00<00000
+0?ooo`3oool0<P3oool001L0oooo00<000000?ooo`3oool0o`3ooolL0?ooo`030000003oool0oooo
+01 at 0oooo00<000000?ooo`3oool0<P3oool001L0oooo00<000000?ooo`3oool0o`3ooolK0?ooo`03
+0000003oool0oooo01D0oooo00<000000?ooo`3oool0<P3oool001L0oooo00<000000?ooo`3oool0
+o`3ooolJ0?ooo`030000003oool0oooo01H0oooo00<000000?ooo`3oool0<P3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolI0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0<P3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolI0?ooo`030000003oool0oooo01H0oooo00<00000
+0?ooo`3oool0<`3oool001L0oooo00<000000?ooo`3oool0o`3ooolH0?ooo`030000003oool0oooo
+01L0oooo00<000000?ooo`3oool0<`3oool001L0oooo00<000000?ooo`3oool0o`3ooolG0?ooo`03
+0000003oool0oooo01P0oooo00<000000?ooo`3oool0<`3oool001L0oooo00<000000?ooo`3oool0
+o`3ooolF0?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3oool0<`3oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolE0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0<`3o
+ool001L0oooo00<000000?ooo`3oool0o`3ooolE0?ooo`030000003oool0oooo01X0oooo00<00000
+0?ooo`3oool0<`3oool001L0oooo00<000000?ooo`3oool0o`3ooolD0?ooo`030000003oool0oooo
+01X0oooo00<000000?ooo`3oool0=03oool001L0oooo00<000000?ooo`3oool0o`3ooolC0?ooo`03
+0000003oool0oooo01/0oooo00<000000?ooo`3oool0=03oool001L0oooo00<000000?ooo`3oool0
+o`3ooolB0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0=03oool001L0oooo00<0
+00000?ooo`3oool0o`3ooolA0?ooo`030000003oool0oooo01d0oooo00<000000?ooo`3oool0=03o
+ool001L0oooo00<000000?ooo`3oool0o`3oool at 0?ooo`030000003oool0oooo01h0oooo00<00000
+0?ooo`3oool0=03oool001L0oooo00<000000?ooo`3oool0o`3oool?0?ooo`030000003oool0oooo
+01h0oooo00<000000?ooo`3oool0=@3oool001L0oooo00<000000?ooo`3oool0o`3oool>0?ooo`03
+0000003oool0oooo01l0oooo00<000000?ooo`3oool0=@3oool001L0oooo0`00003o0?ooo`d0oooo
+00<000000?ooo`3oool0803oool00`000000oooo0?ooo`0e0?ooo`005`3oool00`000000oooo0?oo
+o`0500000?l0oooo1`3oool00`000000oooo0?ooo`0Q0?ooo`030000003oool0oooo03D0oooo000G
+0?ooo`030000003oool0oooo00D0oooo1P00003o0?ooo`030000003oool0oooo0280oooo00<00000
+0?ooo`3oool0=@3oool001L0oooo00<000000?ooo`3oool02`3oool500000?T0oooo00<000000?oo
+o`3oool08P3oool00`000000oooo0?ooo`0f0?ooo`000P3oool500000080oooo0`00000;0?ooo`03
+0000003oool0oooo0100oooo1 at 00003b0?ooo`8000009 at 3oool00`000000oooo0?ooo`0f0?ooo`00
+0`3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000002P3oool3000001D0
+oooo1 at 00003/0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool0=P3oool000 at 0oooo
+00D000000?ooo`3oool0oooo000000030?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3o
+ool06P3oool500000>D0oooo0P00000X0?ooo`030000003oool0oooo03H0oooo00050?ooo`040000
+003oool0oooo000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`0O0?ooo`H0
+0000gP3oool00`000000oooo0?ooo`0W0?ooo`030000003oool0oooo03L0oooo00060?ooo`030000
+003oool0000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`0U0?ooo`D00000
+e`3oool2000002X0oooo00<000000?ooo`3oool0=`3oool00080oooo00L000000?ooo`3oool0oooo
+0000003oool0000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`0Z0?ooo`D0
+0000d at 3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo03L0oooo00030?ooo`<00000
+0`3oool3000000/0oooo00<000000?ooo`3oool0;`3oool500000<X0oooo0P00000]0?ooo`030000
+003oool0oooo03L0oooo000G0?ooo`030000003oool0oooo03 at 0oooo1P0000330?ooo`030000003o
+ool0oooo02d0oooo00<000000?ooo`3oool0=`3oool001L0oooo00<000000?ooo`3oool0>P3oool5
+00000;`0oooo0P00000_0?ooo`030000003oool0oooo03P0oooo000G0?ooo`030000003oool0oooo
+03l0oooo1P00002d0?ooo`800000<@3oool00`000000oooo0?ooo`0h0?ooo`005`3oool00`000000
+oooo0?ooo`150?ooo`H00000Z`3oool3000003<0oooo00<000000?ooo`3oool0>03oool001L0oooo
+00<000000?ooo`3oool0B`3oool700000:00oooo1000000f0?ooo`030000003oool0oooo03P0oooo
+000G0?ooo`030000003oool0oooo0580oooo1`00002F0?ooo`<00000>P3oool00`000000oooo0?oo
+o`0h0?ooo`005`3oool00`000000oooo0?ooo`1I0?ooo`H00000S03oool4000003`0oooo00<00000
+0?ooo`3oool0>@3oool001L0oooo00<000000?ooo`3oool0G`3oool700000880oooo0`0000100?oo
+o`030000003oool0oooo03T0oooo000G0?ooo`030000003oool0oooo06H0oooo1`00001g0?ooo`@0
+0000@`3oool00`000000oooo0?ooo`0i0?ooo`005`3oool00`000000oooo0?ooo`1]0?ooo`L00000
+J`3oool5000004L0oooo00<000000?ooo`3oool0>@3oool001L0oooo00<000000?ooo`3oool0M03o
+ool:000005d0oooo1000001<0?ooo`030000003oool0oooo03T0oooo000G0?ooo`030000003oool0
+oooo07h0oooo2P00001:0?ooo`T00000C`3oool00`000000oooo0?ooo`0j0?ooo`005`3oool00`00
+0000oooo0?ooo`280?ooo``00000=`3oool7000005P0oooo00<000000?ooo`3oool0>P3oool001L0
+oooo00<000000?ooo`3oool0U03ooolg000005l0oooo00<000000?ooo`3oool0>P3oool001L0oooo
+00<000000?ooo`3oool0o`3oool[0?ooo`030000003oool0oooo03X0oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo:`3oool00`000000oooo0?ooo`0j0?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooobX0oooo00<000000?ooo`3oool0>`3oool001L0oooo00<000000?ooo`3oool0o`3ooolZ0?oo
+o`030000003oool0oooo03/0oooo000G0?ooo`030000003oool0oooo0?l0oooo:P3oool00`000000
+oooo0?ooo`0k0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobX0oooo00<000000?ooo`3oool0
+>`3oool001L0oooo00<000000?ooo`3oool0o`3ooolY0?ooo`030000003oool0oooo03`0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo:@3oool00`000000oooo0?ooo`0l0?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?ooobT0oooo00<000000?ooo`3oool0?03oool001L0oooo00<000000?ooo`3o
+ool0o`3ooolY0?ooo`030000003oool0oooo03`0oooo000G0?ooo`030000003oool0oooo0?l0oooo
+:@3oool00`000000oooo0?ooo`0l0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobP0oooo00<0
+00000?ooo`3oool0?@3oool001L0oooo00<000000?ooo`3oool0o`3ooolX0?ooo`030000003oool0
+oooo03d0oooo000G0?ooo`030000003oool0oooo0?l0oooo:03oool00`000000oooo0?ooo`0m0?oo
+o`005`3oool00`000000oooo0?ooo`3o0?ooobP0oooo00<000000?ooo`3oool0?@3oool001L0oooo
+00<000000?ooo`3oool0o`3ooolW0?ooo`030000003oool0oooo03h0oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo9`3oool00`000000oooo0?ooo`0n0?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooobL0oooo00<000000?ooo`3oool0?P3oool001L0oooo00<000000?ooo`3oool0o`3ooolW0?oo
+o`030000003oool0oooo03h0oooo000G0?ooo`030000003oool0oooo0?l0oooo9`3oool00`000000
+oooo0?ooo`0n0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobH0oooo00<000000?ooo`3oool0
+?`3oool001L0oooo00<000000?ooo`3oool0o`3ooolV0?ooo`030000003oool0oooo03l0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo9P3oool00`000000oooo0?ooo`0o0?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?ooobH0oooo00<000000?ooo`3oool0?`3oool001L0oooo00<000000?ooo`3o
+ool0o`3ooolV0?ooo`030000003oool0oooo03l0oooo000G0?ooo`030000003oool0oooo0?l0oooo
+9 at 3oool00`000000oooo0?ooo`100?ooo`005`3oool00`000000oooo0?ooo`3o0?ooobD0oooo00<0
+00000?ooo`3oool0 at 03oool001L0oooo00<000000?ooo`3oool0o`3ooolU0?ooo`030000003oool0
+oooo0400oooo000G0?ooo`030000003oool0oooo0?l0oooo9 at 3oool00`000000oooo0?ooo`100?oo
+o`005`3oool00`000000oooo0?ooo`3o0?ooob at 0oooo00<000000?ooo`3oool0@@3oool001L0oooo
+00<000000?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo0440oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo903oool00`000000oooo0?ooo`110?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooob at 0oooo00<000000?ooo`3oool0@@3oool001L0oooo00<000000?ooo`3oool0o`3ooolS0?oo
+o`030000003oool0oooo0480oooo000G0?ooo`030000003oool0oooo0?l0oooo8`3oool00`000000
+oooo0?ooo`120?ooo`005`3oool00`000000oooo0?ooo`3o0?ooob<0oooo00<000000?ooo`3oool0
+ at P3oool001L0oooo00<000000?ooo`3oool0o`3ooolR0?ooo`030000003oool0oooo04<0oooo000G
+0?ooo`030000003oool0oooo0?l0oooo8P3oool00`000000oooo0?ooo`130?ooo`005`3oool20000
+0?l0oooo8`3oool00`000000oooo0?ooo`130?ooo`005`3oool00`000000oooo0?ooo`3o0?ooob80
+oooo00<000000?ooo`3oool0@`3oool001L0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`030000
+003oool0oooo04 at 0oooo000G0?ooo`030000003oool0oooo0?l0oooo8 at 3oool00`000000oooo0?oo
+o`140?ooo`005`3oool00`000000oooo0?ooo`3o0?ooob40oooo00<000000?ooo`3oool0A03oool0
+01L0oooo00<000000?ooo`3oool0o`3ooolP0?ooo`030000003oool0oooo04D0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo803oool00`000000oooo0?ooo`150?ooo`005`3oool00`000000oooo
+0?ooo`3o0?ooob00oooo00<000000?ooo`3oool0A at 3oool001L0oooo00<000000?ooo`3oool0o`3o
+oolO0?ooo`030000003oool0oooo04H0oooo000G0?ooo`030000003oool0oooo0?l0oooo7`3oool0
+0`000000oooo0?ooo`160?ooo`005`3oool00`000000oooo0?ooo`3o0?oooal0oooo00<000000?oo
+o`3oool0AP3oool001L0oooo00<000000?ooo`3oool0o`3ooolO0?ooo`030000003oool0oooo04H0
+oooo000G0?ooo`030000003oool0oooo0?l0oooo7P3oool00`000000oooo0?ooo`170?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?oooah0oooo00<000000?ooo`3oool0A`3oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolN0?ooo`030000003oool0oooo04L0oooo000G0?ooo`030000003oool0oooo
+0?l0oooo7 at 3oool00`000000oooo0?ooo`180?ooo`005`3oool00`000000oooo0?ooo`3o0?oooad0
+oooo00<000000?ooo`3oool0B03oool001L0oooo00<000000?ooo`3oool0o`3ooolM0?ooo`030000
+003oool0oooo04P0oooo000G0?ooo`030000003oool0oooo0?l0oooo703oool00`000000oooo0?oo
+o`190?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa`0oooo00<000000?ooo`3oool0B at 3oool0
+01L0oooo00<000000?ooo`3oool0o`3ooolL0?ooo`030000003oool0oooo04T0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo703oool00`000000oooo0?ooo`190?ooo`005`3oool00`000000oooo
+0?ooo`3o0?oooa/0oooo00<000000?ooo`3oool0BP3oool001L0oooo00<000000?ooo`3oool0o`3o
+oolK0?ooo`030000003oool0oooo04X0oooo000G0?ooo`030000003oool0oooo0?l0oooo6`3oool0
+0`000000oooo0?ooo`1:0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooaX0oooo00<000000?oo
+o`3oool0B`3oool001L0oooo00<000000?ooo`3oool0o`3ooolJ0?ooo`030000003oool0oooo04/0
+oooo000G0?ooo`030000003oool0oooo0?l0oooo6P3oool00`000000oooo0?ooo`1;0?ooo`005`3o
+ool00`000000oooo0?ooo`3o0?oooaT0oooo00<000000?ooo`3oool0C03oool001L0oooo00<00000
+0?ooo`3oool0o`3ooolI0?ooo`030000003oool0oooo04`0oooo000G0?ooo`030000003oool0oooo
+0?l0oooo6 at 3oool00`000000oooo0?ooo`1<0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooaP0
+oooo00<000000?ooo`3oool0C at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolH0?ooo`030000
+003oool0oooo04d0oooo000G0?ooo`030000003oool0oooo0?l0oooo603oool00`000000oooo0?oo
+o`1=0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooaL0oooo00<000000?ooo`3oool0CP3oool0
+01L0oooo00<000000?ooo`3oool0o`3ooolG0?ooo`030000003oool0oooo04h0oooo000G0?ooo`03
+0000003oool0oooo0?l0oooo5`3oool00`000000oooo0?ooo`1>0?ooo`005`3oool00`000000oooo
+0?ooo`3o0?oooaL0oooo00<000000?ooo`3oool0CP3oool001L0oooo00<000000?ooo`3oool0o`3o
+oolF0?ooo`030000003oool0oooo04l0oooo000G0?ooo`030000003oool0oooo0?l0oooo5P3oool0
+0`000000oooo0?ooo`1?0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooaH0oooo00<000000?oo
+o`3oool0C`3oool001L0oooo00<000000?ooo`3oool0o`3ooolE0?ooo`030000003oool0oooo0500
+oooo000G0?ooo`800000o`3ooolF0?ooo`030000003oool0oooo0500oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo5 at 3oool00`000000oooo0?ooo`1 at 0?ooo`005`3oool00`000000oooo0?ooo`3o
+0?oooa at 0oooo00<000000?ooo`3oool0D at 3oool001L0oooo00<000000?ooo`3oool0o`3ooolD0?oo
+o`030000003oool0oooo0540oooo000G0?ooo`030000003oool0oooo0?l0oooo503oool00`000000
+oooo0?ooo`1A0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa<0oooo00<000000?ooo`3oool0
+DP3oool001L0oooo00<000000?ooo`3oool0o`3ooolC0?ooo`030000003oool0oooo0580oooo000G
+0?ooo`030000003oool0oooo0?l0oooo4`3oool00`000000oooo0?ooo`1B0?ooo`005`3oool00`00
+0000oooo0?ooo`3o0?oooa80oooo00<000000?ooo`3oool0D`3oool001L0oooo00<000000?ooo`3o
+ool0o`3ooolB0?ooo`030000003oool0oooo05<0oooo000G0?ooo`030000003oool0oooo0?l0oooo
+4 at 3oool00`000000oooo0?ooo`1D0?ooo`005`3oool00`000000oooo0?ooo`3o0?oooa40oooo00<0
+00000?ooo`3oool0E03oool001L0oooo00<000000?ooo`3oool0o`3oool at 0?ooo`030000003oool0
+oooo05D0oooo000G0?ooo`030000003oool0oooo0?l0oooo403oool00`000000oooo0?ooo`1E0?oo
+o`005`3oool00`000000oooo0?ooo`3o0?ooo`l0oooo00<000000?ooo`3oool0EP3oool001L0oooo
+00<000000?ooo`3oool0o`3oool?0?ooo`030000003oool0oooo05H0oooo000G0?ooo`030000003o
+ool0oooo0?l0oooo3P3oool00`000000oooo0?ooo`1G0?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooo`h0oooo00<000000?ooo`3oool0E`3oool001L0oooo00<000000?ooo`3oool0o`3oool>0?oo
+o`030000003oool0oooo05L0oooo000G0?ooo`030000003oool0oooo0?l0oooo3 at 3oool00`000000
+oooo0?ooo`1H0?ooo`005`3oool00`000000oooo0?ooo`3o0?ooo`d0oooo00<000000?ooo`3oool0
+F03oool001L0oooo0P00003o0?ooo`d0oooo00<000000?ooo`3oool0F at 3oool001L0oooo00@00000
+0?ooo`0000000000o`3oool;0?ooo`030000003oool0oooo05T0oooo000G0?ooo`040000003oool0
+oooo0?ooo`800000o`3oool80?ooo`030000003oool0oooo05X0oooo000G0?ooo`030000003oool0
+oooo00<0oooo0P00003o0?ooo`H0oooo00<000000?ooo`3oool0FP3oool001L0oooo00<000000?oo
+o`3oool01 at 3oool200000?l0oooo0`3oool00`000000oooo0?ooo`1K0?ooo`005`3oool00`000000
+oooo0?ooo`070?ooo`<00000o`3oool00`000000oooo0?ooo`1K0?ooo`005`3oool00`000000oooo
+0?ooo`0:0?ooo`800000o03oool00`000000oooo0?ooo`1L0?ooo`005`3oool00`000000oooo0?oo
+o`0<0?ooo`800000nP3oool00`000000oooo0?ooo`1L0?ooo`005`3oool00`000000oooo0?ooo`0>
+0?ooo`800000m`3oool00`000000oooo0?ooo`1M0?ooo`000`3oool3000000<0oooo0`00000;0?oo
+o`030000003oool0oooo0100oooo0P00003e0?ooo`030000003oool0oooo05d0oooo00020?ooo`07
+0000003oool0oooo0?ooo`000000oooo000000030?ooo`030000003oool0oooo00P0oooo00<00000
+0?ooo`3oool04P3oool300000?40oooo00<000000?ooo`3oool0GP3oool000H0oooo00<000000?oo
+o`0000000`3oool00`000000oooo0?ooo`080?ooo`<000005 at 3oool200000>l0oooo00<000000?oo
+o`3oool0GP3oool00080oooo00L000000?ooo`3oool0oooo0000003oool0000000<0oooo00<00000
+0?ooo`3oool0203oool00`000000oooo0?ooo`0G0?ooo`800000k03oool00`000000oooo0?ooo`1O
+0?ooo`000P3oool400000080oooo00D000000?ooo`3oool0oooo0000000:0?ooo`030000003oool0
+oooo01T0oooo0P00003Z0?ooo`030000003oool0oooo05l0oooo00030?ooo`030000003oool0oooo
+0080oooo00D000000?ooo`3oool0oooo0000000:0?ooo`030000003oool0oooo01/0oooo0P00003W
+0?ooo`030000003oool0oooo0600oooo00030?ooo`@000000P3oool3000000/0oooo00<000000?oo
+o`3oool07 at 3oool200000>@0oooo00<000000?ooo`3oool0H at 3oool001L0oooo00<000000?ooo`3o
+ool07`3oool300000>40oooo00<000000?ooo`3oool0H at 3oool001L0oooo00<000000?ooo`3oool0
+8P3oool200000=h0oooo00<000000?ooo`3oool0HP3oool001L0oooo00<000000?ooo`3oool0903o
+ool200000=`0oooo00<000000?ooo`3oool0HP3oool001L0oooo00<000000?ooo`3oool09P3oool2
+00000=T0oooo00<000000?ooo`3oool0H`3oool001L0oooo00<000000?ooo`3oool0:03oool20000
+0=H0oooo00<000000?ooo`3oool0I03oool001L0oooo00<000000?ooo`3oool0:P3oool300000=<0
+oooo00<000000?ooo`3oool0I03oool001L0oooo00<000000?ooo`3oool0;@3oool200000=00oooo
+00<000000?ooo`3oool0I at 3oool001L0oooo00<000000?ooo`3oool0;`3oool200000<h0oooo00<0
+00000?ooo`3oool0I at 3oool001L0oooo00<000000?ooo`3oool0<@3oool200000</0oooo00<00000
+0?ooo`3oool0IP3oool001L0oooo00<000000?ooo`3oool0<`3oool200000<T0oooo00<000000?oo
+o`3oool0IP3oool001L0oooo00<000000?ooo`3oool0=@3oool300000<D0oooo00<000000?ooo`3o
+ool0I`3oool001L0oooo00<000000?ooo`3oool0>03oool200000<80oooo00<000000?ooo`3oool0
+J03oool001L0oooo00<000000?ooo`3oool0>P3oool200000;l0oooo00<000000?ooo`3oool0J at 3o
+ool001L0oooo00<000000?ooo`3oool0?03oool200000;`0oooo00<000000?ooo`3oool0JP3oool0
+01L0oooo00<000000?ooo`3oool0?P3oool200000;X0oooo00<000000?ooo`3oool0JP3oool001L0
+oooo00<000000?ooo`3oool0 at 03oool300000;H0oooo00<000000?ooo`3oool0J`3oool001L0oooo
+00<000000?ooo`3oool0@`3oool200000;<0oooo00<000000?ooo`3oool0K03oool001L0oooo00<0
+00000?ooo`3oool0A at 3oool200000;00oooo00<000000?ooo`3oool0K at 3oool001L0oooo00<00000
+0?ooo`3oool0A`3oool200000:d0oooo00<000000?ooo`3oool0KP3oool001L0oooo00<000000?oo
+o`3oool0B at 3oool200000:X0oooo00<000000?ooo`3oool0K`3oool001L0oooo00<000000?ooo`3o
+ool0B`3oool300000:H0oooo00<000000?ooo`3oool0L03oool001L0oooo0P00001?0?ooo`800000
+X`3oool00`000000oooo0?ooo`1a0?ooo`005`3oool00`000000oooo0?ooo`1 at 0?ooo`800000X at 3o
+ool00`000000oooo0?ooo`1a0?ooo`005`3oool00`000000oooo0?ooo`1B0?ooo`800000WP3oool0
+0`000000oooo0?ooo`1b0?ooo`005`3oool00`000000oooo0?ooo`1D0?ooo`<00000VP3oool00`00
+0000oooo0?ooo`1c0?ooo`005`3oool00`000000oooo0?ooo`1G0?ooo`800000U`3oool00`000000
+oooo0?ooo`1d0?ooo`005`3oool00`000000oooo0?ooo`1I0?ooo`800000U03oool00`000000oooo
+0?ooo`1e0?ooo`005`3oool00`000000oooo0?ooo`1K0?ooo`800000T at 3oool00`000000oooo0?oo
+o`1f0?ooo`005`3oool00`000000oooo0?ooo`1M0?ooo`800000S at 3oool2000007T0oooo000G0?oo
+o`030000003oool0oooo05l0oooo0`0000290?ooo`030000003oool0oooo07T0oooo000G0?ooo`03
+0000003oool0oooo0680oooo0P0000260?ooo`030000003oool0oooo07X0oooo000G0?ooo`030000
+003oool0oooo06 at 0oooo0P0000230?ooo`030000003oool0oooo07/0oooo000G0?ooo`030000003o
+ool0oooo06H0oooo0P00001o0?ooo`800000OP3oool001L0oooo00<000000?ooo`3oool0J03oool3
+000007/0oooo00<000000?ooo`3oool0OP3oool001L0oooo00<000000?ooo`3oool0J`3oool30000
+07H0oooo0P0000210?ooo`005`3oool00`000000oooo0?ooo`1^0?ooo`800000LP3oool2000008<0
+oooo000G0?ooo`030000003oool0oooo0700oooo0`00001^0?ooo`030000003oool0oooo08<0oooo
+000G0?ooo`030000003oool0oooo07<0oooo0`00001Y0?ooo`800000QP3oool001L0oooo00<00000
+0?ooo`3oool0MP3oool3000006 at 0oooo0P0000280?ooo`005`3oool00`000000oooo0?ooo`1i0?oo
+o`800000H03oool2000008X0oooo000G0?ooo`030000003oool0oooo07/0oooo0`00001K0?ooo`80
+0000S03oool001L0oooo00<000000?ooo`3oool0OP3oool3000005L0oooo00<000000?ooo`3oool0
+S03oool001L0oooo00<000000?ooo`3oool0P at 3oool2000005<0oooo0P00002?0?ooo`005`3oool2
+000008 at 0oooo1@00001:0?ooo`@00000T at 3oool001L0oooo00<000000?ooo`3oool0R03oool50000
+0440oooo1000002E0?ooo`005`3oool00`000000oooo0?ooo`2=0?ooo`<00000>`3oool3000009T0
+oooo000G0?ooo`030000003oool0oooo0900oooo1000000c0?ooo`@00000W03oool001L0oooo00<0
+00000?ooo`3oool0U03oool5000002P0oooo1P00002P0?ooo`005`3oool00`000000oooo0?ooo`2I
+0?ooo`/000005 at 3oool800000:H0oooo000G0?ooo`030000003oool0oooo0:@0oooo5 at 00002^0?oo
+o`005`3oool00`000000oooo0?ooo`3o0?ooofP0oooo000G0?ooo`030000003oool0oooo0?l0oooo
+J03oool001L0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005`3oool00`000000oooo0?ooo`3o
+0?ooofP0oooo003o0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo003o
+0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo003o
+0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo003o0?oooh80oooo0000
+\
+\>"],
+  ImageRangeCache->{{{0, 384}, {769, 0}} -> {-0.416985, -0.402934, 0.00493259,
+   0.00301824}}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(LogLogPlot[{ycbcrstsrg[f, .1], ycbcrstsrg[f, .2], ycbcrstsrg[f, .3], 
+        ycbcrstsrg[f, .4], ycbcrstsrg[f, .5], ycbcrstsrg[f, .6], 
+        ycbcrstsrg[f, .7], ycbcrstsrg[f, .8], ycbcrstsrg[f, .9], 
+        ycbcrstsrg[f, 1.0]}, {f, .5, 30}, PlotRange -> {{.5, 30}, {.5, 30}}, 
+      AspectRatio -> 2, PlotStyle -> {{RGBColor[1, 0, 0]}}]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 2 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.169294 0.562382 0.338588 1.12476 [
+[.16929 -0.0125 -6 -15 ]
+[.16929 -0.0125 6 0 ]
+[.26832 -0.0125 -13 -15 ]
+[.26832 -0.0125 13 0 ]
+[.33859 -0.0125 -6 -15 ]
+[.33859 -0.0125 6 0 ]
+[.43762 -0.0125 -6 -15 ]
+[.43762 -0.0125 6 0 ]
+[.56238 -0.0125 -6 -15 ]
+[.56238 -0.0125 6 0 ]
+[.64456 -0.0125 -6 -15 ]
+[.64456 -0.0125 6 0 ]
+[.73168 -0.0125 -9.5 -15 ]
+[.73168 -0.0125 9.5 0 ]
+[.83071 -0.0125 -9.5 -15 ]
+[.83071 -0.0125 9.5 0 ]
+[.90097 -0.0125 -9.5 -15 ]
+[.90097 -0.0125 9.5 0 ]
+[-0.0125 .33859 -12 -7.5 ]
+[-0.0125 .33859 0 7.5 ]
+[-0.0125 .53665 -26 -7.5 ]
+[-0.0125 .53665 0 7.5 ]
+[-0.0125 .67718 -12 -7.5 ]
+[-0.0125 .67718 0 7.5 ]
+[-0.0125 .87524 -12 -7.5 ]
+[-0.0125 .87524 0 7.5 ]
+[-0.0125 1.12476 -12 -7.5 ]
+[-0.0125 1.12476 0 7.5 ]
+[-0.0125 1.28912 -12 -7.5 ]
+[-0.0125 1.28912 0 7.5 ]
+[-0.0125 1.46335 -19 -7.5 ]
+[-0.0125 1.46335 0 7.5 ]
+[-0.0125 1.66141 -19 -7.5 ]
+[-0.0125 1.66141 0 7.5 ]
+[-0.0125 1.80194 -19 -7.5 ]
+[-0.0125 1.80194 0 7.5 ]
+[ -0.0005 -0.0005 0 0 ]
+[ 1 2 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.16929 0 m
+.16929 .00625 L
+s
+gsave
+.16929 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.26832 0 m
+.26832 .00625 L
+s
+gsave
+.26832 -0.0125 -74 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1.5) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.33859 0 m
+.33859 .00625 L
+s
+gsave
+.33859 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(2) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.43762 0 m
+.43762 .00625 L
+s
+gsave
+.43762 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(3) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.56238 0 m
+.56238 .00625 L
+s
+gsave
+.56238 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(5) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.64456 0 m
+.64456 .00625 L
+s
+gsave
+.64456 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(7) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.73168 0 m
+.73168 .00625 L
+s
+gsave
+.73168 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(10) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.83071 0 m
+.83071 .00625 L
+s
+gsave
+.83071 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(15) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.90097 0 m
+.90097 .00625 L
+s
+gsave
+.90097 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+.19257 0 m
+.19257 .00375 L
+s
+.21382 0 m
+.21382 .00375 L
+s
+.23337 0 m
+.23337 .00375 L
+s
+.25147 0 m
+.25147 .00375 L
+s
+.28409 0 m
+.28409 .00375 L
+s
+.29889 0 m
+.29889 .00375 L
+s
+.31285 0 m
+.31285 .00375 L
+s
+.32606 0 m
+.32606 .00375 L
+s
+.50788 0 m
+.50788 .00375 L
+s
+.60691 0 m
+.60691 .00375 L
+s
+.67718 0 m
+.67718 .00375 L
+s
+.70594 0 m
+.70594 .00375 L
+s
+.75495 0 m
+.75495 .00375 L
+s
+.77621 0 m
+.77621 .00375 L
+s
+.79576 0 m
+.79576 .00375 L
+s
+.81386 0 m
+.81386 .00375 L
+s
+.84647 0 m
+.84647 .00375 L
+s
+.86128 0 m
+.86128 .00375 L
+s
+.87524 0 m
+.87524 .00375 L
+s
+.88844 0 m
+.88844 .00375 L
+s
+.25 Mabswid
+0 0 m
+1 0 L
+s
+0 .33859 m
+.00625 .33859 L
+s
+gsave
+-0.0125 .33859 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .53665 m
+.00625 .53665 L
+s
+gsave
+-0.0125 .53665 -87 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1.5) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .67718 m
+.00625 .67718 L
+s
+gsave
+-0.0125 .67718 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(2) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .87524 m
+.00625 .87524 L
+s
+gsave
+-0.0125 .87524 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(3) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.12476 m
+.00625 1.12476 L
+s
+gsave
+-0.0125 1.12476 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(5) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.28912 m
+.00625 1.28912 L
+s
+gsave
+-0.0125 1.28912 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(7) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.46335 m
+.00625 1.46335 L
+s
+gsave
+-0.0125 1.46335 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(10) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.66141 m
+.00625 1.66141 L
+s
+gsave
+-0.0125 1.66141 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(15) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.80194 m
+.00625 1.80194 L
+s
+gsave
+-0.0125 1.80194 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+0 .38514 m
+.00375 .38514 L
+s
+0 .42765 m
+.00375 .42765 L
+s
+0 .46675 m
+.00375 .46675 L
+s
+0 .50295 m
+.00375 .50295 L
+s
+0 .56817 m
+.00375 .56817 L
+s
+0 .59779 m
+.00375 .59779 L
+s
+0 .62571 m
+.00375 .62571 L
+s
+0 .65212 m
+.00375 .65212 L
+s
+0 1.01576 m
+.00375 1.01576 L
+s
+0 1.21382 m
+.00375 1.21382 L
+s
+0 1.35435 m
+.00375 1.35435 L
+s
+0 1.41188 m
+.00375 1.41188 L
+s
+0 1.50991 m
+.00375 1.50991 L
+s
+0 1.55241 m
+.00375 1.55241 L
+s
+0 1.59151 m
+.00375 1.59151 L
+s
+0 1.62771 m
+.00375 1.62771 L
+s
+0 1.69294 m
+.00375 1.69294 L
+s
+0 1.72255 m
+.00375 1.72255 L
+s
+0 1.75047 m
+.00375 1.75047 L
+s
+0 1.77688 m
+.00375 1.77688 L
+s
+.25 Mabswid
+0 0 m
+0 2 L
+s
+0 0 m
+1 0 L
+1 2 L
+0 2 L
+closepath
+clip
+newpath
+1 0 0 r
+.5 Mabswid
+0 1.99198 m
+.06179 1.98481 L
+.10799 1.97824 L
+.18867 1.96363 L
+.24784 1.94966 L
+.29842 1.9349 L
+.38108 1.90356 L
+.43777 1.87532 L
+.52204 1.81949 L
+.58247 1.76588 L
+.63366 1.70875 L
+.67451 1.65359 L
+.70824 1.60039 L
+.73968 1.54358 L
+.76653 1.48877 L
+.79218 1.43036 L
+.81457 1.37401 L
+.83433 1.31975 L
+.85373 1.26197 L
+.87106 1.20633 L
+.88822 1.14721 L
+.90369 1.09028 L
+.9177 1.03556 L
+.93177 .97741 L
+.9446 .92149 L
+.95632 .8678 L
+.96822 .81075 L
+.97915 .75593 L
+.99025 .69778 L
+1 .64461 L
+s
+0 1.68223 m
+.06179 1.67841 L
+.10799 1.6749 L
+.18867 1.66699 L
+.24784 1.65933 L
+.29842 1.65113 L
+.38108 1.63335 L
+.43777 1.61691 L
+.52204 1.58325 L
+.58247 1.5495 L
+.63366 1.51206 L
+.67451 1.4745 L
+.70824 1.43703 L
+.73968 1.39571 L
+.76653 1.35463 L
+.79218 1.30962 L
+.81457 1.26507 L
+.83433 1.22118 L
+.85373 1.17346 L
+.87106 1.12662 L
+.88822 1.07596 L
+.90369 1.02638 L
+.9177 .97804 L
+.93177 .92602 L
+.9446 .87541 L
+.95632 .82632 L
+.96822 .77366 L
+.97915 .72266 L
+.99025 .66813 L
+1 .61794 L
+s
+0 1.39984 m
+.06179 1.39769 L
+.10799 1.39571 L
+.18867 1.39123 L
+.24784 1.38686 L
+.29842 1.38215 L
+.38108 1.37182 L
+.43777 1.36213 L
+.48518 1.35177 L
+.52204 1.34187 L
+.58247 1.32101 L
+.63194 1.29813 L
+.6716 1.27464 L
+.70776 1.24798 L
+.73814 1.22069 L
+.76677 1.18991 L
+.79149 1.15857 L
+.81312 1.12687 L
+.83422 1.09151 L
+.85293 1.05594 L
+.87137 1.01655 L
+.8879 .97714 L
+.90282 .93792 L
+.91775 .89492 L
+.93131 .85233 L
+.94368 .81035 L
+.95619 .76466 L
+.96766 .71979 L
+.97928 .6712 L
+.98998 .62362 L
+.99985 .5772 L
+1 .57648 L
+s
+0 1.1658 m
+.06179 1.16447 L
+.10799 1.16324 L
+.18867 1.16045 L
+.24784 1.15772 L
+.29842 1.15477 L
+.38108 1.14826 L
+.43777 1.1421 L
+.4818 1.136 L
+.52204 1.12909 L
+.58586 1.11459 L
+.63472 1.09937 L
+.67396 1.0835 L
+.7098 1.06518 L
+.73994 1.04611 L
+.76837 1.02423 L
+.79294 1.00153 L
+.81445 .97818 L
+.83543 .95168 L
+.85406 .92453 L
+.87241 .89394 L
+.88888 .86279 L
+.90374 .83129 L
+.91862 .79619 L
+.93213 .76088 L
+.94446 .72558 L
+.95693 .68663 L
+.96836 .64786 L
+.97996 .60537 L
+.99063 .56326 L
+1 .52378 L
+s
+0 .97119 m
+.06179 .9703 L
+.10799 .96947 L
+.18867 .96759 L
+.24784 .96575 L
+.29842 .96376 L
+.38108 .95934 L
+.43777 .95515 L
+.4818 .95098 L
+.52204 .94624 L
+.58586 .93622 L
+.63472 .92561 L
+.67396 .91443 L
+.7098 .90141 L
+.73994 .88769 L
+.76837 .87177 L
+.79294 .85506 L
+.81445 .83765 L
+.83543 .81764 L
+.85406 .79687 L
+.87241 .77315 L
+.88888 .74865 L
+.90374 .72355 L
+.91862 .6952 L
+.93213 .66629 L
+.94446 .63703 L
+.95693 .60432 L
+.96836 .57137 L
+.97996 .53481 L
+.99063 .49816 L
+1 .46343 L
+s
+0 .80626 m
+.06179 .80563 L
+.10799 .80503 L
+.18867 .80369 L
+.24784 .80238 L
+.29842 .80095 L
+.38108 .79778 L
+.43777 .79477 L
+.4818 .79176 L
+.52204 .78834 L
+.58586 .78106 L
+.63472 .77331 L
+.67396 .76511 L
+.7098 .75548 L
+.73994 .74527 L
+.76837 .73333 L
+.79294 .72069 L
+.81445 .70741 L
+.83543 .692 L
+.85406 .67587 L
+.87241 .65726 L
+.88888 .63783 L
+.90374 .61772 L
+.91862 .59477 L
+.93213 .5711 L
+.94446 .5469 L
+.95693 .51955 L
+.96836 .4917 L
+.97996 .46047 L
+.99063 .42883 L
+1 .39856 L
+s
+0 .66379 m
+.06179 .66332 L
+.10799 .66288 L
+.18867 .66187 L
+.24784 .66089 L
+.29842 .65982 L
+.38108 .65744 L
+.43777 .65518 L
+.4818 .65292 L
+.52204 .65034 L
+.58586 .64485 L
+.63472 .63897 L
+.67396 .63273 L
+.7098 .62537 L
+.73994 .61753 L
+.76837 .60831 L
+.79294 .59849 L
+.81445 .58812 L
+.83543 .57601 L
+.85406 .56325 L
+.87241 .54841 L
+.88888 .5328 L
+.90374 .51652 L
+.91862 .49778 L
+.93213 .47829 L
+.94446 .45819 L
+.95693 .43528 L
+.96836 .41174 L
+.97996 .3851 L
+.99063 .35786 L
+1 .33157 L
+s
+0 .53869 m
+.06179 .53832 L
+.10799 .53798 L
+.18867 .5372 L
+.24784 .53644 L
+.29842 .53561 L
+.38108 .53377 L
+.43777 .53201 L
+.4818 .53025 L
+.52204 .52824 L
+.58586 .52396 L
+.63472 .51937 L
+.67396 .51447 L
+.7098 .50868 L
+.73994 .5025 L
+.76837 .4952 L
+.79294 .4874 L
+.81445 .47912 L
+.83543 .46941 L
+.85406 .45912 L
+.87241 .44709 L
+.88888 .43437 L
+.90374 .42102 L
+.91862 .40556 L
+.93213 .38937 L
+.94446 .37255 L
+.95693 .35326 L
+.96836 .33328 L
+.97996 .3105 L
+.99063 .28703 L
+1 .26421 L
+s
+0 .42732 m
+.06179 .42703 L
+.10799 .42676 L
+.18867 .42614 L
+.24784 .42553 L
+.29842 .42487 L
+.38108 .4234 L
+.43777 .422 L
+.4818 .4206 L
+.52204 .41899 L
+.58586 .41556 L
+.63472 .41188 L
+.67396 .40795 L
+.7098 .40329 L
+.73994 .3983 L
+.76837 .39239 L
+.79294 .38606 L
+.81445 .37932 L
+.83543 .37139 L
+.85406 .36296 L
+.87241 .35306 L
+.88888 .34254 L
+.90374 .33145 L
+.91862 .31854 L
+.93213 .30496 L
+.94446 .29078 L
+.95693 .2744 L
+.96836 .25736 L
+.97996 .23779 L
+.99063 .2175 L
+1 .19765 L
+s
+0 .32706 m
+.06179 .32682 L
+.10799 .3266 L
+.18867 .32609 L
+.24784 .3256 L
+.29842 .32506 L
+.38108 .32386 L
+.43777 .32272 L
+.4818 .32157 L
+.52204 .32026 L
+.58586 .31746 L
+.63472 .31444 L
+.67396 .31122 L
+.7098 .30739 L
+.73994 .30329 L
+.76837 .29842 L
+.79294 .29319 L
+.81445 .28761 L
+.83543 .28103 L
+.85406 .27401 L
+.87241 .26575 L
+.88888 .25694 L
+.90374 .24761 L
+.91862 .23672 L
+.93213 .22521 L
+.94446 .21313 L
+.95693 .19913 L
+.96836 .18448 L
+.97996 .16758 L
+.99063 .14996 L
+1 .13262 L
+s
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{384, 768},
+  ImageMargins->{{43, 0}, {0, 2}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`400060000302000`400?l00000o`00003oo`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00F at 3oool00`000000oooo0?ooo`0I0?ooo`050000
+003oool0oooo0?ooo`0000000P3oool300000180oooo1 at 00000O0?ooo`<00000:@3oool3000001X0
+oooo00<000000?ooo`3oool06P3oool010000000oooo0?ooo`3oool3000001`0oooo00 at 000000?oo
+o`3oool0oooo0`00000?0?ooo`D000000P3oool300000280oooo001I0?ooo`030000003oool0oooo
+01T0oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?ooo`3oool000000180oooo00<00000
+0?ooo`3oool07`3oool01 at 000000oooo0?ooo`3oool0000002L0oooo00D000000?ooo`3oool0oooo
+0000000I0?ooo`030000003oool0oooo01X0oooo00 at 000000?ooo`3oool000000`3oool00`000000
+oooo0?ooo`0I0?ooo`040000003oool0oooo000000<0oooo00<000000?ooo`3oool03 at 3oool00`00
+0000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000008 at 3oool005T0oooo00<000000?oo
+o`3oool06 at 3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo0140oooo00<000000?oo
+o`3oool08P3oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo01P0oooo00<000000?oo
+o`3oool06 at 3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo01T0oooo00<00000
+0?ooo`3oool0103oool00`000000oooo0?ooo`0>0?ooo`050000003oool0oooo0?ooo`0000000`3o
+ool00`000000oooo0?ooo`0O0?ooo`00F at 3oool00`000000oooo0?ooo`0I0?ooo`030000003oool0
+oooo00<0oooo00D000000?ooo`3oool0oooo0000000D0?ooo`030000003oool0oooo01l0oooo0P00
+000X0?ooo`050000003oool0oooo0?ooo`0000006P3oool00`000000oooo0?ooo`0I0?ooo`040000
+003oool0oooo000000<0oooo00<000000?ooo`3oool06 at 3oool010000000oooo0?ooo`0000030?oo
+o`030000003oool0oooo00l0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`0O
+0?ooo`00E`3oool00`000000oooo0000000I0?ooo`030000003oool0000000D0oooo1000000F0?oo
+o`030000003oool0oooo0200oooo00<000000?ooo`3oool09 at 3oool4000001`0oooo00<000000?oo
+o`3oool05P3oool00`000000oooo000000020?ooo`050000003oool0oooo0?ooo`0000006 at 3oool0
+0`000000oooo000000020?ooo`@000004`3oool00`000000oooo000000030?ooo`030000003oool0
+oooo01l0oooo001H0?ooo`8000006P3oool2000000H0oooo00<000000?ooo`3oool04P3oool01 at 00
+0000oooo0?ooo`3oool0000001h0oooo00D000000?ooo`3oool0oooo0000000X0?ooo`030000003o
+ool0oooo01`0oooo00<000000?ooo`3oool05`3oool200000080oooo00D000000?ooo`3oool0oooo
+0000000J0?ooo`8000000`3oool00`000000oooo0?ooo`0?0?ooo`070000003oool0oooo0?ooo`00
+0000oooo000000030?ooo`030000003oool0oooo01l0oooo001I0?ooo`030000003oool0oooo01T0
+oooo00<000000?ooo`3oool0103oool400000180oooo0`00000P0?ooo`<00000:@3oool4000001P0
+oooo1 at 00000I0?ooo`040000003oool0oooo0?ooo`<00000703oool010000000oooo0?ooo`3oool4
+000000l0oooo0`0000030?ooo`<000008P3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0oooo
+P at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool001h0ooooo`00001S00000000
+7P3oool00`000000oooo0?ooo`0i0?ooo`030000003oool0oooo00D0oooo00<000000?ooo`3oool0
+103oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0
+0`3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool0
+0P3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000008P3oool00`000000
+oooo0?ooo`0F0?ooo`030000003oool0oooo0100oooo00<000000?ooo`3oool03 at 3oool00`000000
+oooo0?ooo`0:0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool01`3oool00`000000
+oooo0?ooo`060?ooo`030000003oool0oooo00D0oooo00<000000?ooo`3oool01 at 3oool00`000000
+oooo0?ooo`030?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool00`3oool00`000000
+oooo0?ooo`020?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool00P3oool01 at 000000
+oooo0?ooo`3oool0000000 at 0oooo00<000000?ooo`3oool08 at 3oool001h0oooo00<000000?ooo`3o
+ool0>@3oool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo01D0oooo00<000000?ooo`3o
+ool0803oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3o
+ool0703oool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo01H0oooo00<000000?ooo`3o
+ool08 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?oo
+o`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000
+003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool0
+0`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0
+oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo
+000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0
+ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?oo
+o`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000
+003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool0
+0`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0
+oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo
+000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0
+ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?oo
+o`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000
+003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool0
+0`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0
+oooo00<000000?ooo`3oool0o`3ooomP0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo
+000N0?ooo`030000003oool0oooo0?l0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0
+ooooG`3oool10?l000007P3oool00`000000oooo0?ooo`3o0?oooeh0oooo0 at 3o00010?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?oooeh0oooo0 at 3o00010?ooo`007P3oool00`000000oooo0?ooo`3o
+0?oooed0oooo0 at 3o00010?ooo`40oooo000N0?ooo`030000003oool0oooo0?l0ooooG03oool00`3o
+0000oooo0?ooo`010?ooo`007P3oool00`000000oooo0?ooo`3o0?oooe`0oooo00<0o`000?ooo`3o
+ool00 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooomK0?ooo`030?l0003oool0oooo0080oooo
+000N0?ooo`030000003oool0oooo0?l0ooooFP3oool00`3o0000oooo0?ooo`030?ooo`007P3oool0
+0`000000oooo0?ooo`3o0?oooeX0oooo00<0o`000?ooo`3oool00`3oool001h0oooo00<000000?oo
+o`3oool0o`3ooomI0?ooo`030?l0003oool0oooo00 at 0oooo000N0?ooo`030000003oool0oooo0?l0
+ooooF03oool00`3o0000oooo0?ooo`050?ooo`007P3oool00`000000oooo0?ooo`3o0?oooeP0oooo
+00<0o`000?ooo`3oool01 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooomG0?ooo`030?l0003o
+ool0oooo00H0oooo000N0?ooo`030000003oool0oooo0?l0ooooEP3oool00`3o0000oooo0?ooo`07
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooeH0oooo00<0o`000?ooo`3oool01`3oool001h0
+oooo00<000000?ooo`3oool0o`3ooomE0?ooo`030?l0003oool0oooo00P0oooo000N0?ooo`030000
+003oool0oooo0?l0ooooE03oool00`3o0000oooo0?ooo`090?ooo`007P3oool00`000000oooo0?oo
+o`3o0?oooe at 0oooo00<0o`000?ooo`3oool02 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooomC
+0?ooo`030?l0003oool0oooo00X0oooo000N0?ooo`030000003oool0oooo0?l0ooooDP3oool00`3o
+0000oooo0?ooo`0;0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooe40oooo00<0o`000?ooo`3o
+ool0303oool001h0oooo00<000000?ooo`3oool0o`3ooomA0?ooo`030?l0003oool0oooo00`0oooo
+000N0?ooo`030000003oool0oooo0?l0ooooD03oool00`3o0000oooo0?ooo`0=0?ooo`007P3oool0
+0`000000oooo0?ooo`3o0?ooodl0oooo00<0o`000?ooo`3oool03 at 3oool10?l000007P3oool00`00
+0000oooo0?ooo`3o0?ooodh0oooo00<0o`000?ooo`3oool03 at 3oool10?l00040oooo000N0?ooo`03
+0000003oool0oooo0?l0ooooC at 3oool00`3o0000oooo0?ooo`0>0?ooo`40o`000 at 3oool001h0oooo
+00<000000?ooo`3oool0o`3ooom=0?ooo`030?l0003oool0oooo00d0oooo0 at 3o00010?ooo`40oooo
+000N0?ooo`030000003oool0oooo0?l0ooooC03oool00`3o0000oooo0?ooo`0>0?ooo`40o`000 at 3o
+ool10?ooo`007P3oool00`000000oooo0?ooo`3o0?oood/0oooo00<0o`000?ooo`3oool03P3oool0
+0`3o0000oooo0?ooo`010?ooo`007P3oool00`000000oooo0?ooo`3o0?ooodX0oooo00<0o`000?oo
+o`3oool03`3oool00`3o0000oooo0?ooo`010?ooo`007P3oool00`000000oooo0?ooo`3o0?ooodT0
+oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?ooo`020?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooodT0oooo00<0o`000?ooo`3oool03P3oool00`3o0000oooo0?ooo`030?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooodP0oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?oo
+o`030?ooo`007P3oool00`000000oooo0?ooo`3o0?ooodL0oooo00<0o`000?ooo`3oool03`3oool0
+0`3o0000oooo0?ooo`040?ooo`007P3oool00`000000oooo0?ooo`3o0?ooodH0oooo00<0o`000?oo
+o`3oool0403oool00`3o0000oooo0?ooo`040?ooo`007P3oool00`000000oooo0?ooo`3o0?oood at 0
+oooo0P3o000B0?ooo`030?l0003oool0oooo00D0oooo000N0?ooo`030000003oool0oooo0?l0oooo
+@`3oool00`3o0000oooo0?ooo`0B0?ooo`030?l0003oool0oooo00D0oooo000N0?ooo`030000003o
+ool0oooo0?l0oooo at P3oool00`3o0000oooo0?ooo`0B0?ooo`030?l0003oool0oooo00H0oooo000N
+0?ooo`030000003oool0oooo0?l0oooo at 03oool20?l001 at 0oooo00<0o`000?ooo`3oool01`3oool0
+01h0oooo00<000000?ooo`3oool0o`3oooln0?ooo`80o`005P3oool00`3o0000oooo0?ooo`070?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooocd0oooo00<0o`000?ooo`3oool05 at 3oool00`3o0000
+oooo0?ooo`080?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc/0oooo0P3o000H0?ooo`030?l0
+003oool0oooo00P0oooo000N0?ooo`030000003oool0oooo0?l0oooo>P3oool00`3o0000oooo0?oo
+o`0G0?ooo`030?l0003oool0oooo00T0oooo000N0?ooo`030000003oool0oooo0?l0oooo>03oool2
+0?l001X0oooo00<0o`000?ooo`3oool02 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolg0?oo
+o`030?l0003oool0oooo01T0oooo00<0o`000?ooo`3oool02P3oool001h0oooo00<000000?ooo`3o
+ool0o`3ooole0?ooo`80o`006`3oool00`3o0000oooo0?ooo`0;0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?oooc<0oooo0P3o000M0?ooo`030?l0003oool0oooo00X0oooo0 at 3o000001h0oooo00<0
+00000?ooo`3oool0o`3ooola0?ooo`80o`007P3oool00`3o0000oooo0?ooo`0:0?ooo`40o`000 at 3o
+ool001h0oooo00<000000?ooo`3oool0o`3oool_0?ooo`80o`007`3oool00`3o0000oooo0?ooo`0;
+0?ooo`40o`000 at 3oool001h0oooo00<000000?ooo`3oool0o`3oool]0?ooo`80o`008 at 3oool00`3o
+0000oooo0?ooo`0:0?ooo`40o`000 at 3oool10?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobX0
+oooo0`3o000R0?ooo`030?l0003oool0oooo00/0oooo0 at 3o00010?ooo`40oooo000N0?ooo`030000
+003oool0oooo0?l0oooo9P3oool40?l002 at 0oooo00<0o`000?ooo`3oool02`3oool00`3o0000oooo
+0?ooo`010?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob<0oooo0`3o000X0?ooo`030?l0003o
+ool0oooo00/0oooo00<0o`000?ooo`3oool00 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolQ
+0?ooo`80o`00:P3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo0080oooo000N0?oo
+o`030000003oool0oooo0?l0oooo7`3oool20?l002/0oooo00<0o`000?ooo`3oool0303oool00`3o
+0000oooo0?ooo`020?ooo`007P3oool00`000000oooo0?ooo`3o0?oooaX0oooo1 at 3o000]0?ooo`03
+0?l0003oool0oooo00`0oooo00<0o`000?ooo`3oool00P3oool001h0oooo00<000000?ooo`3oool0
+o`3ooolD0?ooo`H0o`00<@3oool00`3o0000oooo0?ooo`0<0?ooo`030?l0003oool0oooo00<0oooo
+000N0?ooo`030000003oool0oooo0?l0oooo403oool40?l003H0oooo00<0o`000?ooo`3oool03 at 3o
+ool00`3o0000oooo0?ooo`030?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`/0oooo1 at 3o000i
+0?ooo`030?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool0103oool001h0oooo00<000000?oo
+o`3oool0o`3oool60?ooo`D0o`00?P3oool00`3o0000oooo0?ooo`0=0?ooo`030?l0003oool0oooo
+00 at 0oooo000N0?ooo`030000003oool0oooo0?d0oooo203o00120?ooo`030?l0003oool0oooo00d0
+oooo00<0o`000?ooo`3oool01 at 3oool001h0oooo00<000000?ooo`3oool0m at 3oool80?l004T0oooo
+00<0o`000?ooo`3oool03P3oool00`3o0000oooo0?ooo`050?ooo`007P3oool00`000000oooo0?oo
+o`3_0?ooo`H0o`00D03oool00`3o0000oooo0?ooo`0>0?ooo`030?l0003oool0oooo00H0oooo000N
+0?ooo`030000003oool0oooo0>D0oooo2P3o001D0?ooo`80o`004 at 3oool00`3o0000oooo0?ooo`06
+0?ooo`007P3oool00`000000oooo0?ooo`3E0?oooa00o`00G at 3oool00`3o0000oooo0?ooo`0 at 0?oo
+o`030?l0003oool0oooo00L0oooo000N0?ooo`030000003oool0oooo0<40oooo503o001/0?ooo`03
+0?l0003oool0oooo0140oooo00<0o`000?ooo`3oool01`3oool001h0oooo00<000000?ooo`3oool0
+X03ooolQ0?l007l0oooo00<0o`000?ooo`3oool04 at 3oool00`3o0000oooo0?ooo`080?ooo`007P3o
+ool00`000000oooo0?ooo`1e0?ooob/0o`00W`3oool00`3o0000oooo0?ooo`0B0?ooo`030?l0003o
+ool0oooo00P0oooo000N0?ooogP0o`00b at 3oool00`3o0000oooo0?ooo`0B0?ooo`030?l0003oool0
+oooo00T0oooo000N0?ooo`030000003oool0oooo0?l0oooo?P3oool00`3o0000oooo0?ooo`0C0?oo
+o`030?l0003oool0oooo00T0oooo000N0?ooo`030000003oool0oooo0?l0oooo?@3oool00`3o0000
+oooo0?ooo`0C0?ooo`030?l0003oool0oooo00T0oooo0 at 3o000001<0oooo00<000000?ooo`3oool0
+203oool00`000000oooo0?ooo`3o0?oooc/0oooo0P3o000F0?ooo`030?l0003oool0oooo00T0oooo
+0 at 3o000001<0oooo00<000000?ooo`3oool0203oool300000?l0oooo>P3oool00`3o0000oooo0?oo
+o`0E0?ooo`030?l0003oool0oooo00T0oooo0 at 3o00010?ooo`004`3oool00`000000oooo0?ooo`08
+0?ooo`030000003oool0oooo0?l0oooo>03oool20?l001P0oooo00<0o`000?ooo`3oool02 at 3oool1
+0?l00040oooo000C0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0o`3ooolg0?oo
+o`030?l0003oool0oooo01L0oooo00<0o`000?ooo`3oool02 at 3oool10?l00040oooo0 at 3oool00140
+oooo00<000000?ooo`0000002P3oool00`000000oooo0?ooo`3o0?ooocH0oooo00<0o`000?ooo`3o
+ool0603oool00`3o0000oooo0?ooo`090?ooo`40o`000 at 3oool10?ooo`004P3oool2000000X0oooo
+00<000000?ooo`3oool0o`3ooold0?ooo`80o`006P3oool00`3o0000oooo0?ooo`090?ooo`030?l0
+003oool0oooo0040oooo000C0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0o`3o
+oolc0?ooo`030?l0003oool0oooo01X0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?oo
+o`010?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc40oooo0P3o000L0?ooo`030?l0003oool0
+oooo00T0oooo00<0o`000?ooo`3oool00P3oool001h0oooo00<000000?ooo`3oool0o`3oool_0?oo
+o`80o`007 at 3oool00`3o0000oooo0?ooo`0:0?ooo`030?l0003oool0oooo0080oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo;@3oool20?l001l0oooo00<0o`000?ooo`3oool02P3oool00`3o0000
+oooo0?ooo`020?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobX0oooo0`3o000P0?ooo`030?l0
+003oool0oooo00X0oooo00<0o`000?ooo`3oool00`3oool001h0oooo00<000000?ooo`3oool0o`3o
+oolX0?ooo`80o`008P3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo00<0oooo000N
+0?ooo`030000003oool0oooo0?l0oooo9P3oool20?l002 at 0oooo00<0o`000?ooo`3oool02P3oool0
+0`3o0000oooo0?ooo`040?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob<0oooo0`3o000U0?oo
+o`030?l0003oool0oooo00/0oooo00<0o`000?ooo`3oool0103oool001h0oooo00<000000?ooo`3o
+ool0o`3ooolQ0?ooo`80o`009`3oool00`3o0000oooo0?ooo`0<0?ooo`030?l0003oool0oooo00 at 0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo7`3oool20?l002T0oooo00<0o`000?ooo`3oool0
+2`3oool00`3o0000oooo0?ooo`050?ooo`007P3oool00`000000oooo0?ooo`3o0?oooa`0oooo0`3o
+000Z0?ooo`030?l0003oool0oooo00`0oooo00<0o`000?ooo`3oool01 at 3oool001h0oooo00<00000
+0?ooo`3oool0o`3ooolH0?ooo`@0o`00;03oool00`3o0000oooo0?ooo`0<0?ooo`030?l0003oool0
+oooo00H0oooo000N0?ooo`800000o`3ooolE0?ooo`@0o`00<03oool00`3o0000oooo0?ooo`0<0?oo
+o`030?l0003oool0oooo00H0oooo000N0?ooo`030000003oool0oooo0?l0oooo403oool40?l003<0
+oooo00<0o`000?ooo`3oool03 at 3oool00`3o0000oooo0?ooo`060?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooo``0oooo103o000f0?ooo`030?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool0
+1`3oool001h0oooo00<000000?ooo`3oool0o`3oool90?ooo`<0o`00>@3oool00`3o0000oooo0?oo
+o`0>0?ooo`030?l0003oool0oooo00L0oooo000N0?ooo`030000003oool0oooo0?l0oooo1 at 3oool4
+0?l003/0oooo00<0o`000?ooo`3oool03P3oool00`3o0000oooo0?ooo`080?ooo`007P3oool00`00
+0000oooo0?ooo`3m0?ooo`L0o`00?`3oool00`3o0000oooo0?ooo`0>0?ooo`030?l0003oool0oooo
+00L0oooo0 at 3o000001h0oooo00<000000?ooo`3oool0m at 3oool80?l004D0oooo00<0o`000?ooo`3o
+ool03P3oool00`3o0000oooo0?ooo`080?ooo`40o`00000N0?ooo`030000003oool0oooo0>l0oooo
+1P3o001<0?ooo`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01`3oool10?l00040oooo
+000N0?ooo`030000003oool0oooo0>D0oooo2P3o001A0?ooo`030?l0003oool0oooo00l0oooo00<0
+o`000?ooo`3oool0203oool10?l00040oooo000N0?ooo`030000003oool0oooo0=T0oooo303o001J
+0?ooo`030?l0003oool0oooo0100oooo00<0o`000?ooo`3oool01`3oool10?l00040oooo0 at 3oool0
+01h0oooo00<000000?ooo`3oool0d03oool90?l006D0oooo00<0o`000?ooo`3oool04 at 3oool00`3o
+0000oooo0?ooo`070?ooo`40o`000 at 3oool10?ooo`007P3oool00`000000oooo0?ooo`310?ooo`l0
+o`00KP3oool00`3o0000oooo0?ooo`0 at 0?ooo`030?l0003oool0oooo00P0oooo0 at 3o00010?ooo`40
+oooo000N0?ooo`030000003oool0oooo0:00oooo8 at 3o001l0?ooo`030?l0003oool0oooo0140oooo
+00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`010?ooo`007P3oool00`000000oooo0?oo
+o`1e0?ooob/0o`00W03oool00`3o0000oooo0?ooo`0A0?ooo`030?l0003oool0oooo00P0oooo00<0
+o`000?ooo`3oool00 at 3oool001h0oooo00<000000?ooo`3oool0<P3ooom30?l00<D0oooo0P3o000D
+0?ooo`030?l0003oool0oooo00L0oooo00<0o`000?ooo`3oool00P3oool001h0oooo=@3o003o0?oo
+o`P0oooo00<0o`000?ooo`3oool04`3oool00`3o0000oooo0?ooo`080?ooo`030?l0003oool0oooo
+0080oooo000N0?ooo`030000003oool0oooo0?l0oooo>03oool20?l001H0oooo00<0o`000?ooo`3o
+ool0203oool00`3o0000oooo0?ooo`020?ooo`007P3oool00`000000oooo0?ooo`3o0?ooocL0oooo
+00<0o`000?ooo`3oool05 at 3oool00`3o0000oooo0?ooo`080?ooo`030?l0003oool0oooo00<0oooo
+000N0?ooo`030000003oool0oooo0?l0oooo=P3oool00`3o0000oooo0?ooo`0F0?ooo`030?l0003o
+ool0oooo00P0oooo00<0o`000?ooo`3oool00`3oool001h0oooo00<000000?ooo`3oool0o`3ooole
+0?ooo`030?l0003oool0oooo01H0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`03
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc at 0oooo00<0o`000?ooo`3oool05`3oool00`3o
+0000oooo0?ooo`080?ooo`030?l0003oool0oooo00 at 0oooo000N0?ooo`030000003oool0oooo0?l0
+oooo<`3oool00`3o0000oooo0?ooo`0G0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3o
+ool0103oool001h0oooo00<000000?ooo`3oool0o`3ooolb0?ooo`030?l0003oool0oooo01P0oooo
+00<0o`000?ooo`3oool0203oool00`3o0000oooo0?ooo`050?ooo`007P3oool00`000000oooo0?oo
+o`3o0?oooc00oooo0P3o000J0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool01 at 3o
+ool001h0oooo00<000000?ooo`3oool0o`3oool^0?ooo`80o`00703oool00`3o0000oooo0?ooo`09
+0?ooo`030?l0003oool0oooo00D0oooo000N0?ooo`030000003oool0oooo0?l0oooo;03oool20?l0
+01d0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`060?ooo`007P3oool00`000000
+oooo0?ooo`3o0?ooob/0oooo00<0o`000?ooo`3oool07 at 3oool00`3o0000oooo0?ooo`090?ooo`03
+0?l0003oool0oooo00H0oooo000N0?ooo`030000003oool0oooo0?l0oooo:@3oool20?l001l0oooo
+00<0o`000?ooo`3oool02P3oool00`3o0000oooo0?ooo`060?ooo`007P3oool00`000000oooo0?oo
+o`3o0?ooobL0oooo0P3o000Q0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool01P3o
+ool10?l000007P3oool200000?l0oooo9P3oool20?l00280oooo00<0o`000?ooo`3oool02P3oool0
+0`3o0000oooo0?ooo`060?ooo`40o`00000N0?ooo`030000003oool0oooo0?l0oooo8`3oool20?l0
+02 at 0oooo00<0o`000?ooo`3oool02P3oool00`3o0000oooo0?ooo`050?ooo`40o`000 at 3oool001h0
+oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`80o`009 at 3oool00`3o0000oooo0?ooo`0:0?ooo`03
+0?l0003oool0oooo00H0oooo0 at 3o00010?ooo`007P3oool00`000000oooo0?ooo`3o0?oooal0oooo
+0P3o000W0?ooo`030?l0003oool0oooo00X0oooo00<0o`000?ooo`3oool01P3oool10?l00040oooo
+000N0?ooo`030000003oool0oooo0?l0oooo703oool30?l002P0oooo00<0o`000?ooo`3oool02P3o
+ool00`3o0000oooo0?ooo`060?ooo`40o`000 at 3oool10?ooo`007P3oool00`000000oooo0?ooo`3o
+0?oooaX0oooo0P3o000Z0?ooo`030?l0003oool0oooo00/0oooo00<0o`000?ooo`3oool01P3oool1
+0?l00040oooo0 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolG0?ooo`<0o`00;03oool00`3o
+0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo00H0oooo0 at 3o00010?ooo`40oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo503oool30?l002h0oooo00<0o`000?ooo`3oool02`3oool00`3o0000
+oooo0?ooo`060?ooo`030?l0003oool0oooo0040oooo000N0?ooo`030000003oool0oooo0?l0oooo
+4P3oool20?l00300oooo00<0o`000?ooo`3oool0303oool00`3o0000oooo0?ooo`060?ooo`030?l0
+003oool0oooo0040oooo000N0?ooo`030000003oool0oooo0?l0oooo3`3oool30?l00340oooo00<0
+o`000?ooo`3oool03 at 3oool00`3o0000oooo0?ooo`060?ooo`030?l0003oool0oooo0040oooo000N
+0?ooo`030000003oool0oooo0?l0oooo2`3oool40?l003 at 0oooo00<0o`000?ooo`3oool0303oool0
+0`3o0000oooo0?ooo`060?ooo`030?l0003oool0oooo0080oooo000N0?ooo`030000003oool0oooo
+0?l0oooo1P3oool50?l003L0oooo00<0o`000?ooo`3oool03 at 3oool00`3o0000oooo0?ooo`060?oo
+o`030?l0003oool0oooo0080oooo000N0?ooo`800000o`3oool20?ooo`D0o`00>`3oool00`3o0000
+oooo0?ooo`0=0?ooo`030?l0003oool0oooo00L0oooo00<0o`000?ooo`3oool00P3oool001h0oooo
+00<000000?ooo`3oool0nP3oool60?l003l0oooo00<0o`000?ooo`3oool03P3oool00`3o0000oooo
+0?ooo`060?ooo`030?l0003oool0oooo00<0oooo000N0?ooo`030000003oool0oooo0?H0oooo103o
+00140?ooo`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?oo
+o`030?ooo`007P3oool00`000000oooo0?ooo`3b0?ooo`@0o`00B03oool00`3o0000oooo0?ooo`0>
+0?ooo`030?l0003oool0oooo00L0oooo00<0o`000?ooo`3oool00`3oool001h0oooo00<000000?oo
+o`3oool0kP3oool40?l004/0oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?ooo`060?oo
+o`030?l0003oool0oooo00 at 0oooo000N0?ooo`030000003oool0oooo0>D0oooo2 at 3o001>0?ooo`03
+0?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`040?ooo`00
+7P3oool00`000000oooo0?ooo`3I0?ooo``0o`00EP3oool00`3o0000oooo0?ooo`0 at 0?ooo`030?l0
+003oool0oooo00L0oooo00<0o`000?ooo`3oool0103oool001h0oooo00<000000?ooo`3oool0d03o
+ool90?l00640oooo00<0o`000?ooo`3oool04 at 3oool00`3o0000oooo0?ooo`070?ooo`030?l0003o
+ool0oooo00 at 0oooo000N0?ooo`030000003oool0oooo0<40oooo3`3o001Y0?ooo`030?l0003oool0
+oooo0140oooo00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`040?ooo`40o`00000N0?oo
+o`030000003oool0oooo0:l0oooo4P3o001g0?ooo`030?l0003oool0oooo0180oooo00<0o`000?oo
+o`3oool01`3oool00`3o0000oooo0?ooo`040?ooo`40o`00000N0?ooo`030000003oool0oooo0:00
+oooo3`3o00280?ooo`030?l0003oool0oooo0180oooo00<0o`000?ooo`3oool0203oool00`3o0000
+oooo0?ooo`030?ooo`40o`000 at 3oool000D0oooo00D000000?ooo`3oool0oooo000000020?ooo`<0
+00003`3oool00`000000oooo0?ooo`1e0?ooob/0o`00UP3oool00`3o0000oooo0?ooo`0C0?ooo`03
+0?l0003oool0oooo00L0oooo00<0o`000?ooo`3oool0103oool10?l00040oooo00050?ooo`030000
+003oool0oooo00<0oooo00D000000?ooo`3oool0oooo0000000>0?ooo`<00000BP3oool[0?l00<00
+oooo00<0o`000?ooo`3oool0503oool00`3o0000oooo0?ooo`070?ooo`030?l0003oool0oooo00 at 0
+oooo0 at 3o00010?ooo`001 at 3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo00`0oooo
+C at 3o003Z0?ooo`030?l0003oool0oooo01 at 0oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo
+0?ooo`040?ooo`40o`000 at 3oool000D0oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?oo
+o`3oool0000000h0oooo00<000000?ooo`3oool0o`3ooold0?ooo`030?l0003oool0oooo01D0oooo
+00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`040?ooo`40o`000 at 3oool10?ooo`000`3o
+ool00`000000oooo000000050?ooo`@000003`3oool00`000000oooo0?ooo`3o0?oooc<0oooo00<0
+o`000?ooo`3oool05 at 3oool00`3o0000oooo0?ooo`080?ooo`030?l0003oool0oooo00 at 0oooo0@3o
+00010?ooo`40oooo00040?ooo`8000001P3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0
+oooo0?l0oooo<P3oool00`3o0000oooo0?ooo`0F0?ooo`030?l0003oool0oooo00P0oooo00<0o`00
+0?ooo`3oool0103oool10?l00040oooo0 at 3oool000D0oooo00<000000?ooo`3oool0103oool40000
+00h0oooo00<000000?ooo`3oool0o`3ooola0?ooo`030?l0003oool0oooo01H0oooo00<0o`000?oo
+o`3oool0203oool00`3o0000oooo0?ooo`040?ooo`030?l0003oool0oooo0040oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo<03oool00`3o0000oooo0?ooo`0G0?ooo`030?l0003oool0oooo00P0
+oooo00<0o`000?ooo`3oool0103oool00`3o0000oooo0?ooo`010?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooobh0oooo0P3o000I0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool0
+103oool00`3o0000oooo0?ooo`010?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobd0oooo00<0
+o`000?ooo`3oool06 at 3oool00`3o0000oooo0?ooo`090?ooo`030?l0003oool0oooo00 at 0oooo00<0
+o`000?ooo`3oool00 at 3oool001h0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030?l0003oool0
+oooo01T0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`040?ooo`030?l0003oool0
+oooo0080oooo000N0?ooo`030000003oool0oooo0?l0oooo:`3oool00`3o0000oooo0?ooo`0J0?oo
+o`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool0103oool00`3o0000oooo0?ooo`020?oo
+o`007P3oool200000?l0oooo:P3oool20?l001`0oooo00<0o`000?ooo`3oool02P3oool00`3o0000
+oooo0?ooo`040?ooo`030?l0003oool0oooo0080oooo000N0?ooo`030000003oool0oooo0?l0oooo
+9`3oool20?l001h0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`040?ooo`030?l0
+003oool0oooo00<0oooo000N0?ooo`030000003oool0oooo0?l0oooo9 at 3oool20?l001l0oooo00<0
+o`000?ooo`3oool02P3oool00`3o0000oooo0?ooo`040?ooo`030?l0003oool0oooo00<0oooo000N
+0?ooo`030000003oool0oooo0?l0oooo903oool00`3o0000oooo0?ooo`0O0?ooo`030?l0003oool0
+oooo00X0oooo00<0o`000?ooo`3oool0103oool00`3o0000oooo0?ooo`020?ooo`40o`00000N0?oo
+o`030000003oool0oooo0?l0oooo8P3oool20?l00240oooo00<0o`000?ooo`3oool02P3oool00`3o
+0000oooo0?ooo`050?ooo`050?l0003oool0oooo0?ooo`3o00000 at 3oool001h0oooo00<000000?oo
+o`3oool0o`3ooolP0?ooo`80o`008`3oool00`3o0000oooo0?ooo`0:0?ooo`030?l0003oool0oooo
+00 at 0oooo00<0o`000?ooo`3oool00P3oool10?l00040oooo000N0?ooo`030000003oool0oooo0?l0
+oooo7P3oool20?l002 at 0oooo00<0o`000?ooo`3oool02`3oool00`3o0000oooo0?ooo`040?ooo`03
+0?l0003oool0oooo0080oooo0 at 3o00010?ooo`007P3oool00`000000oooo0?ooo`3o0?oooad0oooo
+00<0o`000?ooo`3oool0903oool00`3o0000oooo0?ooo`0:0?ooo`030?l0003oool0oooo00D0oooo
+00D0o`000?ooo`3oool0oooo0?l000020?ooo`007P3oool00`000000oooo0?ooo`3o0?oooa/0oooo
+0P3o000V0?ooo`030?l0003oool0oooo00/0oooo00<0o`000?ooo`3oool01 at 3oool01@3o0000oooo
+0?ooo`3oool0o`000080oooo000N0?ooo`030000003oool0oooo0?l0oooo6 at 3oool20?l002P0oooo
+00<0o`000?ooo`3oool02P3oool00`3o0000oooo0?ooo`050?ooo`030?l0003oool0oooo0080oooo
+0 at 3o00010?ooo`40oooo000N0?ooo`030000003oool0oooo0?l0oooo5`3oool20?l002T0oooo00<0
+o`000?ooo`3oool02`3oool00`3o0000oooo0?ooo`050?ooo`030?l0003oool0oooo0080oooo0 at 3o
+00010?ooo`40oooo000N0?ooo`800000o`3ooolF0?ooo`80o`00:P3oool00`3o0000oooo0?ooo`0<
+0?ooo`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool00P3oool10?l00040oooo0 at 3oool0
+01h0oooo00<000000?ooo`3oool0o`3ooolC0?ooo`80o`00;03oool00`3o0000oooo0?ooo`0;0?oo
+o`030?l0003oool0oooo00H0oooo00D0o`000?ooo`3oool0oooo0?l000030?ooo`007P3oool00`00
+0000oooo0?ooo`3o0?oooa40oooo0P3o000]0?ooo`030?l0003oool0oooo00`0oooo00<0o`000?oo
+o`3oool01 at 3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo0040oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo3`3oool20?l002h0oooo00<0o`000?ooo`3oool03 at 3oool00`3o0000
+oooo0?ooo`050?ooo`030?l0003oool0oooo0080oooo00<0o`000?ooo`3oool00 at 3oool001h0oooo
+00<000000?ooo`3oool0o`3oool<0?ooo`<0o`00<03oool00`3o0000oooo0?ooo`0<0?ooo`030?l0
+003oool0oooo00H0oooo00<0o`000?ooo`3oool00P3oool00`3o0000oooo0?ooo`010?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooo`T0oooo0`3o000b0?ooo`030?l0003oool0oooo00d0oooo00<0
+o`000?ooo`3oool01 at 3oool00`3o0000oooo0?ooo`030?ooo`030?l0003oool0oooo0040oooo000N
+0?ooo`030000003oool0oooo0?l0oooo1 at 3oool40?l003D0oooo00<0o`000?ooo`3oool03 at 3oool0
+0`3o0000oooo0?ooo`050?ooo`030?l0003oool0oooo00<0oooo00<0o`000?ooo`3oool00 at 3oool0
+01h0oooo00<000000?ooo`3oool0o`3oool20?ooo`<0o`00>03oool00`3o0000oooo0?ooo`0=0?oo
+o`030?l0003oool0oooo00H0oooo00<0o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3oool1
+0?l000007P3oool00`000000oooo0?ooo`3m0?ooo`@0o`00>P3oool00`3o0000oooo0?ooo`0>0?oo
+o`030?l0003oool0oooo00H0oooo00<0o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3oool1
+0?l000007P3oool00`000000oooo0?ooo`3i0?ooo`@0o`00?@3oool00`3o0000oooo0?ooo`0?0?oo
+o`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool00`3oool0103o0000oooo0?ooo`3oool1
+0?l000007P3oool200000?H0oooo103o00100?ooo`030?l0003oool0oooo00l0oooo00<0o`000?oo
+o`3oool01P3oool00`3o0000oooo0?ooo`030?ooo`040?l0003oool0oooo0?l00040oooo000N0?oo
+o`030000003oool0oooo0>l0oooo1P3o00140?ooo`030?l0003oool0oooo00l0oooo00<0o`000?oo
+o`3oool01P3oool00`3o0000oooo0?ooo`030?ooo`040?l0003oool0oooo0?l00040oooo000N0?oo
+o`030000003oool0oooo0>P0oooo1`3o00190?ooo`030?l0003oool0oooo0100oooo00<0o`000?oo
+o`3oool01P3oool00`3o0000oooo0?ooo`020?ooo`050?l0003oool0oooo0?ooo`3o00000 at 3oool0
+01h0oooo00<000000?ooo`3oool0h at 3oool70?l004l0oooo00<0o`000?ooo`3oool0403oool00`3o
+0000oooo0?ooo`060?ooo`030?l0003oool0oooo00<0oooo00D0o`000?ooo`3oool0oooo0?l00001
+0?ooo`007P3oool00`000000oooo0?ooo`3I0?ooo`P0o`00E at 3oool00`3o0000oooo0?ooo`0A0?oo
+o`030?l0003oool0oooo00H0oooo00<0o`000?ooo`3oool00`3oool0103o0000oooo0?ooo`3o0002
+0?ooo`007P3oool00`000000oooo0?ooo`3 at 0?ooo`T0o`00G03oool00`3o0000oooo0?ooo`0B0?oo
+o`030?l0003oool0oooo00H0oooo00<0o`000?ooo`3oool00`3oool0103o0000oooo0?ooo`3o0002
+0?ooo`007P3oool00`000000oooo0?ooo`360?ooo`X0o`00I at 3oool00`3o0000oooo0?ooo`0A0?oo
+o`030?l0003oool0oooo00L0oooo00<0o`000?ooo`3oool00P3oool01P3o0000oooo0?ooo`3oool0
+o`000?ooo`40o`00000N0?ooo`030000003oool0oooo0;/0oooo2`3o001^0?ooo`030?l0003oool0
+oooo0180oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`030?ooo`060?l0003oool0
+oooo0?ooo`3o0000oooo0 at 3o000001h0oooo00<000000?ooo`3oool0[`3oool<0?l007P0oooo00<0
+o`000?ooo`3oool04P3oool00`3o0000oooo0?ooo`070?ooo`030?l0003oool0oooo00<0oooo00H0
+o`000?ooo`3oool0oooo0?l0003oool10?l000007P3oool200000:40oooo3`3o00230?ooo`030?l0
+003oool0oooo01<0oooo00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`030?ooo`060?l0
+003oool0oooo0?l0003oool0o`000 at 3oool001h0oooo00<000000?ooo`3oool0SP3ooolB0?l00980
+oooo00<0o`000?ooo`3oool04`3oool00`3o0000oooo0?ooo`060?ooo`030?l0003oool0oooo00<0
+oooo00L0o`000?ooo`3oool0oooo0?l0003oool0o`000040oooo000N0?ooo`030000003oool0oooo
+07D0oooo6 at 3o002S0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?ooo`3oool01`3oool00`3o
+0000oooo0?ooo`030?ooo`070?l0003oool0oooo0?ooo`3o0000oooo0?l000010?ooo`007P3oool0
+0`000000oooo0?ooo`0b0?oood<0o`00^`3oool00`3o0000oooo0?ooo`0D0?ooo`030?l0003oool0
+oooo00L0oooo00<0o`000?ooo`3oool00`3oool01`3o0000oooo0?ooo`3oool0o`000?ooo`3o0000
+0 at 3oool001h0oooo=@3o003m0?ooo`030?l0003oool0oooo01 at 0oooo00<0o`000?ooo`3oool01`3o
+ool00`3o0000oooo0?ooo`040?ooo`040?l0003oool0oooo0?l00080oooo0 at 3o00010?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooobh0oooo0P3o000G0?ooo`030?l0003oool0oooo00L0oooo00<0
+o`000?ooo`3oool00`3oool01`3o0000oooo0?ooo`3oool0o`000?ooo`3o00000P3oool001h0oooo
+00<000000?ooo`3oool0o`3oool]0?ooo`030?l0003oool0oooo01H0oooo00<0o`000?ooo`3oool0
+203oool00`3o0000oooo0?ooo`030?ooo`070?l0003oool0oooo0?ooo`3o0000oooo0?l000020?oo
+o`00403oool5000000T0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030?l0003oool0oooo01L0
+oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo0?ooo`030?ooo`070?l0003oool0oooo0?oo
+o`3o0000oooo0?l000020?ooo`004 at 3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0oooo
+0?l0oooo:`3oool00`3o0000oooo0?ooo`0G0?ooo`030?l0003oool0oooo00P0oooo00<0o`000?oo
+o`3oool0103oool01`3o0000oooo0?ooo`3oool0o`000?ooo`3o00000P3oool00180oooo00<00000
+0?ooo`3oool02 at 3oool300000?l0oooo:P3oool00`3o0000oooo0?ooo`0H0?ooo`030?l0003oool0
+oooo00P0oooo00<0o`000?ooo`3oool0103oool01P3o0000oooo0?ooo`3o0000oooo0?l000<0oooo
+000C0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0o`3ooolY0?ooo`030?l0003o
+ool0oooo01P0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`030?ooo`070?l0003o
+ool0oooo0?ooo`3o0000oooo0?l000030?ooo`00503oool00`000000oooo0?ooo`070?ooo`030000
+003oool0oooo0?l0oooo9`3oool20?l001/0oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo
+0?ooo`040?ooo`070?l0003oool0oooo0?ooo`3o0000oooo0?l000030?ooo`00403oool01 at 000000
+oooo0?ooo`3oool0000000T0oooo00<000000?ooo`3oool0o`3ooolV0?ooo`030?l0003oool0oooo
+01X0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`040?ooo`070?l0003oool0oooo
+0?ooo`3o0000oooo0?l000030?ooo`004 at 3oool3000000X0oooo00<000000?ooo`3oool0o`3ooolU
+0?ooo`030?l0003oool0oooo01/0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`04
+0?ooo`070?l0003oool0oooo0?ooo`3o0000oooo0?l000030?ooo`007P3oool00`000000oooo0?oo
+o`3o0?ooob at 0oooo00<0o`000?ooo`3oool06`3oool00`3o0000oooo0?ooo`090?ooo`030?l0003o
+ool0oooo00 at 0oooo00L0o`000?ooo`3oool0oooo0?l0003oool0o`0000 at 0oooo000N0?ooo`030000
+003oool0oooo0?l0oooo8`3oool00`3o0000oooo0?ooo`0L0?ooo`030?l0003oool0oooo00T0oooo
+00<0o`000?ooo`3oool0103oool01`3o0000oooo0?ooo`3oool0o`000?ooo`3o0000103oool001h0
+oooo00<000000?ooo`3oool0o`3ooolR0?ooo`030?l0003oool0oooo01`0oooo00<0o`000?ooo`3o
+ool02P3oool00`3o0000oooo0?ooo`040?ooo`070?l0003oool0oooo0?ooo`3o0000oooo0?l00004
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooob00oooo0P3o000O0?ooo`030?l0003oool0oooo
+00X0oooo00<0o`000?ooo`3oool0103oool01`3o0000oooo0?ooo`3oool0o`000?ooo`3o0000103o
+ool001h0oooo00<000000?ooo`3oool0o`3ooolO0?ooo`030?l0003oool0oooo01h0oooo00<0o`00
+0?ooo`3oool02P3oool00`3o0000oooo0?ooo`040?ooo`050?l0003oool0oooo0?ooo`3o00000P3o
+ool00`3o0000oooo0?ooo`020?ooo`007P3oool00`000000oooo0?ooo`3o0?oooah0oooo00<0o`00
+0?ooo`3oool07`3oool00`3o0000oooo0?ooo`0:0?ooo`030?l0003oool0oooo00 at 0oooo00L0o`00
+0?ooo`3oool0oooo0?l0003oool0o`0000D0oooo000N0?ooo`030000003oool0oooo0?l0oooo7 at 3o
+ool00`3o0000oooo0?ooo`0O0?ooo`030?l0003oool0oooo00/0oooo00<0o`000?ooo`3oool0103o
+ool01`3o0000oooo0?ooo`3oool0o`000?ooo`3o00001 at 3oool001h0oooo00<000000?ooo`3oool0
+o`3ooolK0?ooo`80o`008P3oool00`3o0000oooo0?ooo`0:0?ooo`030?l0003oool0oooo00D0oooo
+00L0o`000?ooo`3oool0oooo0?l0003oool0o`0000D0oooo000N0?ooo`030000003oool0oooo0?l0
+oooo6 at 3oool20?l002<0oooo00<0o`000?ooo`3oool02`3oool00`3o0000oooo0?ooo`040?ooo`03
+0?l0003oool0oooo0080oooo00<0o`000?ooo`3o00001 at 3oool001h0oooo00<000000?ooo`3oool0
+o`3ooolG0?ooo`80o`009 at 3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo00 at 0oooo
+00D0o`000?ooo`3oool0oooo0?l000020?ooo`030?l0003oool0oooo00<0oooo000N0?ooo`030000
+003oool0oooo0?l0oooo5 at 3oool20?l002H0oooo00<0o`000?ooo`3oool0303oool00`3o0000oooo
+0?ooo`040?ooo`070?l0003oool0oooo0?ooo`3o0000oooo0?l000060?ooo`007P3oool00`000000
+oooo0?ooo`3o0?oooa<0oooo0P3o000X0?ooo`030?l0003oool0oooo00/0oooo00<0o`000?ooo`3o
+ool01 at 3oool01`3o0000oooo0?ooo`3oool0o`000?ooo`3o00001P3oool001h0oooo00<000000?oo
+o`3oool0o`3ooolB0?ooo`030?l0003oool0oooo02L0oooo00<0o`000?ooo`3oool0303oool00`3o
+0000oooo0?ooo`040?ooo`030?l0003oool0oooo0080oooo00<0o`000?ooo`3o00001P3oool001h0
+oooo00<000000?ooo`3oool0o`3oool at 0?ooo`80o`00:P3oool00`3o0000oooo0?ooo`0<0?ooo`03
+0?l0003oool0oooo00 at 0oooo00<0o`000?ooo`3oool00P3oool00`3o0000oooo0?l000060?ooo`00
+7P3oool00`000000oooo0?ooo`3o0?ooo`h0oooo0P3o000[0?ooo`030?l0003oool0oooo00`0oooo
+00<0o`000?ooo`3oool01 at 3oool01@3o0000oooo0?ooo`3oool0o`000080oooo00<0o`000?ooo`3o
+ool0103oool001h0oooo00<000000?ooo`3oool0o`3oool<0?ooo`80o`00;03oool00`3o0000oooo
+0?ooo`0=0?ooo`030?l0003oool0oooo00D0oooo00D0o`000?ooo`3oool0oooo0?l000020?ooo`03
+0?l0003oool0oooo00 at 0oooo000N0?ooo`030000003oool0oooo0?l0oooo2P3oool20?l002h0oooo
+00<0o`000?ooo`3oool03 at 3oool00`3o0000oooo0?ooo`040?ooo`030?l0003oool0oooo0080oooo
+00<0o`000?ooo`3o00001`3oool001h0oooo00<000000?ooo`3oool0o`3oool70?ooo`<0o`00;`3o
+ool00`3o0000oooo0?ooo`0=0?ooo`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool00P3o
+ool00`3o0000oooo0?l000070?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`D0oooo0P3o000a
+0?ooo`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3oool01 at 3oool01@3o0000oooo0?ooo`3o
+ool0o`000080oooo00<0o`000?ooo`3oool01 at 3oool001h0oooo00<000000?ooo`3oool0o`3oool2
+0?ooo`<0o`00<`3oool00`3o0000oooo0?ooo`0>0?ooo`030?l0003oool0oooo00D0oooo00D0o`00
+0?ooo`3oool0oooo0?l000020?ooo`030?l0003oool0oooo00D0oooo000N0?ooo`030000003oool0
+oooo0?d0oooo103o000e0?ooo`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3oool01 at 3oool0
+0`3o0000oooo0?ooo`020?ooo`040?l0003oool0oooo0?l000L0oooo000N0?ooo`030000003oool0
+oooo0?T0oooo103o000h0?ooo`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01 at 3oool0
+0`3o0000oooo0?ooo`020?ooo`030?l0003oool0o`0000P0oooo000N0?ooo`030000003oool0oooo
+0?H0oooo0`3o000l0?ooo`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01 at 3oool00`3o
+0000oooo0?ooo`020?ooo`030?l0003oool0o`0000P0oooo000N0?ooo`030000003oool0oooo0?<0
+oooo0`3o000n0?ooo`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01P3oool01 at 3o0000
+oooo0?ooo`3oool0o`000080oooo00<0o`000?ooo`3oool01P3oool001h0oooo00<000000?ooo`3o
+ool0l03oool30?l00440oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?ooo`050?ooo`03
+0?l0003oool0oooo0080oooo00 at 0o`000?ooo`3oool0o`00203oool001h0oooo00<000000?ooo`3o
+ool0k at 3oool30?l004<0oooo00<0o`000?ooo`3oool0403oool00`3o0000oooo0?ooo`050?ooo`03
+0?l0003oool0oooo0080oooo00 at 0o`000?ooo`3oool0o`00203oool001h0oooo00<000000?ooo`3o
+ool0j at 3oool40?l004H0oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?ooo`060?ooo`03
+0?l0003oool0oooo0080oooo00<0o`000?ooo`3o00002 at 3oool001h0oooo00<000000?ooo`3oool0
+i at 3oool40?l004T0oooo00<0o`000?ooo`3oool0403oool00`3o0000oooo0?ooo`060?ooo`050?l0
+003oool0oooo0?ooo`3o00000P3oool00`3o0000oooo0?ooo`070?ooo`007P3oool00`000000oooo
+0?ooo`3P0?ooo`D0o`00C at 3oool00`3o0000oooo0?ooo`0?0?ooo`030?l0003oool0oooo00H0oooo
+00<0o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o00090?ooo`007P3oool00`000000oooo
+0?ooo`3K0?ooo`D0o`00D at 3oool00`3o0000oooo0?ooo`0 at 0?ooo`030?l0003oool0oooo00H0oooo
+00<0o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o00090?ooo`007P3oool00`000000oooo
+0?ooo`3E0?ooo`H0o`00E at 3oool00`3o0000oooo0?ooo`0A0?ooo`030?l0003oool0oooo00H0oooo
+00<0o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o00090?ooo`007P3oool00`000000oooo
+0?ooo`3?0?ooo`H0o`00FP3oool00`3o0000oooo0?ooo`0A0?ooo`030?l0003oool0oooo00L0oooo
+00<0o`000?ooo`3oool00P3oool00`3o0000oooo0?l0000:0?ooo`007P3oool00`000000oooo0?oo
+o`360?ooo`T0o`00G`3oool00`3o0000oooo0?ooo`0B0?ooo`030?l0003oool0oooo00H0oooo00<0
+o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000:0?ooo`007P3oool00`000000oooo0?oo
+o`2k0?ooo`/0o`00I`3oool00`3o0000oooo0?ooo`0C0?ooo`030?l0003oool0oooo00H0oooo00<0
+o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000:0?ooo`007P3oool00`000000oooo0?oo
+o`2_0?ooo``0o`00LP3oool00`3o0000oooo0?ooo`0B0?ooo`030?l0003oool0oooo00L0oooo00<0
+o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000:0?ooo`007P3oool00`000000oooo0?oo
+o`2P0?ooo`l0o`00O at 3oool00`3o0000oooo0?ooo`0C0?ooo`030?l0003oool0oooo00L0oooo00<0
+o`000?ooo`3oool00P3oool00`3o0000oooo0?l0000;0?ooo`007P3oool00`000000oooo0?ooo`2>
+0?oooa80o`00R`3oool00`3o0000oooo0?ooo`0C0?ooo`030?l0003oool0oooo00L0oooo00<0o`00
+0?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000;0?ooo`007P3oool00`000000oooo0?ooo`1l
+0?oooa80o`00W03oool00`3o0000oooo0?ooo`0D0?ooo`030?l0003oool0oooo00L0oooo00<0o`00
+0?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000;0?ooo`007P3oool00`000000oooo0?ooo`1^
+0?ooo`h0o`00[@3oool00`3o0000oooo0?ooo`0E0?ooo`030?l0003oool0oooo00L0oooo00<0o`00
+0?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000;0?ooo`007P3oool00`000000oooo0?ooo`0b
+0?oooc`0o`00^P3oool00`3o0000oooo0?ooo`0E0?ooo`030?l0003oool0oooo00P0oooo00<0o`00
+0?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000;0?ooo`007P3ooole0?l00?D0oooo00<0o`00
+0?ooo`3oool05P3oool00`3o0000oooo0?ooo`070?ooo`030?l0003oool0oooo00<0oooo00<0o`00
+0?ooo`3o0000303oool001h0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`030?l0003oool0oooo
+01H0oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo0?ooo`020?ooo`040?l0003oool0oooo
+0?l000`0oooo000N0?ooo`030000003oool0oooo0?l0oooo9P3oool00`3o0000oooo0?ooo`0G0?oo
+o`030?l0003oool0oooo00P0oooo00<0o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000<
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobD0oooo00<0o`000?ooo`3oool05`3oool00`3o
+0000oooo0?ooo`090?ooo`030?l0003oool0oooo0080oooo00 at 0o`000?ooo`3oool0o`00303oool0
+01h0oooo00<000000?ooo`3oool0o`3ooolT0?ooo`030?l0003oool0oooo01P0oooo00<0o`000?oo
+o`3oool0203oool00`3o0000oooo0?ooo`030?ooo`040?l0003oool0oooo0?l000`0oooo000N0?oo
+o`030000003oool0oooo0?l0oooo8`3oool00`3o0000oooo0?ooo`0I0?ooo`030?l0003oool0oooo
+00P0oooo00<0o`000?ooo`3oool00P3oool0103o0000oooo0?ooo`3o000=0?ooo`007P3oool00`00
+0000oooo0?ooo`3o0?ooob80oooo00<0o`000?ooo`3oool06 at 3oool00`3o0000oooo0?ooo`090?oo
+o`030?l0003oool0oooo0080oooo00 at 0o`000?ooo`3oool0o`003 at 3oool001h0oooo00<000000?oo
+o`3oool0o`3ooolQ0?ooo`030?l0003oool0oooo01X0oooo00<0o`000?ooo`3oool0203oool00`3o
+0000oooo0?ooo`030?ooo`040?l0003oool0oooo0?l000d0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo803oool00`3o0000oooo0?ooo`0J0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?oo
+o`3oool00`3oool0103o0000oooo0?ooo`3o000=0?ooo`007P3oool00`000000oooo0?ooo`3o0?oo
+oal0oooo00<0o`000?ooo`3oool06`3oool00`3o0000oooo0?ooo`090?ooo`030?l0003oool0oooo
+00<0oooo00 at 0o`000?ooo`3oool0o`003 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolN0?oo
+o`030?l0003oool0oooo01/0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`030?oo
+o`040?l0003oool0oooo0?l000h0oooo000N0?ooo`030000003oool0oooo0?l0oooo7 at 3oool00`3o
+0000oooo0?ooo`0L0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool00`3oool0103o
+0000oooo0?ooo`3o000>0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooa`0oooo00<0o`000?oo
+o`3oool0703oool00`3o0000oooo0?ooo`0:0?ooo`030?l0003oool0oooo00<0oooo00 at 0o`000?oo
+o`3oool0o`003P3oool001h0oooo00<000000?ooo`3oool0o`3ooolK0?ooo`030?l0003oool0oooo
+01d0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`040?ooo`040?l0003oool0oooo
+0?l000h0oooo000N0?ooo`030000003oool0oooo0?l0oooo6P3oool00`3o0000oooo0?ooo`0M0?oo
+o`030?l0003oool0oooo00X0oooo00<0o`000?ooo`3oool00`3oool01 at 3o0000oooo0?ooo`3oool0
+o`0000h0oooo000N0?ooo`030000003oool0oooo0?l0oooo603oool20?l00200oooo00<0o`000?oo
+o`3oool02P3oool00`3o0000oooo0?ooo`030?ooo`040?l0003oool0oooo0?l000l0oooo000N0?oo
+o`030000003oool0oooo0?l0oooo5`3oool00`3o0000oooo0?ooo`0O0?ooo`030?l0003oool0oooo
+00X0oooo00<0o`000?ooo`3oool0103oool0103o0000oooo0?ooo`3o000?0?ooo`007P3oool00`00
+0000oooo0?ooo`3o0?oooaH0oooo00<0o`000?ooo`3oool0803oool00`3o0000oooo0?ooo`0:0?oo
+o`030?l0003oool0oooo00 at 0oooo00@0o`000?ooo`3oool0o`003`3oool001h0oooo00<000000?oo
+o`3oool0o`3ooolE0?ooo`030?l0003oool0oooo0200oooo00<0o`000?ooo`3oool02`3oool00`3o
+0000oooo0?ooo`040?ooo`040?l0003oool0oooo0?l000l0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo4`3oool20?l002<0oooo00<0o`000?ooo`3oool02P3oool00`3o0000oooo0?ooo`040?oo
+o`050?l0003oool0oooo0?ooo`3o00003`3oool001h0oooo00<000000?ooo`3oool0o`3ooolB0?oo
+o`030?l0003oool0oooo0280oooo00<0o`000?ooo`3oool02`3oool00`3o0000oooo0?ooo`040?oo
+o`040?l0003oool0oooo0?l00100oooo000N0?ooo`030000003oool0oooo0?l0oooo403oool20?l0
+02D0oooo00<0o`000?ooo`3oool02`3oool00`3o0000oooo0?ooo`040?ooo`040?l0003oool0oooo
+0?l00100oooo000N0?ooo`030000003oool0oooo0?l0oooo3P3oool20?l002H0oooo00<0o`000?oo
+o`3oool02`3oool00`3o0000oooo0?ooo`050?ooo`040?l0003oool0oooo0?l00100oooo000A0?oo
+o`<000002P3oool00`000000oooo0?ooo`3o0?ooo`d0oooo00<0o`000?ooo`3oool09P3oool00`3o
+0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo00 at 0oooo00D0o`000?ooo`3oool0oooo0?l0000@
+0?ooo`00403oool01 at 000000oooo0?ooo`3oool0000000T0oooo00<000000?ooo`3oool0o`3oool;
+0?ooo`80o`00:03oool00`3o0000oooo0?ooo`0<0?ooo`030?l0003oool0oooo00 at 0oooo00D0o`00
+0?ooo`3oool0oooo0?l0000 at 0?ooo`00503oool00`000000oooo0?ooo`070?ooo`<00000o`3oool9
+0?ooo`80o`00:P3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo00D0oooo00 at 0o`00
+0?ooo`3oool0o`004 at 3oool00180oooo0P00000:0?ooo`030000003oool0oooo0?l0oooo203oool0
+0`3o0000oooo0?ooo`0Y0?ooo`030?l0003oool0oooo00`0oooo00<0o`000?ooo`3oool01 at 3oool0
+103o0000oooo0?ooo`3o000A0?ooo`00503oool00`000000oooo0?ooo`070?ooo`030000003oool0
+oooo0?l0oooo1P3oool20?l002`0oooo00<0o`000?ooo`3oool0303oool00`3o0000oooo0?ooo`04
+0?ooo`050?l0003oool0oooo0?ooo`3o00004 at 3oool00100oooo00D000000?ooo`3oool0oooo0000
+00090?ooo`030000003oool0oooo0?l0oooo103oool20?l002d0oooo00<0o`000?ooo`3oool0303o
+ool00`3o0000oooo0?ooo`050?ooo`050?l0003oool0oooo0?ooo`3o00004 at 3oool00140oooo0`00
+000:0?ooo`030000003oool0oooo0?l0oooo0P3oool20?l002l0oooo00<0o`000?ooo`3oool0303o
+ool00`3o0000oooo0?ooo`050?ooo`050?l0003oool0oooo0?ooo`3o00004 at 3oool001h0oooo00<0
+00000?ooo`3oool0o`3oool20?l00300oooo00<0o`000?ooo`3oool03 at 3oool00`3o0000oooo0?oo
+o`050?ooo`040?l0003oool0oooo0?l00180oooo000N0?ooo`030000003oool0oooo0?d0oooo0P3o
+000b0?ooo`030?l0003oool0oooo00`0oooo00<0o`000?ooo`3oool01 at 3oool01@3o0000oooo0?oo
+o`3oool0o`000180oooo000N0?ooo`030000003oool0oooo0?/0oooo0P3o000c0?ooo`030?l0003o
+ool0oooo00d0oooo00<0o`000?ooo`3oool01 at 3oool01@3o0000oooo0?ooo`3oool0o`000180oooo
+000N0?ooo`030000003oool0oooo0?T0oooo0P3o000e0?ooo`030?l0003oool0oooo00d0oooo00<0
+o`000?ooo`3oool01 at 3oool01@3o0000oooo0?ooo`3oool0o`000180oooo000N0?ooo`030000003o
+ool0oooo0?H0oooo0`3o000f0?ooo`030?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool01 at 3o
+ool01 at 3o0000oooo0?ooo`3oool0o`0001<0oooo000N0?ooo`030000003oool0oooo0?@0oooo0P3o
+000h0?ooo`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3oool01 at 3oool01@3o0000oooo0?oo
+o`3oool0o`0001<0oooo000N0?ooo`030000003oool0oooo0?80oooo0P3o000j0?ooo`030?l0003o
+ool0oooo00h0oooo00<0o`000?ooo`3oool01 at 3oool01@3o0000oooo0?ooo`3oool0o`0001<0oooo
+000N0?ooo`030000003oool0oooo0>l0oooo0`3o000k0?ooo`030?l0003oool0oooo00h0oooo00<0
+o`000?ooo`3oool01P3oool01 at 3o0000oooo0?ooo`3oool0o`0001<0oooo000N0?ooo`030000003o
+ool0oooo0>d0oooo0P3o000n0?ooo`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3oool01 at 3o
+ool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo0140oooo000N0?ooo`030000003oool0
+oooo0>T0oooo103o000o0?ooo`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01 at 3oool0
+1 at 3o0000oooo0?ooo`3oool0o`0001 at 0oooo000N0?ooo`030000003oool0oooo0>D0oooo103o0012
+0?ooo`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01P3oool01 at 3o0000oooo0?ooo`3o
+ool0o`0001 at 0oooo000N0?ooo`030000003oool0oooo0>00oooo1 at 3o00160?ooo`030?l0003oool0
+oooo00l0oooo00<0o`000?ooo`3oool01P3oool01 at 3o0000oooo0?ooo`3oool0o`0001 at 0oooo000N
+0?ooo`030000003oool0oooo0=/0oooo1 at 3o001:0?ooo`030?l0003oool0oooo0100oooo00<0o`00
+0?ooo`3oool01 at 3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo0180oooo000N0?oo
+o`030000003oool0oooo0=L0oooo103o001>0?ooo`030?l0003oool0oooo0100oooo00<0o`000?oo
+o`3oool01P3oool01 at 3o0000oooo0?ooo`3oool0o`0001D0oooo000N0?ooo`030000003oool0oooo
+0=80oooo1 at 3o001B0?ooo`030?l0003oool0oooo0100oooo00<0o`000?ooo`3oool01P3oool01 at 3o
+0000oooo0?ooo`3oool0o`0001D0oooo000N0?ooo`030000003oool0oooo0<h0oooo103o001F0?oo
+o`030?l0003oool0oooo0140oooo00<0o`000?ooo`3oool01 at 3oool00`3o0000oooo0?ooo`020?oo
+o`030?l0003oool0oooo01<0oooo000N0?ooo`030000003oool0oooo0<T0oooo1 at 3o001I0?ooo`03
+0?l0003oool0oooo0140oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`020?ooo`03
+0?l0003oool0oooo01<0oooo000N0?ooo`030000003oool0oooo0<<0oooo1P3o001M0?ooo`030?l0
+003oool0oooo0180oooo00<0o`000?ooo`3oool01P3oool01 at 3o0000oooo0?ooo`3oool0o`0001H0
+oooo000N0?ooo`030000003oool0oooo0;h0oooo1 at 3o001S0?ooo`030?l0003oool0oooo0180oooo
+00<0o`000?ooo`3oool01P3oool01 at 3o0000oooo0?ooo`3oool0o`0001H0oooo000N0?ooo`030000
+003oool0oooo0;P0oooo1P3o001W0?ooo`030?l0003oool0oooo0180oooo00<0o`000?ooo`3oool0
+1P3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01 at 0oooo000N0?ooo`030000003o
+ool0oooo0:l0oooo2 at 3o001/0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?ooo`3oool01P3o
+ool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01 at 0oooo000N0?ooo`030000003oool0
+oooo0:@0oooo2`3o001e0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?ooo`3oool01P3oool0
+1 at 3o0000oooo0?ooo`3oool0o`0001L0oooo000N0?ooo`030000003oool0oooo09`0oooo203o001o
+0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`02
+0?ooo`030?l0003oool0oooo01D0oooo000N0?ooo`030000003oool0oooo08h0oooo3P3o00260?oo
+o`030?l0003oool0oooo01 at 0oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`020?oo
+o`030?l0003oool0oooo01D0oooo000N0?ooo`030000003oool0oooo07`0oooo4P3o002C0?ooo`03
+0?l0003oool0oooo01 at 0oooo00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`020?ooo`03
+0?l0003oool0oooo01D0oooo000N0?ooo`030000003oool0oooo06h0oooo3P3o002U0?ooo`030?l0
+003oool0oooo01 at 0oooo00<0o`000?ooo`3oool01`3oool01 at 3o0000oooo0?ooo`3oool0o`0001P0
+oooo000N0?ooo`030000003oool0oooo05h0oooo403o002b0?ooo`030?l0003oool0oooo01D0oooo
+00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01H0oooo
+000N0?ooo`030000003oool0oooo0380oooo;03o00310?ooo`030?l0003oool0oooo01D0oooo00<0
+o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01H0oooo000N
+0?ooo`030000003oool0oooo00T0oooo:@3o003/0?ooo`030?l0003oool0oooo01H0oooo00<0o`00
+0?ooo`3oool01`3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01H0oooo000N0?oo
+o``0o`00o`3ooolF0?ooo`030?l0003oool0oooo01H0oooo00<0o`000?ooo`3oool01`3oool01 at 3o
+0000oooo0?ooo`3oool0o`0001T0oooo000N0?ooo`030000003oool0oooo0?l0oooo7P3oool00`3o
+0000oooo0?ooo`0F0?ooo`030?l0003oool0oooo00L0oooo00<0o`000?ooo`3oool00P3oool00`3o
+0000oooo0?ooo`0G0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooad0oooo00<0o`000?ooo`3o
+ool05`3oool00`3o0000oooo0?ooo`070?ooo`030?l0003oool0oooo0080oooo00<0o`000?ooo`3o
+ool05`3oool001h0oooo00<000000?ooo`3oool0o`3ooolL0?ooo`030?l0003oool0oooo01P0oooo
+00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01L0oooo
+000N0?ooo`030000003oool0oooo0?l0oooo6`3oool00`3o0000oooo0?ooo`0H0?ooo`030?l0003o
+ool0oooo00P0oooo00D0o`000?ooo`3oool0oooo0?l0000J0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?oooaX0oooo00<0o`000?ooo`3oool06 at 3oool00`3o0000oooo0?ooo`070?ooo`030?l0003o
+ool0oooo0080oooo00<0o`000?ooo`3oool0603oool001h0oooo00<000000?ooo`3oool0o`3ooolI
+0?ooo`030?l0003oool0oooo01T0oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo0?ooo`02
+0?ooo`030?l0003oool0oooo01P0oooo000N0?ooo`030000003oool0oooo0?l0oooo603oool00`3o
+0000oooo0?ooo`0J0?ooo`030?l0003oool0oooo00P0oooo00<0o`000?ooo`3oool00P3oool00`3o
+0000oooo0?ooo`0H0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooaL0oooo00<0o`000?ooo`3o
+ool06P3oool00`3o0000oooo0?ooo`090?ooo`050?l0003oool0oooo0?ooo`3o00006`3oool001h0
+oooo00<000000?ooo`3oool0o`3ooolF0?ooo`030?l0003oool0oooo01/0oooo00<0o`000?ooo`3o
+ool0203oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01T0oooo000N0?ooo`030000
+003oool0oooo0?l0oooo5 at 3oool00`3o0000oooo0?ooo`0L0?ooo`030?l0003oool0oooo00P0oooo
+00<0o`000?ooo`3oool00P3oool00`3o0000oooo0?ooo`0I0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?oooa at 0oooo00<0o`000?ooo`3oool0703oool00`3o0000oooo0?ooo`090?ooo`030?l0003o
+ool0oooo0080oooo00<0o`000?ooo`3oool06 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolC
+0?ooo`030?l0003oool0oooo01d0oooo00<0o`000?ooo`3oool02 at 3oool01@3o0000oooo0?ooo`3o
+ool0o`0001`0oooo000N0?ooo`030000003oool0oooo0?l0oooo4P3oool00`3o0000oooo0?ooo`0M
+0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool00P3oool00`3o0000oooo0?ooo`0J
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooa40oooo00<0o`000?ooo`3oool07P3oool00`3o
+0000oooo0?ooo`090?ooo`030?l0003oool0oooo0080oooo00<0o`000?ooo`3oool06P3oool001h0
+oooo0P00003o0?oooa40oooo00<0o`000?ooo`3oool07P3oool00`3o0000oooo0?ooo`0:0?ooo`03
+0?l0003oool0oooo0080oooo00<0o`000?ooo`3oool06P3oool001h0oooo00<000000?ooo`3oool0
+o`3oool?0?ooo`030?l0003oool0oooo01l0oooo00<0o`000?ooo`3oool02P3oool01 at 3o0000oooo
+0?ooo`3oool0o`0001d0oooo000N0?ooo`030000003oool0oooo0?l0oooo3P3oool00`3o0000oooo
+0?ooo`0P0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool00P3oool00`3o0000oooo
+0?ooo`0K0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`d0oooo00<0o`000?ooo`3oool0803o
+ool00`3o0000oooo0?ooo`0:0?ooo`030?l0003oool0oooo0080oooo00<0o`000?ooo`3oool06`3o
+ool001h0oooo00<000000?ooo`3oool0o`3oool<0?ooo`030?l0003oool0oooo0240oooo00<0o`00
+0?ooo`3oool02P3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01/0oooo000N0?oo
+o`030000003oool0oooo0?l0oooo2P3oool20?l002<0oooo00<0o`000?ooo`3oool02`3oool01 at 3o
+0000oooo0?ooo`3oool0o`0001h0oooo000N0?ooo`030000003oool0oooo0?l0oooo2 at 3oool00`3o
+0000oooo0?ooo`0S0?ooo`030?l0003oool0oooo00X0oooo00<0o`000?ooo`3oool00P3oool00`3o
+0000oooo0?ooo`0L0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`P0oooo00<0o`000?ooo`3o
+ool08`3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo0080oooo00<0o`000?ooo`3o
+ool0703oool001h0oooo00<000000?ooo`3oool0o`3oool70?ooo`030?l0003oool0oooo02 at 0oooo
+00<0o`000?ooo`3oool02`3oool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo01`0oooo
+000N0?ooo`030000003oool0oooo0?l0oooo1 at 3oool20?l002H0oooo00<0o`000?ooo`3oool02`3o
+ool00`3o0000oooo0?ooo`030?ooo`030?l0003oool0oooo01`0oooo000N0?ooo`030000003oool0
+oooo0?l0oooo103oool00`3o0000oooo0?ooo`0V0?ooo`030?l0003oool0oooo00/0oooo00<0o`00
+0?ooo`3oool00P3oool00`3o0000oooo0?ooo`0M0?ooo`007P3oool00`000000oooo0?ooo`3o0?oo
+o`<0oooo00<0o`000?ooo`3oool09P3oool00`3o0000oooo0?ooo`0<0?ooo`030?l0003oool0oooo
+0080oooo00<0o`000?ooo`3oool07 at 3oool001h0oooo00<000000?ooo`3oool0o`3oool10?ooo`80
+o`00:@3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo00<0oooo00<0o`000?ooo`3o
+ool07 at 3oool001h0oooo00<000000?ooo`3oool0o`3oool00`3o0000oooo0?ooo`0X0?ooo`030?l0
+003oool0oooo00`0oooo00<0o`000?ooo`3oool00`3oool00`3o0000oooo0?ooo`0M0?ooo`007P3o
+ool00`000000oooo0?ooo`3m0?ooo`80o`00:`3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003o
+ool0oooo00 at 0oooo00<0o`000?ooo`3oool07 at 3oool001h0oooo00<000000?ooo`3oool0n`3oool2
+0?l002`0oooo00<0o`000?ooo`3oool0303oool00`3o0000oooo0?ooo`030?ooo`030?l0003oool0
+oooo01h0oooo000N0?ooo`030000003oool0oooo0?X0oooo00<0o`000?ooo`3oool0;03oool00`3o
+0000oooo0?ooo`0<0?ooo`030?l0003oool0oooo00<0oooo00<0o`000?ooo`3oool07P3oool001h0
+oooo00<000000?ooo`3oool0n03oool20?l002h0oooo00<0o`000?ooo`3oool0303oool00`3o0000
+oooo0?ooo`040?ooo`030?l0003oool0oooo01h0oooo000N0?ooo`030000003oool0oooo0?L0oooo
+00<0o`000?ooo`3oool0;P3oool00`3o0000oooo0?ooo`0<0?ooo`030?l0003oool0oooo00 at 0oooo
+00<0o`000?ooo`3oool07P3oool001h0oooo00<000000?ooo`3oool0m at 3oool20?l00300oooo00<0
+o`000?ooo`3oool03 at 3oool00`3o0000oooo0?ooo`040?ooo`030?l0003oool0oooo01h0oooo000N
+0?ooo`030000003oool0oooo0?<0oooo0P3o000b0?ooo`030?l0003oool0oooo00`0oooo00<0o`00
+0?ooo`3oool0103oool00`3o0000oooo0?ooo`0O0?ooo`007P3oool00`000000oooo0?ooo`3a0?oo
+o`80o`00<`3oool00`3o0000oooo0?ooo`0=0?ooo`030?l0003oool0oooo00 at 0oooo00<0o`000?oo
+o`3oool07`3oool001h0oooo00<000000?ooo`3oool0k`3oool20?l003D0oooo00<0o`000?ooo`3o
+ool03 at 3oool00`3o0000oooo0?ooo`040?ooo`030?l0003oool0oooo01l0oooo000N0?ooo`030000
+003oool0oooo0>d0oooo0P3o000f0?ooo`030?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool0
+1 at 3oool00`3o0000oooo0?ooo`0O0?ooo`007P3oool00`000000oooo0?ooo`3Z0?ooo`<0o`00>03o
+ool00`3o0000oooo0?ooo`0=0?ooo`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool07`3o
+ool001h0oooo00<000000?ooo`3oool0j03oool20?l003X0oooo00<0o`000?ooo`3oool03P3oool0
+0`3o0000oooo0?ooo`040?ooo`030?l0003oool0oooo0200oooo000N0?ooo`030000003oool0oooo
+0>H0oooo0P3o000l0?ooo`030?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool01 at 3oool00`3o
+0000oooo0?ooo`0P0?ooo`007P3oool00`000000oooo0?ooo`3S0?ooo`<0o`00?@3oool00`3o0000
+oooo0?ooo`0>0?ooo`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool0803oool001h0oooo
+00<000000?ooo`3oool0h at 3oool20?l003l0oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo
+0?ooo`050?ooo`030?l0003oool0oooo0200oooo000N0?ooo`030000003oool0oooo0=l0oooo0P3o
+00110?ooo`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3oool01 at 3oool00`3o0000oooo0?oo
+o`0Q0?ooo`007P3oool00`000000oooo0?ooo`3L0?ooo`<0o`00 at P3oool00`3o0000oooo0?ooo`0?
+0?ooo`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool08 at 3oool001h0oooo00<000000?oo
+o`3oool0f03oool40?l004D0oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?ooo`050?oo
+o`030?l0003oool0oooo0240oooo000N0?ooo`030000003oool0oooo0=D0oooo0`3o00180?ooo`03
+0?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool01 at 3oool00`3o0000oooo0?ooo`0R0?ooo`00
+7P3oool00`000000oooo0?ooo`3A0?ooo`@0o`00BP3oool00`3o0000oooo0?ooo`0 at 0?ooo`030?l0
+003oool0oooo00D0oooo00<0o`000?ooo`3oool08P3oool001h0oooo00<000000?ooo`3oool0c at 3o
+ool40?l004h0oooo00<0o`000?ooo`3oool0403oool00`3o0000oooo0?ooo`050?ooo`030?l0003o
+ool0oooo0280oooo000N0?ooo`030000003oool0oooo0<T0oooo103o001A0?ooo`030?l0003oool0
+oooo0100oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`0R0?ooo`007P3oool00`00
+0000oooo0?ooo`350?ooo`@0o`00E at 3oool00`3o0000oooo0?ooo`0 at 0?ooo`030?l0003oool0oooo
+00D0oooo00<0o`000?ooo`3oool08`3oool00140oooo0`00000:0?ooo`030000003oool0oooo0<40
+oooo103o001H0?ooo`030?l0003oool0oooo0140oooo00<0o`000?ooo`3oool01 at 3oool00`3o0000
+oooo0?ooo`0S0?ooo`00403oool01 at 000000oooo0?ooo`3oool0000000T0oooo00<000000?ooo`3o
+ool0_03oool50?l005`0oooo00<0o`000?ooo`3oool0403oool00`3o0000oooo0?ooo`060?ooo`03
+0?l0003oool0oooo02<0oooo000D0?ooo`030000003oool0oooo00L0oooo0`00002h0?ooo`@0o`00
+H03oool00`3o0000oooo0?ooo`0A0?ooo`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool0
+903oool00100oooo00D000000?ooo`3oool0oooo000000090?ooo`030000003oool0oooo0;<0oooo
+1 at 3o001S0?ooo`030?l0003oool0oooo0180oooo00<0o`000?ooo`3oool01 at 3oool00`3o0000oooo
+0?ooo`0T0?ooo`00403oool4000000X0oooo00<000000?ooo`3oool0[`3oool40?l006P0oooo00<0
+o`000?ooo`3oool04 at 3oool00`3o0000oooo0?ooo`060?ooo`030?l0003oool0oooo02 at 0oooo000A
+0?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3oool0ZP3oool50?l006/0oooo00<0o`00
+0?ooo`3oool04P3oool00`3o0000oooo0?ooo`050?ooo`030?l0003oool0oooo02D0oooo000A0?oo
+o`@000002 at 3oool00`000000oooo0?ooo`2T0?ooo`H0o`00K`3oool00`3o0000oooo0?ooo`0C0?oo
+o`030?l0003oool0oooo00D0oooo00<0o`000?ooo`3oool09 at 3oool001h0oooo00<000000?ooo`3o
+ool0W03oool80?l007D0oooo00<0o`000?ooo`3oool04P3oool00`3o0000oooo0?ooo`060?ooo`03
+0?l0003oool0oooo02D0oooo000N0?ooo`030000003oool0oooo09<0oooo2 at 3o001l0?ooo`030?l0
+003oool0oooo01<0oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`0U0?ooo`007P3o
+ool00`000000oooo0?ooo`290?ooo`X0o`00Q03oool00`3o0000oooo0?ooo`0D0?ooo`030?l0003o
+ool0oooo00D0oooo00<0o`000?ooo`3oool09P3oool001h0oooo00<000000?ooo`3oool0O03oool=
+0?l008h0oooo00<0o`000?ooo`3oool04`3oool00`3o0000oooo0?ooo`060?ooo`030?l0003oool0
+oooo02H0oooo000N0?ooo`030000003oool0oooo06h0oooo3P3o002J0?ooo`030?l0003oool0oooo
+01 at 0oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`0V0?ooo`007P3oool00`000000
+oooo0?ooo`1N0?oooa00o`00Y`3oool00`3o0000oooo0?ooo`0D0?ooo`030?l0003oool0oooo00H0
+oooo00<0o`000?ooo`3oool09`3oool001h0oooo00<000000?ooo`3oool0BP3ooolD0?l00;L0oooo
+00<0o`000?ooo`3oool0503oool00`3o0000oooo0?ooo`060?ooo`030?l0003oool0oooo02L0oooo
+000N0?ooo`030000003oool0oooo0380oooo603o003:0?ooo`030?l0003oool0oooo01D0oooo00<0
+o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`0W0?ooo`007P3oool00`000000oooo0?ooo`0L
+0?oooaH0o`00h at 3oool00`3o0000oooo0?ooo`0E0?ooo`030?l0003oool0oooo00H0oooo00<0o`00
+0?ooo`3oool0:03oool001h0oooo7`3o003f0?ooo`030?l0003oool0oooo01H0oooo00<0o`000?oo
+o`3oool01P3oool00`3o0000oooo0?ooo`0X0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooa<0
+oooo00<0o`000?ooo`3oool05P3oool00`3o0000oooo0?ooo`060?ooo`030?l0003oool0oooo02P0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo4P3oool00`3o0000oooo0?ooo`0F0?ooo`030?l0
+003oool0oooo00L0oooo00<0o`000?ooo`3oool0:03oool001h0oooo00<000000?ooo`3oool0o`3o
+oolA0?ooo`030?l0003oool0oooo01L0oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?oo
+o`0Y0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooa00oooo00<0o`000?ooo`3oool0603oool0
+0`3o0000oooo0?ooo`060?ooo`030?l0003oool0oooo02T0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo3`3oool00`3o0000oooo0?ooo`0H0?ooo`030?l0003oool0oooo00L0oooo00<0o`000?oo
+o`3oool0:@3oool001h0oooo00<000000?ooo`3oool0o`3oool>0?ooo`030?l0003oool0oooo01T0
+oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`0Z0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooo`h0oooo00<0o`000?ooo`3oool0603oool00`3o0000oooo0?ooo`070?ooo`030?l0
+003oool0oooo02X0oooo000N0?ooo`030000003oool0oooo0?l0oooo3 at 3oool00`3o0000oooo0?oo
+o`0I0?ooo`030?l0003oool0oooo00L0oooo00<0o`000?ooo`3oool0:P3oool001h0oooo00<00000
+0?ooo`3oool0o`3oool<0?ooo`030?l0003oool0oooo01X0oooo00<0o`000?ooo`3oool01P3oool0
+0`3o0000oooo0?ooo`0[0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`/0oooo00<0o`000?oo
+o`3oool06P3oool00`3o0000oooo0?ooo`070?ooo`030?l0003oool0oooo02/0oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo2P3oool00`3o0000oooo0?ooo`0K0?ooo`030?l0003oool0oooo00L0
+oooo00<0o`000?ooo`3oool0:`3oool001h0oooo00<000000?ooo`3oool0o`3oool90?ooo`030?l0
+003oool0oooo01/0oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo0?ooo`0[0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooo`P0oooo00<0o`000?ooo`3oool0703oool00`3o0000oooo0?oo
+o`070?ooo`030?l0003oool0oooo02`0oooo000N0?ooo`030000003oool0oooo0?l0oooo1`3oool0
+0`3o0000oooo0?ooo`0L0?ooo`030?l0003oool0oooo00P0oooo00<0o`000?ooo`3oool0;03oool0
+01h0oooo00<000000?ooo`3oool0o`3oool70?ooo`030?l0003oool0oooo01`0oooo00<0o`000?oo
+o`3oool0203oool00`3o0000oooo0?ooo`0/0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`H0
+oooo00<0o`000?ooo`3oool07 at 3oool00`3o0000oooo0?ooo`070?ooo`030?l0003oool0oooo02d0
+oooo000N0?ooo`800000o`3oool60?ooo`030?l0003oool0oooo01d0oooo00<0o`000?ooo`3oool0
+203oool00`3o0000oooo0?ooo`0]0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`@0oooo00<0
+o`000?ooo`3oool07P3oool00`3o0000oooo0?ooo`080?ooo`030?l0003oool0oooo02d0oooo000N
+0?ooo`030000003oool0oooo0?l0oooo0`3oool00`3o0000oooo0?ooo`0N0?ooo`030?l0003oool0
+oooo00P0oooo00<0o`000?ooo`3oool0;P3oool001h0oooo00<000000?ooo`3oool0o`3oool20?oo
+o`030?l0003oool0oooo01l0oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo0?ooo`0^0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooo`40oooo00<0o`000?ooo`3oool0803oool00`3o0000
+oooo0?ooo`080?ooo`030?l0003oool0oooo02h0oooo000N0?ooo`030000003oool0oooo0?h0oooo
+0P3o000R0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool0;P3oool001h0oooo00<0
+00000?ooo`3oool0o at 3oool00`3o0000oooo0?ooo`0R0?ooo`030?l0003oool0oooo00P0oooo00<0
+o`000?ooo`3oool0;`3oool001h0oooo00<000000?ooo`3oool0o03oool00`3o0000oooo0?ooo`0R
+0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool0;`3oool001h0oooo00<000000?oo
+o`3oool0n`3oool00`3o0000oooo0?ooo`0S0?ooo`030?l0003oool0oooo00T0oooo00<0o`000?oo
+o`3oool0;`3oool001h0oooo00<000000?ooo`3oool0nP3oool00`3o0000oooo0?ooo`0S0?ooo`03
+0?l0003oool0oooo00T0oooo00<0o`000?ooo`3oool0<03oool001h0oooo00<000000?ooo`3oool0
+n03oool20?l002H0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`0`0?ooo`007P3o
+ool00`000000oooo0?ooo`3g0?ooo`030?l0003oool0oooo02D0oooo00<0o`000?ooo`3oool02P3o
+ool00`3o0000oooo0?ooo`0`0?ooo`007P3oool00`000000oooo0?ooo`3f0?ooo`030?l0003oool0
+oooo02H0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`0a0?ooo`007P3oool00`00
+0000oooo0?ooo`3e0?ooo`030?l0003oool0oooo02H0oooo00<0o`000?ooo`3oool02P3oool00`3o
+0000oooo0?ooo`0a0?ooo`007P3oool00`000000oooo0?ooo`3d0?ooo`030?l0003oool0oooo02L0
+oooo00<0o`000?ooo`3oool02P3oool00`3o0000oooo0?ooo`0a0?ooo`007P3oool00`000000oooo
+0?ooo`3b0?ooo`80o`00:@3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo0340oooo
+000N0?ooo`030000003oool0oooo0?40oooo00<0o`000?ooo`3oool0:@3oool00`3o0000oooo0?oo
+o`0:0?ooo`030?l0003oool0oooo0380oooo000N0?ooo`030000003oool0oooo0?00oooo00<0o`00
+0?ooo`3oool0:@3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo0380oooo000N0?oo
+o`030000003oool0oooo0>l0oooo00<0o`000?ooo`3oool0:P3oool00`3o0000oooo0?ooo`0;0?oo
+o`030?l0003oool0oooo0380oooo000N0?ooo`030000003oool0oooo0>h0oooo00<0o`000?ooo`3o
+ool0:P3oool00`3o0000oooo0?ooo`0;0?ooo`030?l0003oool0oooo03<0oooo000N0?ooo`030000
+003oool0oooo0>`0oooo0P3o000]0?ooo`030?l0003oool0oooo00/0oooo00<0o`000?ooo`3oool0
+<`3oool001h0oooo00<000000?ooo`3oool0j`3oool00`3o0000oooo0?ooo`0/0?ooo`030?l0003o
+ool0oooo00`0oooo00<0o`000?ooo`3oool0<`3oool001h0oooo00<000000?ooo`3oool0jP3oool0
+0`3o0000oooo0?ooo`0]0?ooo`030?l0003oool0oooo00/0oooo00<0o`000?ooo`3oool0=03oool0
+01h0oooo00<000000?ooo`3oool0j03oool20?l002l0oooo00<0o`000?ooo`3oool0303oool00`3o
+0000oooo0?ooo`0d0?ooo`007P3oool00`000000oooo0?ooo`3V0?ooo`80o`00<@3oool00`3o0000
+oooo0?ooo`0<0?ooo`030?l0003oool0oooo03 at 0oooo000A0?ooo`030000003oool0oooo00X0oooo
+00<000000?ooo`3oool0i03oool20?l00380oooo00<0o`000?ooo`3oool0303oool00`3o0000oooo
+0?ooo`0e0?ooo`004 at 3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0oooo0><0oooo00<0
+o`000?ooo`3oool0<P3oool00`3o0000oooo0?ooo`0<0?ooo`030?l0003oool0oooo03D0oooo000B
+0?ooo`030000003oool0oooo00T0oooo0`00003Q0?ooo`80o`00=03oool00`3o0000oooo0?ooo`0<
+0?ooo`030?l0003oool0oooo03H0oooo000B0?ooo`030000003oool0oooo00T0oooo00<000000?oo
+o`3oool0g`3oool20?l003H0oooo00<0o`000?ooo`3oool0303oool00`3o0000oooo0?ooo`0f0?oo
+o`004`3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo0=d0oooo0P3o000g0?ooo`03
+0?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool0=P3oool001<0oooo00<000000?ooo`3oool0
+203oool00`000000oooo0?ooo`3K0?ooo`80o`00>@3oool00`3o0000oooo0?ooo`0<0?ooo`030?l0
+003oool0oooo03L0oooo000 at 0?ooo`D000002 at 3oool00`000000oooo0?ooo`3I0?ooo`80o`00>P3o
+ool00`3o0000oooo0?ooo`0=0?ooo`030?l0003oool0oooo03L0oooo000N0?ooo`030000003oool0
+oooo0=L0oooo0P3o000l0?ooo`030?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool0=`3oool0
+01h0oooo00<000000?ooo`3oool0e at 3oool20?l003d0oooo00<0o`000?ooo`3oool03 at 3oool00`3o
+0000oooo0?ooo`0h0?ooo`007P3oool00`000000oooo0?ooo`3B0?ooo`<0o`00?`3oool00`3o0000
+oooo0?ooo`0=0?ooo`030?l0003oool0oooo03P0oooo000N0?ooo`030000003oool0oooo0=00oooo
+0P3o00110?ooo`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3oool0>03oool001h0oooo00<0
+00000?ooo`3oool0cP3oool20?l004<0oooo00<0o`000?ooo`3oool03 at 3oool00`3o0000oooo0?oo
+o`0i0?ooo`007P3oool00`000000oooo0?ooo`3<0?ooo`80o`00A03oool00`3o0000oooo0?ooo`0>
+0?ooo`030?l0003oool0oooo03T0oooo000N0?ooo`030000003oool0oooo0<T0oooo0`3o00160?oo
+o`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3oool0>@3oool001h0oooo00<000000?ooo`3o
+ool0aP3oool30?l004P0oooo00<0o`000?ooo`3oool03P3oool00`3o0000oooo0?ooo`0j0?ooo`00
+7P3oool00`000000oooo0?ooo`330?ooo`<0o`00B`3oool00`3o0000oooo0?ooo`0>0?ooo`030?l0
+003oool0oooo03X0oooo000N0?ooo`030000003oool0oooo0<00oooo0`3o001=0?ooo`030?l0003o
+ool0oooo00l0oooo00<0o`000?ooo`3oool0>P3oool001h0oooo00<000000?ooo`3oool0_ at 3oool3
+0?l004l0oooo00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?ooo`0k0?ooo`007P3oool00`00
+0000oooo0?ooo`2j0?ooo`<0o`00DP3oool00`3o0000oooo0?ooo`0?0?ooo`030?l0003oool0oooo
+03/0oooo000N0?ooo`030000003oool0oooo0;L0oooo0`3o001D0?ooo`030?l0003oool0oooo0100
+oooo00<0o`000?ooo`3oool0>`3oool001h0oooo00<000000?ooo`3oool0]03oool30?l005L0oooo
+00<0o`000?ooo`3oool03`3oool00`3o0000oooo0?ooo`0l0?ooo`007P3oool00`000000oooo0?oo
+o`2a0?ooo`<0o`00F at 3oool00`3o0000oooo0?ooo`0 at 0?ooo`030?l0003oool0oooo03`0oooo000N
+0?ooo`030000003oool0oooo0:d0oooo103o001L0?ooo`030?l0003oool0oooo00l0oooo00<0o`00
+0?ooo`3oool0?@3oool001h0oooo00<000000?ooo`3oool0ZP3oool30?l005l0oooo00<0o`000?oo
+o`3oool0403oool00`3o0000oooo0?ooo`0m0?ooo`007P3oool00`000000oooo0?ooo`2V0?ooo`@0
+o`00HP3oool00`3o0000oooo0?ooo`0 at 0?ooo`030?l0003oool0oooo03d0oooo000N0?ooo`800000
+X at 3oool60?l006D0oooo00<0o`000?ooo`3oool0403oool00`3o0000oooo0?ooo`0n0?ooo`007P3o
+ool00`000000oooo0?ooo`2J0?ooo`H0o`00JP3oool00`3o0000oooo0?ooo`0A0?ooo`030?l0003o
+ool0oooo03h0oooo000N0?ooo`030000003oool0oooo09D0oooo1 at 3o001`0?ooo`030?l0003oool0
+oooo0140oooo00<0o`000?ooo`3oool0?P3oool001h0oooo00<000000?ooo`3oool0T03oool50?l0
+07 at 0oooo00<0o`000?ooo`3oool04 at 3oool00`3o0000oooo0?ooo`0o0?ooo`007P3oool00`000000
+oooo0?ooo`2;0?ooo`D0o`00N03oool00`3o0000oooo0?ooo`0B0?ooo`030?l0003oool0oooo03l0
+oooo000N0?ooo`030000003oool0oooo08H0oooo1 at 3o001m0?ooo`030?l0003oool0oooo0180oooo
+00<0o`000?ooo`3oool0?`3oool001h0oooo00<000000?ooo`3oool0O`3oool70?l00840oooo00<0
+o`000?ooo`3oool04P3oool00`3o0000oooo0?ooo`100?ooo`007P3oool00`000000oooo0?ooo`1e
+0?ooo`X0o`00Q`3oool00`3o0000oooo0?ooo`0C0?ooo`030?l0003oool0oooo0400oooo000N0?oo
+o`030000003oool0oooo06/0oooo2P3o002A0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?oo
+o`3oool0 at 03oool001h0oooo00<000000?ooo`3oool0HP3oool90?l009X0oooo00<0o`000?ooo`3o
+ool04`3oool00`3o0000oooo0?ooo`110?ooo`007P3oool00`000000oooo0?ooo`1I0?ooo`T0o`00
+X`3oool00`3o0000oooo0?ooo`0C0?ooo`030?l0003oool0oooo0440oooo000N0?ooo`030000003o
+ool0oooo04l0oooo2P3o002[0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?ooo`3oool0 at P3o
+ool001h0oooo00<000000?ooo`3oool0A at 3oool:0?l00;@0oooo00<0o`000?ooo`3oool0503oool0
+0`3o0000oooo0?ooo`120?ooo`007P3oool00`000000oooo0?ooo`0b0?oooa<0o`00_P3oool00`3o
+0000oooo0?ooo`0C0?ooo`030?l0003oool0oooo04<0oooo000N0?ooo`030000003oool0oooo01`0
+oooo5P3o003 at 0?ooo`030?l0003oool0oooo01 at 0oooo00<0o`000?ooo`3oool0@`3oool001h0oooo
+00<000000?ooo`3oool02 at 3ooolC0?l00>D0oooo00<0o`000?ooo`3oool05 at 3oool00`3o0000oooo
+0?ooo`130?ooo`007P3oool<0?l00?P0oooo00<0o`000?ooo`3oool0503oool00`3o0000oooo0?oo
+o`140?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`40oooo00<0o`000?ooo`3oool05 at 3oool0
+0`3o0000oooo0?ooo`140?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`030?l0003oool0oooo
+01D0oooo00<0o`000?ooo`3oool0A at 3oool001h0oooo00<000000?ooo`3oool0oP3oool00`3o0000
+oooo0?ooo`0F0?ooo`030?l0003oool0oooo04D0oooo000N0?ooo`800000o`3oool00`3o0000oooo
+0?ooo`0F0?ooo`030?l0003oool0oooo04D0oooo000N0?ooo`030000003oool0oooo0?d0oooo00<0
+o`000?ooo`3oool05P3oool00`3o0000oooo0?ooo`160?ooo`007P3oool00`000000oooo0?ooo`3l
+0?ooo`030?l0003oool0oooo01L0oooo00<0o`000?ooo`3oool0AP3oool001h0oooo00<000000?oo
+o`3oool0n`3oool00`3o0000oooo0?ooo`0G0?ooo`030?l0003oool0oooo04L0oooo000N0?ooo`03
+0000003oool0oooo0?/0oooo00<0o`000?ooo`3oool05`3oool00`3o0000oooo0?ooo`170?ooo`00
+7P3oool00`000000oooo0?ooo`3j0?ooo`030?l0003oool0oooo01L0oooo00<0o`000?ooo`3oool0
+B03oool001h0oooo00<000000?ooo`3oool0n at 3oool00`3o0000oooo0?ooo`0H0?ooo`030?l0003o
+ool0oooo04P0oooo000N0?ooo`030000003oool0oooo0?P0oooo00<0o`000?ooo`3oool06 at 3oool0
+0`3o0000oooo0?ooo`180?ooo`007P3oool00`000000oooo0?ooo`3h0?ooo`030?l0003oool0oooo
+01P0oooo00<0o`000?ooo`3oool0B at 3oool001h0oooo00<000000?ooo`3oool0m`3oool00`3o0000
+oooo0?ooo`0I0?ooo`030?l0003oool0oooo04T0oooo000N0?ooo`030000003oool0oooo0?H0oooo
+00<0o`000?ooo`3oool06 at 3oool00`3o0000oooo0?ooo`1:0?ooo`007P3oool00`000000oooo0?oo
+o`3e0?ooo`030?l0003oool0oooo01X0oooo00<0o`000?ooo`3oool0BP3oool001h0oooo00<00000
+0?ooo`3oool0m03oool00`3o0000oooo0?ooo`0J0?ooo`030?l0003oool0oooo04/0oooo000N0?oo
+o`030000003oool0oooo0?<0oooo00<0o`000?ooo`3oool06`3oool00`3o0000oooo0?ooo`1;0?oo
+o`007P3oool00`000000oooo0?ooo`3b0?ooo`030?l0003oool0oooo01`0oooo00<0o`000?ooo`3o
+ool0B`3oool001h0oooo00<000000?ooo`3oool0l at 3oool00`3o0000oooo0?ooo`0L0?ooo`030?l0
+003oool0oooo04`0oooo000N0?ooo`030000003oool0oooo0?40oooo00<0o`000?ooo`3oool0703o
+ool00`3o0000oooo0?ooo`1<0?ooo`00303oool010000000oooo0?ooo`3oool3000000/0oooo00<0
+00000?ooo`3oool0l03oool00`3o0000oooo0?ooo`0L0?ooo`030?l0003oool0oooo04d0oooo000<
+0?ooo`040000003oool0oooo000000<0oooo00<000000?ooo`3oool0203oool300000>l0oooo00<0
+o`000?ooo`3oool07 at 3oool00`3o0000oooo0?ooo`1=0?ooo`00303oool010000000oooo0?ooo`00
+00030?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0kP3oool00`3o0000oooo0?oo
+o`0M0?ooo`030?l0003oool0oooo04h0oooo000<0?ooo`040000003oool0oooo000000<0oooo00<0
+00000?ooo`3oool0203oool00`000000oooo0?ooo`3]0?ooo`030?l0003oool0oooo01h0oooo00<0
+o`000?ooo`3oool0CP3oool000X0oooo00<000000?ooo`0000000P3oool01 at 000000oooo0?ooo`3o
+ool0000000X0oooo00<000000?ooo`3oool0k03oool00`3o0000oooo0?ooo`0O0?ooo`030?l0003o
+ool0oooo04h0oooo000;0?ooo`8000000P3oool01 at 000000oooo0?ooo`3oool0000000X0oooo00<0
+00000?ooo`3oool0j`3oool00`3o0000oooo0?ooo`0O0?ooo`030?l0003oool0oooo04l0oooo000<
+0?ooo`040000003oool0oooo0?ooo`<000002`3oool00`000000oooo0?ooo`3Z0?ooo`030?l0003o
+ool0oooo0200oooo00<0o`000?ooo`3oool0C`3oool001h0oooo00<000000?ooo`3oool0j at 3oool0
+0`3o0000oooo0?ooo`0P0?ooo`030?l0003oool0oooo0500oooo000N0?ooo`030000003oool0oooo
+0>L0oooo0P3o000S0?ooo`030?l0003oool0oooo0500oooo000N0?ooo`030000003oool0oooo0>H0
+oooo00<0o`000?ooo`3oool08P3oool00`3o0000oooo0?ooo`1A0?ooo`007P3oool00`000000oooo
+0?ooo`3U0?ooo`030?l0003oool0oooo02<0oooo00<0o`000?ooo`3oool0D at 3oool001h0oooo00<0
+00000?ooo`3oool0i03oool00`3o0000oooo0?ooo`0T0?ooo`030?l0003oool0oooo0540oooo000N
+0?ooo`030000003oool0oooo0><0oooo00<0o`000?ooo`3oool0903oool00`3o0000oooo0?ooo`1B
+0?ooo`007P3oool00`000000oooo0?ooo`3R0?ooo`030?l0003oool0oooo02D0oooo00<0o`000?oo
+o`3oool0DP3oool001h0oooo00<000000?ooo`3oool0h at 3oool00`3o0000oooo0?ooo`0U0?ooo`03
+0?l0003oool0oooo05<0oooo000N0?ooo`030000003oool0oooo0=l0oooo0P3o000X0?ooo`030?l0
+003oool0oooo05<0oooo000N0?ooo`030000003oool0oooo0=h0oooo00<0o`000?ooo`3oool09`3o
+ool00`3o0000oooo0?ooo`1D0?ooo`007P3oool200000=h0oooo00<0o`000?ooo`3oool0:03oool0
+0`3o0000oooo0?ooo`1D0?ooo`007P3oool00`000000oooo0?ooo`3L0?ooo`030?l0003oool0oooo
+02P0oooo00<0o`000?ooo`3oool0E at 3oool001h0oooo00<000000?ooo`3oool0fP3oool20?l002/0
+oooo00<0o`000?ooo`3oool0E at 3oool001h0oooo00<000000?ooo`3oool0f at 3oool00`3o0000oooo
+0?ooo`0Z0?ooo`030?l0003oool0oooo05H0oooo000N0?ooo`030000003oool0oooo0=P0oooo00<0
+o`000?ooo`3oool0:`3oool00`3o0000oooo0?ooo`1F0?ooo`007P3oool00`000000oooo0?ooo`3F
+0?ooo`80o`00;@3oool00`3o0000oooo0?ooo`1G0?ooo`007P3oool00`000000oooo0?ooo`3E0?oo
+o`030?l0003oool0oooo02d0oooo00<0o`000?ooo`3oool0E`3oool001h0oooo00<000000?ooo`3o
+ool0e03oool00`3o0000oooo0?ooo`0]0?ooo`030?l0003oool0oooo05P0oooo000N0?ooo`030000
+003oool0oooo0=80oooo0P3o000`0?ooo`030?l0003oool0oooo05P0oooo000N0?ooo`030000003o
+ool0oooo0=40oooo00<0o`000?ooo`3oool0;`3oool00`3o0000oooo0?ooo`1I0?ooo`007P3oool0
+0`000000oooo0?ooo`3?0?ooo`80o`00<P3oool00`3o0000oooo0?ooo`1I0?ooo`007P3oool00`00
+0000oooo0?ooo`3>0?ooo`030?l0003oool0oooo0340oooo00<0o`000?ooo`3oool0FP3oool001h0
+oooo00<000000?ooo`3oool0c at 3oool00`3o0000oooo0?ooo`0b0?ooo`030?l0003oool0oooo05X0
+oooo000N0?ooo`030000003oool0oooo0</0oooo0P3o000d0?ooo`030?l0003oool0oooo05/0oooo
+000N0?ooo`030000003oool0oooo0<X0oooo00<0o`000?ooo`3oool0=03oool00`3o0000oooo0?oo
+o`1K0?ooo`007P3oool200000<T0oooo0P3o000f0?ooo`030?l0003oool0oooo05`0oooo000N0?oo
+o`030000003oool0oooo0<H0oooo0P3o000h0?ooo`030?l0003oool0oooo05`0oooo000N0?ooo`03
+0000003oool0oooo0<@0oooo0P3o000i0?ooo`030?l0003oool0oooo05d0oooo000N0?ooo`030000
+003oool0oooo0<<0oooo00<0o`000?ooo`3oool0>@3oool00`3o0000oooo0?ooo`1M0?ooo`007P3o
+ool00`000000oooo0?ooo`310?ooo`80o`00>`3oool00`3o0000oooo0?ooo`1N0?ooo`007P3oool0
+0`000000oooo0?ooo`2o0?ooo`80o`00?@3oool00`3o0000oooo0?ooo`1N0?ooo`007P3oool00`00
+0000oooo0?ooo`2m0?ooo`80o`00?P3oool00`3o0000oooo0?ooo`1O0?ooo`007P3oool00`000000
+oooo0?ooo`2l0?ooo`030?l0003oool0oooo03d0oooo00<0o`000?ooo`3oool0H03oool001h0oooo
+00<000000?ooo`3oool0^P3oool20?l00400oooo00<0o`000?ooo`3oool0H03oool001h0oooo00<0
+00000?ooo`3oool0^03oool20?l00440oooo00<0o`000?ooo`3oool0H at 3oool001h0oooo00<00000
+0?ooo`3oool0]P3oool20?l004<0oooo00<0o`000?ooo`3oool0H at 3oool001h0oooo00<000000?oo
+o`3oool0]03oool20?l004 at 0oooo00<0o`000?ooo`3oool0HP3oool001h0oooo00<000000?ooo`3o
+ool0/P3oool20?l004H0oooo00<0o`000?ooo`3oool0HP3oool001h0oooo00<000000?ooo`3oool0
+[`3oool30?l004L0oooo00<0o`000?ooo`3oool0H`3oool001h0oooo0P00002^0?ooo`80o`00BP3o
+ool00`3o0000oooo0?ooo`1S0?ooo`007P3oool00`000000oooo0?ooo`2Z0?ooo`<0o`00B`3oool0
+0`3o0000oooo0?ooo`1T0?ooo`007P3oool00`000000oooo0?ooo`2X0?ooo`80o`00CP3oool00`3o
+0000oooo0?ooo`1T0?ooo`007P3oool00`000000oooo0?ooo`2U0?ooo`<0o`00C`3oool00`3o0000
+oooo0?ooo`1U0?ooo`007P3oool00`000000oooo0?ooo`2S0?ooo`80o`00D at 3oool00`3o0000oooo
+0?ooo`1V0?ooo`007P3oool00`000000oooo0?ooo`2P0?ooo`<0o`00D`3oool00`3o0000oooo0?oo
+o`1V0?ooo`007P3oool00`000000oooo0?ooo`2N0?ooo`80o`00E at 3oool00`3o0000oooo0?ooo`1W
+0?ooo`007P3oool00`000000oooo0?ooo`2K0?ooo`<0o`00EP3oool00`3o0000oooo0?ooo`1X0?oo
+o`007P3oool00`000000oooo0?ooo`2I0?ooo`80o`00F at 3oool00`3o0000oooo0?ooo`1X0?ooo`00
+7P3oool00`000000oooo0?ooo`2F0?ooo`<0o`00FP3oool00`3o0000oooo0?ooo`1Y0?ooo`007P3o
+ool00`000000oooo0?ooo`2C0?ooo`<0o`00G at 3oool00`3o0000oooo0?ooo`1Y0?ooo`007P3oool0
+0`000000oooo0?ooo`2?0?ooo`@0o`00G`3oool00`3o0000oooo0?ooo`1Z0?ooo`007P3oool00`00
+0000oooo0?ooo`2<0?ooo`<0o`00HP3oool00`3o0000oooo0?ooo`1[0?ooo`007P3oool2000008X0
+oooo0`3o001U0?ooo`030?l0003oool0oooo06/0oooo000N0?ooo`030000003oool0oooo08D0oooo
+103o001W0?ooo`030?l0003oool0oooo06`0oooo000N0?ooo`030000003oool0oooo0840oooo103o
+001Z0?ooo`030?l0003oool0oooo06d0oooo000N0?ooo`030000003oool0oooo07`0oooo1 at 3o001^
+0?ooo`030?l0003oool0oooo06d0oooo000N0?ooo`030000003oool0oooo07L0oooo1 at 3o001b0?oo
+o`030?l0003oool0oooo06h0oooo000N0?ooo`030000003oool0oooo07<0oooo103o001g0?ooo`03
+0?l0003oool0oooo06h0oooo000N0?ooo`030000003oool0oooo06h0oooo1 at 3o001j0?ooo`030?l0
+003oool0oooo06l0oooo000N0?ooo`030000003oool0oooo06T0oooo1 at 3o001n0?ooo`030?l0003o
+ool0oooo0700oooo000N0?ooo`030000003oool0oooo06 at 0oooo1@3o00230?ooo`030?l0003oool0
+oooo0700oooo000N0?ooo`030000003oool0oooo05h0oooo1P3o00270?ooo`030?l0003oool0oooo
+0740oooo000<0?ooo`040000003oool0oooo0?ooo`<000002`3oool00`000000oooo0?ooo`1H0?oo
+o`H0o`00S03oool00`3o0000oooo0?ooo`1b0?ooo`00303oool010000000oooo0?ooo`0000030?oo
+o`030000003oool0oooo00P0oooo00<000000?ooo`3oool0D at 3oool70?l00940oooo00<0o`000?oo
+o`3oool0L`3oool000`0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`080?ooo`<0
+0000BP3oool70?l009P0oooo00<0o`000?ooo`3oool0L`3oool000`0oooo00 at 000000?ooo`3oool0
+00000`3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo04<0oooo1`3o002N0?ooo`03
+0?l0003oool0oooo07 at 0oooo000:0?ooo`030000003oool000000080oooo1000000;0?ooo`030000
+003oool0oooo03/0oooo203o002T0?ooo`030?l0003oool0oooo07D0oooo000;0?ooo`8000000`3o
+ool00`000000oooo0?ooo`0;0?ooo`030000003oool0oooo0380oooo2 at 3o002[0?ooo`030?l0003o
+ool0oooo07H0oooo000<0?ooo`040000003oool0oooo0?ooo`@000002P3oool00`000000oooo0?oo
+o`0X0?ooo`X0o`00]03oool00`3o0000oooo0?ooo`1f0?ooo`007P3oool00`000000oooo0?ooo`0L
+0?ooo``0o`00_ at 3oool00`3o0000oooo0?ooo`1g0?ooo`007P3oool00`000000oooo0?ooo`090?oo
+oa<0o`00b03oool00`3o0000oooo0?ooo`1h0?ooo`007P3oool<0?l00=X0oooo00<0o`000?ooo`3o
+ool0N at 3oool001h0oooo00<000000?ooo`3oool0h`3oool00`3o0000oooo0?ooo`1i0?ooo`007P3o
+ool00`000000oooo0?ooo`3R0?ooo`030?l0003oool0oooo07X0oooo000N0?ooo`030000003oool0
+oooo0>40oooo00<0o`000?ooo`3oool0N`3oool001h0oooo0P00003Q0?ooo`030?l0003oool0oooo
+07`0oooo000N0?ooo`030000003oool0oooo0>00oooo00<0o`000?ooo`3oool0O03oool001h0oooo
+00<000000?ooo`3oool0g`3oool00`3o0000oooo0?ooo`1m0?ooo`007P3oool00`000000oooo0?oo
+o`3N0?ooo`030?l0003oool0oooo07h0oooo000N0?ooo`030000003oool0oooo0=d0oooo00<0o`00
+0?ooo`3oool0O`3oool001h0oooo00<000000?ooo`3oool0g at 3oool00`3o0000oooo0?ooo`1o0?oo
+o`007P3oool00`000000oooo0?ooo`3L0?ooo`030?l0003oool0oooo0800oooo000N0?ooo`030000
+003oool0oooo0=/0oooo00<0o`000?ooo`3oool0P at 3oool001h0oooo00<000000?ooo`3oool0fP3o
+ool00`3o0000oooo0?ooo`220?ooo`007P3oool00`000000oooo0?ooo`3I0?ooo`030?l0003oool0
+oooo08<0oooo000N0?ooo`800000f at 3oool00`3o0000oooo0?ooo`240?ooo`007P3oool00`000000
+oooo0?ooo`3G0?ooo`030?l0003oool0oooo08D0oooo000N0?ooo`030000003oool0oooo0=L0oooo
+00<0o`000?ooo`3oool0Q at 3oool001h0oooo00<000000?ooo`3oool0eP3oool00`3o0000oooo0?oo
+o`260?ooo`007P3oool00`000000oooo0?ooo`3E0?ooo`030?l0003oool0oooo08L0oooo000N0?oo
+o`030000003oool0oooo0=@0oooo00<0o`000?ooo`3oool0R03oool001h0oooo00<000000?ooo`3o
+ool0d`3oool00`3o0000oooo0?ooo`290?ooo`007P3oool00`000000oooo0?ooo`3B0?ooo`030?l0
+003oool0oooo08X0oooo000N0?ooo`030000003oool0oooo0=40oooo00<0o`000?ooo`3oool0R`3o
+ool001h0oooo00<000000?ooo`3oool0d03oool00`3o0000oooo0?ooo`2<0?ooo`007P3oool20000
+0=00oooo00<0o`000?ooo`3oool0S at 3oool001h0oooo00<000000?ooo`3oool0cP3oool00`3o0000
+oooo0?ooo`2>0?ooo`007P3oool00`000000oooo0?ooo`3>0?ooo`030?l0003oool0oooo08h0oooo
+000N0?ooo`030000003oool0oooo0<d0oooo00<0o`000?ooo`3oool0S`3oool001h0oooo00<00000
+0?ooo`3oool0c03oool00`3o0000oooo0?ooo`2 at 0?ooo`007P3oool00`000000oooo0?ooo`3;0?oo
+o`030?l0003oool0oooo0940oooo000N0?ooo`030000003oool0oooo0<X0oooo00<0o`000?ooo`3o
+ool0TP3oool001h0oooo00<000000?ooo`3oool0b at 3oool00`3o0000oooo0?ooo`2C0?ooo`007P3o
+ool00`000000oooo0?ooo`380?ooo`030?l0003oool0oooo09 at 0oooo000N0?ooo`030000003oool0
+oooo0<L0oooo00<0o`000?ooo`3oool0U at 3oool001h0oooo0P0000370?ooo`030?l0003oool0oooo
+09H0oooo000N0?ooo`030000003oool0oooo0<@0oooo0P3o002I0?ooo`007P3oool00`000000oooo
+0?ooo`330?ooo`030?l0003oool0oooo09T0oooo000N0?ooo`030000003oool0oooo0<80oooo00<0
+o`000?ooo`3oool0VP3oool001h0oooo00<000000?ooo`3oool0`@3oool00`3o0000oooo0?ooo`2K
+0?ooo`007P3oool00`000000oooo0?ooo`300?ooo`030?l0003oool0oooo09`0oooo000N0?ooo`03
+0000003oool0oooo0;l0oooo00<0o`000?ooo`3oool0W at 3oool000T0oooo1@0000020?ooo`<00000
+2`3oool00`000000oooo0?ooo`2n0?ooo`030?l0003oool0oooo09h0oooo000:0?ooo`030000003o
+ool0oooo0080oooo00D000000?ooo`3oool0oooo0000000:0?ooo`<00000_ at 3oool00`3o0000oooo
+0?ooo`2O0?ooo`002`3oool01 at 000000oooo0?ooo`3oool0000000<0oooo00<000000?ooo`3oool0
+203oool00`000000oooo0?ooo`2l0?ooo`030?l0003oool0oooo0:00oooo000<0?ooo`040000003o
+ool0oooo000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`2j0?ooo`80o`00
+X`3oool000d0oooo00<000000?ooo`0000000`3oool00`000000oooo0?ooo`080?ooo`030000003o
+ool0oooo0;T0oooo00<0o`000?ooo`3oool0X`3oool000T0oooo00L000000?ooo`3oool0oooo0000
+003oool0000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`2h0?ooo`030?l0
+003oool0oooo0:@0oooo000:0?ooo`<000000`3oool3000000/0oooo00<000000?ooo`3oool0]`3o
+ool00`3o0000oooo0?ooo`2U0?ooo`007P3oool00`000000oooo0?ooo`2f0?ooo`030?l0003oool0
+oooo0:H0oooo000N0?ooo`030000003oool0oooo0;D0oooo00<0o`000?ooo`3oool0Y`3oool001h0
+oooo00<000000?ooo`3oool0/`3oool20?l00:X0oooo000N0?ooo`030000003oool0oooo0;80oooo
+00<0o`000?ooo`3oool0ZP3oool001h0oooo00<000000?ooo`3oool0/03oool20?l00:d0oooo000N
+0?ooo`030000003oool0oooo0:h0oooo0P3o002_0?ooo`007P3oool00`000000oooo0?ooo`2]0?oo
+o`030?l0003oool0oooo0:l0oooo000N0?ooo`030000003oool0oooo0:/0oooo0P3o002b0?ooo`00
+7P3oool00`000000oooo0?ooo`2Z0?ooo`030?l0003oool0oooo0;80oooo000N0?ooo`030000003o
+ool0oooo0:P0oooo0P3o002e0?ooo`007P3oool00`000000oooo0?ooo`2W0?ooo`030?l0003oool0
+oooo0;D0oooo000N0?ooo`030000003oool0oooo0:D0oooo0P3o002h0?ooo`007P3oool00`000000
+oooo0?ooo`2S0?ooo`80o`00^P3oool001h0oooo00<000000?ooo`3oool0XP3oool00`3o0000oooo
+0?ooo`2j0?ooo`007P3oool00`000000oooo0?ooo`2P0?ooo`80o`00_ at 3oool001h0oooo00<00000
+0?ooo`3oool0W`3oool00`3o0000oooo0?ooo`2m0?ooo`007P3oool00`000000oooo0?ooo`2M0?oo
+o`80o`00`03oool001h0oooo00<000000?ooo`3oool0V`3oool20?l00<80oooo000N0?ooo`030000
+003oool0oooo09X0oooo00<0o`000?ooo`3oool0`P3oool001h0oooo00<000000?ooo`3oool0V03o
+ool20?l00<D0oooo000N0?ooo`030000003oool0oooo09L0oooo00<0o`000?ooo`3oool0a at 3oool0
+01h0oooo00<000000?ooo`3oool0U at 3oool20?l00<P0oooo000N0?ooo`030000003oool0oooo09<0
+oooo0P3o003:0?ooo`007P3oool00`000000oooo0?ooo`2A0?ooo`80o`00c03oool001h0oooo00<0
+00000?ooo`3oool0S`3oool20?l00<h0oooo000N0?ooo`030000003oool0oooo08d0oooo0P3o003@
+0?ooo`007P3oool00`000000oooo0?ooo`2;0?ooo`80o`00dP3oool001h0oooo00<000000?ooo`3o
+ool0R at 3oool20?l00=@0oooo000N0?ooo`030000003oool0oooo08L0oooo0P3o003F0?ooo`007P3o
+ool00`000000oooo0?ooo`250?ooo`80o`00f03oool001h0oooo00<000000?ooo`3oool0PP3oool3
+0?l00=X0oooo000N0?ooo`030000003oool0oooo0800oooo0P3o003M0?ooo`007P3oool00`000000
+oooo0?ooo`1m0?ooo`<0o`00g`3oool001h0oooo00<000000?ooo`3oool0NP3oool30?l00>80oooo
+000N0?ooo`030000003oool0oooo07P0oooo0P3o003U0?ooo`007P3oool00`000000oooo0?ooo`1e
+0?ooo`<0o`00i`3oool001h0oooo00<000000?ooo`3oool0LP3oool30?l00>X0oooo000N0?ooo`03
+0000003oool0oooo0700oooo0P3o003]0?ooo`007P3oool00`000000oooo0?ooo`1]0?ooo`<0o`00
+k`3oool001h0oooo00<000000?ooo`3oool0JP3oool30?l00?80oooo000N0?ooo`030000003oool0
+oooo06P0oooo0P3o003e0?ooo`007P3oool00`000000oooo0?ooo`1U0?ooo`<0o`00m`3oool001h0
+oooo00<000000?ooo`3oool0HP3oool30?l00?X0oooo000N0?ooo`030000003oool0oooo05l0oooo
+0`3o003m0?ooo`007P3oool00`000000oooo0?ooo`1L0?ooo`<0o`00o`3oool10?ooo`007P3oool0
+0`000000oooo0?ooo`1I0?ooo`<0o`00o`3oool40?ooo`007P3oool00`000000oooo0?ooo`1F0?oo
+o`<0o`00o`3oool70?ooo`007P3oool00`000000oooo0?ooo`1B0?ooo`@0o`00o`3oool:0?ooo`00
+7P3oool00`000000oooo0?ooo`1=0?ooo`D0o`00o`3oool>0?ooo`007P3oool00`000000oooo0?oo
+o`170?ooo`H0o`00o`3ooolC0?ooo`007P3oool00`000000oooo0?ooo`120?ooo`D0o`00o`3ooolI
+0?ooo`007P3oool00`000000oooo0?ooo`0m0?ooo`D0o`00o`3ooolN0?ooo`007P3oool00`000000
+oooo0?ooo`0i0?ooo`@0o`00o`3ooolS0?ooo`007P3oool00`000000oooo0?ooo`0d0?ooo`D0o`00
+o`3ooolW0?ooo`007P3oool00`000000oooo0?ooo`0_0?ooo`D0o`00o`3oool/0?ooo`007P3oool0
+0`000000oooo0?ooo`0[0?ooo`@0o`00o`3ooola0?ooo`007P3oool00`000000oooo0?ooo`0V0?oo
+o`D0o`00o`3ooole0?ooo`007P3oool00`000000oooo0?ooo`0P0?ooo`H0o`00o`3ooolj0?ooo`00
+7P3oool00`000000oooo0?ooo`0H0?ooo`P0o`00o`3ooom00?ooo`007P3oool00`000000oooo0?oo
+o`0>0?ooo`X0o`00o`3ooom80?ooo`007P3oool00`000000oooo0?ooo`030?ooo`/0o`00o`3ooomB
+0?ooo`007P3oool60?l00?l0ooooG at 3oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`00
+7P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00001\
+\>"],
+  ImageRangeCache->{{{0, 383}, {767, 0}} -> {-0.454387, -0.403444, 0.00504313,
+   0.00252157}}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(LogLogPlot[{ycbcrstsby[f, .1], ycbcrstsby[f, .2], ycbcrstsby[f, .3], 
+        ycbcrstsby[f, .4], ycbcrstsby[f, .5], ycbcrstsby[f, .6], 
+        ycbcrstsby[f, .7], ycbcrstsby[f, .8], ycbcrstsby[f, .9], 
+        ycbcrstsby[f, 1.0]}, {f, .5, 30}, PlotRange -> {{.5, 30}, {.5, 21}}, 
+      AspectRatio -> 2, PlotStyle -> {{RGBColor[0, 0, 1]}}]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 2 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.169294 0.562382 0.370898 1.2321 [
+[.16929 -0.0125 -6 -15 ]
+[.16929 -0.0125 6 0 ]
+[.26832 -0.0125 -13 -15 ]
+[.26832 -0.0125 13 0 ]
+[.33859 -0.0125 -6 -15 ]
+[.33859 -0.0125 6 0 ]
+[.43762 -0.0125 -6 -15 ]
+[.43762 -0.0125 6 0 ]
+[.56238 -0.0125 -6 -15 ]
+[.56238 -0.0125 6 0 ]
+[.64456 -0.0125 -6 -15 ]
+[.64456 -0.0125 6 0 ]
+[.73168 -0.0125 -9.5 -15 ]
+[.73168 -0.0125 9.5 0 ]
+[.83071 -0.0125 -9.5 -15 ]
+[.83071 -0.0125 9.5 0 ]
+[.90097 -0.0125 -9.5 -15 ]
+[.90097 -0.0125 9.5 0 ]
+[-0.0125 .3709 -12 -7.5 ]
+[-0.0125 .3709 0 7.5 ]
+[-0.0125 .58786 -26 -7.5 ]
+[-0.0125 .58786 0 7.5 ]
+[-0.0125 .7418 -12 -7.5 ]
+[-0.0125 .7418 0 7.5 ]
+[-0.0125 .95876 -12 -7.5 ]
+[-0.0125 .95876 0 7.5 ]
+[-0.0125 1.2321 -12 -7.5 ]
+[-0.0125 1.2321 0 7.5 ]
+[-0.0125 1.41214 -12 -7.5 ]
+[-0.0125 1.41214 0 7.5 ]
+[-0.0125 1.60299 -19 -7.5 ]
+[-0.0125 1.60299 0 7.5 ]
+[-0.0125 1.81996 -19 -7.5 ]
+[-0.0125 1.81996 0 7.5 ]
+[-0.0125 1.97389 -19 -7.5 ]
+[-0.0125 1.97389 0 7.5 ]
+[ -0.0005 -0.0005 0 0 ]
+[ 1 2 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.16929 0 m
+.16929 .00625 L
+s
+gsave
+.16929 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.26832 0 m
+.26832 .00625 L
+s
+gsave
+.26832 -0.0125 -74 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1.5) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.33859 0 m
+.33859 .00625 L
+s
+gsave
+.33859 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(2) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.43762 0 m
+.43762 .00625 L
+s
+gsave
+.43762 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(3) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.56238 0 m
+.56238 .00625 L
+s
+gsave
+.56238 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(5) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.64456 0 m
+.64456 .00625 L
+s
+gsave
+.64456 -0.0125 -67 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(7) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.73168 0 m
+.73168 .00625 L
+s
+gsave
+.73168 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(10) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.83071 0 m
+.83071 .00625 L
+s
+gsave
+.83071 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(15) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.90097 0 m
+.90097 .00625 L
+s
+gsave
+.90097 -0.0125 -70.5 -19 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+.19257 0 m
+.19257 .00375 L
+s
+.21382 0 m
+.21382 .00375 L
+s
+.23337 0 m
+.23337 .00375 L
+s
+.25147 0 m
+.25147 .00375 L
+s
+.28409 0 m
+.28409 .00375 L
+s
+.29889 0 m
+.29889 .00375 L
+s
+.31285 0 m
+.31285 .00375 L
+s
+.32606 0 m
+.32606 .00375 L
+s
+.50788 0 m
+.50788 .00375 L
+s
+.60691 0 m
+.60691 .00375 L
+s
+.67718 0 m
+.67718 .00375 L
+s
+.70594 0 m
+.70594 .00375 L
+s
+.75495 0 m
+.75495 .00375 L
+s
+.77621 0 m
+.77621 .00375 L
+s
+.79576 0 m
+.79576 .00375 L
+s
+.81386 0 m
+.81386 .00375 L
+s
+.84647 0 m
+.84647 .00375 L
+s
+.86128 0 m
+.86128 .00375 L
+s
+.87524 0 m
+.87524 .00375 L
+s
+.88844 0 m
+.88844 .00375 L
+s
+.25 Mabswid
+0 0 m
+1 0 L
+s
+0 .3709 m
+.00625 .3709 L
+s
+gsave
+-0.0125 .3709 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .58786 m
+.00625 .58786 L
+s
+gsave
+-0.0125 .58786 -87 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(1.5) show
+84.750000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .7418 m
+.00625 .7418 L
+s
+gsave
+-0.0125 .7418 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(2) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 .95876 m
+.00625 .95876 L
+s
+gsave
+-0.0125 .95876 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(3) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.2321 m
+.00625 1.2321 L
+s
+gsave
+-0.0125 1.2321 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(5) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.41214 m
+.00625 1.41214 L
+s
+gsave
+-0.0125 1.41214 -73 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(7) show
+70.250000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.60299 m
+.00625 1.60299 L
+s
+gsave
+-0.0125 1.60299 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(10) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.81996 m
+.00625 1.81996 L
+s
+gsave
+-0.0125 1.81996 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(15) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+0 1.97389 m
+.00625 1.97389 L
+s
+gsave
+-0.0125 1.97389 -80 -11.5 Mabsadd m
+1 1 Mabs scale
+currentpoint translate
+0 23 translate 1 -1 scale
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+63.000000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+(20) show
+77.500000 13.937500 moveto
+%%IncludeResource: font Courier
+%%IncludeFont: Courier
+/Courier findfont 10.000000 scalefont
+[1 0 0 -1 0 0 ] makefont setfont
+0.000000 0.000000 0.000000 setrgbcolor
+0.000000 0.000000 rmoveto
+1.000000 setlinewidth
+%%DocumentNeededResources: font Courier
+%%DocumentNeededFonts: Courier
+%%DocumentFonts: font Courier
+grestore
+.001 w
+0 .4219 m
+.00375 .4219 L
+s
+0 .46846 m
+.00375 .46846 L
+s
+0 .51129 m
+.00375 .51129 L
+s
+0 .55094 m
+.00375 .55094 L
+s
+0 .62239 m
+.00375 .62239 L
+s
+0 .65483 m
+.00375 .65483 L
+s
+0 .68542 m
+.00375 .68542 L
+s
+0 .71435 m
+.00375 .71435 L
+s
+0 1.11269 m
+.00375 1.11269 L
+s
+0 1.32966 m
+.00375 1.32966 L
+s
+0 1.48359 m
+.00375 1.48359 L
+s
+0 1.54662 m
+.00375 1.54662 L
+s
+0 1.65399 m
+.00375 1.65399 L
+s
+0 1.70055 m
+.00375 1.70055 L
+s
+0 1.74338 m
+.00375 1.74338 L
+s
+0 1.78304 m
+.00375 1.78304 L
+s
+0 1.85449 m
+.00375 1.85449 L
+s
+0 1.88693 m
+.00375 1.88693 L
+s
+0 1.91752 m
+.00375 1.91752 L
+s
+0 1.94645 m
+.00375 1.94645 L
+s
+.25 Mabswid
+0 0 m
+0 2 L
+s
+0 0 m
+1 0 L
+1 2 L
+0 2 L
+closepath
+clip
+newpath
+0 0 1 r
+.5 Mabswid
+0 1.98937 m
+.06179 1.97745 L
+.10799 1.96653 L
+.18867 1.94218 L
+.24784 1.91888 L
+.29842 1.89426 L
+.38108 1.84195 L
+.43777 1.79487 L
+.52204 1.70197 L
+.58247 1.61312 L
+.63366 1.51891 L
+.67451 1.42842 L
+.70824 1.34161 L
+.73968 1.24939 L
+.76653 1.16088 L
+.79218 1.06704 L
+.81457 .97695 L
+.83433 .89058 L
+.85373 .79898 L
+.87106 .71113 L
+.88822 .61812 L
+.90369 .52886 L
+.9177 .44329 L
+.93177 .35264 L
+.9446 .26567 L
+.95632 .18235 L
+.96822 .09397 L
+.97915 .00922 L
+s
+.97915 .00922 m
+.98029 0 L
+s
+0 1.73202 m
+.06179 1.72462 L
+.10799 1.71778 L
+.18867 1.70236 L
+.24784 1.68736 L
+.29842 1.67125 L
+.38108 1.63621 L
+.43777 1.60371 L
+.52204 1.53707 L
+.58247 1.47038 L
+.63366 1.39679 L
+.67451 1.32356 L
+.70824 1.2512 L
+.73968 1.17232 L
+.76653 1.09486 L
+.79218 1.01111 L
+.81457 .92931 L
+.83433 .84978 L
+.85373 .7644 L
+.87106 .68164 L
+.88822 .59323 L
+.90369 .50772 L
+.9177 .42523 L
+.93177 .33734 L
+.9446 .25264 L
+.95632 .17118 L
+.96822 .08449 L
+.97915 .00112 L
+s
+.97915 .00112 m
+.97929 0 L
+s
+0 1.4685 m
+.06179 1.46397 L
+.10799 1.45976 L
+.18867 1.45018 L
+.24784 1.44077 L
+.29842 1.43056 L
+.38108 1.40794 L
+.43777 1.38651 L
+.4818 1.36523 L
+.52204 1.34119 L
+.58586 1.29095 L
+.63472 1.23886 L
+.67396 1.18541 L
+.7098 1.12504 L
+.73994 1.06377 L
+.76837 .99548 L
+.79294 .92692 L
+.81445 .85867 L
+.83543 .78385 L
+.85406 .70994 L
+.87241 .62967 L
+.88888 .55088 L
+.90374 .47396 L
+.91862 .39115 L
+.93213 .31059 L
+.94446 .23252 L
+.95693 .1489 L
+.96836 .06802 L
+s
+.96836 .06802 m
+.9775 0 L
+s
+0 1.23592 m
+.06179 1.23298 L
+.10799 1.23025 L
+.18867 1.22399 L
+.24784 1.2178 L
+.29842 1.21105 L
+.38108 1.19594 L
+.43777 1.18142 L
+.4818 1.16683 L
+.52204 1.15012 L
+.58586 1.11448 L
+.63472 1.07651 L
+.67396 1.03655 L
+.7098 .99022 L
+.73994 .942 L
+.76837 .88692 L
+.79294 .83031 L
+.81445 .77276 L
+.83543 .70839 L
+.85406 .64364 L
+.87241 .57212 L
+.88888 .50086 L
+.90374 .43037 L
+.91862 .35359 L
+.93213 .27813 L
+.94446 .20436 L
+.95693 .12472 L
+.96836 .04716 L
+s
+.96836 .04716 m
+.97493 0 L
+s
+0 1.03591 m
+.06179 1.03389 L
+.10799 1.032 L
+.18867 1.02767 L
+.24784 1.02338 L
+.29842 1.01867 L
+.38108 1.00808 L
+.43777 .99782 L
+.4818 .98742 L
+.52204 .97542 L
+.58586 .94947 L
+.63472 .92132 L
+.67396 .89114 L
+.7098 .85548 L
+.73994 .81762 L
+.76837 .77351 L
+.79294 .72726 L
+.81445 .67935 L
+.83543 .62479 L
+.85406 .56893 L
+.87241 .50621 L
+.88888 .44274 L
+.90374 .37909 L
+.91862 .30889 L
+.93213 .2391 L
+.94446 .17019 L
+.95693 .09515 L
+.96836 .02149 L
+s
+.96836 .02149 m
+.97149 0 L
+s
+0 .86311 m
+.06179 .86164 L
+.10799 .86027 L
+.18867 .85713 L
+.24784 .854 L
+.29842 .85057 L
+.38108 .84281 L
+.43777 .83526 L
+.4818 .82757 L
+.52204 .81864 L
+.55449 .8097 L
+.58586 .79916 L
+.63472 .77777 L
+.6763 .75294 L
+.71057 .72602 L
+.74241 .69395 L
+.76959 .65955 L
+.79315 .62309 L
+.81596 .58062 L
+.83607 .53615 L
+.85577 .48509 L
+.87336 .43229 L
+.88917 .3783 L
+.90492 .31763 L
+.9192 .25626 L
+.93218 .19473 L
+.94527 .12677 L
+.95725 .05921 L
+s
+.95725 .05921 m
+.96696 0 L
+s
+0 .71206 m
+.06179 .71095 L
+.10799 .70992 L
+.18867 .70754 L
+.24784 .70518 L
+.29842 .70258 L
+.34438 .6996 L
+.38108 .69668 L
+.43777 .69093 L
+.48354 .68478 L
+.51932 .67871 L
+.55348 .67154 L
+.58166 .66434 L
+.62954 .64852 L
+.67048 .63006 L
+.70758 .60768 L
+.73867 .5832 L
+.76525 .55675 L
+.79068 .5253 L
+.81289 .49166 L
+.83446 .45218 L
+.85359 .41045 L
+.87068 .36688 L
+.88764 .3169 L
+.90293 .26533 L
+.91677 .21269 L
+.9307 .15353 L
+.9434 .09375 L
+.95621 .0274 L
+s
+.95621 .0274 m
+.96105 0 L
+s
+0 .57839 m
+.06179 .57752 L
+.10799 .57672 L
+.18867 .57487 L
+.24784 .57302 L
+.29842 .57099 L
+.34438 .56866 L
+.38108 .56637 L
+.43777 .56185 L
+.48354 .55702 L
+.51932 .55223 L
+.55348 .54656 L
+.58166 .54085 L
+.62954 .52826 L
+.67048 .51347 L
+.70758 .49539 L
+.73867 .47546 L
+.76525 .45374 L
+.79068 .42766 L
+.81289 .39949 L
+.83446 .36607 L
+.85359 .33034 L
+.87068 .29262 L
+.88764 .24886 L
+.90293 .20319 L
+.91677 .15607 L
+.9307 .10256 L
+.9434 .04795 L
+s
+.9434 .04795 m
+.95343 0 L
+s
+0 .45876 m
+.06179 .45807 L
+.10799 .45742 L
+.18867 .45594 L
+.24784 .45446 L
+.29842 .45283 L
+.34438 .45097 L
+.38108 .44913 L
+.43777 .4455 L
+.48354 .44161 L
+.51932 .43774 L
+.55348 .43316 L
+.58166 .42854 L
+.62954 .41831 L
+.67048 .40623 L
+.70758 .39139 L
+.73867 .37493 L
+.76525 .35686 L
+.79068 .33502 L
+.81289 .31123 L
+.83446 .28276 L
+.85359 .25203 L
+.87068 .21929 L
+.88764 .18094 L
+.90293 .14052 L
+.91677 .09841 L
+.9307 .05013 L
+.9434 .00038 L
+s
+.9434 .00038 m
+.94349 0 L
+s
+0 .35065 m
+.06179 .35008 L
+.10799 .34955 L
+.18867 .34834 L
+.24784 .34713 L
+.29842 .3458 L
+.34438 .34427 L
+.38108 .34277 L
+.43777 .33979 L
+.48354 .33659 L
+.51932 .33341 L
+.55348 .32964 L
+.58166 .32583 L
+.62954 .31737 L
+.67048 .30735 L
+.70758 .29498 L
+.73867 .2812 L
+.76525 .266 L
+.79068 .24751 L
+.81289 .22724 L
+.83446 .20281 L
+.85359 .17625 L
+.87068 .14772 L
+.88764 .11402 L
+.90293 .07819 L
+.91677 .04055 L
+s
+.91677 .04055 m
+.92975 0 L
+s
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{384, 768},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`400060000302000`400?l00000o`00003oo`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00F at 3oool00`000000oooo0?ooo`0I0?ooo`050000
+003oool0oooo0?ooo`0000000P3oool300000180oooo1 at 00000O0?ooo`<00000:@3oool3000001X0
+oooo00<000000?ooo`3oool06P3oool010000000oooo0?ooo`3oool3000001`0oooo00 at 000000?oo
+o`3oool0oooo0`00000?0?ooo`D000000P3oool300000280oooo001I0?ooo`030000003oool0oooo
+01T0oooo00<000000?ooo`3oool00`3oool01 at 000000oooo0?ooo`3oool000000180oooo00<00000
+0?ooo`3oool07`3oool01 at 000000oooo0?ooo`3oool0000002L0oooo00D000000?ooo`3oool0oooo
+0000000I0?ooo`030000003oool0oooo01X0oooo00 at 000000?ooo`3oool000000`3oool00`000000
+oooo0?ooo`0I0?ooo`040000003oool0oooo000000<0oooo00<000000?ooo`3oool03 at 3oool00`00
+0000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000008 at 3oool005T0oooo00<000000?oo
+o`3oool06 at 3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo0140oooo00<000000?oo
+o`3oool08P3oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo01P0oooo00<000000?oo
+o`3oool06 at 3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo01T0oooo00<00000
+0?ooo`3oool0103oool00`000000oooo0?ooo`0>0?ooo`050000003oool0oooo0?ooo`0000000`3o
+ool00`000000oooo0?ooo`0O0?ooo`00F at 3oool00`000000oooo0?ooo`0I0?ooo`030000003oool0
+oooo00<0oooo00D000000?ooo`3oool0oooo0000000D0?ooo`030000003oool0oooo01l0oooo0P00
+000X0?ooo`050000003oool0oooo0?ooo`0000006P3oool00`000000oooo0?ooo`0I0?ooo`040000
+003oool0oooo000000<0oooo00<000000?ooo`3oool06 at 3oool010000000oooo0?ooo`0000030?oo
+o`030000003oool0oooo00l0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`0O
+0?ooo`00E`3oool00`000000oooo0000000I0?ooo`030000003oool0000000D0oooo1000000F0?oo
+o`030000003oool0oooo0200oooo00<000000?ooo`3oool09 at 3oool4000001`0oooo00<000000?oo
+o`3oool05P3oool00`000000oooo000000020?ooo`050000003oool0oooo0?ooo`0000006 at 3oool0
+0`000000oooo000000020?ooo`@000004`3oool00`000000oooo000000030?ooo`030000003oool0
+oooo01l0oooo001H0?ooo`8000006P3oool2000000H0oooo00<000000?ooo`3oool04P3oool01 at 00
+0000oooo0?ooo`3oool0000001h0oooo00D000000?ooo`3oool0oooo0000000X0?ooo`030000003o
+ool0oooo01`0oooo00<000000?ooo`3oool05`3oool200000080oooo00D000000?ooo`3oool0oooo
+0000000J0?ooo`8000000`3oool00`000000oooo0?ooo`0?0?ooo`070000003oool0oooo0?ooo`00
+0000oooo000000030?ooo`030000003oool0oooo01l0oooo001I0?ooo`030000003oool0oooo01T0
+oooo00<000000?ooo`3oool0103oool400000180oooo0`00000P0?ooo`<00000:@3oool4000001P0
+oooo1 at 00000I0?ooo`040000003oool0oooo0?ooo`<00000703oool010000000oooo0?ooo`3oool4
+000000l0oooo0`0000030?ooo`<000008P3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0oooo
+P at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool001h0ooooo`00001900000003
+0000o`00000000000080000000 at 0003o000000000000003o0P0000001@000?l000000000o`000?l0
+000000<0003o1`00000001h0oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`050?oo
+o`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`040?oo
+o`030000003oool0oooo00<0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`020?oo
+o`030000003oool0oooo0080oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`3oool0
+00000280oooo00<000000?ooo`3oool05P3oool00`000000oooo0?ooo`0 at 0?ooo`030000003oool0
+oooo00d0oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`090?ooo`030000003oool0
+oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`050?ooo`030000003oool0
+oooo00D0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo00<0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`030?ooo`030000003oool0
+oooo0080oooo00D000000?ooo`3oool0oooo000000040?ooo`030000003oool0oooo00L0oooo00<0
+003o0?ooo`3oool00P3oool010000?l0oooo0?ooo`000?l20?ooo`050000o`3oool0003o0000o`3o
+ool00`000?l70?ooo`007P3oool00`000000oooo0?ooo`0i0?ooo`030000003oool0oooo0200oooo
+00<000000?ooo`3oool05 at 3oool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo02T0oooo
+00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo0200oooo
+00<000000?ooo`3oool05P3oool00`000000oooo0?ooo`060?ooo`030000o`3oool0oooo0080oooo
+00D0003o0?ooo`3oool0oooo0000o`020?ooo`050000o`3oool0003o0000o`3oool00P000?l80?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooodD0oooo00<0003o0?ooo`3oool00P3oool010000?l0
+oooo0?ooo`000?l20?ooo`040000o`3oool0003o0?ooo`@0003o203oool001h0oooo00<000000?oo
+o`3oool0o`3ooom50?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0003o0P3oool0
+1 at 000?l0oooo0000o`000?l0oooo00<0003o203oool001h0oooo00<000000?ooo`3oool0o`3ooom4
+0?ooo`030000o`3oool0oooo00<0oooo00 at 0003o0?ooo`3oool0003o0P3oool01 at 000?l0oooo0000
+o`000?l0oooo00<0003o203oool001h0oooo00<000000?ooo`3oool0o`3ooom40?ooo`030000o`3o
+ool0oooo0080oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`050000o`3oool0003o0000o`3o
+ool00`000?l80?ooo`007P3oool00`000000oooo0?ooo`3o0?oood<0oooo00<0003o0?ooo`3oool0
+0`3oool01 at 000?l0oooo0?ooo`3oool0003o0080oooo00D0003o0?ooo`000?l0003o0?ooo`020000
+o`T0oooo000N0?ooo`030000003oool0oooo0?l0oooo@`3oool00`000?l0oooo0?ooo`030?ooo`0<
+0000o`3oool0oooo0?ooo`000?l0oooo0000o`3oool0003o0?ooo`000?l0oooo0P000?l90?ooo`00
+7P3oool00`000000oooo0?ooo`3o0?oood<0oooo00<0003o0?ooo`3oool00P3oool01 at 000?l0oooo
+0?ooo`3oool0003o0080oooo00 at 0003o0?ooo`000?l0oooo10000?l90?ooo`007P3oool00`000000
+oooo0?ooo`3o0?oood80oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3oool0003o
+0080oooo00 at 0003o0?ooo`000?l0oooo10000?l90?ooo`007P3oool00`000000oooo0?ooo`3o0?oo
+od80oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3oool0003o0080oooo00 at 0003o
+0?ooo`000?l0oooo10000?l90?ooo`007P3oool00`000000oooo0?ooo`3o0?oood80oooo00<0003o
+0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3oool0003o0080oooo00D0003o0?ooo`000?l0003o
+0?ooo`030000o`T0oooo000N0?ooo`030000003oool0oooo0?l0oooo@@3oool00`000?l0oooo0?oo
+o`030?ooo`030000o`3oool0oooo0080oooo00<0003o0?ooo`000?l00P3oool20000o`040?ooo`00
+0?l0003o0000o`T0oooo000N0?ooo`030000003oool0oooo0?l0oooo@@3oool00`000?l0oooo0?oo
+o`030?ooo`030000o`3oool0oooo0080oooo00P0003o0?ooo`000?l0oooo0000o`3oool0003o0?oo
+o`<0003o2 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooom10?ooo`030000o`3oool0oooo00<0
+oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`040000o`3oool0003o0?ooo`@0003o2P3oool0
+01h0oooo00<000000?ooo`3oool0o`3ooom00?ooo`030000o`3oool0oooo00 at 0oooo00D0003o0?oo
+o`3oool0oooo0000o`020?ooo`040000o`3oool0003o0?ooo`@0003o2P3oool001h0oooo00<00000
+0?ooo`3oool0o`3ooom00?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3oool00P3oool0
+1`000?l0oooo0?ooo`000?l0oooo0000o`3oool010000?l:0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?oood00oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`050000o`3o
+ool0oooo0000o`3oool00P000?l0103oool0003o0000o`000?l:0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooocl0oooo00<0003o0?ooo`3oool0103oool01 at 000?l0oooo0?ooo`3oool0003o0080
+oooo00H0003o0?ooo`000?l0oooo0000o`3oool30000o`X0oooo000N0?ooo`030000003oool0oooo
+0?l0oooo?`3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo00T0003o0?oo
+o`3oool0003o0?ooo`000?l0oooo0000o`3oool00`000?l:0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?oooch0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`020?ooo`070000o`3o
+ool0oooo0000o`3oool0003o0?ooo`050000o`X0oooo000N0?ooo`030000003oool0oooo0?l0oooo
+?P3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080oooo00L0003o0?ooo`3oool0
+003o0?ooo`000?l0oooo00 at 0003o2`3oool001h0oooo00<000000?ooo`3oool0o`3oooln0?ooo`03
+0000o`3oool0oooo00 at 0oooo00D0003o0?ooo`3oool0oooo0000o`030?ooo`040000o`3oool0003o
+0?ooo`@0003o2`3oool001h0oooo00<000000?ooo`3oool0o`3ooolm0?ooo`030000o`3oool0oooo
+00 at 0oooo00<0003o0?ooo`3oool00P3oool010000?l0oooo0?ooo`3oool20000o`80oooo10000?l;
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooocd0oooo00<0003o0?ooo`3oool0103oool00`00
+0?l0oooo0?ooo`020?ooo`090000o`3oool0oooo0000o`3oool0003o0?ooo`000?l0oooo00<0003o
+2`3oool001h0oooo00<000000?ooo`3oool0o`3ooolm0?ooo`030000o`3oool0oooo00 at 0oooo00<0
+003o0?ooo`3oool00P3oool02 at 000?l0oooo0?ooo`000?l0oooo0000o`3oool0003o0?ooo`030000
+o`/0oooo000N0?ooo`030000003oool0oooo0?l0oooo?03oool00`000?l0oooo0?ooo`040?ooo`03
+0000o`3oool0oooo0080oooo00X0003o0?ooo`3oool0oooo0000o`3oool0003o0?ooo`000?l0oooo
+0`000?l;0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooc`0oooo00<0003o0?ooo`3oool0103o
+ool00`000?l0oooo0?ooo`020?ooo`080000o`3oool0oooo0?ooo`000?l0oooo0000o`3oool50000
+o`/0oooo000N0?ooo`030000003oool0oooo0?l0oooo?03oool00`000?l0oooo0?ooo`040?ooo`03
+0000o`3oool0oooo0080oooo00P0003o0?ooo`3oool0oooo0000o`3oool0003o0?ooo`D0003o2`3o
+ool001h0oooo00<000000?ooo`3oool0o`3ooolk0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o
+0?ooo`3oool00`3oool010000?l0oooo0?ooo`3oool20000o`80oooo10000?l<0?ooo`007P3oool0
+0`000000oooo0?ooo`3o0?oooc/0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`02
+0?ooo`0:0000o`3oool0oooo0?ooo`000?l0oooo0000o`3oool0003o0?ooo`<0003o303oool001h0
+oooo00<000000?ooo`3oool0o`3ooolj0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3o
+ool00P3oool02P000?l0oooo0?ooo`3oool0003o0?ooo`000?l0oooo0000o`3oool30000o``0oooo
+000N0?ooo`030000003oool0oooo0?l0oooo>P3oool00`000?l0oooo0?ooo`050?ooo`030000o`3o
+ool0oooo0080oooo00X0003o0?ooo`3oool0oooo0000o`3oool0003o0?ooo`000?l0oooo0`000?l<
+0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooocT0oooo00<0003o0?ooo`3oool01 at 3oool00`00
+0?l0oooo0?ooo`030?ooo`080000o`3oool0oooo0?ooo`000?l0oooo0000o`3oool20000o`030?oo
+o`000?l0003o00`0oooo000N0?ooo`030000003oool0oooo0?l0oooo>@3oool00`000?l0oooo0?oo
+o`050?ooo`030000o`3oool0oooo0080oooo00<0003o0?ooo`3oool00P3oool010000?l0oooo0000
+o`3oool50000o``0oooo000N0?ooo`030000003oool0oooo0?l0oooo>@3oool00`000?l0oooo0?oo
+o`050?ooo`030000o`3oool0oooo0080oooo00L0003o0?ooo`3oool0oooo0000o`3oool0003o0080
+oooo1 at 000?l<0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooocP0oooo00<0003o0?ooo`3oool0
+1 at 3oool00`000?l0oooo0?ooo`030?ooo`070000o`3oool0oooo0?ooo`000?l0oooo0000o`020?oo
+o`@0003o3 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolh0?ooo`030000o`3oool0oooo00D0
+oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`020?ooo`060000o`3oool0003o0?oo
+o`000?l0oooo0`000?l=0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooocL0oooo00<0003o0?oo
+o`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0oooo0080oooo00H0003o0?oo
+o`000?l0oooo0000o`3oool30000o`d0oooo000N0?ooo`030000003oool0oooo0?l0oooo=`3oool0
+0`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0oooo0000
+o`020?ooo`040000o`3oool0003o0?ooo`<0003o3 at 3oool001h0oooo00<000000?ooo`3oool0o`3o
+oolf0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?oo
+o`3oool0003o0080oooo00D0003o0?ooo`000?l0003o0?ooo`020000o`d0oooo000N0?ooo`030000
+003oool0oooo0?l0oooo=P3oool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo0080oooo
+00<0003o0?ooo`3oool00P3oool00`000?l0oooo0000o`020?ooo`80003o00<0oooo0000o`000?l0
+3 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooole0?ooo`030000o`3oool0oooo00H0oooo00<0
+003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0003o0080oooo1 at 00
+0?l=0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooocD0oooo00<0003o0?ooo`3oool01P3oool0
+0`000?l0oooo0?ooo`030?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool010000?l0oooo0000
+o`3oool40000o`d0oooo000N0?ooo`030000003oool0oooo0?l0oooo=03oool00`000?l0oooo0?oo
+o`070?ooo`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`040000
+o`3oool0003o0?ooo`<0003o3P3oool001h0oooo00<000000?ooo`3oool0o`3ooold0?ooo`030000
+o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`070000
+o`3oool0oooo0000o`3oool0003o0?ooo`030000o`h0oooo000N0?ooo`030000003oool0oooo0?l0
+oooo<`3oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3o
+ool00P3oool01`000?l0oooo0?ooo`000?l0oooo0000o`3oool00`000?l>0?ooo`007P3oool00`00
+0000oooo0?ooo`3o0?oooc<0oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?oo
+o`050000o`3oool0oooo0?ooo`000?l00P3oool00`000?l0oooo0?ooo`020000o`030?ooo`000?l0
+003o00h0oooo000N0?ooo`030000003oool0oooo0?l0oooo<P3oool00`000?l0oooo0?ooo`070?oo
+o`030000o`3oool0oooo00 at 0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0
+oooo0080003o00<0oooo0000o`000?l03P3oool001h0oooo00<000000?ooo`3oool0o`3ooolb0?oo
+o`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?oo
+o`040000o`3oool0oooo0000o`80oooo1 at 000?l>0?ooo`007P3oool00`000000oooo0?ooo`3o0?oo
+oc40oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo
+0080oooo00L0003o0?ooo`3oool0003o0?ooo`000?l0oooo00 at 0003o3P3oool001h0oooo00<00000
+0?ooo`3oool0o`3ooola0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool0103oool0
+1 at 000?l0oooo0?ooo`3oool0003o00<0oooo00 at 0003o0?ooo`000?l0oooo10000?l>0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?oooc00oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?oo
+o`040?ooo`050000o`3oool0oooo0?ooo`000?l00`3oool010000?l0oooo0000o`3oool30000o`l0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo<03oool00`000?l0oooo0?ooo`080?ooo`030000
+o`3oool0oooo00<0oooo00<0003o0?ooo`3oool00P3oool010000?l0oooo0?ooo`000?l20?ooo`03
+0000o`3oool0003o0080003o3`3oool001h0oooo00<000000?ooo`3oool0o`3oool_0?ooo`030000
+o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`020?ooo`040000
+o`3oool0oooo0000o`80oooo0P000?l00`3oool0003o0000o`0?0?ooo`007P3oool00`000000oooo
+0?ooo`3o0?ooobl0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`040?ooo`030000
+o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0003o0P3oool20000o`030?ooo`000?l0003o00l0
+oooo000N0?ooo`030000003oool0oooo0?l0oooo;P3oool00`000?l0oooo0?ooo`080?ooo`030000
+o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool00P3oool020000?l0oooo0?ooo`3oool0003o0?oo
+o`000?l0oooo10000?l?0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobd0oooo00<0003o0?oo
+o`3oool02 at 3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080oooo00P0003o0?oo
+o`3oool0oooo0000o`3oool0003o0?ooo`@0003o3`3oool001h0oooo00<000000?ooo`3oool0o`3o
+ool]0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?oo
+o`020?ooo`080000o`3oool0oooo0?ooo`000?l0oooo0000o`3oool40000o`l0oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo;03oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo00D0
+oooo00<0003o0?ooo`3oool00P3oool010000?l0oooo0?ooo`000?l20?ooo`030000o`3oool0003o
+00<0003o3`3oool001h0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030000o`3oool0oooo00T0
+oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0?oo
+o`000?l00P3oool00`000?l0oooo0000o`020000oa00oooo000N0?ooo`030000003oool0oooo0?l0
+oooo:`3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3o
+ool00P3oool01 at 000?l0oooo0?ooo`3oool0003o0080oooo0P000?l00`3oool0003o0000o`0 at 0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooobX0oooo00<0003o0?ooo`3oool02P3oool00`000?l0
+oooo0?ooo`050?ooo`030000o`3oool0oooo0080oooo00X0003o0?ooo`3oool0oooo0000o`3oool0
+003o0?ooo`000?l0oooo0P000?l at 0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobX0oooo00<0
+003o0?ooo`3oool02P3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo00<0oooo00P0
+003o0?ooo`3oool0oooo0000o`3oool0003o0?ooo`@0003o403oool001h0oooo00<000000?ooo`3o
+ool0o`3ooolY0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool0103oool00`000?l0
+oooo0?ooo`020?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`000?l0oooo10000?l at 0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooobP0oooo00<0003o0?ooo`3oool02`3oool00`000?l0
+oooo0?ooo`050?ooo`030000o`3oool0oooo0080oooo00D0003o0?ooo`3oool0oooo0000o`020?oo
+o`030000o`3oool0003o00<0003o403oool001h0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`03
+0000o`3oool0oooo00`0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`030?ooo`05
+0000o`3oool0oooo0?ooo`000?l00P3oool00`000?l0oooo0000o`030000oa00oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo9`3oool00`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00D0
+oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3oool0003o0080oooo00<0003o0?oo
+o`000?l00P000?lA0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooobH0oooo00<0003o0?ooo`3o
+ool0303oool00`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo0080oooo00<0003o0?ooo`3o
+ool00P3oool01P000?l0oooo0000o`3oool0003o0?ooo`80003o4 at 3oool001h0oooo00<000000?oo
+o`3oool0o`3ooolU0?ooo`030000o`3oool0oooo00`0oooo00<0003o0?ooo`3oool01P3oool00`00
+0?l0oooo0?ooo`020?ooo`030000o`3oool0oooo0080oooo00H0003o0?ooo`000?l0oooo0000o`3o
+ool20000oa40oooo000N0?ooo`030000003oool0oooo0?l0oooo9 at 3oool00`000?l0oooo0?ooo`0<
+0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`02
+0?ooo`060000o`3oool0003o0?ooo`000?l0oooo0P000?lA0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?ooob at 0oooo00<0003o0?ooo`3oool0303oool00`000?l0oooo0?ooo`060?ooo`030000o`3o
+ool0oooo00<0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0003o00<0003o
+4 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolS0?ooo`030000o`3oool0oooo00d0oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0oooo0080oooo00D0
+003o0?ooo`3oool0003o0?ooo`040000oa40oooo000N0?ooo`030000003oool0oooo0?l0oooo8P3o
+ool00`000?l0oooo0?ooo`0=0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00`3o
+ool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0000o`3oool010000?lA0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooob40oooo00<0003o0?ooo`3oool03P3oool00`000?l0oooo0?oo
+o`060?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0000
+o`020?ooo`@0003o4 at 3oool001h0oooo00<000000?ooo`3oool0o`3ooolP0?ooo`030000o`3oool0
+oooo00h0oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`050000o`3oool0
+oooo0?ooo`000?l00P3oool010000?l0oooo0000o`3oool20000oa80oooo000N0?ooo`030000003o
+ool0oooo0?l0oooo803oool00`000?l0oooo0?ooo`0>0?ooo`030000o`3oool0oooo00H0oooo00<0
+003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`070000o`3oool0oooo0000o`3oool0
+003o0?ooo`020000oa80oooo000N0?ooo`030000003oool0oooo0?l0oooo7`3oool00`000?l0oooo
+0?ooo`0>0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo
+0?ooo`020?ooo`070000o`3oool0oooo0000o`3oool0003o0?ooo`020000oa80oooo000N0?ooo`03
+0000003oool0oooo0?l0oooo7P3oool00`000?l0oooo0?ooo`0?0?ooo`030000o`3oool0oooo00L0
+oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0000
+o`3oool010000?lB0?ooo`007P3oool00`000000oooo0?ooo`3o0?oooad0oooo00<0003o0?ooo`3o
+ool03`3oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo00 at 0oooo00D0003o0?ooo`3o
+ool0oooo0000o`030?ooo`030000o`3oool0003o00<0003o4P3oool001h0oooo00<000000?ooo`3o
+ool0o`3ooolL0?ooo`030000o`3oool0oooo0100oooo00<0003o0?ooo`3oool01`3oool00`000?l0
+oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0003o0P3oool40000
+oa80oooo000N0?ooo`030000003oool0oooo0?l0oooo6`3oool00`000?l0oooo0?ooo`0 at 0?ooo`03
+0000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`07
+0000o`3oool0oooo0000o`3oool0003o0?ooo`030000oa80oooo000N0?ooo`030000003oool0oooo
+0?l0oooo6P3oool00`000?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?oo
+o`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`070000o`3oool0oooo0000o`3oool0003o0?oo
+o`020000oa<0oooo000N0?ooo`030000003oool0oooo0?l0oooo603oool20000oa<0oooo00<0003o
+0?ooo`3oool0203oool00`000?l0oooo0?ooo`040?ooo`050000o`3oool0oooo0?ooo`000?l00`3o
+ool010000?l0oooo0000o`3oool20000oa<0oooo000N0?ooo`030000003oool0oooo0?l0oooo5`3o
+ool00`000?l0oooo0?ooo`0C0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool00`3o
+ool00`000?l0oooo0?ooo`020?ooo`080000o`3oool0oooo0?ooo`000?l0oooo0000o`3oool20000
+oa<0oooo000N0?ooo`030000003oool0oooo0?l0oooo5P3oool00`000?l0oooo0?ooo`0C0?ooo`03
+0000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`06
+0000o`3oool0oooo0?ooo`000?l0oooo10000?lC0?ooo`007P3oool00`000000oooo0?ooo`3o0?oo
+oaD0oooo00<0003o0?ooo`3oool0503oool00`000?l0oooo0?ooo`080?ooo`030000o`3oool0oooo
+00 at 0oooo00<0003o0?ooo`3oool00P3oool010000?l0oooo0?ooo`000?l20?ooo`@0003o4`3oool0
+01h0oooo00<000000?ooo`3oool0o`3ooolD0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o0?oo
+o`3oool02 at 3oool00`000?l0oooo0?ooo`040?ooo`050000o`3oool0oooo0?ooo`000?l00`3oool0
+0`000?l0oooo0?ooo`040000oa<0oooo000N0?ooo`030000003oool0oooo0?l0oooo4P3oool20000
+oaL0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo
+0080oooo00P0003o0?ooo`3oool0oooo0000o`3oool0003o0?ooo`<0003o4`3oool001h0oooo00<0
+00000?ooo`3oool0o`3ooolA0?ooo`030000o`3oool0oooo01H0oooo00<0003o0?ooo`3oool02 at 3o
+ool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080oooo00P0003o0?ooo`3oool0oooo
+0000o`3oool0003o0?ooo`<0003o4`3oool001h0oooo00<000000?ooo`3oool0o`3oool at 0?ooo`03
+0000o`3oool0oooo01L0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`040?ooo`03
+0000o`3oool0oooo0080oooo00P0003o0?ooo`3oool0oooo0000o`3oool0003o0?ooo`80003o503o
+ool001h0oooo00<000000?ooo`3oool0o`3oool>0?ooo`80003o6 at 3oool00`000?l0oooo0?ooo`09
+0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool00P3oool010000?l0oooo0?ooo`00
+0?l20?ooo`040000o`3oool0003o0000oa at 0oooo000N0?ooo`030000003oool0oooo0?l0oooo3 at 3o
+ool00`000?l0oooo0?ooo`0H0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool0103o
+ool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool40000oa at 0oooo
+000N0?ooo`030000003oool0oooo0?l0oooo303oool00`000?l0oooo0?ooo`0I0?ooo`030000o`3o
+ool0oooo00X0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`020?ooo`050000o`3o
+ool0oooo0?ooo`000?l00P3oool40000oa at 0oooo000N0?ooo`030000003oool0oooo0?l0oooo2P3o
+ool20000oa/0oooo00<0003o0?ooo`3oool02P3oool00`000?l0oooo0?ooo`050?ooo`030000o`3o
+ool0oooo0080oooo00P0003o0?ooo`3oool0oooo0000o`3oool0003o0?ooo`<0003o503oool001h0
+oooo00<000000?ooo`3oool0o`3oool80?ooo`80003o7 at 3oool00`000?l0oooo0?ooo`0:0?ooo`03
+0000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool00`3oool020000?l0oooo0?ooo`3oool0003o
+0?ooo`000?l0oooo0`000?lD0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`H0oooo0P000?lN
+0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`02
+0?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool010000?l0oooo0000o`000?lE0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooo`@0oooo0P000?lO0?ooo`030000o`3oool0oooo00/0oooo00<0
+003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0?ooo`000?l0
+0P3oool010000?l0oooo0000o`000?lE0?ooo`007P3oool00`000000oooo0?ooo`3o0?ooo`40oooo
+0`000?lQ0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo
+0?ooo`020?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool010000?l0oooo0000o`000?lE0?oo
+o`007P3oool00`000000oooo0?ooo`3n0?ooo`80003o8`3oool00`000?l0oooo0?ooo`0;0?ooo`03
+0000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3oool0003o
+0080oooo10000?lE0?ooo`007P3oool00`000000oooo0?ooo`3l0?ooo`80003o903oool00`000?l0
+oooo0?ooo`0<0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool00P3oool00`000?l0
+oooo0?ooo`020?ooo`040000o`3oool0003o0?ooo`<0003o5 at 3oool001h0oooo00<000000?ooo`3o
+ool0nP3oool20000obH0oooo00<0003o0?ooo`3oool02`3oool00`000?l0oooo0?ooo`060?ooo`03
+0000o`3oool0oooo0080oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0003o
+0080003o5 at 3oool001h0oooo00<000000?ooo`3oool0n03oool20000obL0oooo00<0003o0?ooo`3o
+ool0303oool00`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3o
+ool0oooo0000o`020?ooo`040000o`3oool0003o0000oaH0oooo000N0?ooo`030000003oool0oooo
+0?D0oooo0`000?lX0?ooo`030000o`3oool0oooo00d0oooo00<0003o0?ooo`3oool01 at 3oool00`00
+0?l0oooo0?ooo`030?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool010000?l0oooo0000o`00
+0?lF0?ooo`007P3oool00`000000oooo0?ooo`3b0?ooo`<0003o:P3oool00`000?l0oooo0?ooo`0=
+0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3o
+ool0003o0080oooo00 at 0003o0?ooo`000?l0003o5P3oool001h0oooo00<000000?ooo`3oool0kP3o
+ool40000obd0oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`060?ooo`030000o`3o
+ool0oooo0080oooo00<0003o0?ooo`3oool00P3oool01 at 000?l0oooo0?ooo`000?l0oooo0080003o
+5P3oool001h0oooo00<000000?ooo`3oool0j`3oool30000oc00oooo00<0003o0?ooo`3oool03 at 3o
+ool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0oooo
+0000o`020?ooo`030000o`3oool0003o0080003o5P3oool001h0oooo00<000000?ooo`3oool0j03o
+ool30000oc80oooo00<0003o0?ooo`3oool03P3oool00`000?l0oooo0?ooo`060?ooo`030000o`3o
+ool0oooo00<0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0003o0080003o
+5P3oool001h0oooo00<000000?ooo`3oool0i03oool40000ocD0oooo00<0003o0?ooo`3oool03 at 3o
+ool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0oooo
+0000o`020?ooo`040000o`3oool0003o0000oaL0oooo000N0?ooo`030000003oool0oooo0>40oooo
+0`000?lh0?ooo`030000o`3oool0oooo00h0oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo
+0?ooo`020?ooo`030000o`3oool0oooo0080oooo00D0003o0?ooo`3oool0003o0?ooo`020000oaL0
+oooo000N0?ooo`030000003oool0oooo0=d0oooo10000?lj0?ooo`030000o`3oool0oooo00l0oooo
+00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo
+00D0003o0?ooo`3oool0003o0?ooo`020000oaL0oooo000N0?ooo`030000003oool0oooo0=T0oooo
+10000?lm0?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo
+0?ooo`030?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool00`000?l0oooo0?ooo`020000oaL0
+oooo000N0?ooo`030000003oool0oooo0=<0oooo1P000?m00?ooo`030000o`3oool0oooo0100oooo
+00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`050000o`3oool0oooo0?ooo`00
+0?l00P3oool00`000?l0oooo0000o`020000oaL0oooo000N0?ooo`030000003oool0oooo0<d0oooo
+1P000?m50?ooo`030000o`3oool0oooo0100oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo
+0?ooo`030?ooo`030000o`3oool0oooo0080oooo00D0003o0?ooo`3oool0003o0?ooo`030000oaL0
+oooo000N0?ooo`030000003oool0oooo0<H0oooo1`000?m:0?ooo`030000o`3oool0oooo0140oooo
+00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo
+00D0003o0?ooo`3oool0003o0?ooo`020000oaP0oooo000N0?ooo`030000003oool0oooo0;h0oooo
+20000?m at 0?ooo`030000o`3oool0oooo0140oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo
+0?ooo`030?ooo`030000o`3oool0oooo0080oooo00D0003o0?ooo`3oool0003o0?ooo`020000oaP0
+oooo000N0?ooo`030000003oool0oooo0;P0oooo1P000?mG0?ooo`030000o`3oool0oooo0180oooo
+00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`040?ooo`050000o`3oool0oooo0?ooo`00
+0?l00P3oool00`000?l0oooo0?ooo`020000oaP0oooo000N0?ooo`030000003oool0oooo0:h0oooo
+2P000?mL0?ooo`030000o`3oool0oooo0180oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo
+0?ooo`030?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0003o0P3oool20000oaP0
+oooo000N0?ooo`030000003oool0oooo0:00oooo3P000?mU0?ooo`030000o`3oool0oooo01<0oooo
+00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo
+00D0003o0?ooo`3oool0003o0?ooo`030000oaP0oooo000N0?ooo`030000003oool0oooo08h0oooo
+4P000?mb0?ooo`030000o`3oool0oooo01<0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo
+0?ooo`040?ooo`030000o`3oool0oooo0080oooo00D0003o0?ooo`3oool0003o0?ooo`030000oaP0
+oooo000N0?ooo`030000003oool0oooo06l0oooo7`000?n30?ooo`030000o`3oool0oooo01 at 0oooo
+00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo00<0oooo
+00D0003o0?ooo`3oool0003o0?ooo`020000oaT0oooo000N0?ooo`030000003oool0oooo05h0oooo
+4 at 000?nP0?ooo`80003o5P3oool00`000?l0oooo0?ooo`080?ooo`030000o`3oool0oooo00 at 0oooo
+00<0003o0?ooo`3oool00P3oool01P000?l0oooo0?ooo`3oool0003o0?ooo`80003o6 at 3oool001h0
+oooo00<000000?ooo`3oool0703ooom20000ok00oooo00<0003o0?ooo`3oool05 at 3oool00`000?l0
+oooo0?ooo`090?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool00P3oool010000?l0
+oooo0?ooo`000?l20?ooo`80003o6 at 3oool001h0oooo7`000?oa0?ooo`030000o`3oool0oooo01H0
+oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080
+oooo00D0003o0?ooo`3oool0003o0?ooo`030000oaT0oooo000N0?ooo`030000003oool0oooo0?l0
+oooo3 at 3oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3o
+ool0103oool00`000?l0oooo0?ooo`030?ooo`050000o`3oool0oooo0000o`3oool00`000?lI0?oo
+o`007P3oool00`000000oooo0?ooo`3o0?ooo``0oooo00<0003o0?ooo`3oool05`3oool00`000?l0
+oooo0?ooo`090?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0
+oooo0?ooo`000?l0oooo00<0003o6 at 3oool001h0oooo00<000000?ooo`3oool0o`3oool:0?ooo`80
+003o6 at 3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3o
+ool00P3oool01P000?l0oooo0?ooo`3oool0003o0?ooo`<0003o6 at 3oool001h0oooo00<000000?oo
+o`3oool0o`3oool80?ooo`80003o6`3oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo
+00 at 0oooo00<0003o0?ooo`3oool00`3oool010000?l0oooo0?ooo`000?l20?ooo`80003o6P3oool0
+01<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`3o0?ooo`L0oooo00<0003o0?oo
+o`3oool06P3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?oo
+o`3oool00`3oool010000?l0oooo0?ooo`000?l20?ooo`80003o6P3oool001<0oooo00<000000?oo
+o`3oool0203oool00`000000oooo0?ooo`3o0?ooo`D0oooo0P000?lL0?ooo`030000o`3oool0oooo
+00/0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`030?ooo`050000o`3oool0oooo
+0000o`3oool00`000?lJ0?ooo`004`3oool00`000000oooo0?ooo`080?ooo`<00000o`3oool30?oo
+o`80003o7P3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?oo
+o`3oool00`3oool01 at 000?l0oooo0?ooo`000?l0oooo00<0003o6P3oool001<0oooo00<000000?oo
+o`3oool0203oool00`000000oooo0?ooo`3o0?ooo`80oooo00<0003o0?ooo`3oool07 at 3oool00`00
+0?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool00`3oool01P00
+0?l0oooo0?ooo`3oool0003o0?ooo`<0003o6P3oool00140oooo00<000000?ooo`0000002P3oool0
+0`000000oooo0?ooo`3o0?ooo`80003o803oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0
+oooo00D0oooo00<0003o0?ooo`3oool00`3oool01P000?l0oooo0?ooo`3oool0003o0?ooo`<0003o
+6P3oool00180oooo0P00000:0?ooo`030000003oool0oooo0?d0oooo0P000?lQ0?ooo`030000o`3o
+ool0oooo00/0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`030?ooo`040000o`3o
+ool0oooo0000o`80oooo0P000?lK0?ooo`004`3oool00`000000oooo0?ooo`080?ooo`030000003o
+ool0oooo0?/0oooo0P000?lR0?ooo`030000o`3oool0oooo00`0oooo00<0003o0?ooo`3oool0103o
+ool00`000?l0oooo0?ooo`040?ooo`040000o`3oool0oooo0000o`80oooo0P000?lK0?ooo`007P3o
+ool00`000000oooo0?ooo`3i0?ooo`80003o903oool00`000?l0oooo0?ooo`0;0?ooo`030000o`3o
+ool0oooo00D0oooo00<0003o0?ooo`3oool00`3oool01P000?l0oooo0?ooo`3oool0003o0?ooo`<0
+003o6`3oool001h0oooo00<000000?ooo`3oool0m`3oool20000obD0oooo00<0003o0?ooo`3oool0
+303oool00`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo00<0oooo00H0003o0?ooo`3oool0
+oooo0000o`3oool30000oa/0oooo000N0?ooo`030000003oool0oooo0?D0oooo0P000?lW0?ooo`03
+0000o`3oool0oooo00`0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`030?ooo`06
+0000o`3oool0oooo0?ooo`000?l0oooo0`000?lK0?ooo`007P3oool00`000000oooo0?ooo`3c0?oo
+o`80003o:03oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?oo
+o`3oool0103oool010000?l0oooo0?ooo`000?l20?ooo`<0003o6`3oool001h0oooo00<000000?oo
+o`3oool0l03oool30000obX0oooo00<0003o0?ooo`3oool0303oool00`000?l0oooo0?ooo`050?oo
+o`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`80003o703oool0
+01h0oooo00<000000?ooo`3oool0k at 3oool30000ob`0oooo00<0003o0?ooo`3oool0303oool00`00
+0?l0oooo0?ooo`060?ooo`030000o`3oool0oooo00<0oooo00H0003o0?ooo`3oool0oooo0000o`3o
+ool30000oa`0oooo000N0?ooo`030000003oool0oooo0>/0oooo0P000?l^0?ooo`030000o`3oool0
+oooo00d0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?ooo`060000o`3oool0
+oooo0?ooo`000?l0oooo0`000?lL0?ooo`007P3oool00`000000oooo0?ooo`3X0?ooo`<0003o;`3o
+ool00`000?l0oooo0?ooo`0>0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool0103o
+ool01P000?l0oooo0?ooo`3oool0003o0?ooo`<0003o703oool001h0oooo00<000000?ooo`3oool0
+i at 3oool30000oc80oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`060?ooo`030000
+o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`<0003o703oool001h0oooo
+00<000000?ooo`3oool0h`3oool20000oc at 0oooo00<0003o0?ooo`3oool03P3oool00`000?l0oooo
+0?ooo`060?ooo`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`<0
+003o703oool001h0oooo00<000000?ooo`3oool0h03oool30000ocD0oooo00<0003o0?ooo`3oool0
+3`3oool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo00<0oooo00D0003o0?ooo`3oool0
+oooo0000o`020?ooo`<0003o703oool001h0oooo00<000000?ooo`3oool0g at 3oool30000ocL0oooo
+00<0003o0?ooo`3oool03`3oool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo00<0oooo
+00<0003o0?ooo`3oool00P3oool00`000?l0oooo0000o`020000oad0oooo000N0?ooo`030000003o
+ool0oooo0=T0oooo10000?li0?ooo`030000o`3oool0oooo0100oooo00<0003o0?ooo`3oool01P3o
+ool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo00<0003o0?ooo`000?l00P00
+0?lM0?ooo`007P3oool200000=@0oooo1P000?lm0?ooo`030000o`3oool0oooo00l0oooo00<0003o
+0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo00<0003o
+0?ooo`000?l00P000?lM0?ooo`007P3oool00`000000oooo0?ooo`3=0?ooo`H0003o at P3oool00`00
+0?l0oooo0?ooo`0 at 0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00`3oool01 at 00
+0?l0oooo0?ooo`3oool0003o0080oooo0`000?lM0?ooo`007P3oool00`000000oooo0?ooo`380?oo
+o`D0003oA`3oool00`000?l0oooo0?ooo`0 at 0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?oo
+o`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0oooo00<0003o7 at 3oool001h0
+oooo00<000000?ooo`3oool0``3oool50000od/0oooo00<0003o0?ooo`3oool04 at 3oool00`000?l0
+oooo0?ooo`070?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3oool00P3oool00`000?l0
+oooo0?ooo`030000oad0oooo000N0?ooo`030000003oool0oooo0;/0oooo20000?m?0?ooo`030000
+o`3oool0oooo0140oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`030000
+o`3oool0oooo0080oooo00D0003o0?ooo`000?l0oooo0000o`0N0?ooo`007P3oool00`000000oooo
+0?ooo`2a0?ooo`X0003oEP3oool00`000?l0oooo0?ooo`0B0?ooo`030000o`3oool0oooo00P0oooo
+00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0003o0080003o
+7P3oool001h0oooo00<000000?ooo`3oool0Z`3oool60000oel0oooo00<0003o0?ooo`3oool04P3o
+ool00`000?l0oooo0?ooo`080?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3oool00P3o
+ool00`000?l0oooo0?ooo`030000oah0oooo000N0?ooo`030000003oool0oooo0:00oooo2`000?mT
+0?ooo`030000o`3oool0oooo01<0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`03
+0?ooo`030000o`3oool0oooo0080oooo00<0003o0?ooo`3oool00`000?lN0?ooo`007P3oool00`00
+0000oooo0?ooo`2>0?oooa80003oKP3oool00`000?l0oooo0?ooo`0C0?ooo`030000o`3oool0oooo
+00T0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0oooo
+00<0003o7P3oool001h0oooo00<000000?ooo`3oool0O at 3ooolA0000ogl0oooo00<0003o0?ooo`3o
+ool0503oool00`000?l0oooo0?ooo`080?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3o
+ool00P3oool00`000?l0oooo0?ooo`030000oah0oooo000N0?ooo`030000003oool0oooo06l0oooo
+3P000?n?0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo
+0?ooo`030?ooo`030000o`3oool0oooo0080oooo00D0003o0?ooo`3oool0003o0?ooo`020000oah0
+oooo000N0?ooo`030000003oool0oooo04X0oooo9 at 000?nL0?ooo`030000o`3oool0oooo01D0oooo
+00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo0080oooo
+00H0003o0?ooo`3oool0003o0?ooo`000?lO0?ooo`007P3oool00`000000oooo0?ooo`0L0?ooobh0
+003o`03oool00`000?l0oooo0?ooo`0E0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3o
+ool0103oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0oooo00<0003o7`3oool001h0oooo
+7`000?o/0?ooo`80003o603oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo00 at 0oooo
+00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`030000oal0oooo000N0?ooo`030000003o
+ool0oooo0?l0oooo203oool00`000?l0oooo0?ooo`0G0?ooo`030000o`3oool0oooo00X0oooo00<0
+003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`020?ooo`040000o`3oool0oooo0?ooo`<0003o
+7`3oool001h0oooo00<000000?ooo`3oool0o`3oool70?ooo`030000o`3oool0oooo01P0oooo00<0
+003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080oooo00 at 0
+003o0?ooo`3oool0oooo0`000?lO0?ooo`007P3oool200000?l0oooo1`3oool00`000?l0oooo0?oo
+o`0H0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?oo
+o`020?ooo`050000o`3oool0oooo0000o`3oool00P000?lO0?ooo`007P3oool00`000000oooo0?oo
+o`3o0?ooo`@0oooo0P000?lK0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool0103o
+ool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0000o`3oool00P000?lO0?ooo`007P3o
+ool00`000000oooo0?ooo`3o0?ooo`<0oooo00<0003o0?ooo`3oool06P3oool00`000?l0oooo0?oo
+o`0:0?ooo`030000o`3oool0oooo00D0oooo00D0003o0?ooo`3oool0oooo0000o`030?ooo`040000
+o`3oool0003o0000oal0oooo000N0?ooo`030000003oool0oooo0?l0oooo0P3oool00`000?l0oooo
+0?ooo`0K0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo
+0?ooo`020?ooo`070000o`3oool0oooo0?ooo`000?l0oooo0000o`0P0?ooo`007P3oool00`000000
+oooo0?ooo`3o0?ooo`80003o7 at 3oool00`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00 at 0
+oooo00<0003o0?ooo`3oool00P3oool010000?l0oooo0?ooo`3oool30000ob00oooo000N0?ooo`03
+0000003oool0oooo0?h0oooo00<0003o0?ooo`3oool07 at 3oool00`000?l0oooo0?ooo`0:0?ooo`03
+0000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool00P3oool01 at 000?l0oooo0?ooo`000?l0oooo
+0080003o803oool001h0oooo00<000000?ooo`3oool0o03oool20000oal0oooo00<0003o0?ooo`3o
+ool02`3oool00`000?l0oooo0?ooo`050?ooo`050000o`3oool0oooo0?ooo`000?l00`3oool01000
+0?l0oooo0000o`000?lP0?ooo`007P3oool00`000000oooo0?ooo`3j0?ooo`80003o8 at 3oool00`00
+0?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00D0oooo00D0003o0?ooo`3oool0oooo0000o`03
+0?ooo`040000o`3oool0003o0000ob00oooo000N0?ooo`030000003oool0oooo0?T0oooo00<0003o
+0?ooo`3oool0803oool00`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00D0oooo00<0003o
+0?ooo`3oool00P3oool01P000?l0oooo0?ooo`3oool0003o0?ooo`80003o803oool001h0oooo00<0
+00000?ooo`3oool0m`3oool20000ob80oooo00<0003o0?ooo`3oool0303oool00`000?l0oooo0?oo
+o`050?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0003o0P3oool20000ob00oooo
+000N0?ooo`030000003oool0oooo0?D0oooo0P000?lT0?ooo`030000o`3oool0oooo00/0oooo00<0
+003o0?ooo`3oool01P3oool01 at 000?l0oooo0?ooo`3oool0003o00<0oooo00<0003o0?ooo`3oool0
+0P000?lP0?ooo`007P3oool00`000000oooo0?ooo`3c0?ooo`80003o9 at 3oool00`000?l0oooo0?oo
+o`0<0?ooo`030000o`3oool0oooo00H0oooo00D0003o0?ooo`3oool0oooo0000o`030?ooo`040000
+o`3oool0003o0000ob40oooo000N0?ooo`030000003oool0oooo0?40oooo0P000?lV0?ooo`030000
+o`3oool0oooo00d0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`020?ooo`060000
+o`3oool0oooo0?ooo`000?l0oooo0P000?lQ0?ooo`007P3oool00`000000oooo0?ooo`3_0?ooo`80
+003o:03oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3o
+ool00P3oool01P000?l0oooo0?ooo`3oool0003o0?ooo`80003o8 at 3oool001h0oooo00<000000?oo
+o`3oool0k at 3oool20000obT0oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`060?oo
+o`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0003o0P3oool20000ob40oooo000N0?oo
+o`800000k03oool20000obX0oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`070?oo
+o`050000o`3oool0oooo0?ooo`000?l00`3oool00`000?l0oooo0?ooo`020000ob40oooo000N0?oo
+o`030000003oool0oooo0>P0oooo0`000?l/0?ooo`030000o`3oool0oooo00d0oooo00<0003o0?oo
+o`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool2
+0000ob40oooo000N0?ooo`030000003oool0oooo0>D0oooo0`000?l^0?ooo`030000o`3oool0oooo
+00h0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`090000o`3oool0oooo
+0?ooo`000?l0oooo0000o`3oool0003o0240oooo000N0?ooo`030000003oool0oooo0><0oooo0P00
+0?l`0?ooo`030000o`3oool0oooo00h0oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?oo
+o`020?ooo`040000o`3oool0oooo0000o`80oooo00<0003o0?ooo`000?l08 at 3oool001h0oooo00<0
+00000?ooo`3oool0h03oool30000oc80oooo00<0003o0?ooo`3oool03P3oool00`000?l0oooo0?oo
+o`060?ooo`030000o`3oool0oooo00<0oooo00 at 0003o0?ooo`3oool0003o0P3oool20000ob80oooo
+000N0?ooo`030000003oool0oooo0=d0oooo0`000?ld0?ooo`030000o`3oool0oooo00l0oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0oooo0?ooo`000?l0
+0P3oool20000ob80oooo000N0?ooo`030000003oool0oooo0=X0oooo0`000?lf0?ooo`030000o`3o
+ool0oooo00l0oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`020?ooo`050000o`3o
+ool0oooo0?ooo`000?l00P3oool20000ob80oooo000N0?ooo`030000003oool0oooo0=H0oooo1000
+0?lh0?ooo`030000o`3oool0oooo0100oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?oo
+o`030?ooo`090000o`3oool0oooo0?ooo`000?l0oooo0000o`3oool0003o0280oooo000N0?ooo`03
+0000003oool0oooo0=<0oooo0`000?ll0?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3o
+ool01`3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000o`80oooo00<0003o0?oo
+o`000?l08P3oool001h0oooo00<000000?ooo`3oool0d03oool30000och0oooo00<0003o0?ooo`3o
+ool0403oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo00<0oooo00 at 0003o0?ooo`3o
+ool0003o0P3oool00`000?l0oooo0000o`0R0?ooo`007P3oool00`000000oooo0?ooo`3<0?ooo`@0
+003o at 03oool00`000?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3o
+ool00`3oool01 at 000?l0oooo0?ooo`3oool0003o0080oooo0P000?lS0?ooo`007P3oool00`000000
+oooo0?ooo`380?ooo`@0003o@`3oool00`000?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo00L0
+oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3oool0003o0080oooo0P000?lS0?oo
+o`007P3oool00`000000oooo0?ooo`330?ooo`D0003oAP3oool00`000?l0oooo0?ooo`0B0?ooo`03
+0000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00`3oool010000?l0oooo0?ooo`000?l20?oo
+o`030000o`3oool0003o02<0oooo000N0?ooo`030000003oool0oooo0;h0oooo1 at 000?m:0?ooo`03
+0000o`3oool0oooo0180oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`04
+0000o`3oool0oooo0000o`80oooo00<0003o0?ooo`000?l08`3oool001h0oooo0P00002i0?ooo`H0
+003oC`3oool00`000?l0oooo0?ooo`0B0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3o
+ool0103oool010000?l0oooo0?ooo`000?l20?ooo`030000o`3oool0003o02<0oooo000N0?ooo`03
+0000003oool0oooo0;40oooo1`000?mD0?ooo`030000o`3oool0oooo0180oooo00<0003o0?ooo`3o
+ool0203oool00`000?l0oooo0?ooo`030?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool20000
+ob at 0oooo000N0?ooo`030000003oool0oooo0:/0oooo1P000?mJ0?ooo`030000o`3oool0oooo01<0
+oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`050000o`3oool0oooo0?oo
+o`000?l00P3oool20000ob at 0oooo000N0?ooo`030000003oool0oooo0:00oooo2`000?mO0?ooo`03
+0000o`3oool0oooo01<0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`040?ooo`04
+0000o`3oool0oooo0000o`80oooo00<0003o0?ooo`000?l0903oool001h0oooo00<000000?ooo`3o
+ool0T`3oool=0000ofT0oooo00<0003o0?ooo`3oool0503oool00`000?l0oooo0?ooo`080?ooo`03
+0000o`3oool0oooo00 at 0oooo00@0003o0?ooo`3oool0003o0P3oool00`000?l0oooo0000o`0T0?oo
+o`007P3oool00`000000oooo0?ooo`290?ooo`X0003oM at 3oool00`000?l0oooo0?ooo`0E0?ooo`03
+0000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0103oool010000?l0oooo0?ooo`000?l20?oo
+o`030000o`3oool0003o02 at 0oooo000N0?ooo`030000003oool0oooo07d0oooo30000?mn0?ooo`03
+0000o`3oool0oooo01D0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`040?ooo`05
+0000o`3oool0oooo0?ooo`000?l00P3oool20000obD0oooo000N0?ooo`030000003oool0oooo05h0
+oooo7`000?n90?ooo`030000o`3oool0oooo01H0oooo00<0003o0?ooo`3oool0203oool00`000?l0
+oooo0?ooo`040?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool20000obD0oooo000N0?ooo`03
+0000003oool0oooo04X0oooo50000?nW0?ooo`030000o`3oool0oooo01H0oooo00<0003o0?ooo`3o
+ool02 at 3oool00`000?l0oooo0?ooo`040?ooo`090000o`3oool0oooo0?ooo`000?l0oooo0000o`3o
+ool0003o02D0oooo000N0?ooo`030000003oool0oooo01`0oooo;P000?nj0?ooo`030000o`3oool0
+oooo01L0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`050?ooo`040000o`3oool0
+oooo0000o`80oooo00<0003o0?ooo`000?l09 at 3oool001h0oooo7`000?oW0?ooo`030000o`3oool0
+oooo01L0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`040?ooo`050000o`3oool0
+oooo0?ooo`000?l00P3oool00`000?l0oooo0000o`0U0?ooo`007P3oool00`000000oooo0?ooo`3o
+0?ooo`<0oooo00<0003o0?ooo`3oool0603oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0
+oooo00 at 0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0003o02D0oooo0005
+0?ooo`050000003oool0oooo0?ooo`0000000P3oool3000000l0oooo00<000000?ooo`3oool0o`3o
+ool20?ooo`030000o`3oool0oooo01P0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?oo
+o`050?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool20000obH0oooo00050?ooo`030000003o
+ool0oooo00<0oooo00D000000?ooo`3oool0oooo0000000>0?ooo`<00000o`3oool20000oa/0oooo
+00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`050?ooo`090000o`3oool0oooo0?ooo`00
+0?l0oooo0000o`3oool0003o02H0oooo00050?ooo`030000003oool0oooo00L0oooo00<000000?oo
+o`3oool0303oool00`000000oooo0?ooo`3n0?ooo`030000o`3oool0oooo01X0oooo00<0003o0?oo
+o`3oool02 at 3oool00`000?l0oooo0?ooo`050?ooo`050000o`3oool0oooo0?ooo`000?l00P3oool0
+0`000?l0oooo0000o`0V0?ooo`001 at 3oool00`000000oooo0?ooo`030?ooo`050000003oool0oooo
+0?ooo`0000003P3oool00`000000oooo0?ooo`3m0?ooo`030000o`3oool0oooo01/0oooo00<0003o
+0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`050?ooo`050000o`3oool0oooo0?ooo`000?l00P3o
+ool00`000?l0oooo0000o`0V0?ooo`000`3oool00`000000oooo000000050?ooo`@000003`3oool0
+0`000000oooo0?ooo`3k0?ooo`80003o7 at 3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0
+oooo00D0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0003o02H0oooo0004
+0?ooo`8000001P3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo0?X0oooo00<0003o
+0?ooo`3oool07 at 3oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo00D0oooo00<0003o
+0?ooo`3oool00P3oool00`000?l0oooo0?ooo`020000obL0oooo00050?ooo`030000003oool0oooo
+00 at 0oooo1000000>0?ooo`030000003oool0oooo0?T0oooo00<0003o0?ooo`3oool07 at 3oool00`00
+0?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool00P3oool01 at 00
+0?l0oooo0000o`3oool0003o02L0oooo000N0?ooo`030000003oool0oooo0?L0oooo0P000?lP0?oo
+o`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`020?oo
+o`050000o`3oool0003o0?ooo`000?l09`3oool001h0oooo00<000000?ooo`3oool0mP3oool00`00
+0?l0oooo0?ooo`0O0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool01P3oool01 at 00
+0?l0oooo0?ooo`3oool0003o0080oooo00<0003o0?ooo`000?l09`3oool001h0oooo00<000000?oo
+o`3oool0m03oool20000ob80oooo00<0003o0?ooo`3oool02P3oool00`000?l0oooo0?ooo`050?oo
+o`030000o`3oool0oooo0080oooo00H0003o0?ooo`3oool0003o0?ooo`000?lW0?ooo`007P3oool0
+0`000000oooo0?ooo`3b0?ooo`80003o8`3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0
+oooo00H0oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`020000obP0oooo000N0?oo
+o`030000003oool0oooo0?40oooo00<0003o0?ooo`3oool08`3oool00`000?l0oooo0?ooo`0:0?oo
+o`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00P3oool01 at 000?l0oooo0000o`3oool0
+003o02P0oooo000N0?ooo`030000003oool0oooo0>l0oooo0P000?lU0?ooo`030000o`3oool0oooo
+00/0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`050000o`3oool0003o
+0?ooo`000?l0:03oool001h0oooo00<000000?ooo`3oool0kP3oool00`000?l0oooo0?ooo`0U0?oo
+o`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?oo
+o`050000o`3oool0003o0?ooo`000?l0:03oool001h0oooo0P00003]0?ooo`80003o9`3oool00`00
+0?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00P3oool01P00
+0?l0oooo0?ooo`000?l0oooo0000obP0oooo000N0?ooo`030000003oool0oooo0>X0oooo0P000?lX
+0?ooo`030000o`3oool0oooo00`0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`02
+0?ooo`030000o`3oool0oooo0080003o:@3oool001h0oooo00<000000?ooo`3oool0j at 3oool00`00
+0?l0oooo0?ooo`0X0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool01P3oool00`00
+0?l0oooo0?ooo`030?ooo`050000o`3oool0003o0?ooo`000?l0:@3oool001h0oooo00<000000?oo
+o`3oool0i`3oool20000obX0oooo00<0003o0?ooo`3oool0303oool00`000?l0oooo0?ooo`060?oo
+o`030000o`3oool0oooo00<0oooo00D0003o0?ooo`000?l0oooo0000o`0Y0?ooo`007P3oool00`00
+0000oooo0?ooo`3U0?ooo`80003o:`3oool00`000?l0oooo0?ooo`0=0?ooo`030000o`3oool0oooo
+00H0oooo00<0003o0?ooo`3oool00P3oool01P000?l0oooo0?ooo`000?l0oooo0000obT0oooo000N
+0?ooo`030000003oool0oooo0><0oooo0P000?l]0?ooo`030000o`3oool0oooo00`0oooo00<0003o
+0?ooo`3oool01`3oool00`000?l0oooo0?ooo`020?ooo`060000o`3oool0oooo0000o`3oool0003o
+:@3oool001h0oooo00<000000?ooo`3oool0h at 3oool20000obh0oooo00<0003o0?ooo`3oool03 at 3o
+ool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo00<0oooo00H0003o0?ooo`3oool0003o
+0?ooo`000?lY0?ooo`007P3oool00`000000oooo0?ooo`3O0?ooo`80003o;`3oool00`000?l0oooo
+0?ooo`0>0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo
+0?ooo`020000obX0oooo000N0?ooo`030000003oool0oooo0=d0oooo0P000?l`0?ooo`030000o`3o
+ool0oooo00h0oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`020?ooo`060000o`3o
+ool0oooo0000o`3oool0003o:P3oool001h0oooo00<000000?ooo`3oool0fP3oool30000oc80oooo
+00<0003o0?ooo`3oool03P3oool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo00<0oooo
+00H0003o0?ooo`3oool0003o0?ooo`000?lZ0?ooo`007P3oool00`000000oooo0?ooo`3F0?ooo`@0
+003o=03oool00`000?l0oooo0?ooo`0>0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3o
+ool00`3oool01P000?l0oooo0?ooo`000?l0oooo0000obX0oooo000N0?ooo`800000e03oool30000
+ocL0oooo00<0003o0?ooo`3oool03`3oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo
+00<0oooo00H0003o0?ooo`3oool0003o0?ooo`000?lZ0?ooo`007P3oool00`000000oooo0?ooo`3@
+0?ooo`<0003o>P3oool00`000?l0oooo0?ooo`0?0?ooo`030000o`3oool0oooo00H0oooo00<0003o
+0?ooo`3oool00`3oool010000?l0oooo0?ooo`3oool20000ob/0oooo000N0?ooo`030000003oool0
+oooo0<`0oooo10000?ll0?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3oool01`3oool0
+0`000?l0oooo0?ooo`030?ooo`060000o`3oool0oooo0000o`3oool0003o:`3oool001h0oooo00<0
+00000?ooo`3oool0b at 3oool30000ocl0oooo00<0003o0?ooo`3oool0403oool00`000?l0oooo0?oo
+o`070?ooo`030000o`3oool0oooo00<0oooo00H0003o0?ooo`3oool0003o0?ooo`000?l[0?ooo`00
+7P3oool00`000000oooo0?ooo`360?ooo`<0003o@@3oool00`000?l0oooo0?ooo`0A0?ooo`030000
+o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00`3oool01P000?l0oooo0?ooo`000?l0oooo0000
+ob/0oooo000N0?ooo`030000003oool0oooo0<80oooo10000?m40?ooo`030000o`3oool0oooo0100
+oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`070000o`3oool0oooo0?oo
+o`000?l0oooo0000o`0[0?ooo`007P3oool00`000000oooo0?ooo`2n0?ooo`@0003oA`3oool00`00
+0?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00`3oool01`00
+0?l0oooo0?ooo`3oool0003o0?ooo`000?l0:`3oool001h0oooo00<000000?ooo`3oool0^03oool6
+0000odX0oooo00<0003o0?ooo`3oool04P3oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0
+oooo00<0oooo00H0003o0?ooo`3oool0003o0?ooo`000?l/0?ooo`007P3oool00`000000oooo0?oo
+o`2b0?ooo`H0003oC`3oool00`000?l0oooo0?ooo`0B0?ooo`030000o`3oool0oooo00L0oooo00<0
+003o0?ooo`3oool0103oool01P000?l0oooo0?ooo`000?l0oooo0000ob`0oooo000N0?ooo`030000
+003oool0oooo0:h0oooo10000?mE0?ooo`030000o`3oool0oooo0180oooo00<0003o0?ooo`3oool0
+1`3oool00`000?l0oooo0?ooo`030?ooo`070000o`3oool0oooo0?ooo`000?l0oooo0000o`0/0?oo
+o`007P3oool00`000000oooo0?ooo`2Z0?ooo`@0003oF03oool00`000?l0oooo0?ooo`0C0?ooo`03
+0000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00`3oool01`000?l0oooo0?ooo`3oool0003o
+0?ooo`000?l0;03oool001h0oooo0P00002U0?ooo`H0003oF`3oool00`000?l0oooo0?ooo`0C0?oo
+o`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool0103oool01`000?l0oooo0?ooo`3oool0
+003o0?ooo`000?l0;03oool001h0oooo00<000000?ooo`3oool0W03oool80000of00oooo00<0003o
+0?ooo`3oool0503oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo00 at 0oooo00H0003o
+0?ooo`3oool0003o0?ooo`000?l]0?ooo`007P3oool00`000000oooo0?ooo`2C0?ooo`T0003oJ03o
+ool00`000?l0oooo0?ooo`0C0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool00`3o
+ool01`000?l0oooo0?ooo`3oool0003o0?ooo`000?l0;@3oool001h0oooo00<000000?ooo`3oool0
+R at 3oool:0000og00oooo00<0003o0?ooo`3oool0503oool00`000?l0oooo0?ooo`080?ooo`030000
+o`3oool0oooo00<0oooo00L0003o0?ooo`3oool0oooo0000o`3oool0003o02d0oooo000N0?ooo`03
+0000003oool0oooo07d0oooo30000?mi0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o0?ooo`3o
+ool0203oool00`000?l0oooo0?ooo`040?ooo`070000o`3oool0oooo0?ooo`000?l0oooo0000o`0]
+0?ooo`007P3oool00`000000oooo0?ooo`1_0?ooo`h0003oQ03oool00`000?l0oooo0?ooo`0E0?oo
+o`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0103oool01`000?l0oooo0?ooo`3oool0
+003o0?ooo`000?l0;@3oool001h0oooo00<000000?ooo`3oool0GP3ooolA0000oi40oooo00<0003o
+0?ooo`3oool05 at 3oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo00<0oooo00D0003o
+0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0oooo02/0oooo000N0?ooo`030000003oool0
+oooo04X0oooo50000?nQ0?ooo`030000o`3oool0oooo01H0oooo00<0003o0?ooo`3oool0203oool0
+0`000?l0oooo0?ooo`040?ooo`070000o`3oool0oooo0?ooo`000?l0oooo0000o`0^0?ooo`007P3o
+ool00`000000oooo0?ooo`0L0?ooobh0003o]03oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3o
+ool0oooo00T0oooo00<0003o0?ooo`3oool0103oool01`000?l0oooo0?ooo`3oool0003o0?ooo`00
+0?l0;P3oool001h0oooo7`000?oP0?ooo`80003o6 at 3oool00`000?l0oooo0?ooo`090?ooo`030000
+o`3oool0oooo00 at 0oooo00L0003o0?ooo`3oool0oooo0000o`3oool0003o02h0oooo000N0?ooo`80
+0000o03oool00`000?l0oooo0?ooo`0H0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3o
+ool0103oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0003o02h0oooo000N0?ooo`030000
+003oool0oooo0?X0oooo00<0003o0?ooo`3oool06 at 3oool00`000?l0oooo0?ooo`090?ooo`030000
+o`3oool0oooo00 at 0oooo00D0003o0?ooo`3oool0oooo0000o`020?ooo`030000o`3oool0oooo02`0
+oooo000N0?ooo`030000003oool0oooo0?T0oooo00<0003o0?ooo`3oool06 at 3oool00`000?l0oooo
+0?ooo`0:0?ooo`030000o`3oool0oooo00 at 0oooo00L0003o0?ooo`3oool0oooo0000o`3oool0003o
+02l0oooo000N0?ooo`030000003oool0oooo0?P0oooo00<0003o0?ooo`3oool06P3oool00`000?l0
+oooo0?ooo`090?ooo`030000o`3oool0oooo00D0oooo00L0003o0?ooo`3oool0oooo0000o`3oool0
+003o02l0oooo000N0?ooo`030000003oool0oooo0?L0oooo00<0003o0?ooo`3oool06P3oool00`00
+0?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool00P3oool00`00
+0?l0oooo0000o`0_0?ooo`007P3oool00`000000oooo0?ooo`3f0?ooo`030000o`3oool0oooo01/0
+oooo00<0003o0?ooo`3oool02P3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080
+oooo00<0003o0?ooo`000?l0;`3oool001h0oooo00<000000?ooo`3oool0m at 3oool00`000?l0oooo
+0?ooo`0K0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool0103oool01 at 000?l0oooo
+0?ooo`3oool0003o0080oooo00<0003o0?ooo`3oool0;@3oool001h0oooo00<000000?ooo`3oool0
+l`3oool20000oah0oooo00<0003o0?ooo`3oool02P3oool00`000?l0oooo0?ooo`050?ooo`070000
+o`3oool0oooo0?ooo`000?l0oooo0000o`0`0?ooo`00403oool5000000T0oooo00<000000?ooo`3o
+ool0lP3oool00`000?l0oooo0?ooo`0M0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3o
+ool0103oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0003o0300oooo000A0?ooo`030000
+003oool0oooo00X0oooo00<000000?ooo`3oool0l at 3oool00`000?l0oooo0?ooo`0N0?ooo`030000
+o`3oool0oooo00/0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`020?ooo`030000
+o`3oool0003o0300oooo000B0?ooo`030000003oool0oooo00T0oooo0`00003`0?ooo`030000o`3o
+ool0oooo01h0oooo00<0003o0?ooo`3oool02`3oool00`000?l0oooo0?ooo`050?ooo`030000o`3o
+ool0oooo0080oooo00<0003o0?ooo`000?l0<03oool001<0oooo00<000000?ooo`3oool0203oool0
+0`000000oooo0?ooo`3_0?ooo`030000o`3oool0oooo01l0oooo00<0003o0?ooo`3oool02`3oool0
+0`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0003o<03o
+ool001 at 0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`3]0?ooo`80003o8 at 3oool0
+0`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool00P3oool0
+0`000?l0oooo0000o`0a0?ooo`00403oool01 at 000000oooo0?ooo`3oool0000000T0oooo00<00000
+0?ooo`3oool0k03oool00`000?l0oooo0?ooo`0Q0?ooo`030000o`3oool0oooo00/0oooo00<0003o
+0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0003o0340oooo000A0?oo
+o`<000002P3oool00`000000oooo0?ooo`3[0?ooo`030000o`3oool0oooo0240oooo00<0003o0?oo
+o`3oool0303oool00`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo0080oooo00<0003o0?oo
+o`000?l0<@3oool001h0oooo00<000000?ooo`3oool0j at 3oool20000ob@0oooo00<0003o0?ooo`3o
+ool0303oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`00
+0?l0<@3oool001h0oooo00<000000?ooo`3oool0i`3oool20000obD0oooo00<0003o0?ooo`3oool0
+3 at 3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0
+003o<@3oool001h0oooo00<000000?ooo`3oool0i at 3oool20000obL0oooo00<0003o0?ooo`3oool0
+303oool00`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo0080oooo00 at 0003o0?ooo`3oool0
+003o<@3oool001h0oooo00<000000?ooo`3oool0i03oool00`000?l0oooo0?ooo`0V0?ooo`030000
+o`3oool0oooo00d0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`020?ooo`030000
+o`3oool0003o0380oooo000N0?ooo`030000003oool0oooo0>80oooo0P000?lY0?ooo`030000o`3o
+ool0oooo00d0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`030?ooo`030000o`3o
+ool0003o0380oooo000N0?ooo`030000003oool0oooo0>00oooo0P000?lZ0?ooo`030000o`3oool0
+oooo00d0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0
+003o0380oooo000N0?ooo`030000003oool0oooo0=h0oooo0P000?l/0?ooo`030000o`3oool0oooo
+00d0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`020?ooo`040000o`3oool0oooo
+0000oc80oooo000N0?ooo`030000003oool0oooo0=`0oooo0P000?l]0?ooo`030000o`3oool0oooo
+00h0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`020?ooo`040000o`3oool0oooo
+0000oc80oooo000N0?ooo`030000003oool0oooo0=X0oooo0P000?l_0?ooo`030000o`3oool0oooo
+00d0oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0003o
+03<0oooo000N0?ooo`030000003oool0oooo0=P0oooo0P000?l`0?ooo`030000o`3oool0oooo00h0
+oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0003o03<0
+oooo000N0?ooo`030000003oool0oooo0=H0oooo0P000?la0?ooo`030000o`3oool0oooo00h0oooo
+00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`040000o`3oool0oooo0000oc<0
+oooo000N0?ooo`030000003oool0oooo0=<0oooo0`000?lc0?ooo`030000o`3oool0oooo00h0oooo
+00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000oc<0
+oooo000N0?ooo`030000003oool0oooo0=40oooo0P000?le0?ooo`030000o`3oool0oooo00l0oooo
+00<0003o0?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000oc<0
+oooo000N0?ooo`030000003oool0oooo0<l0oooo0P000?lf0?ooo`030000o`3oool0oooo00l0oooo
+00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0003o03 at 0oooo
+000N0?ooo`030000003oool0oooo0<d0oooo0P000?lh0?ooo`030000o`3oool0oooo00l0oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`040000o`3oool0oooo0000oc at 0oooo
+000N0?ooo`030000003oool0oooo0<X0oooo0`000?li0?ooo`030000o`3oool0oooo00l0oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000oc at 0oooo
+000N0?ooo`030000003oool0oooo0<L0oooo0`000?lk0?ooo`030000o`3oool0oooo0100oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000oc at 0oooo
+000N0?ooo`030000003oool0oooo0<D0oooo0P000?ln0?ooo`030000o`3oool0oooo0100oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000oc at 0oooo
+000N0?ooo`030000003oool0oooo0<80oooo0`000?lo0?ooo`030000o`3oool0oooo0100oooo00<0
+003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`020?ooo`040000o`3oool0oooo0000ocD0oooo
+000N0?ooo`030000003oool0oooo0;l0oooo0`000?m10?ooo`030000o`3oool0oooo0140oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocD0oooo
+000N0?ooo`030000003oool0oooo0;/0oooo10000?m40?ooo`030000o`3oool0oooo0100oooo00<0
+003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocD0oooo
+000N0?ooo`030000003oool0oooo0;L0oooo10000?m70?ooo`030000o`3oool0oooo0140oooo00<0
+003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocD0oooo
+000N0?ooo`030000003oool0oooo0;<0oooo10000?m:0?ooo`030000o`3oool0oooo0180oooo00<0
+003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0003o03H0oooo000N
+0?ooo`030000003oool0oooo0:l0oooo10000?m=0?ooo`030000o`3oool0oooo0180oooo00<0003o
+0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocH0oooo000N
+0?ooo`030000003oool0oooo0:X0oooo1 at 000?mA0?ooo`030000o`3oool0oooo0180oooo00<0003o
+0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocH0oooo000N
+0?ooo`030000003oool0oooo0:D0oooo1 at 000?mE0?ooo`030000o`3oool0oooo0180oooo00<0003o
+0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocH0oooo000N
+0?ooo`030000003oool0oooo0:00oooo1 at 000?mI0?ooo`030000o`3oool0oooo01<0oooo00<0003o
+0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocH0oooo000N
+0?ooo`030000003oool0oooo09X0oooo1P000?mM0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o
+0?ooo`3oool01`3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocL0oooo000N
+0?ooo`030000003oool0oooo09<0oooo1`000?mR0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o
+0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocL0oooo000N
+0?ooo`030000003oool0oooo08T0oooo2P000?mY0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o
+0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocL0oooo000N
+0?ooo`030000003oool0oooo07l0oooo2P000?mb0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o
+0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocL0oooo000N
+0?ooo`030000003oool0oooo07D0oooo2P000?mk0?ooo`030000o`3oool0oooo01D0oooo00<0003o
+0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocP0oooo000N
+0?ooo`030000003oool0oooo06/0oooo2P000?n40?ooo`030000o`3oool0oooo01H0oooo00<0003o
+0?ooo`3oool0203oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocP0oooo000N
+0?ooo`030000003oool0oooo05h0oooo3 at 000?n>0?ooo`030000o`3oool0oooo01D0oooo00<0003o
+0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocP0oooo000N
+0?ooo`030000003oool0oooo04X0oooo50000?nJ0?ooo`030000o`3oool0oooo01H0oooo00<0003o
+0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocP0oooo000N
+0?ooo`030000003oool0oooo0380oooo60000?n]0?ooo`030000o`3oool0oooo01H0oooo00<0003o
+0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`030?ooo`050000o`3oool0oooo0?ooo`000?l0>03o
+ool001h0oooo00<000000?ooo`3oool0703ooolF0000ol at 0oooo00<0003o0?ooo`3oool05`3oool0
+0`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo00<0oooo00 at 0003o0?ooo`3oool0003o>@3o
+ool001h0oooo7`000?oI0?ooo`030000o`3oool0oooo01P0oooo00<0003o0?ooo`3oool02 at 3oool0
+0`000?l0oooo0?ooo`030?ooo`040000o`3oool0oooo0000ocT0oooo000N0?ooo`030000003oool0
+oooo0?@0oooo00<0003o0?ooo`3oool0603oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0
+oooo00 at 0oooo00@0003o0?ooo`3oool0003o>@3oool001h0oooo00<000000?ooo`3oool0l`3oool0
+0`000?l0oooo0?ooo`0I0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool00`3oool0
+1 at 000?l0oooo0?ooo`3oool0003o03T0oooo000N0?ooo`030000003oool0oooo0?80oooo00<0003o
+0?ooo`3oool06 at 3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00<0oooo00D0003o
+0?ooo`3oool0oooo0000o`0i0?ooo`007P3oool00`000000oooo0?ooo`3a0?ooo`030000o`3oool0
+oooo01X0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`040?ooo`040000o`3oool0
+oooo0000ocX0oooo000N0?ooo`030000003oool0oooo0?00oooo00<0003o0?ooo`3oool06`3oool0
+0`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo00 at 0oooo00@0003o0?ooo`3oool0003o>P3o
+ool001h0oooo00<000000?ooo`3oool0k`3oool00`000?l0oooo0?ooo`0K0?ooo`030000o`3oool0
+oooo00X0oooo00<0003o0?ooo`3oool00`3oool01 at 000?l0oooo0?ooo`3oool0003o03X0oooo000N
+0?ooo`030000003oool0oooo0>h0oooo00<0003o0?ooo`3oool0703oool00`000?l0oooo0?ooo`09
+0?ooo`030000o`3oool0oooo00 at 0oooo00D0003o0?ooo`3oool0oooo0000o`0j0?ooo`007P3oool0
+0`000000oooo0?ooo`3]0?ooo`030000o`3oool0oooo01`0oooo00<0003o0?ooo`3oool02P3oool0
+0`000?l0oooo0?ooo`040?ooo`040000o`3oool0oooo0000oc/0oooo000N0?ooo`030000003oool0
+oooo0>`0oooo00<0003o0?ooo`3oool07 at 3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0
+oooo00 at 0oooo00@0003o0?ooo`3oool0003o>`3oool001h0oooo00<000000?ooo`3oool0j`3oool0
+0`000?l0oooo0?ooo`0M0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool0103oool0
+1 at 000?l0oooo0?ooo`3oool0003o03/0oooo000N0?ooo`030000003oool0oooo0>X0oooo00<0003o
+0?ooo`3oool07P3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00 at 0oooo00D0003o
+0?ooo`3oool0oooo0000o`0k0?ooo`007P3oool00`000000oooo0?ooo`3X0?ooo`80003o803oool0
+0`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00 at 0oooo00D0003o0?ooo`3oool0oooo0000
+o`0k0?ooo`007P3oool00`000000oooo0?ooo`3W0?ooo`030000o`3oool0oooo0200oooo00<0003o
+0?ooo`3oool02P3oool00`000?l0oooo0?ooo`050?ooo`040000o`3oool0oooo0000oc`0oooo000N
+0?ooo`030000003oool0oooo0>H0oooo00<0003o0?ooo`3oool0803oool00`000?l0oooo0?ooo`0;
+0?ooo`030000o`3oool0oooo00 at 0oooo00D0003o0?ooo`3oool0oooo0000o`0l0?ooo`007P3oool0
+0`000000oooo0?ooo`3U0?ooo`030000o`3oool0oooo0240oooo00<0003o0?ooo`3oool02`3oool0
+0`000?l0oooo0?ooo`040?ooo`050000o`3oool0oooo0?ooo`000?l0?03oool001h0oooo00<00000
+0?ooo`3oool0h`3oool20000ob<0oooo00<0003o0?ooo`3oool02`3oool00`000?l0oooo0?ooo`05
+0?ooo`050000o`3oool0oooo0?ooo`000?l0?03oool001h0oooo00<000000?ooo`3oool0hP3oool0
+0`000?l0oooo0?ooo`0S0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool01 at 3oool0
+10000?l0oooo0?ooo`000?lm0?ooo`007P3oool00`000000oooo0?ooo`3Q0?ooo`030000o`3oool0
+oooo02<0oooo00<0003o0?ooo`3oool0303oool00`000?l0oooo0?ooo`040?ooo`050000o`3oool0
+oooo0?ooo`000?l0?@3oool001h0oooo00<000000?ooo`3oool0g`3oool20000obH0oooo00<0003o
+0?ooo`3oool02`3oool00`000?l0oooo0?ooo`050?ooo`050000o`3oool0oooo0?ooo`000?l0?@3o
+ool001h0oooo00<000000?ooo`3oool0gP3oool00`000?l0oooo0?ooo`0U0?ooo`030000o`3oool0
+oooo00`0oooo00<0003o0?ooo`3oool01 at 3oool01@000?l0oooo0?ooo`3oool0003o03d0oooo000N
+0?ooo`030000003oool0oooo0=d0oooo00<0003o0?ooo`3oool09P3oool00`000?l0oooo0?ooo`0<
+0?ooo`030000o`3oool0oooo00D0oooo00D0003o0?ooo`3oool0oooo0000o`0m0?ooo`007P3oool0
+0`000000oooo0?ooo`3K0?ooo`80003o:03oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0
+oooo00D0oooo00D0003o0?ooo`3oool0oooo0000o`0n0?ooo`007P3oool00`000000oooo0?ooo`3I
+0?ooo`80003o:P3oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0oooo00D0oooo00D0003o
+0?ooo`3oool0oooo0000o`0n0?ooo`007P3oool00`000000oooo0?ooo`3G0?ooo`80003o:`3oool0
+0`000?l0oooo0?ooo`0=0?ooo`030000o`3oool0oooo00D0oooo00D0003o0?ooo`3oool0oooo0000
+o`0n0?ooo`007P3oool00`000000oooo0?ooo`3E0?ooo`80003o;@3oool00`000?l0oooo0?ooo`0<
+0?ooo`030000o`3oool0oooo00H0oooo00D0003o0?ooo`3oool0oooo0000o`0n0?ooo`007P3oool0
+0`000000oooo0?ooo`3D0?ooo`030000o`3oool0oooo02`0oooo00<0003o0?ooo`3oool03 at 3oool0
+0`000?l0oooo0?ooo`050?ooo`050000o`3oool0oooo0?ooo`000?l0?`3oool001h0oooo00<00000
+0?ooo`3oool0dP3oool20000obl0oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`05
+0?ooo`050000o`3oool0oooo0?ooo`000?l0?`3oool001h0oooo00<000000?ooo`3oool0d03oool2
+0000oc00oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`060?ooo`050000o`3oool0
+oooo0?ooo`000?l0?`3oool001h0oooo00<000000?ooo`3oool0cP3oool20000oc40oooo00<0003o
+0?ooo`3oool03P3oool00`000?l0oooo0?ooo`060?ooo`050000o`3oool0oooo0?ooo`000?l0?`3o
+ool001h0oooo00<000000?ooo`3oool0c03oool20000oc<0oooo00<0003o0?ooo`3oool03P3oool0
+0`000?l0oooo0?ooo`050?ooo`050000o`3oool0oooo0?ooo`000?l0 at 03oool001h0oooo00<00000
+0?ooo`3oool0bP3oool20000oc at 0oooo00<0003o0?ooo`3oool03P3oool00`000?l0oooo0?ooo`06
+0?ooo`050000o`3oool0oooo0?ooo`000?l0 at 03oool001h0oooo00<000000?ooo`3oool0b03oool2
+0000ocD0oooo00<0003o0?ooo`3oool03`3oool00`000?l0oooo0?ooo`060?ooo`050000o`3oool0
+oooo0?ooo`000?l0 at 03oool00140oooo0`00000:0?ooo`030000003oool0oooo0<D0oooo0`000?lg
+0?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3oool01P3oool01 at 000?l0oooo0?ooo`3o
+ool0003o0400oooo000 at 0?ooo`050000003oool0oooo0?ooo`0000002 at 3oool300000<<0oooo0P00
+0?li0?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?oo
+o`020?ooo`030000o`3oool0oooo03h0oooo000D0?ooo`030000003oool0oooo00L0oooo00<00000
+0?ooo`3oool0`@3oool20000ocX0oooo00<0003o0?ooo`3oool0403oool00`000?l0oooo0?ooo`06
+0?ooo`050000o`3oool0oooo0?ooo`000?l0@@3oool00180oooo0P00000:0?ooo`030000003oool0
+oooo0;h0oooo0`000?ll0?ooo`030000o`3oool0oooo0100oooo00<0003o0?ooo`3oool01P3oool0
+1 at 000?l0oooo0?ooo`3oool0003o0440oooo000D0?ooo`030000003oool0oooo00L0oooo00<00000
+0?ooo`3oool0_03oool20000och0oooo00<0003o0?ooo`3oool0403oool00`000?l0oooo0?ooo`06
+0?ooo`030000o`3oool0oooo0080oooo00<0003o0?ooo`3oool0?`3oool00100oooo00D000000?oo
+o`3oool0oooo000000090?ooo`030000003oool0oooo0;T0oooo0`000?m00?ooo`030000o`3oool0
+oooo0100oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0
+oooo03l0oooo000A0?ooo`<000002P3oool00`000000oooo0?ooo`2g0?ooo`80003o at P3oool00`00
+0?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo00H0oooo00D0003o0?ooo`3oool0oooo0000o`12
+0?ooo`007P3oool00`000000oooo0?ooo`2d0?ooo`<0003o@`3oool00`000?l0oooo0?ooo`0A0?oo
+o`030000o`3oool0oooo00L0oooo00D0003o0?ooo`3oool0oooo0000o`120?ooo`007P3oool00`00
+0000oooo0?ooo`2`0?ooo`@0003oAP3oool00`000?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo
+00H0oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`100?ooo`007P3oool00`000000
+oooo0?ooo`2]0?ooo`<0003oB at 3oool00`000?l0oooo0?ooo`0B0?ooo`030000o`3oool0oooo00H0
+oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`100?ooo`007P3oool00`000000oooo
+0?ooo`2Y0?ooo`@0003oB`3oool00`000?l0oooo0?ooo`0B0?ooo`030000o`3oool0oooo00L0oooo
+00D0003o0?ooo`3oool0oooo0000o`130?ooo`007P3oool00`000000oooo0?ooo`2V0?ooo`<0003o
+C`3oool00`000?l0oooo0?ooo`0B0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool0
+0P3oool00`000?l0oooo0?ooo`110?ooo`007P3oool00`000000oooo0?ooo`2R0?ooo`@0003oD at 3o
+ool00`000?l0oooo0?ooo`0C0?ooo`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00P3o
+ool00`000?l0oooo0?ooo`110?ooo`007P3oool00`000000oooo0?ooo`2N0?ooo`@0003oE03oool0
+0`000?l0oooo0?ooo`0C0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00P3oool0
+0`000?l0oooo0?ooo`110?ooo`007P3oool00`000000oooo0?ooo`2J0?ooo`@0003oF03oool00`00
+0?l0oooo0?ooo`0C0?ooo`030000o`3oool0oooo00L0oooo00D0003o0?ooo`3oool0oooo0000o`14
+0?ooo`007P3oool00`000000oooo0?ooo`2E0?ooo`D0003oF`3oool00`000?l0oooo0?ooo`0D0?oo
+o`030000o`3oool0oooo00H0oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`120?oo
+o`007P3oool00`000000oooo0?ooo`2 at 0?ooo`D0003oG`3oool00`000?l0oooo0?ooo`0D0?ooo`03
+0000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`120?ooo`00
+7P3oool00`000000oooo0?ooo`2;0?ooo`D0003oH`3oool00`000?l0oooo0?ooo`0E0?ooo`030000
+o`3oool0oooo00L0oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`120?ooo`007P3o
+ool00`000000oooo0?ooo`260?ooo`D0003oJ03oool00`000?l0oooo0?ooo`0D0?ooo`030000o`3o
+ool0oooo00P0oooo00D0003o0?ooo`3oool0oooo0000o`150?ooo`007P3oool00`000000oooo0?oo
+o`1o0?ooo`L0003oK03oool00`000?l0oooo0?ooo`0E0?ooo`030000o`3oool0oooo00L0oooo00<0
+003o0?ooo`3oool00P3oool00`000?l0oooo0?ooo`130?ooo`007P3oool00`000000oooo0?ooo`1e
+0?ooo`X0003oLP3oool00`000?l0oooo0?ooo`0E0?ooo`030000o`3oool0oooo00P0oooo00<0003o
+0?ooo`3oool00P3oool00`000?l0oooo0?ooo`130?ooo`007P3oool00`000000oooo0?ooo`1[0?oo
+o`X0003oO03oool00`000?l0oooo0?ooo`0E0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?oo
+o`3oool00P3oool00`000?l0oooo0?ooo`130?ooo`007P3oool00`000000oooo0?ooo`1R0?ooo`T0
+003oQ at 3oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3o
+ool00P3oool00`000?l0oooo0?ooo`140?ooo`007P3oool00`000000oooo0?ooo`1I0?ooo`T0003o
+S at 3oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0
+0P3oool00`000?l0oooo0?ooo`140?ooo`007P3oool00`000000oooo0?ooo`1:0?ooo`l0003oUP3o
+ool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool00P3o
+ool00`000?l0oooo0?ooo`140?ooo`007P3oool00`000000oooo0?ooo`0i0?oooa40003oY03oool0
+0`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool00`3oool0
+0`000?l0oooo0?ooo`140?ooo`007P3oool00`000000oooo0?ooo`0[0?ooo`h0003o]03oool00`00
+0?l0oooo0?ooo`0G0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool00P3oool00`00
+0?l0oooo0?ooo`150?ooo`007P3oool00`000000oooo0?ooo`0L0?ooo`l0003o`@3oool00`000?l0
+oooo0?ooo`0H0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool00P3oool00`000?l0
+oooo0?ooo`150?ooo`007P3ooolO0000om00oooo00<0003o0?ooo`3oool05`3oool00`000?l0oooo
+0?ooo`090?ooo`030000o`3oool0oooo0080oooo00<0003o0?ooo`3oool0A at 3oool001h0oooo00<0
+00000?ooo`3oool0j`3oool00`000?l0oooo0?ooo`0H0?ooo`030000o`3oool0oooo00P0oooo00<0
+003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`150?ooo`007P3oool00`000000oooo0?ooo`3Z
+0?ooo`030000o`3oool0oooo01P0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`02
+0?ooo`030000o`3oool0oooo04H0oooo000N0?ooo`030000003oool0oooo0>T0oooo00<0003o0?oo
+o`3oool06 at 3oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo0080oooo00<0003o0?oo
+o`3oool0AP3oool001h0oooo00<000000?ooo`3oool0j03oool00`000?l0oooo0?ooo`0I0?ooo`03
+0000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`160?ooo`00
+7P3oool00`000000oooo0?ooo`3W0?ooo`030000o`3oool0oooo01X0oooo00<0003o0?ooo`3oool0
+2 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo04H0oooo000N0?ooo`030000003o
+ool0oooo0>H0oooo00<0003o0?ooo`3oool06`3oool00`000?l0oooo0?ooo`090?ooo`030000o`3o
+ool0oooo0080oooo00<0003o0?ooo`3oool0A`3oool001h0oooo00<000000?ooo`3oool0i at 3oool0
+0`000?l0oooo0?ooo`0K0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool00`3oool0
+0`000?l0oooo0?ooo`170?ooo`007P3oool00`000000oooo0?ooo`3T0?ooo`030000o`3oool0oooo
+01`0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo
+04L0oooo000N0?ooo`030000003oool0oooo0><0oooo00<0003o0?ooo`3oool0703oool00`000?l0
+oooo0?ooo`0:0?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3oool0A`3oool001h0oooo
+00<000000?ooo`3oool0hP3oool00`000?l0oooo0?ooo`0M0?ooo`030000o`3oool0oooo00T0oooo
+00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`180?ooo`007P3oool00`000000oooo0?oo
+o`3Q0?ooo`030000o`3oool0oooo01d0oooo00<0003o0?ooo`3oool02P3oool00`000?l0oooo0?oo
+o`030?ooo`030000o`3oool0oooo04P0oooo000N0?ooo`030000003oool0oooo0>00oooo00<0003o
+0?ooo`3oool07P3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3oool0oooo00<0oooo00<0003o
+0?ooo`3oool0B03oool001h0oooo00<000000?ooo`3oool0g`3oool00`000?l0oooo0?ooo`0N0?oo
+o`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`190?oo
+o`007P3oool00`000000oooo0?ooo`3N0?ooo`030000o`3oool0oooo01l0oooo00<0003o0?ooo`3o
+ool02P3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo04T0oooo000N0?ooo`030000
+003oool0oooo0=d0oooo00<0003o0?ooo`3oool07`3oool00`000?l0oooo0?ooo`0;0?ooo`030000
+o`3oool0oooo00<0oooo00<0003o0?ooo`3oool0B at 3oool001h0oooo00<000000?ooo`3oool0f`3o
+ool20000ob80oooo00<0003o0?ooo`3oool02`3oool00`000?l0oooo0?ooo`030?ooo`030000o`3o
+ool0oooo04T0oooo000N0?ooo`030000003oool0oooo0=X0oooo00<0003o0?ooo`3oool08 at 3oool0
+0`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3oool0BP3oool0
+01h0oooo00<000000?ooo`3oool0f at 3oool00`000?l0oooo0?ooo`0R0?ooo`030000o`3oool0oooo
+00/0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`1:0?ooo`007P3oool00`000000
+oooo0?ooo`3G0?ooo`80003o903oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0oooo00<0
+oooo00<0003o0?ooo`3oool0BP3oool001h0oooo00<000000?ooo`3oool0eP3oool00`000?l0oooo
+0?ooo`0T0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo
+0?ooo`1:0?ooo`007P3oool00`000000oooo0?ooo`3E0?ooo`030000o`3oool0oooo02 at 0oooo00<0
+003o0?ooo`3oool0303oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo04/0oooo000N
+0?ooo`030000003oool0oooo0=<0oooo0P000?lW0?ooo`030000o`3oool0oooo00`0oooo00<0003o
+0?ooo`3oool00`3oool00`000?l0oooo0?ooo`1;0?ooo`007P3oool00`000000oooo0?ooo`3B0?oo
+o`030000o`3oool0oooo02H0oooo00<0003o0?ooo`3oool0303oool00`000?l0oooo0?ooo`040?oo
+o`030000o`3oool0oooo04/0oooo000N0?ooo`030000003oool0oooo0=00oooo0P000?lY0?ooo`03
+0000o`3oool0oooo00`0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`1<0?ooo`00
+7P3oool00`000000oooo0?ooo`3?0?ooo`030000o`3oool0oooo02P0oooo00<0003o0?ooo`3oool0
+3 at 3oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo04`0oooo000N0?ooo`030000003o
+ool0oooo0<h0oooo00<0003o0?ooo`3oool0:@3oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3o
+ool0oooo00 at 0oooo00<0003o0?ooo`3oool0C03oool001h0oooo0P00003=0?ooo`80003o:`3oool0
+0`000?l0oooo0?ooo`0=0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool0C03oool0
+01h0oooo00<000000?ooo`3oool0b`3oool00`000?l0oooo0?ooo`0[0?ooo`030000o`3oool0oooo
+00d0oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`1=0?ooo`007P3oool00`000000
+oooo0?ooo`390?ooo`80003o;@3oool00`000?l0oooo0?ooo`0=0?ooo`030000o`3oool0oooo00 at 0
+oooo00<0003o0?ooo`3oool0C at 3oool001h0oooo00<000000?ooo`3oool0a`3oool20000obl0oooo
+00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo04d0oooo
+000N0?ooo`030000003oool0oooo0<H0oooo00<0003o0?ooo`3oool0;P3oool00`000?l0oooo0?oo
+o`0>0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool0C at 3oool001h0oooo00<00000
+0?ooo`3oool0a03oool20000oc40oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`04
+0?ooo`030000o`3oool0oooo04h0oooo000N0?ooo`030000003oool0oooo0<80oooo0P000?lb0?oo
+o`030000o`3oool0oooo00h0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`1>0?oo
+o`007P3oool00`000000oooo0?ooo`310?ooo`030000o`3oool0oooo0380oooo00<0003o0?ooo`3o
+ool03P3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo04h0oooo000N0?ooo`030000
+003oool0oooo0;l0oooo0P000?ld0?ooo`030000o`3oool0oooo00h0oooo00<0003o0?ooo`3oool0
+103oool00`000?l0oooo0?ooo`1?0?ooo`007P3oool00`000000oooo0?ooo`2m0?ooo`80003o=P3o
+ool00`000?l0oooo0?ooo`0>0?ooo`030000o`3oool0oooo00 at 0oooo00<0003o0?ooo`3oool0C`3o
+ool001h0oooo00<000000?ooo`3oool0^`3oool20000ocL0oooo00<0003o0?ooo`3oool03`3oool0
+0`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo04l0oooo000N0?ooo`030000003oool0oooo
+0;X0oooo00<0003o0?ooo`3oool0=`3oool00`000?l0oooo0?ooo`0>0?ooo`030000o`3oool0oooo
+00D0oooo00<0003o0?ooo`3oool0C`3oool001h0oooo00<000000?ooo`3oool0^03oool20000ocT0
+oooo00<0003o0?ooo`3oool03`3oool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0500
+oooo000N0?ooo`030000003oool0oooo0;H0oooo0P000?lj0?ooo`030000o`3oool0oooo0100oooo
+00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`1 at 0?ooo`007P3oool00`000000oooo0?oo
+o`2d0?ooo`80003o?03oool00`000?l0oooo0?ooo`0?0?ooo`030000o`3oool0oooo00D0oooo00<0
+003o0?ooo`3oool0D03oool001h0oooo00<000000?ooo`3oool0/P3oool20000ocd0oooo00<0003o
+0?ooo`3oool0403oool00`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo0500oooo000N0?oo
+o`030000003oool0oooo0;00oooo0P000?lo0?ooo`030000o`3oool0oooo0100oooo00<0003o0?oo
+o`3oool0103oool00`000?l0oooo0?ooo`1A0?ooo`007P3oool00`000000oooo0?ooo`2]0?ooo`<0
+003o at 03oool00`000?l0oooo0?ooo`0 at 0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3o
+ool0D at 3oool001h0oooo00<000000?ooo`3oool0Z`3oool20000od<0oooo00<0003o0?ooo`3oool0
+403oool00`000?l0oooo0?ooo`050?ooo`030000o`3oool0oooo0540oooo000N0?ooo`030000003o
+ool0oooo0:T0oooo0P000?m40?ooo`030000o`3oool0oooo0140oooo00<0003o0?ooo`3oool0103o
+ool00`000?l0oooo0?ooo`1B0?ooo`007P3oool00`000000oooo0?ooo`2V0?ooo`<0003oA at 3oool0
+0`000?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool0DP3oool0
+01h0oooo00<000000?ooo`3oool0X`3oool30000odP0oooo00<0003o0?ooo`3oool04 at 3oool00`00
+0?l0oooo0?ooo`050?ooo`030000o`3oool0oooo0580oooo000N0?ooo`030000003oool0oooo0:00
+oooo0`000?m:0?ooo`030000o`3oool0oooo0180oooo00<0003o0?ooo`3oool01 at 3oool00`000?l0
+oooo0?ooo`1B0?ooo`007P3oool00`000000oooo0?ooo`2L0?ooo`@0003oC at 3oool00`000?l0oooo
+0?ooo`0A0?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool0D`3oool001h0oooo00<0
+00000?ooo`3oool0V at 3oool30000oe00oooo00<0003o0?ooo`3oool04P3oool00`000?l0oooo0?oo
+o`050?ooo`030000o`3oool0oooo05<0oooo000N0?ooo`030000003oool0oooo09H0oooo0`000?mC
+0?ooo`030000o`3oool0oooo0140oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`1C
+0?ooo`007P3oool00`000000oooo0?ooo`2B0?ooo`@0003oE at 3oool00`000?l0oooo0?ooo`0B0?oo
+o`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool0E03oool001h0oooo00<000000?ooo`3o
+ool0SP3oool40000oeP0oooo00<0003o0?ooo`3oool04`3oool00`000?l0oooo0?ooo`050?ooo`03
+0000o`3oool0oooo05 at 0oooo000N0?ooo`030000003oool0oooo08X0oooo10000?mL0?ooo`030000
+o`3oool0oooo0180oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`1D0?ooo`007P3o
+ool00`000000oooo0?ooo`260?ooo`@0003oG`3oool00`000?l0oooo0?ooo`0C0?ooo`030000o`3o
+ool0oooo00H0oooo00<0003o0?ooo`3oool0E03oool001h0oooo00<000000?ooo`3oool0P at 3oool5
+0000of80oooo00<0003o0?ooo`3oool04`3oool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0
+oooo05D0oooo000N0?ooo`030000003oool0oooo07/0oooo1P000?mV0?ooo`030000o`3oool0oooo
+01 at 0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`1E0?ooo`007P3oool00`000000
+oooo0?ooo`1e0?ooo`H0003oK03oool00`000?l0oooo0?ooo`0D0?ooo`030000o`3oool0oooo00H0
+oooo00<0003o0?ooo`3oool0E at 3oool001h0oooo00<000000?ooo`3oool0K`3oool60000og40oooo
+00<0003o0?ooo`3oool0503oool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo05H0oooo
+000N0?ooo`030000003oool0oooo06T0oooo1P000?mf0?ooo`030000o`3oool0oooo01D0oooo00<0
+003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`1F0?ooo`007P3oool00`000000oooo0?ooo`1R
+0?ooo`L0003oN`3oool00`000?l0oooo0?ooo`0E0?ooo`030000o`3oool0oooo00L0oooo00<0003o
+0?ooo`3oool0EP3oool001h0oooo00<000000?ooo`3oool0F at 3oool90000oh80oooo00<0003o0?oo
+o`3oool05 at 3oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo05H0oooo000N0?ooo`03
+0000003oool0oooo0540oooo20000?n:0?ooo`030000o`3oool0oooo01H0oooo00<0003o0?ooo`3o
+ool01P3oool00`000?l0oooo0?ooo`1G0?ooo`007P3oool00`000000oooo0?ooo`1:0?ooo`L0003o
+T at 3oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool0
+E`3oool001h0oooo00<000000?ooo`3oool0@`3oool70000oiL0oooo00<0003o0?ooo`3oool05`3o
+ool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo05L0oooo000N0?ooo`030000003oool0
+oooo03T0oooo2P000?nN0?ooo`030000o`3oool0oooo01L0oooo00<0003o0?ooo`3oool01`3oool0
+0`000?l0oooo0?ooo`1G0?ooo`004 at 3oool3000000X0oooo00<000000?ooo`3oool0:`3oool>0000
+ojL0oooo00<0003o0?ooo`3oool05`3oool00`000?l0oooo0?ooo`070?ooo`030000o`3oool0oooo
+05P0oooo000 at 0?ooo`050000003oool0oooo0?ooo`0000002 at 3oool00`000000oooo0?ooo`0L0?oo
+o`l0003o]03oool00`000?l0oooo0?ooo`0H0?ooo`030000o`3oool0oooo00L0oooo00<0003o0?oo
+o`3oool0F03oool001 at 0oooo00<000000?ooo`3oool01`3oool3000000T0oooo4`000?o20?ooo`03
+0000o`3oool0oooo01P0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?ooo`1H0?ooo`00
+403oool01 at 000000oooo0?ooo`3oool0000000T0oooo30000?oE0?ooo`030000o`3oool0oooo01P0
+oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`1I0?ooo`00403oool4000000X0oooo
+00<000000?ooo`3oool0g at 3oool00`000?l0oooo0?ooo`0I0?ooo`030000o`3oool0oooo00L0oooo
+00<0003o0?ooo`3oool0F at 3oool00140oooo00<000000?ooo`3oool02P3oool00`000000oooo0?oo
+o`3L0?ooo`030000o`3oool0oooo01T0oooo00<0003o0?ooo`3oool0203oool00`000?l0oooo0?oo
+o`1I0?ooo`004 at 3oool4000000T0oooo00<000000?ooo`3oool0f`3oool00`000?l0oooo0?ooo`0J
+0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0F at 3oool001h0oooo00<000000?oo
+o`3oool0fP3oool00`000?l0oooo0?ooo`0J0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?oo
+o`3oool0FP3oool001h0oooo00<000000?ooo`3oool0f at 3oool00`000?l0oooo0?ooo`0K0?ooo`03
+0000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0FP3oool001h0oooo00<000000?ooo`3oool0
+f03oool00`000?l0oooo0?ooo`0L0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0
+FP3oool001h0oooo00<000000?ooo`3oool0e`3oool00`000?l0oooo0?ooo`0L0?ooo`030000o`3o
+ool0oooo00P0oooo00<0003o0?ooo`3oool0F`3oool001h0oooo00<000000?ooo`3oool0eP3oool0
+0`000?l0oooo0?ooo`0M0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0F`3oool0
+01h0oooo00<000000?ooo`3oool0e at 3oool00`000?l0oooo0?ooo`0M0?ooo`030000o`3oool0oooo
+00T0oooo00<0003o0?ooo`3oool0F`3oool001h0oooo00<000000?ooo`3oool0e03oool00`000?l0
+oooo0?ooo`0N0?ooo`030000o`3oool0oooo00P0oooo00<0003o0?ooo`3oool0G03oool001h0oooo
+00<000000?ooo`3oool0d`3oool00`000?l0oooo0?ooo`0N0?ooo`030000o`3oool0oooo00T0oooo
+00<0003o0?ooo`3oool0G03oool001h0oooo00<000000?ooo`3oool0dP3oool00`000?l0oooo0?oo
+o`0O0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool0G03oool001h0oooo00<00000
+0?ooo`3oool0d at 3oool00`000?l0oooo0?ooo`0O0?ooo`030000o`3oool0oooo00T0oooo00<0003o
+0?ooo`3oool0G at 3oool001h0oooo00<000000?ooo`3oool0d03oool00`000?l0oooo0?ooo`0P0?oo
+o`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool0G at 3oool001h0oooo00<000000?ooo`3o
+ool0c`3oool00`000?l0oooo0?ooo`0P0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3o
+ool0G at 3oool001h0oooo00<000000?ooo`3oool0cP3oool00`000?l0oooo0?ooo`0Q0?ooo`030000
+o`3oool0oooo00T0oooo00<0003o0?ooo`3oool0GP3oool001h0oooo00<000000?ooo`3oool0c at 3o
+ool00`000?l0oooo0?ooo`0Q0?ooo`030000o`3oool0oooo00X0oooo00<0003o0?ooo`3oool0GP3o
+ool001h0oooo00<000000?ooo`3oool0c03oool00`000?l0oooo0?ooo`0R0?ooo`030000o`3oool0
+oooo00X0oooo00<0003o0?ooo`3oool0GP3oool001h0oooo00<000000?ooo`3oool0b`3oool00`00
+0?l0oooo0?ooo`0S0?ooo`030000o`3oool0oooo00T0oooo00<0003o0?ooo`3oool0G`3oool001h0
+oooo00<000000?ooo`3oool0bP3oool00`000?l0oooo0?ooo`0S0?ooo`030000o`3oool0oooo00X0
+oooo00<0003o0?ooo`3oool0G`3oool001h0oooo00<000000?ooo`3oool0b03oool20000obH0oooo
+00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`1P0?ooo`007P3oool00`000000oooo0?oo
+o`370?ooo`030000o`3oool0oooo02D0oooo00<0003o0?ooo`3oool02P3oool00`000?l0oooo0?oo
+o`1P0?ooo`007P3oool00`000000oooo0?ooo`360?ooo`030000o`3oool0oooo02H0oooo00<0003o
+0?ooo`3oool02P3oool00`000?l0oooo0?ooo`1P0?ooo`007P3oool00`000000oooo0?ooo`350?oo
+o`030000o`3oool0oooo02H0oooo00<0003o0?ooo`3oool02P3oool00`000?l0oooo0?ooo`1Q0?oo
+o`007P3oool00`000000oooo0?ooo`340?ooo`030000o`3oool0oooo02L0oooo00<0003o0?ooo`3o
+ool02P3oool00`000?l0oooo0?ooo`1Q0?ooo`007P3oool00`000000oooo0?ooo`320?ooo`80003o
+:@3oool00`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo0640oooo000N0?ooo`030000003o
+ool0oooo0<40oooo00<0003o0?ooo`3oool0:@3oool00`000?l0oooo0?ooo`0:0?ooo`030000o`3o
+ool0oooo0680oooo000N0?ooo`030000003oool0oooo0<00oooo00<0003o0?ooo`3oool0:@3oool0
+0`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo0680oooo000N0?ooo`030000003oool0oooo
+0;l0oooo00<0003o0?ooo`3oool0:P3oool00`000?l0oooo0?ooo`0;0?ooo`030000o`3oool0oooo
+0680oooo000N0?ooo`030000003oool0oooo0;d0oooo0P000?l/0?ooo`030000o`3oool0oooo00/0
+oooo00<0003o0?ooo`3oool0H`3oool001h0oooo00<000000?ooo`3oool0_03oool00`000?l0oooo
+0?ooo`0/0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool0H`3oool001h0oooo00<0
+00000?ooo`3oool0^`3oool00`000?l0oooo0?ooo`0/0?ooo`030000o`3oool0oooo00`0oooo00<0
+003o0?ooo`3oool0H`3oool001h0oooo0P00002k0?ooo`030000o`3oool0oooo02d0oooo00<0003o
+0?ooo`3oool02`3oool00`000?l0oooo0?ooo`1T0?ooo`007P3oool00`000000oooo0?ooo`2i0?oo
+o`030000o`3oool0oooo02d0oooo00<0003o0?ooo`3oool0303oool00`000?l0oooo0?ooo`1T0?oo
+o`007P3oool00`000000oooo0?ooo`2g0?ooo`80003o<03oool00`000?l0oooo0?ooo`0<0?ooo`03
+0000o`3oool0oooo06 at 0oooo000N0?ooo`030000003oool0oooo0;H0oooo00<0003o0?ooo`3oool0
+;`3oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0oooo06D0oooo000N0?ooo`030000003o
+ool0oooo0;D0oooo00<0003o0?ooo`3oool0<03oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3o
+ool0oooo06D0oooo000N0?ooo`030000003oool0oooo0;<0oooo0P000?lb0?ooo`030000o`3oool0
+oooo00d0oooo00<0003o0?ooo`3oool0I at 3oool001h0oooo00<000000?ooo`3oool0/@3oool20000
+oc<0oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`1V0?ooo`007P3oool00`000000
+oooo0?ooo`2_0?ooo`80003o=@3oool00`000?l0oooo0?ooo`0=0?ooo`030000o`3oool0oooo06H0
+oooo000N0?ooo`030000003oool0oooo0:h0oooo00<0003o0?ooo`3oool0=03oool00`000?l0oooo
+0?ooo`0=0?ooo`030000o`3oool0oooo06L0oooo000N0?ooo`030000003oool0oooo0:`0oooo0P00
+0?lg0?ooo`030000o`3oool0oooo00d0oooo00<0003o0?ooo`3oool0I`3oool001h0oooo00<00000
+0?ooo`3oool0ZP3oool20000ocP0oooo00<0003o0?ooo`3oool03P3oool00`000?l0oooo0?ooo`1W
+0?ooo`007P3oool00`000000oooo0?ooo`2X0?ooo`80003o>@3oool00`000?l0oooo0?ooo`0>0?oo
+o`030000o`3oool0oooo06P0oooo000N0?ooo`030000003oool0oooo0:L0oooo00<0003o0?ooo`3o
+ool0>@3oool00`000?l0oooo0?ooo`0>0?ooo`030000o`3oool0oooo06P0oooo000N0?ooo`030000
+003oool0oooo0:D0oooo0P000?lk0?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3oool0
+J03oool001h0oooo00<000000?ooo`3oool0X`3oool20000ocd0oooo00<0003o0?ooo`3oool03P3o
+ool00`000?l0oooo0?ooo`1Y0?ooo`007P3oool00`000000oooo0?ooo`2Q0?ooo`80003o?P3oool0
+0`000?l0oooo0?ooo`0?0?ooo`030000o`3oool0oooo06T0oooo000N0?ooo`030000003oool0oooo
+09l0oooo0P000?m00?ooo`030000o`3oool0oooo00h0oooo00<0003o0?ooo`3oool0JP3oool001h0
+oooo00<000000?ooo`3oool0W at 3oool20000od40oooo00<0003o0?ooo`3oool03`3oool00`000?l0
+oooo0?ooo`1Z0?ooo`007P3oool00`000000oooo0?ooo`2K0?ooo`80003o at P3oool00`000?l0oooo
+0?ooo`0 at 0?ooo`030000o`3oool0oooo06X0oooo000N0?ooo`030000003oool0oooo09T0oooo0P00
+0?m40?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3oool0J`3oool001h0oooo00<00000
+0?ooo`3oool0UP3oool30000odD0oooo00<0003o0?ooo`3oool0403oool00`000?l0oooo0?ooo`1[
+0?ooo`007P3oool00`000000oooo0?ooo`2D0?ooo`80003oB03oool00`000?l0oooo0?ooo`0?0?oo
+o`030000o`3oool0oooo06`0oooo000N0?ooo`030000003oool0oooo0940oooo0`000?m90?ooo`03
+0000o`3oool0oooo0100oooo00<0003o0?ooo`3oool0K03oool001h0oooo00<000000?ooo`3oool0
+S`3oool20000od`0oooo00<0003o0?ooo`3oool0403oool00`000?l0oooo0?ooo`1/0?ooo`007P3o
+ool00`000000oooo0?ooo`2<0?ooo`<0003oC at 3oool00`000?l0oooo0?ooo`0 at 0?ooo`030000o`3o
+ool0oooo06d0oooo000N0?ooo`030000003oool0oooo08X0oooo0P000?m?0?ooo`030000o`3oool0
+oooo0140oooo00<0003o0?ooo`3oool0K at 3oool001h0oooo00<000000?ooo`3oool0Q`3oool30000
+oe40oooo00<0003o0?ooo`3oool0403oool00`000?l0oooo0?ooo`1^0?ooo`007P3oool00`000000
+oooo0?ooo`250?ooo`80003oD`3oool00`000?l0oooo0?ooo`0A0?ooo`030000o`3oool0oooo06h0
+oooo000A0?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3oool0PP3oool30000oe at 0oooo
+00<0003o0?ooo`3oool04P3oool00`000?l0oooo0?ooo`1^0?ooo`004 at 3oool00`000000oooo0?oo
+o`0:0?ooo`<00000OP3oool40000oeL0oooo00<0003o0?ooo`3oool04 at 3oool00`000?l0oooo0?oo
+o`1_0?ooo`004P3oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo07X0oooo10000?mJ
+0?ooo`030000o`3oool0oooo0180oooo00<0003o0?ooo`3oool0K`3oool00180oooo00<000000?oo
+o`3oool02 at 3oool00`000000oooo0?ooo`1g0?ooo`<0003oG at 3oool00`000?l0oooo0?ooo`0C0?oo
+o`030000o`3oool0oooo06l0oooo000C0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3o
+ool0L`3oool40000oel0oooo00<0003o0?ooo`3oool04`3oool00`000?l0oooo0?ooo`1`0?ooo`00
+4`3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo0700oooo0`000?mS0?ooo`030000
+o`3oool0oooo01<0oooo00<0003o0?ooo`3oool0L03oool00100oooo1 at 0000090?ooo`030000003o
+ool0oooo06`0oooo10000?mU0?ooo`030000o`3oool0oooo01<0oooo00<0003o0?ooo`3oool0L at 3o
+ool001h0oooo00<000000?ooo`3oool0J03oool40000ofP0oooo00<0003o0?ooo`3oool0503oool0
+0`000?l0oooo0?ooo`1a0?ooo`007P3oool00`000000oooo0?ooo`1T0?ooo`@0003oK03oool00`00
+0?l0oooo0?ooo`0D0?ooo`030000o`3oool0oooo0740oooo000N0?ooo`030000003oool0oooo05h0
+oooo1P000?m_0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o0?ooo`3oool0LP3oool001h0oooo
+00<000000?ooo`3oool0F03oool60000og at 0oooo00<0003o0?ooo`3oool05 at 3oool00`000?l0oooo
+0?ooo`1b0?ooo`007P3oool00`000000oooo0?ooo`1A0?ooo`L0003oNP3oool00`000?l0oooo0?oo
+o`0D0?ooo`030000o`3oool0oooo07<0oooo000N0?ooo`030000003oool0oooo04X0oooo1`000?n0
+0?ooo`030000o`3oool0oooo01D0oooo00<0003o0?ooo`3oool0L`3oool001h0oooo00<000000?oo
+o`3oool0@`3oool70000ohH0oooo00<0003o0?ooo`3oool05 at 3oool00`000?l0oooo0?ooo`1d0?oo
+o`007P3oool00`000000oooo0?ooo`0l0?ooo`L0003oS at 3oool00`000?l0oooo0?ooo`0E0?ooo`03
+0000o`3oool0oooo07 at 0oooo000N0?ooo`030000003oool0oooo03D0oooo1`000?nC0?ooo`030000
+o`3oool0oooo01D0oooo00<0003o0?ooo`3oool0M at 3oool001h0oooo00<000000?ooo`3oool0;P3o
+ool70000oiT0oooo00<0003o0?ooo`3oool05P3oool00`000?l0oooo0?ooo`1e0?ooo`007P3oool0
+0`000000oooo0?ooo`0W0?ooo`L0003oW`3oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0
+oooo07H0oooo000N0?ooo`030000003oool0oooo01`0oooo2`000?nV0?ooo`030000o`3oool0oooo
+01H0oooo00<0003o0?ooo`3oool0MP3oool001h0oooo00<000000?ooo`3oool03P3oool>0000ok00
+oooo00<0003o0?ooo`3oool05P3oool00`000?l0oooo0?ooo`1g0?ooo`007P3oool00`000000oooo
+0?ooo`030?ooo`/0003o_ at 3oool00`000?l0oooo0?ooo`0G0?ooo`030000o`3oool0oooo07L0oooo
+000N0?ooo`H0003ob03oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo07P0oooo000N
+0?ooo`030000003oool0oooo0<X0oooo00<0003o0?ooo`3oool05`3oool00`000?l0oooo0?ooo`1h
+0?ooo`007P3oool00`000000oooo0?ooo`390?ooo`030000o`3oool0oooo01L0oooo00<0003o0?oo
+o`3oool0N at 3oool001h0oooo00<000000?ooo`3oool0b03oool00`000?l0oooo0?ooo`0H0?ooo`03
+0000o`3oool0oooo07T0oooo000N0?ooo`030000003oool0oooo0<L0oooo00<0003o0?ooo`3oool0
+6 at 3oool00`000?l0oooo0?ooo`1i0?ooo`007P3oool200000<L0oooo00<0003o0?ooo`3oool06 at 3o
+ool00`000?l0oooo0?ooo`1j0?ooo`007P3oool00`000000oooo0?ooo`350?ooo`030000o`3oool0
+oooo01X0oooo00<0003o0?ooo`3oool0NP3oool001h0oooo00<000000?ooo`3oool0a at 3oool00`00
+0?l0oooo0?ooo`0I0?ooo`030000o`3oool0oooo07/0oooo000N0?ooo`030000003oool0oooo0<@0
+oooo00<0003o0?ooo`3oool06P3oool00`000?l0oooo0?ooo`1k0?ooo`007P3oool00`000000oooo
+0?ooo`330?ooo`030000o`3oool0oooo01X0oooo00<0003o0?ooo`3oool0O03oool001h0oooo00<0
+00000?ooo`3oool0`P3oool00`000?l0oooo0?ooo`0K0?ooo`030000o`3oool0oooo07`0oooo000N
+0?ooo`030000003oool0oooo0<40oooo00<0003o0?ooo`3oool06`3oool00`000?l0oooo0?ooo`1m
+0?ooo`007P3oool00`000000oooo0?ooo`300?ooo`030000o`3oool0oooo01`0oooo00<0003o0?oo
+o`3oool0O at 3oool001h0oooo00<000000?ooo`3oool0_`3oool00`000?l0oooo0?ooo`0L0?ooo`03
+0000o`3oool0oooo07h0oooo000N0?ooo`030000003oool0oooo0;h0oooo00<0003o0?ooo`3oool0
+7 at 3oool00`000?l0oooo0?ooo`1n0?ooo`007P3oool00`000000oooo0?ooo`2m0?ooo`030000o`3o
+ool0oooo01d0oooo00<0003o0?ooo`3oool0O`3oool001h0oooo00<000000?ooo`3oool0_03oool0
+0`000?l0oooo0?ooo`0N0?ooo`030000o`3oool0oooo07l0oooo000N0?ooo`030000003oool0oooo
+0;/0oooo00<0003o0?ooo`3oool07P3oool00`000?l0oooo0?ooo`200?ooo`007P3oool00`000000
+oooo0?ooo`2j0?ooo`030000o`3oool0oooo01l0oooo00<0003o0?ooo`3oool0P03oool001h0oooo
+00<000000?ooo`3oool0^P3oool00`000?l0oooo0?ooo`0N0?ooo`030000o`3oool0oooo0840oooo
+000N0?ooo`030000003oool0oooo0;T0oooo00<0003o0?ooo`3oool07`3oool00`000?l0oooo0?oo
+o`210?ooo`007P3oool00`000000oooo0?ooo`2h0?ooo`030000o`3oool0oooo01l0oooo00<0003o
+0?ooo`3oool0PP3oool001h0oooo00<000000?ooo`3oool0]`3oool00`000?l0oooo0?ooo`0P0?oo
+o`030000o`3oool0oooo0880oooo000N0?ooo`030000003oool0oooo0;H0oooo00<0003o0?ooo`3o
+ool0803oool00`000?l0oooo0?ooo`230?ooo`007P3oool00`000000oooo0?ooo`2e0?ooo`030000
+o`3oool0oooo0240oooo00<0003o0?ooo`3oool0P`3oool001h0oooo00<000000?ooo`3oool0]03o
+ool00`000?l0oooo0?ooo`0Q0?ooo`030000o`3oool0oooo08 at 0oooo000N0?ooo`030000003oool0
+oooo0;80oooo0P000?lT0?ooo`030000o`3oool0oooo08 at 0oooo000N0?ooo`800000/P3oool00`00
+0?l0oooo0?ooo`0S0?ooo`030000o`3oool0oooo08D0oooo000N0?ooo`030000003oool0oooo0;00
+oooo00<0003o0?ooo`3oool0903oool00`000?l0oooo0?ooo`250?ooo`007P3oool00`000000oooo
+0?ooo`2_0?ooo`030000o`3oool0oooo02 at 0oooo00<0003o0?ooo`3oool0QP3oool001h0oooo00<0
+00000?ooo`3oool0[@3oool20000obH0oooo00<0003o0?ooo`3oool0Q`3oool001h0oooo00<00000
+0?ooo`3oool0[03oool00`000?l0oooo0?ooo`0V0?ooo`030000o`3oool0oooo08L0oooo000N0?oo
+o`030000003oool0oooo0:/0oooo00<0003o0?ooo`3oool09P3oool00`000?l0oooo0?ooo`280?oo
+o`007P3oool00`000000oooo0?ooo`2Z0?ooo`030000o`3oool0oooo02L0oooo00<0003o0?ooo`3o
+ool0R03oool001h0oooo00<000000?ooo`3oool0Z03oool20000obT0oooo00<0003o0?ooo`3oool0
+R at 3oool001h0oooo00<000000?ooo`3oool0Y`3oool00`000?l0oooo0?ooo`0Y0?ooo`030000o`3o
+ool0oooo08T0oooo000N0?ooo`030000003oool0oooo0:H0oooo00<0003o0?ooo`3oool0:@3oool0
+0`000?l0oooo0?ooo`2:0?ooo`007P3oool00`000000oooo0?ooo`2U0?ooo`030000o`3oool0oooo
+02X0oooo00<0003o0?ooo`3oool0RP3oool001h0oooo00<000000?ooo`3oool0X`3oool20000ob`0
+oooo00<0003o0?ooo`3oool0R`3oool001h0oooo00<000000?ooo`3oool0XP3oool00`000?l0oooo
+0?ooo`0/0?ooo`030000o`3oool0oooo08/0oooo000N0?ooo`030000003oool0oooo0:40oooo00<0
+003o0?ooo`3oool0;03oool00`000?l0oooo0?ooo`2<0?ooo`007P3oool00`000000oooo0?ooo`2P
+0?ooo`030000o`3oool0oooo02`0oooo00<0003o0?ooo`3oool0S at 3oool001h0oooo00<000000?oo
+o`3oool0WP3oool20000obl0oooo00<0003o0?ooo`3oool0S at 3oool001h0oooo00<000000?ooo`3o
+ool0W at 3oool00`000?l0oooo0?ooo`0^0?ooo`030000o`3oool0oooo08h0oooo000N0?ooo`030000
+003oool0oooo09`0oooo00<0003o0?ooo`3oool0;`3oool00`000?l0oooo0?ooo`2>0?ooo`007P3o
+ool00`000000oooo0?ooo`2K0?ooo`030000o`3oool0oooo02l0oooo00<0003o0?ooo`3oool0S`3o
+ool000`0oooo00 at 000000?ooo`3oool0oooo0`00000;0?ooo`030000003oool0oooo09T0oooo0P00
+0?lb0?ooo`030000o`3oool0oooo08l0oooo000<0?ooo`040000003oool0oooo000000<0oooo00<0
+00000?ooo`3oool0203oool3000009P0oooo00<0003o0?ooo`3oool0<@3oool00`000?l0oooo0?oo
+o`2 at 0?ooo`00303oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo00P0oooo00<0
+00000?ooo`3oool0U`3oool00`000?l0oooo0?ooo`0b0?ooo`030000o`3oool0oooo0900oooo000<
+0?ooo`040000003oool0oooo000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?oo
+o`2E0?ooo`80003o=03oool00`000?l0oooo0?ooo`2A0?ooo`002P3oool00`000000oooo00000002
+0?ooo`050000003oool0oooo0?ooo`0000002P3oool00`000000oooo0?ooo`2C0?ooo`80003o=P3o
+ool00`000?l0oooo0?ooo`2A0?ooo`002`3oool200000080oooo00D000000?ooo`3oool0oooo0000
+000:0?ooo`030000003oool0oooo0940oooo0P000?lg0?ooo`030000o`3oool0oooo0980oooo000<
+0?ooo`040000003oool0oooo0?ooo`<000002`3oool00`000000oooo0?ooo`2?0?ooo`80003o>03o
+ool00`000?l0oooo0?ooo`2C0?ooo`007P3oool00`000000oooo0?ooo`2>0?ooo`030000o`3oool0
+oooo03P0oooo00<0003o0?ooo`3oool0T`3oool001h0oooo00<000000?ooo`3oool0S03oool20000
+ocX0oooo00<0003o0?ooo`3oool0U03oool001h0oooo00<000000?ooo`3oool0RP3oool20000oc/0
+oooo00<0003o0?ooo`3oool0U at 3oool001h0oooo00<000000?ooo`3oool0R03oool20000ocd0oooo
+00<0003o0?ooo`3oool0U at 3oool001h0oooo00<000000?ooo`3oool0QP3oool20000och0oooo00<0
+003o0?ooo`3oool0UP3oool001h0oooo00<000000?ooo`3oool0Q03oool20000ocl0oooo00<0003o
+0?ooo`3oool0U`3oool001h0oooo00<000000?ooo`3oool0PP3oool20000od40oooo00<0003o0?oo
+o`3oool0U`3oool001h0oooo00<000000?ooo`3oool0P03oool20000od80oooo00<0003o0?ooo`3o
+ool0V03oool001h0oooo00<000000?ooo`3oool0O at 3oool30000od<0oooo00<0003o0?ooo`3oool0
+V at 3oool001h0oooo00<000000?ooo`3oool0N`3oool20000odH0oooo00<0003o0?ooo`3oool0V at 3o
+ool001h0oooo00<000000?ooo`3oool0N at 3oool20000odL0oooo00<0003o0?ooo`3oool0VP3oool0
+01h0oooo00<000000?ooo`3oool0MP3oool30000odP0oooo00<0003o0?ooo`3oool0V`3oool001h0
+oooo0P00001e0?ooo`80003oB`3oool00`000?l0oooo0?ooo`2K0?ooo`007P3oool00`000000oooo
+0?ooo`1a0?ooo`<0003oC03oool00`000?l0oooo0?ooo`2L0?ooo`007P3oool00`000000oooo0?oo
+o`1_0?ooo`80003oCP3oool00`000?l0oooo0?ooo`2M0?ooo`007P3oool00`000000oooo0?ooo`1]
+0?ooo`80003oC`3oool00`000?l0oooo0?ooo`2N0?ooo`007P3oool00`000000oooo0?ooo`1Z0?oo
+o`<0003oD at 3oool00`000?l0oooo0?ooo`2N0?ooo`007P3oool00`000000oooo0?ooo`1X0?ooo`80
+003oD`3oool00`000?l0oooo0?ooo`2O0?ooo`007P3oool00`000000oooo0?ooo`1U0?ooo`<0003o
+E03oool00`000?l0oooo0?ooo`2P0?ooo`007P3oool00`000000oooo0?ooo`1R0?ooo`<0003oE`3o
+ool00`000?l0oooo0?ooo`2P0?ooo`007P3oool00`000000oooo0?ooo`1O0?ooo`<0003oF at 3oool0
+0`000?l0oooo0?ooo`2Q0?ooo`007P3oool00`000000oooo0?ooo`1L0?ooo`<0003oF`3oool00`00
+0?l0oooo0?ooo`2R0?ooo`007P3oool00`000000oooo0?ooo`1I0?ooo`<0003oGP3oool00`000?l0
+oooo0?ooo`2R0?ooo`007P3oool00`000000oooo0?ooo`1F0?ooo`<0003oH03oool00`000?l0oooo
+0?ooo`2S0?ooo`007P3oool00`000000oooo0?ooo`1B0?ooo`@0003oHP3oool00`000?l0oooo0?oo
+o`2T0?ooo`007P3oool00`000000oooo0?ooo`1>0?ooo`@0003oIP3oool00`000?l0oooo0?ooo`2T
+0?ooo`007P3oool00`000000oooo0?ooo`1:0?ooo`@0003oJ at 3oool00`000?l0oooo0?ooo`2U0?oo
+o`007P3oool00`000000oooo0?ooo`160?ooo`@0003oK03oool00`000?l0oooo0?ooo`2V0?ooo`00
+7P3oool00`000000oooo0?ooo`120?ooo`@0003oL03oool00`000?l0oooo0?ooo`2V0?ooo`007P3o
+ool2000003h0oooo1 at 000?mc0?ooo`030000o`3oool0oooo0:L0oooo000N0?ooo`030000003oool0
+oooo03T0oooo10000?mg0?ooo`030000o`3oool0oooo0:P0oooo000N0?ooo`030000003oool0oooo
+03 at 0oooo1@000?mj0?ooo`030000o`3oool0oooo0:T0oooo000N0?ooo`030000003oool0oooo02l0
+oooo1 at 000?mn0?ooo`030000o`3oool0oooo0:X0oooo000N0?ooo`030000003oool0oooo02/0oooo
+10000?n20?ooo`030000o`3oool0oooo0:/0oooo000N0?ooo`030000003oool0oooo02H0oooo1 at 00
+0?n50?ooo`030000o`3oool0oooo0:`0oooo000N0?ooo`030000003oool0oooo0200oooo1P000?n:
+0?ooo`030000o`3oool0oooo0:`0oooo000N0?ooo`030000003oool0oooo01P0oooo20000?n?0?oo
+o`030000o`3oool0oooo0:d0oooo000N0?ooo`030000003oool0oooo0100oooo20000?nF0?ooo`03
+0000o`3oool0oooo0:h0oooo000N0?ooo`030000003oool0oooo00T0oooo1`000?nM0?ooo`030000
+o`3oool0oooo0:l0oooo000N0?ooo`040000003oool0oooo0?ooo`P0003oX`3oool00`000?l0oooo
+0?ooo`2`0?ooo`007P3oool40000ojX0oooo00<0003o0?ooo`3oool0/@3oool001h0oooo00<00000
+0?ooo`3oool0ZP3oool00`000?l0oooo0?ooo`2b0?ooo`007P3oool00`000000oooo0?ooo`2Y0?oo
+o`030000o`3oool0oooo0;<0oooo000N0?ooo`030000003oool0oooo0:P0oooo00<0003o0?ooo`3o
+ool0]03oool001h0oooo0P00002X0?ooo`030000o`3oool0oooo0;D0oooo000N0?ooo`030000003o
+ool0oooo0:H0oooo00<0003o0?ooo`3oool0]P3oool001h0oooo00<000000?ooo`3oool0YP3oool0
+0`000?l0oooo0?ooo`2f0?ooo`007P3oool00`000000oooo0?ooo`2U0?ooo`030000o`3oool0oooo
+0;L0oooo000N0?ooo`030000003oool0oooo0:@0oooo00<0003o0?ooo`3oool0^03oool001h0oooo
+00<000000?ooo`3oool0X`3oool00`000?l0oooo0?ooo`2i0?ooo`007P3oool00`000000oooo0?oo
+o`2R0?ooo`030000o`3oool0oooo0;X0oooo000N0?ooo`030000003oool0oooo0:40oooo00<0003o
+0?ooo`3oool0^`3oool001h0oooo00<000000?ooo`3oool0X03oool00`000?l0oooo0?ooo`2l0?oo
+o`007P3oool00`000000oooo0?ooo`2O0?ooo`030000o`3oool0oooo0;d0oooo000N0?ooo`030000
+003oool0oooo09h0oooo00<0003o0?ooo`3oool0_P3oool001h0oooo00<000000?ooo`3oool0W at 3o
+ool00`000?l0oooo0?ooo`2o0?ooo`007P3oool00`000000oooo0?ooo`2L0?ooo`030000o`3oool0
+oooo0<00oooo000N0?ooo`030000003oool0oooo09`0oooo00<0003o0?ooo`3oool0`03oool001h0
+oooo0P00002L0?ooo`030000o`3oool0oooo0<40oooo000N0?ooo`030000003oool0oooo09X0oooo
+00<0003o0?ooo`3oool0`P3oool001h0oooo00<000000?ooo`3oool0V at 3oool00`000?l0oooo0?oo
+o`330?ooo`007P3oool00`000000oooo0?ooo`2H0?ooo`030000o`3oool0oooo0<@0oooo000N0?oo
+o`030000003oool0oooo09L0oooo00<0003o0?ooo`3oool0a at 3oool001h0oooo00<000000?ooo`3o
+ool0UP3oool00`000?l0oooo0?ooo`360?ooo`007P3oool00`000000oooo0?ooo`2E0?ooo`030000
+o`3oool0oooo0<L0oooo000N0?ooo`030000003oool0oooo09<0oooo0P000?o:0?ooo`007P3oool0
+0`000000oooo0?ooo`2B0?ooo`030000o`3oool0oooo0<X0oooo000N0?ooo`030000003oool0oooo
+0940oooo00<0003o0?ooo`3oool0b`3oool001h0oooo00<000000?ooo`3oool0T03oool00`000?l0
+oooo0?ooo`3<0?ooo`00303oool010000000oooo0?ooo`3oool3000000/0oooo00<000000?ooo`3o
+ool0S`3oool00`000?l0oooo0?ooo`3=0?ooo`00303oool010000000oooo0?ooo`0000030?ooo`03
+0000003oool0oooo00P0oooo00<000000?ooo`3oool0SP3oool00`000?l0oooo0?ooo`3>0?ooo`00
+303oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo00P0oooo0`00002<0?ooo`80003o
+d at 3oool000`0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`080?ooo`030000
+003oool0oooo08/0oooo00<0003o0?ooo`3oool0d at 3oool000X0oooo00<000000?ooo`0000000P3o
+ool4000000/0oooo00<000000?ooo`3oool0RP3oool00`000?l0oooo0?ooo`3B0?ooo`002`3oool2
+000000<0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`290?ooo`030000o`3oool0
+oooo0=<0oooo000<0?ooo`040000003oool0oooo0?ooo`@000002P3oool00`000000oooo0?ooo`28
+0?ooo`030000o`3oool0oooo0=@0oooo000N0?ooo`030000003oool0oooo08H0oooo0P000?oG0?oo
+o`007P3oool00`000000oooo0?ooo`250?ooo`030000o`3oool0oooo0=L0oooo000N0?ooo`030000
+003oool0oooo08 at 0oooo00<0003o0?ooo`3oool0f03oool001h0oooo00<000000?ooo`3oool0P`3o
+ool00`000?l0oooo0?ooo`3I0?ooo`007P3oool00`000000oooo0?ooo`210?ooo`80003og03oool0
+01h0oooo00<000000?ooo`3oool0O`3oool20000omh0oooo000N0?ooo`030000003oool0oooo07h0
+oooo00<0003o0?ooo`3oool0gP3oool001h0oooo0P00001m0?ooo`80003oh at 3oool001h0oooo00<0
+00000?ooo`3oool0N`3oool00`000?l0oooo0?ooo`3Q0?ooo`007P3oool00`000000oooo0?ooo`1i
+0?ooo`80003oi03oool001h0oooo00<000000?ooo`3oool0M`3oool20000onH0oooo000N0?ooo`03
+0000003oool0oooo07H0oooo00<0003o0?ooo`3oool0iP3oool001h0oooo00<000000?ooo`3oool0
+M03oool20000onT0oooo000N0?ooo`030000003oool0oooo07<0oooo00<0003o0?ooo`3oool0j at 3o
+ool001h0oooo00<000000?ooo`3oool0L at 3oool20000on`0oooo000N0?ooo`030000003oool0oooo
+06l0oooo0P000?o^0?ooo`007P3oool00`000000oooo0?ooo`1^0?ooo`030000o`3oool0oooo0>h0
+oooo000N0?ooo`030000003oool0oooo06`0oooo0P000?oa0?ooo`007P3oool2000006`0oooo00<0
+003o0?ooo`3oool0l at 3oool001h0oooo00<000000?ooo`3oool0J at 3oool20000oo@0oooo000N0?oo
+o`030000003oool0oooo06L0oooo0P000?of0?ooo`007P3oool00`000000oooo0?ooo`1V0?ooo`03
+0000o`3oool0oooo0?H0oooo000N0?ooo`030000003oool0oooo06 at 0oooo0P000?oi0?ooo`007P3o
+ool00`000000oooo0?ooo`1R0?ooo`80003on`3oool001h0oooo00<000000?ooo`3oool0H03oool2
+0000ood0oooo000N0?ooo`030000003oool0oooo05h0oooo0P000?oo0?ooo`007P3oool00`000000
+oooo0?ooo`1L0?ooo`80003oo`3oool20?ooo`007P3oool00`000000oooo0?ooo`1J0?ooo`80003o
+o`3oool40?ooo`007P3oool00`000000oooo0?ooo`1H0?ooo`80003oo`3oool60?ooo`007P3oool2
+000005L0oooo0P000?oo0?ooo`P0oooo000N0?ooo`030000003oool0oooo05<0oooo0`000?oo0?oo
+o`X0oooo000N0?ooo`030000003oool0oooo0540oooo0P000?oo0?ooo`d0oooo000N0?ooo`030000
+003oool0oooo04h0oooo0`000?oo0?ooo`l0oooo000N0?ooo`030000003oool0oooo04/0oooo0`00
+0?oo0?oooa80oooo000N0?ooo`030000003oool0oooo04T0oooo0P000?oo0?oooaD0oooo000N0?oo
+o`030000003oool0oooo04H0oooo0`000?oo0?oooaL0oooo000N0?ooo`030000003oool0oooo04<0
+oooo0`000?oo0?oooaX0oooo000N0?ooo`030000003oool0oooo0440oooo0P000?oo0?oooad0oooo
+000N0?ooo`030000003oool0oooo03h0oooo0`000?oo0?oooal0oooo000N0?ooo`800000>`3oool4
+0000ool0oooo8P3oool001h0oooo00<000000?ooo`3oool0=`3oool30000ool0oooo9P3oool001h0
+oooo00<000000?ooo`3oool0<`3oool40000ool0oooo:@3oool001h0oooo00<000000?ooo`3oool0
+<03oool30000ool0oooo;@3oool001h0oooo00<000000?ooo`3oool0;03oool40000ool0oooo<03o
+ool001h0oooo00<000000?ooo`3oool0:@3oool30000ool0oooo=03oool001h0oooo00<000000?oo
+o`3oool09 at 3oool40000ool0oooo=`3oool001h0oooo00<000000?ooo`3oool08P3oool30000ool0
+oooo>`3oool001h0oooo00<000000?ooo`3oool07P3oool40000ool0oooo?P3oool000T0oooo1 at 00
+00020?ooo`<000002`3oool00`000000oooo0?ooo`0J0?ooo`@0003oo`3ooom20?ooo`002P3oool0
+0`000000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000002P3oool3000001H0oooo1000
+0?oo0?ooodH0oooo000;0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?oo
+o`080?ooo`030000003oool0oooo0140oooo1 at 000?oo0?ooodX0oooo000<0?ooo`040000003oool0
+oooo000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`0=0?ooo`@0003oo`3o
+oom?0?ooo`003 at 3oool00`000000oooo000000030?ooo`030000003oool0oooo00P0oooo00<00000
+0?ooo`3oool02 at 3oool40000ool0ooooD`3oool000T0oooo00L000000?ooo`3oool0oooo0000003o
+ool0000000<0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`040?ooo`D0003oo`3o
+oomG0?ooo`002P3oool3000000<0oooo0`00000;0?ooo`030000003oool0oooo00 at 0003oo`3ooomL
+0?ooo`007P3oool30000ool0ooooH03oool001h0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`00
+7P3oool00`000000oooo0?ooo`3o0?ooof00oooo000N0?ooo`030000003oool0oooo0?l0ooooH03o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3oool00?l0ooooP at 3o
+ool00?l0ooooP at 3oool00001\
+\>"],
+  ImageRangeCache->{{{0, 383}, {767, 0}} -> {-0.454387, -0.39452, 0.00504313, 
+  0.00230189}}]
+}, Open  ]],
+
+Cell["\<\
+In order to ensure that increasing the viewing distance does not expose \
+artifacts, we need to boost the luma CSF curve to its maximum value at all \
+frequencies less than the one where it achieves that maximum. The chroma CSF \
+curves have their maximum at frequency 0.\
+\>", "Text"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(ycbcrslpeakf = 
+      ReplaceAll[f, \(FindMinimum[\(-ycbcrsl[f]\), {f, 5}]\)[\([2]\)]]\)], 
+  "Input"],
+
+Cell[BoxData[
+    \(3.74695975597140362`\)], "Output"]
+}, Open  ]],
+
+Cell["Now we normalize all the curves so their maximums are 1.", "Text"],
+
+Cell[BoxData[
+    \(ycbcrsln[f_] := 
+      If[f < ycbcrslpeakf, 1, 
+        sl[f, 0.9973, 0.221, \(-0.9699\), \(-0.800\), 0.7578, 1.999, 1.0]/
+          sl[ycbcrslpeakf, 0.9973, 0.221, \(-0.9699\), \(-0.800\), 0.7578, 
+            1.999, 1.0]]\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrsrgn[f_] := 
+      sc[f, 1.000, \(-0.1521\), 0.893, 45.44]/
+        sc[0, 1.000, \(-0.1521\), 0.893, 45.44]\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrsbyn[f_] := 
+      sc[f, 1.00, \(-0.2041\), 0.900, 28.92]/
+        sc[0, 1.00, \(-0.2041\), 0.900, 28.92]\)], "Input"],
+
+Cell["\<\
+Make some nice compiled versions of these functions, or stuff below will \
+become unbearably slow.\
+\>", "Text"],
+
+Cell[BoxData[
+    \(\(ycbcrslnc = Compile[{f}, Evaluate[ycbcrsln[f]]]; \)\)], "Input"],
+
+Cell[BoxData[
+    \(\(ycbcrsrgnc = Compile[{f}, Evaluate[ycbcrsrgn[f]]]; \)\)], "Input"],
+
+Cell[BoxData[
+    \(\(ycbcrsbync = Compile[{f}, Evaluate[ycbcrsbyn[f]]]; \)\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrstsln[f_, c_] := 
+      \((c^\((1/.5)\) + 1/ycbcrsln[ycbcrslpeakf])\)/
+        \((c^\((1/.5)\) + 1/ycbcrsln[f])\)\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrstsrgn[f_, c_] := 
+      \((c^\((1/.5)\) + 1/ycbcrsrgn[0])\)/
+        \((c^\((1/.5)\) + 1/ycbcrsrgn[f])\)\)], "Input"],
+
+Cell[BoxData[
+    \(ycbcrstsbyn[f_, c_] := 
+      \((c^\((1/.5)\) + 1/ycbcrsbyn[0])\)/
+        \((c^\((1/.5)\) + 1/ycbcrsbyn[f])\)\)], "Input"],
+
+Cell[BoxData[
+    \(\(ycbcrstslnc = Compile[{f, c}, Evaluate[ycbcrstsln[f, c]]]; \)\)], 
+  "Input"],
+
+Cell[BoxData[
+    \(\(ycbcrstsrgnc = Compile[{f, c}, Evaluate[ycbcrstsrgn[f, c]]]; \)\)], 
+  "Input"],
+
+Cell[BoxData[
+    \(\(ycbcrstsbync = Compile[{f, c}, Evaluate[ycbcrstsbyn[f, c]]]; \)\)], 
+  "Input"],
+
+Cell[BoxData[
+    \(fmax[v_, r_] := v*r*\((Tan[\[Pi]/360]*10000/254)\)\)], "Input"],
+
+Cell[BoxData[
+    \(fmaxcrtl := fmax[.50, 90]\)], "Input"],
+
+Cell[BoxData[
+    \(fmaxcrtc := fmaxcrtl/2\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(Plot[{ycbcrstslnc[f, 0], ycbcrstslnc[f, 1], ycbcrstslnc[f, 2], 
+        ycbcrstslnc[f, 4], ycbcrstslnc[f, 8], ycbcrstslnc[f, 16], 
+        ycbcrstslnc[f, 32], ycbcrstslnc[f, 64]}, {f, 0, fmaxcrtl}, 
+      PlotRange -> {{0, fmaxcrtl}, {0, 1}}, AspectRatio -> 2, 
+      PlotStyle -> {{RGBColor[0, 0, 0]}}]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 2 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.0646789 0 2 [
+[.12936 -0.0125 -3 -9 ]
+[.12936 -0.0125 3 0 ]
+[.25872 -0.0125 -3 -9 ]
+[.25872 -0.0125 3 0 ]
+[.38807 -0.0125 -3 -9 ]
+[.38807 -0.0125 3 0 ]
+[.51743 -0.0125 -3 -9 ]
+[.51743 -0.0125 3 0 ]
+[.64679 -0.0125 -6 -9 ]
+[.64679 -0.0125 6 0 ]
+[.77615 -0.0125 -6 -9 ]
+[.77615 -0.0125 6 0 ]
+[.9055 -0.0125 -6 -9 ]
+[.9055 -0.0125 6 0 ]
+[-0.0125 .4 -18 -4.5 ]
+[-0.0125 .4 0 4.5 ]
+[-0.0125 .8 -18 -4.5 ]
+[-0.0125 .8 0 4.5 ]
+[-0.0125 1.2 -18 -4.5 ]
+[-0.0125 1.2 0 4.5 ]
+[-0.0125 1.6 -18 -4.5 ]
+[-0.0125 1.6 0 4.5 ]
+[-0.0125 2 -6 -4.5 ]
+[-0.0125 2 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 2 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.12936 0 m
+.12936 .00625 L
+s
+[(2)] .12936 -0.0125 0 1 Mshowa
+.25872 0 m
+.25872 .00625 L
+s
+[(4)] .25872 -0.0125 0 1 Mshowa
+.38807 0 m
+.38807 .00625 L
+s
+[(6)] .38807 -0.0125 0 1 Mshowa
+.51743 0 m
+.51743 .00625 L
+s
+[(8)] .51743 -0.0125 0 1 Mshowa
+.64679 0 m
+.64679 .00625 L
+s
+[(10)] .64679 -0.0125 0 1 Mshowa
+.77615 0 m
+.77615 .00625 L
+s
+[(12)] .77615 -0.0125 0 1 Mshowa
+.9055 0 m
+.9055 .00625 L
+s
+[(14)] .9055 -0.0125 0 1 Mshowa
+.125 Mabswid
+.03234 0 m
+.03234 .00375 L
+s
+.06468 0 m
+.06468 .00375 L
+s
+.09702 0 m
+.09702 .00375 L
+s
+.1617 0 m
+.1617 .00375 L
+s
+.19404 0 m
+.19404 .00375 L
+s
+.22638 0 m
+.22638 .00375 L
+s
+.29106 0 m
+.29106 .00375 L
+s
+.32339 0 m
+.32339 .00375 L
+s
+.35573 0 m
+.35573 .00375 L
+s
+.42041 0 m
+.42041 .00375 L
+s
+.45275 0 m
+.45275 .00375 L
+s
+.48509 0 m
+.48509 .00375 L
+s
+.54977 0 m
+.54977 .00375 L
+s
+.58211 0 m
+.58211 .00375 L
+s
+.61445 0 m
+.61445 .00375 L
+s
+.67913 0 m
+.67913 .00375 L
+s
+.71147 0 m
+.71147 .00375 L
+s
+.74381 0 m
+.74381 .00375 L
+s
+.80849 0 m
+.80849 .00375 L
+s
+.84083 0 m
+.84083 .00375 L
+s
+.87317 0 m
+.87317 .00375 L
+s
+.93784 0 m
+.93784 .00375 L
+s
+.97018 0 m
+.97018 .00375 L
+s
+.25 Mabswid
+0 0 m
+1 0 L
+s
+0 .4 m
+.00625 .4 L
+s
+[(0.2)] -0.0125 .4 1 0 Mshowa
+0 .8 m
+.00625 .8 L
+s
+[(0.4)] -0.0125 .8 1 0 Mshowa
+0 1.2 m
+.00625 1.2 L
+s
+[(0.6)] -0.0125 1.2 1 0 Mshowa
+0 1.6 m
+.00625 1.6 L
+s
+[(0.8)] -0.0125 1.6 1 0 Mshowa
+0 2 m
+.00625 2 L
+s
+[(1)] -0.0125 2 1 0 Mshowa
+.125 Mabswid
+0 .1 m
+.00375 .1 L
+s
+0 .2 m
+.00375 .2 L
+s
+0 .3 m
+.00375 .3 L
+s
+0 .5 m
+.00375 .5 L
+s
+0 .6 m
+.00375 .6 L
+s
+0 .7 m
+.00375 .7 L
+s
+0 .9 m
+.00375 .9 L
+s
+0 1 m
+.00375 1 L
+s
+0 1.1 m
+.00375 1.1 L
+s
+0 1.3 m
+.00375 1.3 L
+s
+0 1.4 m
+.00375 1.4 L
+s
+0 1.5 m
+.00375 1.5 L
+s
+0 1.7 m
+.00375 1.7 L
+s
+0 1.8 m
+.00375 1.8 L
+s
+0 1.9 m
+.00375 1.9 L
+s
+.25 Mabswid
+0 0 m
+0 2 L
+s
+0 0 m
+1 0 L
+1 2 L
+0 2 L
+closepath
+clip
+newpath
+0 0 0 r
+.5 Mabswid
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 1.99996 L
+.24479 1.99985 L
+.24605 1.99965 L
+.24739 1.99936 L
+.2498 1.9986 L
+.25253 1.99741 L
+.25542 1.99577 L
+.26059 1.99189 L
+.26616 1.98642 L
+.27228 1.97895 L
+.29346 1.94259 L
+.31394 1.89441 L
+.3359 1.83185 L
+.37933 1.68588 L
+.42117 1.53072 L
+.46141 1.37849 L
+.50424 1.22069 L
+.54547 1.07726 L
+.5851 .94958 L
+.62732 .82579 L
+.66794 .71882 L
+.71114 .61783 L
+.75274 .5323 L
+.79276 .4601 L
+.83534 .39308 L
+.87634 .33717 L
+.91991 .28595 L
+.9619 .24363 L
+1 .21044 L
+s
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 1.99998 L
+.24479 1.99992 L
+.24605 1.99983 L
+.24739 1.99968 L
+.2498 1.9993 L
+.25253 1.9987 L
+.25542 1.99788 L
+.26059 1.99594 L
+.26616 1.99319 L
+.27228 1.98942 L
+.29346 1.97088 L
+.31394 1.94577 L
+.3359 1.91223 L
+.37933 1.82955 L
+.42117 1.73418 L
+.46141 1.63208 L
+.50424 1.51606 L
+.54547 1.40028 L
+.5851 1.28775 L
+.62732 1.16893 L
+.66794 1.05755 L
+.71114 .94403 L
+.75274 .84082 L
+.79276 .7481 L
+.83534 .65703 L
+.87634 .57706 L
+.91991 .50036 L
+.9619 .43434 L
+1 .38081 L
+s
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 1.99999 L
+.24479 1.99997 L
+.24605 1.99993 L
+.24739 1.99987 L
+.2498 1.99972 L
+.25253 1.99948 L
+.25542 1.99915 L
+.26059 1.99837 L
+.26616 1.99727 L
+.27228 1.99576 L
+.28323 1.99229 L
+.29346 1.98825 L
+.31483 1.97744 L
+.33431 1.96506 L
+.37615 1.93111 L
+.41639 1.88987 L
+.45922 1.83749 L
+.50045 1.77927 L
+.54008 1.7165 L
+.5823 1.64282 L
+.62292 1.56583 L
+.66612 1.47823 L
+.70772 1.38923 L
+.74773 1.3004 L
+.79032 1.20362 L
+.83132 1.10958 L
+.87489 1.01016 L
+.91687 .91626 L
+.95726 .82884 L
+1 .74053 L
+s
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 2 L
+.24479 1.99999 L
+.24605 1.99998 L
+.24739 1.99996 L
+.2498 1.99992 L
+.25253 1.99985 L
+.25542 1.99975 L
+.26059 1.99952 L
+.26616 1.9992 L
+.27228 1.99875 L
+.28323 1.99773 L
+.29346 1.99653 L
+.31483 1.99331 L
+.33431 1.98959 L
+.37615 1.97923 L
+.41639 1.9663 L
+.45922 1.94929 L
+.50045 1.92959 L
+.54008 1.90735 L
+.5823 1.87979 L
+.62292 1.84919 L
+.66612 1.8119 L
+.70772 1.771 L
+.74773 1.72677 L
+.79032 1.67419 L
+.83132 1.61809 L
+.87489 1.55255 L
+.91687 1.48381 L
+.95726 1.41284 L
+1 1.33313 L
+s
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 2 L
+.24479 2 L
+.24605 1.99999 L
+.24739 1.99999 L
+.2498 1.99998 L
+.25253 1.99996 L
+.25542 1.99993 L
+.26059 1.99987 L
+.26616 1.99979 L
+.27228 1.99967 L
+.28323 1.99941 L
+.29346 1.99909 L
+.31483 1.99825 L
+.33431 1.99727 L
+.37615 1.99453 L
+.41639 1.99108 L
+.45922 1.98649 L
+.50045 1.98109 L
+.54008 1.97491 L
+.5823 1.9671 L
+.62292 1.95823 L
+.66612 1.94713 L
+.70772 1.93458 L
+.74773 1.92052 L
+.79032 1.90314 L
+.83132 1.88372 L
+.87489 1.85981 L
+.91687 1.83321 L
+.95726 1.80393 L
+1 1.76861 L
+s
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 2 L
+.24479 2 L
+.24605 2 L
+.24739 2 L
+.2498 1.99999 L
+.25253 1.99999 L
+.25542 1.99998 L
+.26059 1.99997 L
+.26616 1.99995 L
+.27228 1.99992 L
+.28323 1.99985 L
+.29346 1.99977 L
+.31483 1.99956 L
+.33431 1.99931 L
+.37615 1.99861 L
+.41639 1.99774 L
+.45922 1.99656 L
+.50045 1.99518 L
+.54008 1.99359 L
+.5823 1.99158 L
+.62292 1.98927 L
+.66612 1.98636 L
+.70772 1.98304 L
+.74773 1.97928 L
+.79032 1.97458 L
+.83132 1.96925 L
+.87489 1.96259 L
+.91687 1.95501 L
+.95726 1.94649 L
+1 1.93594 L
+s
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 2 L
+.24479 2 L
+.24605 2 L
+.24739 2 L
+.2498 2 L
+.25253 2 L
+.25542 2 L
+.26059 1.99999 L
+.26616 1.99999 L
+.27228 1.99998 L
+.28323 1.99996 L
+.29346 1.99994 L
+.31483 1.99989 L
+.33431 1.99983 L
+.37615 1.99965 L
+.41639 1.99943 L
+.45922 1.99914 L
+.50045 1.99879 L
+.54008 1.99839 L
+.5823 1.99788 L
+.62292 1.9973 L
+.66612 1.99656 L
+.70772 1.99572 L
+.74773 1.99477 L
+.79032 1.99357 L
+.83132 1.9922 L
+.87489 1.99049 L
+.91687 1.98853 L
+.95726 1.98631 L
+1 1.98354 L
+s
+0 2 m
+.04057 2 L
+.08481 2 L
+.12636 2 L
+.16632 2 L
+.18859 2 L
+.20885 2 L
+.21894 2 L
+.2299 2 L
+.23492 2 L
+.23767 2 L
+.23901 2 L
+.24024 2 L
+.24137 2 L
+.24243 2 L
+.24356 2 L
+.24479 2 L
+.24605 2 L
+.24739 2 L
+.2498 2 L
+.25253 2 L
+.25542 2 L
+.26059 2 L
+.26616 2 L
+.27228 1.99999 L
+.28323 1.99999 L
+.29346 1.99999 L
+.31483 1.99997 L
+.33431 1.99996 L
+.37615 1.99991 L
+.41639 1.99986 L
+.45922 1.99978 L
+.50045 1.9997 L
+.54008 1.9996 L
+.5823 1.99947 L
+.62292 1.99932 L
+.66612 1.99914 L
+.70772 1.99893 L
+.74773 1.99869 L
+.79032 1.99839 L
+.83132 1.99804 L
+.87489 1.99761 L
+.91687 1.99712 L
+.95726 1.99656 L
+1 1.99586 L
+s
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{387, 774},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40006300031R000`400?l00000o`00003oo`3ooon4
+0?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon4
+0?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon4
+0?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00 at P3oool5
+000002h0oooo00<000000?ooo`3oool0:@3oool3000002`0oooo0`00000[0?ooo`040000003oool0
+oooo0?ooo`<00000:03oool00`000000oooo0?ooo`05000002L0oooo00<000000?ooo`3oool0103o
+ool00`000000oooo0?ooo`0M0?ooo`00@`3oool00`000000oooo0?ooo`0_0?ooo`030000003oool0
+oooo02P0oooo00D000000?ooo`3oool0oooo0000000Z0?ooo`050000003oool0oooo0?ooo`000000
+:P3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo02D0oooo00D000000?ooo`3o
+ool0oooo0000000Z0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool07 at 3oool004@0
+oooo00<000000?ooo`3oool0:P3oool6000002T0oooo00D000000?ooo`3oool0oooo0000000Z0?oo
+o`050000003oool0oooo0?ooo`000000:P3oool010000000oooo0?ooo`0000030?ooo`030000003o
+ool0oooo02D0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`0W0?ooo`030000003o
+ool0oooo00H000007P3oool004D0oooo00<000000?ooo`3oool0:@3oool01 at 000000oooo0?ooo`3o
+ool0000002X0oooo00D000000?ooo`3oool0oooo0000000[0?ooo`<00000:`3oool010000000oooo
+0?ooo`0000030?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool00`3oool00`000000
+oooo0?ooo`0V0?ooo`040000003oool0oooo000000<0oooo00<000000?ooo`3oool07 at 3oool004H0
+oooo00<000000?ooo`3oool0:@3oool010000000oooo0?ooo`00000Z0?ooo`@00000:`3oool01 at 00
+0000oooo0?ooo`3oool0000002P0oooo00<000000?ooo`0000000P3oool01 at 000000oooo0?ooo`3o
+ool0000002D0oooo00<000000?ooo`0000001P3oool00`000000oooo0?ooo`0S0?ooo`030000003o
+ool0000000<0oooo00 at 000000?ooo`3oool000007`3oool00480oooo00D000000?ooo`3oool0oooo
+0000000/0?ooo`030000003oool0000002X0oooo00D000000?ooo`3oool0oooo0000000Z0?ooo`05
+0000003oool0oooo0?ooo`000000:@3oool200000080oooo00D000000?ooo`3oool0oooo0000000V
+0?ooo`8000000P3oool01 at 000000oooo0?ooo`3oool0000002H0oooo0P0000040?ooo`030000003o
+ool0000001l0oooo00130?ooo`<00000;P3oool2000002/0oooo0`00000/0?ooo`<00000:`3oool0
+10000000oooo0?ooo`3oool3000002P0oooo00 at 000000?ooo`3oool0oooo0`00000X0?ooo`030000
+003oool0oooo00<0oooo0P00000O0?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?oo
+o`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`005P3ooooo000006h00000000F0?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`080?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`090?oo
+o`030000003oool0oooo00P0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`090?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`090?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`080?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`090?oo
+o`030000003oool0oooo00P0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`090?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`090?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`080?oo
+o`030000003oool0oooo00T0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`090?oo
+o`030000003oool0oooo00T0oooo000F0?ooo`030000003oool0oooo02`0oooo00<000000?ooo`3o
+ool0;03oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02`0oooo00<000000?ooo`3o
+ool0;03oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02`0oooo00<000000?ooo`3o
+ool08 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?oo
+o`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0
+oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?oo
+o`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0
+oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo0P00003o0?oo
+of`0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0
+o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<0
+00000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?oo
+o`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3o
+ool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+of/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0
+o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<0
+00000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?oo
+o`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3o
+ool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+of/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0
+o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooof/0oooo000F0?ooo`800000o`3ooom/0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?oo
+o`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofX0oooo0 at 00000001H0oooo
+00<000000?ooo`3oool0o`3ooomY0?ooo`4000000 at 3oool001H0oooo00<000000?ooo`3oool0o`3o
+oomX0?ooo`4000000 at 3oool10?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofH0oooo0P000003
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofD0oooo00<000000?ooo`3oool00`3oool001H0
+oooo00<000000?ooo`3oool0o`3ooomT0?ooo`030000003oool0oooo00 at 0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooH`3oool00`000000oooo0?ooo`050?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooof80oooo00<000000?ooo`3oool01P3oool001H0oooo00<000000?ooo`3oool0o`3ooomQ
+0?ooo`030000003oool0oooo00L0oooo000F0?ooo`030000003oool0oooo0?l0ooooG`3oool20000
+00X0oooo000F0?ooo`030000003oool0oooo0?l0ooooGP3oool00`000000oooo0?ooo`0:0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?oooed0oooo00<000000?ooo`3oool02`3oool001H0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`030000003oool0oooo00`0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooF`3oool00`000000oooo0?ooo`0=0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+oeX0oooo00<000000?ooo`3oool03P3oool001H0oooo00<000000?ooo`3oool0o`3ooomI0?ooo`03
+0000003oool0oooo00l0oooo000F0?ooo`030000003oool0oooo0?l0ooooF03oool00`000000oooo
+0?ooo`0 at 0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooeL0oooo00<000000?ooo`3oool04 at 3o
+ool001H0oooo00<000000?ooo`3oool0o`3ooomF0?ooo`030000003oool0oooo0180oooo000F0?oo
+o`030000003oool0oooo0?l0ooooE at 3oool00`000000oooo0?ooo`0C0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?oooe<0oooo0P00000F0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooe80oooo
+00<000000?ooo`3oool05P3oool001H0oooo00<000000?ooo`3oool0o`3ooomA0?ooo`030000003o
+ool0oooo01L0oooo000F0?ooo`030000003oool0oooo0?l0ooooD03oool00`000000oooo0?ooo`0H
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooodl0oooo00<000000?ooo`3oool06 at 3oool001H0
+oooo00<000000?ooo`3oool0o`3ooom>0?ooo`030000003oool0oooo01X0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooC at 3oool00`000000oooo0?ooo`0K0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?oood`0oooo00<000000?ooo`3oool0703oool001H0oooo00<000000?ooo`3oool0o`3ooom;
+0?ooo`030000003oool0oooo01d0oooo000F0?ooo`030000003oool0oooo0?l0ooooBP3oool00`00
+0000oooo0?ooo`0N0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooodX0oooo00<000000?ooo`3o
+ool07P3oool001H0oooo00<000000?ooo`3oool0o`3ooom90?ooo`030000003oool0oooo01l0oooo
+000F0?ooo`800000o`3ooom90?ooo`030000003oool0oooo0200oooo000F0?ooo`030000003oool0
+oooo0?l0ooooA`3oool00`000000oooo0?ooo`0Q0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+odH0oooo00<000000?ooo`3oool08P3oool001H0oooo00<000000?ooo`3oool0o`3ooom60?ooo`03
+0000003oool0oooo0280oooo000F0?ooo`030000003oool0oooo0?l0ooooA at 3oool00`000000oooo
+0?ooo`0S0?ooo`005P3oool00`000000oooo0?ooo`3o0?oood at 0oooo00<000000?ooo`3oool0903o
+ool001H0oooo00<000000?ooo`3oool0o`3ooom30?ooo`030000003oool0oooo02D0oooo000F0?oo
+o`030000003oool0oooo0?l0oooo@`3oool00`000000oooo0?ooo`0U0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?oood80oooo00<000000?ooo`3oool09P3oool001H0oooo00<000000?ooo`3oool0
+o`3ooom10?ooo`030000003oool0oooo02L0oooo000F0?ooo`030000003oool0oooo0?l0oooo at 03o
+ool00`000000oooo0?ooo`0X0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooocl0oooo00<00000
+0?ooo`3oool0:@3oool001H0oooo00<000000?ooo`3oool0o`3ooolo0?ooo`030000003oool0oooo
+02T0oooo000F0?ooo`030000003oool0oooo0?l0oooo?P3oool00`000000oooo0?ooo`0Z0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooocd0oooo00<000000?ooo`3oool0:`3oool001H0oooo00<0
+00000?ooo`3oool0o`3oooll0?ooo`030000003oool0oooo02`0oooo000F0?ooo`030000003oool0
+oooo0?l0oooo>`3oool00`000000oooo0?ooo`0]0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+oc/0oooo00<000000?ooo`3oool0;@3oool001H0oooo00<000000?ooo`3oool0o`3ooolj0?ooo`03
+0000003oool0oooo02h0oooo000F0?ooo`030000003oool0oooo0?l0oooo>@3oool00`000000oooo
+0?ooo`0_0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooocP0oooo00<000000?ooo`3oool0<03o
+ool001H0oooo00<000000?ooo`3oool0o`3ooolh0?ooo`030000003oool0oooo0300oooo000F0?oo
+o`030000003oool0oooo0?l0oooo=`3oool00`000000oooo0?ooo`0a0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooocH0oooo00<000000?ooo`3oool0<P3oool001H0oooo00<000000?ooo`3oool0
+o`3ooole0?ooo`030000003oool0oooo03<0oooo000F0?ooo`030000003oool0oooo0?l0oooo=@3o
+ool00`000000oooo0?ooo`0c0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooc at 0oooo00<00000
+0?ooo`3oool0=03oool001H0oooo00<000000?ooo`3oool0o`3ooolc0?ooo`030000003oool0oooo
+03D0oooo000F0?ooo`030000003oool0oooo0?l0oooo<P3oool00`000000oooo0?ooo`0f0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?oooc80oooo00<000000?ooo`3oool0=@3oool1000000005P3o
+ool00`000000oooo0?ooo`3o0?oooc40oooo00<000000?ooo`3oool0=@3oool100000040oooo000F
+0?ooo`030000003oool0oooo0?l0oooo<03oool00`000000oooo0?ooo`0f0?ooo`4000000 at 3oool0
+01H0oooo00<000000?ooo`3oool0o`3oool_0?ooo`030000003oool0oooo03H0oooo0 at 0000010?oo
+o`40oooo000F0?ooo`030000003oool0oooo0?l0oooo;`3oool00`000000oooo0?ooo`0e0?ooo`03
+0000003oool0oooo0040oooo00040?ooo`<000000`3oool00`000000oooo00000004000000D0oooo
+00<000000?ooo`3oool0o`3oool^0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool0
+0P3oool000<0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo00H0oooo
+00<000000?ooo`3oool0o`3oool]0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool0
+0P3oool000<0oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo00D0oooo
+0`00003o0?ooobd0oooo00<000000?ooo`3oool0=@3oool00`000000oooo0?ooo`030?ooo`000`3o
+ool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0103oool00`000000oooo
+0?ooo`3o0?ooob`0oooo00<000000?ooo`3oool0=@3oool00`000000oooo0?ooo`040?ooo`000`3o
+ool01 at 000000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3oool00`000000oooo
+0?ooo`3o0?ooob/0oooo00<000000?ooo`3oool0=P3oool00`000000oooo0?ooo`040?ooo`000`3o
+ool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`03
+0000003oool0oooo0?l0oooo:`3oool00`000000oooo0?ooo`0e0?ooo`030000003oool0oooo00D0
+oooo00040?ooo`<000001P3oool3000000H0oooo00<000000?ooo`3oool0o`3ooolZ0?ooo`030000
+003oool0oooo03D0oooo00<000000?ooo`3oool01P3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolY0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool01P3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolY0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool01`3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooolX0?ooo`030000003oool0oooo03D0oooo00<000000?oo
+o`3oool0203oool001H0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool02 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`030000
+003oool0oooo03D0oooo00<000000?ooo`3oool02 at 3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolV0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool02P3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolU0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool02`3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooolU0?ooo`030000003oool0oooo03D0oooo00<000000?oo
+o`3oool02`3oool001H0oooo00<000000?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool0303oool001H0oooo00<000000?ooo`3oool0o`3ooolS0?ooo`030000
+003oool0oooo03D0oooo00<000000?ooo`3oool03 at 3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolS0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool03 at 3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolR0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool03P3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`030000003oool0oooo03D0oooo00<000000?oo
+o`3oool03`3oool001H0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool03`3oool001H0oooo00<000000?ooo`3oool0o`3ooolP0?ooo`030000
+003oool0oooo03D0oooo00<000000?ooo`3oool0403oool001H0oooo00<000000?ooo`3oool0o`3o
+oolO0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool04 at 3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolO0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool04 at 3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooolN0?ooo`030000003oool0oooo03D0oooo00<000000?oo
+o`3oool04P3oool001H0oooo00<000000?ooo`3oool0o`3ooolM0?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool04`3oool001H0oooo00<000000?ooo`3oool0o`3ooolM0?ooo`030000
+003oool0oooo03D0oooo00<000000?ooo`3oool04`3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolL0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool0503oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolL0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool05 at 3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooolK0?ooo`030000003oool0oooo03D0oooo00<000000?oo
+o`3oool05 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooolK0?ooo`030000003oool0oooo03 at 0
+oooo00<000000?ooo`3oool05P3oool001H0oooo00<000000?ooo`3oool0o`3ooolJ0?ooo`030000
+003oool0oooo03 at 0oooo00<000000?ooo`3oool05`3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolJ0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool05`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolI0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool0603oool0
+01H0oooo00<000000?ooo`3oool0o`3ooolI0?ooo`030000003oool0oooo03<0oooo00<000000?oo
+o`3oool06 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooolH0?ooo`030000003oool0oooo03 at 0
+oooo00<000000?ooo`3oool06 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooolH0?ooo`030000
+003oool0oooo03<0oooo00<000000?ooo`3oool06P3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolG0?ooo`030000003oool0oooo03<0oooo00<000000?ooo`3oool06`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolG0?ooo`030000003oool0oooo03<0oooo00<000000?ooo`3oool06`3oool0
+01H0oooo0P00003o0?oooaL0oooo00<000000?ooo`3oool0<`3oool00`000000oooo0?ooo`0L0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?oooaH0oooo00<000000?ooo`3oool0<P3oool00`000000
+oooo0?ooo`0M0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooaD0oooo00<000000?ooo`3oool0
+<`3oool00`000000oooo0?ooo`0M0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooaD0oooo00<0
+00000?ooo`3oool0<P3oool00`000000oooo0?ooo`0N0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?oooa at 0oooo00<000000?ooo`3oool0<`3oool00`000000oooo0?ooo`0N0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?oooa at 0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0O0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?oooa<0oooo00<000000?ooo`3oool0<`3oool00`000000
+oooo0?ooo`0O0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa<0oooo00<000000?ooo`3oool0
+<P3oool00`000000oooo0?ooo`0P0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa80oooo00<0
+00000?ooo`3oool0<`3oool00`000000oooo0?ooo`0P0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?oooa80oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0Q0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?oooa40oooo00<000000?ooo`3oool0<`3oool00`000000oooo0?ooo`0Q0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?oooa40oooo00<000000?ooo`3oool0<P3oool00`000000
+oooo0?ooo`0R0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa00oooo00<000000?ooo`3oool0
+<`3oool00`000000oooo0?ooo`0R0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa00oooo00<0
+00000?ooo`3oool0<P3oool00`000000oooo0?ooo`0S0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooo`l0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0T0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooo`l0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0T0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooo`h0oooo00<000000?ooo`3oool0<P3oool00`000000
+oooo0?ooo`0U0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`h0oooo00<000000?ooo`3oool0
+<P3oool00`000000oooo0?ooo`0U0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`d0oooo00<0
+00000?ooo`3oool0<P3oool00`000000oooo0?ooo`0V0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooo`d0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0V0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooo``0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0W0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooo``0oooo00<000000?ooo`3oool0<P3oool00`000000
+oooo0?ooo`0W0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`/0oooo00<000000?ooo`3oool0
+<P3oool00`000000oooo0?ooo`0X0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`/0oooo00<0
+00000?ooo`3oool0<P3oool00`000000oooo0?ooo`0X0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooo`X0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0Y0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooo`X0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0Y0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooo`T0oooo00<000000?ooo`3oool0<P3oool00`000000
+oooo0?ooo`0Z0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`T0oooo00<000000?ooo`3oool0
+<P3oool00`000000oooo0?ooo`0Z0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`P0oooo00<0
+00000?ooo`3oool0<P3oool00`000000oooo0?ooo`0[0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooo`P0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?ooo`0/0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooo`L0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0/0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooo`L0oooo00<000000?ooo`3oool0<@3oool00`000000
+oooo0?ooo`0]0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`H0oooo00<000000?ooo`3oool0
+<P3oool00`000000oooo0?ooo`0]0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`H0oooo00<0
+00000?ooo`3oool0<@3oool00`000000oooo0?ooo`0^0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooo`D0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0^0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooo`D0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?ooo`0_0?oo
+o`005P3oool200000?l0oooo1 at 3oool00`000000oooo0?ooo`0b0?ooo`030000003oool0oooo02l0
+oooo000F0?ooo`030000003oool0oooo0?l0oooo103oool00`000000oooo0?ooo`0a0?ooo`030000
+003oool0oooo0300oooo000F0?ooo`030000003oool0oooo0?l0oooo0`3oool00`000000oooo0?oo
+o`0b0?ooo`030000003oool0oooo0300oooo000F0?ooo`030000003oool0oooo0?l0oooo0`3oool0
+0`000000oooo0?ooo`0a0?ooo`030000003oool0oooo0340oooo000F0?ooo`030000003oool0oooo
+0?l0oooo0P3oool00`000000oooo0?ooo`0b0?ooo`030000003oool0oooo0340oooo000F0?ooo`03
+0000003oool0oooo0?l0oooo0P3oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo0380
+oooo000F0?ooo`030000003oool0oooo0?l0oooo0 at 3oool00`000000oooo0?ooo`0b0?ooo`030000
+003oool0oooo0380oooo000F0?ooo`030000003oool0oooo0?l0oooo0 at 3oool00`000000oooo0?oo
+o`0a0?ooo`030000003oool0oooo03<0oooo000F0?ooo`030000003oool0oooo0?l0oooo0 at 3oool0
+0`000000oooo0?ooo`0a0?ooo`030000003oool0oooo03<0oooo000F0?ooo`030000003oool0oooo
+0?l0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?ooo`0d0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooo`030000003oool0oooo0340oooo00<000000?ooo`3oool0=03oool001H0oooo
+00<000000?ooo`3oool0oP3oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo03D0oooo
+000F0?ooo`030000003oool0oooo0?h0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?oo
+o`0e0?ooo`005P3oool00`000000oooo0?ooo`3m0?ooo`030000003oool0oooo0340oooo00<00000
+0?ooo`3oool0=P3oool001H0oooo00<000000?ooo`3oool0o at 3oool00`000000oooo0?ooo`0a0?oo
+o`030000003oool0oooo03H0oooo000F0?ooo`030000003oool0oooo0?`0oooo00<000000?ooo`3o
+ool0<@3oool00`000000oooo0?ooo`0g0?ooo`005P3oool00`000000oooo0?ooo`3l0?ooo`030000
+003oool0oooo0340oooo00<000000?ooo`3oool0=`3oool001H0oooo00<000000?ooo`3oool0o03o
+ool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo03P0oooo000F0?ooo`030000003oool0
+oooo0?/0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?ooo`0h0?ooo`005P3oool00`00
+0000oooo0?ooo`3k0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3oool0>@3oool001H0
+oooo00<000000?ooo`3oool0nP3oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo03T0
+oooo000F0?ooo`030000003oool0oooo0?X0oooo00<000000?ooo`3oool0<03oool00`000000oooo
+0?ooo`0j0?ooo`005P3oool00`000000oooo0?ooo`3i0?ooo`030000003oool0oooo0340oooo00<0
+00000?ooo`3oool0>P3oool001H0oooo00<000000?ooo`3oool0n at 3oool00`000000oooo0?ooo`0`
+0?ooo`030000003oool0oooo03/0oooo000F0?ooo`030000003oool0oooo0?P0oooo00<000000?oo
+o`3oool0<@3oool00`000000oooo0?ooo`0k0?ooo`005P3oool00`000000oooo0?ooo`3h0?ooo`03
+0000003oool0oooo0300oooo00<000000?ooo`3oool0?03oool001H0oooo00<000000?ooo`3oool0
+n03oool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo03`0oooo000F0?ooo`030000003o
+ool0oooo0?L0oooo00<000000?ooo`3oool0<03oool00`000000oooo0?ooo`0m0?ooo`005P3oool0
+0`000000oooo0?ooo`3g0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3oool0?@3oool0
+01H0oooo00<000000?ooo`3oool0mP3oool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo
+03h0oooo000F0?ooo`030000003oool0oooo0?H0oooo00<000000?ooo`3oool0<03oool00`000000
+oooo0?ooo`0n0?ooo`005P3oool00`000000oooo0?ooo`3e0?ooo`030000003oool0oooo0300oooo
+00<000000?ooo`3oool0?`3oool001H0oooo00<000000?ooo`3oool0m at 3oool00`000000oooo0?oo
+o`0`0?ooo`030000003oool0oooo03l0oooo000F0?ooo`030000003oool0oooo0?@0oooo00<00000
+0?ooo`3oool0<03oool00`000000oooo0?ooo`100?ooo`005P3oool00`000000oooo0?ooo`3d0?oo
+o`030000003oool0oooo0300oooo00<000000?ooo`3oool0 at 03oool001H0oooo00<000000?ooo`3o
+ool0m03oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo0440oooo000F0?ooo`800000
+m03oool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo0440oooo000F0?ooo`030000003o
+ool0oooo0?<0oooo00<000000?ooo`3oool0;`3oool00`000000oooo0?ooo`120?ooo`005P3oool0
+0`000000oooo0?ooo`3b0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3oool0 at P3oool0
+01H0oooo00<000000?ooo`3oool0lP3oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo
+04<0oooo000F0?ooo`030000003oool0oooo0?40oooo00<000000?ooo`3oool0<03oool00`000000
+oooo0?ooo`130?ooo`005P3oool00`000000oooo0?ooo`3a0?ooo`030000003oool0oooo02l0oooo
+00<000000?ooo`3oool0A03oool001H0oooo00<000000?ooo`3oool0l03oool00`000000oooo0?oo
+o`0`0?ooo`030000003oool0oooo04 at 0oooo000F0?ooo`030000003oool0oooo0?00oooo00<00000
+0?ooo`3oool0;`3oool00`000000oooo0?ooo`150?ooo`005P3oool00`000000oooo0?ooo`3`0?oo
+o`030000003oool0oooo02l0oooo00<000000?ooo`3oool0A at 3oool001H0oooo00<000000?ooo`3o
+ool0k`3oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo04H0oooo000F0?ooo`030000
+003oool0oooo0>l0oooo00<000000?ooo`3oool0;`3oool00`000000oooo0?ooo`160?ooo`005P3o
+ool00`000000oooo0?ooo`3^0?ooo`030000003oool0oooo02l0oooo00<000000?ooo`3oool0A`3o
+ool001H0oooo00<000000?ooo`3oool0kP3oool00`000000oooo0?ooo`0_0?ooo`030000003oool0
+oooo04L0oooo000F0?ooo`030000003oool0oooo0>h0oooo00<000000?ooo`3oool0;P3oool00`00
+0000oooo0?ooo`180?ooo`005P3oool00`000000oooo0?ooo`3]0?ooo`030000003oool0oooo02l0
+oooo00<000000?ooo`3oool0B03oool001H0oooo00<000000?ooo`3oool0k at 3oool00`000000oooo
+0?ooo`0^0?ooo`030000003oool0oooo04P0oooo0 at 00000001H0oooo00<000000?ooo`3oool0k at 3o
+ool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo04L0oooo0 at 0000010?ooo`005P3oool0
+0`000000oooo0?ooo`3/0?ooo`030000003oool0oooo02h0oooo00<000000?ooo`3oool0B03oool1
+00000040oooo000F0?ooo`030000003oool0oooo0>`0oooo00<000000?ooo`3oool0;P3oool00`00
+0000oooo0?ooo`170?ooo`4000000 at 3oool10?ooo`005P3oool00`000000oooo0?ooo`3[0?ooo`03
+0000003oool0oooo02l0oooo00<000000?ooo`3oool0A`3oool100000040oooo0 at 3oool001H0oooo
+00<000000?ooo`3oool0j`3oool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo04L0oooo
+00<000000?ooo`3oool00 at 3oool001H0oooo00<000000?ooo`3oool0j`3oool00`000000oooo0?oo
+o`0^0?ooo`030000003oool0oooo04L0oooo00<000000?ooo`3oool00 at 3oool001H0oooo00<00000
+0?ooo`3oool0jP3oool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo04L0oooo00<00000
+0?ooo`3oool00P3oool001H0oooo00<000000?ooo`3oool0jP3oool00`000000oooo0?ooo`0^0?oo
+o`030000003oool0oooo04L0oooo00<000000?ooo`3oool00P3oool001H0oooo00<000000?ooo`3o
+ool0j at 3oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo04H0oooo00<000000?ooo`3o
+ool00`3oool001H0oooo00<000000?ooo`3oool0j at 3oool00`000000oooo0?ooo`0^0?ooo`030000
+003oool0oooo04L0oooo00<000000?ooo`3oool00`3oool001H0oooo00<000000?ooo`3oool0j at 3o
+ool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo04H0oooo00<000000?ooo`3oool0103o
+ool001H0oooo00<000000?ooo`3oool0j03oool00`000000oooo0?ooo`0^0?ooo`030000003oool0
+oooo04L0oooo00<000000?ooo`3oool0103oool001H0oooo00<000000?ooo`3oool0j03oool00`00
+0000oooo0?ooo`0^0?ooo`030000003oool0oooo04H0oooo00<000000?ooo`3oool01 at 3oool001H0
+oooo00<000000?ooo`3oool0j03oool00`000000oooo0?ooo`0]0?ooo`030000003oool0oooo04L0
+oooo00<000000?ooo`3oool01 at 3oool001H0oooo00<000000?ooo`3oool0i`3oool00`000000oooo
+0?ooo`0^0?ooo`030000003oool0oooo04H0oooo00<000000?ooo`3oool01P3oool001H0oooo00<0
+00000?ooo`3oool0i`3oool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo04H0oooo00<0
+00000?ooo`3oool01P3oool001H0oooo00<000000?ooo`3oool0iP3oool00`000000oooo0?ooo`0^
+0?ooo`030000003oool0oooo04H0oooo00<000000?ooo`3oool01`3oool001H0oooo00<000000?oo
+o`3oool0iP3oool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo04H0oooo00<000000?oo
+o`3oool01`3oool000 at 0oooo0`0000030?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3o
+ool00`3oool00`000000oooo0?ooo`3V0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3o
+ool0AP3oool00`000000oooo0?ooo`080?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000P0
+oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`3U0?ooo`030000003oool0oooo02h0
+oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`080?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000 at 0oooo1P0000040?ooo`030000003oool0oooo0>D0oooo00<000000?ooo`3o
+ool0;P3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo00T0oooo00030?ooo`050000
+003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo0`00003T0?oo
+o`030000003oool0oooo02h0oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`090?oo
+o`000`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00 at 000000?ooo`3oool000001 at 3oool0
+0`000000oooo0?ooo`3T0?ooo`030000003oool0oooo02h0oooo00<000000?ooo`3oool0A at 3oool0
+0`000000oooo0?ooo`0:0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00<00000
+0?ooo`0000001 at 3oool00`000000oooo0?ooo`3T0?ooo`030000003oool0oooo02d0oooo00<00000
+0?ooo`3oool0AP3oool00`000000oooo0?ooo`0:0?ooo`00103oool3000000P0oooo0P0000050?oo
+o`030000003oool0oooo0><0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`150?oo
+o`030000003oool0oooo00/0oooo000F0?ooo`030000003oool0oooo0><0oooo00<000000?ooo`3o
+ool0;P3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo00/0oooo000F0?ooo`030000
+003oool0oooo0><0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`150?ooo`030000
+003oool0oooo00`0oooo000F0?ooo`030000003oool0oooo0>80oooo00<000000?ooo`3oool0;P3o
+ool00`000000oooo0?ooo`150?ooo`030000003oool0oooo00`0oooo000F0?ooo`030000003oool0
+oooo0>80oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`150?ooo`030000003oool0
+oooo00d0oooo000F0?ooo`030000003oool0oooo0>40oooo00<000000?ooo`3oool0;P3oool00`00
+0000oooo0?ooo`150?ooo`030000003oool0oooo00d0oooo000F0?ooo`030000003oool0oooo0>40
+oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo00h0
+oooo000F0?ooo`030000003oool0oooo0>40oooo00<000000?ooo`3oool0;@3oool00`000000oooo
+0?ooo`150?ooo`030000003oool0oooo00h0oooo000F0?ooo`030000003oool0oooo0>00oooo00<0
+00000?ooo`3oool0;P3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo00h0oooo000F
+0?ooo`030000003oool0oooo0>00oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`15
+0?ooo`030000003oool0oooo00l0oooo000F0?ooo`030000003oool0oooo0>00oooo00<000000?oo
+o`3oool0;@3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo00l0oooo000F0?ooo`03
+0000003oool0oooo0=l0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`150?ooo`03
+0000003oool0oooo0100oooo000F0?ooo`030000003oool0oooo0=l0oooo00<000000?ooo`3oool0
+;@3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo0100oooo000F0?ooo`030000003o
+ool0oooo0=l0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`140?ooo`030000003o
+ool0oooo0140oooo000F0?ooo`030000003oool0oooo0=h0oooo00<000000?ooo`3oool0;@3oool0
+0`000000oooo0?ooo`150?ooo`030000003oool0oooo0140oooo000F0?ooo`030000003oool0oooo
+0=h0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo
+0180oooo000F0?ooo`030000003oool0oooo0=h0oooo00<000000?ooo`3oool0;03oool00`000000
+oooo0?ooo`150?ooo`030000003oool0oooo0180oooo000F0?ooo`030000003oool0oooo0=d0oooo
+00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo01<0oooo
+000F0?ooo`030000003oool0oooo0=d0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?oo
+o`140?ooo`030000003oool0oooo01<0oooo000F0?ooo`030000003oool0oooo0=d0oooo00<00000
+0?ooo`3oool0;03oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo01 at 0oooo000F0?oo
+o`030000003oool0oooo0=`0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`140?oo
+o`030000003oool0oooo01 at 0oooo000F0?ooo`030000003oool0oooo0=`0oooo00<000000?ooo`3o
+ool0;03oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo01D0oooo000F0?ooo`030000
+003oool0oooo0=`0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`140?ooo`030000
+003oool0oooo01D0oooo000F0?ooo`030000003oool0oooo0=/0oooo00<000000?ooo`3oool0;@3o
+ool00`000000oooo0?ooo`130?ooo`030000003oool0oooo01H0oooo000F0?ooo`030000003oool0
+oooo0=/0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`140?ooo`030000003oool0
+oooo01H0oooo000F0?ooo`030000003oool0oooo0=/0oooo00<000000?ooo`3oool0;03oool00`00
+0000oooo0?ooo`140?ooo`030000003oool0oooo01H0oooo000F0?ooo`030000003oool0oooo0=X0
+oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo01L0
+oooo000F0?ooo`030000003oool0oooo0=X0oooo00<000000?ooo`3oool0;03oool00`000000oooo
+0?ooo`140?ooo`030000003oool0oooo01L0oooo000F0?ooo`030000003oool0oooo0=X0oooo00<0
+00000?ooo`3oool0;03oool00`000000oooo0?ooo`130?ooo`030000003oool0oooo01P0oooo000F
+0?ooo`030000003oool0oooo0=T0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`14
+0?ooo`030000003oool0oooo01P0oooo000F0?ooo`030000003oool0oooo0=T0oooo00<000000?oo
+o`3oool0;03oool00`000000oooo0?ooo`130?ooo`030000003oool0oooo01T0oooo000F0?ooo`03
+0000003oool0oooo0=T0oooo00<000000?ooo`3oool0:`3oool00`000000oooo0?ooo`140?ooo`03
+0000003oool0oooo01T0oooo000F0?ooo`030000003oool0oooo0=P0oooo00<000000?ooo`3oool0
+;03oool00`000000oooo0?ooo`130?ooo`030000003oool0oooo01X0oooo000F0?ooo`800000f at 3o
+ool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo04 at 0oooo00<000000?ooo`3oool06P3o
+ool001H0oooo00<000000?ooo`3oool0f03oool00`000000oooo0?ooo`0[0?ooo`030000003oool0
+oooo04<0oooo00<000000?ooo`3oool06`3oool001H0oooo00<000000?ooo`3oool0e`3oool00`00
+0000oooo0?ooo`0/0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool06`3oool001H0
+oooo00<000000?ooo`3oool0e`3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo04<0
+oooo00<000000?ooo`3oool0703oool001H0oooo00<000000?ooo`3oool0e`3oool00`000000oooo
+0?ooo`0[0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool0703oool001H0oooo00<0
+00000?ooo`3oool0eP3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo04<0oooo00<0
+00000?ooo`3oool07 at 3oool001H0oooo00<000000?ooo`3oool0eP3oool00`000000oooo0?ooo`0[
+0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool07 at 3oool001H0oooo00<000000?oo
+o`3oool0eP3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo04<0oooo00<000000?oo
+o`3oool07 at 3oool001H0oooo00<000000?ooo`3oool0e at 3oool00`000000oooo0?ooo`0[0?ooo`03
+0000003oool0oooo04<0oooo00<000000?ooo`3oool07P3oool001H0oooo00<000000?ooo`3oool0
+e at 3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool0
+7P3oool001H0oooo00<000000?ooo`3oool0e at 3oool00`000000oooo0?ooo`0Z0?ooo`030000003o
+ool0oooo04<0oooo00<000000?ooo`3oool07`3oool001H0oooo00<000000?ooo`3oool0e03oool0
+0`000000oooo0?ooo`0[0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool07`3oool0
+01H0oooo00<000000?ooo`3oool0e03oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo
+0480oooo00<000000?ooo`3oool0803oool001H0oooo00<000000?ooo`3oool0e03oool00`000000
+oooo0?ooo`0Z0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool0803oool001H0oooo
+00<000000?ooo`3oool0d`3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo0480oooo
+00<000000?ooo`3oool08 at 3oool001H0oooo00<000000?ooo`3oool0d`3oool00`000000oooo0?oo
+o`0Z0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool08 at 3oool001H0oooo00<00000
+0?ooo`3oool0d`3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo04<0oooo00<00000
+0?ooo`3oool08 at 3oool001H0oooo00<000000?ooo`3oool0dP3oool00`000000oooo0?ooo`0[0?oo
+o`030000003oool0oooo0480oooo00<000000?ooo`3oool08P3oool001H0oooo00<000000?ooo`3o
+ool0dP3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3o
+ool08P3oool001H0oooo00<000000?ooo`3oool0dP3oool00`000000oooo0?ooo`0Z0?ooo`030000
+003oool0oooo0480oooo00<000000?ooo`3oool08`3oool001H0oooo00<000000?ooo`3oool0d at 3o
+ool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool08`3o
+ool001H0oooo00<000000?ooo`3oool0d at 3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0
+oooo0480oooo00<000000?ooo`3oool0903oool001H0oooo00<000000?ooo`3oool0d at 3oool00`00
+0000oooo0?ooo`0Z0?ooo`030000003oool0oooo0480oooo00<000000?ooo`3oool0903oool001H0
+oooo00<000000?ooo`3oool0d03oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo0480
+oooo00<000000?ooo`3oool09 at 3oool001H0oooo00<000000?ooo`3oool0d03oool00`000000oooo
+0?ooo`0Z0?ooo`030000003oool0oooo0480oooo00<000000?ooo`3oool09 at 3oool001H0oooo00<0
+00000?ooo`3oool0d03oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo04<0oooo00<0
+00000?ooo`3oool09 at 3oool001H0oooo00<000000?ooo`3oool0c`3oool00`000000oooo0?ooo`0Z
+0?ooo`030000003oool0oooo0480oooo00<000000?ooo`3oool09P3oool001H0oooo00<000000?oo
+o`3oool0c`3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo0480oooo00<000000?oo
+o`3oool09P3oool001H0oooo00<000000?ooo`3oool0c`3oool00`000000oooo0?ooo`0Y0?ooo`03
+0000003oool0oooo0480oooo00<000000?ooo`3oool09`3oool001H0oooo00<000000?ooo`3oool0
+cP3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo0480oooo00<000000?ooo`3oool0
+9`3oool001H0oooo00<000000?ooo`3oool0cP3oool00`000000oooo0?ooo`0Z0?ooo`030000003o
+ool0oooo0440oooo00<000000?ooo`3oool0:03oool001H0oooo00<000000?ooo`3oool0cP3oool0
+0`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo0480oooo00<000000?ooo`3oool0:03oool0
+01H0oooo00<000000?ooo`3oool0cP3oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo
+0480oooo00<000000?ooo`3oool0:03oool001H0oooo00<000000?ooo`3oool0c at 3oool00`000000
+oooo0?ooo`0Y0?ooo`030000003oool0oooo0480oooo00<000000?ooo`3oool0:@3oool001H0oooo
+00<000000?ooo`3oool0c at 3oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo0480oooo
+00<000000?ooo`3oool0:@3oool001H0oooo00<000000?ooo`3oool0c at 3oool00`000000oooo0?oo
+o`0Y0?ooo`030000003oool0oooo0440oooo00<000000?ooo`3oool0:P3oool001H0oooo00<00000
+0?ooo`3oool0c03oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo0480oooo00<00000
+0?ooo`3oool0:P3oool001H0oooo0P00003=0?ooo`030000003oool0oooo02T0oooo00<000000?oo
+o`3oool0@@3oool00`000000oooo0?ooo`0[0?ooo`005P3oool00`000000oooo0?ooo`3<0?ooo`03
+0000003oool0oooo02P0oooo00<000000?ooo`3oool0 at P3oool00`000000oooo0?ooo`0[0?ooo`00
+5P3oool00`000000oooo0?ooo`3;0?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3oool0
+@@3oool00`000000oooo0?ooo`0/0?ooo`005P3oool00`000000oooo0?ooo`3;0?ooo`030000003o
+ool0oooo02T0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0/0?ooo`005P3oool0
+0`000000oooo0?ooo`3;0?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0 at P3oool0
+0`000000oooo0?ooo`0/0?ooo`005P3oool00`000000oooo0?ooo`3:0?ooo`030000003oool0oooo
+02T0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0]0?ooo`005P3oool00`000000
+oooo0?ooo`3:0?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0 at P3oool00`000000
+oooo0?ooo`0]0?ooo`005P3oool00`000000oooo0?ooo`3:0?ooo`030000003oool0oooo02P0oooo
+00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0^0?ooo`005P3oool00`000000oooo0?oo
+o`390?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?oo
+o`0^0?ooo`005P3oool00`000000oooo0?ooo`390?ooo`030000003oool0oooo02P0oooo00<00000
+0?ooo`3oool0@@3oool00`000000oooo0?ooo`0_0?ooo`005P3oool00`000000oooo0?ooo`390?oo
+o`030000003oool0oooo02P0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0_0?oo
+o`005P3oool00`000000oooo0?ooo`380?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3o
+ool0 at 03oool00`000000oooo0?ooo`0`0?ooo`005P3oool00`000000oooo0?ooo`380?ooo`030000
+003oool0oooo02P0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0`0?ooo`005P3o
+ool00`000000oooo0?ooo`380?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0@@3o
+ool00`000000oooo0?ooo`0`0?ooo`005P3oool00`000000oooo0?ooo`370?ooo`030000003oool0
+oooo02P0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0a0?ooo`005P3oool00`00
+0000oooo0?ooo`370?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0@@3oool00`00
+0000oooo0?ooo`0a0?ooo`005P3oool00`000000oooo0?ooo`370?ooo`030000003oool0oooo02P0
+oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0b0?ooo`005P3oool00`000000oooo
+0?ooo`370?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3oool0@@3oool00`000000oooo
+0?ooo`0b0?ooo`005P3oool00`000000oooo0?ooo`360?ooo`030000003oool0oooo02P0oooo00<0
+00000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0c0?ooo`005P3oool00`000000oooo0?ooo`36
+0?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0c
+0?ooo`005P3oool00`000000oooo0?ooo`360?ooo`030000003oool0oooo02L0oooo00<000000?oo
+o`3oool0 at 03oool00`000000oooo0?ooo`0d0?ooo`005P3oool00`000000oooo0?ooo`350?ooo`03
+0000003oool0oooo02P0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0d0?ooo`00
+5P3oool00`000000oooo0?ooo`350?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3oool0
+@@3oool00`000000oooo0?ooo`0d0?ooo`005P3oool00`000000oooo0?ooo`350?ooo`030000003o
+ool0oooo02L0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0e0?ooo`005P3oool0
+0`000000oooo0?ooo`340?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0 at 03oool0
+0`000000oooo0?ooo`0e0?ooo`005P3oool00`000000oooo0?ooo`340?ooo`030000003oool0oooo
+02L0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0f0?ooo`005P3oool00`000000
+oooo0?ooo`340?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3oool0 at 03oool00`000000
+oooo0?ooo`0f0?ooo`005P3oool00`000000oooo0?ooo`330?ooo`030000003oool0oooo02L0oooo
+00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0g0?ooo`005P3oool00`000000oooo0?oo
+o`330?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?oo
+o`0g0?ooo`005P3oool00`000000oooo0?ooo`330?ooo`030000003oool0oooo02L0oooo00<00000
+0?ooo`3oool0?`3oool00`000000oooo0?ooo`0h0?ooo`005P3oool00`000000oooo0?ooo`320?oo
+o`030000003oool0oooo02L0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0h0?oo
+o`005P3oool00`000000oooo0?ooo`320?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3o
+ool0 at 03oool00`000000oooo0?ooo`0h0?ooo`005P3oool00`000000oooo0?ooo`320?ooo`030000
+003oool0oooo02L0oooo00<000000?ooo`3oool0?`3oool00`000000oooo0?ooo`0i0?ooo`005P3o
+ool00`000000oooo0?ooo`320?ooo`030000003oool0oooo02H0oooo00<000000?ooo`3oool0 at 03o
+ool00`000000oooo0?ooo`0i0?ooo`005P3oool00`000000oooo0?ooo`310?ooo`030000003oool0
+oooo02L0oooo00<000000?ooo`3oool0?`3oool00`000000oooo0?ooo`0j0?ooo`005P3oool00`00
+0000oooo0?ooo`310?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3oool0?`3oool00`00
+0000oooo0?ooo`0j0?ooo`005P3oool200000<80oooo00<000000?ooo`3oool09P3oool00`000000
+oooo0?ooo`0o0?ooo`030000003oool0oooo03/0oooo000F0?ooo`030000003oool0oooo0<00oooo
+00<000000?ooo`3oool09`3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo03/0oooo
+000F0?ooo`030000003oool0oooo0<00oooo00<000000?ooo`3oool09P3oool00`000000oooo0?oo
+o`0o0?ooo`030000003oool0oooo03`0oooo000F0?ooo`030000003oool0oooo0<00oooo00<00000
+0?ooo`3oool09P3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo03`0oooo000F0?oo
+o`030000003oool0oooo0<00oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`0o0?oo
+o`030000003oool0oooo03`0oooo000F0?ooo`030000003oool0oooo0;l0oooo00<000000?ooo`3o
+ool09P3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo03d0oooo000F0?ooo`030000
+003oool0oooo0;l0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`0o0?ooo`030000
+003oool0oooo03d0oooo000F0?ooo`030000003oool0oooo0;l0oooo00<000000?ooo`3oool09P3o
+ool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo03h0oooo000F0?ooo`030000003oool0
+oooo0;h0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0
+oooo03h0oooo000F0?ooo`030000003oool0oooo0;h0oooo00<000000?ooo`3oool09P3oool00`00
+0000oooo0?ooo`0n0?ooo`030000003oool0oooo03l0oooo000F0?ooo`030000003oool0oooo0;h0
+oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo03l0
+oooo000F0?ooo`030000003oool0oooo0;h0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo
+0?ooo`0o0?ooo`030000003oool0oooo03l0oooo000F0?ooo`030000003oool0oooo0;d0oooo00<0
+00000?ooo`3oool09P3oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo0400oooo000F
+0?ooo`030000003oool0oooo0;d0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0o
+0?ooo`030000003oool0oooo0400oooo000F0?ooo`030000003oool0oooo0;d0oooo00<000000?oo
+o`3oool09 at 3oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo0440oooo000F0?ooo`03
+0000003oool0oooo0;`0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`0n0?ooo`03
+0000003oool0oooo0440oooo000F0?ooo`030000003oool0oooo0;`0oooo00<000000?ooo`3oool0
+9 at 3oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo0480oooo000F0?ooo`030000003o
+ool0oooo0;`0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0n0?ooo`030000003o
+ool0oooo0480oooo000F0?ooo`030000003oool0oooo0;/0oooo00<000000?ooo`3oool09P3oool0
+0`000000oooo0?ooo`0n0?ooo`030000003oool0oooo0480oooo000F0?ooo`030000003oool0oooo
+0;/0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo
+04<0oooo000F0?ooo`030000003oool0oooo0;/0oooo00<000000?ooo`3oool09 at 3oool00`000000
+oooo0?ooo`0n0?ooo`030000003oool0oooo04<0oooo000F0?ooo`030000003oool0oooo0;/0oooo
+00<000000?ooo`3oool0903oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo04 at 0oooo
+000F0?ooo`030000003oool0oooo0;X0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?oo
+o`0n0?ooo`030000003oool0oooo04 at 0oooo000F0?ooo`030000003oool0oooo0;X0oooo00<00000
+0?ooo`3oool09 at 3oool00`000000oooo0?ooo`0m0?ooo`030000003oool0oooo04D0oooo000F0?oo
+o`030000003oool0oooo0;X0oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`0n0?oo
+o`030000003oool0oooo04D0oooo000F0?ooo`030000003oool0oooo0;T0oooo00<000000?ooo`3o
+ool09 at 3oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo04D0oooo000F0?ooo`030000
+003oool0oooo0;T0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0m0?ooo`030000
+003oool0oooo04H0oooo000F0?ooo`030000003oool0oooo0;T0oooo00<000000?ooo`3oool0903o
+ool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo04H0oooo000F0?ooo`030000003oool0
+oooo0;T0oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`0m0?ooo`030000003oool0
+oooo04L0oooo000F0?ooo`030000003oool0oooo0;P0oooo00<000000?ooo`3oool09 at 3oool00`00
+0000oooo0?ooo`0m0?ooo`030000003oool0oooo04L0oooo000F0?ooo`030000003oool0oooo0;P0
+oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`0m0?ooo`030000003oool0oooo04P0
+oooo000F0?ooo`030000003oool0oooo0;P0oooo00<000000?ooo`3oool0903oool00`000000oooo
+0?ooo`0m0?ooo`030000003oool0oooo04P0oooo000F0?ooo`030000003oool0oooo0;L0oooo00<0
+00000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0m0?ooo`030000003oool0oooo04P0oooo000F
+0?ooo`030000003oool0oooo0;L0oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`0m
+0?ooo`030000003oool0oooo04T0oooo00040?ooo`<000000`3oool00`000000oooo0?ooo`030000
+00H0oooo00<000000?ooo`3oool0]`3oool00`000000oooo0?ooo`0T0?ooo`030000003oool0oooo
+03d0oooo00<000000?ooo`3oool0B at 3oool000<0oooo00D000000?ooo`3oool0oooo000000040?oo
+o`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`2g0?ooo`030000003oool0
+oooo02 at 0oooo00<000000?ooo`3oool0?03oool00`000000oooo0?ooo`1:0?ooo`000`3oool01 at 00
+0000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`<00000]P3o
+ool00`000000oooo0?ooo`0T0?ooo`030000003oool0oooo03d0oooo00<000000?ooo`3oool0BP3o
+ool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`000000
+1 at 3oool00`000000oooo0?ooo`2f0?ooo`030000003oool0oooo02 at 0oooo00<000000?ooo`3oool0
+?03oool00`000000oooo0?ooo`1;0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo
+100000060?ooo`030000003oool0oooo0;H0oooo00<000000?ooo`3oool08`3oool00`000000oooo
+0?ooo`0m0?ooo`030000003oool0oooo04/0oooo00030?ooo`050000003oool0oooo0?ooo`000000
+103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0]@3oool00`000000
+oooo0?ooo`0T0?ooo`030000003oool0oooo03d0oooo00<000000?ooo`3oool0B`3oool000 at 0oooo
+0`0000060?ooo`<000001P3oool00`000000oooo0?ooo`2e0?ooo`030000003oool0oooo02 at 0oooo
+00<000000?ooo`3oool0?03oool00`000000oooo0?ooo`1<0?ooo`005P3oool00`000000oooo0?oo
+o`2e0?ooo`030000003oool0oooo02<0oooo00<000000?ooo`3oool0?@3oool00`000000oooo0?oo
+o`1<0?ooo`005P3oool00`000000oooo0?ooo`2e0?ooo`030000003oool0oooo02<0oooo00<00000
+0?ooo`3oool0?03oool00`000000oooo0?ooo`1=0?ooo`005P3oool00`000000oooo0?ooo`2d0?oo
+o`030000003oool0oooo02 at 0oooo00<000000?ooo`3oool0?03oool00`000000oooo0?ooo`1=0?oo
+o`005P3oool00`000000oooo0?ooo`2d0?ooo`030000003oool0oooo02<0oooo00<000000?ooo`3o
+ool0?03oool00`000000oooo0?ooo`1>0?ooo`005P3oool00`000000oooo0?ooo`2d0?ooo`030000
+003oool0oooo02<0oooo00<000000?ooo`3oool0?03oool00`000000oooo0?ooo`1>0?ooo`005P3o
+ool00`000000oooo0?ooo`2c0?ooo`030000003oool0oooo02 at 0oooo00<000000?ooo`3oool0?03o
+ool00`000000oooo0?ooo`1>0?ooo`005P3oool00`000000oooo0?ooo`2c0?ooo`030000003oool0
+oooo02<0oooo00<000000?ooo`3oool0?03oool00`000000oooo0?ooo`1?0?ooo`005P3oool00`00
+0000oooo0?ooo`2c0?ooo`030000003oool0oooo02<0oooo00<000000?ooo`3oool0?03oool00`00
+0000oooo0?ooo`1?0?ooo`005P3oool00`000000oooo0?ooo`2c0?ooo`030000003oool0oooo02<0
+oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`1 at 0?ooo`005P3oool00`000000oooo
+0?ooo`2b0?ooo`030000003oool0oooo02<0oooo00<000000?ooo`3oool0?03oool00`000000oooo
+0?ooo`1 at 0?ooo`005P3oool00`000000oooo0?ooo`2b0?ooo`030000003oool0oooo02<0oooo00<0
+00000?ooo`3oool0>`3oool00`000000oooo0?ooo`1A0?ooo`005P3oool00`000000oooo0?ooo`2b
+0?ooo`030000003oool0oooo02<0oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`1A
+0?ooo`005P3oool00`000000oooo0?ooo`2b0?ooo`030000003oool0oooo0280oooo00<000000?oo
+o`3oool0?03oool00`000000oooo0?ooo`1A0?ooo`005P3oool00`000000oooo0?ooo`2a0?ooo`03
+0000003oool0oooo02<0oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`1B0?ooo`00
+5P3oool00`000000oooo0?ooo`2a0?ooo`030000003oool0oooo02<0oooo00<000000?ooo`3oool0
+>`3oool00`000000oooo0?ooo`1B0?ooo`005P3oool00`000000oooo0?ooo`2a0?ooo`030000003o
+ool0oooo0280oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`1C0?ooo`005P3oool0
+0`000000oooo0?ooo`2a0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0>`3oool0
+0`000000oooo0?ooo`1C0?ooo`005P3oool00`000000oooo0?ooo`2`0?ooo`030000003oool0oooo
+0280oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`1D0?ooo`005P3oool00`000000
+oooo0?ooo`2`0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0>`3oool00`000000
+oooo0?ooo`1D0?ooo`005P3oool00`000000oooo0?ooo`2`0?ooo`030000003oool0oooo0280oooo
+00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`1D0?ooo`005P3oool00`000000oooo0?oo
+o`2`0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?oo
+o`1E0?ooo`005P3oool00`000000oooo0?ooo`2_0?ooo`030000003oool0oooo0280oooo00<00000
+0?ooo`3oool0>`3oool00`000000oooo0?ooo`1E0?ooo`005P3oool00`000000oooo0?ooo`2_0?oo
+o`030000003oool0oooo0280oooo00<000000?ooo`3oool0>P3oool00`000000oooo0?ooo`1F0?oo
+o`005P3oool00`000000oooo0?ooo`2_0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3o
+ool0>`3oool00`000000oooo0?ooo`1F0?ooo`005P3oool00`000000oooo0?ooo`2^0?ooo`030000
+003oool0oooo0280oooo00<000000?ooo`3oool0>P3oool00`000000oooo0?ooo`1G0?ooo`005P3o
+ool00`000000oooo0?ooo`2^0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0>P3o
+ool00`000000oooo0?ooo`1G0?ooo`005P3oool00`000000oooo0?ooo`2^0?ooo`030000003oool0
+oooo0240oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`1G0?ooo`005P3oool00`00
+0000oooo0?ooo`2^0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0>P3oool00`00
+0000oooo0?ooo`1H0?ooo`005P3oool00`000000oooo0?ooo`2]0?ooo`030000003oool0oooo0280
+oooo00<000000?ooo`3oool0>P3oool00`000000oooo0?ooo`1H0?ooo`005P3oool00`000000oooo
+0?ooo`2]0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0>P3oool00`000000oooo
+0?ooo`1I0?ooo`005P3oool00`000000oooo0?ooo`2]0?ooo`030000003oool0oooo0240oooo00<0
+00000?ooo`3oool0>P3oool00`000000oooo0?ooo`1I0?ooo`005P3oool00`000000oooo0?ooo`2]
+0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`1J
+0?ooo`005P3oool200000:d0oooo00<000000?ooo`3oool08 at 3oool00`000000oooo0?ooo`0j0?oo
+o`030000003oool0oooo05X0oooo000F0?ooo`030000003oool0oooo0:`0oooo00<000000?ooo`3o
+ool08 at 3oool00`000000oooo0?ooo`0j0?ooo`030000003oool0oooo05X0oooo000F0?ooo`030000
+003oool0oooo0:`0oooo00<000000?ooo`3oool0803oool00`000000oooo0?ooo`0j0?ooo`030000
+003oool0oooo05/0oooo000F0?ooo`030000003oool0oooo0:`0oooo00<000000?ooo`3oool0803o
+ool00`000000oooo0?ooo`0j0?ooo`030000003oool0oooo05/0oooo000F0?ooo`030000003oool0
+oooo0:/0oooo00<000000?ooo`3oool08 at 3oool00`000000oooo0?ooo`0i0?ooo`030000003oool0
+oooo05`0oooo000F0?ooo`030000003oool0oooo0:/0oooo00<000000?ooo`3oool0803oool00`00
+0000oooo0?ooo`0j0?ooo`030000003oool0oooo05`0oooo000F0?ooo`030000003oool0oooo0:/0
+oooo00<000000?ooo`3oool0803oool00`000000oooo0?ooo`0i0?ooo`030000003oool0oooo05d0
+oooo000F0?ooo`030000003oool0oooo0:/0oooo00<000000?ooo`3oool0803oool00`000000oooo
+0?ooo`0i0?ooo`030000003oool0oooo05d0oooo000F0?ooo`030000003oool0oooo0:X0oooo00<0
+00000?ooo`3oool0803oool00`000000oooo0?ooo`0i0?ooo`030000003oool0oooo05h0oooo000F
+0?ooo`030000003oool0oooo0:X0oooo00<000000?ooo`3oool0803oool00`000000oooo0?ooo`0i
+0?ooo`030000003oool0oooo05h0oooo000F0?ooo`030000003oool0oooo0:X0oooo00<000000?oo
+o`3oool0803oool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo05l0oooo000F0?ooo`03
+0000003oool0oooo0:T0oooo00<000000?ooo`3oool0803oool00`000000oooo0?ooo`0i0?ooo`03
+0000003oool0oooo05l0oooo000F0?ooo`030000003oool0oooo0:T0oooo00<000000?ooo`3oool0
+803oool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo05l0oooo0 at 00000001H0oooo00<0
+00000?ooo`3oool0Z at 3oool00`000000oooo0?ooo`0O0?ooo`030000003oool0oooo03T0oooo00<0
+00000?ooo`3oool0GP3oool100000040oooo000F0?ooo`030000003oool0oooo0:T0oooo00<00000
+0?ooo`3oool07`3oool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo05l0oooo0 at 000001
+0?ooo`005P3oool00`000000oooo0?ooo`2X0?ooo`030000003oool0oooo0200oooo00<000000?oo
+o`3oool0>03oool00`000000oooo0?ooo`1N0?ooo`4000000 at 3oool10?ooo`005P3oool00`000000
+oooo0?ooo`2X0?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool0>03oool00`000000
+oooo0?ooo`1O0?ooo`4000000 at 3oool10?ooo`005P3oool00`000000oooo0?ooo`2X0?ooo`030000
+003oool0oooo01l0oooo00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`1N0?ooo`030000
+003oool0oooo0040oooo000F0?ooo`030000003oool0oooo0:P0oooo00<000000?ooo`3oool07`3o
+ool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo05h0oooo00<000000?ooo`3oool00 at 3o
+ool001H0oooo00<000000?ooo`3oool0Y`3oool00`000000oooo0?ooo`0O0?ooo`030000003oool0
+oooo03P0oooo00<000000?ooo`3oool0GP3oool00`000000oooo0?ooo`020?ooo`005P3oool00`00
+0000oooo0?ooo`2W0?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool0>03oool00`00
+0000oooo0?ooo`1N0?ooo`030000003oool0oooo0080oooo000F0?ooo`030000003oool0oooo0:L0
+oooo00<000000?ooo`3oool07P3oool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo05h0
+oooo00<000000?ooo`3oool00`3oool001H0oooo00<000000?ooo`3oool0Y`3oool00`000000oooo
+0?ooo`0N0?ooo`030000003oool0oooo03P0oooo00<000000?ooo`3oool0G at 3oool00`000000oooo
+0?ooo`040?ooo`005P3oool00`000000oooo0?ooo`2V0?ooo`030000003oool0oooo01l0oooo00<0
+00000?ooo`3oool0=`3oool00`000000oooo0?ooo`1N0?ooo`030000003oool0oooo00 at 0oooo000F
+0?ooo`030000003oool0oooo0:H0oooo00<000000?ooo`3oool07P3oool00`000000oooo0?ooo`0h
+0?ooo`030000003oool0oooo05d0oooo00<000000?ooo`3oool01 at 3oool001H0oooo00<000000?oo
+o`3oool0YP3oool00`000000oooo0?ooo`0N0?ooo`030000003oool0oooo03L0oooo00<000000?oo
+o`3oool0GP3oool00`000000oooo0?ooo`050?ooo`005P3oool00`000000oooo0?ooo`2V0?ooo`03
+0000003oool0oooo01h0oooo00<000000?ooo`3oool0=`3oool00`000000oooo0?ooo`1M0?ooo`03
+0000003oool0oooo00H0oooo000F0?ooo`030000003oool0oooo0:D0oooo00<000000?ooo`3oool0
+7P3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo05h0oooo00<000000?ooo`3oool0
+1P3oool001H0oooo00<000000?ooo`3oool0Y at 3oool00`000000oooo0?ooo`0N0?ooo`030000003o
+ool0oooo03L0oooo00<000000?ooo`3oool0G at 3oool00`000000oooo0?ooo`070?ooo`005P3oool0
+0`000000oooo0?ooo`2U0?ooo`030000003oool0oooo01h0oooo00<000000?ooo`3oool0=P3oool0
+0`000000oooo0?ooo`1N0?ooo`030000003oool0oooo00L0oooo000F0?ooo`030000003oool0oooo
+0:@0oooo00<000000?ooo`3oool07P3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo
+05d0oooo00<000000?ooo`3oool0203oool001H0oooo00<000000?ooo`3oool0Y03oool00`000000
+oooo0?ooo`0N0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool0GP3oool00`000000
+oooo0?ooo`080?ooo`005P3oool00`000000oooo0?ooo`2T0?ooo`030000003oool0oooo01d0oooo
+00<000000?ooo`3oool0=`3oool00`000000oooo0?ooo`1M0?ooo`030000003oool0oooo00T0oooo
+000F0?ooo`030000003oool0oooo0:@0oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?oo
+o`0g0?ooo`030000003oool0oooo05`0oooo00<000000?ooo`3oool02P3oool001H0oooo00<00000
+0?ooo`3oool0X`3oool00`000000oooo0?ooo`0N0?ooo`030000003oool0oooo03H0oooo00<00000
+0?ooo`3oool0G at 3oool00`000000oooo0?ooo`0:0?ooo`005P3oool00`000000oooo0?ooo`2S0?oo
+o`030000003oool0oooo01d0oooo00<000000?ooo`3oool0=`3oool00`000000oooo0?ooo`1L0?oo
+o`030000003oool0oooo00/0oooo000F0?ooo`800000Y03oool00`000000oooo0?ooo`0M0?ooo`03
+0000003oool0oooo03H0oooo00<000000?ooo`3oool0G at 3oool00`000000oooo0?ooo`0;0?ooo`00
+5P3oool00`000000oooo0?ooo`2S0?ooo`030000003oool0oooo01d0oooo00<000000?ooo`3oool0
+=P3oool00`000000oooo0?ooo`1L0?ooo`030000003oool0oooo00`0oooo000F0?ooo`030000003o
+ool0oooo0:80oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?ooo`0f0?ooo`030000003o
+ool0oooo05d0oooo00<000000?ooo`3oool0303oool001H0oooo00<000000?ooo`3oool0XP3oool0
+0`000000oooo0?ooo`0M0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool0G03oool0
+0`000000oooo0?ooo`0=0?ooo`005P3oool00`000000oooo0?ooo`2R0?ooo`030000003oool0oooo
+01d0oooo00<000000?ooo`3oool0=@3oool00`000000oooo0?ooo`1M0?ooo`030000003oool0oooo
+00d0oooo000F0?ooo`030000003oool0oooo0:40oooo00<000000?ooo`3oool07 at 3oool00`000000
+oooo0?ooo`0f0?ooo`030000003oool0oooo05`0oooo00<000000?ooo`3oool03P3oool001H0oooo
+00<000000?ooo`3oool0X at 3oool00`000000oooo0?ooo`0M0?ooo`030000003oool0oooo03D0oooo
+00<000000?ooo`3oool0G03oool00`000000oooo0?ooo`0?0?ooo`005P3oool00`000000oooo0?oo
+o`2Q0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0=P3oool00`000000oooo0?oo
+o`1L0?ooo`030000003oool0oooo00l0oooo000F0?ooo`030000003oool0oooo0:40oooo00<00000
+0?ooo`3oool0703oool00`000000oooo0?ooo`0e0?ooo`030000003oool0oooo05`0oooo00<00000
+0?ooo`3oool0403oool001H0oooo00<000000?ooo`3oool0X03oool00`000000oooo0?ooo`0M0?oo
+o`030000003oool0oooo03D0oooo00<000000?ooo`3oool0G03oool00`000000oooo0?ooo`0 at 0?oo
+o`005P3oool00`000000oooo0?ooo`2P0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3o
+ool0=@3oool00`000000oooo0?ooo`1L0?ooo`030000003oool0oooo0140oooo000F0?ooo`030000
+003oool0oooo0:00oooo00<000000?ooo`3oool0703oool00`000000oooo0?ooo`0e0?ooo`030000
+003oool0oooo05/0oooo00<000000?ooo`3oool04P3oool001H0oooo00<000000?ooo`3oool0X03o
+ool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool0G03o
+ool00`000000oooo0?ooo`0B0?ooo`005P3oool00`000000oooo0?ooo`2O0?ooo`030000003oool0
+oooo01`0oooo00<000000?ooo`3oool0=@3oool00`000000oooo0?ooo`1K0?ooo`030000003oool0
+oooo01<0oooo000F0?ooo`030000003oool0oooo09l0oooo00<000000?ooo`3oool0703oool00`00
+0000oooo0?ooo`0e0?ooo`030000003oool0oooo05/0oooo00<000000?ooo`3oool04`3oool001H0
+oooo00<000000?ooo`3oool0W`3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo03 at 0
+oooo00<000000?ooo`3oool0F`3oool00`000000oooo0?ooo`0D0?ooo`005P3oool00`000000oooo
+0?ooo`2N0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0=@3oool00`000000oooo
+0?ooo`1J0?ooo`030000003oool0oooo01D0oooo000F0?ooo`030000003oool0oooo09h0oooo00<0
+00000?ooo`3oool0703oool00`000000oooo0?ooo`0d0?ooo`030000003oool0oooo05/0oooo00<0
+00000?ooo`3oool05 at 3oool001H0oooo00<000000?ooo`3oool0WP3oool00`000000oooo0?ooo`0L
+0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?ooo`0F
+0?ooo`005P3oool00`000000oooo0?ooo`2N0?ooo`030000003oool0oooo01/0oooo00<000000?oo
+o`3oool0=03oool00`000000oooo0?ooo`1K0?ooo`030000003oool0oooo01H0oooo000F0?ooo`03
+0000003oool0oooo09d0oooo00<000000?ooo`3oool0703oool00`000000oooo0?ooo`0d0?ooo`03
+0000003oool0oooo05X0oooo00<000000?ooo`3oool05`3oool001H0oooo00<000000?ooo`3oool0
+W at 3oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool0
+FP3oool00`000000oooo0?ooo`0H0?ooo`005P3oool00`000000oooo0?ooo`2M0?ooo`030000003o
+ool0oooo01/0oooo00<000000?ooo`3oool0=03oool00`000000oooo0?ooo`1J0?ooo`030000003o
+ool0oooo01P0oooo000F0?ooo`030000003oool0oooo09d0oooo00<000000?ooo`3oool06`3oool0
+0`000000oooo0?ooo`0c0?ooo`030000003oool0oooo05X0oooo00<000000?ooo`3oool06 at 3oool0
+01H0oooo00<000000?ooo`3oool0W03oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo
+03 at 0oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?ooo`0I0?ooo`005P3oool00`000000
+oooo0?ooo`2L0?ooo`030000003oool0oooo01/0oooo00<000000?ooo`3oool0<`3oool00`000000
+oooo0?ooo`1J0?ooo`030000003oool0oooo01X0oooo000F0?ooo`030000003oool0oooo09`0oooo
+00<000000?ooo`3oool06`3oool00`000000oooo0?ooo`0c0?ooo`030000003oool0oooo05T0oooo
+00<000000?ooo`3oool06`3oool001H0oooo00<000000?ooo`3oool0V`3oool00`000000oooo0?oo
+o`0K0?ooo`030000003oool0oooo03<0oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?oo
+o`0K0?ooo`005P3oool00`000000oooo0?ooo`2K0?ooo`030000003oool0oooo01/0oooo00<00000
+0?ooo`3oool0<`3oool00`000000oooo0?ooo`1I0?ooo`030000003oool0oooo01`0oooo000F0?oo
+o`030000003oool0oooo09/0oooo00<000000?ooo`3oool06`3oool00`000000oooo0?ooo`0b0?oo
+o`030000003oool0oooo05X0oooo00<000000?ooo`3oool0703oool001H0oooo00<000000?ooo`3o
+ool0V`3oool00`000000oooo0?ooo`0J0?ooo`030000003oool0oooo03<0oooo00<000000?ooo`3o
+ool0F at 3oool00`000000oooo0?ooo`0M0?ooo`005P3oool00`000000oooo0?ooo`2J0?ooo`030000
+003oool0oooo01/0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`1I0?ooo`030000
+003oool0oooo01h0oooo000F0?ooo`030000003oool0oooo09X0oooo00<000000?ooo`3oool06`3o
+ool00`000000oooo0?ooo`0b0?ooo`030000003oool0oooo05T0oooo00<000000?ooo`3oool07P3o
+ool001H0oooo00<000000?ooo`3oool0VP3oool00`000000oooo0?ooo`0J0?ooo`030000003oool0
+oooo0380oooo00<000000?ooo`3oool0F at 3oool00`000000oooo0?ooo`0O0?ooo`005P3oool00`00
+0000oooo0?ooo`2J0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0<P3oool00`00
+0000oooo0?ooo`1I0?ooo`030000003oool0oooo01l0oooo000F0?ooo`030000003oool0oooo09T0
+oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0b0?ooo`030000003oool0oooo05T0
+oooo00<000000?ooo`3oool0803oool001H0oooo0P00002J0?ooo`030000003oool0oooo01X0oooo
+00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`1H0?ooo`030000003oool0oooo0240oooo
+000F0?ooo`030000003oool0oooo09T0oooo00<000000?ooo`3oool06P3oool00`000000oooo0?oo
+o`0a0?ooo`030000003oool0oooo05T0oooo00<000000?ooo`3oool08 at 3oool001H0oooo00<00000
+0?ooo`3oool0V03oool00`000000oooo0?ooo`0J0?ooo`030000003oool0oooo0380oooo00<00000
+0?ooo`3oool0F03oool00`000000oooo0?ooo`0R0?ooo`005P3oool00`000000oooo0?ooo`2H0?oo
+o`030000003oool0oooo01X0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?ooo`1I0?oo
+o`030000003oool0oooo0280oooo000F0?ooo`030000003oool0oooo09P0oooo00<000000?ooo`3o
+ool06P3oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo05P0oooo00<000000?ooo`3o
+ool08`3oool001H0oooo00<000000?ooo`3oool0V03oool00`000000oooo0?ooo`0I0?ooo`030000
+003oool0oooo0340oooo00<000000?ooo`3oool0F03oool00`000000oooo0?ooo`0T0?ooo`005P3o
+ool00`000000oooo0?ooo`2G0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0<@3o
+ool00`000000oooo0?ooo`1H0?ooo`030000003oool0oooo02 at 0oooo000F0?ooo`030000003oool0
+oooo09L0oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0`0?ooo`030000003oool0
+oooo05P0oooo00<000000?ooo`3oool09 at 3oool001H0oooo00<000000?ooo`3oool0U`3oool00`00
+0000oooo0?ooo`0I0?ooo`030000003oool0oooo0340oooo00<000000?ooo`3oool0F03oool00`00
+0000oooo0?ooo`0U0?ooo`005P3oool00`000000oooo0?ooo`2G0?ooo`030000003oool0oooo01T0
+oooo00<000000?ooo`3oool0<03oool00`000000oooo0?ooo`1H0?ooo`030000003oool0oooo02H0
+oooo000F0?ooo`030000003oool0oooo09H0oooo00<000000?ooo`3oool06P3oool00`000000oooo
+0?ooo`0`0?ooo`030000003oool0oooo05L0oooo00<000000?ooo`3oool09`3oool001H0oooo00<0
+00000?ooo`3oool0UP3oool00`000000oooo0?ooo`0I0?ooo`030000003oool0oooo0300oooo00<0
+00000?ooo`3oool0F03oool00`000000oooo0?ooo`0W0?ooo`005P3oool00`000000oooo0?ooo`2F
+0?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3oool0<03oool00`000000oooo0?ooo`1G
+0?ooo`030000003oool0oooo02P0oooo000F0?ooo`030000003oool0oooo09D0oooo00<000000?oo
+o`3oool06 at 3oool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo05P0oooo00<000000?oo
+o`3oool0:03oool001H0oooo00<000000?ooo`3oool0U at 3oool00`000000oooo0?ooo`0I0?ooo`03
+0000003oool0oooo0300oooo00<000000?ooo`3oool0E`3oool00`000000oooo0?ooo`0Y0?ooo`00
+5P3oool00`000000oooo0?ooo`2E0?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3oool0
+;`3oool00`000000oooo0?ooo`1G0?ooo`030000003oool0oooo02X0oooo000F0?ooo`030000003o
+ool0oooo09D0oooo00<000000?ooo`3oool0603oool00`000000oooo0?ooo`0`0?ooo`030000003o
+ool0oooo05L0oooo00<000000?ooo`3oool0:P3oool001H0oooo00<000000?ooo`3oool0U03oool0
+0`000000oooo0?ooo`0I0?ooo`030000003oool0oooo02l0oooo00<000000?ooo`3oool0E`3oool0
+0`000000oooo0?ooo`0[0?ooo`005P3oool00`000000oooo0?ooo`2D0?ooo`030000003oool0oooo
+01T0oooo00<000000?ooo`3oool0;`3oool00`000000oooo0?ooo`1G0?ooo`030000003oool0oooo
+02/0oooo000F0?ooo`030000003oool0oooo09 at 0oooo00<000000?ooo`3oool0603oool00`000000
+oooo0?ooo`0_0?ooo`030000003oool0oooo05L0oooo00<000000?ooo`3oool0;03oool001H0oooo
+00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`0H0?ooo`030000003oool0oooo02l0oooo
+00<000000?ooo`3oool0EP3oool00`000000oooo0?ooo`0]0?ooo`005P3oool00`000000oooo0?oo
+o`2C0?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?oo
+o`1G0?ooo`030000003oool0oooo02d0oooo000F0?ooo`030000003oool0oooo09<0oooo00<00000
+0?ooo`3oool0603oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo05H0oooo00<00000
+0?ooo`3oool0;P3oool001H0oooo00<000000?ooo`3oool0T`3oool00`000000oooo0?ooo`0H0?oo
+o`030000003oool0oooo02h0oooo00<000000?ooo`3oool0EP3oool00`000000oooo0?ooo`0_0?oo
+o`005P3oool00`000000oooo0?ooo`2C0?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3o
+ool0;P3oool00`000000oooo0?ooo`1F0?ooo`030000003oool0oooo02l0oooo000F0?ooo`030000
+003oool0oooo0980oooo00<000000?ooo`3oool0603oool00`000000oooo0?ooo`0^0?ooo`030000
+003oool0oooo05H0oooo00<000000?ooo`3oool0<03oool001H0oooo00<000000?ooo`3oool0TP3o
+ool00`000000oooo0?ooo`0H0?ooo`030000003oool0oooo02h0oooo00<000000?ooo`3oool0E at 3o
+ool00`000000oooo0?ooo`0a0?ooo`005P3oool00`000000oooo0?ooo`2B0?ooo`030000003oool0
+oooo01L0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`1F0?ooo`030000003oool0
+oooo0340oooo000F0?ooo`030000003oool0oooo0980oooo00<000000?ooo`3oool05`3oool00`00
+0000oooo0?ooo`0^0?ooo`030000003oool0oooo05D0oooo00<000000?ooo`3oool0<P3oool001H0
+oooo00<000000?ooo`3oool0T at 3oool00`000000oooo0?ooo`0H0?ooo`030000003oool0oooo02d0
+oooo00<000000?ooo`3oool0E at 3oool00`000000oooo0?ooo`0c0?ooo`005P3oool00`000000oooo
+0?ooo`2A0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0;P3oool00`000000oooo
+0?ooo`1E0?ooo`030000003oool0oooo03<0oooo000F0?ooo`030000003oool0oooo0940oooo00<0
+00000?ooo`3oool05`3oool00`000000oooo0?ooo`0]0?ooo`030000003oool0oooo05D0oooo00<0
+00000?ooo`3oool0=03oool001H0oooo00<000000?ooo`3oool0T03oool00`000000oooo0?ooo`0H
+0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3oool0E03oool00`000000oooo0?ooo`0e
+0?ooo`005P3oool00`000000oooo0?ooo`2 at 0?ooo`030000003oool0oooo01L0oooo00<000000?oo
+o`3oool0;@3oool00`000000oooo0?ooo`1E0?ooo`030000003oool0oooo03D0oooo00040?ooo`<0
+00000`3oool00`000000oooo0?ooo`03000000H0oooo00<000000?ooo`3oool0T03oool00`000000
+oooo0?ooo`0G0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3oool0E03oool00`000000
+oooo0?ooo`0f0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3o
+ool0oooo000000050?ooo`030000003oool0oooo0900oooo00<000000?ooo`3oool05`3oool00`00
+0000oooo0?ooo`0/0?ooo`030000003oool0oooo05 at 0oooo00<000000?ooo`3oool0=`3oool000<0
+oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000001 at 3oool0
+0`000000oooo0?ooo`2?0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0;@3oool0
+0`000000oooo0?ooo`1D0?ooo`030000003oool0oooo03L0oooo00030?ooo`050000003oool0oooo
+0?ooo`0000001 at 3oool3000000H0oooo0`00002?0?ooo`030000003oool0oooo01L0oooo00<00000
+0?ooo`3oool0;03oool00`000000oooo0?ooo`1D0?ooo`030000003oool0oooo03P0oooo00030?oo
+o`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0S`3oool00`000000oooo0?ooo`0G0?ooo`030000003oool0oooo02`0oooo00<0
+00000?ooo`3oool0D`3oool00`000000oooo0?ooo`0i0?ooo`000`3oool01 at 000000oooo0?ooo`3o
+ool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo08l0oooo
+00<000000?ooo`3oool05P3oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo05 at 0oooo
+00<000000?ooo`3oool0>@3oool000 at 0oooo0`0000060?ooo`<000001P3oool00`000000oooo0?oo
+o`2>0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?oo
+o`1C0?ooo`030000003oool0oooo03X0oooo000F0?ooo`030000003oool0oooo08h0oooo00<00000
+0?ooo`3oool05P3oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo05<0oooo00<00000
+0?ooo`3oool0>`3oool001H0oooo00<000000?ooo`3oool0SP3oool00`000000oooo0?ooo`0F0?oo
+o`030000003oool0oooo02`0oooo00<000000?ooo`3oool0D`3oool00`000000oooo0?ooo`0k0?oo
+o`005P3oool00`000000oooo0?ooo`2>0?ooo`030000003oool0oooo01H0oooo00<000000?ooo`3o
+ool0:`3oool00`000000oooo0?ooo`1C0?ooo`030000003oool0oooo03`0oooo000F0?ooo`030000
+003oool0oooo08d0oooo00<000000?ooo`3oool05P3oool00`000000oooo0?ooo`0/0?ooo`030000
+003oool0oooo0580oooo00<000000?ooo`3oool0?@3oool001H0oooo00<000000?ooo`3oool0S at 3o
+ool00`000000oooo0?ooo`0F0?ooo`030000003oool0oooo02/0oooo00<000000?ooo`3oool0D`3o
+ool00`000000oooo0?ooo`0m0?ooo`005P3oool00`000000oooo0?ooo`2=0?ooo`030000003oool0
+oooo01H0oooo00<000000?ooo`3oool0:`3oool00`000000oooo0?ooo`1B0?ooo`030000003oool0
+oooo03h0oooo000F0?ooo`030000003oool0oooo08d0oooo00<000000?ooo`3oool05 at 3oool00`00
+0000oooo0?ooo`0[0?ooo`030000003oool0oooo0580oooo00<000000?ooo`3oool0?`3oool001H0
+oooo00<000000?ooo`3oool0S03oool00`000000oooo0?ooo`0F0?ooo`030000003oool0oooo02/0
+oooo00<000000?ooo`3oool0D at 3oool00`000000oooo0?ooo`100?ooo`005P3oool00`000000oooo
+0?ooo`2<0?ooo`030000003oool0oooo01H0oooo00<000000?ooo`3oool0:P3oool00`000000oooo
+0?ooo`1B0?ooo`030000003oool0oooo0400oooo000F0?ooo`030000003oool0oooo08`0oooo00<0
+00000?ooo`3oool05 at 3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo0540oooo00<0
+00000?ooo`3oool0@@3oool001H0oooo00<000000?ooo`3oool0R`3oool00`000000oooo0?ooo`0F
+0?ooo`030000003oool0oooo02X0oooo00<000000?ooo`3oool0D at 3oool00`000000oooo0?ooo`12
+0?ooo`005P3oool00`000000oooo0?ooo`2;0?ooo`030000003oool0oooo01D0oooo00<000000?oo
+o`3oool0:`3oool00`000000oooo0?ooo`1A0?ooo`030000003oool0oooo0480oooo000F0?ooo`03
+0000003oool0oooo08/0oooo00<000000?ooo`3oool05 at 3oool00`000000oooo0?ooo`0Z0?ooo`03
+0000003oool0oooo0540oooo00<000000?ooo`3oool0@`3oool001H0oooo00<000000?ooo`3oool0
+R`3oool00`000000oooo0?ooo`0E0?ooo`030000003oool0oooo02X0oooo00<000000?ooo`3oool0
+D03oool00`000000oooo0?ooo`140?ooo`005P3oool00`000000oooo0?ooo`2:0?ooo`030000003o
+ool0oooo01D0oooo00<000000?ooo`3oool0:P3oool00`000000oooo0?ooo`1 at 0?ooo`030000003o
+ool0oooo04D0oooo000F0?ooo`030000003oool0oooo08X0oooo00<000000?ooo`3oool05 at 3oool0
+0`000000oooo0?ooo`0Z0?ooo`030000003oool0oooo0500oooo00<000000?ooo`3oool0A at 3oool0
+01H0oooo00<000000?ooo`3oool0RP3oool00`000000oooo0?ooo`0D0?ooo`030000003oool0oooo
+02X0oooo00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`160?ooo`005P3oool00`000000
+oooo0?ooo`2:0?ooo`030000003oool0oooo01 at 0oooo00<000000?ooo`3oool0:@3oool00`000000
+oooo0?ooo`1 at 0?ooo`030000003oool0oooo04L0oooo000F0?ooo`030000003oool0oooo08T0oooo
+00<000000?ooo`3oool05 at 3oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo0500oooo
+00<000000?ooo`3oool0A`3oool001H0oooo00<000000?ooo`3oool0R at 3oool00`000000oooo0?oo
+o`0D0?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3oool0D03oool00`000000oooo0?oo
+o`180?ooo`005P3oool00`000000oooo0?ooo`290?ooo`030000003oool0oooo01 at 0oooo00<00000
+0?ooo`3oool0:@3oool00`000000oooo0?ooo`1?0?ooo`030000003oool0oooo04T0oooo000F0?oo
+o`030000003oool0oooo08T0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`0Y0?oo
+o`030000003oool0oooo04l0oooo00<000000?ooo`3oool0BP3oool001H0oooo00<000000?ooo`3o
+ool0R03oool00`000000oooo0?ooo`0D0?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3o
+ool0D03oool00`000000oooo0?ooo`1:0?ooo`005P3oool00`000000oooo0?ooo`280?ooo`030000
+003oool0oooo01 at 0oooo00<000000?ooo`3oool0:03oool00`000000oooo0?ooo`1?0?ooo`030000
+003oool0oooo04/0oooo000F0?ooo`030000003oool0oooo08P0oooo00<000000?ooo`3oool04`3o
+ool00`000000oooo0?ooo`0X0?ooo`030000003oool0oooo04l0oooo00<000000?ooo`3oool0C03o
+ool001H0oooo00<000000?ooo`3oool0R03oool00`000000oooo0?ooo`0C0?ooo`030000003oool0
+oooo02P0oooo00<000000?ooo`3oool0CP3oool00`000000oooo0?ooo`1=0?ooo`005P3oool00`00
+0000oooo0?ooo`270?ooo`030000003oool0oooo01<0oooo00<000000?ooo`3oool0:03oool00`00
+0000oooo0?ooo`1?0?ooo`030000003oool0oooo04d0oooo000F0?ooo`030000003oool0oooo08L0
+oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`0X0?ooo`030000003oool0oooo04h0
+oooo00<000000?ooo`3oool0CP3oool001H0oooo00<000000?ooo`3oool0Q`3oool00`000000oooo
+0?ooo`0B0?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0CP3oool00`000000oooo
+0?ooo`1?0?ooo`005P3oool00`000000oooo0?ooo`260?ooo`030000003oool0oooo01<0oooo00<0
+00000?ooo`3oool09`3oool00`000000oooo0?ooo`1>0?ooo`030000003oool0oooo0500oooo000F
+0?ooo`030000003oool0oooo08H0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`0W
+0?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3oool0D at 3oool001H0oooo00<000000?oo
+o`3oool0QP3oool00`000000oooo0?ooo`0B0?ooo`030000003oool0oooo02L0oooo00<000000?oo
+o`3oool0CP3oool00`000000oooo0?ooo`1A0?ooo`005P3oool2000008H0oooo00<000000?ooo`3o
+ool04`3oool00`000000oooo0?ooo`0W0?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3o
+ool0DP3oool001H0oooo00<000000?ooo`3oool0Q at 3oool00`000000oooo0?ooo`0B0?ooo`030000
+003oool0oooo02L0oooo00<000000?ooo`3oool0C at 3oool00`000000oooo0?ooo`1C0?ooo`005P3o
+ool00`000000oooo0?ooo`250?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool09P3o
+ool00`000000oooo0?ooo`1=0?ooo`030000003oool0oooo05 at 0oooo000F0?ooo`030000003oool0
+oooo08D0oooo00<000000?ooo`3oool04P3oool00`000000oooo0?ooo`0V0?ooo`030000003oool0
+oooo04d0oooo00<000000?ooo`3oool0E03oool001H0oooo00<000000?ooo`3oool0Q03oool00`00
+0000oooo0?ooo`0B0?ooo`030000003oool0oooo02H0oooo00<000000?ooo`3oool0C at 3oool00`00
+0000oooo0?ooo`1E0?ooo`005P3oool00`000000oooo0?ooo`240?ooo`030000003oool0oooo0180
+oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`1<0?ooo`030000003oool0oooo05H0
+oooo000F0?ooo`030000003oool0oooo08 at 0oooo00<000000?ooo`3oool04 at 3oool00`000000oooo
+0?ooo`0V0?ooo`030000003oool0oooo04`0oooo00<000000?ooo`3oool0E`3oool001H0oooo00<0
+00000?ooo`3oool0P`3oool00`000000oooo0?ooo`0B0?ooo`030000003oool0oooo02D0oooo00<0
+00000?ooo`3oool0C03oool00`000000oooo0?ooo`1H0?ooo`005P3oool00`000000oooo0?ooo`23
+0?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`1<
+0?ooo`030000003oool0oooo05P0oooo000F0?ooo`030000003oool0oooo08<0oooo00<000000?oo
+o`3oool04 at 3oool00`000000oooo0?ooo`0U0?ooo`030000003oool0oooo04`0oooo00<000000?oo
+o`3oool0F at 3oool001H0oooo00<000000?ooo`3oool0PP3oool00`000000oooo0?ooo`0B0?ooo`03
+0000003oool0oooo02D0oooo00<000000?ooo`3oool0B`3oool00`000000oooo0?ooo`1J0?ooo`00
+5P3oool00`000000oooo0?ooo`220?ooo`030000003oool0oooo0140oooo00<000000?ooo`3oool0
+9 at 3oool00`000000oooo0?ooo`1;0?ooo`030000003oool0oooo05/0oooo000F0?ooo`030000003o
+ool0oooo0880oooo00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`0T0?ooo`030000003o
+ool0oooo04/0oooo00<000000?ooo`3oool0G03oool001H0oooo00<000000?ooo`3oool0PP3oool0
+0`000000oooo0?ooo`0A0?ooo`030000003oool0oooo02 at 0oooo00<000000?ooo`3oool0BP3oool0
+0`000000oooo0?ooo`1M0?ooo`005P3oool00`000000oooo0?ooo`210?ooo`030000003oool0oooo
+0140oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`1:0?ooo`030000003oool0oooo
+05h0oooo000F0?ooo`030000003oool0oooo0840oooo00<000000?ooo`3oool04 at 3oool00`000000
+oooo0?ooo`0T0?ooo`030000003oool0oooo04T0oooo00<000000?ooo`3oool0G`3oool001H0oooo
+00<000000?ooo`3oool0P at 3oool00`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo02 at 0oooo
+00<000000?ooo`3oool0B at 3oool00`000000oooo0?ooo`1P0?ooo`005P3oool00`000000oooo0?oo
+o`200?ooo`030000003oool0oooo0140oooo00<000000?ooo`3oool08`3oool00`000000oooo0?oo
+o`190?ooo`030000003oool0oooo0640oooo000F0?ooo`030000003oool0oooo0800oooo00<00000
+0?ooo`3oool0403oool00`000000oooo0?ooo`0T0?ooo`030000003oool0oooo04P0oooo00<00000
+0?ooo`3oool0HP3oool001H0oooo00<000000?ooo`3oool0P03oool00`000000oooo0?ooo`0 at 0?oo
+o`030000003oool0oooo02<0oooo00<000000?ooo`3oool0B at 3oool00`000000oooo0?ooo`1R0?oo
+o`005P3oool00`000000oooo0?ooo`1o0?ooo`030000003oool0oooo0140oooo00<000000?ooo`3o
+ool08P3oool00`000000oooo0?ooo`190?ooo`030000003oool0oooo06<0oooo000F0?ooo`030000
+003oool0oooo07l0oooo00<000000?ooo`3oool0403oool00`000000oooo0?ooo`0S0?ooo`030000
+003oool0oooo04P0oooo00<000000?ooo`3oool0I03oool001H0oooo00<000000?ooo`3oool0O`3o
+ool00`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0B03o
+ool00`000000oooo0?ooo`1U0?ooo`005P3oool00`000000oooo0?ooo`1o0?ooo`030000003oool0
+oooo00l0oooo00<000000?ooo`3oool08`3oool00`000000oooo0?ooo`170?ooo`030000003oool0
+oooo06H0oooo000F0?ooo`030000003oool0oooo07h0oooo00<000000?ooo`3oool0403oool00`00
+0000oooo0?ooo`0R0?ooo`030000003oool0oooo04L0oooo00<000000?ooo`3oool0I`3oool001H0
+oooo00<000000?ooo`3oool0OP3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo0280
+oooo00<000000?ooo`3oool0A`3oool00`000000oooo0?ooo`1W0?ooo`400000000F0?ooo`030000
+003oool0oooo07h0oooo00<000000?ooo`3oool03`3oool00`000000oooo0?ooo`0R0?ooo`030000
+003oool0oooo04H0oooo00<000000?ooo`3oool0I`3oool100000040oooo000F0?ooo`030000003o
+ool0oooo07d0oooo00<000000?ooo`3oool0403oool00`000000oooo0?ooo`0Q0?ooo`030000003o
+ool0oooo04H0oooo00<000000?ooo`3oool0IP3oool200000080oooo000F0?ooo`030000003oool0
+oooo07d0oooo00<000000?ooo`3oool03`3oool00`000000oooo0?ooo`0R0?ooo`030000003oool0
+oooo04D0oooo00<000000?ooo`3oool0IP3oool00`000000oooo0?ooo`020?ooo`005P3oool00`00
+0000oooo0?ooo`1m0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool08 at 3oool00`00
+0000oooo0?ooo`150?ooo`030000003oool0oooo06H0oooo00<000000?ooo`3oool00`3oool001H0
+oooo00<000000?ooo`3oool0O03oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo0240
+oooo00<000000?ooo`3oool0A at 3oool00`000000oooo0?ooo`1V0?ooo`030000003oool0oooo00 at 0
+oooo000F0?ooo`030000003oool0oooo07`0oooo00<000000?ooo`3oool03`3oool00`000000oooo
+0?ooo`0Q0?ooo`030000003oool0oooo04 at 0oooo00<000000?ooo`3oool0IP3oool00`000000oooo
+0?ooo`050?ooo`005P3oool00`000000oooo0?ooo`1l0?ooo`030000003oool0oooo00h0oooo00<0
+00000?ooo`3oool08 at 3oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo06D0oooo0P00
+00080?ooo`005P3oool00`000000oooo0?ooo`1l0?ooo`030000003oool0oooo00h0oooo00<00000
+0?ooo`3oool0803oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo06D0oooo00<00000
+0?ooo`3oool0203oool001H0oooo00<000000?ooo`3oool0N`3oool00`000000oooo0?ooo`0?0?oo
+o`030000003oool0oooo01l0oooo00<000000?ooo`3oool0A03oool00`000000oooo0?ooo`1U0?oo
+o`030000003oool0oooo00T0oooo000F0?ooo`030000003oool0oooo07/0oooo00<000000?ooo`3o
+ool03P3oool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3o
+ool0I at 3oool00`000000oooo0?ooo`0:0?ooo`005P3oool2000007`0oooo00<000000?ooo`3oool0
+3P3oool00`000000oooo0?ooo`0O0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool0
+I03oool2000000d0oooo000F0?ooo`030000003oool0oooo07X0oooo00<000000?ooo`3oool03P3o
+ool00`000000oooo0?ooo`0O0?ooo`030000003oool0oooo04<0oooo00<000000?ooo`3oool0I03o
+ool00`000000oooo0?ooo`0=0?ooo`005P3oool00`000000oooo0?ooo`1j0?ooo`030000003oool0
+oooo00h0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`120?ooo`030000003oool0
+oooo06 at 0oooo00<000000?ooo`3oool03P3oool001H0oooo00<000000?ooo`3oool0NP3oool00`00
+0000oooo0?ooo`0=0?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool0 at P3oool00`00
+0000oooo0?ooo`1S0?ooo`8000004 at 3oool001H0oooo00<000000?ooo`3oool0N at 3oool00`000000
+oooo0?ooo`0>0?ooo`030000003oool0oooo01h0oooo00<000000?ooo`3oool0 at P3oool00`000000
+oooo0?ooo`1S0?ooo`030000003oool0oooo0140oooo000F0?ooo`030000003oool0oooo07T0oooo
+00<000000?ooo`3oool03P3oool00`000000oooo0?ooo`0M0?ooo`030000003oool0oooo0480oooo
+00<000000?ooo`3oool0HP3oool2000001 at 0oooo000F0?ooo`030000003oool0oooo07T0oooo00<0
+00000?ooo`3oool03 at 3oool00`000000oooo0?ooo`0N0?ooo`030000003oool0oooo0440oooo00<0
+00000?ooo`3oool0HP3oool00`000000oooo0?ooo`0D0?ooo`005P3oool00`000000oooo0?ooo`1i
+0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?ooo`10
+0?ooo`800000H`3oool2000001L0oooo000F0?ooo`030000003oool0oooo07P0oooo00<000000?oo
+o`3oool03 at 3oool00`000000oooo0?ooo`0M0?ooo`030000003oool0oooo0400oooo00<000000?oo
+o`3oool0HP3oool00`000000oooo0?ooo`0G0?ooo`005P3oool00`000000oooo0?ooo`1h0?ooo`03
+0000003oool0oooo00d0oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?ooo`0o0?ooo`03
+0000003oool0oooo0640oooo0P00000J0?ooo`005P3oool00`000000oooo0?ooo`1h0?ooo`030000
+003oool0oooo00`0oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?ooo`0o0?ooo`030000
+003oool0oooo0640oooo00<000000?ooo`3oool06P3oool001H0oooo00<000000?ooo`3oool0M`3o
+ool00`000000oooo0?ooo`0=0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0?`3o
+ool00`000000oooo0?ooo`1P0?ooo`8000007 at 3oool001H0oooo00<000000?ooo`3oool0M`3oool0
+0`000000oooo0?ooo`0<0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0?P3oool2
+00000680oooo00<000000?ooo`3oool07 at 3oool001H0oooo00<000000?ooo`3oool0M`3oool00`00
+0000oooo0?ooo`0<0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0?@3oool00`00
+0000oooo0?ooo`1P0?ooo`800000803oool001H0oooo00<000000?ooo`3oool0MP3oool00`000000
+oooo0?ooo`0<0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0?@3oool00`000000
+oooo0?ooo`1P0?ooo`030000003oool0oooo0200oooo000F0?ooo`030000003oool0oooo07H0oooo
+00<000000?ooo`3oool0303oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo03d0oooo
+00<000000?ooo`3oool0G`3oool2000002<0oooo000F0?ooo`030000003oool0oooo07H0oooo00<0
+00000?ooo`3oool02`3oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo03`0oooo0P00
+001Q0?ooo`030000003oool0oooo02<0oooo000F0?ooo`030000003oool0oooo07D0oooo00<00000
+0?ooo`3oool0303oool00`000000oooo0?ooo`0J0?ooo`030000003oool0oooo03`0oooo00<00000
+0?ooo`3oool0G`3oool2000002H0oooo000F0?ooo`030000003oool0oooo07D0oooo00<000000?oo
+o`3oool02`3oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo03/0oooo00<000000?oo
+o`3oool0G`3oool00`000000oooo0?ooo`0V0?ooo`005P3oool00`000000oooo0?ooo`1e0?ooo`03
+0000003oool0oooo00/0oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0k0?ooo`03
+0000003oool0oooo05h0oooo0P00000Y0?ooo`005P3oool00`000000oooo0?ooo`1d0?ooo`030000
+003oool0oooo00/0oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0j0?ooo`800000
+H03oool00`000000oooo0?ooo`0Y0?ooo`005P3oool00`000000oooo0?ooo`1d0?ooo`030000003o
+ool0oooo00/0oooo00<000000?ooo`3oool06 at 3oool00`000000oooo0?ooo`0j0?ooo`030000003o
+ool0oooo05h0oooo0P00000/0?ooo`005P3oool00`000000oooo0?ooo`1d0?ooo`030000003oool0
+oooo00X0oooo00<000000?ooo`3oool06 at 3oool00`000000oooo0?ooo`0j0?ooo`030000003oool0
+oooo05h0oooo00<000000?ooo`3oool0;03oool001H0oooo00<000000?ooo`3oool0L`3oool00`00
+0000oooo0?ooo`0;0?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool0>P3oool00`00
+0000oooo0?ooo`1M0?ooo`800000;`3oool001H0oooo00<000000?ooo`3oool0L`3oool00`000000
+oooo0?ooo`0:0?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3oool0>03oool2000005h0
+oooo0P00000a0?ooo`005P3oool00`000000oooo0?ooo`1b0?ooo`030000003oool0oooo00/0oooo
+00<000000?ooo`3oool0603oool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo05`0oooo
+0P00000c0?ooo`005P3oool00`000000oooo0?ooo`1b0?ooo`030000003oool0oooo00X0oooo00<0
+00000?ooo`3oool0603oool00`000000oooo0?ooo`0h0?ooo`030000003oool0oooo05`0oooo00<0
+00000?ooo`3oool0<`3oool001H0oooo00<000000?ooo`3oool0LP3oool00`000000oooo0?ooo`09
+0?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool0=`3oool2000005d0oooo0P00000f
+0?ooo`005P3oool00`000000oooo0?ooo`1a0?ooo`030000003oool0oooo00X0oooo00<000000?oo
+o`3oool05`3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo05/0oooo0P00000h0?oo
+o`005P3oool00`000000oooo0?ooo`1a0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3o
+ool05`3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo05X0oooo0P00000j0?ooo`00
+5P3oool00`000000oooo0?ooo`1a0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0
+5`3oool00`000000oooo0?ooo`0e0?ooo`800000F`3oool2000003`0oooo000F0?ooo`030000003o
+ool0oooo0700oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`0G0?ooo`030000003o
+ool0oooo03D0oooo00<000000?ooo`3oool0F at 3oool2000003h0oooo000F0?ooo`030000003oool0
+oooo0700oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`0F0?ooo`030000003oool0
+oooo03 at 0oooo0P00001J0?ooo`800000 at 03oool001H0oooo00<000000?ooo`3oool0L03oool00`00
+0000oooo0?ooo`080?ooo`030000003oool0oooo01H0oooo00<000000?ooo`3oool0<`3oool20000
+05X0oooo0P0000120?ooo`005P3oool00`000000oooo0?ooo`1_0?ooo`030000003oool0oooo00T0
+oooo00<000000?ooo`3oool05 at 3oool00`000000oooo0?ooo`0c0?ooo`030000003oool0oooo05P0
+oooo0P0000140?ooo`005P3oool00`000000oooo0?ooo`1_0?ooo`030000003oool0oooo00P0oooo
+00<000000?ooo`3oool05 at 3oool00`000000oooo0?ooo`0b0?ooo`800000F at 3oool2000004H0oooo
+000F0?ooo`030000003oool0oooo06l0oooo00<000000?ooo`3oool0203oool00`000000oooo0?oo
+o`0D0?ooo`030000003oool0oooo0380oooo00<000000?ooo`3oool0E`3oool2000004P0oooo000F
+0?ooo`800000K`3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo01 at 0oooo00<00000
+0?ooo`3oool0<@3oool2000005P0oooo0P00001:0?ooo`005P3oool00`000000oooo0?ooo`1^0?oo
+o`030000003oool0oooo00P0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`0`0?oo
+o`800000E`3oool3000004`0oooo000F0?ooo`030000003oool0oooo06d0oooo00<000000?ooo`3o
+ool0203oool00`000000oooo0?ooo`0C0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3o
+ool0E at 3oool2000004l0oooo000F0?ooo`030000003oool0oooo06d0oooo00<000000?ooo`3oool0
+203oool00`000000oooo0?ooo`0B0?ooo`030000003oool0oooo02l0oooo0P00001E0?ooo`<00000
+D at 3oool001H0oooo00<000000?ooo`3oool0K at 3oool00`000000oooo0?ooo`070?ooo`030000003o
+ool0oooo01<0oooo00<000000?ooo`3oool0;@3oool2000005D0oooo0P00001D0?ooo`005P3oool0
+0`000000oooo0?ooo`1/0?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool04`3oool0
+0`000000oooo0?ooo`0/0?ooo`800000E03oool3000005H0oooo000F0?ooo`030000003oool0oooo
+06`0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`0B0?ooo`030000003oool0oooo
+02`0oooo00<000000?ooo`3oool0DP3oool2000005T0oooo000F0?ooo`030000003oool0oooo06/0
+oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`0B0?ooo`030000003oool0oooo02/0
+oooo0P00001B0?ooo`<00000F`3oool001H0oooo00<000000?ooo`3oool0J`3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool0:P3oool200000540oooo
+0`00001N0?ooo`005P3oool00`000000oooo0?ooo`1Z0?ooo`030000003oool0oooo00L0oooo00<0
+00000?ooo`3oool04 at 3oool00`000000oooo0?ooo`0Y0?ooo`800000D03oool300000640oooo000F
+0?ooo`030000003oool0oooo06X0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`0A
+0?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3oool0C at 3oool3000006@0oooo000F0?oo
+o`030000003oool0oooo06X0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`0A0?oo
+o`030000003oool0oooo02P0oooo0P00001=0?ooo`<00000I`3oool001H0oooo00<000000?ooo`3o
+ool0J at 3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo0100oooo00<000000?ooo`3o
+ool09`3oool2000004`0oooo0`00001Z0?ooo`005P3oool00`000000oooo0?ooo`1Y0?ooo`030000
+003oool0oooo00D0oooo00<000000?ooo`3oool03`3oool2000002P0oooo0P00001;0?ooo`<00000
+J`3oool2000000005P3oool00`000000oooo0?ooo`1X0?ooo`030000003oool0oooo00D0oooo00<0
+00000?ooo`3oool03`3oool00`000000oooo0?ooo`0V0?ooo`800000BP3oool3000006X0oooo1000
+00020?ooo`005P3oool00`000000oooo0?ooo`1X0?ooo`030000003oool0oooo00D0oooo00<00000
+0?ooo`3oool03P3oool00`000000oooo0?ooo`0U0?ooo`800000B at 3oool3000006T0oooo10000006
+0?ooo`005P3oool00`000000oooo0?ooo`1W0?ooo`030000003oool0oooo00D0oooo00<000000?oo
+o`3oool03P3oool00`000000oooo0?ooo`0T0?ooo`800000B03oool3000006P0oooo1000000:0?oo
+o`005P3oool00`000000oooo0?ooo`1W0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3o
+ool03 at 3oool2000002D0oooo0P0000170?ooo`<00000IP3oool5000000h0oooo000F0?ooo`030000
+003oool0oooo06H0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0=0?ooo`030000
+003oool0oooo02<0oooo0P0000150?ooo`@00000I03oool5000001<0oooo000F0?ooo`030000003o
+ool0oooo06H0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0<0?ooo`030000003o
+ool0oooo0280oooo0P0000130?ooo`@00000H`3oool5000001P0oooo000F0?ooo`030000003oool0
+oooo06D0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0<0?ooo`030000003oool0
+oooo0200oooo0`0000110?ooo`@00000H at 3oool6000001d0oooo000F0?ooo`030000003oool0oooo
+06 at 0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0;0?ooo`800000803oool30000
+03l0oooo1 at 00001M0?ooo`P000008`3oool001H0oooo00<000000?ooo`3oool0I03oool00`000000
+oooo0?ooo`030?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool07P3oool2000003h0
+oooo1000001L0?ooo`H00000:`3oool001H0oooo00<000000?ooo`3oool0H`3oool00`000000oooo
+0?ooo`040?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3oool0703oool3000003/0oooo
+1 at 00001K0?ooo`D00000<@3oool001H0oooo00<000000?ooo`3oool0HP3oool00`000000oooo0?oo
+o`040?ooo`030000003oool0oooo00T0oooo0P00000L0?ooo`<00000>@3oool5000005X0oooo1P00
+000f0?ooo`005P3oool00`000000oooo0?ooo`1R0?ooo`030000003oool0oooo00<0oooo00<00000
+0?ooo`3oool02 at 3oool00`000000oooo0?ooo`0H0?ooo`@00000=`3oool5000005T0oooo1P00000l
+0?ooo`005P3oool00`000000oooo0?ooo`1Q0?ooo`030000003oool0oooo00<0oooo00<000000?oo
+o`3oool0203oool2000001P0oooo0`00000e0?ooo`H00000EP3oool800000480oooo000F0?ooo`03
+0000003oool0oooo0640oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`070?ooo`80
+00005P3oool400000380oooo1P00001A0?ooo`/00000BP3oool001H0oooo00<000000?ooo`3oool0
+H03oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool0
+4`3oool3000002l0oooo1`00001<0?ooo`/00000E at 3oool001H0oooo00<000000?ooo`3oool0G`3o
+ool010000000oooo0?ooo`3oool2000000P0oooo0P00000B0?ooo`@00000:`3oool7000004/0oooo
+2000001P0?ooo`005P3oool00`000000oooo0?ooo`1O0?ooo`040000003oool0oooo000000P0oooo
+0P00000 at 0?ooo`@000009`3oool8000004L0oooo2`00001P0?ooo`P00000000F0?ooo`030000003o
+ool0oooo05h0oooo00 at 000000?ooo`3oool000001`3oool2000000h0oooo1000000T0?ooo`L00000
+ at 03oool?000005/0oooo400000080?ooo`005P3oool00`000000oooo0?ooo`1M0?ooo`040000003o
+ool0oooo000000H0oooo0P00000=0?ooo`<00000803oool8000003P0oooo3`00001K0?ooo`l00000
+603oool000l0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`1L0?ooo`040000003o
+ool00000000000<0oooo1000000;0?ooo`@00000603oool;00000340oooo3`00001;0?oooal00000
+9`3oool000l0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`1J0?ooo`@000000P3o
+ool3000000T0oooo1P00000=0?ooo`l000007P3ooolN000002d0oooo;@00000n0?ooo`P00000000?
+0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0F03oool8000000<0ooooB at 00000?
+0?oooc`000003`3ooomL000000P0oooo000?0?ooo`030000003oool0oooo00 at 0ooooo`00000:0000
+06 at 0oooo000=0?ooo`030000003oool000000?l0ooooM03oool000h0oooo0P00003o0?ooog at 0oooo
+000?0?ooo`030000003oool0oooo0?l0ooooLP3oool00?l0ooooQ03oool00?l0ooooQ03oool00?l0
+ooooQ03oool00?l0ooooQ03oool00?l0ooooQ03oool00?l0ooooQ03oool00?l0ooooQ03oool00?l0
+ooooQ03oool00?l0ooooQ03oool00?l0ooooQ03oool00?l0ooooQ03oool00?l0ooooQ03oool00?l0
+ooooQ03oool00?l0ooooQ03oool00?l0ooooQ03oool00001\
+\>"],
+  ImageRangeCache->{{{0, 386}, {773, 0}} -> {-0.959046, -0.0379257, 0.0425392,
+   0.00137569}}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(Plot[{ycbcrstsrgnc[f, 0], ycbcrstsrgnc[f, 1], ycbcrstsrgnc[f, 2], 
+        ycbcrstsrgnc[f, 4], ycbcrstsrgnc[f, 8], ycbcrstsrgnc[f, 16], 
+        ycbcrstsrgnc[f, 32], ycbcrstsrgnc[f, 64]}, {f, 0, fmaxcrtc}, 
+      PlotRange -> {{0, fmaxcrtc}, {0, 1}}, AspectRatio -> 2, 
+      PlotStyle -> {{RGBColor[1, 0, 0]}}]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 2 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.129358 0 2 [
+[.12936 -0.0125 -3 -9 ]
+[.12936 -0.0125 3 0 ]
+[.25872 -0.0125 -3 -9 ]
+[.25872 -0.0125 3 0 ]
+[.38807 -0.0125 -3 -9 ]
+[.38807 -0.0125 3 0 ]
+[.51743 -0.0125 -3 -9 ]
+[.51743 -0.0125 3 0 ]
+[.64679 -0.0125 -3 -9 ]
+[.64679 -0.0125 3 0 ]
+[.77615 -0.0125 -3 -9 ]
+[.77615 -0.0125 3 0 ]
+[.9055 -0.0125 -3 -9 ]
+[.9055 -0.0125 3 0 ]
+[-0.0125 .4 -18 -4.5 ]
+[-0.0125 .4 0 4.5 ]
+[-0.0125 .8 -18 -4.5 ]
+[-0.0125 .8 0 4.5 ]
+[-0.0125 1.2 -18 -4.5 ]
+[-0.0125 1.2 0 4.5 ]
+[-0.0125 1.6 -18 -4.5 ]
+[-0.0125 1.6 0 4.5 ]
+[-0.0125 2 -6 -4.5 ]
+[-0.0125 2 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 2 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.12936 0 m
+.12936 .00625 L
+s
+[(1)] .12936 -0.0125 0 1 Mshowa
+.25872 0 m
+.25872 .00625 L
+s
+[(2)] .25872 -0.0125 0 1 Mshowa
+.38807 0 m
+.38807 .00625 L
+s
+[(3)] .38807 -0.0125 0 1 Mshowa
+.51743 0 m
+.51743 .00625 L
+s
+[(4)] .51743 -0.0125 0 1 Mshowa
+.64679 0 m
+.64679 .00625 L
+s
+[(5)] .64679 -0.0125 0 1 Mshowa
+.77615 0 m
+.77615 .00625 L
+s
+[(6)] .77615 -0.0125 0 1 Mshowa
+.9055 0 m
+.9055 .00625 L
+s
+[(7)] .9055 -0.0125 0 1 Mshowa
+.125 Mabswid
+.02587 0 m
+.02587 .00375 L
+s
+.05174 0 m
+.05174 .00375 L
+s
+.07761 0 m
+.07761 .00375 L
+s
+.10349 0 m
+.10349 .00375 L
+s
+.15523 0 m
+.15523 .00375 L
+s
+.1811 0 m
+.1811 .00375 L
+s
+.20697 0 m
+.20697 .00375 L
+s
+.23284 0 m
+.23284 .00375 L
+s
+.28459 0 m
+.28459 .00375 L
+s
+.31046 0 m
+.31046 .00375 L
+s
+.33633 0 m
+.33633 .00375 L
+s
+.3622 0 m
+.3622 .00375 L
+s
+.41395 0 m
+.41395 .00375 L
+s
+.43982 0 m
+.43982 .00375 L
+s
+.46569 0 m
+.46569 .00375 L
+s
+.49156 0 m
+.49156 .00375 L
+s
+.5433 0 m
+.5433 .00375 L
+s
+.56917 0 m
+.56917 .00375 L
+s
+.59505 0 m
+.59505 .00375 L
+s
+.62092 0 m
+.62092 .00375 L
+s
+.67266 0 m
+.67266 .00375 L
+s
+.69853 0 m
+.69853 .00375 L
+s
+.7244 0 m
+.7244 .00375 L
+s
+.75028 0 m
+.75028 .00375 L
+s
+.80202 0 m
+.80202 .00375 L
+s
+.82789 0 m
+.82789 .00375 L
+s
+.85376 0 m
+.85376 .00375 L
+s
+.87963 0 m
+.87963 .00375 L
+s
+.93138 0 m
+.93138 .00375 L
+s
+.95725 0 m
+.95725 .00375 L
+s
+.98312 0 m
+.98312 .00375 L
+s
+.25 Mabswid
+0 0 m
+1 0 L
+s
+0 .4 m
+.00625 .4 L
+s
+[(0.2)] -0.0125 .4 1 0 Mshowa
+0 .8 m
+.00625 .8 L
+s
+[(0.4)] -0.0125 .8 1 0 Mshowa
+0 1.2 m
+.00625 1.2 L
+s
+[(0.6)] -0.0125 1.2 1 0 Mshowa
+0 1.6 m
+.00625 1.6 L
+s
+[(0.8)] -0.0125 1.6 1 0 Mshowa
+0 2 m
+.00625 2 L
+s
+[(1)] -0.0125 2 1 0 Mshowa
+.125 Mabswid
+0 .1 m
+.00375 .1 L
+s
+0 .2 m
+.00375 .2 L
+s
+0 .3 m
+.00375 .3 L
+s
+0 .5 m
+.00375 .5 L
+s
+0 .6 m
+.00375 .6 L
+s
+0 .7 m
+.00375 .7 L
+s
+0 .9 m
+.00375 .9 L
+s
+0 1 m
+.00375 1 L
+s
+0 1.1 m
+.00375 1.1 L
+s
+0 1.3 m
+.00375 1.3 L
+s
+0 1.4 m
+.00375 1.4 L
+s
+0 1.5 m
+.00375 1.5 L
+s
+0 1.7 m
+.00375 1.7 L
+s
+0 1.8 m
+.00375 1.8 L
+s
+0 1.9 m
+.00375 1.9 L
+s
+.25 Mabswid
+0 0 m
+0 2 L
+s
+0 0 m
+1 0 L
+1 2 L
+0 2 L
+closepath
+clip
+newpath
+1 0 0 r
+.5 Mabswid
+0 2 m
+.04057 1.89486 L
+.08481 1.80186 L
+.12636 1.72323 L
+.16632 1.65331 L
+.20885 1.58383 L
+.2498 1.52106 L
+.29331 1.45818 L
+.33524 1.40096 L
+.37557 1.3487 L
+.41848 1.29587 L
+.4598 1.24746 L
+.49953 1.20304 L
+.54183 1.15787 L
+.58254 1.11634 L
+.62583 1.07414 L
+.66752 1.03527 L
+.70762 .99945 L
+.7503 .96291 L
+.79139 .92919 L
+.83505 .89485 L
+.87712 .86314 L
+.9176 .83383 L
+.96065 .80389 L
+1 .77759 L
+s
+0 2 m
+.04057 1.94601 L
+.08481 1.89577 L
+.12636 1.85133 L
+.16632 1.8102 L
+.20885 1.76775 L
+.2498 1.72796 L
+.29331 1.68665 L
+.33524 1.64772 L
+.37557 1.61101 L
+.41848 1.57272 L
+.4598 1.53654 L
+.49953 1.50238 L
+.54183 1.46665 L
+.58254 1.43289 L
+.62583 1.39764 L
+.66752 1.36432 L
+.70762 1.33284 L
+.7503 1.29995 L
+.79139 1.26887 L
+.83505 1.23647 L
+.87712 1.20586 L
+.9176 1.17696 L
+.96065 1.14682 L
+1 1.1198 L
+s
+0 2 m
+.04057 1.97805 L
+.08481 1.95696 L
+.12636 1.93775 L
+.16632 1.9195 L
+.20885 1.90014 L
+.2498 1.88151 L
+.29331 1.86165 L
+.33524 1.84244 L
+.37557 1.82385 L
+.41848 1.80396 L
+.4598 1.78468 L
+.49953 1.76602 L
+.54183 1.74602 L
+.58254 1.72665 L
+.62583 1.70591 L
+.66752 1.68581 L
+.70762 1.66636 L
+.7503 1.64554 L
+.79139 1.62538 L
+.83505 1.60385 L
+.87712 1.583 L
+.9176 1.56285 L
+.96065 1.54133 L
+1 1.52159 L
+s
+0 2 m
+.04057 1.99349 L
+.08481 1.98715 L
+.12636 1.98128 L
+.16632 1.97563 L
+.20885 1.96956 L
+.2498 1.96363 L
+.29331 1.95722 L
+.33524 1.95093 L
+.37557 1.94476 L
+.41848 1.93805 L
+.4598 1.93146 L
+.49953 1.92499 L
+.54183 1.91795 L
+.58254 1.91102 L
+.62583 1.90349 L
+.66752 1.89607 L
+.70762 1.88877 L
+.7503 1.88084 L
+.79139 1.87303 L
+.83505 1.86455 L
+.87712 1.85619 L
+.9176 1.84797 L
+.96065 1.83904 L
+1 1.83071 L
+s
+0 2 m
+.04057 1.99829 L
+.08481 1.99662 L
+.12636 1.99507 L
+.16632 1.99357 L
+.20885 1.99195 L
+.2498 1.99036 L
+.29331 1.98863 L
+.33524 1.98693 L
+.37557 1.98525 L
+.41848 1.98342 L
+.4598 1.98161 L
+.49953 1.97982 L
+.54183 1.97787 L
+.58254 1.97594 L
+.62583 1.97383 L
+.66752 1.97173 L
+.70762 1.96966 L
+.7503 1.9674 L
+.79139 1.96516 L
+.83505 1.96271 L
+.87712 1.96028 L
+.9176 1.95787 L
+.96065 1.95524 L
+1 1.95277 L
+s
+0 2 m
+.04057 1.99957 L
+.08481 1.99914 L
+.12636 1.99875 L
+.16632 1.99837 L
+.20885 1.99796 L
+.2498 1.99755 L
+.29331 1.99711 L
+.33524 1.99668 L
+.37557 1.99625 L
+.41848 1.99578 L
+.4598 1.99532 L
+.49953 1.99486 L
+.54183 1.99436 L
+.58254 1.99386 L
+.62583 1.99331 L
+.66752 1.99277 L
+.70762 1.99224 L
+.7503 1.99165 L
+.79139 1.99107 L
+.83505 1.99044 L
+.87712 1.9898 L
+.9176 1.98918 L
+.96065 1.98849 L
+1 1.98784 L
+s
+0 2 m
+.04057 1.99989 L
+.08481 1.99979 L
+.12636 1.99969 L
+.16632 1.99959 L
+.20885 1.99949 L
+.2498 1.99939 L
+.29331 1.99928 L
+.33524 1.99917 L
+.37557 1.99906 L
+.41848 1.99894 L
+.4598 1.99882 L
+.49953 1.99871 L
+.54183 1.99858 L
+.58254 1.99846 L
+.62583 1.99832 L
+.66752 1.99818 L
+.70762 1.99805 L
+.7503 1.9979 L
+.79139 1.99775 L
+.83505 1.99759 L
+.87712 1.99743 L
+.9176 1.99727 L
+.96065 1.9971 L
+1 1.99694 L
+s
+0 2 m
+.04057 1.99997 L
+.08481 1.99995 L
+.12636 1.99992 L
+.16632 1.9999 L
+.20885 1.99987 L
+.2498 1.99985 L
+.29331 1.99982 L
+.33524 1.99979 L
+.37557 1.99976 L
+.41848 1.99973 L
+.4598 1.99971 L
+.49953 1.99968 L
+.54183 1.99965 L
+.58254 1.99961 L
+.62583 1.99958 L
+.66752 1.99955 L
+.70762 1.99951 L
+.7503 1.99947 L
+.79139 1.99944 L
+.83505 1.9994 L
+.87712 1.99936 L
+.9176 1.99932 L
+.96065 1.99927 L
+1 1.99923 L
+s
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{384, 768},
+  ImageMargins->{{46, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`400060000302000`400?l00000o`00003oo`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon1
+0?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00o`3ooon10?ooo`00A at 3oool0
+0`000000oooo0?ooo`0X0?ooo`D00000:`3oool3000002l0oooo00<000000?ooo`3oool0:03oool3
+000002`0oooo0`00000[0?ooo`030000003oool0oooo02<0oooo00150?ooo`030000003oool0oooo
+02T0oooo00<000000?ooo`3oool0:`3oool01 at 000000oooo0?ooo`3oool0000002h0oooo00<00000
+0?ooo`3oool09`3oool01 at 000000oooo0?ooo`3oool0000002X0oooo00D000000?ooo`3oool0oooo
+0000000Z0?ooo`030000003oool0oooo02<0oooo00150?ooo`030000003oool0oooo02X0oooo00<0
+00000?ooo`3oool0;P3oool00`000000oooo0?ooo`0X0?ooo`H00000;03oool00`000000oooo0?oo
+o`0X0?ooo`050000003oool0oooo0?ooo`000000:`3oool00`000000oooo0?ooo`0R0?ooo`00A at 3o
+ool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo02/0oooo0P00000[0?ooo`050000003o
+ool0oooo0?ooo`000000:@3oool01 at 000000oooo0?ooo`3oool0000002X0oooo00D000000?ooo`3o
+ool0oooo0000000[0?ooo`030000003oool0oooo0280oooo00130?ooo`030000003oool0000002h0
+oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`0Y0?ooo`040000003oool0oooo0000
+02T0oooo1000000[0?ooo`@00000;@3oool00`000000oooo0?ooo`0Q0?ooo`00A03oool2000002X0
+oooo00D000000?ooo`3oool0oooo0000000Z0?ooo`050000003oool0oooo0?ooo`000000;03oool0
+0`000000oooo0000000Z0?ooo`030000003oool0oooo02/0oooo00D000000?ooo`3oool0oooo0000
+000/0?ooo`030000003oool0oooo0240oooo00150?ooo`030000003oool0oooo02T0oooo0`00000/
+0?ooo`<00000;P3oool2000002X0oooo1000000[0?ooo`<00000:P3oool500000280oooo003o0?oo
+oh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oo
+oh40oooo000F0?ooool00000J`00000001H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00D0oooo000F0?ooo`030000003oool0oooo02`0oooo00<0
+00000?ooo`3oool0:`3oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02`0oooo00<0
+00000?ooo`3oool0:`3oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02/0oooo00<0
+00000?ooo`3oool08 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo
+00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3o
+ool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo
+00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3o
+ool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo
+0P00003o0?ooofT0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<00000
+0?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool0
+01H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3o
+oomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<00000
+0?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool0
+01H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3o
+oomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<00000
+0?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3o
+ool200000?l0ooooJ at 3oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo
+00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3o
+ool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo
+00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3o
+ool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo
+00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F
+0?ooo`800000o`3ooomY0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool0
+01H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3o
+oomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<00000
+0?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool0
+01H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3o
+oomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<00000
+0?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`00103o
+ool3000000<0oooo00<000000?ooo`000000100000050?ooo`030000003oool0oooo0?l0ooooJ03o
+ool000<0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo00H0oooo00<0
+00000?ooo`3oool0o`3ooomX0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00<0
+00000?ooo`3oool01 at 3oool300000?l0ooooJ03oool000<0oooo00D000000?ooo`3oool0oooo0000
+00070?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`000`3oool0
+1 at 000000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?oo
+o`3o0?ooofP0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?oo
+o`3oool0000000D0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`00103oool3000000H0oooo0`00
+00060?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?oo
+o`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0
+oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?oo
+o`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0
+oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX
+0?ooo`005P3oool200000?l0ooooJ at 3oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03o
+ool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+ofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0
+o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<0
+00000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?oo
+o`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03o
+ool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+ofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0
+o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<0
+00000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?oo
+o`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03o
+ool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+ofP0oooo000F0?ooo`800000o`3ooomY0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?oo
+o`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0
+oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?oo
+o`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0
+oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ03oool001H0oooo0P00003o0?ooofT0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03o
+ool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+ofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0
+o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<0
+00000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?oo
+o`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03o
+ool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+ofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0
+o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ03oool001H0oooo00<000000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooofP0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ03oool001H0oooo00<0
+00000?ooo`3oool0o`3ooomX0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofP0oooo000F0?oo
+o`030000003oool0oooo0?l0ooooI`3oool10?l000005P3oool00`000000oooo0?ooo`3o0?ooofD0
+oooo0P3o00010?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof at 0oooo00<0o`000?ooo`3oool0
+0 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooomR0?ooo`80o`00103oool001H0oooo00<00000
+0?ooo`3oool0o`3ooomQ0?ooo`030?l0003oool0oooo00 at 0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooG`3oool20?l000L0oooo00040?ooo`<000000`3oool00`000000oooo0?ooo`030?ooo`03
+0000003oool0oooo00<0oooo00<000000?ooo`3oool0o`3ooomN0?ooo`030?l0003oool0oooo00L0
+oooo00030?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`03
+0000003oool0oooo0?l0ooooG03oool20?l000X0oooo00030?ooo`050000003oool0oooo0?ooo`00
+0000103oool6000000 at 0oooo0`00003o0?oooe/0oooo00<0o`000?ooo`3oool02P3oool000<0oooo
+00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`00
+0000oooo0?ooo`3o0?oooeT0oooo0P3o000=0?ooo`000`3oool01 at 000000oooo0?ooo`3oool00000
+00D0oooo00 at 000000?ooo`3oool000001 at 3oool00`000000oooo0?ooo`3o0?oooeP0oooo00<0o`00
+0?ooo`3oool03 at 3oool000<0oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0
+000000D0oooo00<000000?ooo`3oool0o`3ooomF0?ooo`80o`00403oool000 at 0oooo0`0000080?oo
+o`8000001 at 3oool00`000000oooo0?ooo`3o0?oooeD0oooo00<0o`000?ooo`3oool0403oool001H0
+oooo00<000000?ooo`3oool0o`3ooomD0?ooo`030?l0003oool0oooo0140oooo000F0?ooo`030000
+003oool0oooo0?l0ooooDP3oool20?l001 at 0oooo000F0?ooo`030000003oool0oooo0?l0ooooD at 3o
+ool00`3o0000oooo0?ooo`0D0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooe00oooo00<0o`00
+0?ooo`3oool05 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooom>0?ooo`80o`00603oool001H0
+oooo00<000000?ooo`3oool0o`3ooom=0?ooo`030?l0003oool0oooo01P0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooC03oool00`3o0000oooo0?ooo`0I0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooodX0oooo0P3o000L0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooodT0oooo00<0o`00
+0?ooo`3oool0703oool001H0oooo00<000000?ooo`3oool0o`3ooom70?ooo`80o`007`3oool001H0
+oooo00<000000?ooo`3oool0o`3ooom60?ooo`030?l0003oool0oooo01l0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooA03oool20?l00280oooo000F0?ooo`030000003oool0oooo0?l0oooo@`3o
+ool00`3o0000oooo0?ooo`0R0?ooo`005P3oool00`000000oooo0?ooo`3o0?oood40oooo0P3o000U
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?oood00oooo00<0o`000?ooo`3oool09 at 3oool001H0
+oooo00<000000?ooo`3oool0o`3oooln0?ooo`80o`00:03oool001H0oooo00<000000?ooo`3oool0
+o`3ooolm0?ooo`030?l0003oool0oooo02P0oooo000F0?ooo`030000003oool0oooo0?l0oooo>`3o
+ool20?l002/0oooo000F0?ooo`030000003oool0oooo0?l0oooo>P3oool00`3o0000oooo0?ooo`0[
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooocT0oooo00<0o`000?ooo`3oool0;03oool001H0
+oooo00<000000?ooo`3oool0o`3ooolg0?ooo`80o`00;`3oool001H0oooo00<000000?ooo`3oool0
+o`3ooolf0?ooo`030?l0003oool0oooo02l0oooo000F0?ooo`030000003oool0oooo0?l0oooo=@3o
+ool00`3o0000oooo0?ooo`0`0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooc at 0oooo00<0o`00
+0?ooo`3oool0<@3oool001H0oooo00<000000?ooo`3oool0o`3ooolb0?ooo`80o`00=03oool001H0
+oooo00<000000?ooo`3oool0o`3ooola0?ooo`030?l0003oool0oooo03 at 0oooo000F0?ooo`030000
+003oool0oooo0?l0oooo<03oool00`3o0000oooo0?ooo`0e0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooobl0oooo00<0o`000?ooo`3oool0=P3oool001H0oooo00<000000?ooo`3oool0o`3oool]
+0?ooo`80o`00>@3oool001H0oooo00<000000?ooo`3oool0o`3oool/0?ooo`030?l0003oool0oooo
+03T0oooo000F0?ooo`030000003oool0oooo0?l0oooo:`3oool00`3o0000oooo0?ooo`0j0?ooo`00
+5P3oool200000?l0oooo:`3oool00`3o0000oooo0?ooo`0k0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooobP0oooo0P3o000n0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooobL0oooo00<0o`00
+0?ooo`3oool0?P3oool001H0oooo00<000000?ooo`3oool0o`3ooolV0?ooo`030?l0003oool0oooo
+03l0oooo000F0?ooo`030000003oool0oooo0?l0oooo903oool20?l00480oooo000F0?ooo`030000
+003oool0oooo0?l0oooo8`3oool00`3o0000oooo0?ooo`120?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooob80oooo00<0o`000?ooo`3oool0@`3oool001H0oooo00<000000?ooo`3oool0o`3ooolP
+0?ooo`80o`00AP3oool001H0oooo00<000000?ooo`3oool0o`3ooolO0?ooo`030?l0003oool0oooo
+04H0oooo000F0?ooo`030000003oool0oooo0?l0oooo7P3oool00`3o0000oooo0?ooo`170?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?oooa`0oooo0P3o001:0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?oooa/0oooo00<0o`000?ooo`3oool0BP3oool001H0oooo00<000000?ooo`3oool0o`3ooolJ
+0?ooo`030?l0003oool0oooo04/0oooo000F0?ooo`030000003oool0oooo0?l0oooo603oool20?l0
+04h0oooo000F0?ooo`030000003oool0oooo0?l0oooo5`3oool00`3o0000oooo0?ooo`1>0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?oooaH0oooo00<0o`000?ooo`3oool0C`3oool001H0oooo00<0
+00000?ooo`3oool0o`3ooolE0?ooo`030?l0003oool0oooo0500oooo000F0?ooo`030000003oool0
+oooo0?l0oooo4`3oool20?l005<0oooo000F0?ooo`030000003oool0oooo0?l0oooo4P3oool00`3o
+0000oooo0?ooo`1C0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa40oooo00<0o`000?ooo`3o
+ool0E03oool001H0oooo00<000000?ooo`3oool0o`3oool at 0?ooo`030?l0003oool0oooo05D0oooo
+000F0?ooo`030000003oool0oooo0?l0oooo3P3oool20?l005P0oooo000F0?ooo`030000003oool0
+oooo0?l0oooo3 at 3oool00`3o0000oooo0?ooo`1H0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+o``0oooo00<0o`000?ooo`3oool0F at 3oool001H0oooo00<000000?ooo`3oool0o`3oool;0?ooo`03
+0?l0003oool0oooo05X0oooo000F0?ooo`030000003oool0oooo0?l0oooo2P3oool00`3o0000oooo
+0?ooo`1K0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`P0oooo0P3o001N0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooo`L0oooo00<0o`000?ooo`3oool0GP3oool001H0oooo00<000000?oo
+o`3oool0o`3oool60?ooo`030?l0003oool0oooo05l0oooo000F0?ooo`030000003oool0oooo0?l0
+oooo1 at 3oool00`3o0000oooo0?ooo`1P0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`@0oooo
+00<0o`000?ooo`3oool0H at 3oool001H0oooo00<000000?ooo`3oool0o`3oool30?ooo`030?l0003o
+ool0oooo0680oooo000F0?ooo`030000003oool0oooo0?l0oooo0P3oool00`3o0000oooo0?ooo`1S
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`80o`00IP3oool001H0oooo00<000000?ooo`3o
+ool0oP3oool00`3o0000oooo0?ooo`1V0?ooo`005P3oool00`000000oooo0?ooo`3m0?ooo`030?l0
+003oool0oooo06L0oooo000F0?ooo`030000003oool0oooo0?`0oooo00<0o`000?ooo`3oool0J03o
+ool001H0oooo0P00003l0?ooo`030?l0003oool0oooo06T0oooo000F0?ooo`030000003oool0oooo
+0?X0oooo00<0o`000?ooo`3oool0JP3oool001H0oooo00<000000?ooo`3oool0n at 3oool00`3o0000
+oooo0?ooo`1[0?ooo`005P3oool00`000000oooo0?ooo`3h0?ooo`030?l0003oool0oooo06`0oooo
+000F0?ooo`030000003oool0oooo0?L0oooo00<0o`000?ooo`3oool0K at 3oool001H0oooo00<00000
+0?ooo`3oool0mP3oool00`3o0000oooo0?ooo`1^0?ooo`005P3oool00`000000oooo0?ooo`3d0?oo
+o`80o`00L at 3oool001H0oooo00<000000?ooo`3oool0l`3oool00`3o0000oooo0?ooo`1a0?ooo`00
+5P3oool00`000000oooo0?ooo`3b0?ooo`030?l0003oool0oooo0780oooo000F0?ooo`030000003o
+ool0oooo0?40oooo00<0o`000?ooo`3oool0L`3oool001H0oooo00<000000?ooo`3oool0l03oool0
+0`3o0000oooo0?ooo`1d0?ooo`005P3oool00`000000oooo0?ooo`3_0?ooo`030?l0003oool0oooo
+07D0oooo000F0?ooo`030000003oool0oooo0>h0oooo00<0o`000?ooo`3oool0MP3oool001H0oooo
+00<000000?ooo`3oool0k at 3oool00`3o0000oooo0?ooo`1g0?ooo`005P3oool00`000000oooo0?oo
+o`3/0?ooo`030?l0003oool0oooo07P0oooo000F0?ooo`030000003oool0oooo0>/0oooo00<0o`00
+0?ooo`3oool0N at 3oool001H0oooo00<000000?ooo`3oool0jP3oool00`3o0000oooo0?ooo`1j0?oo
+o`005P3oool00`000000oooo0?ooo`3Y0?ooo`030?l0003oool0oooo07/0oooo000F0?ooo`030000
+003oool0oooo0>P0oooo00<0o`000?ooo`3oool0O03oool001H0oooo00<000000?ooo`3oool0iP3o
+ool20?l007l0oooo000F0?ooo`030000003oool0oooo0>D0oooo00<0o`000?ooo`3oool0O`3oool0
+01H0oooo00<000000?ooo`3oool0i03oool00`3o0000oooo0?ooo`200?ooo`005P3oool00`000000
+oooo0?ooo`3S0?ooo`030?l0003oool0oooo0840oooo000F0?ooo`030000003oool0oooo0>80oooo
+00<0o`000?ooo`3oool0PP3oool001H0oooo00<000000?ooo`3oool0h at 3oool00`3o0000oooo0?oo
+o`230?ooo`005P3oool00`000000oooo0?ooo`3P0?ooo`030?l0003oool0oooo08 at 0oooo000F0?oo
+o`030000003oool0oooo0=l0oooo00<0o`000?ooo`3oool0Q at 3oool001H0oooo00<000000?ooo`3o
+ool0gP3oool00`3o0000oooo0?ooo`260?ooo`005P3oool00`000000oooo0?ooo`3M0?ooo`030?l0
+003oool0oooo08L0oooo000F0?ooo`030000003oool0oooo0=`0oooo00<0o`000?ooo`3oool0R03o
+ool001H0oooo00<000000?ooo`3oool0f`3oool00`3o0000oooo0?ooo`290?ooo`005P3oool00`00
+0000oooo0?ooo`3J0?ooo`030?l0003oool0oooo08X0oooo000F0?ooo`030000003oool0oooo0=T0
+oooo00<0o`000?ooo`3oool0R`3oool001H0oooo00<000000?ooo`3oool0f03oool00`3o0000oooo
+0?ooo`2<0?ooo`005P3oool00`000000oooo0?ooo`3F0?ooo`80o`00S`3oool001H0oooo00<00000
+0?ooo`3oool0e at 3oool00`3o0000oooo0?ooo`2?0?ooo`005P3oool200000=D0oooo00<0o`000?oo
+o`3oool0T03oool001H0oooo00<000000?ooo`3oool0d`3oool00`3o0000oooo0?ooo`2A0?ooo`00
+5P3oool00`000000oooo0?ooo`3B0?ooo`030?l0003oool0oooo0980oooo000F0?ooo`030000003o
+ool0oooo0=40oooo00<0o`000?ooo`3oool0T`3oool001H0oooo00<000000?ooo`3oool0d03oool0
+0`3o0000oooo0?ooo`2D0?ooo`005P3oool00`000000oooo0?ooo`3?0?ooo`030?l0003oool0oooo
+09D0oooo000F0?ooo`030000003oool0oooo0<h0oooo00<0o`000?ooo`3oool0UP3oool001H0oooo
+00<000000?ooo`3oool0c at 3oool00`3o0000oooo0?ooo`2F0?ooo`40o`00000F0?ooo`030000003o
+ool0oooo0<`0oooo00<0o`000?ooo`3oool0U at 3oool20?l00040oooo000F0?ooo`030000003oool0
+oooo0</0oooo00<0o`000?ooo`3oool0U03oool20?l000<0oooo000F0?ooo`030000003oool0oooo
+0<X0oooo00<0o`000?ooo`3oool0U03oool00`3o0000oooo0?ooo`030?ooo`005P3oool00`000000
+oooo0?ooo`390?ooo`030?l0003oool0oooo09<0oooo0P3o00060?ooo`005P3oool00`000000oooo
+0?ooo`380?ooo`030?l0003oool0oooo0980oooo0P3o00080?ooo`005P3oool00`000000oooo0?oo
+o`370?ooo`030?l0003oool0oooo0980oooo00<0o`000?ooo`3oool0203oool001H0oooo00<00000
+0?ooo`3oool0aP3oool00`3o0000oooo0?ooo`2A0?ooo`80o`002`3oool001H0oooo00<000000?oo
+o`3oool0a at 3oool00`3o0000oooo0?ooo`2 at 0?ooo`80o`003 at 3oool001H0oooo00<000000?ooo`3o
+ool0a03oool00`3o0000oooo0?ooo`2 at 0?ooo`030?l0003oool0oooo00d0oooo000F0?ooo`030000
+003oool0oooo0<<0oooo00<0o`000?ooo`3oool0S`3oool20?l00100oooo000F0?ooo`030000003o
+ool0oooo0<80oooo00<0o`000?ooo`3oool0S`3oool00`3o0000oooo0?ooo`0 at 0?ooo`005P3oool0
+0`000000oooo0?ooo`310?ooo`030?l0003oool0oooo08l0oooo00<0o`000?ooo`3oool04 at 3oool0
+01H0oooo00<000000?ooo`3oool0`03oool00`3o0000oooo0?ooo`2>0?ooo`80o`00503oool001H0
+oooo00<000000?ooo`3oool0_`3oool00`3o0000oooo0?ooo`2>0?ooo`030?l0003oool0oooo01 at 0
+oooo000F0?ooo`030000003oool0oooo0;h0oooo00<0o`000?ooo`3oool0SP3oool00`3o0000oooo
+0?ooo`0E0?ooo`005P3oool00`000000oooo0?ooo`2m0?ooo`030?l0003oool0oooo08d0oooo0P3o
+000H0?ooo`005P3oool00`000000oooo0?ooo`2l0?ooo`030?l0003oool0oooo08d0oooo00<0o`00
+0?ooo`3oool0603oool001H0oooo00<000000?ooo`3oool0_03oool00`3o0000oooo0?ooo`2<0?oo
+o`030?l0003oool0oooo01T0oooo000F0?ooo`030000003oool0oooo0;/0oooo00<0o`000?ooo`3o
+ool0R`3oool20?l001`0oooo000F0?ooo`030000003oool0oooo0;X0oooo00<0o`000?ooo`3oool0
+R`3oool00`3o0000oooo0?ooo`0L0?ooo`005P3oool00`000000oooo0?ooo`2i0?ooo`030?l0003o
+ool0oooo08X0oooo0P3o000O0?ooo`005P3oool00`000000oooo0?ooo`2h0?ooo`030?l0003oool0
+oooo08X0oooo00<0o`000?ooo`3oool07`3oool001H0oooo00<000000?ooo`3oool0]`3oool00`3o
+0000oooo0?ooo`2:0?ooo`030?l0003oool0oooo0200oooo000F0?ooo`030000003oool0oooo0;H0
+oooo00<0o`000?ooo`3oool0R at 3oool20?l002<0oooo000F0?ooo`030000003oool0oooo0;D0oooo
+00<0o`000?ooo`3oool0R at 3oool00`3o0000oooo0?ooo`0S0?ooo`00103oool3000000<0oooo00<0
+00000?ooo`3oool00`0000060?ooo`030000003oool0oooo0;D0oooo00<0o`000?ooo`3oool0R03o
+ool00`3o0000oooo0?ooo`0T0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D0
+00000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0;@0oooo00<0o`000?ooo`3oool0
+Q`3oool20?l002L0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo
+0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0/`3oool00`3o0000oooo0?ooo`270?ooo`03
+0?l0003oool0oooo02L0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000
+oooo0?ooo`3oool0000000D0oooo0`00002b0?ooo`030?l0003oool0oooo08L0oooo00<0o`000?oo
+o`3oool0:03oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`@000001P3oool00`00
+0000oooo0?ooo`2a0?ooo`030?l0003oool0oooo08H0oooo0P3o000[0?ooo`000`3oool01 at 000000
+oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0
+oooo0;00oooo00<0o`000?ooo`3oool0QP3oool00`3o0000oooo0?ooo`0[0?ooo`00103oool30000
+00H0oooo0`0000060?ooo`030000003oool0oooo0:l0oooo00<0o`000?ooo`3oool0Q at 3oool20?l0
+02h0oooo000F0?ooo`030000003oool0oooo0:h0oooo00<0o`000?ooo`3oool0Q at 3oool00`3o0000
+oooo0?ooo`0^0?ooo`005P3oool00`000000oooo0?ooo`2]0?ooo`030?l0003oool0oooo08D0oooo
+00<0o`000?ooo`3oool0;`3oool001H0oooo00<000000?ooo`3oool0[@3oool00`3o0000oooo0?oo
+o`230?ooo`80o`00<P3oool001H0oooo00<000000?ooo`3oool0[03oool00`3o0000oooo0?ooo`23
+0?ooo`030?l0003oool0oooo0380oooo000F0?ooo`030000003oool0oooo0:/0oooo00<0o`000?oo
+o`3oool0P`3oool00`3o0000oooo0?ooo`0c0?ooo`005P3oool00`000000oooo0?ooo`2Z0?ooo`03
+0?l0003oool0oooo0880oooo0P3o000f0?ooo`005P3oool00`000000oooo0?ooo`2Y0?ooo`030?l0
+003oool0oooo0880oooo00<0o`000?ooo`3oool0=P3oool001H0oooo00<000000?ooo`3oool0Z03o
+ool00`3o0000oooo0?ooo`220?ooo`030?l0003oool0oooo03L0oooo000F0?ooo`030000003oool0
+oooo0:L0oooo00<0o`000?ooo`3oool0P at 3oool20?l003X0oooo000F0?ooo`030000003oool0oooo
+0:H0oooo00<0o`000?ooo`3oool0P at 3oool00`3o0000oooo0?ooo`0j0?ooo`005P3oool00`000000
+oooo0?ooo`2V0?ooo`030?l0003oool0oooo07l0oooo0P3o000m0?ooo`005P3oool00`000000oooo
+0?ooo`2U0?ooo`030?l0003oool0oooo07l0oooo00<0o`000?ooo`3oool0?@3oool001H0oooo00<0
+00000?ooo`3oool0Y03oool00`3o0000oooo0?ooo`1n0?ooo`80o`00 at 03oool001H0oooo00<00000
+0?ooo`3oool0X`3oool00`3o0000oooo0?ooo`1n0?ooo`030?l0003oool0oooo0400oooo000F0?oo
+o`030000003oool0oooo0:80oooo00<0o`000?ooo`3oool0OP3oool00`3o0000oooo0?ooo`110?oo
+o`005P3oool00`000000oooo0?ooo`2Q0?ooo`030?l0003oool0oooo07d0oooo0P3o00140?ooo`00
+5P3oool00`000000oooo0?ooo`2P0?ooo`030?l0003oool0oooo07d0oooo00<0o`000?ooo`3oool0
+A03oool001H0oooo00<000000?ooo`3oool0W`3oool00`3o0000oooo0?ooo`1l0?ooo`80o`00A`3o
+ool001H0oooo00<000000?ooo`3oool0W`3oool00`3o0000oooo0?ooo`1k0?ooo`030?l0003oool0
+oooo04L0oooo000F0?ooo`030000003oool0oooo09h0oooo00<0o`000?ooo`3oool0NP3oool20?l0
+04X0oooo000F0?ooo`030000003oool0oooo09d0oooo00<0o`000?ooo`3oool0NP3oool00`3o0000
+oooo0?ooo`1:0?ooo`005P3oool00`000000oooo0?ooo`2L0?ooo`030?l0003oool0oooo07X0oooo
+00<0o`000?ooo`3oool0B`3oool001H0oooo00<000000?ooo`3oool0V`3oool00`3o0000oooo0?oo
+o`1i0?ooo`80o`00CP3oool001H0oooo00<000000?ooo`3oool0VP3oool00`3o0000oooo0?ooo`1i
+0?ooo`030?l0003oool0oooo04h0oooo000F0?ooo`030000003oool0oooo09T0oooo00<0o`000?oo
+o`3oool0N at 3oool00`3o0000oooo0?ooo`1?0?ooo`005P3oool00`000000oooo0?ooo`2H0?ooo`03
+0?l0003oool0oooo07T0oooo00<0o`000?ooo`3oool0D03oool001H0oooo00<000000?ooo`3oool0
+V03oool00`3o0000oooo0?ooo`1g0?ooo`80o`00D`3oool001H0oooo00<000000?ooo`3oool0U`3o
+ool00`3o0000oooo0?ooo`1g0?ooo`030?l0003oool0oooo05<0oooo000F0?ooo`030000003oool0
+oooo09H0oooo00<0o`000?ooo`3oool0M`3oool00`3o0000oooo0?ooo`1D0?ooo`005P3oool00`00
+0000oooo0?ooo`2E0?ooo`030?l0003oool0oooo07L0oooo00<0o`000?ooo`3oool0E at 3oool001H0
+oooo00<000000?ooo`3oool0U03oool00`3o0000oooo0?ooo`1f0?ooo`80o`00F03oool001H0oooo
+00<000000?ooo`3oool0T`3oool00`3o0000oooo0?ooo`1f0?ooo`030?l0003oool0oooo05P0oooo
+000F0?ooo`800000T`3oool00`3o0000oooo0?ooo`1f0?ooo`030?l0003oool0oooo05T0oooo000F
+0?ooo`030000003oool0oooo0940oooo00<0o`000?ooo`3oool0M at 3oool20?l005`0oooo000F0?oo
+o`030000003oool0oooo0940oooo00<0o`000?ooo`3oool0M03oool00`3o0000oooo0?ooo`1L0?oo
+o`005P3oool00`000000oooo0?ooo`2 at 0?ooo`030?l0003oool0oooo07 at 0oooo00<0o`000?ooo`3o
+ool0G at 3oool001H0oooo00<000000?ooo`3oool0S`3oool00`3o0000oooo0?ooo`1c0?ooo`80o`00
+H03oool001H0oooo00<000000?ooo`3oool0SP3oool00`3o0000oooo0?ooo`1c0?ooo`030?l0003o
+ool0oooo0600oooo000F0?ooo`030000003oool0oooo08d0oooo00<0o`000?ooo`3oool0L`3oool0
+0`3o0000oooo0?ooo`1Q0?ooo`005P3oool00`000000oooo0?ooo`2<0?ooo`030?l0003oool0oooo
+0780oooo0P3o001T0?ooo`005P3oool00`000000oooo0?ooo`2<0?ooo`030?l0003oool0oooo0740
+oooo00<0o`000?ooo`3oool0I03oool001H0oooo00<000000?ooo`3oool0R`3oool00`3o0000oooo
+0?ooo`1a0?ooo`030?l0003oool0oooo06D0oooo000F0?ooo`030000003oool0oooo08X0oooo00<0
+o`000?ooo`3oool0L03oool20?l006P0oooo000F0?ooo`030000003oool0oooo08T0oooo00<0o`00
+0?ooo`3oool0L03oool00`3o0000oooo0?ooo`1X0?ooo`005P3oool00`000000oooo0?ooo`280?oo
+o`030?l0003oool0oooo0700oooo00<0o`000?ooo`3oool0J at 3oool001H0oooo00<000000?ooo`3o
+ool0Q`3oool00`3o0000oooo0?ooo`1`0?ooo`030?l0003oool0oooo06X0oooo000F0?ooo`030000
+003oool0oooo08L0oooo00<0o`000?ooo`3oool0KP3oool20?l006d0oooo000F0?ooo`030000003o
+ool0oooo08H0oooo00<0o`000?ooo`3oool0KP3oool00`3o0000oooo0?ooo`1]0?ooo`005P3oool0
+0`000000oooo0?ooo`250?ooo`030?l0003oool0oooo06h0oooo00<0o`000?ooo`3oool0KP3oool0
+01H0oooo00<000000?ooo`3oool0Q03oool00`3o0000oooo0?ooo`1^0?ooo`030?l0003oool0oooo
+06l0oooo000F0?ooo`030000003oool0oooo08<0oooo00<0o`000?ooo`3oool0KP3oool00`3o0000
+oooo0?ooo`1`0?ooo`005P3oool00`000000oooo0?ooo`230?ooo`030?l0003oool0oooo06d0oooo
+00<0o`000?ooo`3oool0L at 3oool001H0oooo00<000000?ooo`3oool0PP3oool00`3o0000oooo0?oo
+o`1/0?ooo`80o`00M03oool001H0oooo00<000000?ooo`3oool0P at 3oool00`3o0000oooo0?ooo`1/
+0?ooo`030?l0003oool0oooo07 at 0oooo000F0?ooo`030000003oool0oooo0800oooo00<0o`000?oo
+o`3oool0K03oool00`3o0000oooo0?ooo`1e0?ooo`005P3oool00`000000oooo0?ooo`200?ooo`03
+0?l0003oool0oooo06/0oooo00<0o`000?ooo`3oool0MP3oool001H0oooo00<000000?ooo`3oool0
+O`3oool00`3o0000oooo0?ooo`1[0?ooo`030?l0003oool0oooo07L0oooo000F0?ooo`030000003o
+ool0oooo07h0oooo00<0o`000?ooo`3oool0JP3oool20?l007X0oooo000F0?ooo`030000003oool0
+oooo07d0oooo00<0o`000?ooo`3oool0JP3oool00`3o0000oooo0?ooo`1j0?ooo`005P3oool00`00
+0000oooo0?ooo`1m0?ooo`030?l0003oool0oooo06T0oooo00<0o`000?ooo`3oool0N`3oool001H0
+oooo00<000000?ooo`3oool0O03oool00`3o0000oooo0?ooo`1Y0?ooo`030?l0003oool0oooo07`0
+oooo000F0?ooo`030000003oool0oooo07/0oooo00<0o`000?ooo`3oool0J03oool20?l007l0oooo
+000F0?ooo`030000003oool0oooo07X0oooo00<0o`000?ooo`3oool0J03oool00`3o0000oooo0?oo
+o`1o0?ooo`005P3oool00`000000oooo0?ooo`1j0?ooo`030?l0003oool0oooo06L0oooo00<0o`00
+0?ooo`3oool0P03oool001H0oooo00<000000?ooo`3oool0N at 3oool00`3o0000oooo0?ooo`1W0?oo
+o`030?l0003oool0oooo0840oooo000F0?ooo`030000003oool0oooo07P0oooo00<0o`000?ooo`3o
+ool0IP3oool20?l008 at 0oooo000F0?ooo`030000003oool0oooo07L0oooo00<0o`000?ooo`3oool0
+IP3oool00`3o0000oooo0?ooo`240?ooo`005P3oool00`000000oooo0?ooo`1g0?ooo`030?l0003o
+ool0oooo06D0oooo00<0o`000?ooo`3oool0Q at 3oool001H0oooo0P00001g0?ooo`030?l0003oool0
+oooo06D0oooo00<0o`000?ooo`3oool0QP3oool001H0oooo00<000000?ooo`3oool0M at 3oool00`3o
+0000oooo0?ooo`1T0?ooo`80o`00R at 3oool001H0oooo00<000000?ooo`3oool0M at 3oool00`3o0000
+oooo0?ooo`1S0?ooo`030?l0003oool0oooo08T0oooo000F0?ooo`030000003oool0oooo07 at 0oooo
+00<0o`000?ooo`3oool0H`3oool00`3o0000oooo0?ooo`2:0?ooo`005P3oool00`000000oooo0?oo
+o`1c0?ooo`030?l0003oool0oooo06<0oooo00<0o`000?ooo`3oool0R`3oool001H0oooo00<00000
+0?ooo`3oool0LP3oool00`3o0000oooo0?ooo`1S0?ooo`030?l0003oool0oooo08`0oooo000F0?oo
+o`030000003oool0oooo0780oooo00<0o`000?ooo`3oool0H at 3oool20?l008l0oooo000F0?ooo`03
+0000003oool0oooo0740oooo00<0o`000?ooo`3oool0H at 3oool00`3o0000oooo0?ooo`2?0?ooo`00
+5P3oool00`000000oooo0?ooo`1`0?ooo`030?l0003oool0oooo0640oooo00<0o`000?ooo`3oool0
+T03oool001H0oooo00<000000?ooo`3oool0L03oool00`3o0000oooo0?ooo`1P0?ooo`030?l0003o
+ool0oooo0940oooo000F0?ooo`030000003oool0oooo06l0oooo00<0o`000?ooo`3oool0G`3oool2
+0?l009 at 0oooo000F0?ooo`030000003oool0oooo06h0oooo00<0o`000?ooo`3oool0G`3oool00`3o
+0000oooo0?ooo`2D0?ooo`005P3oool00`000000oooo0?ooo`1]0?ooo`030?l0003oool0oooo05l0
+oooo00<0o`000?ooo`3oool0U at 3oool001H0oooo00<000000?ooo`3oool0K at 3oool00`3o0000oooo
+0?ooo`1N0?ooo`030?l0003oool0oooo09H0oooo000F0?ooo`030000003oool0oooo06`0oooo00<0
+o`000?ooo`3oool0G at 3oool20?l009T0oooo000F0?ooo`030000003oool0oooo06/0oooo00<0o`00
+0?ooo`3oool0G at 3oool00`3o0000oooo0?ooo`2I0?ooo`005P3oool00`000000oooo0?ooo`1[0?oo
+o`030?l0003oool0oooo05`0oooo00<0o`000?ooo`3oool0VP3oool001H0oooo00<000000?ooo`3o
+ool0JP3oool00`3o0000oooo0?ooo`1L0?ooo`030?l0003oool0oooo09/0oooo000F0?ooo`030000
+003oool0oooo06T0oooo00<0o`000?ooo`3oool0F`3oool20?l009h0oooo000F0?ooo`030000003o
+ool0oooo06P0oooo00<0o`000?ooo`3oool0F`3oool00`3o0000oooo0?ooo`2N0?ooo`005P3oool0
+0`000000oooo0?ooo`1X0?ooo`030?l0003oool0oooo05X0oooo00<0o`000?ooo`3oool0W`3oool0
+01H0oooo00<000000?ooo`3oool0I`3oool00`3o0000oooo0?ooo`1J0?ooo`030?l0003oool0oooo
+0:00oooo000F0?ooo`030000003oool0oooo06H0oooo00<0o`000?ooo`3oool0F at 3oool20?l00:<0
+oooo000F0?ooo`030000003oool0oooo06H0oooo00<0o`000?ooo`3oool0F03oool00`3o0000oooo
+0?ooo`2S0?ooo`005P3oool00`000000oooo0?ooo`1U0?ooo`030?l0003oool0oooo05P0oooo00<0
+o`000?ooo`3oool0Y03oool001H0oooo00<000000?ooo`3oool0I03oool00`3o0000oooo0?ooo`1H
+0?ooo`030?l0003oool0oooo0:D0oooo000F0?ooo`030000003oool0oooo06<0oooo00<0o`000?oo
+o`3oool0F03oool00`3o0000oooo0?ooo`2V0?ooo`005P3oool00`000000oooo0?ooo`1S0?ooo`03
+0?l0003oool0oooo05H0oooo0P3o002Y0?ooo`005P3oool00`000000oooo0?ooo`1R0?ooo`030?l0
+003oool0oooo05H0oooo00<0o`000?ooo`3oool0Z at 3oool001H0oooo00<000000?ooo`3oool0H at 3o
+ool00`3o0000oooo0?ooo`1F0?ooo`030?l0003oool0oooo0:X0oooo000F0?ooo`030000003oool0
+oooo0600oooo00<0o`000?ooo`3oool0EP3oool00`3o0000oooo0?ooo`2[0?ooo`005P3oool00`00
+0000oooo0?ooo`1P0?ooo`030?l0003oool0oooo05D0oooo00<0o`000?ooo`3oool0[03oool001H0
+oooo00<000000?ooo`3oool0G`3oool00`3o0000oooo0?ooo`1E0?ooo`030?l0003oool0oooo0:d0
+oooo000F0?ooo`030000003oool0oooo05h0oooo00<0o`000?ooo`3oool0E at 3oool00`3o0000oooo
+0?ooo`2^0?ooo`005P3oool00`000000oooo0?ooo`1N0?ooo`030?l0003oool0oooo05<0oooo0P3o
+002a0?ooo`005P3oool00`000000oooo0?ooo`1M0?ooo`030?l0003oool0oooo05<0oooo00<0o`00
+0?ooo`3oool0/@3oool001H0oooo0P00001M0?ooo`030?l0003oool0oooo05<0oooo00<0o`000?oo
+o`3oool0/P3oool001H0oooo00<000000?ooo`3oool0F`3oool00`3o0000oooo0?ooo`1C0?ooo`03
+0?l0003oool0oooo0;<0oooo000F0?ooo`030000003oool0oooo05/0oooo00<0o`000?ooo`3oool0
+DP3oool00`3o0000oooo0?ooo`2d0?ooo`005P3oool00`000000oooo0?ooo`1J0?ooo`030?l0003o
+ool0oooo0580oooo00<0o`000?ooo`3oool0]@3oool001H0oooo00<000000?ooo`3oool0F at 3oool0
+0`3o0000oooo0?ooo`1A0?ooo`80o`00^03oool001H0oooo00<000000?ooo`3oool0F03oool00`3o
+0000oooo0?ooo`1A0?ooo`030?l0003oool0oooo0;P0oooo000F0?ooo`030000003oool0oooo05P0
+oooo00<0o`000?ooo`3oool0D03oool00`3o0000oooo0?ooo`2i0?ooo`005P3oool00`000000oooo
+0?ooo`1G0?ooo`030?l0003oool0oooo0500oooo00<0o`000?ooo`3oool0^P3oool001H0oooo00<0
+00000?ooo`3oool0EP3oool00`3o0000oooo0?ooo`1 at 0?ooo`030?l0003oool0oooo0;T0oooo0P3o
+000001H0oooo00<000000?ooo`3oool0EP3oool00`3o0000oooo0?ooo`1?0?ooo`030?l0003oool0
+oooo0;P0oooo0P3o00020?ooo`005P3oool00`000000oooo0?ooo`1E0?ooo`030?l0003oool0oooo
+04h0oooo0P3o002i0?ooo`80o`00103oool001H0oooo00<000000?ooo`3oool0E03oool00`3o0000
+oooo0?ooo`1>0?ooo`030?l0003oool0oooo0;L0oooo0P3o00060?ooo`005P3oool00`000000oooo
+0?ooo`1D0?ooo`030?l0003oool0oooo04d0oooo00<0o`000?ooo`3oool0]P3oool20?l000P0oooo
+000F0?ooo`030000003oool0oooo05<0oooo00<0o`000?ooo`3oool0C at 3oool00`3o0000oooo0?oo
+o`2e0?ooo`80o`002P3oool001H0oooo00<000000?ooo`3oool0DP3oool00`3o0000oooo0?ooo`1=
+0?ooo`030?l0003oool0oooo0;@0oooo0P3o000<0?ooo`005P3oool00`000000oooo0?ooo`1B0?oo
+o`030?l0003oool0oooo04`0oooo00<0o`000?ooo`3oool0/P3oool30?l000h0oooo000F0?ooo`03
+0000003oool0oooo0540oooo00<0o`000?ooo`3oool0B`3oool20?l00;<0oooo0P3o000A0?ooo`00
+5P3oool00`000000oooo0?ooo`1 at 0?ooo`030?l0003oool0oooo04/0oooo00<0o`000?ooo`3oool0
+/@3oool20?l001<0oooo000F0?ooo`030000003oool0oooo0500oooo00<0o`000?ooo`3oool0BP3o
+ool00`3o0000oooo0?ooo`2`0?ooo`80o`005 at 3oool001H0oooo00<000000?ooo`3oool0C`3oool0
+0`3o0000oooo0?ooo`1:0?ooo`030?l0003oool0oooo0:l0oooo0P3o000G0?ooo`005P3oool00`00
+0000oooo0?ooo`1?0?ooo`030?l0003oool0oooo04T0oooo00<0o`000?ooo`3oool0[P3oool20?l0
+01T0oooo000F0?ooo`030000003oool0oooo04h0oooo00<0o`000?ooo`3oool0B at 3oool00`3o0000
+oooo0?ooo`2]0?ooo`80o`006`3oool001H0oooo00<000000?ooo`3oool0C at 3oool00`3o0000oooo
+0?ooo`190?ooo`030?l0003oool0oooo0:`0oooo0P3o000M0?ooo`005P3oool00`000000oooo0?oo
+o`1=0?ooo`030?l0003oool0oooo04L0oooo0P3o002]0?ooo`80o`007`3oool001H0oooo00<00000
+0?ooo`3oool0C03oool00`3o0000oooo0?ooo`170?ooo`030?l0003oool0oooo0:/0oooo0P3o000Q
+0?ooo`005P3oool00`000000oooo0?ooo`1;0?ooo`030?l0003oool0oooo04L0oooo00<0o`000?oo
+o`3oool0ZP3oool20?l002<0oooo000F0?ooo`030000003oool0oooo04/0oooo00<0o`000?ooo`3o
+ool0AP3oool00`3o0000oooo0?ooo`2Y0?ooo`80o`009 at 3oool001H0oooo00<000000?ooo`3oool0
+BP3oool00`3o0000oooo0?ooo`160?ooo`030?l0003oool0oooo0:P0oooo0P3o000W0?ooo`005P3o
+ool00`000000oooo0?ooo`190?ooo`030?l0003oool0oooo04H0oooo00<0o`000?ooo`3oool0Y`3o
+ool20?l002T0oooo000F0?ooo`030000003oool0oooo04T0oooo00<0o`000?ooo`3oool0A at 3oool0
+0`3o0000oooo0?ooo`2V0?ooo`80o`00:`3oool001H0oooo00<000000?ooo`3oool0B03oool00`3o
+0000oooo0?ooo`140?ooo`80o`00Y`3oool20?l002d0oooo000F0?ooo`030000003oool0oooo04L0
+oooo00<0o`000?ooo`3oool0A03oool00`3o0000oooo0?ooo`2U0?ooo`80o`00;`3oool001H0oooo
+00<000000?ooo`3oool0A`3oool00`3o0000oooo0?ooo`130?ooo`030?l0003oool0oooo0:@0oooo
+0P3o000a0?ooo`00103oool3000000<0oooo00<000000?ooo`3oool00`0000060?ooo`030000003o
+ool0oooo04H0oooo00<0o`000?ooo`3oool0@`3oool00`3o0000oooo0?ooo`2S0?ooo`80o`00<`3o
+ool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`000000
+1 at 3oool00`000000oooo0?ooo`160?ooo`030?l0003oool0oooo0480oooo00<0o`000?ooo`3oool0
+XP3oool20?l003D0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo
+0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0A at 3oool00`3o0000oooo0?ooo`120?ooo`03
+0?l0003oool0oooo0:40oooo0P3o000g0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000D0
+oooo0`0000060?ooo`<00000A03oool00`3o0000oooo0?ooo`120?ooo`030?l0003oool0oooo0:00
+oooo0P3o000i0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3o
+ool0oooo000000050?ooo`030000003oool0oooo04 at 0oooo00<0o`000?ooo`3oool0 at 03oool20?l0
+0:40oooo0P3o000k0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?oo
+o`3oool0oooo000000050?ooo`030000003oool0oooo04<0oooo00<0o`000?ooo`3oool0 at 03oool0
+0`3o0000oooo0?ooo`2O0?ooo`80o`00?@3oool000 at 0oooo0`0000060?ooo`<000001P3oool00`00
+0000oooo0?ooo`130?ooo`030?l0003oool0oooo03l0oooo00<0o`000?ooo`3oool0WP3oool20?l0
+03l0oooo000F0?ooo`030000003oool0oooo0480oooo00<0o`000?ooo`3oool0?`3oool00`3o0000
+oooo0?ooo`2M0?ooo`80o`00@@3oool001H0oooo00<000000?ooo`3oool0@@3oool00`3o0000oooo
+0?ooo`0o0?ooo`030?l0003oool0oooo09`0oooo0P3o00130?ooo`005P3oool00`000000oooo0?oo
+o`110?ooo`030?l0003oool0oooo03h0oooo00<0o`000?ooo`3oool0V`3oool20?l004D0oooo000F
+0?ooo`030000003oool0oooo0400oooo00<0o`000?ooo`3oool0?P3oool00`3o0000oooo0?ooo`2J
+0?ooo`80o`00A`3oool001H0oooo00<000000?ooo`3oool0 at 03oool00`3o0000oooo0?ooo`0m0?oo
+o`030?l0003oool0oooo09T0oooo0P3o00190?ooo`005P3oool00`000000oooo0?ooo`0o0?ooo`03
+0?l0003oool0oooo03d0oooo00<0o`000?ooo`3oool0U`3oool30?l004/0oooo000F0?ooo`030000
+003oool0oooo03h0oooo00<0o`000?ooo`3oool0?@3oool00`3o0000oooo0?ooo`2F0?ooo`80o`00
+CP3oool001H0oooo00<000000?ooo`3oool0?P3oool00`3o0000oooo0?ooo`0k0?ooo`80o`00U`3o
+ool20?l00500oooo000F0?ooo`030000003oool0oooo03d0oooo00<0o`000?ooo`3oool0>`3oool0
+0`3o0000oooo0?ooo`2E0?ooo`80o`00DP3oool001H0oooo00<000000?ooo`3oool0?@3oool00`3o
+0000oooo0?ooo`0j0?ooo`030?l0003oool0oooo09 at 0oooo0P3o001D0?ooo`005P3oool00`000000
+oooo0?ooo`0l0?ooo`030?l0003oool0oooo03X0oooo00<0o`000?ooo`3oool0T`3oool20?l005H0
+oooo000F0?ooo`030000003oool0oooo03/0oooo00<0o`000?ooo`3oool0>P3oool00`3o0000oooo
+0?ooo`2B0?ooo`80o`00F03oool001H0oooo00<000000?ooo`3oool0>`3oool00`3o0000oooo0?oo
+o`0i0?ooo`030?l0003oool0oooo0940oooo0P3o001J0?ooo`005P3oool00`000000oooo0?ooo`0j
+0?ooo`030?l0003oool0oooo03T0oooo00<0o`000?ooo`3oool0T03oool20?l005`0oooo000F0?oo
+o`030000003oool0oooo03X0oooo00<0o`000?ooo`3oool0>03oool00`3o0000oooo0?ooo`2?0?oo
+o`80o`00GP3oool001H0oooo00<000000?ooo`3oool0>@3oool00`3o0000oooo0?ooo`0h0?ooo`03
+0?l0003oool0oooo08h0oooo0P3o001P0?ooo`005P3oool00`000000oooo0?ooo`0h0?ooo`030?l0
+003oool0oooo03P0oooo00<0o`000?ooo`3oool0S at 3oool20?l00680oooo000F0?ooo`030000003o
+ool0oooo03P0oooo00<0o`000?ooo`3oool0=`3oool00`3o0000oooo0?ooo`2<0?ooo`80o`00I03o
+ool001H0oooo00<000000?ooo`3oool0=`3oool00`3o0000oooo0?ooo`0g0?ooo`030?l0003oool0
+oooo08/0oooo0P3o001V0?ooo`005P3oool00`000000oooo0?ooo`0g0?ooo`030?l0003oool0oooo
+03H0oooo00<0o`000?ooo`3oool0RP3oool20?l006P0oooo000F0?ooo`030000003oool0oooo03H0
+oooo00<0o`000?ooo`3oool0=@3oool20?l008`0oooo00<0o`000?ooo`3oool0J03oool001H0oooo
+00<000000?ooo`3oool0=P3oool00`3o0000oooo0?ooo`0d0?ooo`030?l0003oool0oooo08X0oooo
+0P3o001[0?ooo`005P3oool00`000000oooo0?ooo`0e0?ooo`030?l0003oool0oooo03 at 0oooo00<0
+o`000?ooo`3oool0R at 3oool20?l006d0oooo000F0?ooo`030000003oool0oooo03D0oooo00<0o`00
+0?ooo`3oool0<`3oool00`3o0000oooo0?ooo`280?ooo`80o`00K`3oool001H0oooo00<000000?oo
+o`3oool0=03oool00`3o0000oooo0?ooo`0c0?ooo`030?l0003oool0oooo08L0oooo0P3o001a0?oo
+o`005P3oool00`000000oooo0?ooo`0c0?ooo`030?l0003oool0oooo03<0oooo00<0o`000?ooo`3o
+ool0QP3oool20?l007<0oooo000F0?ooo`030000003oool0oooo03<0oooo00<0o`000?ooo`3oool0
+<P3oool00`3o0000oooo0?ooo`250?ooo`80o`00M at 3oool001H0oooo00<000000?ooo`3oool0<P3o
+ool00`3o0000oooo0?ooo`0b0?ooo`030?l0003oool0oooo08<0oooo0`3o001g0?ooo`005P3oool0
+0`000000oooo0?ooo`0b0?ooo`030?l0003oool0oooo0340oooo00<0o`000?ooo`3oool0PP3oool2
+0?l007X0oooo000F0?ooo`030000003oool0oooo0340oooo00<0o`000?ooo`3oool0<@3oool00`3o
+0000oooo0?ooo`210?ooo`80o`00O03oool001H0oooo00<000000?ooo`3oool0<@3oool00`3o0000
+oooo0?ooo`0`0?ooo`030?l0003oool0oooo0800oooo0P3o001n0?ooo`005P3oool00`000000oooo
+0?ooo`0`0?ooo`030?l0003oool0oooo0300oooo00<0o`000?ooo`3oool0O`3oool20?l00800oooo
+000F0?ooo`800000<03oool00`3o0000oooo0?ooo`0`0?ooo`030?l0003oool0oooo07h0oooo0P3o
+00220?ooo`005P3oool00`000000oooo0?ooo`0_0?ooo`030?l0003oool0oooo02l0oooo00<0o`00
+0?ooo`3oool0O at 3oool20?l008 at 0oooo000F0?ooo`030000003oool0oooo02h0oooo00<0o`000?oo
+o`3oool0;`3oool00`3o0000oooo0?ooo`1k0?ooo`<0o`00QP3oool001H0oooo00<000000?ooo`3o
+ool0;P3oool00`3o0000oooo0?ooo`0]0?ooo`80o`00O03oool20?l008T0oooo000F0?ooo`030000
+003oool0oooo02d0oooo00<0o`000?ooo`3oool0;@3oool00`3o0000oooo0?ooo`1j0?ooo`80o`00
+R`3oool001H0oooo00<000000?ooo`3oool0;@3oool00`3o0000oooo0?ooo`0/0?ooo`030?l0003o
+ool0oooo07T0oooo0P3o002=0?ooo`005P3oool00`000000oooo0?ooo`0/0?ooo`030?l0003oool0
+oooo02`0oooo00<0o`000?ooo`3oool0M`3oool30?l008l0oooo000F0?ooo`030000003oool0oooo
+02`0oooo00<0o`000?ooo`3oool0:`3oool00`3o0000oooo0?ooo`1f0?ooo`80o`00TP3oool001H0
+oooo00<000000?ooo`3oool0:`3oool00`3o0000oooo0?ooo`0[0?ooo`030?l0003oool0oooo07D0
+oooo0P3o002D0?ooo`005P3oool00`000000oooo0?ooo`0Z0?ooo`030?l0003oool0oooo02/0oooo
+00<0o`000?ooo`3oool0L`3oool30?l009H0oooo000F0?ooo`030000003oool0oooo02X0oooo00<0
+o`000?ooo`3oool0:P3oool00`3o0000oooo0?ooo`1b0?ooo`80o`00V at 3oool001H0oooo00<00000
+0?ooo`3oool0:@3oool00`3o0000oooo0?ooo`0Z0?ooo`030?l0003oool0oooo0740oooo0P3o002K
+0?ooo`005P3oool00`000000oooo0?ooo`0Y0?ooo`030?l0003oool0oooo02T0oooo00<0o`000?oo
+o`3oool0L03oool20?l009d0oooo000F0?ooo`030000003oool0oooo02P0oooo00<0o`000?ooo`3o
+ool0:@3oool00`3o0000oooo0?ooo`1_0?ooo`80o`00W`3oool001H0oooo00<000000?ooo`3oool0
+:03oool00`3o0000oooo0?ooo`0X0?ooo`030?l0003oool0oooo06h0oooo0P3o002Q0?ooo`005P3o
+ool00`000000oooo0?ooo`0W0?ooo`030?l0003oool0oooo02P0oooo00<0o`000?ooo`3oool0K at 3o
+ool20?l00:<0oooo000F0?ooo`030000003oool0oooo02L0oooo00<0o`000?ooo`3oool09`3oool0
+0`3o0000oooo0?ooo`1/0?ooo`80o`00Y at 3oool001H0oooo00<000000?ooo`3oool09P3oool00`3o
+0000oooo0?ooo`0V0?ooo`80o`00K at 3oool20?l00:L0oooo000F0?ooo`030000003oool0oooo02H0
+oooo00<0o`000?ooo`3oool09 at 3oool00`3o0000oooo0?ooo`1[0?ooo`80o`00Z at 3oool001H0oooo
+00<000000?ooo`3oool09 at 3oool00`3o0000oooo0?ooo`0U0?ooo`030?l0003oool0oooo06X0oooo
+0P3o002[0?ooo`005P3oool00`000000oooo0?ooo`0U0?ooo`030?l0003oool0oooo02 at 0oooo00<0
+o`000?ooo`3oool0J at 3oool20?l00:d0oooo000F0?ooo`030000003oool0oooo02 at 0oooo00<0o`00
+0?ooo`3oool0903oool00`3o0000oooo0?ooo`1X0?ooo`80o`00[`3oool001H0oooo00<000000?oo
+o`3oool0903oool00`3o0000oooo0?ooo`0S0?ooo`030?l0003oool0oooo06L0oooo0P3o002a0?oo
+o`005P3oool00`000000oooo0?ooo`0S0?ooo`030?l0003oool0oooo02<0oooo00<0o`000?ooo`3o
+ool0IP3oool20?l00;<0oooo000F0?ooo`030000003oool0oooo02<0oooo00<0o`000?ooo`3oool0
+8P3oool00`3o0000oooo0?ooo`1U0?ooo`80o`00]@3oool001H0oooo00<000000?ooo`3oool08P3o
+ool00`3o0000oooo0?ooo`0R0?ooo`030?l0003oool0oooo06 at 0oooo0P3o002g0?ooo`005P3oool0
+0`000000oooo0?ooo`0R0?ooo`030?l0003oool0oooo0240oooo00<0o`000?ooo`3oool0H`3oool2
+0?l00;T0oooo000F0?ooo`030000003oool0oooo0240oooo00<0o`000?ooo`3oool08 at 3oool00`3o
+0000oooo0?ooo`1Q0?ooo`<0o`00^`3oool001H0oooo00<000000?ooo`3oool08 at 3oool00`3o0000
+oooo0?ooo`0P0?ooo`030?l0003oool0oooo0600oooo0P3o002n0?ooo`005P3oool00`000000oooo
+0?ooo`0P0?ooo`030?l0003oool0oooo0200oooo00<0o`000?ooo`3oool0G`3oool20?l00<00oooo
+000F0?ooo`030000003oool0oooo0200oooo00<0o`000?ooo`3oool07`3oool00`3o0000oooo0?oo
+o`1M0?ooo`<0o`00`P3oool001H0oooo00<000000?ooo`3oool07`3oool00`3o0000oooo0?ooo`0O
+0?ooo`030?l0003oool0oooo05`0oooo0P3o00350?ooo`005P3oool00`000000oooo0?ooo`0O0?oo
+o`030?l0003oool0oooo01h0oooo00<0o`000?ooo`3oool0F`3oool20?l00<L0oooo000F0?ooo`03
+0000003oool0oooo01h0oooo00<0o`000?ooo`3oool07`3oool00`3o0000oooo0?ooo`1I0?ooo`80
+o`00b at 3oool001H0oooo00<000000?ooo`3oool07P3oool00`3o0000oooo0?ooo`0N0?ooo`030?l0
+003oool0oooo05P0oooo0P3o003;0?ooo`005P3oool00`000000oooo0?ooo`0M0?ooo`030?l0003o
+ool0oooo01h0oooo00<0o`000?ooo`3oool0E`3oool20?l00<d0oooo000F0?ooo`8000007P3oool0
+0`3o0000oooo0?ooo`0M0?ooo`030?l0003oool0oooo05H0oooo0P3o003?0?ooo`005P3oool00`00
+0000oooo0?ooo`0L0?ooo`030?l0003oool0oooo01d0oooo00<0o`000?ooo`3oool0E03oool30?l0
+0=40oooo000F0?ooo`030000003oool0oooo01`0oooo00<0o`000?ooo`3oool0703oool00`3o0000
+oooo0?ooo`1C0?ooo`80o`00e03oool001H0oooo00<000000?ooo`3oool06`3oool00`3o0000oooo
+0?ooo`0L0?ooo`030?l0003oool0oooo0580oooo0P3o003F0?ooo`005P3oool00`000000oooo0?oo
+o`0K0?ooo`030?l0003oool0oooo01/0oooo00<0o`000?ooo`3oool0D at 3oool20?l00=P0oooo000F
+0?ooo`030000003oool0oooo01X0oooo00<0o`000?ooo`3oool06`3oool00`3o0000oooo0?ooo`1?
+0?ooo`<0o`00fP3oool001H0oooo00<000000?ooo`3oool06P3oool00`3o0000oooo0?ooo`0J0?oo
+o`030?l0003oool0oooo04h0oooo0P3o003M0?ooo`005P3oool00`000000oooo0?ooo`0I0?ooo`03
+0?l0003oool0oooo01X0oooo00<0o`000?ooo`3oool0C at 3oool20?l00=l0oooo000F0?ooo`030000
+003oool0oooo01T0oooo00<0o`000?ooo`3oool06 at 3oool00`3o0000oooo0?ooo`1<0?ooo`80o`00
+h at 3oool001H0oooo00<000000?ooo`3oool0603oool00`3o0000oooo0?ooo`0I0?ooo`030?l0003o
+ool0oooo04/0oooo0P3o003S0?ooo`005P3oool00`000000oooo0?ooo`0H0?ooo`030?l0003oool0
+oooo01P0oooo00<0o`000?ooo`3oool0BP3oool20?l00>D0oooo000F0?ooo`030000003oool0oooo
+01L0oooo00<0o`000?ooo`3oool0603oool00`3o0000oooo0?ooo`190?ooo`80o`00i03oool30?l0
+00005P3oool00`000000oooo0?ooo`0G0?ooo`030?l0003oool0oooo01L0oooo00<0o`000?ooo`3o
+ool0B03oool20?l00>40oooo1 at 3o00030?ooo`005P3oool00`000000oooo0?ooo`0F0?ooo`030?l0
+003oool0oooo01L0oooo00<0o`000?ooo`3oool0A`3oool20?l00=h0oooo1 at 3o00080?ooo`005P3o
+ool00`000000oooo0?ooo`0F0?ooo`030?l0003oool0oooo01H0oooo00<0o`000?ooo`3oool0AP3o
+ool20?l00=/0oooo1 at 3o000=0?ooo`005P3oool00`000000oooo0?ooo`0E0?ooo`030?l0003oool0
+oooo01H0oooo00<0o`000?ooo`3oool0A03oool30?l00=P0oooo1 at 3o000B0?ooo`005P3oool00`00
+0000oooo0?ooo`0E0?ooo`030?l0003oool0oooo01D0oooo00<0o`000?ooo`3oool0@`3oool20?l0
+0=H0oooo1 at 3o000G0?ooo`005P3oool00`000000oooo0?ooo`0D0?ooo`030?l0003oool0oooo01D0
+oooo00<0o`000?ooo`3oool0 at P3oool20?l00=<0oooo1 at 3o000L0?ooo`005P3oool00`000000oooo
+0?ooo`0D0?ooo`030?l0003oool0oooo01 at 0oooo00<0o`000?ooo`3oool0@@3oool20?l00=00oooo
+1 at 3o000Q0?ooo`005P3oool00`000000oooo0?ooo`0C0?ooo`030?l0003oool0oooo01 at 0oooo00<0
+o`000?ooo`3oool0 at 03oool20?l00<d0oooo1 at 3o000V0?ooo`005P3oool00`000000oooo0?ooo`0C
+0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?ooo`3oool0?`3oool20?l00<X0oooo1 at 3o000[
+0?ooo`005P3oool00`000000oooo0?ooo`0B0?ooo`030?l0003oool0oooo01<0oooo00<0o`000?oo
+o`3oool0?P3oool20?l00<L0oooo1 at 3o000`0?ooo`005P3oool00`000000oooo0?ooo`0B0?ooo`03
+0?l0003oool0oooo0180oooo00<0o`000?ooo`3oool0?03oool30?l00<@0oooo1 at 3o000e0?ooo`00
+5P3oool00`000000oooo0?ooo`0A0?ooo`030?l0003oool0oooo0180oooo00<0o`000?ooo`3oool0
+>`3oool20?l00<80oooo1 at 3o000j0?ooo`005P3oool00`000000oooo0?ooo`0A0?ooo`030?l0003o
+ool0oooo0140oooo00<0o`000?ooo`3oool0>P3oool20?l00;l0oooo1 at 3o000o0?ooo`005P3oool0
+0`000000oooo0?ooo`0 at 0?ooo`030?l0003oool0oooo0140oooo00<0o`000?ooo`3oool0>@3oool2
+0?l00;/0oooo1P3o00140?ooo`005P3oool00`000000oooo0?ooo`0 at 0?ooo`030?l0003oool0oooo
+0100oooo00<0o`000?ooo`3oool0=`3oool30?l00;P0oooo1 at 3o001:0?ooo`005P3oool00`000000
+oooo0?ooo`0?0?ooo`030?l0003oool0oooo0140oooo00<0o`000?ooo`3oool0=@3oool20?l00;H0
+oooo1 at 3o001?0?ooo`005P3oool00`000000oooo0?ooo`0?0?ooo`030?l0003oool0oooo0100oooo
+00<0o`000?ooo`3oool0=03oool20?l00;<0oooo1 at 3o001D0?ooo`005P3oool00`000000oooo0?oo
+o`0>0?ooo`030?l0003oool0oooo0100oooo00<0o`000?ooo`3oool0<P3oool30?l00;00oooo1 at 3o
+001I0?ooo`005P3oool00`000000oooo0?ooo`0>0?ooo`030?l0003oool0oooo00l0oooo00<0o`00
+0?ooo`3oool0<@3oool20?l00:h0oooo1 at 3o001N0?ooo`005P3oool00`000000oooo0?ooo`0=0?oo
+o`030?l0003oool0oooo00l0oooo00<0o`000?ooo`3oool0<03oool20?l00:/0oooo1 at 3o001S0?oo
+o`005P3oool00`000000oooo0?ooo`0=0?ooo`030?l0003oool0oooo00h0oooo00<0o`000?ooo`3o
+ool0;`3oool20?l00:P0oooo1 at 3o001X0?ooo`005P3oool00`000000oooo0?ooo`0<0?ooo`030?l0
+003oool0oooo00h0oooo00<0o`000?ooo`3oool0;P3oool20?l00:H0oooo103o001]0?ooo`005P3o
+ool00`000000oooo0?ooo`0<0?ooo`030?l0003oool0oooo00d0oooo00<0o`000?ooo`3oool0;@3o
+ool20?l00:<0oooo1 at 3o001a0?ooo`005P3oool00`000000oooo0?ooo`0<0?ooo`030?l0003oool0
+oooo00`0oooo00<0o`000?ooo`3oool0;03oool20?l009l0oooo1P3o001f0?ooo`005P3oool20000
+00`0oooo00<0o`000?ooo`3oool0303oool00`3o0000oooo0?ooo`0Z0?ooo`<0o`00V at 3oool80?l0
+07`0oooo000F0?ooo`030000003oool0oooo00/0oooo00<0o`000?ooo`3oool02`3oool00`3o0000
+oooo0?ooo`0Y0?ooo`80o`00UP3oool60?l008 at 0oooo000F0?ooo`030000003oool0oooo00X0oooo
+00<0o`000?ooo`3oool0303oool00`3o0000oooo0?ooo`0W0?ooo`80o`00T`3oool50?l008X0oooo
+000F0?ooo`030000003oool0oooo00X0oooo00<0o`000?ooo`3oool02`3oool00`3o0000oooo0?oo
+o`0V0?ooo`80o`00S`3oool60?l008l0oooo000F0?ooo`030000003oool0oooo00X0oooo00<0o`00
+0?ooo`3oool02P3oool00`3o0000oooo0?ooo`0U0?ooo`80o`00R`3oool60?l009D0oooo000F0?oo
+o`030000003oool0oooo00T0oooo00<0o`000?ooo`3oool02P3oool00`3o0000oooo0?ooo`0T0?oo
+o`80o`00Q at 3oool80?l009/0oooo000F0?ooo`030000003oool0oooo00T0oooo00<0o`000?ooo`3o
+ool02 at 3oool00`3o0000oooo0?ooo`0S0?ooo`80o`00P at 3oool60?l00:<0oooo000F0?ooo`030000
+003oool0oooo00P0oooo00<0o`000?ooo`3oool02 at 3oool00`3o0000oooo0?ooo`0R0?ooo`80o`00
+OP3oool50?l00:T0oooo000F0?ooo`030000003oool0oooo00P0oooo00<0o`000?ooo`3oool02 at 3o
+ool00`3o0000oooo0?ooo`0P0?ooo`80o`00N`3oool50?l00:h0oooo000F0?ooo`030000003oool0
+oooo00P0oooo00<0o`000?ooo`3oool0203oool00`3o0000oooo0?ooo`0O0?ooo`80o`00M`3oool6
+0?l00;<0oooo000F0?ooo`030000003oool0oooo00L0oooo00<0o`000?ooo`3oool0203oool00`3o
+0000oooo0?ooo`0N0?ooo`80o`00LP3oool70?l00;T0oooo000F0?ooo`030000003oool0oooo00L0
+oooo00<0o`000?ooo`3oool01`3oool00`3o0000oooo0?ooo`0M0?ooo`80o`00KP3oool60?l00<00
+oooo000F0?ooo`030000003oool0oooo00H0oooo00<0o`000?ooo`3oool01`3oool00`3o0000oooo
+0?ooo`0L0?ooo`80o`00J`3oool50?l00<H0oooo000F0?ooo`030000003oool0oooo00H0oooo00<0
+o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`0K0?ooo`80o`00J03oool50?l00</0oooo000F
+0?ooo`030000003oool0oooo00H0oooo00<0o`000?ooo`3oool01P3oool00`3o0000oooo0?ooo`0H
+0?ooo`<0o`00I03oool60?l00=00oooo000F0?ooo`030000003oool0oooo00D0oooo00<0o`000?oo
+o`3oool01P3oool00`3o0000oooo0?ooo`0G0?ooo`80o`00G`3oool80?l00=H0oooo000F0?ooo`03
+0000003oool0oooo00D0oooo00<0o`000?ooo`3oool01 at 3oool00`3o0000oooo0?ooo`0E0?ooo`<0
+o`00F at 3oool80?l00=h0oooo000F0?ooo`030000003oool0oooo00 at 0oooo00<0o`000?ooo`3oool0
+1 at 3oool00`3o0000oooo0?ooo`0D0?ooo`80o`00E at 3oool70?l00>H0oooo000F0?ooo`030000003o
+ool0oooo00 at 0oooo00<0o`000?ooo`3oool0103oool00`3o0000oooo0?ooo`0B0?ooo`<0o`00D at 3o
+ool60?l00>d0oooo000F0?ooo`030000003oool0oooo00 at 0oooo00<0o`000?ooo`3oool00`3oool0
+0`3o0000oooo0?ooo`0A0?ooo`80o`00C`3oool50?l00>/0oooo203o000001H0oooo00<000000?oo
+o`3oool00`3oool00`3o0000oooo0?ooo`040?ooo`030?l0003oool0oooo00l0oooo0P3o001<0?oo
+o`D0o`00h at 3oool?0?l000P0oooo000F0?ooo`030000003oool0oooo00<0oooo00<0o`000?ooo`3o
+ool00`3oool00`3o0000oooo0?ooo`0>0?ooo`80o`00B03oool60?l00=L0oooo3`3o000G0?ooo`00
+5P3oool00`000000oooo0?ooo`030?ooo`030?l0003oool0oooo0080oooo00<0o`000?ooo`3oool0
+3 at 3oool20?l00480oooo203o003>0?ooo`l0o`009P3oool001H0oooo00<000000?ooo`3oool00P3o
+ool00`3o0000oooo0?ooo`020?ooo`030?l0003oool0oooo00`0oooo0P3o000l0?ooo`P0o`00]`3o
+oolO0?l003D0oooo000F0?ooo`030000003oool0oooo0080oooo00D0o`000?ooo`3oool0oooo0?l0
+000=0?ooo`80o`00=P3oool80?l00;00oooo3`3o001D0?ooo`005P3oool01 at 000000oooo0?ooo`3o
+ool0o`0000 at 0oooo00<0o`000?ooo`3oool02 at 3oool20?l00340oooo1`3o002Z0?ooo`h0o`00H`3o
+ool001H0oooo00D000000?ooo`3oool0oooo0?l000030?ooo`030?l0003oool0oooo00P0oooo0P3o
+000[0?ooo`P0o`00XP3oool?0?l00740oooo000F0?ooo`050000003oool0oooo0?ooo`3o00000P3o
+ool00`3o0000oooo0?ooo`070?ooo`80o`009P3oool70?l008/0oooo7`3o00200?ooo`005P3oool0
+10000000oooo0?ooo`3o00020?ooo`030?l0003oool0oooo00H0oooo0P3o000Q0?ooo`L0o`00P`3o
+ool?0?l009l0oooo000F0?ooo`040000003oool0oooo0?l00080oooo00<0o`000?ooo`3oool0103o
+ool20?l001`0oooo1`3o001]0?oooad0o`00[P3oool001H0oooo00<000000?ooo`3o00000P3oool0
+0`3o0000oooo0?ooo`030?ooo`80o`005P3oool80?l006D0oooo3`3o003;0?ooo`005P3oool01 at 00
+0000oooo0?l0003oool0o`0000 at 0oooo0P3o000B0?ooo`H0o`00C`3ooolN0?l00=X0oooo000F0?oo
+o`040000003oool0o`000?l000<0oooo0P3o000?0?ooo`D0o`00AP3oool?0?l00<<0oooo=@3o0000
+00l0oooo00<000000?ooo`3oool0103oool00`000000o`000?l000020?ooo`80o`002`3oool60?l0
+02`0oooo7`3o00270?oood/0o`00=@3oool000l0oooo00<000000?ooo`3oool0103oool00`000000
+o`000?l000020?l000L0oooo1P3o000E0?oooad0o`00C03ooomJ0?l00800oooo000?0?ooo`030000
+003oool0oooo00 at 0oooo0`3o00000`3oool0o`000?l0000Q0?l000l0ooooFP3o000/0?ooojh0o`00
+000?0?ooo`030000003oool0oooo00 at 0ooooo`3o001[0?l000003 at 3oool00`000000oooo0000003o
+0?ooog40oooo000>0?ooo`800000o`3oooma0?ooo`003`3oool00`000000oooo0?ooo`3o0?ooofl0
+oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40
+oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40
+oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40oooo003o0?oooh40
+oooo0000\
+\>"],
+  ImageRangeCache->{{{0, 383}, {767, 0}} -> {-0.482669, -0.0381603, 0.0214444,
+   0.001387}}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(Plot[{ycbcrstsbync[f, 0], ycbcrstsbync[f, 1], ycbcrstsbync[f, 2], 
+        ycbcrstsbync[f, 4], ycbcrstsbync[f, 8], ycbcrstsbync[f, 16], 
+        ycbcrstsbync[f, 32], ycbcrstsbync[f, 64]}, {f, 0, fmaxcrtc}, 
+      PlotRange -> {{0, fmaxcrtc}, {0, 1}}, AspectRatio -> 2, 
+      PlotStyle -> {{RGBColor[0, 0, 1]}}]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 2 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.129358 0 2 [
+[.12936 -0.0125 -3 -9 ]
+[.12936 -0.0125 3 0 ]
+[.25872 -0.0125 -3 -9 ]
+[.25872 -0.0125 3 0 ]
+[.38807 -0.0125 -3 -9 ]
+[.38807 -0.0125 3 0 ]
+[.51743 -0.0125 -3 -9 ]
+[.51743 -0.0125 3 0 ]
+[.64679 -0.0125 -3 -9 ]
+[.64679 -0.0125 3 0 ]
+[.77615 -0.0125 -3 -9 ]
+[.77615 -0.0125 3 0 ]
+[.9055 -0.0125 -3 -9 ]
+[.9055 -0.0125 3 0 ]
+[-0.0125 .4 -18 -4.5 ]
+[-0.0125 .4 0 4.5 ]
+[-0.0125 .8 -18 -4.5 ]
+[-0.0125 .8 0 4.5 ]
+[-0.0125 1.2 -18 -4.5 ]
+[-0.0125 1.2 0 4.5 ]
+[-0.0125 1.6 -18 -4.5 ]
+[-0.0125 1.6 0 4.5 ]
+[-0.0125 2 -6 -4.5 ]
+[-0.0125 2 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 2 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.12936 0 m
+.12936 .00625 L
+s
+[(1)] .12936 -0.0125 0 1 Mshowa
+.25872 0 m
+.25872 .00625 L
+s
+[(2)] .25872 -0.0125 0 1 Mshowa
+.38807 0 m
+.38807 .00625 L
+s
+[(3)] .38807 -0.0125 0 1 Mshowa
+.51743 0 m
+.51743 .00625 L
+s
+[(4)] .51743 -0.0125 0 1 Mshowa
+.64679 0 m
+.64679 .00625 L
+s
+[(5)] .64679 -0.0125 0 1 Mshowa
+.77615 0 m
+.77615 .00625 L
+s
+[(6)] .77615 -0.0125 0 1 Mshowa
+.9055 0 m
+.9055 .00625 L
+s
+[(7)] .9055 -0.0125 0 1 Mshowa
+.125 Mabswid
+.02587 0 m
+.02587 .00375 L
+s
+.05174 0 m
+.05174 .00375 L
+s
+.07761 0 m
+.07761 .00375 L
+s
+.10349 0 m
+.10349 .00375 L
+s
+.15523 0 m
+.15523 .00375 L
+s
+.1811 0 m
+.1811 .00375 L
+s
+.20697 0 m
+.20697 .00375 L
+s
+.23284 0 m
+.23284 .00375 L
+s
+.28459 0 m
+.28459 .00375 L
+s
+.31046 0 m
+.31046 .00375 L
+s
+.33633 0 m
+.33633 .00375 L
+s
+.3622 0 m
+.3622 .00375 L
+s
+.41395 0 m
+.41395 .00375 L
+s
+.43982 0 m
+.43982 .00375 L
+s
+.46569 0 m
+.46569 .00375 L
+s
+.49156 0 m
+.49156 .00375 L
+s
+.5433 0 m
+.5433 .00375 L
+s
+.56917 0 m
+.56917 .00375 L
+s
+.59505 0 m
+.59505 .00375 L
+s
+.62092 0 m
+.62092 .00375 L
+s
+.67266 0 m
+.67266 .00375 L
+s
+.69853 0 m
+.69853 .00375 L
+s
+.7244 0 m
+.7244 .00375 L
+s
+.75028 0 m
+.75028 .00375 L
+s
+.80202 0 m
+.80202 .00375 L
+s
+.82789 0 m
+.82789 .00375 L
+s
+.85376 0 m
+.85376 .00375 L
+s
+.87963 0 m
+.87963 .00375 L
+s
+.93138 0 m
+.93138 .00375 L
+s
+.95725 0 m
+.95725 .00375 L
+s
+.98312 0 m
+.98312 .00375 L
+s
+.25 Mabswid
+0 0 m
+1 0 L
+s
+0 .4 m
+.00625 .4 L
+s
+[(0.2)] -0.0125 .4 1 0 Mshowa
+0 .8 m
+.00625 .8 L
+s
+[(0.4)] -0.0125 .8 1 0 Mshowa
+0 1.2 m
+.00625 1.2 L
+s
+[(0.6)] -0.0125 1.2 1 0 Mshowa
+0 1.6 m
+.00625 1.6 L
+s
+[(0.8)] -0.0125 1.6 1 0 Mshowa
+0 2 m
+.00625 2 L
+s
+[(1)] -0.0125 2 1 0 Mshowa
+.125 Mabswid
+0 .1 m
+.00375 .1 L
+s
+0 .2 m
+.00375 .2 L
+s
+0 .3 m
+.00375 .3 L
+s
+0 .5 m
+.00375 .5 L
+s
+0 .6 m
+.00375 .6 L
+s
+0 .7 m
+.00375 .7 L
+s
+0 .9 m
+.00375 .9 L
+s
+0 1 m
+.00375 1 L
+s
+0 1.1 m
+.00375 1.1 L
+s
+0 1.3 m
+.00375 1.3 L
+s
+0 1.4 m
+.00375 1.4 L
+s
+0 1.5 m
+.00375 1.5 L
+s
+0 1.7 m
+.00375 1.7 L
+s
+0 1.8 m
+.00375 1.8 L
+s
+0 1.9 m
+.00375 1.9 L
+s
+.25 Mabswid
+0 0 m
+0 2 L
+s
+0 0 m
+1 0 L
+1 2 L
+0 2 L
+closepath
+clip
+newpath
+0 0 1 r
+.5 Mabswid
+0 2 m
+.04057 1.86129 L
+.08481 1.73945 L
+.12636 1.63773 L
+.16632 1.54843 L
+.20885 1.46087 L
+.2498 1.38282 L
+.29331 1.3057 L
+.33524 1.23646 L
+.37557 1.17407 L
+.41848 1.11183 L
+.4598 1.05557 L
+.49953 1.00461 L
+.54183 .95345 L
+.58254 .90703 L
+.62583 .86048 L
+.66752 .81818 L
+.70762 .77969 L
+.7503 .74094 L
+.79139 .70565 L
+.83505 .67017 L
+.87712 .63783 L
+.9176 .60833 L
+.96065 .57858 L
+1 .55277 L
+s
+0 2 m
+.04057 1.92815 L
+.08481 1.86065 L
+.12636 1.80083 L
+.16632 1.74548 L
+.20885 1.68844 L
+.2498 1.63511 L
+.29331 1.57994 L
+.33524 1.52816 L
+.37557 1.47958 L
+.41848 1.42917 L
+.4598 1.38183 L
+.49953 1.33742 L
+.54183 1.29131 L
+.58254 1.24805 L
+.62583 1.20327 L
+.66752 1.16129 L
+.70762 1.12198 L
+.7503 1.08129 L
+.79139 1.04322 L
+.83505 1.00393 L
+.87712 .9672 L
+.9176 .9329 L
+.96065 .89751 L
+1 .86615 L
+s
+0 2 m
+.04057 1.97063 L
+.08481 1.94183 L
+.12636 1.91527 L
+.16632 1.88978 L
+.20885 1.86253 L
+.2498 1.8361 L
+.29331 1.80775 L
+.33524 1.78015 L
+.37557 1.75332 L
+.41848 1.72448 L
+.4598 1.69644 L
+.49953 1.66922 L
+.54183 1.63998 L
+.58254 1.61161 L
+.62583 1.58121 L
+.66752 1.55173 L
+.70762 1.5232 L
+.7503 1.4927 L
+.79139 1.46321 L
+.83505 1.43178 L
+.87712 1.40142 L
+.9176 1.37217 L
+.96065 1.34106 L
+1 1.31265 L
+s
+0 2 m
+.04057 1.99127 L
+.08481 1.98253 L
+.12636 1.97431 L
+.16632 1.96627 L
+.20885 1.95751 L
+.2498 1.94883 L
+.29331 1.93934 L
+.33524 1.9299 L
+.37557 1.92053 L
+.41848 1.91024 L
+.4598 1.9 L
+.49953 1.88985 L
+.54183 1.8787 L
+.58254 1.86762 L
+.62583 1.85546 L
+.66752 1.84337 L
+.70762 1.83139 L
+.7503 1.81825 L
+.79139 1.80522 L
+.83505 1.79095 L
+.87712 1.77679 L
+.9176 1.76278 L
+.96065 1.74746 L
+1 1.73309 L
+s
+0 2 m
+.04057 1.99771 L
+.08481 1.9954 L
+.12636 1.99322 L
+.16632 1.99107 L
+.20885 1.98871 L
+.2498 1.98636 L
+.29331 1.98377 L
+.33524 1.98118 L
+.37557 1.97859 L
+.41848 1.97572 L
+.4598 1.97284 L
+.49953 1.96997 L
+.54183 1.96679 L
+.58254 1.9636 L
+.62583 1.96007 L
+.66752 1.95652 L
+.70762 1.95298 L
+.7503 1.94905 L
+.79139 1.94511 L
+.83505 1.94075 L
+.87712 1.93638 L
+.9176 1.932 L
+.96065 1.92716 L
+1 1.92256 L
+s
+0 2 m
+.04057 1.99942 L
+.08481 1.99883 L
+.12636 1.99828 L
+.16632 1.99773 L
+.20885 1.99713 L
+.2498 1.99653 L
+.29331 1.99587 L
+.33524 1.99521 L
+.37557 1.99454 L
+.41848 1.9938 L
+.4598 1.99306 L
+.49953 1.99232 L
+.54183 1.99149 L
+.58254 1.99067 L
+.62583 1.98975 L
+.66752 1.98882 L
+.70762 1.98789 L
+.7503 1.98686 L
+.79139 1.98583 L
+.83505 1.98468 L
+.87712 1.98352 L
+.9176 1.98235 L
+.96065 1.98106 L
+1 1.97983 L
+s
+0 2 m
+.04057 1.99985 L
+.08481 1.99971 L
+.12636 1.99957 L
+.16632 1.99943 L
+.20885 1.99928 L
+.2498 1.99913 L
+.29331 1.99896 L
+.33524 1.9988 L
+.37557 1.99863 L
+.41848 1.99844 L
+.4598 1.99826 L
+.49953 1.99807 L
+.54183 1.99786 L
+.58254 1.99765 L
+.62583 1.99742 L
+.66752 1.99719 L
+.70762 1.99695 L
+.7503 1.99669 L
+.79139 1.99643 L
+.83505 1.99614 L
+.87712 1.99584 L
+.9176 1.99555 L
+.96065 1.99522 L
+1 1.9949 L
+s
+0 2 m
+.04057 1.99996 L
+.08481 1.99993 L
+.12636 1.99989 L
+.16632 1.99986 L
+.20885 1.99982 L
+.2498 1.99978 L
+.29331 1.99974 L
+.33524 1.9997 L
+.37557 1.99966 L
+.41848 1.99961 L
+.4598 1.99956 L
+.49953 1.99952 L
+.54183 1.99946 L
+.58254 1.99941 L
+.62583 1.99935 L
+.66752 1.9993 L
+.70762 1.99924 L
+.7503 1.99917 L
+.79139 1.9991 L
+.83505 1.99903 L
+.87712 1.99896 L
+.9176 1.99888 L
+.96065 1.9988 L
+1 1.99872 L
+s
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{387, 774},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40006300031R000`400?l00000o`00003oo`3ooon4
+0?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon4
+0?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon4
+0?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00o`3ooon40?ooo`00A at 3oool0
+0`000000oooo0?ooo`0Y0?ooo`D00000:`3oool3000002l0oooo00<000000?ooo`3oool0:@3oool3
+000002`0oooo0`00000/0?ooo`030000003oool0oooo02<0oooo00150?ooo`030000003oool0oooo
+02X0oooo00<000000?ooo`3oool0:`3oool01 at 000000oooo0?ooo`3oool0000002h0oooo00<00000
+0?ooo`3oool0:03oool01 at 000000oooo0?ooo`3oool0000002X0oooo00D000000?ooo`3oool0oooo
+0000000[0?ooo`030000003oool0oooo02<0oooo00150?ooo`030000003oool0oooo02/0oooo00<0
+00000?ooo`3oool0;P3oool00`000000oooo0?ooo`0X0?ooo`H00000;@3oool00`000000oooo0?oo
+o`0X0?ooo`050000003oool0oooo0?ooo`000000;03oool00`000000oooo0?ooo`0R0?ooo`00A at 3o
+ool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02/0oooo0P00000[0?ooo`050000003o
+ool0oooo0?ooo`000000:P3oool01 at 000000oooo0?ooo`3oool0000002X0oooo00D000000?ooo`3o
+ool0oooo0000000/0?ooo`030000003oool0oooo0280oooo00130?ooo`030000003oool0000002l0
+oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`0Y0?ooo`040000003oool0oooo0000
+02X0oooo1000000[0?ooo`@00000;P3oool00`000000oooo0?ooo`0Q0?ooo`00A03oool2000002/0
+oooo00D000000?ooo`3oool0oooo0000000Z0?ooo`050000003oool0oooo0?ooo`000000;03oool0
+0`000000oooo0000000[0?ooo`030000003oool0oooo02/0oooo00D000000?ooo`3oool0oooo0000
+000]0?ooo`030000003oool0oooo0240oooo00150?ooo`030000003oool0oooo02X0oooo0`00000/
+0?ooo`<00000;P3oool2000002/0oooo1000000[0?ooo`<00000:`3oool500000280oooo003o0?oo
+oh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oo
+oh at 0oooo000F0?ooool00000KP00000001H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01`3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01`3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01`3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01`3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool01`3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00L0oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`060?ooo`030000003oool0oooo00D0oooo000F0?ooo`030000003oool0oooo02`0oooo00<0
+00000?ooo`3oool0;03oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02`0oooo00<0
+00000?ooo`3oool0;03oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02`0oooo00<0
+00000?ooo`3oool08 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo
+00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3o
+ool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo
+00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3o
+ool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo
+0P00003o0?ooof`0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3o
+oom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3o
+oom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`800000o`3ooom/0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo
+00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3o
+ool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo
+00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+J`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3o
+ool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003o
+ool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo
+00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo0P00003o0?ooof`0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3o
+oom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0
+oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3o
+oom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`03
+0000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooof/0oooo00040?ooo`<000000`3oool00`000000oooo00000004
+000000D0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0
+000000D0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`3o0?ooof/0oooo00030?oo
+o`050000003oool0oooo0?ooo`0000001P3oool00`000000oooo0?ooo`050?ooo`<00000o`3ooom[
+0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0103oool0
+0`000000oooo0?ooo`3o0?ooof/0oooo00030?ooo`050000003oool0oooo0?ooo`000000203oool0
+0`000000oooo0?ooo`030?ooo`030000003oool0oooo0?l0ooooJ`3oool000<0oooo00D000000?oo
+o`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?oo
+o`3o0?ooof/0oooo00040?ooo`<000001P3oool3000000H0oooo00<000000?ooo`3oool0o`3ooom[
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?oo
+o`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0
+oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?oo
+o`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?oo
+o`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000
+003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0
+oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0
+ooooJ`3oool001H0oooo0P00003o0?ooof`0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3o
+ool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+of/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0
+o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000
+oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<0
+00000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?oo
+o`030000003oool0oooo0?l0ooooJ`3oool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooof/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJ`3o
+ool001H0oooo00<000000?ooo`3oool0o`3ooom[0?ooo`005P3oool00`000000oooo0?ooo`3o0?oo
+of/0oooo000F0?ooo`030000003oool0oooo0?l0ooooJP3oool10000o`005P3oool00`000000oooo
+0?ooo`3o0?ooofP0oooo0P000?l10?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofH0oooo0P00
+0?l30?ooo`005P3oool00`000000oooo0?ooo`3o0?ooofD0oooo00<0003o0?ooo`3oool00`3oool0
+01H0oooo00<000000?ooo`3oool0o`3ooomS0?ooo`80003o1P3oool001H0oooo00<000000?ooo`3o
+ool0o`3ooomQ0?ooo`80003o203oool001H0oooo00<000000?ooo`3oool0o`3ooomP0?ooo`030000
+o`3oool0oooo00P0oooo000F0?ooo`030000003oool0oooo0?l0ooooGP3oool20000o`/0oooo000F
+0?ooo`030000003oool0oooo0?l0ooooG03oool20000o`d0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooF`3oool00`000?l0oooo0?ooo`0=0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooeT0
+oooo0P000?l at 0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooeP0oooo00<0003o0?ooo`3oool0
+403oool001H0oooo00<000000?ooo`3oool0o`3ooomG0?ooo`030000o`3oool0oooo0140oooo000F
+0?ooo`030000003oool0oooo0?l0ooooE at 3oool20000oa@0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooE03oool00`000?l0oooo0?ooo`0D0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooe<0
+oooo00<0003o0?ooo`3oool05 at 3oool001H0oooo00<000000?ooo`3oool0o`3ooomA0?ooo`80003o
+603oool001H0oooo0P00003o0?oooe40oooo00<0003o0?ooo`3oool0603oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom?0?ooo`030000o`3oool0oooo01T0oooo000F0?ooo`030000003oool0oooo
+0?l0ooooC at 3oool20000oa`0oooo000F0?ooo`030000003oool0oooo0?l0ooooC03oool00`000?l0
+oooo0?ooo`0L0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooodX0oooo0P000?lO0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooodT0oooo00<0003o0?ooo`3oool07`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom80?ooo`030000o`3oool0oooo0200oooo000F0?ooo`030000003oool0oooo
+0?l0ooooAP3oool20000ob<0oooo000F0?ooo`030000003oool0oooo0?l0ooooA at 3oool00`000?l0
+oooo0?ooo`0S0?ooo`005P3oool00`000000oooo0?ooo`3o0?oood at 0oooo00<0003o0?ooo`3oool0
+903oool001H0oooo00<000000?ooo`3oool0o`3ooom20?ooo`80003o9`3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooom10?ooo`030000o`3oool0oooo02L0oooo000F0?ooo`030000003oool0oooo
+0?l0oooo at 03oool00`000?l0oooo0?ooo`0X0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooch0
+oooo0P000?l[0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooocd0oooo00<0003o0?ooo`3oool0
+:`3oool001H0oooo00<000000?ooo`3oool0o`3oooll0?ooo`030000o`3oool0oooo02`0oooo000F
+0?ooo`030000003oool0oooo0?l0oooo>P3oool20000obl0oooo000F0?ooo`030000003oool0oooo
+0?l0oooo>@3oool00`000?l0oooo0?ooo`0_0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooocP0
+oooo00<0003o0?ooo`3oool0<03oool001H0oooo00<000000?ooo`3oool0o`3ooolg0?ooo`030000
+o`3oool0oooo0340oooo000F0?ooo`030000003oool0oooo0?l0oooo=@3oool20000oc at 0oooo000F
+0?ooo`030000003oool0oooo0?l0oooo=03oool00`000?l0oooo0?ooo`0d0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?oooc<0oooo00<0003o0?ooo`3oool0=@3oool001H0oooo00<000000?ooo`3o
+ool0o`3ooolb0?ooo`030000o`3oool0oooo03H0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+<03oool20000ocT0oooo000F0?ooo`030000003oool0oooo0?l0oooo;`3oool00`000?l0oooo0?oo
+o`0i0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooobh0oooo00<0003o0?ooo`3oool0>P3oool0
+01H0oooo00<000000?ooo`3oool0o`3oool]0?ooo`030000o`3oool0oooo03/0oooo000F0?ooo`03
+0000003oool0oooo0?l0oooo:`3oool20000och0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+:P3oool00`000?l0oooo0?ooo`0n0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooobT0oooo00<0
+003o0?ooo`3oool0?`3oool001H0oooo00<000000?ooo`3oool0o`3ooolX0?ooo`030000o`3oool0
+oooo0400oooo000F0?ooo`030000003oool0oooo0?l0oooo9`3oool00`000?l0oooo0?ooo`110?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooobD0oooo0P000?m40?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooob at 0oooo00<0003o0?ooo`3oool0A03oool001H0oooo00<000000?ooo`3oool0o`3o
+oolS0?ooo`030000o`3oool0oooo04D0oooo000F0?ooo`800000o`3ooolS0?ooo`030000o`3oool0
+oooo04H0oooo000F0?ooo`030000003oool0oooo0?l0oooo803oool20000odT0oooo000F0?ooo`03
+0000003oool0oooo0?l0oooo7`3oool00`000?l0oooo0?ooo`190?ooo`005P3oool00`000000oooo
+0?ooo`3o0?oooah0oooo00<0003o0?ooo`3oool0BP3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolM0?ooo`030000o`3oool0oooo04/0oooo000F0?ooo`030000003oool0oooo0?l0oooo6`3oool2
+0000odh0oooo000F0?ooo`030000003oool0oooo0?l0oooo6P3oool00`000?l0oooo0?ooo`1>0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?oooaT0oooo00<0003o0?ooo`3oool0C`3oool001H0oooo
+00<000000?ooo`3oool0o`3ooolH0?ooo`030000o`3oool0oooo0500oooo000F0?ooo`030000003o
+ool0oooo0?l0oooo5P3oool20000oe<0oooo000F0?ooo`030000003oool0oooo0?l0oooo5 at 3oool0
+0`000?l0oooo0?ooo`1C0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa at 0oooo00<0003o0?oo
+o`3oool0E03oool001H0oooo00<000000?ooo`3oool0o`3ooolC0?ooo`030000o`3oool0oooo05D0
+oooo000F0?ooo`030000003oool0oooo0?l0oooo4 at 3oool20000oeP0oooo000F0?ooo`030000003o
+ool0oooo0?l0oooo403oool00`000?l0oooo0?ooo`1H0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooo`l0oooo00<0003o0?ooo`3oool0F at 3oool001H0oooo00<000000?ooo`3oool0o`3oool>0?oo
+o`030000o`3oool0oooo05X0oooo000F0?ooo`030000003oool0oooo0?l0oooo3 at 3oool00`000?l0
+oooo0?ooo`1K0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo``0oooo00<0003o0?ooo`3oool0
+G03oool001H0oooo00<000000?ooo`3oool0o`3oool:0?ooo`80003oG`3oool001H0oooo00<00000
+0?ooo`3oool0o`3oool90?ooo`030000o`3oool0oooo05l0oooo000F0?ooo`030000003oool0oooo
+0?l0oooo203oool00`000?l0oooo0?ooo`1P0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`L0
+oooo00<0003o0?ooo`3oool0H at 3oool001H0oooo00<000000?ooo`3oool0o`3oool60?ooo`030000
+o`3oool0oooo0680oooo000F0?ooo`030000003oool0oooo0?l0oooo1 at 3oool00`000?l0oooo0?oo
+o`1S0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`@0oooo00<0003o0?ooo`3oool0I03oool0
+01H0oooo00<000000?ooo`3oool0o`3oool20?ooo`80003oI`3oool001H0oooo00<000000?ooo`3o
+ool0o`3oool10?ooo`030000o`3oool0oooo06L0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+00<0003o0?ooo`3oool0J03oool001H0oooo00<000000?ooo`3oool0oP3oool00`000?l0oooo0?oo
+o`1Y0?ooo`005P3oool00`000000oooo0?ooo`3m0?ooo`030000o`3oool0oooo06X0oooo000F0?oo
+o`030000003oool0oooo0?`0oooo00<0003o0?ooo`3oool0J`3oool001H0oooo00<000000?ooo`3o
+ool0n`3oool00`000?l0oooo0?ooo`1/0?ooo`005P3oool00`000000oooo0?ooo`3j0?ooo`030000
+o`3oool0oooo06d0oooo00040?ooo`<000000`3oool00`000000oooo0?ooo`030?ooo`030000003o
+ool0oooo00<0oooo00<000000?ooo`3oool0n at 3oool00`000?l0oooo0?ooo`1^0?ooo`000`3oool0
+1 at 000000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?oo
+o`3h0?ooo`030000o`3oool0oooo06l0oooo00030?ooo`050000003oool0oooo0?ooo`000000103o
+ool6000000 at 0oooo00<000000?ooo`3oool0m`3oool00`000?l0oooo0?ooo`1`0?ooo`000`3oool0
+1 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`<00000
+mP3oool00`000?l0oooo0?ooo`1a0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo
+00 at 000000?ooo`3oool000001 at 3oool00`000000oooo0?ooo`3e0?ooo`030000o`3oool0oooo0780
+oooo00030?ooo`050000003oool0oooo0?ooo`0000001P3oool00`000000oooo000000050?ooo`03
+0000003oool0oooo0?@0oooo00<0003o0?ooo`3oool0L`3oool000 at 0oooo0`0000080?ooo`800000
+1 at 3oool00`000000oooo0?ooo`3c0?ooo`030000o`3oool0oooo07 at 0oooo000F0?ooo`030000003o
+ool0oooo0?80oooo00<0003o0?ooo`3oool0M at 3oool001H0oooo00<000000?ooo`3oool0l at 3oool0
+0`000?l0oooo0?ooo`1f0?ooo`005P3oool00`000000oooo0?ooo`3`0?ooo`030000o`3oool0oooo
+07L0oooo000F0?ooo`030000003oool0oooo0>l0oooo00<0003o0?ooo`3oool0N03oool001H0oooo
+00<000000?ooo`3oool0kP3oool00`000?l0oooo0?ooo`1i0?ooo`005P3oool00`000000oooo0?oo
+o`3]0?ooo`030000o`3oool0oooo07X0oooo000F0?ooo`030000003oool0oooo0>`0oooo00<0003o
+0?ooo`3oool0N`3oool001H0oooo00<000000?ooo`3oool0j`3oool00`000?l0oooo0?ooo`1l0?oo
+o`005P3oool00`000000oooo0?ooo`3Z0?ooo`030000o`3oool0oooo07d0oooo000F0?ooo`030000
+003oool0oooo0>T0oooo00<0003o0?ooo`3oool0OP3oool001H0oooo00<000000?ooo`3oool0j03o
+ool00`000?l0oooo0?ooo`1o0?ooo`005P3oool00`000000oooo0?ooo`3X0?ooo`030000o`3oool0
+oooo07l0oooo000F0?ooo`030000003oool0oooo0>L0oooo00<0003o0?ooo`3oool0P03oool001H0
+oooo00<000000?ooo`3oool0iP3oool00`000?l0oooo0?ooo`210?ooo`005P3oool00`000000oooo
+0?ooo`3U0?ooo`030000o`3oool0oooo0880oooo000F0?ooo`030000003oool0oooo0>@0oooo00<0
+003o0?ooo`3oool0P`3oool001H0oooo00<000000?ooo`3oool0h`3oool00`000?l0oooo0?ooo`24
+0?ooo`005P3oool00`000000oooo0?ooo`3R0?ooo`030000o`3oool0oooo08D0oooo000F0?ooo`03
+0000003oool0oooo0>40oooo00<0003o0?ooo`3oool0QP3oool001H0oooo00<000000?ooo`3oool0
+h03oool00`000?l0oooo0?ooo`270?ooo`005P3oool00`000000oooo0?ooo`3O0?ooo`030000o`3o
+ool0oooo08L0oooo0 at 000?l001H0oooo00<000000?ooo`3oool0gP3oool00`000?l0oooo0?ooo`26
+0?ooo`80003o0 at 3oool001H0oooo00<000000?ooo`3oool0g at 3oool00`000?l0oooo0?ooo`260?oo
+o`030000o`3oool0oooo0040oooo000F0?ooo`030000003oool0oooo0=`0oooo00<0003o0?ooo`3o
+ool0QP3oool00`000?l0oooo0?ooo`020?ooo`005P3oool00`000000oooo0?ooo`3K0?ooo`030000
+o`3oool0oooo08D0oooo0P000?l50?ooo`005P3oool00`000000oooo0?ooo`3J0?ooo`030000o`3o
+ool0oooo08D0oooo00<0003o0?ooo`3oool01 at 3oool001H0oooo00<000000?ooo`3oool0f at 3oool0
+0`000?l0oooo0?ooo`250?ooo`030000o`3oool0oooo00H0oooo000F0?ooo`030000003oool0oooo
+0=T0oooo00<0003o0?ooo`3oool0P`3oool20000o`T0oooo000F0?ooo`030000003oool0oooo0=P0
+oooo00<0003o0?ooo`3oool0P`3oool00`000?l0oooo0?ooo`090?ooo`005P3oool00`000000oooo
+0?ooo`3G0?ooo`030000o`3oool0oooo08<0oooo00<0003o0?ooo`3oool02P3oool001H0oooo00<0
+00000?ooo`3oool0eP3oool00`000?l0oooo0?ooo`220?ooo`80003o3 at 3oool001H0oooo00<00000
+0?ooo`3oool0e at 3oool00`000?l0oooo0?ooo`220?ooo`030000o`3oool0oooo00d0oooo000F0?oo
+o`800000e at 3oool00`000?l0oooo0?ooo`220?ooo`030000o`3oool0oooo00h0oooo000F0?ooo`03
+0000003oool0oooo0=<0oooo00<0003o0?ooo`3oool0PP3oool00`000?l0oooo0?ooo`0?0?ooo`00
+5P3oool00`000000oooo0?ooo`3B0?ooo`030000o`3oool0oooo0840oooo0P000?lB0?ooo`005P3o
+ool00`000000oooo0?ooo`3A0?ooo`030000o`3oool0oooo0840oooo00<0003o0?ooo`3oool04P3o
+ool001H0oooo00<000000?ooo`3oool0d03oool00`000?l0oooo0?ooo`210?ooo`030000o`3oool0
+oooo01<0oooo000F0?ooo`030000003oool0oooo0<l0oooo00<0003o0?ooo`3oool0P at 3oool00`00
+0?l0oooo0?ooo`0D0?ooo`005P3oool00`000000oooo0?ooo`3>0?ooo`030000o`3oool0oooo0840
+oooo00<0003o0?ooo`3oool05 at 3oool001H0oooo00<000000?ooo`3oool0c at 3oool00`000?l0oooo
+0?ooo`210?ooo`030000o`3oool0oooo01H0oooo000F0?ooo`030000003oool0oooo0<d0oooo00<0
+003o0?ooo`3oool0P03oool00`000?l0oooo0?ooo`0G0?ooo`005P3oool00`000000oooo0?ooo`3<
+0?ooo`030000o`3oool0oooo07l0oooo0P000?lJ0?ooo`005P3oool00`000000oooo0?ooo`3;0?oo
+o`030000o`3oool0oooo07l0oooo00<0003o0?ooo`3oool06P3oool001H0oooo00<000000?ooo`3o
+ool0bP3oool00`000?l0oooo0?ooo`1o0?ooo`030000o`3oool0oooo01/0oooo000F0?ooo`030000
+003oool0oooo0<T0oooo00<0003o0?ooo`3oool0O`3oool00`000?l0oooo0?ooo`0L0?ooo`005P3o
+ool00`000000oooo0?ooo`380?ooo`030000o`3oool0oooo07l0oooo00<0003o0?ooo`3oool07 at 3o
+ool001H0oooo00<000000?ooo`3oool0a`3oool00`000?l0oooo0?ooo`1o0?ooo`030000o`3oool0
+oooo01h0oooo000F0?ooo`030000003oool0oooo0<H0oooo00<0003o0?ooo`3oool0OP3oool20000
+ob40oooo000F0?ooo`030000003oool0oooo0<H0oooo00<0003o0?ooo`3oool0O at 3oool00`000?l0
+oooo0?ooo`0Q0?ooo`005P3oool00`000000oooo0?ooo`350?ooo`030000o`3oool0oooo07d0oooo
+00<0003o0?ooo`3oool08P3oool001H0oooo00<000000?ooo`3oool0a03oool00`000?l0oooo0?oo
+o`1m0?ooo`030000o`3oool0oooo02<0oooo000F0?ooo`030000003oool0oooo0<<0oooo00<0003o
+0?ooo`3oool0O at 3oool00`000?l0oooo0?ooo`0T0?ooo`005P3oool00`000000oooo0?ooo`320?oo
+o`030000o`3oool0oooo07d0oooo00<0003o0?ooo`3oool09 at 3oool001H0oooo00<000000?ooo`3o
+ool0`@3oool00`000?l0oooo0?ooo`1m0?ooo`030000o`3oool0oooo02H0oooo000F0?ooo`030000
+003oool0oooo0<00oooo00<0003o0?ooo`3oool0O03oool20000obT0oooo000F0?ooo`030000003o
+ool0oooo0;l0oooo00<0003o0?ooo`3oool0O03oool00`000?l0oooo0?ooo`0Y0?ooo`005P3oool0
+0`000000oooo0?ooo`2o0?ooo`030000o`3oool0oooo07/0oooo00<0003o0?ooo`3oool0:P3oool0
+01H0oooo00<000000?ooo`3oool0_P3oool00`000?l0oooo0?ooo`1k0?ooo`030000o`3oool0oooo
+02/0oooo000F0?ooo`030000003oool0oooo0;d0oooo00<0003o0?ooo`3oool0N`3oool00`000?l0
+oooo0?ooo`0/0?ooo`005P3oool00`000000oooo0?ooo`2l0?ooo`030000o`3oool0oooo07/0oooo
+00<0003o0?ooo`3oool0;@3oool001H0oooo00<000000?ooo`3oool0^`3oool00`000?l0oooo0?oo
+o`1j0?ooo`80003o<03oool001H0oooo00<000000?ooo`3oool0^P3oool00`000?l0oooo0?ooo`1j
+0?ooo`030000o`3oool0oooo0300oooo000F0?ooo`030000003oool0oooo0;X0oooo00<0003o0?oo
+o`3oool0N at 3oool00`000?l0oooo0?ooo`0a0?ooo`005P3oool00`000000oooo0?ooo`2i0?ooo`03
+0000o`3oool0oooo07T0oooo00<0003o0?ooo`3oool0<P3oool001H0oooo00<000000?ooo`3oool0
+^03oool00`000?l0oooo0?ooo`1i0?ooo`030000o`3oool0oooo03<0oooo000F0?ooo`030000003o
+ool0oooo0;L0oooo00<0003o0?ooo`3oool0N at 3oool00`000?l0oooo0?ooo`0d0?ooo`005P3oool0
+0`000000oooo0?ooo`2f0?ooo`030000o`3oool0oooo07T0oooo00<0003o0?ooo`3oool0=@3oool0
+01H0oooo00<000000?ooo`3oool0]@3oool00`000?l0oooo0?ooo`1h0?ooo`80003o>03oool001H0
+oooo00<000000?ooo`3oool0]@3oool00`000?l0oooo0?ooo`1g0?ooo`030000o`3oool0oooo03P0
+oooo000F0?ooo`800000]@3oool00`000?l0oooo0?ooo`1g0?ooo`030000o`3oool0oooo03T0oooo
+000F0?ooo`030000003oool0oooo0;<0oooo00<0003o0?ooo`3oool0M`3oool00`000?l0oooo0?oo
+o`0j0?ooo`005P3oool00`000000oooo0?ooo`2b0?ooo`030000o`3oool0oooo07L0oooo00<0003o
+0?ooo`3oool0>`3oool001H0oooo00<000000?ooo`3oool0/@3oool00`000?l0oooo0?ooo`1g0?oo
+o`030000o`3oool0oooo03`0oooo000F0?ooo`030000003oool0oooo0;40oooo00<0003o0?ooo`3o
+ool0MP3oool00`000?l0oooo0?ooo`0m0?ooo`005P3oool00`000000oooo0?ooo`2`0?ooo`030000
+o`3oool0oooo07D0oooo0P000?m00?ooo`005P3oool00`000000oooo0?ooo`2_0?ooo`030000o`3o
+ool0oooo07D0oooo00<0003o0?ooo`3oool0 at 03oool001H0oooo00<000000?ooo`3oool0[P3oool0
+0`000?l0oooo0?ooo`1e0?ooo`030000o`3oool0oooo0440oooo000F0?ooo`030000003oool0oooo
+0:d0oooo00<0003o0?ooo`3oool0M at 3oool00`000?l0oooo0?ooo`120?ooo`005P3oool00`000000
+oooo0?ooo`2]0?ooo`030000o`3oool0oooo07 at 0oooo00<0003o0?ooo`3oool0@`3oool001H0oooo
+00<000000?ooo`3oool0[03oool00`000?l0oooo0?ooo`1d0?ooo`030000o`3oool0oooo04 at 0oooo
+000F0?ooo`030000003oool0oooo0:/0oooo00<0003o0?ooo`3oool0M03oool00`000?l0oooo0?oo
+o`150?ooo`005P3oool00`000000oooo0?ooo`2Z0?ooo`030000o`3oool0oooo07<0oooo0P000?m8
+0?ooo`005P3oool00`000000oooo0?ooo`2Z0?ooo`030000o`3oool0oooo0780oooo00<0003o0?oo
+o`3oool0B03oool001H0oooo00<000000?ooo`3oool0Z at 3oool00`000?l0oooo0?ooo`1b0?ooo`03
+0000o`3oool0oooo04T0oooo000F0?ooo`030000003oool0oooo0:P0oooo00<0003o0?ooo`3oool0
+LP3oool00`000?l0oooo0?ooo`1:0?ooo`005P3oool00`000000oooo0?ooo`2W0?ooo`030000o`3o
+ool0oooo0780oooo00<0003o0?ooo`3oool0B`3oool001H0oooo00<000000?ooo`3oool0YP3oool0
+0`000?l0oooo0?ooo`1b0?ooo`030000o`3oool0oooo04`0oooo000F0?ooo`030000003oool0oooo
+0:H0oooo00<0003o0?ooo`3oool0L at 3oool00`000?l0oooo0?ooo`1=0?ooo`005P3oool00`000000
+oooo0?ooo`2U0?ooo`030000o`3oool0oooo0740oooo00<0003o0?ooo`3oool0CP3oool001H0oooo
+00<000000?ooo`3oool0Y03oool00`000?l0oooo0?ooo`1a0?ooo`030000o`3oool0oooo04l0oooo
+000F0?ooo`030000003oool0oooo0:<0oooo00<0003o0?ooo`3oool0L at 3oool00`000?l0oooo0?oo
+o`1 at 0?ooo`005P3oool00`000000oooo0?ooo`2R0?ooo`030000o`3oool0oooo0700oooo0P000?mC
+0?ooo`005P3oool00`000000oooo0?ooo`2R0?ooo`030000o`3oool0oooo06l0oooo00<0003o0?oo
+o`3oool0D`3oool001H0oooo00<000000?ooo`3oool0X at 3oool00`000?l0oooo0?ooo`1_0?ooo`03
+0000o`3oool0oooo05 at 0oooo000F0?ooo`030000003oool0oooo0:00oooo00<0003o0?ooo`3oool0
+K`3oool00`000?l0oooo0?ooo`1E0?ooo`005P3oool00`000000oooo0?ooo`2O0?ooo`030000o`3o
+ool0oooo06l0oooo00<0003o0?ooo`3oool0EP3oool001H0oooo00<000000?ooo`3oool0W`3oool0
+0`000?l0oooo0?ooo`1^0?ooo`030000o`3oool0oooo05L0oooo000F0?ooo`030000003oool0oooo
+09h0oooo00<0003o0?ooo`3oool0KP3oool00`000?l0oooo0?ooo`1H0?ooo`005P3oool00`000000
+oooo0?ooo`2M0?ooo`030000o`3oool0oooo06h0oooo00<0003o0?ooo`3oool0F at 3oool001H0oooo
+00<000000?ooo`3oool0W03oool00`000?l0oooo0?ooo`1^0?ooo`030000o`3oool0oooo05X0oooo
+000F0?ooo`030000003oool0oooo09`0oooo00<0003o0?ooo`3oool0K at 3oool00`000?l0oooo0?oo
+o`1K0?ooo`005P3oool00`000000oooo0?ooo`2K0?ooo`030000o`3oool0oooo06d0oooo00<0003o
+0?ooo`3oool0G03oool001H0oooo00<000000?ooo`3oool0VP3oool00`000?l0oooo0?ooo`1]0?oo
+o`030000o`3oool0oooo05d0oooo000F0?ooo`030000003oool0oooo09T0oooo00<0003o0?ooo`3o
+ool0K at 3oool00`000?l0oooo0?ooo`1N0?ooo`005P3oool00`000000oooo0?ooo`2I0?ooo`030000
+o`3oool0oooo06`0oooo00<0003o0?ooo`3oool0G`3oool001H0oooo0P00002I0?ooo`030000o`3o
+ool0oooo06`0oooo00<0003o0?ooo`3oool0H03oool001H0oooo00<000000?ooo`3oool0U`3oool0
+0`000?l0oooo0?ooo`1[0?ooo`80003oH`3oool001H0oooo00<000000?ooo`3oool0UP3oool00`00
+0?l0oooo0?ooo`1[0?ooo`030000o`3oool0oooo06<0oooo000F0?ooo`030000003oool0oooo09H0
+oooo00<0003o0?ooo`3oool0JP3oool00`000?l0oooo0?ooo`1T0?ooo`005P3oool00`000000oooo
+0?ooo`2E0?ooo`030000o`3oool0oooo06X0oooo00<0003o0?ooo`3oool0I at 3oool001H0oooo00<0
+00000?ooo`3oool0U03oool00`000?l0oooo0?ooo`1Z0?ooo`030000o`3oool0oooo06H0oooo000F
+0?ooo`030000003oool0oooo09 at 0oooo00<0003o0?ooo`3oool0J at 3oool00`000?l0oooo0?ooo`1W
+0?ooo`005P3oool00`000000oooo0?ooo`2C0?ooo`030000o`3oool0oooo06T0oooo00<0003o0?oo
+o`3oool0J03oool001H0oooo00<000000?ooo`3oool0TP3oool00`000?l0oooo0?ooo`1Y0?ooo`03
+0000o`3oool0oooo06T0oooo000F0?ooo`030000003oool0oooo0980oooo00<0003o0?ooo`3oool0
+J03oool00`000?l0oooo0?ooo`1Z0?ooo`005P3oool00`000000oooo0?ooo`2A0?ooo`030000o`3o
+ool0oooo06P0oooo00<0003o0?ooo`3oool0J`3oool001H0oooo00<000000?ooo`3oool0T03oool0
+0`000?l0oooo0?ooo`1X0?ooo`030000o`3oool0oooo06`0oooo000F0?ooo`030000003oool0oooo
+0900oooo00<0003o0?ooo`3oool0I`3oool00`000?l0oooo0?ooo`1]0?ooo`005P3oool00`000000
+oooo0?ooo`2?0?ooo`030000o`3oool0oooo06L0oooo00<0003o0?ooo`3oool0KP3oool001H0oooo
+00<000000?ooo`3oool0SP3oool00`000?l0oooo0?ooo`1W0?ooo`030000o`3oool0oooo06l0oooo
+000F0?ooo`030000003oool0oooo08h0oooo00<0003o0?ooo`3oool0IP3oool00`000?l0oooo0?oo
+o`1`0?ooo`005P3oool00`000000oooo0?ooo`2=0?ooo`030000o`3oool0oooo06H0oooo00<0003o
+0?ooo`3oool0L at 3oool001H0oooo00<000000?ooo`3oool0S at 3oool00`000?l0oooo0?ooo`1U0?oo
+o`030000o`3oool0oooo0780oooo000F0?ooo`030000003oool0oooo08`0oooo00<0003o0?ooo`3o
+ool0I at 3oool00`000?l0oooo0?ooo`1c0?ooo`005P3oool00`000000oooo0?ooo`2;0?ooo`030000
+o`3oool0oooo06D0oooo00<0003o0?ooo`3oool0M03oool001H0oooo00<000000?ooo`3oool0R`3o
+ool00`000?l0oooo0?ooo`1T0?ooo`030000o`3oool0oooo07D0oooo000F0?ooo`030000003oool0
+oooo08X0oooo00<0003o0?ooo`3oool0I03oool00`000?l0oooo0?ooo`1f0?ooo`005P3oool00`00
+0000oooo0?ooo`290?ooo`030000o`3oool0oooo06 at 0oooo00<0003o0?ooo`3oool0M`3oool001H0
+oooo00<000000?ooo`3oool0R at 3oool00`000?l0oooo0?ooo`1S0?ooo`030000o`3oool0oooo07P0
+oooo000F0?ooo`030000003oool0oooo08P0oooo00<0003o0?ooo`3oool0H`3oool00`000?l0oooo
+0?ooo`1i0?ooo`005P3oool00`000000oooo0?ooo`270?ooo`030000o`3oool0oooo06<0oooo00<0
+003o0?ooo`3oool0NP3oool001H0oooo00<000000?ooo`3oool0Q`3oool00`000?l0oooo0?ooo`1R
+0?ooo`030000o`3oool0oooo07/0oooo000F0?ooo`030000003oool0oooo08H0oooo00<0003o0?oo
+o`3oool0HP3oool00`000?l0oooo0?ooo`1l0?ooo`005P3oool00`000000oooo0?ooo`250?ooo`03
+0000o`3oool0oooo0680oooo00<0003o0?ooo`3oool0O at 3oool001H0oooo00<000000?ooo`3oool0
+Q at 3oool00`000?l0oooo0?ooo`1Q0?ooo`030000o`3oool0oooo07h0oooo000F0?ooo`030000003o
+ool0oooo08 at 0oooo00<0003o0?ooo`3oool0H at 3oool00`000?l0oooo0?ooo`1o0?ooo`005P3oool0
+0`000000oooo0?ooo`230?ooo`030000o`3oool0oooo0640oooo00<0003o0?ooo`3oool0P03oool0
+01H0oooo00<000000?ooo`3oool0P`3oool00`000?l0oooo0?ooo`1P0?ooo`030000o`3oool0oooo
+0840oooo000F0?ooo`030000003oool0oooo0880oooo00<0003o0?ooo`3oool0H03oool00`000?l0
+oooo0?ooo`220?ooo`00103oool3000000<0oooo00<000000?ooo`3oool00`0000060?ooo`030000
+003oool0oooo0840oooo00<0003o0?ooo`3oool0H03oool00`000?l0oooo0?ooo`230?ooo`000`3o
+ool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`03
+0000003oool0oooo0840oooo00<0003o0?ooo`3oool0G`3oool00`000?l0oooo0?ooo`240?ooo`00
+0`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?oo
+o`<00000P03oool00`000?l0oooo0?ooo`1O0?ooo`030000o`3oool0oooo08D0oooo00030?ooo`05
+0000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<00000
+0?ooo`3oool0O`3oool00`000?l0oooo0?ooo`1O0?ooo`030000o`3oool0oooo08H0oooo00030?oo
+o`050000003oool0oooo0?ooo`000000103oool4000000H0oooo00<000000?ooo`3oool0OP3oool0
+0`000?l0oooo0?ooo`1O0?ooo`030000o`3oool0oooo08L0oooo00030?ooo`050000003oool0oooo
+0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0OP3o
+ool00`000?l0oooo0?ooo`1N0?ooo`030000o`3oool0oooo08P0oooo00040?ooo`<000001P3oool3
+000000H0oooo00<000000?ooo`3oool0O at 3oool00`000?l0oooo0?ooo`1N0?ooo`030000o`3oool0
+oooo08T0oooo000F0?ooo`030000003oool0oooo07`0oooo00<0003o0?ooo`3oool0GP3oool00`00
+0?l0oooo0?ooo`2:0?ooo`005P3oool00`000000oooo0?ooo`1l0?ooo`030000o`3oool0oooo05d0
+oooo00<0003o0?ooo`3oool0R`3oool001H0oooo00<000000?ooo`3oool0N`3oool00`000?l0oooo
+0?ooo`1M0?ooo`030000o`3oool0oooo08`0oooo000F0?ooo`030000003oool0oooo07X0oooo00<0
+003o0?ooo`3oool0G at 3oool00`000?l0oooo0?ooo`2=0?ooo`005P3oool00`000000oooo0?ooo`1j
+0?ooo`030000o`3oool0oooo05`0oooo00<0003o0?ooo`3oool0SP3oool001H0oooo00<000000?oo
+o`3oool0N at 3oool00`000?l0oooo0?ooo`1M0?ooo`030000o`3oool0oooo08h0oooo000F0?ooo`03
+0000003oool0oooo07P0oooo00<0003o0?ooo`3oool0G at 3oool00`000?l0oooo0?ooo`2?0?ooo`00
+5P3oool00`000000oooo0?ooo`1h0?ooo`030000o`3oool0oooo05`0oooo00<0003o0?ooo`3oool0
+T03oool001H0oooo00<000000?ooo`3oool0M`3oool00`000?l0oooo0?ooo`1L0?ooo`030000o`3o
+ool0oooo0940oooo000F0?ooo`030000003oool0oooo07H0oooo00<0003o0?ooo`3oool0G03oool0
+0`000?l0oooo0?ooo`2B0?ooo`005P3oool00`000000oooo0?ooo`1f0?ooo`030000o`3oool0oooo
+05/0oooo00<0003o0?ooo`3oool0T`3oool001H0oooo00<000000?ooo`3oool0M at 3oool00`000?l0
+oooo0?ooo`1K0?ooo`030000o`3oool0oooo09 at 0oooo000F0?ooo`030000003oool0oooo07D0oooo
+00<0003o0?ooo`3oool0FP3oool00`000?l0oooo0?ooo`2E0?ooo`005P3oool00`000000oooo0?oo
+o`1d0?ooo`030000o`3oool0oooo05X0oooo00<0003o0?ooo`3oool0UP3oool001H0oooo00<00000
+0?ooo`3oool0M03oool00`000?l0oooo0?ooo`1I0?ooo`030000o`3oool0oooo09L0oooo000F0?oo
+o`030000003oool0oooo07<0oooo00<0003o0?ooo`3oool0F at 3oool00`000?l0oooo0?ooo`2H0?oo
+o`005P3oool00`000000oooo0?ooo`1b0?ooo`030000o`3oool0oooo05T0oooo00<0003o0?ooo`3o
+ool0V at 3oool001H0oooo00<000000?ooo`3oool0LP3oool00`000?l0oooo0?ooo`1H0?ooo`030000
+o`3oool0oooo09X0oooo000F0?ooo`030000003oool0oooo0740oooo00<0003o0?ooo`3oool0F03o
+ool00`000?l0oooo0?ooo`2K0?ooo`005P3oool00`000000oooo0?ooo`1a0?ooo`030000o`3oool0
+oooo05L0oooo00<0003o0?ooo`3oool0W03oool001H0oooo00<000000?ooo`3oool0L03oool00`00
+0?l0oooo0?ooo`1G0?ooo`030000o`3oool0oooo09d0oooo000F0?ooo`030000003oool0oooo06l0
+oooo00<0003o0?ooo`3oool0E`3oool00`000?l0oooo0?ooo`2N0?ooo`005P3oool00`000000oooo
+0?ooo`1_0?ooo`030000o`3oool0oooo05H0oooo00<0003o0?ooo`3oool0W`3oool001H0oooo00<0
+00000?ooo`3oool0KP3oool00`000?l0oooo0?ooo`1F0?ooo`030000o`3oool0oooo0:00oooo000F
+0?ooo`030000003oool0oooo06h0oooo00<0003o0?ooo`3oool0E at 3oool00`000?l0oooo0?ooo`2Q
+0?ooo`005P3oool00`000000oooo0?ooo`1]0?ooo`030000o`3oool0oooo05D0oooo00<0003o0?oo
+o`3oool0XP3oool001H0oooo00<000000?ooo`3oool0K at 3oool00`000?l0oooo0?ooo`1D0?ooo`03
+0000o`3oool0oooo0:<0oooo000F0?ooo`030000003oool0oooo06`0oooo00<0003o0?ooo`3oool0
+E03oool00`000?l0oooo0?ooo`2T0?ooo`005P3oool00`000000oooo0?ooo`1[0?ooo`030000o`3o
+ool0oooo05 at 0oooo00<0003o0?ooo`3oool0Y at 3oool001H0oooo00<000000?ooo`3oool0J`3oool0
+0`000?l0oooo0?ooo`1C0?ooo`030000o`3oool0oooo0:H0oooo000F0?ooo`030000003oool0oooo
+06X0oooo00<0003o0?ooo`3oool0D`3oool00`000?l0oooo0?ooo`2W0?ooo`005P3oool00`000000
+oooo0?ooo`1Z0?ooo`030000o`3oool0oooo0580oooo00<0003o0?ooo`3oool0Z03oool001H0oooo
+0P00001Z0?ooo`030000o`3oool0oooo0580oooo00<0003o0?ooo`3oool0Z at 3oool001H0oooo00<0
+00000?ooo`3oool0J at 3oool00`000?l0oooo0?ooo`1B0?ooo`030000o`3oool0oooo0:T0oooo000F
+0?ooo`030000003oool0oooo06P0oooo00<0003o0?ooo`3oool0DP3oool00`000?l0oooo0?ooo`2Z
+0?ooo`005P3oool00`000000oooo0?ooo`1W0?ooo`030000o`3oool0oooo0580oooo00<0003o0?oo
+o`3oool0Z`3oool001H0oooo00<000000?ooo`3oool0I`3oool00`000?l0oooo0?ooo`1A0?ooo`03
+0000o`3oool0oooo0:/0oooo0 at 000?l001H0oooo00<000000?ooo`3oool0IP3oool00`000?l0oooo
+0?ooo`1A0?ooo`030000o`3oool0oooo0:X0oooo0P000?l10?ooo`005P3oool00`000000oooo0?oo
+o`1V0?ooo`030000o`3oool0oooo0500oooo00<0003o0?ooo`3oool0ZP3oool00`000?l0oooo0?oo
+o`010?ooo`005P3oool00`000000oooo0?ooo`1U0?ooo`030000o`3oool0oooo0500oooo00<0003o
+0?ooo`3oool0Z at 3oool20000o`@0oooo000F0?ooo`030000003oool0oooo06D0oooo00<0003o0?oo
+o`3oool0C`3oool00`000?l0oooo0?ooo`2Y0?ooo`030000o`3oool0oooo00 at 0oooo000F0?ooo`03
+0000003oool0oooo06 at 0oooo00<0003o0?ooo`3oool0D03oool00`000?l0oooo0?ooo`2W0?ooo`80
+003o1`3oool001H0oooo00<000000?ooo`3oool0H`3oool00`000?l0oooo0?ooo`1 at 0?ooo`030000
+o`3oool0oooo0:L0oooo00<0003o0?ooo`3oool01`3oool001H0oooo00<000000?ooo`3oool0H`3o
+ool00`000?l0oooo0?ooo`1?0?ooo`030000o`3oool0oooo0:H0oooo0P000?l:0?ooo`005P3oool0
+0`000000oooo0?ooo`1R0?ooo`030000o`3oool0oooo04l0oooo00<0003o0?ooo`3oool0YP3oool0
+0`000?l0oooo0?ooo`0:0?ooo`005P3oool00`000000oooo0?ooo`1R0?ooo`030000o`3oool0oooo
+04h0oooo00<0003o0?ooo`3oool0Y at 3oool20000o`d0oooo000F0?ooo`030000003oool0oooo0640
+oooo00<0003o0?ooo`3oool0CP3oool00`000?l0oooo0?ooo`2U0?ooo`030000o`3oool0oooo00d0
+oooo000F0?ooo`030000003oool0oooo0640oooo00<0003o0?ooo`3oool0C at 3oool00`000?l0oooo
+0?ooo`2U0?ooo`030000o`3oool0oooo00h0oooo000F0?ooo`030000003oool0oooo0600oooo00<0
+003o0?ooo`3oool0C at 3oool00`000?l0oooo0?ooo`2T0?ooo`80003o4 at 3oool001H0oooo00<00000
+0?ooo`3oool0G`3oool00`000?l0oooo0?ooo`1=0?ooo`030000o`3oool0oooo0:@0oooo00<0003o
+0?ooo`3oool04 at 3oool001H0oooo00<000000?ooo`3oool0G`3oool00`000?l0oooo0?ooo`1<0?oo
+o`030000o`3oool0oooo0:@0oooo00<0003o0?ooo`3oool04P3oool001H0oooo00<000000?ooo`3o
+ool0GP3oool00`000?l0oooo0?ooo`1<0?ooo`030000o`3oool0oooo0:@0oooo00<0003o0?ooo`3o
+ool04`3oool001H0oooo00<000000?ooo`3oool0GP3oool00`000?l0oooo0?ooo`1;0?ooo`030000
+o`3oool0oooo0:<0oooo0P000?lF0?ooo`005P3oool00`000000oooo0?ooo`1M0?ooo`030000o`3o
+ool0oooo04/0oooo00<0003o0?ooo`3oool0X`3oool00`000?l0oooo0?ooo`0F0?ooo`005P3oool0
+0`000000oooo0?ooo`1M0?ooo`030000o`3oool0oooo04/0oooo00<0003o0?ooo`3oool0XP3oool0
+0`000?l0oooo0?ooo`0G0?ooo`005P3oool00`000000oooo0?ooo`1L0?ooo`030000o`3oool0oooo
+04/0oooo00<0003o0?ooo`3oool0XP3oool00`000?l0oooo0?ooo`0H0?ooo`005P3oool00`000000
+oooo0?ooo`1K0?ooo`030000o`3oool0oooo04/0oooo00<0003o0?ooo`3oool0X at 3oool20000oa/0
+oooo000F0?ooo`030000003oool0oooo05/0oooo00<0003o0?ooo`3oool0BP3oool00`000?l0oooo
+0?ooo`2Q0?ooo`030000o`3oool0oooo01/0oooo000F0?ooo`030000003oool0oooo05X0oooo00<0
+003o0?ooo`3oool0BP3oool00`000?l0oooo0?ooo`2Q0?ooo`030000o`3oool0oooo01`0oooo000F
+0?ooo`030000003oool0oooo05X0oooo00<0003o0?ooo`3oool0B at 3oool00`000?l0oooo0?ooo`2P
+0?ooo`80003o7`3oool001H0oooo00<000000?ooo`3oool0F at 3oool00`000?l0oooo0?ooo`190?oo
+o`030000o`3oool0oooo0:00oooo00<0003o0?ooo`3oool07`3oool001H0oooo00<000000?ooo`3o
+ool0F at 3oool00`000?l0oooo0?ooo`180?ooo`030000o`3oool0oooo09l0oooo0P000?lR0?ooo`00
+5P3oool00`000000oooo0?ooo`1H0?ooo`030000o`3oool0oooo04P0oooo00<0003o0?ooo`3oool0
+W`3oool00`000?l0oooo0?ooo`0R0?ooo`005P3oool00`000000oooo0?ooo`1G0?ooo`030000o`3o
+ool0oooo04P0oooo00<0003o0?ooo`3oool0WP3oool20000obD0oooo000F0?ooo`030000003oool0
+oooo05L0oooo00<0003o0?ooo`3oool0A`3oool00`000?l0oooo0?ooo`2N0?ooo`030000o`3oool0
+oooo02D0oooo000F0?ooo`030000003oool0oooo05H0oooo00<0003o0?ooo`3oool0B03oool00`00
+0?l0oooo0?ooo`2L0?ooo`80003o:03oool001H0oooo00<000000?ooo`3oool0EP3oool00`000?l0
+oooo0?ooo`170?ooo`030000o`3oool0oooo09`0oooo00<0003o0?ooo`3oool0:03oool001H0oooo
+00<000000?ooo`3oool0E at 3oool00`000?l0oooo0?ooo`170?ooo`030000o`3oool0oooo09/0oooo
+0P000?l[0?ooo`005P3oool2000005H0oooo00<0003o0?ooo`3oool0AP3oool00`000?l0oooo0?oo
+o`2K0?ooo`030000o`3oool0oooo02/0oooo000F0?ooo`030000003oool0oooo05 at 0oooo00<0003o
+0?ooo`3oool0AP3oool00`000?l0oooo0?ooo`2J0?ooo`80003o;P3oool001H0oooo00<000000?oo
+o`3oool0E03oool00`000?l0oooo0?ooo`150?ooo`030000o`3oool0oooo09X0oooo00<0003o0?oo
+o`3oool0;P3oool001H0oooo00<000000?ooo`3oool0D`3oool00`000?l0oooo0?ooo`160?ooo`03
+0000o`3oool0oooo09T0oooo00<0003o0?ooo`3oool0;`3oool001H0oooo00<000000?ooo`3oool0
+D`3oool00`000?l0oooo0?ooo`150?ooo`030000o`3oool0oooo09P0oooo0P000?lb0?ooo`005P3o
+ool00`000000oooo0?ooo`1B0?ooo`030000o`3oool0oooo04D0oooo00<0003o0?ooo`3oool0V03o
+ool00`000?l0oooo0?ooo`0b0?ooo`005P3oool00`000000oooo0?ooo`1B0?ooo`030000o`3oool0
+oooo04 at 0oooo00<0003o0?ooo`3oool0V03oool00`000?l0oooo0?ooo`0c0?ooo`005P3oool00`00
+0000oooo0?ooo`1A0?ooo`030000o`3oool0oooo04 at 0oooo00<0003o0?ooo`3oool0U`3oool20000
+ocH0oooo000F0?ooo`030000003oool0oooo0500oooo00<0003o0?ooo`3oool0A03oool00`000?l0
+oooo0?ooo`2G0?ooo`030000o`3oool0oooo03H0oooo000F0?ooo`030000003oool0oooo0500oooo
+00<0003o0?ooo`3oool0A03oool00`000?l0oooo0?ooo`2F0?ooo`030000o`3oool0oooo03L0oooo
+000F0?ooo`030000003oool0oooo04l0oooo00<0003o0?ooo`3oool0A03oool00`000?l0oooo0?oo
+o`2E0?ooo`80003o>P3oool001H0oooo00<000000?ooo`3oool0C`3oool00`000?l0oooo0?ooo`13
+0?ooo`030000o`3oool0oooo09D0oooo00<0003o0?ooo`3oool0>P3oool001H0oooo00<000000?oo
+o`3oool0CP3oool00`000?l0oooo0?ooo`130?ooo`030000o`3oool0oooo09D0oooo00<0003o0?oo
+o`3oool0>`3oool001H0oooo00<000000?ooo`3oool0CP3oool00`000?l0oooo0?ooo`120?ooo`03
+0000o`3oool0oooo09 at 0oooo0P000?ln0?ooo`005P3oool00`000000oooo0?ooo`1=0?ooo`030000
+o`3oool0oooo0480oooo00<0003o0?ooo`3oool0U03oool00`000?l0oooo0?ooo`0n0?ooo`005P3o
+ool00`000000oooo0?ooo`1=0?ooo`030000o`3oool0oooo0480oooo00<0003o0?ooo`3oool0T`3o
+ool00`000?l0oooo0?ooo`0o0?ooo`005P3oool00`000000oooo0?ooo`1<0?ooo`030000o`3oool0
+oooo0480oooo00<0003o0?ooo`3oool0TP3oool20000od80oooo000F0?ooo`030000003oool0oooo
+04`0oooo00<0003o0?ooo`3oool0@@3oool00`000?l0oooo0?ooo`2B0?ooo`030000o`3oool0oooo
+0480oooo000F0?ooo`030000003oool0oooo04/0oooo00<0003o0?ooo`3oool0@@3oool00`000?l0
+oooo0?ooo`2B0?ooo`030000o`3oool0oooo04<0oooo000F0?ooo`030000003oool0oooo04/0oooo
+00<0003o0?ooo`3oool0 at 03oool00`000?l0oooo0?ooo`2A0?ooo`80003oAP3oool001H0oooo00<0
+00000?ooo`3oool0BP3oool00`000?l0oooo0?ooo`100?ooo`030000o`3oool0oooo0940oooo00<0
+003o0?ooo`3oool0AP3oool001H0oooo00<000000?ooo`3oool0BP3oool00`000?l0oooo0?ooo`10
+0?ooo`030000o`3oool0oooo0900oooo00<0003o0?ooo`3oool0A`3oool001H0oooo00<000000?oo
+o`3oool0B at 3oool00`000?l0oooo0?ooo`100?ooo`030000o`3oool0oooo08l0oooo0P000?m:0?oo
+o`005P3oool00`000000oooo0?ooo`180?ooo`030000o`3oool0oooo0400oooo00<0003o0?ooo`3o
+ool0S`3oool00`000?l0oooo0?ooo`1:0?ooo`005P3oool00`000000oooo0?ooo`180?ooo`030000
+o`3oool0oooo03l0oooo00<0003o0?ooo`3oool0SP3oool20000odd0oooo000F0?ooo`030000003o
+ool0oooo04L0oooo00<0003o0?ooo`3oool0?`3oool00`000?l0oooo0?ooo`2>0?ooo`030000o`3o
+ool0oooo04d0oooo000F0?ooo`030000003oool0oooo04L0oooo00<0003o0?ooo`3oool0?P3oool0
+0`000?l0oooo0?ooo`2>0?ooo`030000o`3oool0oooo04h0oooo000F0?ooo`030000003oool0oooo
+04H0oooo00<0003o0?ooo`3oool0?`3oool00`000?l0oooo0?ooo`2<0?ooo`80003oD at 3oool001H0
+oooo00<000000?ooo`3oool0AP3oool00`000?l0oooo0?ooo`0n0?ooo`030000o`3oool0oooo08`0
+oooo00<0003o0?ooo`3oool0D at 3oool001H0oooo00<000000?ooo`3oool0A at 3oool00`000?l0oooo
+0?ooo`0n0?ooo`030000o`3oool0oooo08`0oooo00<0003o0?ooo`3oool0DP3oool001H0oooo00<0
+00000?ooo`3oool0A at 3oool00`000?l0oooo0?ooo`0m0?ooo`030000o`3oool0oooo08/0oooo0P00
+0?mE0?ooo`005P3oool00`000000oooo0?ooo`140?ooo`030000o`3oool0oooo03d0oooo00<0003o
+0?ooo`3oool0R`3oool00`000?l0oooo0?ooo`1E0?ooo`005P3oool00`000000oooo0?ooo`140?oo
+o`030000o`3oool0oooo03`0oooo00<0003o0?ooo`3oool0R`3oool00`000?l0oooo0?ooo`1F0?oo
+o`005P3oool00`000000oooo0?ooo`130?ooo`030000o`3oool0oooo03`0oooo00<0003o0?ooo`3o
+ool0RP3oool20000oeT0oooo000F0?ooo`030000003oool0oooo04<0oooo00<0003o0?ooo`3oool0
+?03oool00`000?l0oooo0?ooo`290?ooo`030000o`3oool0oooo05T0oooo000F0?ooo`030000003o
+ool0oooo0480oooo00<0003o0?ooo`3oool0?03oool00`000?l0oooo0?ooo`280?ooo`80003oG03o
+ool001H0oooo0P0000130?ooo`030000o`3oool0oooo03/0oooo00<0003o0?ooo`3oool0R03oool0
+0`000?l0oooo0?ooo`1L0?ooo`005P3oool00`000000oooo0?ooo`110?ooo`030000o`3oool0oooo
+03/0oooo00<0003o0?ooo`3oool0Q`3oool20000oel0oooo000F0?ooo`030000003oool0oooo0440
+oooo00<0003o0?ooo`3oool0>P3oool00`000?l0oooo0?ooo`270?ooo`030000o`3oool0oooo05l0
+oooo000F0?ooo`030000003oool0oooo0400oooo00<0003o0?ooo`3oool0>P3oool00`000?l0oooo
+0?ooo`270?ooo`030000o`3oool0oooo0600oooo000F0?ooo`030000003oool0oooo0400oooo00<0
+003o0?ooo`3oool0>@3oool00`000?l0oooo0?ooo`260?ooo`80003oH`3oool001H0oooo00<00000
+0?ooo`3oool0?`3oool00`000?l0oooo0?ooo`0i0?ooo`030000o`3oool0oooo08H0oooo00<0003o
+0?ooo`3oool0H`3oool001H0oooo00<000000?ooo`3oool0?`3oool00`000?l0oooo0?ooo`0i0?oo
+o`030000o`3oool0oooo08 at 0oooo0P000?mV0?ooo`005P3oool00`000000oooo0?ooo`0n0?ooo`03
+0000o`3oool0oooo03T0oooo00<0003o0?ooo`3oool0Q03oool00`000?l0oooo0?ooo`1V0?ooo`00
+5P3oool00`000000oooo0?ooo`0n0?ooo`030000o`3oool0oooo03P0oooo00<0003o0?ooo`3oool0
+P`3oool20000ofT0oooo000F0?ooo`030000003oool0oooo03d0oooo00<0003o0?ooo`3oool0>03o
+ool00`000?l0oooo0?ooo`230?ooo`030000o`3oool0oooo06T0oooo000F0?ooo`030000003oool0
+oooo03d0oooo00<0003o0?ooo`3oool0=`3oool00`000?l0oooo0?ooo`220?ooo`80003oK03oool0
+01H0oooo00<000000?ooo`3oool0?03oool00`000?l0oooo0?ooo`0g0?ooo`030000o`3oool0oooo
+0880oooo00<0003o0?ooo`3oool0K03oool001H0oooo00<000000?ooo`3oool0?03oool00`000?l0
+oooo0?ooo`0f0?ooo`030000o`3oool0oooo0880oooo00<0003o0?ooo`3oool0K at 3oool001H0oooo
+00<000000?ooo`3oool0>`3oool00`000?l0oooo0?ooo`0g0?ooo`030000o`3oool0oooo0800oooo
+0P000?m`0?ooo`005P3oool00`000000oooo0?ooo`0k0?ooo`030000o`3oool0oooo03H0oooo00<0
+003o0?ooo`3oool0P03oool00`000?l0oooo0?ooo`1`0?ooo`005P3oool00`000000oooo0?ooo`0j
+0?ooo`030000o`3oool0oooo03H0oooo00<0003o0?ooo`3oool0O`3oool20000og<0oooo000F0?oo
+o`030000003oool0oooo03X0oooo00<0003o0?ooo`3oool0=@3oool00`000?l0oooo0?ooo`1o0?oo
+o`030000o`3oool0oooo07<0oooo000F0?ooo`030000003oool0oooo03T0oooo00<0003o0?ooo`3o
+ool0=@3oool00`000?l0oooo0?ooo`1o0?ooo`030000o`3oool0oooo07 at 0oooo000F0?ooo`030000
+003oool0oooo03T0oooo00<0003o0?ooo`3oool0=@3oool00`000?l0oooo0?ooo`1m0?ooo`80003o
+M`3oool001H0oooo00<000000?ooo`3oool0>@3oool00`000?l0oooo0?ooo`0d0?ooo`030000o`3o
+ool0oooo07d0oooo00<0003o0?ooo`3oool0M`3oool001H0oooo00<000000?ooo`3oool0>03oool0
+0`000?l0oooo0?ooo`0d0?ooo`030000o`3oool0oooo07`0oooo0P000?mj0?ooo`005P3oool00`00
+0000oooo0?ooo`0h0?ooo`030000o`3oool0oooo03<0oooo00<0003o0?ooo`3oool0O03oool00`00
+0?l0oooo0?ooo`1j0?ooo`005P3oool00`000000oooo0?ooo`0g0?ooo`030000o`3oool0oooo03 at 0
+oooo00<0003o0?ooo`3oool0N`3oool00`000?l0oooo0?ooo`1k0?ooo`005P3oool00`000000oooo
+0?ooo`0g0?ooo`030000o`3oool0oooo03<0oooo00<0003o0?ooo`3oool0NP3oool20000ogh0oooo
+000F0?ooo`030000003oool0oooo03H0oooo00<0003o0?ooo`3oool0<`3oool00`000?l0oooo0?oo
+o`1j0?ooo`030000o`3oool0oooo07h0oooo000F0?ooo`030000003oool0oooo03H0oooo00<0003o
+0?ooo`3oool0<P3oool00`000?l0oooo0?ooo`1j0?ooo`030000o`3oool0oooo07l0oooo000F0?oo
+o`030000003oool0oooo03D0oooo00<0003o0?ooo`3oool0<P3oool00`000?l0oooo0?ooo`1i0?oo
+o`80003oPP3oool001H0oooo00<000000?ooo`3oool0=@3oool00`000?l0oooo0?ooo`0b0?ooo`03
+0000o`3oool0oooo07P0oooo00<0003o0?ooo`3oool0PP3oool001H0oooo00<000000?ooo`3oool0
+=@3oool00`000?l0oooo0?ooo`0a0?ooo`030000o`3oool0oooo07P0oooo00<0003o0?ooo`3oool0
+P`3oool001H0oooo00<000000?ooo`3oool0=03oool00`000?l0oooo0?ooo`0a0?ooo`030000o`3o
+ool0oooo07L0oooo0P000?n60?ooo`005P3oool00`000000oooo0?ooo`0d0?ooo`030000o`3oool0
+oooo0300oooo00<0003o0?ooo`3oool0M`3oool00`000?l0oooo0?ooo`260?ooo`005P3oool00`00
+0000oooo0?ooo`0c0?ooo`030000o`3oool0oooo0300oooo00<0003o0?ooo`3oool0MP3oool20000
+ohT0oooo000F0?ooo`030000003oool0oooo03<0oooo00<0003o0?ooo`3oool0<03oool00`000?l0
+oooo0?ooo`1e0?ooo`030000o`3oool0oooo08T0oooo000F0?ooo`030000003oool0oooo0380oooo
+00<0003o0?ooo`3oool0<03oool00`000?l0oooo0?ooo`1d0?ooo`80003oS03oool000 at 0oooo0`00
+00030?ooo`030000003oool0oooo00<000001P3oool00`000000oooo0?ooo`0b0?ooo`030000o`3o
+ool0oooo02l0oooo00<0003o0?ooo`3oool0M03oool00`000?l0oooo0?ooo`2<0?ooo`000`3oool0
+1 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000
+003oool0oooo0380oooo00<0003o0?ooo`3oool0;P3oool00`000?l0oooo0?ooo`1d0?ooo`030000
+o`3oool0oooo08d0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo
+0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0<@3oool00`000?l0oooo0?ooo`0^0?ooo`03
+0000o`3oool0oooo07<0oooo0P000?n at 0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000D0
+oooo0`0000060?ooo`<00000<@3oool00`000?l0oooo0?ooo`0^0?ooo`030000o`3oool0oooo0780
+oooo00<0003o0?ooo`3oool0T03oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`05
+0000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`0`0?ooo`030000o`3oool0oooo
+02h0oooo00<0003o0?ooo`3oool0L at 3oool20000oi<0oooo00030?ooo`050000003oool0oooo0?oo
+o`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0<03oool0
+0`000?l0oooo0?ooo`0]0?ooo`030000o`3oool0oooo0740oooo00<0003o0?ooo`3oool0T`3oool0
+00 at 0oooo0`0000060?ooo`<000001P3oool00`000000oooo0?ooo`0_0?ooo`030000o`3oool0oooo
+02d0oooo00<0003o0?ooo`3oool0L03oool20000oiH0oooo000F0?ooo`030000003oool0oooo02l0
+oooo00<0003o0?ooo`3oool0;03oool00`000?l0oooo0?ooo`1`0?ooo`030000o`3oool0oooo09H0
+oooo000F0?ooo`030000003oool0oooo02h0oooo00<0003o0?ooo`3oool0;@3oool00`000?l0oooo
+0?ooo`1^0?ooo`80003oV at 3oool001H0oooo00<000000?ooo`3oool0;P3oool00`000?l0oooo0?oo
+o`0/0?ooo`030000o`3oool0oooo06h0oooo00<0003o0?ooo`3oool0V at 3oool001H0oooo00<00000
+0?ooo`3oool0;P3oool00`000?l0oooo0?ooo`0[0?ooo`030000o`3oool0oooo06d0oooo0P000?nL
+0?ooo`005P3oool00`000000oooo0?ooo`0]0?ooo`030000o`3oool0oooo02/0oooo00<0003o0?oo
+o`3oool0K at 3oool00`000?l0oooo0?ooo`2L0?ooo`005P3oool00`000000oooo0?ooo`0]0?ooo`03
+0000o`3oool0oooo02X0oooo00<0003o0?ooo`3oool0K03oool20000oil0oooo000F0?ooo`030000
+003oool0oooo02`0oooo00<0003o0?ooo`3oool0:`3oool00`000?l0oooo0?ooo`1[0?ooo`030000
+o`3oool0oooo09l0oooo000F0?ooo`030000003oool0oooo02`0oooo00<0003o0?ooo`3oool0:P3o
+ool00`000?l0oooo0?ooo`1Z0?ooo`80003oXP3oool001H0oooo00<000000?ooo`3oool0:`3oool0
+0`000?l0oooo0?ooo`0Z0?ooo`030000o`3oool0oooo06X0oooo00<0003o0?ooo`3oool0XP3oool0
+01H0oooo00<000000?ooo`3oool0:`3oool00`000?l0oooo0?ooo`0Y0?ooo`030000o`3oool0oooo
+06T0oooo0P000?nU0?ooo`005P3oool00`000000oooo0?ooo`0[0?ooo`030000o`3oool0oooo02P0
+oooo00<0003o0?ooo`3oool0J at 3oool00`000?l0oooo0?ooo`2U0?ooo`005P3oool00`000000oooo
+0?ooo`0Z0?ooo`030000o`3oool0oooo02T0oooo00<0003o0?ooo`3oool0I`3oool20000ojP0oooo
+000F0?ooo`030000003oool0oooo02X0oooo00<0003o0?ooo`3oool0:03oool00`000?l0oooo0?oo
+o`1W0?ooo`030000o`3oool0oooo0:P0oooo000F0?ooo`030000003oool0oooo02T0oooo00<0003o
+0?ooo`3oool0:03oool00`000?l0oooo0?ooo`1W0?ooo`030000o`3oool0oooo0:T0oooo000F0?oo
+o`030000003oool0oooo02T0oooo00<0003o0?ooo`3oool09`3oool00`000?l0oooo0?ooo`1V0?oo
+o`80003o[03oool001H0oooo00<000000?ooo`3oool0:@3oool00`000?l0oooo0?ooo`0W0?ooo`03
+0000o`3oool0oooo06D0oooo00<0003o0?ooo`3oool0[03oool001H0oooo00<000000?ooo`3oool0
+:03oool00`000?l0oooo0?ooo`0W0?ooo`030000o`3oool0oooo06D0oooo00<0003o0?ooo`3oool0
+[@3oool001H0oooo00<000000?ooo`3oool0:03oool00`000?l0oooo0?ooo`0V0?ooo`030000o`3o
+ool0oooo06 at 0oooo0P000?n`0?ooo`005P3oool00`000000oooo0?ooo`0W0?ooo`030000o`3oool0
+oooo02H0oooo00<0003o0?ooo`3oool0I03oool00`000?l0oooo0?ooo`2`0?ooo`005P3oool00`00
+0000oooo0?ooo`0W0?ooo`030000o`3oool0oooo02H0oooo00<0003o0?ooo`3oool0H`3oool00`00
+0?l0oooo0?ooo`2a0?ooo`005P3oool00`000000oooo0?ooo`0W0?ooo`030000o`3oool0oooo02D0
+oooo00<0003o0?ooo`3oool0HP3oool20000ok at 0oooo000F0?ooo`030000003oool0oooo02H0oooo
+00<0003o0?ooo`3oool09 at 3oool00`000?l0oooo0?ooo`1R0?ooo`030000o`3oool0oooo0;@0oooo
+000F0?ooo`030000003oool0oooo02H0oooo00<0003o0?ooo`3oool0903oool00`000?l0oooo0?oo
+o`1Q0?ooo`80003o]`3oool001H0oooo00<000000?ooo`3oool09 at 3oool00`000?l0oooo0?ooo`0U
+0?ooo`030000o`3oool0oooo0600oooo00<0003o0?ooo`3oool0]`3oool001H0oooo00<000000?oo
+o`3oool09 at 3oool00`000?l0oooo0?ooo`0T0?ooo`030000o`3oool0oooo05l0oooo0P000?nj0?oo
+o`005P3oool00`000000oooo0?ooo`0U0?ooo`030000o`3oool0oooo02<0oooo00<0003o0?ooo`3o
+ool0G`3oool00`000?l0oooo0?ooo`2j0?ooo`005P3oool00`000000oooo0?ooo`0T0?ooo`030000
+o`3oool0oooo02<0oooo00<0003o0?ooo`3oool0GP3oool20000okd0oooo000F0?ooo`030000003o
+ool0oooo02 at 0oooo00<0003o0?ooo`3oool08`3oool00`000?l0oooo0?ooo`1M0?ooo`030000o`3o
+ool0oooo0;d0oooo000F0?ooo`030000003oool0oooo02<0oooo00<0003o0?ooo`3oool08`3oool0
+0`000?l0oooo0?ooo`1L0?ooo`80003o`03oool001H0oooo00<000000?ooo`3oool08`3oool00`00
+0?l0oooo0?ooo`0R0?ooo`030000o`3oool0oooo05`0oooo00<0003o0?ooo`3oool0`03oool001H0
+oooo00<000000?ooo`3oool08P3oool00`000?l0oooo0?ooo`0R0?ooo`030000o`3oool0oooo05/0
+oooo0P000?o30?ooo`005P3oool00`000000oooo0?ooo`0R0?ooo`030000o`3oool0oooo0280oooo
+00<0003o0?ooo`3oool0FP3oool00`000?l0oooo0?ooo`330?ooo`005P3oool2000002<0oooo00<0
+003o0?ooo`3oool08 at 3oool00`000?l0oooo0?ooo`1I0?ooo`80003oaP3oool001H0oooo00<00000
+0?ooo`3oool08 at 3oool00`000?l0oooo0?ooo`0Q0?ooo`030000o`3oool0oooo05T0oooo00<0003o
+0?ooo`3oool0aP3oool001H0oooo00<000000?ooo`3oool08 at 3oool00`000?l0oooo0?ooo`0P0?oo
+o`030000o`3oool0oooo05P0oooo0P000?o90?ooo`005P3oool00`000000oooo0?ooo`0P0?ooo`03
+0000o`3oool0oooo0200oooo00<0003o0?ooo`3oool0F03oool00`000?l0oooo0?ooo`390?ooo`00
+5P3oool00`000000oooo0?ooo`0P0?ooo`030000o`3oool0oooo0200oooo00<0003o0?ooo`3oool0
+EP3oool20000ol`0oooo000F0?ooo`030000003oool0oooo0200oooo00<0003o0?ooo`3oool07`3o
+ool00`000?l0oooo0?ooo`1F0?ooo`030000o`3oool0oooo0<`0oooo000F0?ooo`030000003oool0
+oooo01l0oooo00<0003o0?ooo`3oool07`3oool00`000?l0oooo0?ooo`1E0?ooo`80003oc`3oool0
+01H0oooo00<000000?ooo`3oool07`3oool00`000?l0oooo0?ooo`0N0?ooo`030000o`3oool0oooo
+05D0oooo00<0003o0?ooo`3oool0c`3oool001H0oooo00<000000?ooo`3oool07P3oool00`000?l0
+oooo0?ooo`0N0?ooo`030000o`3oool0oooo05 at 0oooo0P000?oB0?ooo`005P3oool00`000000oooo
+0?ooo`0N0?ooo`030000o`3oool0oooo01h0oooo00<0003o0?ooo`3oool0D`3oool00`000?l0oooo
+0?ooo`3B0?ooo`005P3oool00`000000oooo0?ooo`0N0?ooo`030000o`3oool0oooo01d0oooo00<0
+003o0?ooo`3oool0DP3oool20000omD0oooo000F0?ooo`030000003oool0oooo01d0oooo00<0003o
+0?ooo`3oool07 at 3oool00`000?l0oooo0?ooo`1B0?ooo`030000o`3oool0oooo0=D0oooo000F0?oo
+o`030000003oool0oooo01d0oooo00<0003o0?ooo`3oool0703oool00`000?l0oooo0?ooo`1A0?oo
+o`80003oeP3oool20000o`005P3oool00`000000oooo0?ooo`0L0?ooo`030000o`3oool0oooo01`0
+oooo00<0003o0?ooo`3oool0D at 3oool00`000?l0oooo0?ooo`3C0?ooo`<0003o0P3oool001H0oooo
+00<000000?ooo`3oool0703oool00`000?l0oooo0?ooo`0L0?ooo`030000o`3oool0oooo04l0oooo
+0P000?oC0?ooo`<0003o1 at 3oool001H0oooo00<000000?ooo`3oool0703oool00`000?l0oooo0?oo
+o`0K0?ooo`030000o`3oool0oooo04l0oooo00<0003o0?ooo`3oool0d03oool30000o`P0oooo000F
+0?ooo`030000003oool0oooo01/0oooo00<0003o0?ooo`3oool06`3oool00`000?l0oooo0?ooo`1>
+0?ooo`80003od03oool30000o`/0oooo000F0?ooo`030000003oool0oooo01/0oooo00<0003o0?oo
+o`3oool06P3oool00`000?l0oooo0?ooo`1>0?ooo`030000o`3oool0oooo0<d0oooo0`000?l>0?oo
+o`005P3oool00`000000oooo0?ooo`0K0?ooo`030000o`3oool0oooo01X0oooo00<0003o0?ooo`3o
+ool0C03oool20000olh0oooo0P000?lA0?ooo`005P3oool00`000000oooo0?ooo`0J0?ooo`030000
+o`3oool0oooo01X0oooo00<0003o0?ooo`3oool0C03oool00`000?l0oooo0?ooo`3;0?ooo`<0003o
+4`3oool001H0oooo00<000000?ooo`3oool06P3oool00`000?l0oooo0?ooo`0I0?ooo`030000o`3o
+ool0oooo04/0oooo0P000?o<0?ooo`80003o5P3oool001H0oooo00<000000?ooo`3oool06P3oool0
+0`000?l0oooo0?ooo`0I0?ooo`030000o`3oool0oooo04X0oooo00<0003o0?ooo`3oool0b at 3oool3
+0000oaP0oooo000F0?ooo`030000003oool0oooo01T0oooo00<0003o0?ooo`3oool06 at 3oool00`00
+0?l0oooo0?ooo`190?ooo`80003obP3oool20000oa/0oooo000F0?ooo`030000003oool0oooo01T0
+oooo00<0003o0?ooo`3oool0603oool00`000?l0oooo0?ooo`190?ooo`030000o`3oool0oooo0<L0
+oooo0`000?lM0?ooo`005P3oool00`000000oooo0?ooo`0H0?ooo`030000o`3oool0oooo01T0oooo
+00<0003o0?ooo`3oool0A`3oool20000olL0oooo0`000?lP0?ooo`005P3oool00`000000oooo0?oo
+o`0H0?ooo`030000o`3oool0oooo01P0oooo00<0003o0?ooo`3oool0A`3oool00`000?l0oooo0?oo
+o`340?ooo`<0003o8`3oool001H0oooo00<000000?ooo`3oool0603oool00`000?l0oooo0?ooo`0G
+0?ooo`030000o`3oool0oooo04H0oooo0P000?o40?ooo`<0003o9P3oool001H0oooo00<000000?oo
+o`3oool05`3oool00`000?l0oooo0?ooo`0H0?ooo`030000o`3oool0oooo04D0oooo00<0003o0?oo
+o`3oool0`@3oool30000obT0oooo000F0?ooo`030000003oool0oooo01L0oooo00<0003o0?ooo`3o
+ool05`3oool00`000?l0oooo0?ooo`140?ooo`80003o`@3oool30000ob`0oooo000F0?ooo`030000
+003oool0oooo01L0oooo00<0003o0?ooo`3oool05P3oool00`000?l0oooo0?ooo`140?ooo`030000
+o`3oool0oooo0;h0oooo0`000?l_0?ooo`005P3oool00`000000oooo0?ooo`0F0?ooo`030000o`3o
+ool0oooo01L0oooo00<0003o0?ooo`3oool0 at P3oool20000okh0oooo0`000?lb0?ooo`005P3oool0
+0`000000oooo0?ooo`0F0?ooo`030000o`3oool0oooo01H0oooo00<0003o0?ooo`3oool0 at P3oool0
+0`000?l0oooo0?ooo`2k0?ooo`<0003o=@3oool001H0oooo00<000000?ooo`3oool05P3oool00`00
+0?l0oooo0?ooo`0E0?ooo`030000o`3oool0oooo0440oooo0P000?nk0?ooo`<0003o>03oool001H0
+oooo00<000000?ooo`3oool05 at 3oool00`000?l0oooo0?ooo`0F0?ooo`030000o`3oool0oooo0400
+oooo00<0003o0?ooo`3oool0^03oool30000oc/0oooo000F0?ooo`030000003oool0oooo01D0oooo
+00<0003o0?ooo`3oool05 at 3oool00`000?l0oooo0?ooo`0o0?ooo`80003o^03oool30000och0oooo
+000F0?ooo`030000003oool0oooo01D0oooo00<0003o0?ooo`3oool0503oool00`000?l0oooo0?oo
+o`0o0?ooo`030000o`3oool0oooo0;D0oooo0`000?m10?ooo`005P3oool2000001D0oooo00<0003o
+0?ooo`3oool05 at 3oool00`000?l0oooo0?ooo`0m0?ooo`80003o]03oool40000od at 0oooo000F0?oo
+o`030000003oool0oooo01 at 0oooo00<0003o0?ooo`3oool0503oool00`000?l0oooo0?ooo`0m0?oo
+o`030000o`3oool0oooo0;40oooo0`000?m80?ooo`005P3oool00`000000oooo0?ooo`0C0?ooo`03
+0000o`3oool0oooo01 at 0oooo00<0003o0?ooo`3oool0?03oool20000ok40oooo0`000?m;0?ooo`00
+5P3oool00`000000oooo0?ooo`0C0?ooo`030000o`3oool0oooo01 at 0oooo00<0003o0?ooo`3oool0
+>`3oool00`000?l0oooo0?ooo`2^0?ooo`<0003oCP3oool001H0oooo00<000000?ooo`3oool04`3o
+ool00`000?l0oooo0?ooo`0C0?ooo`030000o`3oool0oooo03X0oooo0P000?n^0?ooo`<0003oD at 3o
+ool001H0oooo00<000000?ooo`3oool04P3oool00`000?l0oooo0?ooo`0C0?ooo`030000o`3oool0
+oooo03X0oooo00<0003o0?ooo`3oool0Z`3oool30000oe at 0oooo000F0?ooo`030000003oool0oooo
+0180oooo00<0003o0?ooo`3oool04P3oool00`000?l0oooo0?ooo`0i0?ooo`80003oZ`3oool30000
+oeL0oooo000F0?ooo`030000003oool0oooo0180oooo00<0003o0?ooo`3oool04P3oool00`000?l0
+oooo0?ooo`0g0?ooo`80003oZP3oool30000oeX0oooo000F0?ooo`030000003oool0oooo0140oooo
+00<0003o0?ooo`3oool04P3oool00`000?l0oooo0?ooo`0g0?ooo`030000o`3oool0oooo0:L0oooo
+0`000?mM0?ooo`005P3oool00`000000oooo0?ooo`0A0?ooo`030000o`3oool0oooo0140oooo00<0
+003o0?ooo`3oool0=P3oool20000ojL0oooo0`000?mP0?ooo`005P3oool00`000000oooo0?ooo`0A
+0?ooo`030000o`3oool0oooo0140oooo00<0003o0?ooo`3oool0=@3oool00`000?l0oooo0?ooo`2S
+0?ooo`@0003oH`3oool001H0oooo00<000000?ooo`3oool0403oool00`000?l0oooo0?ooo`0A0?oo
+o`030000o`3oool0oooo03 at 0oooo0P000?nS0?ooo`<0003oI`3oool001H0oooo00<000000?ooo`3o
+ool0403oool00`000?l0oooo0?ooo`0 at 0?ooo`030000o`3oool0oooo03<0oooo0P000?nR0?ooo`<0
+003oJP3oool001H0oooo00<000000?ooo`3oool0403oool00`000?l0oooo0?ooo`0?0?ooo`030000
+o`3oool0oooo03<0oooo00<0003o0?ooo`3oool0WP3oool40000ofd0oooo000F0?ooo`030000003o
+ool0oooo00l0oooo00<0003o0?ooo`3oool0403oool00`000?l0oooo0?ooo`0a0?ooo`80003oWP3o
+ool30000og40oooo000F0?ooo`030000003oool0oooo00l0oooo00<0003o0?ooo`3oool03`3oool0
+0`000?l0oooo0?ooo`0a0?ooo`030000o`3oool0oooo09X0oooo10000?md0?ooo`005P3oool00`00
+0000oooo0?ooo`0>0?ooo`030000o`3oool0oooo00l0oooo00<0003o0?ooo`3oool0<03oool20000
+oiX0oooo0`000?mh0?ooo`005P3oool00`000000oooo0?ooo`0>0?ooo`030000o`3oool0oooo00l0
+oooo00<0003o0?ooo`3oool0;`3oool00`000?l0oooo0?ooo`2F0?ooo`@0003oN`3oool001H0oooo
+00<000000?ooo`3oool03P3oool00`000?l0oooo0?ooo`0>0?ooo`030000o`3oool0oooo02h0oooo
+0P000?nE0?ooo`@0003oO`3oool001H0oooo00<000000?ooo`3oool03 at 3oool00`000?l0oooo0?oo
+o`0>0?ooo`030000o`3oool0oooo02h0oooo00<0003o0?ooo`3oool0T at 3oool40000oh<0oooo000F
+0?ooo`030000003oool0oooo00d0oooo00<0003o0?ooo`3oool03 at 3oool00`000?l0oooo0?ooo`0]
+0?ooo`80003oT at 3oool30000ohL0oooo000F0?ooo`030000003oool0oooo00d0oooo00<0003o0?oo
+o`3oool03 at 3oool00`000?l0oooo0?ooo`0/0?ooo`030000o`3oool0oooo08h0oooo0`000?n:0?oo
+o`005P3oool00`000000oooo0?ooo`0<0?ooo`030000o`3oool0oooo00d0oooo00<0003o0?ooo`3o
+ool0:`3oool20000ohh0oooo0`000?n=0?ooo`005P3oool00`000000oooo0?ooo`0<0?ooo`030000
+o`3oool0oooo00`0oooo00<0003o0?ooo`3oool0:`3oool00`000?l0oooo0?ooo`2:0?ooo`@0003o
+T03oool001H0oooo00<000000?ooo`3oool0303oool00`000?l0oooo0?ooo`0<0?ooo`030000o`3o
+ool0oooo02T0oooo0P000?n:0?ooo`<0003oU03oool001H0oooo00<000000?ooo`3oool02`3oool0
+0`000?l0oooo0?ooo`0<0?ooo`030000o`3oool0oooo02T0oooo00<0003o0?ooo`3oool0Q`3oool3
+0000oiL0oooo000F0?ooo`030000003oool0oooo00/0oooo00<0003o0?ooo`3oool02`3oool00`00
+0?l0oooo0?ooo`0X0?ooo`80003oQP3oool40000oiX0oooo000F0?ooo`030000003oool0oooo00/0
+oooo00<0003o0?ooo`3oool02`3oool00`000?l0oooo0?ooo`0V0?ooo`80003oQ03oool40000oih0
+oooo000F0?ooo`030000003oool0oooo00X0oooo00<0003o0?ooo`3oool02`3oool00`000?l0oooo
+0?ooo`0V0?ooo`030000o`3oool0oooo0800oooo10000?nR0?ooo`005P3oool00`000000oooo0?oo
+o`0:0?ooo`030000o`3oool0oooo00/0oooo00<0003o0?ooo`3oool0903oool20000oh00oooo0`00
+0?nV0?ooo`005P3oool00`000000oooo0?ooo`0:0?ooo`030000o`3oool0oooo00X0oooo00<0003o
+0?ooo`3oool0903oool00`000?l0oooo0?ooo`1l0?ooo`@0003oZ at 3oool001H0oooo00<000000?oo
+o`3oool02P3oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo02<0oooo0P000?mk0?oo
+o`@0003o[@3oool001H0oooo00<000000?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`0:0?ooo`03
+0000o`3oool0oooo0240oooo0P000?mi0?ooo`@0003o/@3oool001H0oooo00<000000?ooo`3oool0
+2 at 3oool00`000?l0oooo0?ooo`090?ooo`030000o`3oool0oooo0240oooo00<0003o0?ooo`3oool0
+MP3oool30000okD0oooo000F0?ooo`030000003oool0oooo00T0oooo00<0003o0?ooo`3oool0203o
+ool00`000?l0oooo0?ooo`0P0?ooo`80003oM at 3oool40000okP0oooo000F0?ooo`030000003oool0
+oooo00P0oooo00<0003o0?ooo`3oool02 at 3oool00`000?l0oooo0?ooo`0O0?ooo`030000o`3oool0
+oooo0740oooo10000?nl0?ooo`005P3oool00`000000oooo0?ooo`080?ooo`030000o`3oool0oooo
+00P0oooo00<0003o0?ooo`3oool07P3oool20000og00oooo10000?o00?ooo`005P3oool2000000T0
+oooo00<0003o0?ooo`3oool01`3oool00`000?l0oooo0?ooo`0N0?ooo`030000o`3oool0oooo06`0
+oooo10000?o40?ooo`005P3oool00`000000oooo0?ooo`070?ooo`030000o`3oool0oooo00P0oooo
+00<0003o0?ooo`3oool0703oool20000ofX0oooo1 at 000?o80?ooo`005P3oool00`000000oooo0?oo
+o`070?ooo`030000o`3oool0oooo00L0oooo00<0003o0?ooo`3oool06`3oool20000ofL0oooo1 at 00
+0?o=0?ooo`005P3oool00`000000oooo0?ooo`070?ooo`030000o`3oool0oooo00H0oooo00<0003o
+0?ooo`3oool06`3oool00`000?l0oooo0?ooo`1S0?ooo`@0003odP3oool001H0oooo00<000000?oo
+o`3oool01`3oool00`000?l0oooo0?ooo`060?ooo`030000o`3oool0oooo01T0oooo0P000?mR0?oo
+o`@0003oeP3oool001H0oooo00<000000?ooo`3oool01P3oool00`000?l0oooo0?ooo`060?ooo`03
+0000o`3oool0oooo01T0oooo00<0003o0?ooo`3oool0GP3oool40000omX0oooo000F0?ooo`030000
+003oool0oooo00H0oooo00<0003o0?ooo`3oool01P3oool00`000?l0oooo0?ooo`0G0?ooo`80003o
+G at 3oool40000omh0oooo000F0?ooo`030000003oool0oooo00H0oooo00<0003o0?ooo`3oool01 at 3o
+ool00`000?l0oooo0?ooo`0G0?ooo`030000o`3oool0oooo05T0oooo10000?oR0?ooo`005P3oool0
+0`000000oooo0?ooo`050?ooo`030000o`3oool0oooo00D0oooo00<0003o0?ooo`3oool05P3oool2
+0000oeL0oooo1 at 000?oN0?ooo`P0003o000F0?ooo`030000003oool0oooo00D0oooo00<0003o0?oo
+o`3oool01 at 3oool00`000?l0oooo0?ooo`0E0?ooo`030000o`3oool0oooo0580oooo1 at 000?oH0?oo
+o`/0003o203oool001H0oooo00<000000?ooo`3oool01 at 3oool00`000?l0oooo0?ooo`040?ooo`03
+0000o`3oool0oooo01 at 0oooo0P000?mA0?ooo`@0003oe at 3oool80000oa<0oooo000F0?ooo`030000
+003oool0oooo00 at 0oooo00<0003o0?ooo`3oool0103oool00`000?l0oooo0?ooo`0D0?ooo`030000
+o`3oool0oooo04d0oooo10000?oB0?ooo`L0003o6`3oool001H0oooo00<000000?ooo`3oool0103o
+ool00`000?l0oooo0?ooo`040?ooo`030000o`3oool0oooo0180oooo0P000?m<0?ooo`@0003ocP3o
+ool80000ob80oooo000F0?ooo`030000003oool0oooo00 at 0oooo00<0003o0?ooo`3oool00`3oool0
+0`000?l0oooo0?ooo`0B0?ooo`030000o`3oool0oooo04P0oooo10000?o70?ooo`/0003o:P3oool0
+01H0oooo00<000000?ooo`3oool0103oool00`000?l0oooo0?ooo`030?ooo`030000o`3oool0oooo
+0100oooo0P000?m70?ooo`@0003o`03oool;0000ocD0oooo000F0?ooo`030000003oool0oooo00<0
+oooo00<0003o0?ooo`3oool00`3oool00`000?l0oooo0?ooo`0 at 0?ooo`030000o`3oool0oooo0480
+oooo1 at 000?nl0?ooo`P0003o at 03oool001H0oooo00<000000?ooo`3oool00`3oool00`000?l0oooo
+0?ooo`030?ooo`030000o`3oool0oooo00h0oooo0P000?lo0?ooo`H0003o]@3oool<0000odP0oooo
+000F0?ooo`030000003oool0oooo00<0oooo00<0003o0?ooo`3oool00P3oool00`000?l0oooo0?oo
+o`0>0?ooo`030000o`3oool0oooo03/0oooo10000?n`0?ooo`/0003oE03oool001H0oooo00<00000
+0?ooo`3oool00P3oool00`000?l0oooo0?ooo`020?ooo`030000o`3oool0oooo00d0oooo0P000?lj
+0?ooo`@0003o[03oool80000oel0oooo000F0?ooo`030000003oool0oooo0080oooo00<0003o0?oo
+o`3oool00P3oool00`000?l0oooo0?ooo`0;0?ooo`80003o>03oool40000ojD0oooo2`000?mW0?oo
+o`005P3oool00`000000oooo0?ooo`020?ooo`050000o`3oool0oooo0?ooo`000?l03 at 3oool00`00
+0?l0oooo0?ooo`0d0?ooo`@0003oVP3oool?0000og80oooo000F0?ooo`050000003oool0oooo0?oo
+o`000?l0103oool00`000?l0oooo0?ooo`090?ooo`80003o<`3oool40000oi<0oooo2`000?n10?oo
+o`005P3oool01 at 000000oooo0?ooo`3oool0003o00<0oooo00<0003o0?ooo`3oool02 at 3oool00`00
+0?l0oooo0?ooo`0^0?ooo`D0003oS`3oool80000oh`0oooo000F0?ooo`050000003oool0oooo0?oo
+o`000?l00P3oool00`000?l0oooo0?ooo`080?ooo`80003o:`3oool60000ohP0oooo30000?nD0?oo
+o`005P3oool01 at 000000oooo0?ooo`3oool0003o0080oooo00<0003o0?ooo`3oool01P3oool20000
+obP0oooo1 at 000?mo0?ooo`l0003oX03oool001H0oooo00 at 000000?ooo`3oool0003o0P3oool00`00
+0?l0oooo0?ooo`060?ooo`030000o`3oool0oooo02 at 0oooo10000?me0?ooo`l0003o[`3oool001H0
+oooo00 at 000000?ooo`3oool0003o0P3oool00`000?l0oooo0?ooo`040?ooo`80003o8P3oool50000
+ofX0oooo3`000?nn0?ooo`005P3oool01P000000oooo0?ooo`000?l0oooo0000o`H0oooo00<0003o
+0?ooo`3oool07 at 3oool50000of00oooo3`000?o=0?ooo`005P3oool00`000000oooo0000o`020?oo
+o`030000o`3oool0oooo00<0oooo00<0003o0?ooo`3oool06 at 3oool50000oeH0oooo3`000?oL0?oo
+o`005P3oool01 at 000000oooo0000o`3oool0003o00 at 0oooo0P000?lG0?ooo`D0003oC03oool?0000
+om at 0oooo5`000?l001H0oooo00 at 000000?ooo`000?l0003o103oool00`000?l0oooo0?ooo`0B0?oo
+o`D0003o at P3oool?0000okH0oooo;@000?lG0?ooo`005P3oool010000000003o0?ooo`000?l30?oo
+o`030000o`3oool0oooo00h0oooo1 at 000?lg0?oooa00003oYP3ooolO0000od at 0oooo000F0?ooo`03
+000000000?l0003o0080oooo0P000?l;0?ooo`H0003o;@3oool?0000ohT0oooo;@000?mS0?ooo`00
+3`3oool00`000000oooo0?ooo`040?ooo`05000000000?l0003o0?ooo`000?l0203oool50000ob at 0
+oooo3`000?mK0?ooocd0003oT03oool000l0oooo00<000000?ooo`3oool0103oool010000000003o
+0?ooo`000?l40?ooo`D0003o2`3ooolN0000obh0oooo?0000?nH0?ooocD0003o000?0?ooo`030000
+003oool0oooo00 at 0oooo60000?l?0?ooocd0003o7P3ooonf0000ocD0oooo000?0?ooo`030000003o
+ool0oooo00 at 0ooooo`000?m^0000o`003 at 3oool00`000000oooo0000003o0?ooog at 0oooo000>0?oo
+o`800000o`3ooomd0?ooo`003`3oool00`000000oooo0?ooo`3o0?ooog80oooo003o0?oooh at 0oooo
+003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo
+003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo
+003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo003o0?oooh at 0oooo0000\
+\>"],
+  ImageRangeCache->{{{0, 386}, {773, 0}} -> {-0.479522, -0.0379257, 0.0212695,
+   0.00137569}}]
+}, Open  ]],
+
+Cell[BoxData[
+    \(<< Graphics`MultipleListPlot`\)], "Input"],
+
+Cell[BoxData[
+    \(trapezoidal[l_, h_] := 
+      \((h/\((Length[l] - 1)\))\)*
+        \((\((1/2)\)*\((l[\([1]\)] + l[\([Length[l]]\)])\) + 
+            \((Plus@@Take[l, {2, Length[l] - 1}])\))\)\)], "Input"],
+
+Cell[BoxData[
+    \(simpson[l_, h_] := 
+      \((h/\((3*Length[l] - 3)\))\)*
+        \((Plus@@
+            MapIndexed[#1*
+                  \((\(If[EvenQ[#], 4, If[# > 1 && # < Length[l], 2, 1]]&
+                        \)[#2[\([1]\)]])\)&, l])\)\)], "Input"],
+
+Cell[BoxData[
+    \(mag2[v_] := Plus@@\((\(#*#&\)/@v)\)\)], "Input"],
+
+Cell[BoxData[
+    \(mag[v_] := Sqrt[mag2[v]]\)], "Input"],
+
+Cell[BoxData[
+    \(fwtable[a_, n_] := 
+      Sqrt[Length[a]]*
+        Transpose[
+          \(#/mag2[#]&\)/@
+            Transpose[
+              Sqrt[2*n]*
+                \((\(Abs[
+                        Drop[Fourier[Join[#, Table[0, {2*n - Length[#]}]]], 
+                          \(-n\) + 1]]&\)/@a)\)]]\)], "Input"],
+
+Cell["\<\
+We define Theora's DCT in terms of its iDCT implementation, since that is \
+standardized while the fDCT implementation is not. The values below were \
+obtained by pretending the integer transform was linear, and replacing all \
+integer operations with floating point ones in order to compute the basis \
+functions.\
+\>", "Text"],
+
+Cell[BoxData[
+    \(\(\ \ \ \ \ 
+    theoraidct8
+       := {{0.176776885986328125, 0.245197296142578125, 0.230968475341796875, 
+          0.207866668701171875, 0.176776885986328125, 0.13889312744140625, 
+          0.095672607421875, 0.048770904541015625}, {0.176776885986328125, 
+          0.20786713238339871168136596679688, 0.095672607421875, 
+          \(-0.04877171135740354657173156738281\), \(-0.176776885986328125\), 
+          \(-0.24519646778935566544532775878906\), \(-0.230968475341796875\), 
+          \(-0.13889458333142101764678955078125\)}, {0.176776885986328125, 
+          0.13889458333142101764678955078125, \(-0.095672607421875\), 
+          \(-0.24519646778935566544532775878906\), \(-0.176776885986328125\), 
+          0.04877171135740354657173156738281, 0.230968475341796875, 
+          0.20786713238339871168136596679688}, {0.176776885986328125, 
+          0.048770904541015625, \(-0.230968475341796875\), 
+          \(-0.13889312744140625\), 0.176776885986328125, 
+          0.207866668701171875, \(-0.095672607421875\), 
+          \(-0.245197296142578125\)}, {0.176776885986328125, 
+          \(-0.048770904541015625\), \(-0.230968475341796875\), 
+          0.13889312744140625, 0.176776885986328125, 
+          \(-0.207866668701171875\), \(-0.095672607421875\), 
+          0.245197296142578125}, {0.176776885986328125, 
+          \(-0.13889458333142101764678955078125\), \(-0.095672607421875\), 
+          0.24519646778935566544532775878906, \(-0.176776885986328125\), 
+          \(-0.04877171135740354657173156738281\), 0.230968475341796875, 
+          \(-0.20786713238339871168136596679688\)}, {0.176776885986328125, 
+          \(-0.20786713238339871168136596679688\), 0.095672607421875, 
+          0.04877171135740354657173156738281, \(-0.176776885986328125\), 
+          0.24519646778935566544532775878906, \(-0.230968475341796875\), 
+          0.13889458333142101764678955078125}, {0.176776885986328125, 
+          \(-0.245197296142578125\), 0.230968475341796875, 
+          \(-0.207866668701171875\), 0.176776885986328125, 
+          \(-0.13889312744140625\), 0.095672607421875, 
+          \(-0.048770904541015625\)}}\)\)], "Input"],
+
+Cell[BoxData[
+    \(theoradct8 := Inverse[theoraidct8]\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(Show[
+      GraphicsArray[
+        Table[BarChart[theoradct8[\([i + j*2]\)], Axes -> {False, True}, 
+            BarGroupSpacing -> 0, BarStyle -> {GrayLevel[0]}, 
+            PlotRange -> {{0, 8}, {\(-1\), 1}}, 
+            DisplayFunction -> Identity], {j, 0, 3}, {i, 2}]]]; \)\)], "Input"],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: 1.2655 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.47619 0.0301309 0.47619 [
+[ 0 0 0 0 ]
+[ 1 1.2655 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 0 m
+1 0 L
+1 1.2655 L
+0 1.2655 L
+closepath
+clip
+newpath
+% Start of sub-graphic
+p
+0.0238095 0.0301309 0.477324 0.310418 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .42728 L
+.1875 .42728 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .42728 L
+.1875 .42728 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .02352 L
+.3125 .02352 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .02352 L
+.3125 .02352 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .59451 L
+.4375 .59451 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .59451 L
+.4375 .59451 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .19076 L
+.5625 .19076 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .19076 L
+.5625 .19076 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .19076 L
+.6875 .19076 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .19076 L
+.6875 .19076 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .59451 L
+.8125 .59451 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .59451 L
+.8125 .59451 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .02352 L
+.9375 .02352 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .02352 L
+.9375 .02352 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .42728 L
+1.0625 .42728 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .42728 L
+s
+.9375 .42728 m
+1 .42728 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% Start of sub-graphic
+p
+0.522676 0.0301309 0.97619 0.310418 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .3693 L
+.1875 .3693 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .3693 L
+.1875 .3693 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .13734 L
+.3125 .13734 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .13734 L
+.3125 .13734 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .56595 L
+.4375 .56595 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .56595 L
+.4375 .56595 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .00594 L
+.5625 .00594 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .00594 L
+.5625 .00594 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .6121 L
+.6875 .6121 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .6121 L
+.6875 .6121 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .05208 L
+.8125 .05208 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .05208 L
+.8125 .05208 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .4807 L
+.9375 .4807 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .4807 L
+.9375 .4807 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .24873 L
+1.0625 .24873 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .24873 L
+s
+.9375 .24873 m
+1 .24873 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% Start of sub-graphic
+p
+0.0238095 0.338447 0.477324 0.618735 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .52752 L
+.1875 .52752 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .52752 L
+.1875 .52752 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .09051 L
+.3125 .09051 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .09051 L
+.3125 .09051 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .09051 L
+.4375 .09051 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .09051 L
+.4375 .09051 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .52752 L
+.5625 .52752 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .52752 L
+.5625 .52752 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .52752 L
+.6875 .52752 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .52752 L
+.6875 .52752 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .09051 L
+.8125 .09051 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .09051 L
+.8125 .09051 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .09051 L
+.9375 .09051 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .09051 L
+.9375 .09051 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .52752 L
+1.0625 .52752 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .52752 L
+s
+.9375 .52752 m
+1 .52752 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% Start of sub-graphic
+p
+0.522676 0.338447 0.97619 0.618735 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .4807 L
+.1875 .4807 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .4807 L
+.1875 .4807 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .00594 L
+.3125 .00594 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .00594 L
+.3125 .00594 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .3693 L
+.4375 .3693 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .3693 L
+.4375 .3693 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .56595 L
+.5625 .56595 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .56595 L
+.5625 .56595 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .05208 L
+.6875 .05208 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .05208 L
+.6875 .05208 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .24873 L
+.8125 .24873 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .24873 L
+.8125 .24873 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .6121 L
+.9375 .6121 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .6121 L
+.9375 .6121 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .13734 L
+1.0625 .13734 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .13734 L
+s
+.9375 .13734 m
+1 .13734 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% Start of sub-graphic
+p
+0.0238095 0.646763 0.477324 0.927051 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .59451 L
+.1875 .59451 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .59451 L
+.1875 .59451 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .42728 L
+.3125 .42728 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .42728 L
+.3125 .42728 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .19076 L
+.4375 .19076 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .19076 L
+.4375 .19076 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .02352 L
+.5625 .02352 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .02352 L
+.5625 .02352 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .02352 L
+.6875 .02352 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .02352 L
+.6875 .02352 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .19076 L
+.8125 .19076 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .19076 L
+.8125 .19076 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .42728 L
+.9375 .42728 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .42728 L
+.9375 .42728 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .59451 L
+1.0625 .59451 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .59451 L
+s
+.9375 .59451 m
+1 .59451 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% Start of sub-graphic
+p
+0.522676 0.646763 0.97619 0.927051 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .56595 L
+.1875 .56595 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .56595 L
+.1875 .56595 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .24873 L
+.3125 .24873 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .24873 L
+.3125 .24873 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .00594 L
+.4375 .00594 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .00594 L
+.4375 .00594 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .13734 L
+.5625 .13734 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .13734 L
+.5625 .13734 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .4807 L
+.6875 .4807 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .4807 L
+.6875 .4807 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .6121 L
+.8125 .6121 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .6121 L
+.8125 .6121 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .3693 L
+.9375 .3693 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .3693 L
+.9375 .3693 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .05208 L
+1.0625 .05208 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .05208 L
+s
+.9375 .05208 m
+1 .05208 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% Start of sub-graphic
+p
+0.0238095 0.95508 0.477324 1.23537 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .52752 L
+.1875 .52752 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .52752 L
+.1875 .52752 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .52752 L
+.3125 .52752 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .52752 L
+.3125 .52752 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .52752 L
+.4375 .52752 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .52752 L
+.4375 .52752 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .52752 L
+.5625 .52752 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .52752 L
+.5625 .52752 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .52752 L
+.6875 .52752 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .52752 L
+.6875 .52752 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .52752 L
+.8125 .52752 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .52752 L
+.8125 .52752 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .52752 L
+.9375 .52752 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .52752 L
+.9375 .52752 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .52752 L
+1.0625 .52752 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .52752 L
+s
+.9375 .52752 m
+1 .52752 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% Start of sub-graphic
+p
+0.522676 0.95508 0.97619 1.23537 MathSubStart
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0 0.125 0.309017 0.309017 [
+[-0.0125 0 -12 -4.5 ]
+[-0.0125 0 0 4.5 ]
+[-0.0125 .07725 -30 -4.5 ]
+[-0.0125 .07725 0 4.5 ]
+[-0.0125 .15451 -24 -4.5 ]
+[-0.0125 .15451 0 4.5 ]
+[-0.0125 .23176 -30 -4.5 ]
+[-0.0125 .23176 0 4.5 ]
+[-0.0125 .30902 -6 -4.5 ]
+[-0.0125 .30902 0 4.5 ]
+[-0.0125 .38627 -24 -4.5 ]
+[-0.0125 .38627 0 4.5 ]
+[-0.0125 .46353 -18 -4.5 ]
+[-0.0125 .46353 0 4.5 ]
+[-0.0125 .54078 -24 -4.5 ]
+[-0.0125 .54078 0 4.5 ]
+[-0.0125 .61803 -6 -4.5 ]
+[-0.0125 .61803 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+0 0 m
+.00625 0 L
+s
+[(-1)] -0.0125 0 1 0 Mshowa
+0 .07725 m
+.00625 .07725 L
+s
+[(-0.75)] -0.0125 .07725 1 0 Mshowa
+0 .15451 m
+.00625 .15451 L
+s
+[(-0.5)] -0.0125 .15451 1 0 Mshowa
+0 .23176 m
+.00625 .23176 L
+s
+[(-0.25)] -0.0125 .23176 1 0 Mshowa
+0 .30902 m
+.00625 .30902 L
+s
+[(0)] -0.0125 .30902 1 0 Mshowa
+0 .38627 m
+.00625 .38627 L
+s
+[(0.25)] -0.0125 .38627 1 0 Mshowa
+0 .46353 m
+.00625 .46353 L
+s
+[(0.5)] -0.0125 .46353 1 0 Mshowa
+0 .54078 m
+.00625 .54078 L
+s
+[(0.75)] -0.0125 .54078 1 0 Mshowa
+0 .61803 m
+.00625 .61803 L
+s
+[(1)] -0.0125 .61803 1 0 Mshowa
+.125 Mabswid
+0 .01545 m
+.00375 .01545 L
+s
+0 .0309 m
+.00375 .0309 L
+s
+0 .04635 m
+.00375 .04635 L
+s
+0 .0618 m
+.00375 .0618 L
+s
+0 .09271 m
+.00375 .09271 L
+s
+0 .10816 m
+.00375 .10816 L
+s
+0 .12361 m
+.00375 .12361 L
+s
+0 .13906 m
+.00375 .13906 L
+s
+0 .16996 m
+.00375 .16996 L
+s
+0 .18541 m
+.00375 .18541 L
+s
+0 .20086 m
+.00375 .20086 L
+s
+0 .21631 m
+.00375 .21631 L
+s
+0 .24721 m
+.00375 .24721 L
+s
+0 .26266 m
+.00375 .26266 L
+s
+0 .27812 m
+.00375 .27812 L
+s
+0 .29357 m
+.00375 .29357 L
+s
+0 .32447 m
+.00375 .32447 L
+s
+0 .33992 m
+.00375 .33992 L
+s
+0 .35537 m
+.00375 .35537 L
+s
+0 .37082 m
+.00375 .37082 L
+s
+0 .40172 m
+.00375 .40172 L
+s
+0 .41717 m
+.00375 .41717 L
+s
+0 .43262 m
+.00375 .43262 L
+s
+0 .44807 m
+.00375 .44807 L
+s
+0 .47898 m
+.00375 .47898 L
+s
+0 .49443 m
+.00375 .49443 L
+s
+0 .50988 m
+.00375 .50988 L
+s
+0 .52533 m
+.00375 .52533 L
+s
+0 .55623 m
+.00375 .55623 L
+s
+0 .57168 m
+.00375 .57168 L
+s
+0 .58713 m
+.00375 .58713 L
+s
+0 .60258 m
+.00375 .60258 L
+s
+.25 Mabswid
+0 0 m
+0 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.0625 .30902 m
+.0625 .6121 L
+.1875 .6121 L
+.1875 .30902 L
+F
+.5 Mabswid
+.0625 .30902 m
+.0625 .6121 L
+.1875 .6121 L
+.1875 .30902 L
+.0625 .30902 L
+s
+.1875 .30902 m
+.1875 .56595 L
+.3125 .56595 L
+.3125 .30902 L
+F
+.1875 .30902 m
+.1875 .56595 L
+.3125 .56595 L
+.3125 .30902 L
+.1875 .30902 L
+s
+.3125 .30902 m
+.3125 .4807 L
+.4375 .4807 L
+.4375 .30902 L
+F
+.3125 .30902 m
+.3125 .4807 L
+.4375 .4807 L
+.4375 .30902 L
+.3125 .30902 L
+s
+.4375 .30902 m
+.4375 .3693 L
+.5625 .3693 L
+.5625 .30902 L
+F
+.4375 .30902 m
+.4375 .3693 L
+.5625 .3693 L
+.5625 .30902 L
+.4375 .30902 L
+s
+.5625 .30902 m
+.5625 .24873 L
+.6875 .24873 L
+.6875 .30902 L
+F
+.5625 .30902 m
+.5625 .24873 L
+.6875 .24873 L
+.6875 .30902 L
+.5625 .30902 L
+s
+.6875 .30902 m
+.6875 .13734 L
+.8125 .13734 L
+.8125 .30902 L
+F
+.6875 .30902 m
+.6875 .13734 L
+.8125 .13734 L
+.8125 .30902 L
+.6875 .30902 L
+s
+.8125 .30902 m
+.8125 .05208 L
+.9375 .05208 L
+.9375 .30902 L
+F
+.8125 .30902 m
+.8125 .05208 L
+.9375 .05208 L
+.9375 .30902 L
+.8125 .30902 L
+s
+.9375 .30902 m
+.9375 .00594 L
+1.0625 .00594 L
+1.0625 .30902 L
+F
+.9375 .30902 m
+.9375 .00594 L
+s
+.9375 .00594 m
+1 .00594 L
+s
+1 .30902 m
+.9375 .30902 L
+s
+MathSubEnd
+P
+% End of sub-graphic
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{388.25, 491.375},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`4000640001jb000`400?l00000o`00003oo`3ooon5
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon5
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon5
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon5
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00903oool00`000000oooo0?oo
+o`2n0?ooo`030000003oool0oooo09`0oooo000T0?ooo`030000003oool0oooo0;h0oooo00<00000
+0?ooo`3oool0W03oool001h0oooo0P0000040?ooo`030000003oool0oooo0;P0oooo0P0000040?oo
+o`030000003oool0oooo09`0oooo000T0?ooo`040000003oool0oooo0?ooo`800000^`3oool00`00
+0000oooo0?ooo`020?ooo`800000V03oool00280oooo00<000000?ooo`0000000`3oool00`000000
+oooo0?ooo`2h0?ooo`030000003oool0000000 at 0oooo00<000000?ooo`3oool0?03ooolC000004P0
+oooo000S0?ooo`8000000`3oool200000;X0oooo0P0000040?ooo`030000003oool0oooo03`0oooo
+4`0000180?ooo`00903oool01 at 000000oooo0?ooo`3oool0000001X0oooo4`0000170?oooa<00000
+=@3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo03`0oooo4`0000180?ooo`00:03o
+ool2000001T0oooo4`0000170?oooa<00000>P3oool00`000000oooo0?ooo`0l0?oooa<00000B03o
+ool002P0oooo00<000000?ooo`3oool0603ooolC000004L0oooo4`00000j0?ooo`030000003oool0
+oooo03`0oooo4`0000180?ooo`00:03oool2000001T0oooo4`0000170?oooa<00000>P3oool00`00
+0000oooo0?ooo`0l0?oooa<00000B03oool002P0oooo00<000000?ooo`3oool0603ooolC000004L0
+oooo4`00000j0?ooo`030000003oool0oooo03`0oooo4`00000A0?oooa<00000903oool001<0oooo
+0`0000030?ooo`040000003oool0oooo000000D0oooo0`0000030?ooo`030000003oool0oooo01P0
+oooo4`0000170?oooa<00000903oool3000000<0oooo00 at 000000?ooo`3oool000001 at 3oool30000
+00 at 0oooo00<000000?ooo`3oool0?03ooolC00000140oooo4`00000T0?ooo`004P3oool01 at 000000
+oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`3oool0
+00000080oooo0P00000I0?oooa<00000A`3ooolC000002<0oooo00D000000?ooo`3oool0oooo0000
+00050?ooo`030000003oool0oooo0080oooo00D000000?ooo`3oool0oooo000000030?ooo`030000
+003oool0oooo03`0oooo4`00000A0?oooa<00000903oool000l0oooo0P0000000`3oool000000?oo
+o`020?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool01 at 3oool010000000oooo0?oo
+o`00000J0?oooa<00000A`3ooolC00000200oooo0P0000000`3oool000000?ooo`020?ooo`030000
+003oool0oooo00 at 0oooo00<000000?ooo`3oool01 at 3oool01@000000oooo0?ooo`3oool0000003h0
+oooo4`00000A0?oooa<00000903oool00180oooo00D000000?ooo`3oool0oooo000000060?ooo`05
+0000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`02000001T0oooo4`0000170?oo
+oa<000008`3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00D000000?ooo`3oool0oooo0000
+00030?ooo`040000003oool0oooo0?ooo`800000?@3ooolC00000140oooo4`00000T0?ooo`004P3o
+ool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0100000030?ooo`030000
+003oool0oooo01P0oooo4`0000170?oooa<000008`3oool01 at 000000oooo0?ooo`3oool0000000L0
+oooo00<000000?ooo`3oool0100000040?ooo`030000003oool0oooo03`0oooo4`00000A0?oooa<0
+0000903oool00180oooo00D000000?ooo`3oool0oooo000000070?ooo`050000003oool0oooo0?oo
+o`0000001 at 3oool2000001T0oooo4`0000170?oooa<000008`3oool01 at 000000oooo0?ooo`3oool0
+000000L0oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo03`0oooo4`00
+000A0?oooa<00000903oool001<0oooo0`0000050?ooo`D000000P3oool400000080oooo00<00000
+0?ooo`3oool0603ooolC000004L0oooo4`00000T0?ooo`<000001 at 3oool500000080oooo10000003
+0?ooo`030000003oool0oooo03`0oooo4`00000A0?oooa<00000903oool002P0oooo0P00000I0?oo
+oa<00000A`3ooolC000003X0oooo00<000000?ooo`3oool0?03ooolC00000140oooo4`00000T0?oo
+o`00:03oool00`000000oooo0?ooo`0H0?oooa<00000A`3ooolC000003X0oooo00<000000?ooo`3o
+ool0?03ooolC00000140oooo4`00000T0?ooo`00:03oool00`000000oooo0?ooo`0H0?oooa<00000
+A`3ooolC000003X0oooo00<000000?ooo`3oool0?03ooolC00000140oooo4`00000T0?ooo`00:03o
+ool2000001T0oooo4`0000170?oooa<00000>P3oool00`000000oooo0?ooo`0l0?oooa<000004 at 3o
+oolC000002 at 0oooo000X0?ooo`030000003oool0oooo01P0oooo4`0000170?oooa<00000>P3oool0
+0`000000oooo0?ooo`0l0?oooa<000004 at 3ooolC000002@0oooo000I0?ooo`<000000`3oool00`00
+0000oooo0?ooo`03000000<0oooo0P00000I0?oooa<00000A`3ooolC000002X0oooo0`0000030?oo
+o`030000003oool0oooo00<00000103oool00`000000oooo0?ooo`0H0?oooa<000004 at 3ooolC0000
+0140oooo4`00000T0?ooo`00603oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?oo
+o`3oool0oooo000000020?ooo`030000003oool0oooo01P0oooo4`0000170?oooa<00000:@3oool0
+1 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000030?ooo`030000
+003oool0oooo01P0oooo4`00000A0?oooa<000004 at 3ooolC000002@0oooo000E0?ooo`80000000<0
+oooo0000003oool00P3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo008000006 at 3o
+oolC000004L0oooo4`00000V0?ooo`80000000<0oooo0000003oool00P3oool00`000000oooo0?oo
+o`060?ooo`040000003oool0oooo0?ooo`8000006 at 3ooolC00000140oooo4`00000A0?oooa<00000
+903oool001P0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`00
+00000P3oool00`000000oooo0?ooo`0H0?oooa<00000A`3ooolC000002T0oooo00D000000?ooo`3o
+ool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0H
+0?oooa<000004 at 3ooolC00000140oooo4`00000T0?ooo`00603oool01 at 000000oooo0?ooo`3oool0
+000000 at 0oooo100000030?ooo`8000006 at 3ooolC000004L0oooo4`00000Y0?ooo`050000003oool0
+oooo0?ooo`000000103oool4000000 at 0oooo00<000000?ooo`3oool0603ooolC00000140oooo4`00
+000A0?oooa<00000903oool001P0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003o
+ool0oooo00<0oooo00<000000?ooo`3oool0603ooolC000004L0oooo4`00000Y0?ooo`050000003o
+ool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo01P0oooo
+4`00000A0?oooa<000004 at 3ooolC000002@0oooo000I0?ooo`<000001P3oool400000080oooo0P00
+000I0?oooa<00000A`3ooolC000002X0oooo0`0000060?ooo`@000000`3oool00`000000oooo0?oo
+o`0H0?oooa<000004 at 3ooolC00000140oooo4`00000T0?ooo`00:03oool00`000000oooo0?ooo`0H
+0?oooa<000004 at 3ooolU00000140oooo4`00000j0?ooo`030000003oool0oooo01P0oooo4`00000A
+0?oooa<000004 at 3ooolC000002@0oooo000X0?ooo`030000003oool0oooo01P0oooo4`00000A0?oo
+obD000004 at 3ooolC000003X0oooo00<000000?ooo`3oool0603ooolC00000140oooo4`00000A0?oo
+oa<00000903oool002P0oooo0P00000I0?oooa<000004 at 3ooolU00000140oooo4`00000j0?ooo`03
+0000003oool0oooo01P0oooo4`00000A0?oooa<000004 at 3ooolC000002@0oooo000X0?ooo`030000
+003oool0oooo01P0oooo4`00000A0?ooobD000004 at 3ooolC000003X0oooo00<000000?ooo`3oool0
+603ooolC00000140oooo4`00000A0?oooa<00000903oool001<0oooo0`0000030?ooo`030000003o
+ool0000000 at 000000P3oool3000000<0oooo0P00000I0?oooa<000004 at 3ooolU00000140oooo4`00
+000T0?ooo`<000000`3oool00`000000oooo0000000400000080oooo0`0000040?ooo`030000003o
+ool0oooo01P0oooo4`00000A0?oooa<000004 at 3ooolC000002@0oooo000B0?ooo`050000003oool0
+oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`000000
+0P3oool00`000000oooo0?ooo`0H0?oooa<000004 at 3ooolU00000140oooo4`00000S0?ooo`050000
+003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0?oo
+o`0000000`3oool00`000000oooo0?ooo`0H0?oooa<000004 at 3ooolC00000140oooo4`00000T0?oo
+o`003`3oool2000000030?ooo`000000oooo0080oooo00<000000?ooo`3oool0103oool00`000000
+oooo0?ooo`050?ooo`030000003oool0oooo008000006 at 3ooolC00000140oooo9@00000A0?oooa<0
+0000803oool2000000030?ooo`000000oooo0080oooo00<000000?ooo`3oool0103oool00`000000
+oooo0?ooo`050?ooo`040000003oool0oooo0?ooo`8000006 at 3ooolC00000140oooo4`00000A0?oo
+oa<00000903oool00180oooo00D000000?ooo`3oool0oooo000000070?ooo`040000003oool0oooo
+000000<0oooo00 at 000000?ooo`3oool000006P3ooolC00000140oooo9 at 00000A0?oooa<000008`3o
+ool01 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool01 at 000000
+oooo0?ooo`3oool0000001X0oooo4`00000A0?oooa<000004 at 3ooolC000002@0oooo000B0?ooo`05
+0000003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000<0oooo0P00000I0?oo
+oa<000004 at 3ooolU00000140oooo4`00000S0?ooo`050000003oool0oooo0?ooo`000000203oool0
+0`000000oooo00000003000000 at 0oooo00<000000?ooo`3oool0603ooolC00000140oooo4`00000A
+0?oooa<00000903oool00180oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0
+oooo0?ooo`0000000P3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo01P0oooo4`00
+000A0?ooobD000004 at 3ooolC000002<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000
+003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo01P0
+oooo4`00000A0?oooa<000004 at 3ooolC00000140oooo2P0000090?ooo`004`3oool3000000H0oooo
+0`0000030?ooo`@000000P3oool00`000000oooo0?ooo`0H0?oooa<000004 at 3ooolU00000140oooo
+4`00000T0?ooo`<000001P3oool3000000<0oooo100000030?ooo`030000003oool0oooo01P0oooo
+4`00000A0?oooa<000004 at 3ooolC00000140oooo4@0000020?ooo`00:03oool2000001T0oooo4`00
+000A0?ooobD000004 at 3ooolC000003X0oooo00<000000?ooo`3oool0603ooolC00000140oooo4`00
+000A0?oooa<000004 at 3ooolA00000080oooo000X0?ooo`030000003oool0oooo01P0oooo4`00000A
+0?ooobD000004 at 3ooolC000003X0oooo00<000000?ooo`3oool0603ooolC00000140oooo4`00000A
+0?oooa<000004 at 3ooolA00000080oooo000X0?ooo`8000006 at 3ooolC00000140oooo9@00000A0?oo
+oa<00000>P3oool00`000000oooo0?ooo`0H0?oooa<000004 at 3ooolC00000140oooo4`00000A0?oo
+oa4000000P3oool002P0oooo00<000000?ooo`3oool0603ooolC00000140oooo9 at 00000A0?oooa<0
+0000>P3oool00`000000oooo0?ooo`0H0?oooa<000004 at 3ooolC00000140oooo4`00000A0?oooa40
+00000P3oool00280oooo0`0000030?ooo`8000006 at 3ooolC00000140oooo9@00000A0?oooa<00000
+<`3oool3000000 at 0oooo00<000000?ooo`3oool0603ooolC00000140oooo4`00000A0?oooa<00000
+4 at 3ooolA00000080oooo000Q0?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo
+0?ooo`0H0?oooa<000004 at 3ooolU00000140oooo4`00000b0?ooo`050000003oool0oooo0?ooo`00
+00000`3oool00`000000oooo0?ooo`0H0?oooa<000004 at 3ooolC00000140oooo4`00000A0?oooa40
+00000P3oool00240oooo00D000000?ooo`3oool0oooo000000020?ooo`8000001`3ooon8000002T0
+oooo00D000000?ooo`3oool0oooo000000030?ooo`8000001`3ooon?00000080oooo000Q0?ooo`05
+0000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`060?oooa<000004 at 3ooolC0000
+02<0oooo4`00000A0?oooa8000008 at 3oool01@000000oooo0?ooo`3oool0000000<0oooo00<00000
+0?ooo`3oool01P3ooolC00000140oooo4`00000A0?oooa<000004 at 3ooolC00000180oooo000Q0?oo
+o`050000003oool0oooo0?ooo`0000000P3oool2000000L0oooo4`00000A0?oooa<000008`3ooolC
+00000140oooo4P00000Q0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?oo
+o`060?oooa<000004 at 3ooolC00000140oooo4`00000A0?oooa<000004P3oool00240oooo00D00000
+0?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00H0oooo4`00000A0?oooa<000008`3o
+oolC00000140oooo4P00000Q0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo
+0?ooo`060?oooa<000004 at 3ooolC00000140oooo4`00000A0?oooa<000004P3oool00280oooo0`00
+00030?ooo`030000003oool0oooo00H0oooo4`00000A0?oooa<000008`3ooolC00000140oooo4P00
+000R0?ooo`<00000103oool00`000000oooo0?ooo`060?oooa<000004 at 3ooolC00000140oooo4`00
+000A0?oooa<000004P3oool002P0oooo0P0000070?oooa<000004 at 3ooolC000002<0oooo4`00000A
+0?oooa800000:@3oool00`000000oooo0?ooo`060?oooa<000004 at 3ooolC00000140oooo4`00000A
+0?oooa<000004P3oool002P0oooo00<000000?ooo`3oool01P3ooolC00000140oooo4`00000S0?oo
+oa<000004 at 3ooolB000002T0oooo00<000000?ooo`3oool01P3ooolC00000140oooo4`00000A0?oo
+oa<000004 at 3ooolC00000180oooo000X0?ooo`8000001`3ooolC00000140oooo4`00000S0?oooa<0
+00004 at 3ooolB000002T0oooo00<000000?ooo`3oool01P3ooolC00000140oooo4`00000A0?oooa<0
+00004 at 3ooolC00000180oooo000X0?ooo`030000003oool0oooo00H0oooo4`00000A0?oooa<00000
+8`3ooolC00000140oooo4P00000Y0?ooo`030000003oool0oooo00H0oooo4`00000A0?oooa<00000
+4 at 3ooolC00000140oooo4`00000B0?ooo`004`3oool3000000<0oooo00<000000?ooo`0000001000
+00020?ooo`<000000`3oool2000000L0oooo4`00000A0?oooa<000008`3ooolC00000140oooo4P00
+000C0?ooo`<000000`3oool00`000000oooo0000000400000080oooo0`0000040?ooo`030000003o
+ool0oooo00H0oooo4`00000A0?oooa<000004 at 3ooolC00000140oooo4`00000B0?ooo`004P3oool0
+1 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?oo
+o`3oool000000080oooo00<000000?ooo`3oool01P3ooolC00000140oooo4`00000S0?oooa<00000
+4 at 3ooolB00000180oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080
+oooo00D000000?ooo`3oool0oooo000000030?ooo`030000003oool0oooo02X0oooo4`00000A0?oo
+oa<000004 at 3ooolC00000180oooo000B0?ooo`050000003oool0oooo0?ooo`0000001P3oool00`00
+0000oooo0?ooo`050?ooo`030000003oool0oooo008000001`3ooolC00000140oooo4`00000S0?oo
+oa<000004 at 3ooolB00000180oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0
+oooo00D0oooo00 at 000000?ooo`3oool0oooo0P00000[0?oooa<000004 at 3ooolC00000140oooo4`00
+000B0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool00000
+0`3oool010000000oooo0?ooo`0000080?oooa<000004 at 3ooolC000002<0oooo4`00000A0?oooa80
+00004P3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool0
+1 at 000000oooo0?ooo`3oool0000002`0oooo4`00000A0?oooa<000004 at 3ooolC00000180oooo000B
+0?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000<0oooo00<0
+00000?ooo`3oool01P3ooolC00000140oooo4`00000S0?oooa<000004 at 3ooolB00000180oooo00D0
+00000?ooo`3oool0oooo000000080?ooo`030000003oool0000000<00000103oool00`000000oooo
+0?ooo`0Z0?oooa<000004 at 3ooolC00000140oooo4`00000B0?ooo`004P3oool01 at 000000oooo0?oo
+o`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00<0
+oooo0P0000070?oooa<000004 at 3ooolC000002<0oooo4`00000A0?oooa8000004P3oool01 at 000000
+oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0
+oooo00 at 0oooo00<000000?ooo`3oool0:P3ooolC00000140oooo4`00000A0?oooa<000004P3oool0
+01<0oooo0`0000060?ooo`<000000`3oool400000080oooo00<000000?ooo`3oool01P3ooolC0000
+0140oooo4`00000S0?oooa<000004 at 3ooolB000001<0oooo0`0000060?ooo`<000000`3oool40000
+00<0oooo00<000000?ooo`3oool0:P3ooolC00000140oooo4`00000A0?oooa<000004P3oool002P0
+oooo0P0000070?oooa<000004 at 3ooolC000002<0oooo4`00000A0?oooa800000:@3oool00`000000
+oooo0?ooo`0Z0?oooa<000004 at 3ooolC00000140oooo4`00000B0?ooo`00:03oool00`000000oooo
+0?ooo`060?oooa<000004 at 3ooolC000002<0oooo4`00000A0?oooa800000:@3oool00`000000oooo
+0?ooo`0Z0?oooa<000004 at 3ooolC00000140oooo4`00000B0?ooo`00:03oool2000002/0oooo4`00
+000S0?oooa<00000C03oool00`000000oooo0?ooo`0Z0?oooa<000004 at 3ooolC00000140oooo4`00
+000B0?ooo`00:03oool00`000000oooo0?ooo`0Z0?oooa<000008`3ooolC000004`0oooo00<00000
+0?ooo`3oool0:P3ooolC00000140oooo4`00000A0?oooa<000004P3oool001T0oooo0`0000030?oo
+o`030000003oool0oooo00<000000`3oool2000002/0oooo4`00000S0?oooa<00000?03oool30000
+00<0oooo00<000000?ooo`3oool00`0000040?ooo`030000003oool0oooo02X0oooo4`00000A0?oo
+oa<000004 at 3ooolC00000180oooo000H0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 00
+0000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool0:P3ooolC000002<0oooo4`00000k
+0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000<0oooo
+00<000000?ooo`3oool0:P3ooolC00000140oooo4`00000A0?oooa<000004P3oool001P0oooo00D0
+00000?ooo`3oool0oooo000000080?ooo`030000003oool0oooo00800000:`3ooolC000002<0oooo
+4`00000k0?ooo`050000003oool0oooo0?ooo`000000203oool010000000oooo0?ooo`3oool20000
+02/0oooo4`00000A0?oooa<000004 at 3ooolC00000180oooo000H0?ooo`050000003oool0oooo0?oo
+o`000000103oool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool0:P3ooolC
+000002<0oooo4`00000k0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?oo
+o`3oool0000000<0oooo00<000000?ooo`3oool0:P3ooolC00000140oooo4`00000A0?oooa<00000
+4P3oool001P0oooo00D000000?ooo`3oool0oooo000000040?ooo`@000000`3oool00`000000oooo
+0?ooo`0Z0?oooa<000008`3ooolC000003/0oooo00D000000?ooo`3oool0oooo000000040?ooo`@0
+0000103oool00`000000oooo0?ooo`0Z0?oooa<000004 at 3ooolC00000140oooo4`00000B0?ooo`00
+603oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00`3oool2000002/0
+oooo4`00000S0?oooa<00000>`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?oo
+o`3oool0103oool00`000000oooo0?ooo`0Z0?oooa<000004 at 3ooolC00000140oooo4`00000B0?oo
+o`006 at 3oool3000000H0oooo100000020?ooo`030000003oool0oooo02X0oooo4`00000S0?oooa<0
+0000?03oool3000000H0oooo100000030?ooo`030000003oool0oooo02X0oooo4`00000A0?oooa<0
+0000=P3oool002P0oooo0P00000[0?oooa<000008`3ooolC000004`0oooo00<000000?ooo`3oool0
+:P3ooolC00000140oooo4`00000f0?ooo`00:03oool00`000000oooo0?ooo`0Z0?oooa<000008`3o
+oolC000004`0oooo00<000000?ooo`3oool0:P3ooolC00000140oooo4`00000f0?ooo`00:03oool2
+000002/0oooo4`00000S0?oooa<00000C03oool00`000000oooo0?ooo`0Z0?oooa<000004 at 3ooolC
+000003H0oooo000X0?ooo`030000003oool0oooo02X0oooo4`00000S0?oooa<00000C03oool00`00
+0000oooo0?ooo`0Z0?oooa<000004 at 3ooolC000003H0oooo000C0?ooo`<000000`3oool010000000
+oooo0?ooo`0000050?ooo`<000000`3oool2000002/0oooo4`00000S0?oooa<00000=P3oool30000
+00<0oooo00 at 000000?ooo`3oool000001 at 3oool3000000@0oooo00<000000?ooo`3oool0:P3ooolC
+00000140oooo4`00000f0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<00000
+0?ooo`3oool00P3oool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool0:P3o
+oolC000002<0oooo4`00000e0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo
+0?ooo`020?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0Z0?oooa<0
+00004 at 3ooolC000003H0oooo000B0?ooo`050000003oool0oooo0?ooo`0000001P3oool00`000000
+oooo0?ooo`050?ooo`040000003oool0oooo000002`0oooo4`00000S0?oooa<00000=@3oool01 at 00
+0000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3oool01 at 3oool01@000000oooo0?ooo`3o
+ool0000002`0oooo4`00000A0?oooa<00000=P3oool00180oooo00D000000?ooo`3oool0oooo0000
+00060?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`02000002/0oooo
+4`00000S0?oooa<00000=@3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00D000000?ooo`3o
+ool0oooo000000030?ooo`040000003oool0oooo0?ooo`800000:`3ooolC00000140oooo4`00000f
+0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool010000003
+0?ooo`030000003oool0oooo02X0oooo4`00000S0?oooa<00000=@3oool01 at 000000oooo0?ooo`3o
+ool0000000L0oooo00<000000?ooo`3oool0100000040?ooo`030000003oool0oooo02X0oooo4`00
+000A0?oooa<00000=P3oool00180oooo00D000000?ooo`3oool0oooo000000070?ooo`050000003o
+ool0oooo0?ooo`0000001 at 3oool2000002/0oooo4`00000S0?oooa<00000=@3oool01 at 000000oooo
+0?ooo`3oool0000000L0oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo
+02X0oooo4`00000A0?oooa<00000=P3oool001<0oooo0`0000050?ooo`D000000P3oool400000080
+oooo00<000000?ooo`3oool0:P3ooolC000002<0oooo4`00000f0?ooo`<000001 at 3oool500000080
+oooo100000030?ooo`030000003oool0oooo02X0oooo4`00000A0?oooa<00000=P3oool002P0oooo
+0P00000[0?oooa<000008`3ooolC000004`0oooo00<000000?ooo`3oool0CP3ooolC000003H0oooo
+000X0?ooo`030000003oool0oooo02X0oooo4`00000S0?oooa<00000C03oool00`000000oooo0?oo
+o`1>0?oooa<00000=P3oool002P0oooo0P00000[0?oooa<000008`3ooolC000004`0oooo00<00000
+0?ooo`3oool0CP3ooolC000003H0oooo000X0?ooo`030000003oool0oooo02X0oooo4`00000S0?oo
+oa<00000C03oool00`000000oooo0?ooo`1>0?oooa<00000=P3oool002 at 0oooo00@000000?ooo`3o
+ool0oooo0P00002k0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool0CP3ooolC0000
+03H0oooo000T0?ooo`050000003oool0oooo0?ooo`000000_03oool00`000000oooo0?ooo`020?oo
+o`030000003oool0oooo04h0oooo4`00000f0?ooo`00903oool01 at 000000oooo0?ooo`3oool00000
+0;`0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`1>0?oooa<00000=P3oool002 at 0
+oooo00 at 000000?ooo`3oool0oooo0P00002k0?ooo`030000003oool0oooo0080oooo0P00002H0?oo
+o`008P3oool00`000000oooo0000002n0?ooo`030000003oool0000009h0oooo000S0?ooo`800000
+_`3oool2000009h0oooo000T0?ooo`030000003oool0oooo0;h0oooo00<000000?ooo`3oool0W03o
+ool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3o
+ool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3o
+ool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3o
+ool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3o
+ool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool002@0oooo00<0
+00000?ooo`3oool0_P3oool00`000000oooo0?ooo`2L0?ooo`00903oool00`000000oooo0?ooo`2n
+0?ooo`030000003oool0oooo09`0oooo000N0?ooo`800000103oool010000000oooo0?ooo`3oool2
+00000;D0oooo0P0000040?ooo`030000003oool0oooo0080oooo0P00002H0?ooo`00903oool01 at 00
+0000oooo0?ooo`3oool000000;`0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`0H
+0?oooa<00000K03oool00280oooo00<000000?ooo`0000000`3oool200000;T0oooo00<000000?oo
+o`000000103oool00`000000oooo0?ooo`0H0?oooa<00000K03oool002<0oooo0P0000030?ooo`03
+0000003oool0oooo0;T0oooo0P0000040?ooo`030000003oool0oooo01P0oooo4`00001/0?ooo`00
+903oool01 at 000000oooo0?ooo`3oool000000;`0oooo00<000000?ooo`3oool00P3oool00`000000
+oooo0?ooo`0H0?oooa<00000K03oool002P0oooo0P0000300?ooo`030000003oool0oooo01P0oooo
+4`00001/0?ooo`00:03oool00`000000oooo0?ooo`2o0?ooo`030000003oool0oooo01P0oooo4`00
+001/0?ooo`00:03oool200000<00oooo00<000000?ooo`3oool0603ooolC000006`0oooo000X0?oo
+o`030000003oool0oooo0;l0oooo00<000000?ooo`3oool0603ooolC000002<0oooo4`00000f0?oo
+o`004`3oool3000000<0oooo00 at 000000?ooo`3oool000001 at 3oool3000000<0oooo0P00002Z0?oo
+o`<000000`3oool010000000oooo0?ooo`0000050?ooo`<00000103oool00`000000oooo0?ooo`0H
+0?oooa<000008`3ooolC000003H0oooo000B0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool0
+0`000000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?oo
+o`2X0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`050000
+003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0H0?oooa<000008`3ooolC000003H0
+oooo000?0?ooo`80000000<0oooo0000003oool00P3oool00`000000oooo0?ooo`040?ooo`030000
+003oool0oooo00D0oooo00<000000?ooo`3oool00P00002V0?ooo`80000000<0oooo0000003oool0
+0P3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo00D0oooo00 at 000000?ooo`3oool0
+oooo0P00000I0?oooa<000008`3ooolC000003H0oooo000B0?ooo`050000003oool0oooo0?ooo`00
+00001P3oool01 at 000000oooo0?ooo`3oool0000000<0oooo00 at 000000?ooo`3oool00000ZP3oool0
+1 at 000000oooo0?ooo`3oool0000000H0oooo00D000000?ooo`3oool0oooo000000030?ooo`050000
+003oool0oooo0?ooo`0000006P3ooolC000002<0oooo4`00000f0?ooo`004P3oool01 at 000000oooo
+0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0100000030?ooo`030000003oool0oooo01P0
+oooo9 at 00000S0?ooobD000008`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?oo
+o`3oool0100000040?ooo`030000003oool0oooo01P0oooo4`00000S0?oooa<00000=P3oool00180
+oooo00D000000?ooo`3oool0oooo000000070?ooo`050000003oool0oooo0?ooo`0000001 at 3oool2
+000001T0oooo9 at 00000S0?ooobD000008`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00D0
+00000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo01P0oooo4`00000S0?oooa<00000
+=P3oool001<0oooo0`0000050?ooo`D000000P3oool400000080oooo00<000000?ooo`3oool0603o
+oolU000002<0oooo9 at 00000T0?ooo`<000001 at 3oool500000080oooo100000030?ooo`030000003o
+ool0oooo01P0oooo4`00000S0?oooa<00000=P3oool002P0oooo0P00000I0?ooobD000008`3ooolU
+000003X0oooo00<000000?ooo`3oool0603ooolC000002<0oooo4`00000f0?ooo`00:03oool00`00
+0000oooo0?ooo`0H0?ooobD000008`3ooolU000003X0oooo00<000000?ooo`3oool0603ooolC0000
+02<0oooo4`00000f0?ooo`00:03oool2000001T0oooo9 at 00000S0?ooobD00000>P3oool00`000000
+oooo0?ooo`0H0?oooa<000008`3ooolC000003H0oooo000X0?ooo`030000003oool0oooo01P0oooo
+9 at 00000S0?ooobD00000>P3oool00`000000oooo0?ooo`0H0?oooa<000008`3ooolC000003H0oooo
+000I0?ooo`<000000`3oool00`000000oooo0?ooo`03000000<0oooo0P00000I0?ooobD000008`3o
+oolU000002X0oooo0`0000030?ooo`030000003oool0oooo00<00000103oool00`000000oooo0?oo
+o`0H0?oooa<000008`3ooolC000002<0oooo2P0000090?ooo`00603oool01 at 000000oooo0?ooo`3o
+ool0000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo01P0oooo
+9 at 00000S0?ooobD00000:@3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3o
+ool0oooo000000030?ooo`030000003oool0oooo01P0oooo4`00000S0?oooa<000008`3ooolA0000
+0080oooo000E0?ooo`80000000<0oooo0000003oool00P3oool00`000000oooo0?ooo`060?ooo`03
+0000003oool0oooo008000006 at 3ooolU000002<0oooo9 at 00000V0?ooo`80000000<0oooo0000003o
+ool00P3oool00`000000oooo0?ooo`060?ooo`040000003oool0oooo0?ooo`8000006 at 3ooolC0000
+02<0oooo4`00000S0?oooa4000000P3oool001P0oooo00D000000?ooo`3oool0oooo000000040?oo
+o`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`0H0?ooobD000008`3ooolU
+000002T0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`000000
+0`3oool00`000000oooo0?ooo`0H0?oooa<000008`3ooolC000002<0oooo4 at 0000020?ooo`00603o
+ool01 at 000000oooo0?ooo`3oool0000000 at 0oooo100000030?ooo`030000003oool0oooo01P0oooo
+9 at 00000S0?ooobD00000:@3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo100000040?ooo`03
+0000003oool0oooo01P0oooo4`00000S0?oooa<000008`3ooolA00000080oooo000H0?ooo`050000
+003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`030?ooo`8000006 at 3ooolU000002<0
+oooo9 at 00000Y0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`040?oo
+o`030000003oool0oooo01P0oooo4`00000S0?oooa<000008`3ooolA00000080oooo000I0?ooo`<0
+00001P3oool400000080oooo00<000000?ooo`3oool0603ooolU000002<0oooo9 at 00000Z0?ooo`<0
+00001P3oool4000000<0oooo00<000000?ooo`3oool0603ooolC000002<0oooo4`00000S0?oooa40
+00000P3oool002P0oooo0P00000I0?ooobD000008`3ooolU000003X0oooo00<000000?ooo`3oool0
+603ooolC000002<0oooo4`00000S0?oooa4000000P3oool002P0oooo00<000000?ooo`3oool0603o
+oolU000002<0oooo9 at 00000j0?ooo`030000003oool0oooo01P0oooo4`00000S0?oooa<000008`3o
+oolA00000080oooo000X0?ooo`8000006 at 3ooolU000002<0oooo9 at 00000j0?ooo`030000003oool0
+oooo01P0oooo4`00000S0?oooa<000008`3ooolA00000080oooo000X0?ooo`030000003oool0oooo
+01P0oooo9 at 00000S0?ooobD00000>P3oool00`000000oooo0?ooo`0H0?oooa<000008`3ooolC0000
+02<0oooo4 at 0000020?ooo`004`3oool3000000<0oooo00<000000?ooo`000000100000020?ooo`<0
+00000`3oool2000001T0oooo9 at 00000S0?ooobD00000903oool3000000<0oooo00<000000?ooo`00
+0000100000020?ooo`<00000103oool00`000000oooo0?ooo`0H0?oooa<000008`3ooolC000002<0
+oooo4 at 0000020?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3o
+ool00P3oool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool0603ooolU0000
+02<0oooo9 at 00000S0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`02
+0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0H0?oooa<000008`3o
+oolC000002<0oooo4 at 0000020?ooo`003`3oool2000000030?ooo`000000oooo0080oooo00<00000
+0?ooo`3oool0103oool00`000000oooo0?ooo`050?ooo`040000003oool0oooo000001X0oooo9 at 00
+000S0?ooobD00000803oool2000000030?ooo`000000oooo0080oooo00<000000?ooo`3oool0103o
+ool00`000000oooo0?ooo`050?ooo`050000003oool0oooo0?ooo`0000006P3ooolC000002<0oooo
+4`00000S0?oooa4000000P3oool00180oooo00D000000?ooo`3oool0oooo000000070?ooo`040000
+003oool0oooo000000<0oooo00<000000?ooo`3oool00P00000I0?ooobD000008`3ooolU000002<0
+oooo00D000000?ooo`3oool0oooo000000070?ooo`040000003oool0oooo000000<0oooo00 at 00000
+0?ooo`3oool0oooo0P00000I0?oooa<000008`3ooolC000002<0oooo4 at 0000020?ooo`004P3oool0
+1 at 000000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`0000000`0000030?ooo`030000003o
+ool0oooo01P0oooo9 at 00000S0?ooobD000008`3oool01 at 000000oooo0?ooo`3oool0000000P0oooo
+00<000000?ooo`0000000`0000040?ooo`030000003oool0oooo01P0oooo4`00000S0?oooa<00000
+8`3ooolA00000080oooo000B0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo
+0?ooo`3oool000000080oooo00<000000?ooo`3oool00`3oool2000001T0oooo9 at 00000S0?ooobD0
+00008`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo00000002
+0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0603ooolC000002<0oooo9 at 00000A
+0?oooa4000000P3oool001<0oooo0`0000060?ooo`<000000`3oool400000080oooo00<000000?oo
+o`3oool0603ooolU000002<0oooo9 at 00000T0?ooo`<000001P3oool3000000<0oooo100000030?oo
+o`030000003oool0oooo01P0oooo4`00000S0?ooobD000004 at 3ooolA00000080oooo000X0?ooo`80
+00006 at 3ooolU000002<0oooo9 at 00000j0?ooo`030000003oool0oooo01P0oooo4`00000S0?ooobD0
+00004 at 3ooolA00000080oooo000X0?ooo`030000003oool0oooo01P0oooo9 at 00000S0?ooobD00000
+>P3oool00`000000oooo0?ooo`0H0?oooa<000008`3ooolU00000140oooo4 at 0000020?ooo`00:03o
+ool2000001T0oooo9 at 00000S0?ooobD00000>P3oool00`000000oooo0?ooo`0H0?oooa<000008`3o
+oolU00000140oooo4 at 0000020?ooo`00:03oool00`000000oooo0?ooo`0H0?ooobD000008`3ooolU
+000003X0oooo00<000000?ooo`3oool0603ooolC000002<0oooo9 at 00000A0?oooa4000000P3oool0
+0280oooo0`0000030?ooo`8000006 at 3ooolU000002<0oooo9 at 00000c0?ooo`<00000103oool00`00
+0000oooo0?ooo`0H0?oooa<000008`3ooolU00000140oooo4 at 0000020?ooo`008 at 3oool01@000000
+oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool0603ooolU000002<0oooo9 at 00000b0?oo
+o`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0H0?oooa<000008`3ooolU
+00000140oooo4 at 0000020?ooo`008 at 3oool01@000000oooo0?ooo`3oool000000080oooo00<00000
+0?ooo`3oool0603ooolU000002<0oooo9 at 00000b0?ooo`050000003oool0oooo0?ooo`0000000`3o
+ool00`000000oooo0?ooo`0H0?oooa<000008`3ooolU00000140oooo4 at 0000020?ooo`008 at 3oool0
+1 at 000000oooo0?ooo`3oool000000080oooo0P0000070?ooohP00000:@3oool01 at 000000oooo0?oo
+o`3oool0000000<0oooo0P0000070?ooohl000000P3oool00240oooo00D000000?ooo`3oool0oooo
+000000020?ooo`030000003oool0oooo00H0oooo4`00000S0?ooobD000008`3ooolB00000240oooo
+00D000000?ooo`3oool0oooo000000030?ooo`030000003oool0oooo00H0oooo4`00000A0?ooobD0
+00008`3ooolC00000180oooo000Q0?ooo`050000003oool0oooo0?ooo`0000000P3oool2000000L0
+oooo4`00000S0?ooobD000008`3ooolB00000240oooo00D000000?ooo`3oool0oooo000000030?oo
+o`030000003oool0oooo00H0oooo4`00000A0?ooobD000008`3ooolC00000180oooo000R0?ooo`<0
+00000`3oool00`000000oooo0?ooo`060?oooa<000008`3ooolU000002<0oooo4P00000R0?ooo`<0
+0000103oool00`000000oooo0?ooo`060?oooa<000004 at 3ooolU000002<0oooo4`00000B0?ooo`00
+:03oool2000000L0oooo4`00000S0?ooobD000008`3ooolB000002T0oooo00<000000?ooo`3oool0
+1P3ooolC00000140oooo9 at 00000S0?oooa<000004P3oool002P0oooo00<000000?ooo`3oool01P3o
+oolC000002<0oooo9 at 00000S0?oooa800000:@3oool00`000000oooo0?ooo`060?oooa<000004 at 3o
+oolU000002<0oooo4`00000B0?ooo`00:03oool2000000L0oooo4`00000S0?ooobD000008`3ooolB
+000002T0oooo00<000000?ooo`3oool01P3ooolC00000140oooo9 at 00000S0?oooa<000004P3oool0
+02P0oooo00<000000?ooo`3oool01P3ooolC000002<0oooo9 at 00000S0?oooa800000:@3oool00`00
+0000oooo0?ooo`060?oooa<000004 at 3ooolU000002<0oooo4`00000B0?ooo`004`3oool3000000<0
+oooo00<000000?ooo`000000100000020?ooo`<000000`3oool00`000000oooo0?ooo`060?oooa<0
+00008`3ooolU000002<0oooo4P00000C0?ooo`<000000`3oool00`000000oooo0000000400000080
+oooo0`0000040?ooo`030000003oool0oooo00H0oooo4`00000A0?ooobD000008`3ooolC00000180
+oooo000B0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`05
+0000003oool0oooo0?ooo`0000000P3oool2000000L0oooo4`00000S0?ooobD000008`3ooolB0000
+0180oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080oooo00D00000
+0?ooo`3oool0oooo000000030?ooo`030000003oool0oooo00H0oooo4`00000S0?oooa<000008`3o
+oolC00000180oooo000B0?ooo`050000003oool0oooo0?ooo`0000001P3oool00`000000oooo0?oo
+o`050?ooo`040000003oool0oooo000000P0oooo4`00000S0?ooobD000008`3ooolB00000180oooo
+00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo00D0oooo00D000000?ooo`3o
+ool0oooo000000080?oooa<000008`3ooolC000002<0oooo4`00000B0?ooo`004P3oool01 at 000000
+oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`02
+000000L0oooo4`00000S0?ooobD000008`3ooolB00000180oooo00D000000?ooo`3oool0oooo0000
+00070?ooo`040000003oool0oooo000000<0oooo00 at 000000?ooo`3oool0oooo0P0000070?oooa<0
+00008`3ooolC000002<0oooo4`00000B0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000P0
+oooo00<000000?ooo`0000000`0000030?ooo`030000003oool0oooo00H0oooo4`00000S0?ooobD0
+00008`3ooolB00000180oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool00000
+00<00000103oool00`000000oooo0?ooo`060?oooa<000008`3ooolC000002<0oooo4`00000B0?oo
+o`004P3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo00000002
+0?ooo`030000003oool0oooo00<0oooo0P0000070?oooa<000008`3ooolU000002<0oooo4P00000B
+0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool000000080oooo
+00<000000?ooo`3oool0103oool00`000000oooo0?ooo`060?oooa<000008`3ooolC000002<0oooo
+4`00000B0?ooo`004`3oool3000000H0oooo0`0000030?ooo`@000000P3oool00`000000oooo0?oo
+o`060?oooa<000008`3ooolU000002<0oooo4P00000C0?ooo`<000001P3oool3000000<0oooo1000
+00030?ooo`030000003oool0oooo00H0oooo4`00000S0?oooa<000008`3ooolC00000180oooo000X
+0?ooo`8000001`3ooolC000002<0oooo9 at 00000S0?oooa800000:@3oool00`000000oooo0?ooo`06
+0?oooa<000008`3ooolC000002<0oooo4`00000B0?ooo`00:03oool00`000000oooo0?ooo`060?oo
+oa<000008`3ooolU000002<0oooo4P00000Y0?ooo`030000003oool0oooo00H0oooo4`00000S0?oo
+oa<000008`3ooolC00000180oooo000X0?ooo`8000001`3ooolC000002<0oooo9 at 00000S0?oooa80
+0000:@3oool00`000000oooo0?ooo`060?oooa<000008`3ooolC000002<0oooo4`00000B0?ooo`00
+:03oool00`000000oooo0?ooo`060?oooa<000008`3ooolU000002<0oooo4P00000Y0?ooo`030000
+003oool0oooo00H0oooo4`00000S0?oooa<000008`3ooolC00000180oooo000I0?ooo`<000000`3o
+ool00`000000oooo0?ooo`03000000<0oooo00<000000?ooo`3oool01P3ooolC000002<0oooo9 at 00
+000S0?oooa8000006 at 3oool3000000<0oooo00<000000?ooo`3oool00`0000040?ooo`030000003o
+ool0oooo00H0oooo4`00000S0?oooa<000008`3ooolC00000180oooo000H0?ooo`050000003oool0
+oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool000000080oooo0P0000070?oooa<00000
+8`3ooolU000002<0oooo4P00000H0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000
+oooo0?ooo`3oool0000000<0oooo00<000000?ooo`3oool01P3ooolC000002<0oooo4`00000S0?oo
+oa<000004P3oool001P0oooo00D000000?ooo`3oool0oooo000000080?ooo`040000003oool0oooo
+000000P0oooo4`00000S0?ooobD000008`3ooolB000001P0oooo00D000000?ooo`3oool0oooo0000
+00080?ooo`050000003oool0oooo0?ooo`000000203ooolC000002<0oooo4`00000S0?oooa<00000
+4P3oool001P0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`00
+00000P3oool2000000L0oooo4`00000S0?ooobD000008`3ooolB000001P0oooo00D000000?ooo`3o
+ool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000`3oool2000000L0oooo4`00000S
+0?oooa<000008`3ooolC00000180oooo000H0?ooo`050000003oool0oooo0?ooo`000000103oool4
+000000<0oooo00<000000?ooo`3oool01P3ooolC000002<0oooo9 at 00000S0?oooa800000603oool0
+1 at 000000oooo0?ooo`3oool0000000 at 0oooo100000040?ooo`030000003oool0oooo00H0oooo4`00
+000S0?oooa<000008`3ooolC00000180oooo000H0?ooo`050000003oool0oooo0?ooo`0000001 at 3o
+ool00`000000oooo0?ooo`030?ooo`8000001`3ooolC000002<0oooo9 at 00000S0?oooa800000603o
+ool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0103oool00`000000oooo
+0?ooo`060?oooa<000008`3ooolC000002<0oooo4`00000B0?ooo`006 at 3oool3000000H0oooo1000
+00020?ooo`030000003oool0oooo00H0oooo4`00000S0?ooobD000008`3ooolB000001T0oooo0`00
+00060?ooo`@000000`3oool00`000000oooo0?ooo`0l0?oooa<000008`3ooolC00000180oooo000X
+0?ooo`8000001`3ooolC000002<0oooo9 at 00000S0?oooa800000:@3oool00`000000oooo0?ooo`0l
+0?oooa<000008`3ooolC00000180oooo000X0?ooo`030000003oool0oooo00H0oooo4`00000S0?oo
+obD000008`3ooolB000002T0oooo00<000000?ooo`3oool0?03ooolC000002<0oooo4`00000B0?oo
+o`00:03oool00`000000oooo0?ooo`060?oooa<000008`3ooolU000002<0oooo4P00000Y0?ooo`03
+0000003oool0oooo03`0oooo4`00000S0?oooa<000004P3oool002P0oooo0P0000070?oooa<00000
+8`3ooolU000002<0oooo4P00000Y0?ooo`030000003oool0oooo03`0oooo4`00000S0?oooa<00000
+4P3oool001<0oooo0`0000030?ooo`040000003oool0oooo000000D0oooo0`0000030?ooo`030000
+003oool0oooo00H0oooo4`00000S0?ooobD000008`3ooolB000001<0oooo0`0000030?ooo`040000
+003oool0oooo000000D0oooo0`0000040?ooo`030000003oool0oooo03`0oooo4`00000S0?oooa<0
+00004P3oool00180oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080
+oooo00D000000?ooo`3oool0oooo000000020?ooo`8000001`3ooolC000002<0oooo9 at 00000S0?oo
+oa8000004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00P3oool0
+1 at 000000oooo0?ooo`3oool0000000<0oooo00<000000?ooo`3oool0?03ooolC000002<0oooo4`00
+000B0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3oool01 at 3o
+ool010000000oooo0?ooo`00002Z0?ooo`050000003oool0oooo0?ooo`0000001P3oool00`000000
+oooo0?ooo`050?ooo`050000003oool0oooo0?ooo`000000?P3ooolC000002<0oooo4`00000B0?oo
+o`004P3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00D000000?ooo`3oool0oooo00000003
+0?ooo`030000003oool0oooo00800000Z at 3oool01@000000oooo0?ooo`3oool0000000H0oooo00D0
+00000?ooo`3oool0oooo000000030?ooo`040000003oool0oooo0?ooo`800000?@3ooolC000002<0
+oooo4`00000B0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3o
+ool0100000030?ooo`030000003oool0oooo0:P0oooo00D000000?ooo`3oool0oooo000000070?oo
+o`030000003oool0oooo00 at 00000103oool00`000000oooo0?ooo`0l0?oooa<000008`3ooolC0000
+0180oooo000B0?ooo`050000003oool0oooo0?ooo`0000001`3oool01 at 000000oooo0?ooo`3oool0
+000000D0oooo0P00002Y0?ooo`050000003oool0oooo0?ooo`0000001`3oool01 at 000000oooo0?oo
+o`3oool0000000H0oooo00<000000?ooo`3oool0?03ooolC000002<0oooo4`00000B0?ooo`004`3o
+ool3000000D0oooo1 at 0000020?ooo`@000000P3oool00`000000oooo0?ooo`2Y0?ooo`<000001 at 3o
+ool500000080oooo100000030?ooo`030000003oool0oooo03`0oooo4`00000S0?oooa<000004P3o
+ool002P0oooo0P0000300?ooo`030000003oool0oooo03`0oooo4`00000S0?oooa<000004P3oool0
+02P0oooo00<000000?ooo`3oool0_`3oool00`000000oooo0?ooo`1b0?oooa<000004P3oool002P0
+oooo00<000000?ooo`3oool0_`3oool00`000000oooo0?ooo`1b0?oooa<000004P3oool002P0oooo
+0P0000300?ooo`030000003oool0oooo0780oooo4`00000B0?ooo`00:03oool00`000000oooo0?oo
+o`2o0?ooo`030000003oool0oooo0780oooo4`00000B0?ooo`00903oool010000000oooo0?ooo`3o
+ool200000;/0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`1b0?oooa<000004P3o
+ool002 at 0oooo00D000000?ooo`3oool0oooo0000002l0?ooo`030000003oool0oooo0080oooo00<0
+00000?ooo`3oool0LP3ooolC00000180oooo000T0?ooo`040000003oool0oooo0?ooo`800000^`3o
+ool00`000000oooo0?ooo`020?ooo`800000V03oool002 at 0oooo00<000000?ooo`3oool0_P3oool0
+0`000000oooo0?ooo`2L0?ooo`008P3oool00`000000oooo0000002n0?ooo`030000003oool00000
+09h0oooo000S0?ooo`800000_`3oool2000009h0oooo000T0?ooo`030000003oool0oooo0;h0oooo
+00<000000?ooo`3oool0W03oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0
+ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0
+ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0
+ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0
+ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool00?l0ooooQ at 3oool002@0
+oooo00<000000?ooo`3oool0_P3oool00`000000oooo0?ooo`2L0?ooo`00903oool00`000000oooo
+0?ooo`2n0?ooo`030000003oool0oooo09`0oooo000N0?ooo`800000103oool00`000000oooo0?oo
+o`2h0?ooo`800000103oool00`000000oooo0?ooo`2L0?ooo`00903oool010000000oooo0?ooo`3o
+ool200000;/0oooo00<000000?ooo`3oool00P3oool2000002/0oooo4`00001J0?ooo`008P3oool0
+0`000000oooo000000030?ooo`030000003oool0oooo0;P0oooo00<000000?ooo`000000103oool0
+0`000000oooo0?ooo`0Z0?oooa<00000FP3oool002<0oooo0P0000030?ooo`800000^P3oool20000
+00 at 0oooo00<000000?ooo`3oool0:P3ooolC000005X0oooo000T0?ooo`050000003oool0oooo0?oo
+o`000000?P3ooolU000005T0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`0Z0?oo
+oa<00000FP3oool002P0oooo0P00000m0?ooobD00000GP3oool00`000000oooo0?ooo`0Z0?oooa<0
+0000FP3oool002P0oooo00<000000?ooo`3oool0?03ooolU000005h0oooo00<000000?ooo`3oool0
+:P3ooolC000005X0oooo000X0?ooo`800000?@3ooolU000005h0oooo00<000000?ooo`3oool0:P3o
+oolC000005X0oooo000X0?ooo`030000003oool0oooo03`0oooo9 at 00001N0?ooo`030000003oool0
+oooo02X0oooo4`0000170?ooo`X000002 at 3oool001<0oooo0`0000030?ooo`040000003oool0oooo
+000000D0oooo0`0000030?ooo`800000?@3ooolU000004P0oooo0`0000030?ooo`040000003oool0
+oooo000000D0oooo0`0000040?ooo`030000003oool0oooo02X0oooo4`0000170?oooa4000000P3o
+ool00180oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080oooo00D0
+00000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo03`0oooo9 at 0000170?ooo`050000
+003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0?oo
+o`0000000`3oool00`000000oooo0?ooo`0Z0?oooa<00000A`3ooolA00000080oooo000?0?ooo`80
+000000<0oooo0000003oool00P3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo00D0
+oooo00 at 000000?ooo`3oool00000?P3ooolU000004 at 0oooo0P0000000`3oool000000?ooo`020?oo
+o`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool01 at 3oool01@000000oooo0?ooo`3oool0
+000002`0oooo4`0000170?oooa4000000P3oool00180oooo00D000000?ooo`3oool0oooo00000006
+0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`02000003d0oooo9 at 00
+00170?ooo`050000003oool0oooo0?ooo`0000001P3oool01 at 000000oooo0?ooo`3oool0000000<0
+oooo00 at 000000?ooo`3oool0oooo0P00000[0?oooa<00000A`3ooolA00000080oooo000B0?ooo`05
+0000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`04000000<0oooo00<000000?oo
+o`3oool0?03ooolU000004L0oooo00D000000?ooo`3oool0oooo000000070?ooo`030000003oool0
+oooo00 at 00000103oool00`000000oooo0?ooo`0Z0?oooa<00000A`3ooolA00000080oooo000B0?oo
+o`050000003oool0oooo0?ooo`0000001`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo0P00
+000m0?ooobD00000A`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00D000000?ooo`3oool0
+oooo000000060?ooo`030000003oool0oooo02X0oooo4`0000170?oooa4000000P3oool001<0oooo
+0`0000050?ooo`D000000P3oool400000080oooo00<000000?ooo`3oool0?03ooolU000004P0oooo
+0`0000050?ooo`D000000P3oool4000000<0oooo00<000000?ooo`3oool0:P3ooolC000004L0oooo
+4 at 0000020?ooo`00:03oool2000003d0oooo9 at 00001N0?ooo`030000003oool0oooo02X0oooo4`00
+00170?oooa4000000P3oool002P0oooo00<000000?ooo`3oool0?03ooolU000005h0oooo00<00000
+0?ooo`3oool0:P3ooolC000004L0oooo4 at 0000020?ooo`00:03oool2000003d0oooo9 at 00001N0?oo
+o`030000003oool0oooo02X0oooo4`0000170?oooa4000000P3oool002P0oooo00<000000?ooo`3o
+ool0?03ooolU000005h0oooo00<000000?ooo`3oool0:P3ooolC000004L0oooo4 at 0000020?ooo`00
+6 at 3oool3000000<0oooo00<000000?ooo`3oool00`0000030?ooo`030000003oool0oooo03`0oooo
+9 at 00001>0?ooo`<000000`3oool00`000000oooo0?ooo`03000000 at 0oooo00<000000?ooo`3oool0
+:P3ooolU000003D0oooo4 at 0000020?ooo`00603oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo
+00D000000?ooo`3oool0oooo000000020?ooo`800000?@3ooolU000004d0oooo00D000000?ooo`3o
+ool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0Z
+0?ooobD00000=@3ooolA00000080oooo000E0?ooo`80000000<0oooo0000003oool00P3oool00`00
+0000oooo0?ooo`060?ooo`040000003oool0oooo000003h0oooo9 at 00001:0?ooo`80000000<0oooo
+0000003oool00P3oool00`000000oooo0?ooo`060?ooo`050000003oool0oooo0?ooo`000000;03o
+oolU000003D0oooo4 at 0000020?ooo`00603oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D0
+00000?ooo`3oool0oooo000000020?ooo`800000?@3ooolU000004d0oooo00D000000?ooo`3oool0
+oooo000000040?ooo`050000003oool0oooo0?ooo`0000000`3oool2000002/0oooo9 at 00000e0?oo
+oa4000000P3oool001P0oooo00D000000?ooo`3oool0oooo000000040?ooo`@000000`3oool00`00
+0000oooo0?ooo`0l0?ooobD00000C at 3oool01@000000oooo0?ooo`3oool0000000 at 0oooo10000004
+0?ooo`030000003oool0oooo02X0oooo9 at 00000e0?oooa4000000P3oool001P0oooo00D000000?oo
+o`3oool0oooo000000050?ooo`030000003oool0oooo00<0oooo0P00000m0?ooobD00000C at 3oool0
+1 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0103oool00`000000oooo0?oo
+o`0Z0?ooobD00000=@3ooolA00000080oooo000I0?ooo`<000001P3oool400000080oooo00<00000
+0?ooo`3oool0?03ooolU000004h0oooo0`0000060?ooo`@000000`3oool00`000000oooo0?ooo`0Z
+0?ooobD00000=@3ooolA00000080oooo000X0?ooo`800000?@3ooolU000005h0oooo00<000000?oo
+o`3oool0:P3ooolU000003D0oooo4 at 0000020?ooo`00:03oool00`000000oooo0?ooo`0Z0?ooodT0
+0000C03oool00`000000oooo0?ooo`0Z0?ooobD00000=@3ooolA00000080oooo000X0?ooo`800000
+:`3ooom9000004`0oooo00<000000?ooo`3oool0:P3ooolU000003D0oooo4 at 0000020?ooo`00:03o
+ool00`000000oooo0?ooo`0Z0?ooodT00000C03oool00`000000oooo0?ooo`0Z0?ooobD00000=@3o
+oolA00000080oooo000C0?ooo`<000000`3oool00`000000oooo0000000400000080oooo0`000003
+0?ooo`030000003oool0oooo02X0ooooB at 00000f0?ooo`<000000`3oool00`000000oooo00000004
+00000080oooo0`0000040?ooo`030000003oool0oooo02X0oooo9 at 00000e0?oooa4000000P3oool0
+0180oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080oooo00D00000
+0?ooo`3oool0oooo000000020?ooo`800000:`3ooom9000003D0oooo00D000000?ooo`3oool0oooo
+000000050?ooo`030000003oool0oooo0080oooo00D000000?ooo`3oool0oooo000000030?ooo`03
+0000003oool0oooo02X0oooo9 at 00000e0?oooa4000000P3oool000l0oooo0P0000000`3oool00000
+0?ooo`020?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool01 at 3oool010000000oooo
+0?ooo`00000/0?ooodT00000<P3oool2000000030?ooo`000000oooo0080oooo00<000000?ooo`3o
+ool0103oool00`000000oooo0?ooo`050?ooo`050000003oool0oooo0?ooo`000000;03ooolU0000
+03D0oooo4 at 0000020?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?oo
+o`3oool000000`3oool00`000000oooo0?ooo`02000002/0ooooB at 00000e0?ooo`050000003oool0
+oooo0?ooo`0000001`3oool010000000oooo0?ooo`0000030?ooo`040000003oool0oooo0?ooo`80
+0000:`3ooolU000003D0oooo4 at 0000020?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000P0
+oooo00<000000?ooo`0000000`0000030?ooo`030000003oool0oooo02X0ooooB at 00000e0?ooo`05
+0000003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000 at 0oooo00<000000?oo
+o`3oool0:P3ooolU000003D0oooo4 at 0000020?ooo`004P3oool01 at 000000oooo0?ooo`3oool00000
+00 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00<0oooo0P00000[
+0?ooodT00000=@3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo
+000000020?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0603ooolg000003D0oooo
+4 at 0000020?ooo`004`3oool3000000H0oooo0`0000030?ooo`@000000P3oool00`000000oooo0?oo
+o`0Z0?ooodT00000=P3oool3000000H0oooo0`0000030?ooo`@000000`3oool00`000000oooo0?oo
+o`0H0?ooocL00000=@3ooolA00000080oooo000X0?ooo`800000:`3ooom9000004`0oooo00<00000
+0?ooo`3oool0603ooolg000003D0oooo4 at 0000020?ooo`00:03oool00`000000oooo0?ooo`0Z0?oo
+odT00000C03oool00`000000oooo0?ooo`0H0?ooocL00000=@3ooolA00000080oooo000X0?ooo`03
+0000003oool0oooo02X0ooooB at 00001<0?ooo`030000003oool0oooo01P0oooo=`00000e0?oooa40
+00000P3oool002P0oooo0P00000[0?ooodT00000C03oool00`000000oooo0?ooo`0H0?ooocL00000
+=@3ooolA00000080oooo000X0?ooo`030000003oool0oooo02X0ooooB at 00001<0?ooo`030000003o
+ool0oooo01P0oooo=`00000e0?oooa4000000P3oool00280oooo0`0000030?ooo`800000:`3ooom9
+000004D0oooo0`0000040?ooo`030000003oool0oooo01P0oooo=`00000e0?oooa4000000P3oool0
+0240oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo02X0ooooB at 000014
+0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`0H0?ooocL00000=@3o
+oolA00000080oooo000Q0?ooo`050000003oool0oooo0?ooo`0000000P3oool2000000L0ooooR000
+000Y0?ooo`050000003oool0oooo0?ooo`0000000`3oool2000000L0ooooS`0000020?ooo`008 at 3o
+ool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool01P3ooolU000004L0oooo
+9000000Q0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`060?oooa<0
+0000=@3ooolg00000180oooo000Q0?ooo`050000003oool0oooo0?ooo`0000000P3oool2000000L0
+oooo9 at 0000170?ooob at 000008@3oool01 at 000000oooo0?ooo`3oool0000000<0oooo00<000000?oo
+o`3oool01P3ooolC000003D0oooo=`00000B0?ooo`008 at 3oool01@000000oooo0?ooo`3oool00000
+0080oooo00<000000?ooo`3oool01P3ooolU000004L0oooo9000000Q0?ooo`050000003oool0oooo
+0?ooo`0000000`3oool00`000000oooo0?ooo`060?oooa<00000=@3ooolg00000180oooo000R0?oo
+o`<000000`3oool2000000L0oooo9 at 0000170?ooob at 000008P3oool3000000@0oooo00<000000?oo
+o`3oool01P3ooolC000003D0oooo=`00000B0?ooo`00:03oool00`000000oooo0?ooo`060?ooobD0
+0000A`3ooolT000002T0oooo00<000000?ooo`3oool01P3ooolC000003D0oooo=`00000B0?ooo`00
+:03oool00`000000oooo0?ooo`060?ooobD00000A`3ooolT000002T0oooo00<000000?ooo`3oool0
+1P3ooolC000003D0oooo=`00000B0?ooo`00:03oool2000000L0oooo9 at 0000170?ooob at 00000:@3o
+ool00`000000oooo0?ooo`060?oooa<00000=@3ooolg00000180oooo000X0?ooo`030000003oool0
+oooo00H0oooo9 at 0000170?ooob at 00000:@3oool00`000000oooo0?ooo`060?oooa<00000=@3ooolg
+00000180oooo000C0?ooo`<000000`3oool00`000000oooo0000000400000080oooo0`0000030?oo
+o`8000001`3ooolU000004L0oooo9000000C0?ooo`<000000`3oool00`000000oooo000000040000
+0080oooo0`0000040?ooo`030000003oool0oooo00H0oooo4`00000e0?ooocL000004P3oool00180
+oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080oooo00D000000?oo
+o`3oool0oooo000000020?ooo`030000003oool0oooo00H0oooo9 at 0000170?ooob at 000004P3oool0
+1 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?oo
+o`3oool0000000<0oooo00<000000?ooo`3oool01P3ooolC000003D0oooo9 at 00000T0?ooo`004P3o
+ool01 at 000000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo
+0?ooo`02000000L0oooo9 at 0000170?ooob at 000004P3oool01@000000oooo0?ooo`3oool0000000H0
+oooo00<000000?ooo`3oool01 at 3oool010000000oooo0?ooo`3oool2000000L0oooo4`00000e0?oo
+obD00000903oool00180oooo00D000000?ooo`3oool0oooo000000070?ooo`040000003oool0oooo
+000000<0oooo00 at 000000?ooo`3oool00000203ooolU000004L0oooo9000000B0?ooo`050000003o
+ool0oooo0?ooo`0000001`3oool010000000oooo0?ooo`0000030?ooo`050000003oool0oooo0?oo
+o`000000203ooolC000003D0oooo9 at 00000T0?ooo`004P3oool01 at 000000oooo0?ooo`3oool00000
+00P0oooo00<000000?ooo`0000000`0000030?ooo`8000001`3ooolU000004L0oooo9000000B0?oo
+o`050000003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000 at 0oooo00<00000
+0?ooo`3oool01P3ooolC000003D0oooo9 at 00000T0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0
+000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00<0oooo00<0
+00000?ooo`3oool01P3ooolU000004L0oooo9000000B0?ooo`050000003oool0oooo0?ooo`000000
+103oool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool0103oool00`000000
+oooo0?ooo`060?oooa<00000=@3ooolU000002 at 0oooo000C0?ooo`<000001P3oool3000000<0oooo
+100000020?ooo`030000003oool0oooo00H0oooo9 at 0000170?ooob at 000004`3oool3000000H0oooo
+0`0000030?ooo`@000000`3oool00`000000oooo0?ooo`060?oooa<00000=@3ooolU000002 at 0oooo
+000X0?ooo`8000001`3ooolU000004L0oooo9000000Y0?ooo`030000003oool0oooo00H0oooo4`00
+000e0?ooobD00000903oool002P0oooo00<000000?ooo`3oool01P3ooolU000004L0oooo9000000Y
+0?ooo`030000003oool0oooo00H0oooo4`00000e0?ooobD00000903oool002P0oooo0P0000070?oo
+oa<00000J`3ooolB000002T0oooo00<000000?ooo`3oool01P3ooolC000003D0oooo9 at 00000T0?oo
+o`00:03oool00`000000oooo0?ooo`060?oooa<00000J`3ooolB000002T0oooo00<000000?ooo`3o
+ool01P3ooolC000003D0oooo9 at 00000T0?ooo`006 at 3oool3000000<0oooo00<000000?ooo`3oool0
+0`0000030?ooo`8000001`3ooolC000006/0oooo4P00000I0?ooo`<000000`3oool00`000000oooo
+0?ooo`03000000 at 0oooo00<000000?ooo`3oool01P3ooolC000003D0oooo9 at 00000T0?ooo`00603o
+ool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`03
+0000003oool0oooo00H0oooo4`00001[0?oooa800000603oool01 at 000000oooo0?ooo`3oool00000
+00 at 0oooo00D000000?ooo`3oool0oooo000000030?ooo`030000003oool0oooo00H0oooo4`00000e
+0?ooobD00000903oool001P0oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool0
+oooo008000001`3ooolC000006/0oooo4P00000H0?ooo`050000003oool0oooo0?ooo`000000203o
+ool010000000oooo0?ooo`3oool2000000L0oooo4`00000e0?ooobD00000903oool001P0oooo00D0
+00000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000
+oooo0?ooo`060?oooa<00000J`3ooolB000001P0oooo00D000000?ooo`3oool0oooo000000040?oo
+o`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`060?oooa<00000=@3ooolU
+000002 at 0oooo000H0?ooo`050000003oool0oooo0?ooo`000000103oool4000000<0oooo0P000007
+0?oooa<00000J`3ooolB000001P0oooo00D000000?ooo`3oool0oooo000000040?ooo`@00000103o
+ool00`000000oooo0?ooo`060?oooa<00000=@3ooolU000002 at 0oooo000H0?ooo`050000003oool0
+oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo00H0oooo4`00
+001[0?oooa800000603oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0
+103oool00`000000oooo0?ooo`060?oooa<00000=@3ooolU000002 at 0oooo000I0?ooo`<000001P3o
+ool400000080oooo00<000000?ooo`3oool01P3ooolC000006/0oooo4P00000I0?ooo`<000001P3o
+ool4000000<0oooo00<000000?ooo`3oool01P3ooolC000004L0oooo4`00000T0?ooo`00:03oool2
+000000L0oooo4`00001[0?oooa800000:@3oool00`000000oooo0?ooo`060?oooa<00000A`3ooolC
+000002 at 0oooo000X0?ooo`030000003oool0oooo00H0oooo4`00001[0?oooa800000:@3oool00`00
+0000oooo0?ooo`060?oooa<00000A`3ooolC000002 at 0oooo000X0?ooo`8000001`3ooolC000006/0
+oooo4P00000Y0?ooo`030000003oool0oooo00H0oooo4`0000170?oooa<00000903oool002P0oooo
+00<000000?ooo`3oool01P3ooolC000006/0oooo4P00000Y0?ooo`030000003oool0oooo00H0oooo
+4`0000170?oooa<00000903oool001<0oooo0`0000030?ooo`040000003oool0oooo000000D0oooo
+0`0000030?ooo`8000001`3ooolC000006/0oooo4P00000C0?ooo`<000000`3oool010000000oooo
+0?ooo`0000050?ooo`<00000103oool00`000000oooo0?ooo`060?oooa<00000A`3ooolC000002 at 0
+oooo000B0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`05
+0000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`060?oooa<00000J`3ooolB0000
+0180oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080oooo00D00000
+0?ooo`3oool0oooo000000030?ooo`030000003oool0oooo00H0oooo4`0000170?oooa<00000903o
+ool00180oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo00D0oooo00<0
+00000?ooo`3oool00P0000070?oooa<00000J`3ooolB00000180oooo00D000000?ooo`3oool0oooo
+000000060?ooo`030000003oool0oooo00D0oooo00 at 000000?ooo`3oool0oooo0P0000070?oooa<0
+0000A`3ooolC000002 at 0oooo000B0?ooo`050000003oool0oooo0?ooo`0000001P3oool01 at 000000
+oooo0?ooo`3oool0000000<0oooo00 at 000000?ooo`3oool00000203ooolC000006/0oooo4P00000B
+0?ooo`050000003oool0oooo0?ooo`0000001P3oool01 at 000000oooo0?ooo`3oool0000000<0oooo
+00D000000?ooo`3oool0oooo000000080?oooa<00000A`3ooolC000002 at 0oooo000B0?ooo`050000
+003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`04000000<0oooo00<000000?ooo`3o
+ool01P3ooolC000006/0oooo4P00000B0?ooo`050000003oool0oooo0?ooo`0000001`3oool00`00
+0000oooo0?ooo`04000000 at 0oooo00<000000?ooo`3oool01P3ooolC000004L0oooo4`00000T0?oo
+o`004P3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00D000000?ooo`3oool0oooo00000005
+0?ooo`8000001`3ooolC000006/0oooo4P00000B0?ooo`050000003oool0oooo0?ooo`0000001`3o
+ool01 at 000000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3oool01P3ooolC000004L0oooo
+4`00000T0?ooo`004`3oool3000000D0oooo1 at 0000020?ooo`@000000P3oool00`000000oooo0?oo
+o`060?oooa<00000J`3ooolB000001<0oooo0`0000050?ooo`D000000P3oool4000000<0oooo00<0
+00000?ooo`3oool01P3ooolC000004L0oooo4`00000T0?ooo`00:03oool2000000L0oooo4`00001[
+0?oooa800000:@3oool00`000000oooo0?ooo`1P0?oooa<00000903oool002P0oooo00<000000?oo
+o`3oool01P3ooolC000006/0oooo4P00000Y0?ooo`030000003oool0oooo0600oooo4`00000T0?oo
+o`00:03oool2000000L0oooo4`00001[0?oooa800000:@3oool00`000000oooo0?ooo`1P0?oooa<0
+0000903oool002P0oooo00<000000?ooo`3oool01P3ooolC000006/0oooo4P00000Y0?ooo`030000
+003oool0oooo0600oooo4`00000T0?ooo`00903oool010000000oooo0?ooo`3oool200000;/0oooo
+00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`1P0?oooa<00000903oool002 at 0oooo00D0
+00000?ooo`3oool0oooo0000002l0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool0
+H03ooolC000002 at 0oooo000T0?ooo`040000003oool0oooo0?ooo`800000^`3oool00`000000oooo
+0?ooo`020?ooo`800000H at 3ooolC000002@0oooo000T0?ooo`030000003oool0oooo0;h0oooo00<0
+00000?ooo`3oool0W03oool00280oooo00<000000?ooo`000000_P3oool00`000000oooo0000002N
+0?ooo`008`3oool200000;l0oooo0P00002N0?ooo`00903oool00`000000oooo0?ooo`2n0?ooo`03
+0000003oool0oooo09`0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?oo
+ohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?oo
+ohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?oo
+ohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?oo
+ohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo003o0?ooohD0oooo000T0?oo
+o`030000003oool0oooo0;h0oooo00<000000?ooo`3oool0W03oool002 at 0oooo00<000000?ooo`3o
+ool0_P3oool00`000000oooo0?ooo`2L0?ooo`007P3oool2000000 at 0oooo00<000000?ooo`3oool0
+^03oool2000000 at 0oooo00<000000?ooo`3oool0W03oool002 at 0oooo00@000000?ooo`3oool0oooo
+0P00002k0?ooo`030000003oool0oooo0080oooo0P00002H0?ooo`008P3oool00`000000oooo0000
+00030?ooo`030000003oool0oooo0;P0oooo00<000000?ooo`000000103oool00`000000oooo0?oo
+o`240?ooo`X000002 at 3oool002<0oooo0P0000030?ooo`800000^P3oool2000000 at 0oooo00<00000
+0?ooo`3oool0Q03ooolA00000080oooo000T0?ooo`050000003oool0oooo0?ooo`000000_03oool0
+0`000000oooo0?ooo`020?ooo`030000003oool0oooo08 at 0oooo4@0000020?ooo`00:03oool20000
+0<00oooo00<000000?ooo`3oool0Q03ooolA00000080oooo000X0?ooo`030000003oool0oooo0;l0
+oooo00<000000?ooo`3oool0Q03ooolA00000080oooo000X0?ooo`030000003oool0oooo0;l0oooo
+00<000000?ooo`3oool0Q03ooolA00000080oooo000X0?ooo`800000`03oool00`000000oooo0?oo
+o`1b0?ooob<000000P3oool002P0oooo00<000000?ooo`3oool0_`3oool00`000000oooo0?ooo`1b
+0?ooob<000000P3oool001<0oooo0`0000030?ooo`040000003oool0oooo000000D0oooo0`000003
+0?ooo`800000ZP3oool3000000<0oooo00 at 000000?ooo`3oool000001 at 3oool3000000@0oooo00<0
+00000?ooo`3oool0LP3ooolS00000080oooo000B0?ooo`050000003oool0oooo0?ooo`0000001 at 3o
+ool00`000000oooo0?ooo`020?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo
+0?ooo`2X0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`05
+0000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`1b0?ooob<000000P3oool000l0
+oooo0P0000000`3oool000000?ooo`020?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3o
+ool01 at 3oool00`000000oooo0?ooo`0200000:H0oooo0P0000000`3oool000000?ooo`020?ooo`03
+0000003oool0oooo00 at 0oooo00<000000?ooo`3oool01 at 3oool010000000oooo0?ooo`3oool20000
+07<0oooo8`0000020?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00D000000?oo
+o`3oool0oooo000000030?ooo`040000003oool0oooo00000:X0oooo00D000000?ooo`3oool0oooo
+000000060?ooo`050000003oool0oooo0?ooo`0000000`3oool01 at 000000oooo0?ooo`3oool00000
+07 at 0oooo8`0000020?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?oo
+o`3oool0100000030?ooo`800000Z at 3oool01@000000oooo0?ooo`3oool0000000L0oooo00<00000
+0?ooo`3oool0100000040?ooo`030000003oool0oooo0780oooo8`0000020?ooo`004P3oool01 at 00
+0000oooo0?ooo`3oool0000000L0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003o
+ool0oooo0:P0oooo00D000000?ooo`3oool0oooo000000070?ooo`050000003oool0oooo0?ooo`00
+00001P3oool00`000000oooo0?ooo`1b0?ooob<000000P3oool001<0oooo0`0000050?ooo`D00000
+0P3oool400000080oooo00<000000?ooo`3oool0Z at 3oool3000000D0oooo1@0000020?ooo`@00000
+0`3oool00`000000oooo0?ooo`1b0?ooob<000000P3oool002P0oooo0P0000300?ooo`030000003o
+ool0oooo0780oooo8`0000020?ooo`00:03oool00`000000oooo0?ooo`2o0?ooo`030000003oool0
+oooo0780oooo8`0000020?ooo`00:03oool200000<00oooo00<000000?ooo`3oool0LP3ooolS0000
+0080oooo000X0?ooo`030000003oool0oooo0;l0oooo00<000000?ooo`3oool0LP3ooolS00000080
+oooo000I0?ooo`<000000`3oool00`000000oooo0?ooo`03000000<0oooo0P00002`0?ooo`<00000
+0`3oool00`000000oooo0?ooo`03000000 at 0oooo00<000000?ooo`3oool0H03ooole00000080oooo
+000H0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool000000080
+oooo00<000000?ooo`3oool0[P3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?oo
+o`3oool0oooo000000030?ooo`030000003oool0oooo0600oooo=@0000020?ooo`005 at 3oool20000
+00030?ooo`000000oooo0080oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`020000
+0:`0oooo0P0000000`3oool000000?ooo`020?ooo`030000003oool0oooo00H0oooo00 at 000000?oo
+o`3oool0oooo0P00001Q0?ooocD000000P3oool001P0oooo00D000000?ooo`3oool0oooo00000004
+0?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`2^0?ooo`050000003o
+ool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000<0oooo00<000000?ooo`3o
+ool0H03ooole00000080oooo000H0?ooo`050000003oool0oooo0?ooo`000000103oool4000000<0
+oooo0P00002_0?ooo`050000003oool0oooo0?ooo`000000103oool4000000 at 0oooo00<000000?oo
+o`3oool0H03ooole00000080oooo000H0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`00
+0000oooo0?ooo`030?ooo`030000003oool0oooo0:h0oooo00D000000?ooo`3oool0oooo00000005
+0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0H03ooole00000080oooo000I0?oo
+o`<000001P3oool400000080oooo00<000000?ooo`3oool0[`3oool3000000H0oooo100000030?oo
+o`030000003oool0oooo0600oooo=@0000020?ooo`00:03oool200000<00oooo00<000000?ooo`3o
+ool0H03ooole00000080oooo000X0?ooo`030000003oool0oooo0;l0oooo00<000000?ooo`3oool0
+H03ooole00000080oooo000X0?ooo`800000`03oool00`000000oooo0?ooo`1P0?ooocD000000P3o
+ool002P0oooo00<000000?ooo`3oool0_`3oool00`000000oooo0?ooo`1P0?ooocD000000P3oool0
+01<0oooo0`0000030?ooo`030000003oool0000000 at 000000P3oool3000000<0oooo0P00002Z0?oo
+o`<000000`3oool00`000000oooo0000000400000080oooo0`0000040?ooo`030000003oool0oooo
+0600oooo=@0000020?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?oo
+o`3oool00P3oool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool0Z03oool0
+1 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?oo
+o`3oool0000000<0oooo00<000000?ooo`3oool0H03ooole00000080oooo000?0?ooo`80000000<0
+oooo0000003oool00P3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo00D0oooo00<0
+00000?ooo`3oool00P00002V0?ooo`80000000<0oooo0000003oool00P3oool00`000000oooo0?oo
+o`040?ooo`030000003oool0oooo00D0oooo00 at 000000?ooo`3oool0oooo0P00001Q0?ooocD00000
+0P3oool00180oooo00D000000?ooo`3oool0oooo000000070?ooo`040000003oool0oooo000000<0
+oooo00 at 000000?ooo`3oool00000ZP3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00 at 00000
+0?ooo`3oool000000`3oool01 at 000000oooo0?ooo`3oool000000680oooo=@0000020?ooo`004P3o
+ool01 at 000000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`0000000`0000030?ooo`030000
+003oool0oooo0:P0oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool0000000<0
+0000103oool00`000000oooo0?ooo`1P0?ooocD000000P3oool00180oooo00D000000?ooo`3oool0
+oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`030?oo
+o`800000Z at 3oool01@000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo0000
+00020?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0CP3ooom700000080oooo000C
+0?ooo`<000001P3oool3000000<0oooo100000020?ooo`030000003oool0oooo0:T0oooo0`000006
+0?ooo`<000000`3oool4000000<0oooo00<000000?ooo`3oool0CP3ooom700000080oooo000X0?oo
+o`800000`03oool00`000000oooo0?ooo`1>0?ooodL000000P3oool002P0oooo00<000000?ooo`3o
+ool0_`3oool00`000000oooo0?ooo`1>0?ooodL000000P3oool002P0oooo0P0000300?ooo`030000
+003oool0oooo04h0ooooA`0000020?ooo`00:03oool00`000000oooo0?ooo`2o0?ooo`030000003o
+ool0oooo04h0ooooA`0000020?ooo`008P3oool3000000<0oooo0P00002i0?ooo`<00000103oool0
+0`000000oooo0?ooo`1>0?ooodL000000P3oool00240oooo00D000000?ooo`3oool0oooo00000002
+0?ooo`030000003oool0oooo0;L0oooo00D000000?ooo`3oool0oooo000000030?ooo`030000003o
+ool0oooo04h0ooooA`0000020?ooo`008 at 3oool01@000000oooo0?ooo`3oool000000080oooo0P00
+00070?ooohP00000:@3oool01 at 000000oooo0?ooo`3oool0000000<0oooo0P0000070?ooohl00000
+0P3oool00240oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00H0oooo
+T000000Q0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`060?ooodT0
+0000B03oool00240oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00H0
+ooooT000000Q0?ooo`050000003oool0oooo0?ooo`0000000`3oool00`000000oooo0?ooo`060?oo
+odT00000B03oool00240oooo00D000000?ooo`3oool0oooo000000020?ooo`8000001`3ooon at 0000
+0240oooo00D000000?ooo`3oool0oooo000000030?ooo`030000003oool0oooo00H0ooooB at 000018
+0?ooo`008P3oool3000000<0oooo00<000000?ooo`3oool01P3ooon at 00000280oooo0`0000040?oo
+o`030000003oool0oooo00H0ooooB at 0000180?ooo`00:03oool2000000L0ooooT000000Y0?ooo`03
+0000003oool0oooo00H0ooooB at 0000180?ooo`00:03oool00`000000oooo0?ooo`060?oooi000000
+:@3oool00`000000oooo0?ooo`060?ooodT00000B03oool002P0oooo0P0000070?oooi000000:@3o
+ool00`000000oooo0?ooo`060?ooodT00000B03oool002P0oooo00<000000?ooo`3oool01P3ooon@
+000002T0oooo00<000000?ooo`3oool01P3ooom9000004P0oooo000C0?ooo`<000000`3oool00`00
+0000oooo0000000400000080oooo0`0000030?ooo`8000001`3ooon at 000001<0oooo0`0000030?oo
+o`030000003oool0000000 at 000000P3oool3000000@0oooo00<000000?ooo`3oool01P3ooom90000
+04P0oooo000B0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?oo
+o`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`060?oooi0000004P3oool0
+1 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?oo
+o`3oool0000000<0oooo00<000000?ooo`3oool01P3ooolg000005X0oooo000B0?ooo`050000003o
+ool0oooo0?ooo`0000001P3oool00`000000oooo0?ooo`050?ooo`040000003oool0oooo000000P0
+ooooT000000B0?ooo`050000003oool0oooo0?ooo`0000001P3oool00`000000oooo0?ooo`050?oo
+o`050000003oool0oooo0?ooo`000000203ooolg000005X0oooo000B0?ooo`050000003oool0oooo
+0?ooo`0000001`3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo008000001`3o
+oon at 00000180oooo00D000000?ooo`3oool0oooo000000070?ooo`040000003oool0oooo000000<0
+oooo00 at 000000?ooo`3oool0oooo0P0000070?ooocL00000FP3oool00180oooo00D000000?ooo`3o
+ool0oooo000000080?ooo`030000003oool0000000<000000`3oool00`000000oooo0?ooo`060?oo
+oi0000004P3oool01 at 000000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`0000000`000004
+0?ooo`030000003oool0oooo00H0oooo=`00001J0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0
+000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00<0oooo0P00
+00070?oooi0000004P3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0
+oooo000000020?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool01P3ooolg000005X0
+oooo000C0?ooo`<000001P3oool3000000<0oooo100000020?ooo`030000003oool0oooo00H0oooo
+T000000C0?ooo`<000001P3oool3000000<0oooo100000030?ooo`030000003oool0oooo00H0oooo
+=`00001J0?ooo`00:03oool2000000L0ooooT000000Y0?ooo`030000003oool0oooo00H0oooo=`00
+001J0?ooo`00:03oool00`000000oooo0?ooo`060?oooi000000:@3oool00`000000oooo0?ooo`06
+0?ooocL00000FP3oool002P0oooo0P0000070?oooi000000:@3oool00`000000oooo0?ooo`060?oo
+ocL00000FP3oool002P0oooo00<000000?ooo`3oool01P3ooon at 000002T0oooo00<000000?ooo`3o
+ool01P3ooolg000005X0oooo000I0?ooo`<000000`3oool00`000000oooo0?ooo`03000000<0oooo
+0P0000070?oooi0000006 at 3oool3000000<0oooo00<000000?ooo`3oool00`0000040?ooo`030000
+003oool0oooo00H0oooo=`00001J0?ooo`00603oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo
+00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00H0ooooT000000H0?ooo`05
+0000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000<0oooo00<00000
+0?ooo`3oool01P3ooolg000005X0oooo000H0?ooo`050000003oool0oooo0?ooo`000000203oool0
+10000000oooo0?ooo`0000080?oooi000000603oool01 at 000000oooo0?ooo`3oool0000000P0oooo
+00D000000?ooo`3oool0oooo000000080?ooocL00000FP3oool001P0oooo00D000000?ooo`3oool0
+oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3oool2000000L0ooooT000000H0?oo
+o`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000<0oooo0P00
+00070?ooocL00000FP3oool001P0oooo00D000000?ooo`3oool0oooo000000040?ooo`@000000`3o
+ool00`000000oooo0?ooo`060?oooi000000603oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo
+100000040?ooo`030000003oool0oooo00H0oooo=`00001J0?ooo`00603oool01 at 000000oooo0?oo
+o`3oool0000000D0oooo00<000000?ooo`3oool00`3oool2000000L0ooooT000000H0?ooo`050000
+003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo00H0
+oooo=`00001J0?ooo`006 at 3oool3000000H0oooo100000020?ooo`030000003oool0oooo00H0oooo
+T000000I0?ooo`<000001P3oool4000000<0oooo00<000000?ooo`3oool01P3ooolU000006`0oooo
+000X0?ooo`8000001`3ooon at 000002T0oooo00<000000?ooo`3oool01P3ooolU000006`0oooo000X
+0?ooo`030000003oool0oooo00H0ooooT000000Y0?ooo`030000003oool0oooo00H0oooo9 at 00001/
+0?ooo`00:03oool2000000L0ooooT000000Y0?ooo`030000003oool0oooo00H0oooo9 at 00001/0?oo
+o`00:03oool00`000000oooo0?ooo`060?oooi000000:@3oool00`000000oooo0?ooo`060?ooobD0
+0000K03oool001<0oooo0`0000030?ooo`040000003oool0oooo000000D0oooo0`0000030?ooo`03
+0000003oool0oooo00H0ooooT000000C0?ooo`<000000`3oool010000000oooo0?ooo`0000050?oo
+o`<00000103oool00`000000oooo0?ooo`060?ooobD00000K03oool00180oooo00D000000?ooo`3o
+ool0oooo000000050?ooo`030000003oool0oooo0080oooo00D000000?ooo`3oool0oooo00000002
+0?ooo`8000001`3ooon at 00000180oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003o
+ool0oooo0080oooo00D000000?ooo`3oool0oooo000000030?ooo`030000003oool0oooo00H0oooo
+9 at 00001/0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3oool0
+1 at 3oool010000000oooo0?ooo`00002Z0?ooo`050000003oool0oooo0?ooo`0000001P3oool00`00
+0000oooo0?ooo`050?ooo`050000003oool0oooo0?ooo`000000203ooolU000006`0oooo000B0?oo
+o`050000003oool0oooo0?ooo`0000001P3oool01 at 000000oooo0?ooo`3oool0000000<0oooo00<0
+00000?ooo`3oool00P00002Y0?ooo`050000003oool0oooo0?ooo`0000001P3oool01 at 000000oooo
+0?ooo`3oool0000000<0oooo00 at 000000?ooo`3oool0oooo0P0000070?ooobD00000K03oool00180
+oooo00D000000?ooo`3oool0oooo000000070?ooo`030000003oool0oooo00 at 000000`3oool00`00
+0000oooo0?ooo`2X0?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`04
+000000 at 0oooo00<000000?ooo`3oool01P3ooolU000006`0oooo000B0?ooo`050000003oool0oooo
+0?ooo`0000001`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo0P00002Y0?ooo`050000003o
+ool0oooo0?ooo`0000001`3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3o
+ool01P3ooolU000006`0oooo000C0?ooo`<000001 at 3oool500000080oooo100000020?ooo`030000
+003oool0oooo0:T0oooo0`0000050?ooo`D000000P3oool4000000<0oooo00<000000?ooo`3oool0
+1P3ooolU000006`0oooo000X0?ooo`800000`03oool00`000000oooo0?ooo`060?oooa<00000OP3o
+ool002P0oooo00<000000?ooo`3oool0_`3oool00`000000oooo0?ooo`060?oooa<00000OP3oool0
+02P0oooo0P0000300?ooo`030000003oool0oooo00H0oooo4`00001n0?ooo`00:03oool00`000000
+oooo0?ooo`2o0?ooo`030000003oool0oooo00H0oooo4`00001n0?ooo`00903oool01 at 000000oooo
+0?ooo`3oool000000;`0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`060?oooa<0
+0000OP3oool002 at 0oooo00@000000?ooo`3oool0oooo0P00002k0?ooo`030000003oool0oooo0080
+oooo00<000000?ooo`3oool01P3ooolC000007h0oooo000T0?ooo`050000003oool0oooo0?ooo`00
+0000_03oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo00H0oooo4`00001n0?ooo`00
+903oool010000000oooo0?ooo`3oool200000;/0oooo00<000000?ooo`3oool00P3oool2000009P0
+oooo000R0?ooo`030000003oool000000;h0oooo00<000000?ooo`000000WP3oool002<0oooo0P00
+002o0?ooo`800000WP3oool002 at 0oooo00<000000?ooo`3oool0_P3oool00`000000oooo0?ooo`2L
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon5
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon5
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon5
+0?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00o`3ooon50?ooo`00\
+\>"],
+  ImageRangeCache->{{{0, 387.25}, {490.375, 0}} -> {-0.0500105, -0.0641291, 
+  0.00542291, 0.00542291}, {{9.1875, 184.813}, {478.5, 370}} -> {-2.27976,
+   -1.48781, 0.0556229, 0.0224999}, {{202.375, 378}, {478.5, 370}} ->
+   {-13.0254, -1.48781, 0.0556229, 0.0224999}, {{9.1875, 184.813}, {359.125, 
+  250.563}} -> {-2.27976, -4.17445, 0.0556229, 0.0224999}, {{202.375, 378}, {
+  359.125, 250.563}} -> {-13.0254, -4.17445, 0.0556229, 0.0224999}, {{9.1875, 
+  184.813}, {239.75, 131.188}} -> {-2.27976, -6.86037, 0.0556229, 0.0224999},
+   {{202.375, 378}, {239.75, 131.188}} -> {-13.0254, -6.86037, 0.0556229, 
+  0.0224999}, {{9.1875, 184.813}, {120.313, 11.8125}} -> {-2.27976, -9.54701, 
+  0.0556229, 0.0224999}, {{202.375, 378}, {120.313, 11.8125}} -> {-13.0254,
+   -9.54701, 0.0556229, 0.0224999}}]
+}, Open  ]],
+
+Cell["\<\
+Compute a table of weighted frequency responses for each coefficient.\
+\>", "Text"],
+
+Cell[BoxData[
+    \(\(theoradct8fwtable1024 = fwtable[theoradct8, 1024]; \)\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+    \(\(\(ListPlot[#, PlotJoined -> True, Axes -> {False, True}]&\)/@
+      theoradct8fwtable1024; \)\)], "Input"],
+
+Cell[CellGroupData[{
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.17721 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .13244 -18 -4.5 ]
+[.01131 .13244 0 4.5 ]
+[.01131 .25016 -18 -4.5 ]
+[.01131 .25016 0 4.5 ]
+[.01131 .36788 -18 -4.5 ]
+[.01131 .36788 0 4.5 ]
+[.01131 .4856 -18 -4.5 ]
+[.01131 .4856 0 4.5 ]
+[.01131 .60332 -18 -4.5 ]
+[.01131 .60332 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .13244 m
+.03006 .13244 L
+s
+[(0.1)] .01131 .13244 1 0 Mshowa
+.02381 .25016 m
+.03006 .25016 L
+s
+[(0.2)] .01131 .25016 1 0 Mshowa
+.02381 .36788 m
+.03006 .36788 L
+s
+[(0.3)] .01131 .36788 1 0 Mshowa
+.02381 .4856 m
+.03006 .4856 L
+s
+[(0.4)] .01131 .4856 1 0 Mshowa
+.02381 .60332 m
+.03006 .60332 L
+s
+[(0.5)] .01131 .60332 1 0 Mshowa
+.125 Mabswid
+.02381 .03826 m
+.02756 .03826 L
+s
+.02381 .0618 m
+.02756 .0618 L
+s
+.02381 .08535 m
+.02756 .08535 L
+s
+.02381 .10889 m
+.02756 .10889 L
+s
+.02381 .15598 m
+.02756 .15598 L
+s
+.02381 .17952 m
+.02756 .17952 L
+s
+.02381 .20307 m
+.02756 .20307 L
+s
+.02381 .22661 m
+.02756 .22661 L
+s
+.02381 .2737 m
+.02756 .2737 L
+s
+.02381 .29724 m
+.02756 .29724 L
+s
+.02381 .32079 m
+.02756 .32079 L
+s
+.02381 .34433 m
+.02756 .34433 L
+s
+.02381 .39142 m
+.02756 .39142 L
+s
+.02381 .41497 m
+.02756 .41497 L
+s
+.02381 .43851 m
+.02756 .43851 L
+s
+.02381 .46205 m
+.02756 .46205 L
+s
+.02381 .50914 m
+.02756 .50914 L
+s
+.02381 .53269 m
+.02756 .53269 L
+s
+.02381 .55623 m
+.02756 .55623 L
+s
+.02381 .57977 m
+.02756 .57977 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .60332 m
+.02567 .6033 L
+.0266 .60326 L
+.02753 .60319 L
+.02846 .60309 L
+.02938 .60296 L
+.03031 .6028 L
+.03124 .60261 L
+.03217 .60239 L
+.0331 .60214 L
+.03403 .60187 L
+.03496 .60156 L
+.03589 .60123 L
+.03682 .60086 L
+.03775 .60047 L
+.03868 .60005 L
+.03961 .5996 L
+.04053 .59912 L
+.04146 .59862 L
+.04239 .59808 L
+.04332 .59752 L
+.04425 .59693 L
+.04518 .5963 L
+.04611 .59566 L
+.04704 .59498 L
+.04797 .59427 L
+.0489 .59354 L
+.04983 .59277 L
+.05075 .59198 L
+.05168 .59116 L
+.05261 .59032 L
+.05354 .58944 L
+.05447 .58854 L
+.0554 .58761 L
+.05633 .58665 L
+.05726 .58566 L
+.05819 .58465 L
+.05912 .58361 L
+.06005 .58254 L
+.06098 .58144 L
+.0619 .58032 L
+.06283 .57917 L
+.06376 .57799 L
+.06469 .57679 L
+.06562 .57556 L
+.06655 .5743 L
+.06748 .57302 L
+.06841 .5717 L
+.06934 .57037 L
+.07027 .569 L
+Mistroke
+.0712 .56762 L
+.07213 .5662 L
+.07305 .56476 L
+.07398 .56329 L
+.07491 .5618 L
+.07584 .56028 L
+.07677 .55874 L
+.0777 .55717 L
+.07863 .55558 L
+.07956 .55396 L
+.08049 .55232 L
+.08142 .55065 L
+.08235 .54896 L
+.08328 .54724 L
+.0842 .5455 L
+.08513 .54373 L
+.08606 .54194 L
+.08699 .54013 L
+.08792 .53829 L
+.08885 .53643 L
+.08978 .53455 L
+.09071 .53264 L
+.09164 .53072 L
+.09257 .52876 L
+.0935 .52679 L
+.09443 .52479 L
+.09535 .52277 L
+.09628 .52073 L
+.09721 .51867 L
+.09814 .51658 L
+.09907 .51447 L
+.1 .51235 L
+.10093 .5102 L
+.10186 .50803 L
+.10279 .50583 L
+.10372 .50362 L
+.10465 .50139 L
+.10557 .49914 L
+.1065 .49686 L
+.10743 .49457 L
+.10836 .49226 L
+.10929 .48993 L
+.11022 .48757 L
+.11115 .4852 L
+.11208 .48281 L
+.11301 .48041 L
+.11394 .47798 L
+.11487 .47553 L
+.1158 .47307 L
+.11672 .47059 L
+Mistroke
+.11765 .46809 L
+.11858 .46558 L
+.11951 .46304 L
+.12044 .46049 L
+.12137 .45792 L
+.1223 .45534 L
+.12323 .45274 L
+.12416 .45012 L
+.12509 .44749 L
+.12602 .44484 L
+.12695 .44218 L
+.12787 .4395 L
+.1288 .43681 L
+.12973 .4341 L
+.13066 .43138 L
+.13159 .42864 L
+.13252 .42589 L
+.13345 .42312 L
+.13438 .42034 L
+.13531 .41755 L
+.13624 .41474 L
+.13717 .41193 L
+.1381 .40909 L
+.13902 .40625 L
+.13995 .40339 L
+.14088 .40053 L
+.14181 .39765 L
+.14274 .39475 L
+.14367 .39185 L
+.1446 .38894 L
+.14553 .38601 L
+.14646 .38308 L
+.14739 .38013 L
+.14832 .37718 L
+.14925 .37421 L
+.15017 .37124 L
+.1511 .36825 L
+.15203 .36526 L
+.15296 .36226 L
+.15389 .35924 L
+.15482 .35622 L
+.15575 .3532 L
+.15668 .35016 L
+.15761 .34712 L
+.15854 .34407 L
+.15947 .34101 L
+.16039 .33795 L
+.16132 .33488 L
+.16225 .3318 L
+.16318 .32872 L
+Mistroke
+.16411 .32563 L
+.16504 .32253 L
+.16597 .31943 L
+.1669 .31633 L
+.16783 .31322 L
+.16876 .3101 L
+.16969 .30698 L
+.17062 .30386 L
+.17154 .30073 L
+.17247 .2976 L
+.1734 .29447 L
+.17433 .29133 L
+.17526 .28819 L
+.17619 .28505 L
+.17712 .28191 L
+.17805 .27876 L
+.17898 .27561 L
+.17991 .27246 L
+.18084 .26931 L
+.18177 .26616 L
+.18269 .26301 L
+.18362 .25985 L
+.18455 .2567 L
+.18548 .25354 L
+.18641 .25039 L
+.18734 .24724 L
+.18827 .24408 L
+.1892 .24093 L
+.19013 .23778 L
+.19106 .23463 L
+.19199 .23149 L
+.19292 .22834 L
+.19384 .2252 L
+.19477 .22206 L
+.1957 .21892 L
+.19663 .21578 L
+.19756 .21265 L
+.19849 .20952 L
+.19942 .2064 L
+.20035 .20328 L
+.20128 .20016 L
+.20221 .19705 L
+.20314 .19394 L
+.20407 .19084 L
+.20499 .18774 L
+.20592 .18464 L
+.20685 .18156 L
+.20778 .17848 L
+.20871 .1754 L
+.20964 .17233 L
+Mistroke
+.21057 .16927 L
+.2115 .16621 L
+.21243 .16316 L
+.21336 .16012 L
+.21429 .15709 L
+.21521 .15406 L
+.21614 .15104 L
+.21707 .14803 L
+.218 .14503 L
+.21893 .14203 L
+.21986 .13905 L
+.22079 .13607 L
+.22172 .1331 L
+.22265 .13015 L
+.22358 .1272 L
+.22451 .12426 L
+.22544 .12133 L
+.22636 .11841 L
+.22729 .11551 L
+.22822 .11261 L
+.22915 .10972 L
+.23008 .10685 L
+.23101 .10398 L
+.23194 .10113 L
+.23287 .09829 L
+.2338 .09546 L
+.23473 .09265 L
+.23566 .08984 L
+.23659 .08705 L
+.23751 .08427 L
+.23844 .08151 L
+.23937 .07875 L
+.2403 .07601 L
+.24123 .07329 L
+.24216 .07058 L
+.24309 .06788 L
+.24402 .06519 L
+.24495 .06252 L
+.24588 .05987 L
+.24681 .05723 L
+.24774 .0546 L
+.24866 .05199 L
+.24959 .04939 L
+.25052 .04681 L
+.25145 .04424 L
+.25238 .04169 L
+.25331 .03916 L
+.25424 .03664 L
+.25517 .03414 L
+.2561 .03165 L
+Mistroke
+.25703 .02918 L
+.25796 .02673 L
+.25889 .02429 L
+.25981 .02187 L
+.26074 .01947 L
+.26167 .01708 L
+.2626 .01472 L
+.26353 .01707 L
+.26446 .0194 L
+.26539 .02171 L
+.26632 .02401 L
+.26725 .02629 L
+.26818 .02855 L
+.26911 .03079 L
+.27003 .03302 L
+.27096 .03522 L
+.27189 .03741 L
+.27282 .03958 L
+.27375 .04173 L
+.27468 .04386 L
+.27561 .04597 L
+.27654 .04806 L
+.27747 .05014 L
+.2784 .05219 L
+.27933 .05422 L
+.28026 .05624 L
+.28118 .05823 L
+.28211 .0602 L
+.28304 .06216 L
+.28397 .06409 L
+.2849 .066 L
+.28583 .0679 L
+.28676 .06977 L
+.28769 .07162 L
+.28862 .07345 L
+.28955 .07526 L
+.29048 .07705 L
+.29141 .07882 L
+.29233 .08057 L
+.29326 .0823 L
+.29419 .084 L
+.29512 .08569 L
+.29605 .08735 L
+.29698 .08899 L
+.29791 .09061 L
+.29884 .09221 L
+.29977 .09379 L
+.3007 .09535 L
+.30163 .09688 L
+.30256 .09839 L
+Mistroke
+.30348 .09988 L
+.30441 .10135 L
+.30534 .1028 L
+.30627 .10423 L
+.3072 .10563 L
+.30813 .10701 L
+.30906 .10837 L
+.30999 .10971 L
+.31092 .11102 L
+.31185 .11232 L
+.31278 .11359 L
+.3137 .11484 L
+.31463 .11607 L
+.31556 .11727 L
+.31649 .11845 L
+.31742 .11961 L
+.31835 .12075 L
+.31928 .12187 L
+.32021 .12296 L
+.32114 .12403 L
+.32207 .12508 L
+.323 .12611 L
+.32393 .12711 L
+.32485 .12809 L
+.32578 .12905 L
+.32671 .12999 L
+.32764 .1309 L
+.32857 .1318 L
+.3295 .13267 L
+.33043 .13351 L
+.33136 .13434 L
+.33229 .13514 L
+.33322 .13593 L
+.33415 .13668 L
+.33508 .13742 L
+.336 .13814 L
+.33693 .13883 L
+.33786 .1395 L
+.33879 .14015 L
+.33972 .14077 L
+.34065 .14138 L
+.34158 .14196 L
+.34251 .14252 L
+.34344 .14306 L
+.34437 .14358 L
+.3453 .14407 L
+.34623 .14455 L
+.34715 .145 L
+.34808 .14543 L
+.34901 .14584 L
+Mistroke
+.34994 .14622 L
+.35087 .14659 L
+.3518 .14693 L
+.35273 .14726 L
+.35366 .14756 L
+.35459 .14784 L
+.35552 .1481 L
+.35645 .14834 L
+.35738 .14856 L
+.3583 .14875 L
+.35923 .14893 L
+.36016 .14908 L
+.36109 .14922 L
+.36202 .14933 L
+.36295 .14943 L
+.36388 .1495 L
+.36481 .14955 L
+.36574 .14958 L
+.36667 .1496 L
+.3676 .14959 L
+.36852 .14956 L
+.36945 .14951 L
+.37038 .14945 L
+.37131 .14936 L
+.37224 .14926 L
+.37317 .14913 L
+.3741 .14899 L
+.37503 .14882 L
+.37596 .14864 L
+.37689 .14844 L
+.37782 .14822 L
+.37875 .14798 L
+.37967 .14772 L
+.3806 .14744 L
+.38153 .14715 L
+.38246 .14683 L
+.38339 .1465 L
+.38432 .14615 L
+.38525 .14579 L
+.38618 .1454 L
+.38711 .145 L
+.38804 .14458 L
+.38897 .14414 L
+.3899 .14369 L
+.39082 .14322 L
+.39175 .14273 L
+.39268 .14222 L
+.39361 .1417 L
+.39454 .14116 L
+.39547 .14061 L
+Mistroke
+.3964 .14004 L
+.39733 .13945 L
+.39826 .13885 L
+.39919 .13823 L
+.40012 .13759 L
+.40105 .13695 L
+.40197 .13628 L
+.4029 .1356 L
+.40383 .13491 L
+.40476 .1342 L
+.40569 .13347 L
+.40662 .13273 L
+.40755 .13198 L
+.40848 .13121 L
+.40941 .13043 L
+.41034 .12963 L
+.41127 .12882 L
+.4122 .128 L
+.41312 .12717 L
+.41405 .12632 L
+.41498 .12545 L
+.41591 .12458 L
+.41684 .12369 L
+.41777 .12279 L
+.4187 .12188 L
+.41963 .12095 L
+.42056 .12001 L
+.42149 .11907 L
+.42242 .11811 L
+.42334 .11713 L
+.42427 .11615 L
+.4252 .11516 L
+.42613 .11415 L
+.42706 .11313 L
+.42799 .11211 L
+.42892 .11107 L
+.42985 .11002 L
+.43078 .10897 L
+.43171 .1079 L
+.43264 .10682 L
+.43357 .10573 L
+.43449 .10464 L
+.43542 .10353 L
+.43635 .10242 L
+.43728 .1013 L
+.43821 .10017 L
+.43914 .09903 L
+.44007 .09788 L
+.441 .09672 L
+.44193 .09556 L
+Mistroke
+.44286 .09439 L
+.44379 .09321 L
+.44472 .09202 L
+.44564 .09083 L
+.44657 .08963 L
+.4475 .08842 L
+.44843 .08721 L
+.44936 .08599 L
+.45029 .08477 L
+.45122 .08354 L
+.45215 .0823 L
+.45308 .08106 L
+.45401 .07981 L
+.45494 .07855 L
+.45587 .0773 L
+.45679 .07603 L
+.45772 .07477 L
+.45865 .07349 L
+.45958 .07222 L
+.46051 .07094 L
+.46144 .06965 L
+.46237 .06836 L
+.4633 .06707 L
+.46423 .06578 L
+.46516 .06448 L
+.46609 .06318 L
+.46702 .06188 L
+.46794 .06057 L
+.46887 .05926 L
+.4698 .05795 L
+.47073 .05664 L
+.47166 .05533 L
+.47259 .05401 L
+.47352 .0527 L
+.47445 .05138 L
+.47538 .05006 L
+.47631 .04874 L
+.47724 .04742 L
+.47816 .0461 L
+.47909 .04477 L
+.48002 .04345 L
+.48095 .04213 L
+.48188 .04081 L
+.48281 .03949 L
+.48374 .03817 L
+.48467 .03685 L
+.4856 .03553 L
+.48653 .03421 L
+.48746 .0329 L
+.48839 .03158 L
+Mistroke
+.48931 .03027 L
+.49024 .02896 L
+.49117 .02765 L
+.4921 .02635 L
+.49303 .02504 L
+.49396 .02374 L
+.49489 .02244 L
+.49582 .02115 L
+.49675 .01985 L
+.49768 .01856 L
+.49861 .01728 L
+.49954 .01599 L
+.50046 .01472 L
+.50139 .01599 L
+.50232 .01726 L
+.50325 .01853 L
+.50418 .01979 L
+.50511 .02105 L
+.50604 .0223 L
+.50697 .02355 L
+.5079 .02479 L
+.50883 .02603 L
+.50976 .02726 L
+.51069 .02849 L
+.51161 .02971 L
+.51254 .03092 L
+.51347 .03213 L
+.5144 .03334 L
+.51533 .03453 L
+.51626 .03572 L
+.51719 .03691 L
+.51812 .03809 L
+.51905 .03926 L
+.51998 .04042 L
+.52091 .04158 L
+.52184 .04272 L
+.52276 .04387 L
+.52369 .045 L
+.52462 .04613 L
+.52555 .04725 L
+.52648 .04836 L
+.52741 .04946 L
+.52834 .05055 L
+.52927 .05164 L
+.5302 .05272 L
+.53113 .05378 L
+.53206 .05484 L
+.53298 .05589 L
+.53391 .05694 L
+.53484 .05797 L
+Mistroke
+.53577 .05899 L
+.5367 .06001 L
+.53763 .06101 L
+.53856 .06201 L
+.53949 .06299 L
+.54042 .06397 L
+.54135 .06494 L
+.54228 .06589 L
+.54321 .06684 L
+.54413 .06777 L
+.54506 .0687 L
+.54599 .06961 L
+.54692 .07052 L
+.54785 .07141 L
+.54878 .07229 L
+.54971 .07317 L
+.55064 .07403 L
+.55157 .07488 L
+.5525 .07572 L
+.55343 .07654 L
+.55436 .07736 L
+.55528 .07817 L
+.55621 .07896 L
+.55714 .07974 L
+.55807 .08051 L
+.559 .08127 L
+.55993 .08202 L
+.56086 .08275 L
+.56179 .08348 L
+.56272 .08419 L
+.56365 .08489 L
+.56458 .08557 L
+.56551 .08625 L
+.56643 .08691 L
+.56736 .08756 L
+.56829 .0882 L
+.56922 .08883 L
+.57015 .08944 L
+.57108 .09004 L
+.57201 .09063 L
+.57294 .0912 L
+.57387 .09177 L
+.5748 .09232 L
+.57573 .09285 L
+.57666 .09338 L
+.57758 .09389 L
+.57851 .09439 L
+.57944 .09487 L
+.58037 .09534 L
+.5813 .0958 L
+Mistroke
+.58223 .09625 L
+.58316 .09668 L
+.58409 .0971 L
+.58502 .09751 L
+.58595 .0979 L
+.58688 .09828 L
+.5878 .09865 L
+.58873 .099 L
+.58966 .09934 L
+.59059 .09967 L
+.59152 .09999 L
+.59245 .10029 L
+.59338 .10057 L
+.59431 .10085 L
+.59524 .10111 L
+.59617 .10135 L
+.5971 .10159 L
+.59803 .10181 L
+.59895 .10202 L
+.59988 .10221 L
+.60081 .10239 L
+.60174 .10256 L
+.60267 .10271 L
+.6036 .10285 L
+.60453 .10298 L
+.60546 .10309 L
+.60639 .10319 L
+.60732 .10328 L
+.60825 .10335 L
+.60918 .10341 L
+.6101 .10346 L
+.61103 .10349 L
+.61196 .10351 L
+.61289 .10352 L
+.61382 .10351 L
+.61475 .10349 L
+.61568 .10346 L
+.61661 .10342 L
+.61754 .10336 L
+.61847 .10329 L
+.6194 .1032 L
+.62033 .10311 L
+.62125 .103 L
+.62218 .10287 L
+.62311 .10274 L
+.62404 .10259 L
+.62497 .10243 L
+.6259 .10225 L
+.62683 .10207 L
+.62776 .10187 L
+Mistroke
+.62869 .10166 L
+.62962 .10143 L
+.63055 .1012 L
+.63148 .10095 L
+.6324 .10069 L
+.63333 .10041 L
+.63426 .10013 L
+.63519 .09983 L
+.63612 .09952 L
+.63705 .0992 L
+.63798 .09887 L
+.63891 .09852 L
+.63984 .09816 L
+.64077 .0978 L
+.6417 .09742 L
+.64262 .09702 L
+.64355 .09662 L
+.64448 .09621 L
+.64541 .09578 L
+.64634 .09534 L
+.64727 .09489 L
+.6482 .09443 L
+.64913 .09396 L
+.65006 .09348 L
+.65099 .09299 L
+.65192 .09249 L
+.65285 .09198 L
+.65377 .09145 L
+.6547 .09092 L
+.65563 .09037 L
+.65656 .08982 L
+.65749 .08925 L
+.65842 .08868 L
+.65935 .08809 L
+.66028 .0875 L
+.66121 .0869 L
+.66214 .08628 L
+.66307 .08566 L
+.664 .08502 L
+.66492 .08438 L
+.66585 .08373 L
+.66678 .08307 L
+.66771 .0824 L
+.66864 .08172 L
+.66957 .08104 L
+.6705 .08034 L
+.67143 .07963 L
+.67236 .07892 L
+.67329 .0782 L
+.67422 .07747 L
+Mistroke
+.67515 .07673 L
+.67607 .07599 L
+.677 .07524 L
+.67793 .07447 L
+.67886 .07371 L
+.67979 .07293 L
+.68072 .07215 L
+.68165 .07136 L
+.68258 .07056 L
+.68351 .06975 L
+.68444 .06894 L
+.68537 .06812 L
+.6863 .0673 L
+.68722 .06647 L
+.68815 .06563 L
+.68908 .06479 L
+.69001 .06394 L
+.69094 .06308 L
+.69187 .06222 L
+.6928 .06135 L
+.69373 .06048 L
+.69466 .0596 L
+.69559 .05872 L
+.69652 .05783 L
+.69744 .05693 L
+.69837 .05603 L
+.6993 .05513 L
+.70023 .05422 L
+.70116 .05331 L
+.70209 .05239 L
+.70302 .05147 L
+.70395 .05054 L
+.70488 .04962 L
+.70581 .04868 L
+.70674 .04775 L
+.70767 .04681 L
+.70859 .04586 L
+.70952 .04491 L
+.71045 .04396 L
+.71138 .04301 L
+.71231 .04206 L
+.71324 .0411 L
+.71417 .04014 L
+.7151 .03917 L
+.71603 .03821 L
+.71696 .03724 L
+.71789 .03627 L
+.71882 .0353 L
+.71974 .03432 L
+.72067 .03335 L
+Mistroke
+.7216 .03237 L
+.72253 .03139 L
+.72346 .03042 L
+.72439 .02944 L
+.72532 .02846 L
+.72625 .02747 L
+.72718 .02649 L
+.72811 .02551 L
+.72904 .02453 L
+.72997 .02354 L
+.73089 .02256 L
+.73182 .02158 L
+.73275 .0206 L
+.73368 .01961 L
+.73461 .01863 L
+.73554 .01765 L
+.73647 .01667 L
+.7374 .01569 L
+.73833 .01472 L
+.73926 .01569 L
+.74019 .01667 L
+.74111 .01764 L
+.74204 .01861 L
+.74297 .01958 L
+.7439 .02055 L
+.74483 .02152 L
+.74576 .02248 L
+.74669 .02344 L
+.74762 .0244 L
+.74855 .02536 L
+.74948 .02631 L
+.75041 .02726 L
+.75134 .02821 L
+.75226 .02916 L
+.75319 .0301 L
+.75412 .03104 L
+.75505 .03197 L
+.75598 .0329 L
+.75691 .03383 L
+.75784 .03475 L
+.75877 .03567 L
+.7597 .03659 L
+.76063 .0375 L
+.76156 .03841 L
+.76249 .03931 L
+.76341 .04021 L
+.76434 .0411 L
+.76527 .04199 L
+.7662 .04287 L
+.76713 .04375 L
+Mistroke
+.76806 .04462 L
+.76899 .04549 L
+.76992 .04635 L
+.77085 .0472 L
+.77178 .04805 L
+.77271 .0489 L
+.77364 .04974 L
+.77456 .05057 L
+.77549 .05139 L
+.77642 .05221 L
+.77735 .05303 L
+.77828 .05383 L
+.77921 .05463 L
+.78014 .05543 L
+.78107 .05621 L
+.782 .05699 L
+.78293 .05776 L
+.78386 .05853 L
+.78479 .05929 L
+.78571 .06004 L
+.78664 .06078 L
+.78757 .06152 L
+.7885 .06224 L
+.78943 .06296 L
+.79036 .06368 L
+.79129 .06438 L
+.79222 .06508 L
+.79315 .06577 L
+.79408 .06645 L
+.79501 .06712 L
+.79593 .06778 L
+.79686 .06844 L
+.79779 .06908 L
+.79872 .06972 L
+.79965 .07035 L
+.80058 .07097 L
+.80151 .07158 L
+.80244 .07218 L
+.80337 .07277 L
+.8043 .07336 L
+.80523 .07393 L
+.80616 .0745 L
+.80708 .07505 L
+.80801 .0756 L
+.80894 .07614 L
+.80987 .07667 L
+.8108 .07718 L
+.81173 .07769 L
+.81266 .07819 L
+.81359 .07868 L
+Mistroke
+.81452 .07916 L
+.81545 .07963 L
+.81638 .08008 L
+.81731 .08053 L
+.81823 .08097 L
+.81916 .0814 L
+.82009 .08182 L
+.82102 .08223 L
+.82195 .08262 L
+.82288 .08301 L
+.82381 .08339 L
+.82474 .08375 L
+.82567 .08411 L
+.8266 .08446 L
+.82753 .08479 L
+.82846 .08511 L
+.82938 .08543 L
+.83031 .08573 L
+.83124 .08602 L
+.83217 .0863 L
+.8331 .08657 L
+.83403 .08683 L
+.83496 .08708 L
+.83589 .08732 L
+.83682 .08754 L
+.83775 .08776 L
+.83868 .08797 L
+.83961 .08816 L
+.84053 .08834 L
+.84146 .08851 L
+.84239 .08867 L
+.84332 .08882 L
+.84425 .08896 L
+.84518 .08909 L
+.84611 .08921 L
+.84704 .08931 L
+.84797 .0894 L
+.8489 .08949 L
+.84983 .08956 L
+.85075 .08962 L
+.85168 .08967 L
+.85261 .08971 L
+.85354 .08973 L
+.85447 .08975 L
+.8554 .08976 L
+.85633 .08975 L
+.85726 .08973 L
+.85819 .0897 L
+.85912 .08966 L
+.86005 .08961 L
+Mistroke
+.86098 .08955 L
+.8619 .08948 L
+.86283 .0894 L
+.86376 .0893 L
+.86469 .08919 L
+.86562 .08908 L
+.86655 .08895 L
+.86748 .08881 L
+.86841 .08866 L
+.86934 .0885 L
+.87027 .08833 L
+.8712 .08815 L
+.87213 .08796 L
+.87305 .08775 L
+.87398 .08754 L
+.87491 .08731 L
+.87584 .08708 L
+.87677 .08683 L
+.8777 .08657 L
+.87863 .08631 L
+.87956 .08603 L
+.88049 .08574 L
+.88142 .08544 L
+.88235 .08513 L
+.88328 .08481 L
+.8842 .08448 L
+.88513 .08414 L
+.88606 .08379 L
+.88699 .08343 L
+.88792 .08306 L
+.88885 .08268 L
+.88978 .08229 L
+.89071 .08189 L
+.89164 .08149 L
+.89257 .08107 L
+.8935 .08064 L
+.89443 .0802 L
+.89535 .07975 L
+.89628 .07929 L
+.89721 .07883 L
+.89814 .07835 L
+.89907 .07787 L
+.9 .07737 L
+.90093 .07687 L
+.90186 .07635 L
+.90279 .07583 L
+.90372 .0753 L
+.90465 .07476 L
+.90557 .07422 L
+.9065 .07366 L
+Mistroke
+.90743 .07309 L
+.90836 .07252 L
+.90929 .07194 L
+.91022 .07135 L
+.91115 .07075 L
+.91208 .07014 L
+.91301 .06953 L
+.91394 .06891 L
+.91487 .06828 L
+.9158 .06764 L
+.91672 .06699 L
+.91765 .06634 L
+.91858 .06568 L
+.91951 .06501 L
+.92044 .06434 L
+.92137 .06365 L
+.9223 .06296 L
+.92323 .06227 L
+.92416 .06156 L
+.92509 .06085 L
+.92602 .06014 L
+.92695 .05941 L
+.92787 .05868 L
+.9288 .05795 L
+.92973 .05721 L
+.93066 .05646 L
+.93159 .0557 L
+.93252 .05494 L
+.93345 .05418 L
+.93438 .0534 L
+.93531 .05263 L
+.93624 .05184 L
+.93717 .05106 L
+.9381 .05026 L
+.93902 .04946 L
+.93995 .04866 L
+.94088 .04785 L
+.94181 .04704 L
+.94274 .04622 L
+.94367 .0454 L
+.9446 .04457 L
+.94553 .04374 L
+.94646 .04291 L
+.94739 .04207 L
+.94832 .04122 L
+.94925 .04038 L
+.95017 .03952 L
+.9511 .03867 L
+.95203 .03781 L
+.95296 .03695 L
+Mistroke
+.95389 .03609 L
+.95482 .03522 L
+.95575 .03435 L
+.95668 .03348 L
+.95761 .0326 L
+.95854 .03172 L
+.95947 .03084 L
+.96039 .02996 L
+.96132 .02907 L
+.96225 .02819 L
+.96318 .0273 L
+.96411 .02641 L
+.96504 .02551 L
+.96597 .02462 L
+.9669 .02372 L
+.96783 .02283 L
+.96876 .02193 L
+.96969 .02103 L
+.97062 .02013 L
+.97154 .01923 L
+.97247 .01833 L
+.9734 .01742 L
+.97433 .01652 L
+.97526 .01562 L
+.97619 .01472 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooof80oooo000F0?ooo`030000003oool0oooo0?l0ooooHP3oool000d0
+oooo0`0000060?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`<00000E03oool00`000000oooo0?ooo`1C0?ooo`800000E at 3oool00`000000
+oooo0?ooo`1C0?ooo`800000203oool000`0oooo00D000000?ooo`3oool0oooo000000050?ooo`03
+0000003oool0oooo05 at 0oooo00<000000?ooo`3oool0D`3oool3000005<0oooo00<000000?ooo`00
+0000D`3oool2000000T0oooo000<0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000
+oooo0?ooo`1C0?ooo`030000003oool0000005<0oooo00 at 000000?ooo`3oool00000DP3oool01 at 00
+0000oooo0?ooo`3oool000000540oooo0P00000:0?ooo`003 at 3oool3000000H0oooo00<000000?oo
+o`3oool0D`3oool00`000000oooo0000001B0?ooo`030000003oool0oooo0080oooo00<000000?oo
+o`3oool0CP3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo04d0oooo0P00000;0?oo
+o`005P3oool00`000000oooo0?ooo`1B0?ooo`050000003oool0oooo0?ooo`000000D03oool20000
+00 at 0oooo0P00001>0?ooo`030000003oool0oooo00D0oooo00<000000?ooo`3oool0B`3oool20000
+00`0oooo000F0?ooo`030000003oool0oooo0580oooo00D000000?ooo`3oool0oooo0000001 at 0?oo
+o`030000003oool0oooo00 at 0oooo0P00001<0?ooo`800000203oool00`000000oooo0?ooo`190?oo
+o`8000003 at 3oool001H0oooo00<000000?ooo`3oool0DP3oool01 at 000000oooo0?ooo`3oool00000
+04l0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`190?ooo`8000002P3oool20000
+04P0oooo0P00000>0?ooo`005P3oool00`000000oooo0?ooo`1A0?ooo`030000003oool0oooo00<0
+oooo00<000000?ooo`3oool0B`3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo04L0
+oooo0P00000<0?ooo`800000AP3oool2000000l0oooo000F0?ooo`800000DP3oool00`000000oooo
+0?ooo`030?ooo`030000003oool0oooo04X0oooo0P00000:0?ooo`800000A`3oool2000000h0oooo
+0P0000140?ooo`800000403oool001H0oooo00<000000?ooo`3oool0D at 3oool00`000000oooo0?oo
+o`040?ooo`030000003oool0oooo04T0oooo00<000000?ooo`3oool02P3oool2000004D0oooo0P00
+000 at 0?ooo`800000 at P3oool200000140oooo000F0?ooo`030000003oool0oooo0500oooo00<00000
+0?ooo`3oool01 at 3oool00`000000oooo0?ooo`180?ooo`030000003oool0oooo00`0oooo0P000013
+0?ooo`8000004P3oool2000003l0oooo0`00000B0?ooo`005P3oool00`000000oooo0?ooo`1 at 0?oo
+o`030000003oool0oooo00H0oooo00<000000?ooo`3oool0AP3oool2000000l0oooo00<000000?oo
+o`3oool0 at 03oool2000001@0oooo0P00000m0?ooo`800000503oool001H0oooo00<000000?ooo`3o
+ool0C`3oool2000000P0oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`0?0?ooo`03
+0000003oool0oooo03h0oooo0P00000F0?ooo`800000>`3oool2000001D0oooo000F0?ooo`030000
+003oool0oooo04l0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`150?ooo`030000
+003oool0oooo0100oooo0P00000n0?ooo`800000603oool2000003T0oooo0P00000F0?ooo`005P3o
+ool00`000000oooo0?ooo`1?0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0@`3o
+ool2000001<0oooo0P00000l0?ooo`8000006P3oool2000003L0oooo0P00000G0?ooo`005P3oool0
+0`000000oooo0?ooo`1>0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0@`3oool0
+0`000000oooo0?ooo`0C0?ooo`800000>P3oool2000001`0oooo0P00000e0?ooo`800000603oool0
+01H0oooo00<000000?ooo`3oool0CP3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0oooo
+0440oooo00<000000?ooo`3oool05 at 3oool2000003P0oooo0P00000N0?ooo`800000<P3oool20000
+01X0oooo000F0?ooo`800000C`3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0oooo0400
+oooo0P00000H0?ooo`800000=P3oool200000240oooo0P00000_0?ooo`8000006`3oool001H0oooo
+00<000000?ooo`3oool0C at 3oool00`000000oooo0?ooo`0<0?ooo`030000003oool0oooo03h0oooo
+0P00000J0?ooo`800000=03oool00`000000oooo0?ooo`0R0?ooo`800000;@3oool2000001`0oooo
+000F0?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3oool0303oool00`000000oooo0?oo
+o`0n0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?oo
+o`0T0?ooo`800000:P3oool2000001h0oooo000F0?ooo`030000003oool0oooo04d0oooo00<00000
+0?ooo`3oool03 at 3oool00`000000oooo0?ooo`0l0?ooo`030000003oool0oooo01`0oooo0P00000_
+0?ooo`800000:@3oool2000002L0oooo0P00000O0?ooo`005P3oool00`000000oooo0?ooo`1<0?oo
+o`030000003oool0oooo00h0oooo00<000000?ooo`3oool0>`3oool2000001l0oooo0P00000]0?oo
+o`800000:`3oool2000002 at 0oooo0P00000Q0?ooo`005P3oool00`000000oooo0?ooo`1<0?ooo`03
+0000003oool0oooo00l0oooo00<000000?ooo`3oool0>P3oool00`000000oooo0?ooo`0O0?ooo`80
+0000:`3oool2000002h0oooo0P00000P0?ooo`<000008P3oool001H0oooo00<000000?ooo`3oool0
+C03oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo03T0oooo00<000000?ooo`3oool0
+8 at 3oool2000002T0oooo0P00000`0?ooo`<000007 at 3oool2000002@0oooo000F0?ooo`030000003o
+ool0oooo04/0oooo00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`0g0?ooo`800000903o
+ool2000002H0oooo0P00000d0?ooo`<00000603oool3000002H0oooo000F0?ooo`030000003oool0
+oooo04/0oooo00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`0f0?ooo`8000009P3oool3
+000002<0oooo0P00000h0?ooo`<000004P3oool4000002P0oooo000F0?ooo`800000B`3oool00`00
+0000oooo0?ooo`0C0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool09`3oool20000
+0240oooo0P00000k0?ooo`@00000303oool4000002/0oooo000F0?ooo`030000003oool0oooo04X0
+oooo00<000000?ooo`3oool04`3oool2000003D0oooo00<000000?ooo`3oool0:@3oool3000001d0
+oooo0P0000110?ooo`d00000;P3oool001H0oooo00<000000?ooo`3oool0BP3oool00`000000oooo
+0?ooo`0D0?ooo`030000003oool0oooo0380oooo0P00000]0?ooo`8000006P3oool3000007d0oooo
+000F0?ooo`030000003oool0oooo04T0oooo00<000000?ooo`3oool05 at 3oool200000380oooo0P00
+000`0?ooo`8000005P3oool3000007l0oooo000F0?ooo`030000003oool0oooo04T0oooo00<00000
+0?ooo`3oool05P3oool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo0300oooo0`00000B
+0?ooo`<00000P at 3oool001H0oooo00<000000?ooo`3oool0B at 3oool00`000000oooo0?ooo`0G0?oo
+o`030000003oool0oooo02h0oooo00<000000?ooo`3oool0=03oool4000000/0oooo0`0000240?oo
+o`005P3oool00`000000oooo0?ooo`180?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3o
+ool0;03oool00`000000oooo0?ooo`0h0?ooo``00000Q`3oool001H0oooo00<000000?ooo`3oool0
+B03oool00`000000oooo0?ooo`0I0?ooo`800000;03oool200000<d0oooo000F0?ooo`800000B at 3o
+ool00`000000oooo0?ooo`0J0?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3oool0c at 3o
+ool001H0oooo00<000000?ooo`3oool0A`3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0
+oooo02L0oooo0P00003?0?ooo`005P3oool00`000000oooo0?ooo`170?ooo`030000003oool0oooo
+01`0oooo0P00000W0?ooo`800000d03oool001H0oooo00<000000?ooo`3oool0A`3oool00`000000
+oooo0?ooo`0M0?ooo`030000003oool0oooo02 at 0oooo0P00003A0?ooo`005P3oool00`000000oooo
+0?ooo`170?ooo`030000003oool0oooo01h0oooo00<000000?ooo`3oool08P3oool200000=80oooo
+000F0?ooo`030000003oool0oooo04H0oooo00<000000?ooo`3oool0803oool00`000000oooo0?oo
+o`0P0?ooo`800000d`3oool000 at 0oooo0`0000030?ooo`030000003oool0oooo0080oooo00<00000
+0?ooo`3oool0103oool00`000000oooo0?ooo`160?ooo`030000003oool0oooo0200oooo0P00000P
+0?ooo`800000e03oool000<0oooo00D000000?ooo`3oool0oooo000000070?ooo`030000003oool0
+oooo00 at 0oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`0Q0?ooo`8000007P3oool2
+00000=D0oooo00030?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`04
+0?ooo`030000003oool0oooo04D0oooo00<000000?ooo`3oool08`3oool2000001`0oooo0P00003F
+0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0103oool3
+000004D0oooo00<000000?ooo`3oool0903oool2000001X0oooo0P00003G0?ooo`000`3oool01 at 00
+0000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`0000001P3oool00`000000oooo0?ooo`15
+0?ooo`030000003oool0oooo02D0oooo0P00000G0?ooo`800000f at 3oool000<0oooo00D000000?oo
+o`3oool0oooo000000060?ooo`8000001P3oool00`000000oooo0?ooo`140?ooo`030000003oool0
+oooo02L0oooo0P00000E0?ooo`800000fP3oool000 at 0oooo0`0000080?ooo`030000003oool0oooo
+00 at 0oooo00<000000?ooo`3oool0A03oool00`000000oooo0?ooo`0Y0?ooo`8000004 at 3oool20000
+0=`0oooo000F0?ooo`030000003oool0oooo04 at 0oooo00<000000?ooo`3oool0:P3oool3000000d0
+oooo0`00003M0?ooo`005P3oool00`000000oooo0?ooo`130?ooo`030000003oool0oooo02d0oooo
+100000070?ooo`@00000g`3oool001H0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?oo
+o`0`0?ooo`T00000hP3oool001H0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`3o
+0?oooa`0oooo000F0?ooo`800000A03oool00`000000oooo0?ooo`3o0?oooa`0oooo000F0?ooo`03
+0000003oool0oooo0480oooo00<000000?ooo`3oool0o`3ooolM0?ooo`005P3oool00`000000oooo
+0?ooo`120?ooo`030000003oool0oooo0?l0oooo7 at 3oool001H0oooo00<000000?ooo`3oool0 at P3o
+ool00`000000oooo0?ooo`3o0?oooad0oooo000F0?ooo`030000003oool0oooo0440oooo00<00000
+0?ooo`3oool0o`3ooolN0?ooo`005P3oool00`000000oooo0?ooo`110?ooo`030000003oool0oooo
+0?l0oooo7P3oool001H0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`3o0?oooah0
+oooo000F0?ooo`030000003oool0oooo0400oooo00<000000?ooo`3oool0o`3ooolO0?ooo`005P3o
+ool00`000000oooo0?ooo`100?ooo`030000003oool0oooo0?l0oooo7`3oool001H0oooo0P000011
+0?ooo`030000003oool0oooo0?l0oooo7`3oool001H0oooo00<000000?ooo`3oool0 at 03oool00`00
+0000oooo0?ooo`3o0?oooal0oooo000F0?ooo`030000003oool0oooo03l0oooo00<000000?ooo`3o
+ool0o`3ooolP0?ooo`005P3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo0?l0oooo
+803oool001H0oooo00<000000?ooo`3oool0?`3oool00`000000oooo0?ooo`3o0?ooob00oooo000F
+0?ooo`030000003oool0oooo03h0oooo00<000000?ooo`3oool0o`3ooolQ0?ooo`005P3oool00`00
+0000oooo0?ooo`0n0?ooo`030000003oool0oooo0?l0oooo8 at 3oool001H0oooo00<000000?ooo`3o
+ool0?P3oool00`000000oooo0?ooo`3o0?ooob40oooo000F0?ooo`800000?P3oool00`000000oooo
+0?ooo`3o0?ooob80oooo000F0?ooo`030000003oool0oooo03d0oooo00<000000?ooo`3oool0o`3o
+oolR0?ooo`005P3oool00`000000oooo0?ooo`0m0?ooo`030000003oool0oooo0?l0oooo8P3oool0
+01H0oooo00<000000?ooo`3oool0?@3oool00`000000oooo0?ooo`3o0?ooob80oooo000F0?ooo`03
+0000003oool0oooo03`0oooo00<000000?ooo`3oool0o`3ooolS0?ooo`005P3oool00`000000oooo
+0?ooo`0l0?ooo`030000003oool0oooo0?l0oooo8`3oool001H0oooo00<000000?ooo`3oool0?03o
+ool00`000000oooo0?ooo`3o0?ooob<0oooo000F0?ooo`030000003oool0oooo03/0oooo00<00000
+0?ooo`3oool0o`3ooolT0?ooo`005P3oool00`000000oooo0?ooo`0k0?ooo`030000003oool0oooo
+0?l0oooo903oool001H0oooo0P00000l0?ooo`030000003oool0oooo0?l0oooo903oool001H0oooo
+00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`3o0?ooob at 0oooo000F0?ooo`030000003o
+ool0oooo03X0oooo00<000000?ooo`3oool0o`3ooolU0?ooo`005P3oool00`000000oooo0?ooo`0j
+0?ooo`030000003oool0oooo0?l0oooo9 at 3oool001H0oooo00<000000?ooo`3oool0>P3oool00`00
+0000oooo0?ooo`3o0?ooobD0oooo000F0?ooo`030000003oool0oooo03T0oooo00<000000?ooo`3o
+ool0o`3ooolV0?ooo`00103oool3000000<0oooo00<000000?ooo`000000100000050?ooo`030000
+003oool0oooo03T0oooo00<000000?ooo`3oool0o`3ooolV0?ooo`000`3oool01 at 000000oooo0?oo
+o`3oool0000000D0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`0i0?ooo`030000
+003oool0oooo0?l0oooo9P3oool000<0oooo00D000000?ooo`3oool0oooo000000060?ooo`030000
+003oool0oooo00D0oooo00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`3o0?ooobL0oooo
+00030?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`040?ooo`<00000
+>03oool00`000000oooo0?ooo`3o0?ooobL0oooo00030?ooo`050000003oool0oooo0?ooo`000000
+203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo03P0oooo00<000000?ooo`3oool0
+o`3ooolW0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo03P0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`00
+103oool3000000H0oooo0`0000060?ooo`030000003oool0oooo03L0oooo00<000000?ooo`3oool0
+o`3ooolX0?ooo`005P3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo0?l0oooo:03o
+ool001H0oooo00<000000?ooo`3oool0=`3oool00`000000oooo0?ooo`3o0?ooobP0oooo000F0?oo
+o`030000003oool0oooo03H0oooo00<000000?ooo`3oool0o`3ooolY0?ooo`005P3oool00`000000
+oooo0?ooo`0f0?ooo`030000003oool0oooo0?l0oooo:@3oool001H0oooo0P00000g0?ooo`030000
+003oool0oooo0?l0oooo:@3oool001H0oooo00<000000?ooo`3oool0=P3oool00`000000oooo0?oo
+o`3o0?ooobT0oooo000F0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool0o`3ooolZ
+0?ooo`005P3oool00`000000oooo0?ooo`0e0?ooo`030000003oool0oooo0?l0oooo:P3oool001H0
+oooo00<000000?ooo`3oool0=@3oool00`000000oooo0?ooo`3o0?ooobX0oooo000F0?ooo`030000
+003oool0oooo03 at 0oooo00<000000?ooo`3oool0o`3oool[0?ooo`005P3oool00`000000oooo0?oo
+o`0d0?ooo`030000003oool0oooo0?l0oooo:`3oool001H0oooo00<000000?ooo`3oool0=03oool0
+0`000000oooo0?ooo`3o0?ooob/0oooo000F0?ooo`030000003oool0oooo03<0oooo00<000000?oo
+o`3oool0o`3oool/0?ooo`005P3oool2000003 at 0oooo00<000000?ooo`3oool0o`3oool/0?ooo`00
+5P3oool00`000000oooo0?ooo`0c0?ooo`030000003oool0oooo0?l0oooo;03oool001H0oooo00<0
+00000?ooo`3oool0<P3oool00`000000oooo0?ooo`3o0?ooobd0oooo000F0?ooo`030000003oool0
+oooo0380oooo00<000000?ooo`3oool0o`3oool]0?ooo`005P3oool00`000000oooo0?ooo`0b0?oo
+o`030000003oool0oooo0?l0oooo;@3oool001H0oooo00<000000?ooo`3oool0<@3oool00`000000
+oooo0?ooo`3o0?ooobh0oooo000F0?ooo`030000003oool0oooo0340oooo00<000000?ooo`3oool0
+o`3oool^0?ooo`005P3oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo0?l0oooo;P3o
+ool001H0oooo0P00000b0?ooo`030000003oool0oooo0?l0oooo;P3oool001H0oooo00<000000?oo
+o`3oool0<03oool00`000000oooo0?ooo`3o0?ooobl0oooo000F0?ooo`030000003oool0oooo0300
+oooo00<000000?ooo`3oool0o`3oool_0?ooo`005P3oool00`000000oooo0?ooo`0`0?ooo`030000
+003oool0oooo0?l0oooo;`3oool001H0oooo00<000000?ooo`3oool0;`3oool00`000000oooo0?oo
+o`3o0?oooc00oooo000F0?ooo`030000003oool0oooo02l0oooo00<000000?ooo`3oool0o`3oool`
+0?ooo`005P3oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo0?l0oooo<03oool001H0
+oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`3o0?oooc40oooo000F0?ooo`030000
+003oool0oooo02h0oooo00<000000?ooo`3oool0o`3ooola0?ooo`005P3oool2000002l0oooo00<0
+00000?ooo`3oool0o`3ooola0?ooo`005P3oool00`000000oooo0?ooo`0^0?ooo`030000003oool0
+oooo0?l0oooo<@3oool001H0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`3o0?oo
+oc80oooo000F0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3oool0o`3ooolb0?ooo`00
+5P3oool00`000000oooo0?ooo`0]0?ooo`030000003oool0oooo0?l0oooo<P3oool001H0oooo00<0
+00000?ooo`3oool0;03oool00`000000oooo0?ooo`3o0?oooc<0oooo00040?ooo`<000000`3oool0
+0`000000oooo0?ooo`03000000H0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`3o
+0?oooc<0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3o
+ool0000000D0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`3o0?oooc<0oooo0003
+0?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`<00000:`3o
+ool00`000000oooo0?ooo`3o0?oooc at 0oooo00030?ooo`050000003oool0oooo0?ooo`0000001P3o
+ool2000000H0oooo00<000000?ooo`3oool0:`3oool00`000000oooo0?ooo`3o0?oooc at 0oooo0003
+0?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003o
+ool0oooo02/0oooo00<000000?ooo`3oool0o`3ooold0?ooo`000`3oool01 at 000000oooo0?ooo`3o
+ool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo02/0oooo
+00<000000?ooo`3oool0o`3ooold0?ooo`00103oool3000000H0oooo0`0000060?ooo`030000003o
+ool0oooo02X0oooo00<000000?ooo`3oool0o`3ooole0?ooo`005P3oool00`000000oooo0?ooo`0Z
+0?ooo`030000003oool0oooo0?l0oooo=@3oool001H0oooo00<000000?ooo`3oool0:P3oool00`00
+0000oooo0?ooo`3o0?ooocD0oooo000F0?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3o
+ool0o`3ooolf0?ooo`005P3oool00`000000oooo0?ooo`0Y0?ooo`030000003oool0oooo0?l0oooo
+=P3oool001H0oooo0P00000Z0?ooo`030000003oool0oooo0?l0oooo=P3oool001H0oooo00<00000
+0?ooo`3oool0:03oool00`000000oooo0?ooo`3o0?ooocL0oooo000F0?ooo`030000003oool0oooo
+02P0oooo00<000000?ooo`3oool0o`3ooolg0?ooo`005P3oool00`000000oooo0?ooo`0X0?ooo`03
+0000003oool0oooo0?l0oooo=`3oool001H0oooo00<000000?ooo`3oool09`3oool00`000000oooo
+0?ooo`3o0?ooocP0oooo000F0?ooo`030000003oool0oooo02L0oooo00<000000?ooo`3oool0o`3o
+oolh0?ooo`005P3oool00`000000oooo0?ooo`0W0?ooo`030000003oool0oooo0?l0oooo>03oool0
+01H0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`3o0?ooocT0oooo000F0?ooo`03
+0000003oool0oooo02H0oooo00<000000?ooo`3oool0o`3oooli0?ooo`005P3oool2000002L0oooo
+00<000000?ooo`3oool0o`3oooli0?ooo`005P3oool00`000000oooo0?ooo`0U0?ooo`030000003o
+ool0oooo0?l0oooo>P3oool001H0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`3o
+0?ooocX0oooo000F0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool0o`3ooolj0?oo
+o`005P3oool00`000000oooo0?ooo`0U0?ooo`030000003oool0oooo0?l0oooo>P3oool001H0oooo
+00<000000?ooo`3oool0903oool00`000000oooo0?ooo`3o0?oooc/0oooo000F0?ooo`030000003o
+ool0oooo02 at 0oooo00<000000?ooo`3oool0o`3ooolk0?ooo`005P3oool00`000000oooo0?ooo`0S
+0?ooo`030000003oool0oooo0?l0oooo?03oool001H0oooo0P00000T0?ooo`030000003oool0oooo
+0?l0oooo?03oool001H0oooo00<000000?ooo`3oool08`3oool00`000000oooo0?ooo`3o0?oooc`0
+oooo000F0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0o`3ooolm0?ooo`005P3o
+ool00`000000oooo0?ooo`0R0?ooo`030000003oool0oooo0?l0oooo?@3oool001H0oooo00<00000
+0?ooo`3oool08P3oool00`000000oooo0?ooo`3o0?ooocd0oooo000F0?ooo`030000003oool0oooo
+0240oooo00<000000?ooo`3oool0o`3oooln0?ooo`005P3oool00`000000oooo0?ooo`0Q0?ooo`03
+0000003oool0oooo0?l0oooo?P3oool001H0oooo00<000000?ooo`3oool08 at 3oool00`000000oooo
+0?ooo`3o0?oooch0oooo000F0?ooo`030000003oool0oooo0200oooo00<000000?ooo`3oool0o`3o
+oolo0?ooo`005P3oool200000240oooo00<000000?ooo`3oool0o`3ooolo0?ooo`005P3oool00`00
+0000oooo0?ooo`0P0?ooo`030000003oool0oooo0?l0oooo?`3oool001H0oooo00<000000?ooo`3o
+ool07`3oool00`000000oooo0?ooo`3o0?oood00oooo000F0?ooo`030000003oool0oooo01l0oooo
+00<000000?ooo`3oool0o`3ooom00?ooo`005P3oool00`000000oooo0?ooo`0O0?ooo`030000003o
+ool0oooo0?l0oooo at 03oool001H0oooo00<000000?ooo`3oool07P3oool00`000000oooo0?ooo`3o
+0?oood40oooo00040?ooo`<000000`3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo
+00<0oooo00<000000?ooo`3oool07P3oool00`000000oooo0?ooo`3o0?oood40oooo00030?ooo`05
+0000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo
+01d0oooo00<000000?ooo`3oool0o`3ooom20?ooo`000`3oool01 at 000000oooo0?ooo`3oool00000
+00 at 0oooo1P0000040?ooo`<000007 at 3oool00`000000oooo0?ooo`3o0?oood80oooo00030?ooo`05
+0000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<00000
+0?ooo`3oool0703oool00`000000oooo0?ooo`3o0?oood<0oooo00030?ooo`050000003oool0oooo
+0?ooo`0000001 at 3oool010000000oooo0?ooo`0000050?ooo`030000003oool0oooo01`0oooo00<0
+00000?ooo`3oool0o`3ooom30?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00<0
+00000?ooo`0000001 at 3oool00`000000oooo0?ooo`0K0?ooo`800000o`3ooom50?ooo`00103oool3
+000000P0oooo0P0000050?ooo`030000003oool0oooo01/0oooo00<000000?ooo`3oool0o`3ooom4
+0?ooo`005P3oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo0?l0ooooA03oool001H0
+oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`3o0?ooodD0oooo000F0?ooo`030000
+003oool0oooo01X0oooo00<000000?ooo`3oool0o`3ooom50?ooo`005P3oool00`000000oooo0?oo
+o`0I0?ooo`800000o`3ooom70?ooo`005P3oool2000001X0oooo00<000000?ooo`3oool0o`3ooom6
+0?ooo`005P3oool00`000000oooo0?ooo`0I0?ooo`030000003oool0oooo0?l0ooooAP3oool001H0
+oooo00<000000?ooo`3oool0603oool00`000000oooo0?ooo`3o0?ooodL0oooo000F0?ooo`030000
+003oool0oooo01P0oooo00<000000?ooo`3oool0o`3ooom70?ooo`005P3oool00`000000oooo0?oo
+o`0G0?ooo`030000003oool0oooo0?l0ooooB03oool001H0oooo00<000000?ooo`3oool05`3oool0
+0`000000oooo0?ooo`3o0?ooodP0oooo000F0?ooo`030000003oool0oooo01H0oooo00<000000?oo
+o`3oool0o`3ooom90?ooo`005P3oool00`000000oooo0?ooo`0F0?ooo`030000003oool0oooo0?l0
+ooooB at 3oool001H0oooo0P00000F0?ooo`800000o`3ooom;0?ooo`005P3oool00`000000oooo0?oo
+o`0E0?ooo`030000003oool0oooo0?l0ooooBP3oool001H0oooo00<000000?ooo`3oool0503oool2
+00000?l0ooooC03oool001H0oooo00<000000?ooo`3oool0503oool00`000000oooo0?ooo`3o0?oo
+od/0oooo000F0?ooo`030000003oool0oooo01<0oooo0P00003o0?ooodd0oooo000F0?ooo`030000
+003oool0oooo01<0oooo00<000000?ooo`3oool0o`3ooom<0?ooo`005P3oool00`000000oooo0?oo
+o`0B0?ooo`800000o`3ooom>0?ooo`005P3oool00`000000oooo0?ooo`0B0?ooo`030000003oool0
+oooo0?l0ooooC at 3oool001H0oooo00<000000?ooo`3oool04 at 3oool200000?l0ooooC`3oool001H0
+oooo0P00000B0?ooo`030000003oool0oooo0?l0ooooCP3oool001H0oooo00<000000?ooo`3oool0
+403oool00`000000oooo0?ooo`3o0?ooodl0oooo000F0?ooo`030000003oool0oooo0100oooo00<0
+00000?ooo`3oool0o`3ooom?0?ooo`005P3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0
+oooo0?l0ooooD03oool001H0oooo00<000000?ooo`3oool03P3oool200000?l0ooooDP3oool001H0
+oooo00<000000?ooo`3oool03P3oool00`000000oooo0?ooo`3o0?oooe40oooo000F0?ooo`030000
+003oool0oooo00d0oooo00<000000?ooo`3oool0o`3ooomB0?ooo`005P3oool00`000000oooo0?oo
+o`0<0?ooo`800000o`3ooomD0?ooo`005P3oool00`000000oooo0?ooo`0;0?ooo`800000o`3ooomE
+0?ooo`005P3oool2000000`0oooo00<000000?ooo`3oool0o`3ooomD0?ooo`005P3oool00`000000
+oooo0?ooo`0:0?ooo`030000003oool0oooo0?l0ooooE at 3oool001H0oooo00<000000?ooo`3oool0
+2 at 3oool00`000000oooo0?ooo`3o0?oooeH0oooo000F0?ooo`030000003oool0oooo00P0oooo00<0
+00000?ooo`3oool0o`3ooomG0?ooo`005P3oool00`000000oooo0?ooo`070?ooo`030000003oool0
+oooo0?l0ooooF03oool001H0oooo00<000000?ooo`3oool01 at 3oool200000?l0ooooF`3oool000 at 0
+oooo0`0000030?ooo`030000003oool0oooo00<000001P3oool00`000000oooo0?ooo`030?ooo`<0
+0000o`3ooomL0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3o
+ool0oooo000000050?ooo`040000003oool0oooo0?ooo`<00000o`3ooomN0?ooo`000`3oool01 at 00
+0000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3oool500000?l0ooooH03oool0
+00<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000001 at 3o
+ool00`000000oooo0?ooo`3o0?ooof80oooo00030?ooo`050000003oool0oooo0?ooo`000000103o
+ool4000000H0oooo00<000000?ooo`3oool0o`3ooomR0?ooo`000`3oool01 at 000000oooo0?ooo`3o
+ool0000000D0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`3o0?ooof80oooo0004
+0?ooo`<000001P3oool4000000D0oooo00<000000?ooo`3oool0o`3ooomR0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooof80oooo003o0?ooog/0oooo003o0?ooog/0oooo003o0?ooog/0oooo003o
+0?ooog/0oooo0000\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-66.6901, -0.0220071, 
+  2.95734, 0.00233418}}],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.51553 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .16627 -18 -4.5 ]
+[.01131 .16627 0 4.5 ]
+[.01131 .31782 -18 -4.5 ]
+[.01131 .31782 0 4.5 ]
+[.01131 .46937 -18 -4.5 ]
+[.01131 .46937 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .16627 m
+.03006 .16627 L
+s
+[(0.1)] .01131 .16627 1 0 Mshowa
+.02381 .31782 m
+.03006 .31782 L
+s
+[(0.2)] .01131 .31782 1 0 Mshowa
+.02381 .46937 m
+.03006 .46937 L
+s
+[(0.3)] .01131 .46937 1 0 Mshowa
+.125 Mabswid
+.02381 .04503 m
+.02756 .04503 L
+s
+.02381 .07534 m
+.02756 .07534 L
+s
+.02381 .10565 m
+.02756 .10565 L
+s
+.02381 .13596 m
+.02756 .13596 L
+s
+.02381 .19658 m
+.02756 .19658 L
+s
+.02381 .22689 m
+.02756 .22689 L
+s
+.02381 .2572 m
+.02756 .2572 L
+s
+.02381 .28751 m
+.02756 .28751 L
+s
+.02381 .34813 m
+.02756 .34813 L
+s
+.02381 .37844 m
+.02756 .37844 L
+s
+.02381 .40875 m
+.02756 .40875 L
+s
+.02381 .43906 m
+.02756 .43906 L
+s
+.02381 .49969 m
+.02756 .49969 L
+s
+.02381 .53 m
+.02756 .53 L
+s
+.02381 .56031 m
+.02756 .56031 L
+s
+.02381 .59062 m
+.02756 .59062 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .01472 m
+.02567 .02001 L
+.0266 .0253 L
+.02753 .0306 L
+.02846 .03589 L
+.02938 .04118 L
+.03031 .04647 L
+.03124 .05176 L
+.03217 .05704 L
+.0331 .06232 L
+.03403 .06759 L
+.03496 .07286 L
+.03589 .07813 L
+.03682 .08339 L
+.03775 .08865 L
+.03868 .0939 L
+.03961 .09914 L
+.04053 .10437 L
+.04146 .1096 L
+.04239 .11482 L
+.04332 .12003 L
+.04425 .12524 L
+.04518 .13043 L
+.04611 .13561 L
+.04704 .14079 L
+.04797 .14595 L
+.0489 .1511 L
+.04983 .15625 L
+.05075 .16138 L
+.05168 .16649 L
+.05261 .1716 L
+.05354 .17669 L
+.05447 .18177 L
+.0554 .18683 L
+.05633 .19188 L
+.05726 .19692 L
+.05819 .20194 L
+.05912 .20694 L
+.06005 .21193 L
+.06098 .21691 L
+.0619 .22186 L
+.06283 .2268 L
+.06376 .23172 L
+.06469 .23662 L
+.06562 .24151 L
+.06655 .24638 L
+.06748 .25122 L
+.06841 .25605 L
+.06934 .26086 L
+.07027 .26564 L
+Mistroke
+.0712 .27041 L
+.07213 .27516 L
+.07305 .27988 L
+.07398 .28458 L
+.07491 .28926 L
+.07584 .29392 L
+.07677 .29855 L
+.0777 .30316 L
+.07863 .30775 L
+.07956 .31231 L
+.08049 .31685 L
+.08142 .32136 L
+.08235 .32585 L
+.08328 .33031 L
+.0842 .33475 L
+.08513 .33916 L
+.08606 .34354 L
+.08699 .3479 L
+.08792 .35223 L
+.08885 .35653 L
+.08978 .3608 L
+.09071 .36504 L
+.09164 .36926 L
+.09257 .37345 L
+.0935 .37761 L
+.09443 .38173 L
+.09535 .38583 L
+.09628 .3899 L
+.09721 .39393 L
+.09814 .39794 L
+.09907 .40191 L
+.1 .40586 L
+.10093 .40977 L
+.10186 .41365 L
+.10279 .41749 L
+.10372 .4213 L
+.10465 .42508 L
+.10557 .42883 L
+.1065 .43254 L
+.10743 .43622 L
+.10836 .43987 L
+.10929 .44348 L
+.11022 .44705 L
+.11115 .45059 L
+.11208 .4541 L
+.11301 .45757 L
+.11394 .461 L
+.11487 .4644 L
+.1158 .46776 L
+.11672 .47108 L
+Mistroke
+.11765 .47437 L
+.11858 .47762 L
+.11951 .48083 L
+.12044 .484 L
+.12137 .48714 L
+.1223 .49024 L
+.12323 .4933 L
+.12416 .49632 L
+.12509 .49931 L
+.12602 .50225 L
+.12695 .50515 L
+.12787 .50802 L
+.1288 .51085 L
+.12973 .51363 L
+.13066 .51638 L
+.13159 .51909 L
+.13252 .52175 L
+.13345 .52438 L
+.13438 .52696 L
+.13531 .52951 L
+.13624 .53201 L
+.13717 .53447 L
+.1381 .53689 L
+.13902 .53927 L
+.13995 .54161 L
+.14088 .5439 L
+.14181 .54616 L
+.14274 .54837 L
+.14367 .55054 L
+.1446 .55266 L
+.14553 .55475 L
+.14646 .55679 L
+.14739 .55879 L
+.14832 .56074 L
+.14925 .56266 L
+.15017 .56453 L
+.1511 .56635 L
+.15203 .56814 L
+.15296 .56988 L
+.15389 .57157 L
+.15482 .57322 L
+.15575 .57483 L
+.15668 .5764 L
+.15761 .57792 L
+.15854 .5794 L
+.15947 .58083 L
+.16039 .58222 L
+.16132 .58357 L
+.16225 .58487 L
+.16318 .58613 L
+Mistroke
+.16411 .58734 L
+.16504 .58851 L
+.16597 .58963 L
+.1669 .59071 L
+.16783 .59175 L
+.16876 .59274 L
+.16969 .59369 L
+.17062 .59459 L
+.17154 .59545 L
+.17247 .59626 L
+.1734 .59703 L
+.17433 .59775 L
+.17526 .59843 L
+.17619 .59907 L
+.17712 .59966 L
+.17805 .60021 L
+.17898 .60071 L
+.17991 .60117 L
+.18084 .60158 L
+.18177 .60195 L
+.18269 .60228 L
+.18362 .60256 L
+.18455 .60279 L
+.18548 .60299 L
+.18641 .60314 L
+.18734 .60324 L
+.18827 .6033 L
+.1892 .60332 L
+.19013 .60329 L
+.19106 .60322 L
+.19199 .60311 L
+.19292 .60295 L
+.19384 .60275 L
+.19477 .6025 L
+.1957 .60222 L
+.19663 .60188 L
+.19756 .60151 L
+.19849 .60109 L
+.19942 .60063 L
+.20035 .60013 L
+.20128 .59959 L
+.20221 .599 L
+.20314 .59837 L
+.20407 .59769 L
+.20499 .59698 L
+.20592 .59622 L
+.20685 .59543 L
+.20778 .59459 L
+.20871 .5937 L
+.20964 .59278 L
+Mistroke
+.21057 .59182 L
+.2115 .59081 L
+.21243 .58977 L
+.21336 .58868 L
+.21429 .58755 L
+.21521 .58638 L
+.21614 .58518 L
+.21707 .58393 L
+.218 .58264 L
+.21893 .58131 L
+.21986 .57995 L
+.22079 .57854 L
+.22172 .5771 L
+.22265 .57561 L
+.22358 .57409 L
+.22451 .57253 L
+.22544 .57093 L
+.22636 .5693 L
+.22729 .56762 L
+.22822 .56591 L
+.22915 .56416 L
+.23008 .56238 L
+.23101 .56055 L
+.23194 .55869 L
+.23287 .5568 L
+.2338 .55487 L
+.23473 .5529 L
+.23566 .5509 L
+.23659 .54886 L
+.23751 .54678 L
+.23844 .54468 L
+.23937 .54253 L
+.2403 .54036 L
+.24123 .53815 L
+.24216 .5359 L
+.24309 .53362 L
+.24402 .53131 L
+.24495 .52897 L
+.24588 .52659 L
+.24681 .52418 L
+.24774 .52174 L
+.24866 .51927 L
+.24959 .51677 L
+.25052 .51423 L
+.25145 .51167 L
+.25238 .50907 L
+.25331 .50644 L
+.25424 .50379 L
+.25517 .5011 L
+.2561 .49838 L
+Mistroke
+.25703 .49564 L
+.25796 .49287 L
+.25889 .49007 L
+.25981 .48724 L
+.26074 .48438 L
+.26167 .4815 L
+.2626 .47859 L
+.26353 .47565 L
+.26446 .47268 L
+.26539 .46969 L
+.26632 .46668 L
+.26725 .46364 L
+.26818 .46057 L
+.26911 .45748 L
+.27003 .45437 L
+.27096 .45123 L
+.27189 .44807 L
+.27282 .44488 L
+.27375 .44167 L
+.27468 .43844 L
+.27561 .43519 L
+.27654 .43191 L
+.27747 .42862 L
+.2784 .4253 L
+.27933 .42196 L
+.28026 .4186 L
+.28118 .41522 L
+.28211 .41183 L
+.28304 .40841 L
+.28397 .40497 L
+.2849 .40152 L
+.28583 .39804 L
+.28676 .39455 L
+.28769 .39105 L
+.28862 .38752 L
+.28955 .38398 L
+.29048 .38042 L
+.29141 .37685 L
+.29233 .37326 L
+.29326 .36965 L
+.29419 .36603 L
+.29512 .3624 L
+.29605 .35875 L
+.29698 .35509 L
+.29791 .35142 L
+.29884 .34773 L
+.29977 .34403 L
+.3007 .34032 L
+.30163 .3366 L
+.30256 .33286 L
+Mistroke
+.30348 .32912 L
+.30441 .32536 L
+.30534 .32159 L
+.30627 .31782 L
+.3072 .31403 L
+.30813 .31024 L
+.30906 .30644 L
+.30999 .30263 L
+.31092 .29881 L
+.31185 .29498 L
+.31278 .29115 L
+.3137 .28731 L
+.31463 .28346 L
+.31556 .27961 L
+.31649 .27575 L
+.31742 .27189 L
+.31835 .26803 L
+.31928 .26415 L
+.32021 .26028 L
+.32114 .2564 L
+.32207 .25252 L
+.323 .24864 L
+.32393 .24475 L
+.32485 .24086 L
+.32578 .23697 L
+.32671 .23308 L
+.32764 .22919 L
+.32857 .2253 L
+.3295 .2214 L
+.33043 .21751 L
+.33136 .21362 L
+.33229 .20973 L
+.33322 .20584 L
+.33415 .20195 L
+.33508 .19807 L
+.336 .19419 L
+.33693 .19031 L
+.33786 .18643 L
+.33879 .18256 L
+.33972 .17869 L
+.34065 .17483 L
+.34158 .17097 L
+.34251 .16712 L
+.34344 .16327 L
+.34437 .15943 L
+.3453 .1556 L
+.34623 .15177 L
+.34715 .14795 L
+.34808 .14414 L
+.34901 .14033 L
+Mistroke
+.34994 .13653 L
+.35087 .13274 L
+.3518 .12896 L
+.35273 .12519 L
+.35366 .12143 L
+.35459 .11768 L
+.35552 .11394 L
+.35645 .11021 L
+.35738 .10649 L
+.3583 .10278 L
+.35923 .09908 L
+.36016 .0954 L
+.36109 .09173 L
+.36202 .08807 L
+.36295 .08442 L
+.36388 .08079 L
+.36481 .07717 L
+.36574 .07356 L
+.36667 .06997 L
+.3676 .06639 L
+.36852 .06283 L
+.36945 .05929 L
+.37038 .05576 L
+.37131 .05224 L
+.37224 .04874 L
+.37317 .04526 L
+.3741 .0418 L
+.37503 .03835 L
+.37596 .03492 L
+.37689 .0315 L
+.37782 .02811 L
+.37875 .02473 L
+.37967 .02137 L
+.3806 .01803 L
+.38153 .01472 L
+.38246 .01802 L
+.38339 .0213 L
+.38432 .02456 L
+.38525 .0278 L
+.38618 .03102 L
+.38711 .03422 L
+.38804 .03739 L
+.38897 .04055 L
+.3899 .04368 L
+.39082 .0468 L
+.39175 .04989 L
+.39268 .05296 L
+.39361 .056 L
+.39454 .05903 L
+.39547 .06202 L
+Mistroke
+.3964 .065 L
+.39733 .06795 L
+.39826 .07088 L
+.39919 .07379 L
+.40012 .07667 L
+.40105 .07952 L
+.40197 .08235 L
+.4029 .08516 L
+.40383 .08794 L
+.40476 .0907 L
+.40569 .09343 L
+.40662 .09613 L
+.40755 .09881 L
+.40848 .10146 L
+.40941 .10408 L
+.41034 .10668 L
+.41127 .10926 L
+.4122 .1118 L
+.41312 .11432 L
+.41405 .11681 L
+.41498 .11927 L
+.41591 .12171 L
+.41684 .12411 L
+.41777 .12649 L
+.4187 .12884 L
+.41963 .13117 L
+.42056 .13346 L
+.42149 .13573 L
+.42242 .13796 L
+.42334 .14017 L
+.42427 .14235 L
+.4252 .1445 L
+.42613 .14662 L
+.42706 .14871 L
+.42799 .15077 L
+.42892 .1528 L
+.42985 .1548 L
+.43078 .15677 L
+.43171 .15872 L
+.43264 .16063 L
+.43357 .16251 L
+.43449 .16436 L
+.43542 .16618 L
+.43635 .16797 L
+.43728 .16972 L
+.43821 .17145 L
+.43914 .17315 L
+.44007 .17482 L
+.441 .17645 L
+.44193 .17805 L
+Mistroke
+.44286 .17963 L
+.44379 .18117 L
+.44472 .18268 L
+.44564 .18416 L
+.44657 .1856 L
+.4475 .18702 L
+.44843 .1884 L
+.44936 .18976 L
+.45029 .19108 L
+.45122 .19237 L
+.45215 .19363 L
+.45308 .19485 L
+.45401 .19605 L
+.45494 .19721 L
+.45587 .19834 L
+.45679 .19944 L
+.45772 .20051 L
+.45865 .20154 L
+.45958 .20255 L
+.46051 .20352 L
+.46144 .20446 L
+.46237 .20537 L
+.4633 .20624 L
+.46423 .20709 L
+.46516 .2079 L
+.46609 .20868 L
+.46702 .20943 L
+.46794 .21015 L
+.46887 .21084 L
+.4698 .21149 L
+.47073 .21212 L
+.47166 .21271 L
+.47259 .21327 L
+.47352 .2138 L
+.47445 .2143 L
+.47538 .21476 L
+.47631 .2152 L
+.47724 .2156 L
+.47816 .21598 L
+.47909 .21632 L
+.48002 .21663 L
+.48095 .21691 L
+.48188 .21716 L
+.48281 .21738 L
+.48374 .21756 L
+.48467 .21772 L
+.4856 .21785 L
+.48653 .21795 L
+.48746 .21801 L
+.48839 .21805 L
+Mistroke
+.48931 .21805 L
+.49024 .21803 L
+.49117 .21798 L
+.4921 .21789 L
+.49303 .21778 L
+.49396 .21764 L
+.49489 .21746 L
+.49582 .21726 L
+.49675 .21703 L
+.49768 .21677 L
+.49861 .21649 L
+.49954 .21617 L
+.50046 .21582 L
+.50139 .21545 L
+.50232 .21505 L
+.50325 .21462 L
+.50418 .21416 L
+.50511 .21368 L
+.50604 .21316 L
+.50697 .21262 L
+.5079 .21205 L
+.50883 .21146 L
+.50976 .21084 L
+.51069 .21019 L
+.51161 .20951 L
+.51254 .20881 L
+.51347 .20809 L
+.5144 .20733 L
+.51533 .20655 L
+.51626 .20575 L
+.51719 .20492 L
+.51812 .20406 L
+.51905 .20318 L
+.51998 .20227 L
+.52091 .20134 L
+.52184 .20039 L
+.52276 .19941 L
+.52369 .19841 L
+.52462 .19738 L
+.52555 .19633 L
+.52648 .19526 L
+.52741 .19416 L
+.52834 .19304 L
+.52927 .1919 L
+.5302 .19073 L
+.53113 .18955 L
+.53206 .18834 L
+.53298 .18711 L
+.53391 .18586 L
+.53484 .18458 L
+Mistroke
+.53577 .18329 L
+.5367 .18197 L
+.53763 .18064 L
+.53856 .17928 L
+.53949 .1779 L
+.54042 .17651 L
+.54135 .17509 L
+.54228 .17366 L
+.54321 .1722 L
+.54413 .17073 L
+.54506 .16924 L
+.54599 .16773 L
+.54692 .1662 L
+.54785 .16466 L
+.54878 .16309 L
+.54971 .16151 L
+.55064 .15991 L
+.55157 .1583 L
+.5525 .15667 L
+.55343 .15502 L
+.55436 .15336 L
+.55528 .15168 L
+.55621 .14999 L
+.55714 .14828 L
+.55807 .14656 L
+.559 .14482 L
+.55993 .14307 L
+.56086 .1413 L
+.56179 .13953 L
+.56272 .13773 L
+.56365 .13593 L
+.56458 .13411 L
+.56551 .13228 L
+.56643 .13043 L
+.56736 .12858 L
+.56829 .12671 L
+.56922 .12483 L
+.57015 .12294 L
+.57108 .12104 L
+.57201 .11913 L
+.57294 .11721 L
+.57387 .11528 L
+.5748 .11334 L
+.57573 .11139 L
+.57666 .10943 L
+.57758 .10747 L
+.57851 .10549 L
+.57944 .10351 L
+.58037 .10152 L
+.5813 .09952 L
+Mistroke
+.58223 .09751 L
+.58316 .0955 L
+.58409 .09348 L
+.58502 .09145 L
+.58595 .08942 L
+.58688 .08738 L
+.5878 .08534 L
+.58873 .08329 L
+.58966 .08123 L
+.59059 .07918 L
+.59152 .07711 L
+.59245 .07505 L
+.59338 .07298 L
+.59431 .0709 L
+.59524 .06883 L
+.59617 .06675 L
+.5971 .06467 L
+.59803 .06258 L
+.59895 .0605 L
+.59988 .05841 L
+.60081 .05632 L
+.60174 .05423 L
+.60267 .05214 L
+.6036 .05005 L
+.60453 .04796 L
+.60546 .04587 L
+.60639 .04378 L
+.60732 .04169 L
+.60825 .0396 L
+.60918 .03751 L
+.6101 .03542 L
+.61103 .03334 L
+.61196 .03126 L
+.61289 .02918 L
+.61382 .0271 L
+.61475 .02503 L
+.61568 .02296 L
+.61661 .02089 L
+.61754 .01883 L
+.61847 .01677 L
+.6194 .01472 L
+.62033 .01676 L
+.62125 .01881 L
+.62218 .02085 L
+.62311 .02288 L
+.62404 .02491 L
+.62497 .02693 L
+.6259 .02895 L
+.62683 .03096 L
+.62776 .03296 L
+Mistroke
+.62869 .03496 L
+.62962 .03694 L
+.63055 .03892 L
+.63148 .0409 L
+.6324 .04286 L
+.63333 .04482 L
+.63426 .04676 L
+.63519 .0487 L
+.63612 .05063 L
+.63705 .05255 L
+.63798 .05446 L
+.63891 .05636 L
+.63984 .05825 L
+.64077 .06013 L
+.6417 .06199 L
+.64262 .06385 L
+.64355 .0657 L
+.64448 .06753 L
+.64541 .06936 L
+.64634 .07117 L
+.64727 .07297 L
+.6482 .07476 L
+.64913 .07653 L
+.65006 .07829 L
+.65099 .08004 L
+.65192 .08178 L
+.65285 .0835 L
+.65377 .08521 L
+.6547 .0869 L
+.65563 .08858 L
+.65656 .09025 L
+.65749 .0919 L
+.65842 .09354 L
+.65935 .09516 L
+.66028 .09677 L
+.66121 .09836 L
+.66214 .09994 L
+.66307 .1015 L
+.664 .10305 L
+.66492 .10457 L
+.66585 .10609 L
+.66678 .10758 L
+.66771 .10906 L
+.66864 .11053 L
+.66957 .11197 L
+.6705 .1134 L
+.67143 .11482 L
+.67236 .11621 L
+.67329 .11759 L
+.67422 .11895 L
+Mistroke
+.67515 .12029 L
+.67607 .12161 L
+.677 .12292 L
+.67793 .1242 L
+.67886 .12547 L
+.67979 .12672 L
+.68072 .12795 L
+.68165 .12917 L
+.68258 .13036 L
+.68351 .13153 L
+.68444 .13269 L
+.68537 .13382 L
+.6863 .13494 L
+.68722 .13603 L
+.68815 .13711 L
+.68908 .13816 L
+.69001 .1392 L
+.69094 .14021 L
+.69187 .14121 L
+.6928 .14218 L
+.69373 .14314 L
+.69466 .14407 L
+.69559 .14498 L
+.69652 .14588 L
+.69744 .14675 L
+.69837 .1476 L
+.6993 .14843 L
+.70023 .14924 L
+.70116 .15002 L
+.70209 .15079 L
+.70302 .15153 L
+.70395 .15225 L
+.70488 .15296 L
+.70581 .15364 L
+.70674 .15429 L
+.70767 .15493 L
+.70859 .15554 L
+.70952 .15614 L
+.71045 .15671 L
+.71138 .15726 L
+.71231 .15778 L
+.71324 .15829 L
+.71417 .15877 L
+.7151 .15923 L
+.71603 .15967 L
+.71696 .16009 L
+.71789 .16048 L
+.71882 .16086 L
+.71974 .16121 L
+.72067 .16154 L
+Mistroke
+.7216 .16184 L
+.72253 .16213 L
+.72346 .16239 L
+.72439 .16263 L
+.72532 .16284 L
+.72625 .16304 L
+.72718 .16321 L
+.72811 .16336 L
+.72904 .16349 L
+.72997 .1636 L
+.73089 .16368 L
+.73182 .16374 L
+.73275 .16378 L
+.73368 .1638 L
+.73461 .16379 L
+.73554 .16377 L
+.73647 .16372 L
+.7374 .16365 L
+.73833 .16356 L
+.73926 .16344 L
+.74019 .16331 L
+.74111 .16315 L
+.74204 .16297 L
+.74297 .16277 L
+.7439 .16254 L
+.74483 .1623 L
+.74576 .16203 L
+.74669 .16175 L
+.74762 .16144 L
+.74855 .16111 L
+.74948 .16075 L
+.75041 .16038 L
+.75134 .15999 L
+.75226 .15957 L
+.75319 .15914 L
+.75412 .15868 L
+.75505 .15821 L
+.75598 .15771 L
+.75691 .15719 L
+.75784 .15665 L
+.75877 .15609 L
+.7597 .15551 L
+.76063 .15491 L
+.76156 .1543 L
+.76249 .15366 L
+.76341 .153 L
+.76434 .15232 L
+.76527 .15162 L
+.7662 .1509 L
+.76713 .15017 L
+Mistroke
+.76806 .14941 L
+.76899 .14864 L
+.76992 .14784 L
+.77085 .14703 L
+.77178 .1462 L
+.77271 .14535 L
+.77364 .14448 L
+.77456 .1436 L
+.77549 .14269 L
+.77642 .14177 L
+.77735 .14083 L
+.77828 .13987 L
+.77921 .1389 L
+.78014 .13791 L
+.78107 .1369 L
+.782 .13587 L
+.78293 .13483 L
+.78386 .13377 L
+.78479 .13269 L
+.78571 .1316 L
+.78664 .13049 L
+.78757 .12937 L
+.7885 .12823 L
+.78943 .12707 L
+.79036 .1259 L
+.79129 .12472 L
+.79222 .12351 L
+.79315 .1223 L
+.79408 .12107 L
+.79501 .11982 L
+.79593 .11856 L
+.79686 .11729 L
+.79779 .116 L
+.79872 .1147 L
+.79965 .11339 L
+.80058 .11206 L
+.80151 .11072 L
+.80244 .10936 L
+.80337 .108 L
+.8043 .10662 L
+.80523 .10523 L
+.80616 .10382 L
+.80708 .10241 L
+.80801 .10098 L
+.80894 .09954 L
+.80987 .0981 L
+.8108 .09664 L
+.81173 .09516 L
+.81266 .09368 L
+.81359 .09219 L
+Mistroke
+.81452 .09069 L
+.81545 .08918 L
+.81638 .08766 L
+.81731 .08612 L
+.81823 .08458 L
+.81916 .08304 L
+.82009 .08148 L
+.82102 .07991 L
+.82195 .07834 L
+.82288 .07675 L
+.82381 .07516 L
+.82474 .07356 L
+.82567 .07196 L
+.8266 .07035 L
+.82753 .06873 L
+.82846 .0671 L
+.82938 .06547 L
+.83031 .06383 L
+.83124 .06219 L
+.83217 .06053 L
+.8331 .05888 L
+.83403 .05722 L
+.83496 .05555 L
+.83589 .05388 L
+.83682 .05221 L
+.83775 .05053 L
+.83868 .04884 L
+.83961 .04716 L
+.84053 .04547 L
+.84146 .04377 L
+.84239 .04207 L
+.84332 .04038 L
+.84425 .03867 L
+.84518 .03697 L
+.84611 .03526 L
+.84704 .03355 L
+.84797 .03184 L
+.8489 .03013 L
+.84983 .02842 L
+.85075 .02671 L
+.85168 .02499 L
+.85261 .02328 L
+.85354 .02156 L
+.85447 .01985 L
+.8554 .01814 L
+.85633 .01642 L
+.85726 .01472 L
+.85819 .01643 L
+.85912 .01814 L
+.86005 .01985 L
+Mistroke
+.86098 .02155 L
+.8619 .02326 L
+.86283 .02496 L
+.86376 .02666 L
+.86469 .02836 L
+.86562 .03005 L
+.86655 .03174 L
+.86748 .03342 L
+.86841 .03511 L
+.86934 .03679 L
+.87027 .03846 L
+.8712 .04013 L
+.87213 .0418 L
+.87305 .04346 L
+.87398 .04511 L
+.87491 .04676 L
+.87584 .0484 L
+.87677 .05004 L
+.8777 .05167 L
+.87863 .0533 L
+.87956 .05492 L
+.88049 .05653 L
+.88142 .05813 L
+.88235 .05973 L
+.88328 .06132 L
+.8842 .06291 L
+.88513 .06448 L
+.88606 .06605 L
+.88699 .0676 L
+.88792 .06915 L
+.88885 .07069 L
+.88978 .07223 L
+.89071 .07375 L
+.89164 .07526 L
+.89257 .07676 L
+.8935 .07826 L
+.89443 .07974 L
+.89535 .08121 L
+.89628 .08268 L
+.89721 .08413 L
+.89814 .08557 L
+.89907 .087 L
+.9 .08842 L
+.90093 .08983 L
+.90186 .09122 L
+.90279 .0926 L
+.90372 .09398 L
+.90465 .09533 L
+.90557 .09668 L
+.9065 .09801 L
+Mistroke
+.90743 .09934 L
+.90836 .10064 L
+.90929 .10194 L
+.91022 .10322 L
+.91115 .10449 L
+.91208 .10574 L
+.91301 .10698 L
+.91394 .10821 L
+.91487 .10942 L
+.9158 .11062 L
+.91672 .1118 L
+.91765 .11297 L
+.91858 .11412 L
+.91951 .11526 L
+.92044 .11638 L
+.92137 .11749 L
+.9223 .11858 L
+.92323 .11966 L
+.92416 .12072 L
+.92509 .12176 L
+.92602 .12279 L
+.92695 .1238 L
+.92787 .1248 L
+.9288 .12578 L
+.92973 .12674 L
+.93066 .12769 L
+.93159 .12862 L
+.93252 .12953 L
+.93345 .13042 L
+.93438 .1313 L
+.93531 .13216 L
+.93624 .133 L
+.93717 .13382 L
+.9381 .13463 L
+.93902 .13542 L
+.93995 .13619 L
+.94088 .13694 L
+.94181 .13767 L
+.94274 .13839 L
+.94367 .13909 L
+.9446 .13977 L
+.94553 .14043 L
+.94646 .14107 L
+.94739 .14169 L
+.94832 .14229 L
+.94925 .14288 L
+.95017 .14344 L
+.9511 .14399 L
+.95203 .14452 L
+.95296 .14503 L
+Mistroke
+.95389 .14551 L
+.95482 .14598 L
+.95575 .14643 L
+.95668 .14686 L
+.95761 .14727 L
+.95854 .14767 L
+.95947 .14804 L
+.96039 .14839 L
+.96132 .14872 L
+.96225 .14903 L
+.96318 .14932 L
+.96411 .14959 L
+.96504 .14985 L
+.96597 .15008 L
+.9669 .15029 L
+.96783 .15048 L
+.96876 .15065 L
+.96969 .15081 L
+.97062 .15094 L
+.97154 .15105 L
+.97247 .15114 L
+.9734 .15121 L
+.97433 .15126 L
+.97526 .15129 L
+.97619 .1513 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooof80oooo000F0?ooo`030000003oool0oooo0?l0ooooHP3oool000d0
+oooo0`0000060?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`<00000O`3oool00`000000oooo0?ooo`1D0?ooo`030000003oool0oooo05<0
+oooo0P00000c0?ooo`00303oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3o
+ool0O`3oool2000005 at 0oooo0P00001E0?ooo`800000<`3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`800000P03oool2000005 at 0oooo00<000000?ooo`000000D`3oool010000000
+oooo00000000000b0?ooo`003 at 3oool3000000H0oooo0P00001o0?ooo`030000003oool0000005<0
+oooo00 at 000000?ooo`3oool00000D`3oool010000000oooo0?ooo`00000b0?ooo`005P3oool20000
+07l0oooo00<000000?ooo`000000D`3oool00`000000oooo0?ooo`0200000540oooo00 at 000000?oo
+o`3oool0oooo0P00000a0?ooo`005P3oool2000007l0oooo00 at 000000?ooo`3oool00000D at 3oool0
+0`000000oooo0?ooo`020?ooo`030000003oool0oooo04h0oooo0P0000040?ooo`030000003oool0
+oooo02l0oooo000F0?ooo`800000O`3oool010000000oooo0?ooo`00001A0?ooo`030000003oool0
+oooo00<0oooo00<000000?ooo`3oool0C at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo02h0oooo000F0?ooo`800000OP3oool01 at 000000oooo0?ooo`3oool000000500oooo0P000005
+0?ooo`030000003oool0oooo04`0oooo0P0000060?ooo`030000003oool0oooo02h0oooo000F0?oo
+o`030000003oool0000007d0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`1=0?oo
+o`030000003oool0oooo00D0oooo00<000000?ooo`3oool0B`3oool00`000000oooo0?ooo`060?oo
+o`030000003oool0oooo02d0oooo000F0?ooo`030000003oool0000007d0oooo00<000000?ooo`3o
+ool00P3oool00`000000oooo0?ooo`1=0?ooo`030000003oool0oooo00D0oooo00<000000?ooo`3o
+ool0BP3oool2000000P0oooo00<000000?ooo`3oool0;@3oool001H0oooo00<000000?ooo`000000
+O at 3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo04`0oooo00<000000?ooo`3oool0
+1`3oool00`000000oooo0?ooo`190?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0
+;03oool001H0oooo0`00001l0?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0C03o
+ool00`000000oooo0?ooo`070?ooo`030000003oool0oooo04P0oooo00<000000?ooo`3oool02 at 3o
+ool00`000000oooo0?ooo`0/0?ooo`005P3oool00`000000oooo0000001l0?ooo`030000003oool0
+oooo00 at 0oooo00<000000?ooo`3oool0BP3oool00`000000oooo0?ooo`080?ooo`800000B at 3oool0
+0`000000oooo0?ooo`0:0?ooo`030000003oool0oooo02/0oooo000F0?ooo`040000003oool0oooo
+000007/0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`1:0?ooo`030000003oool0
+oooo00T0oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`0;0?ooo`800000;03oool0
+01H0oooo00 at 000000?ooo`3oool00000N`3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo04T0oooo00<000000?ooo`3oool02P3oool2000004L0oooo00<000000?ooo`3oool0303oool0
+0`000000oooo0?ooo`0Z0?ooo`005P3oool010000000oooo0?ooo`00001j0?ooo`030000003oool0
+oooo00H0oooo00<000000?ooo`3oool0B03oool00`000000oooo0?ooo`0;0?ooo`030000003oool0
+oooo04 at 0oooo00<000000?ooo`3oool03P3oool00`000000oooo0?ooo`0Y0?ooo`005P3oool01000
+0000oooo0?ooo`00001j0?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool0B03oool0
+0`000000oooo0?ooo`0;0?ooo`800000A at 3oool00`000000oooo0?ooo`0>0?ooo`030000003oool0
+oooo02T0oooo000F0?ooo`040000003oool0oooo000007X0oooo00<000000?ooo`3oool01P3oool0
+0`000000oooo0?ooo`170?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool0 at P3oool0
+0`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo02P0oooo000F0?ooo`040000003oool0oooo
+000007T0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`160?ooo`030000003oool0
+oooo00d0oooo0P0000120?ooo`8000004`3oool00`000000oooo0?ooo`0W0?ooo`005P3oool01 at 00
+0000oooo0?ooo`3oool0000007P0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`15
+0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0B
+0?ooo`030000003oool0oooo02L0oooo000F0?ooo`050000003oool0oooo0?ooo`000000N03oool0
+0`000000oooo0?ooo`080?ooo`030000003oool0oooo04D0oooo00<000000?ooo`3oool03`3oool2
+00000400oooo0P00000E0?ooo`030000003oool0oooo02H0oooo000F0?ooo`050000003oool0oooo
+0?ooo`000000M`3oool00`000000oooo0?ooo`0:0?ooo`030000003oool0oooo04<0oooo00<00000
+0?ooo`3oool04 at 3oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo01 at 0oooo0P00000W
+0?ooo`005P3oool200000080oooo00<000000?ooo`3oool0M at 3oool00`000000oooo0?ooo`0:0?oo
+o`030000003oool0oooo04<0oooo00<000000?ooo`3oool04 at 3oool2000003h0oooo00<000000?oo
+o`3oool05P3oool00`000000oooo0?ooo`0U0?ooo`005P3oool01 at 000000oooo0?ooo`3oool00000
+07L0oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`120?ooo`800000503oool00`00
+0000oooo0?ooo`0l0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0903oool001H0
+oooo00D000000?ooo`3oool0oooo0000001g0?ooo`030000003oool0oooo00/0oooo00<000000?oo
+o`3oool0@@3oool00`000000oooo0?ooo`0C0?ooo`800000?03oool00`000000oooo0?ooo`0H0?oo
+o`030000003oool0oooo02 at 0oooo000F0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3o
+ool0L`3oool00`000000oooo0?ooo`0<0?ooo`030000003oool0oooo0440oooo00<000000?ooo`3o
+ool0503oool00`000000oooo0?ooo`0i0?ooo`8000006`3oool00`000000oooo0?ooo`0S0?ooo`00
+5P3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo07<0oooo00<000000?ooo`3oool0
+303oool00`000000oooo0?ooo`100?ooo`030000003oool0oooo01D0oooo0P00000i0?ooo`800000
+703oool2000002 at 0oooo000F0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool0L`3o
+ool00`000000oooo0?ooo`0<0?ooo`030000003oool0oooo0400oooo00<000000?ooo`3oool05P3o
+ool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool08P3o
+ool001H0oooo00<000000?ooo`3oool00P3oool00`000000oooo0?ooo`1c0?ooo`030000003oool0
+oooo00d0oooo00<000000?ooo`3oool0?P3oool00`000000oooo0?ooo`0H0?ooo`030000003oool0
+oooo03D0oooo0P00000O0?ooo`030000003oool0oooo0240oooo000F0?ooo`030000003oool0oooo
+0080oooo00<000000?ooo`3oool0LP3oool00`000000oooo0?ooo`0>0?ooo`030000003oool0oooo
+03h0oooo00<000000?ooo`3oool0603oool00`000000oooo0?ooo`0e0?ooo`030000003oool0oooo
+01h0oooo0P00000R0?ooo`005P3oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo0780
+oooo00<000000?ooo`3oool03`3oool00`000000oooo0?ooo`0l0?ooo`030000003oool0oooo01X0
+oooo00<000000?ooo`3oool0<`3oool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo0200
+oooo000F0?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0L at 3oool00`000000oooo
+0?ooo`0?0?ooo`030000003oool0oooo03`0oooo00<000000?ooo`3oool06P3oool2000003<0oooo
+0P00000S0?ooo`030000003oool0oooo01l0oooo000F0?ooo`030000003oool0oooo00<0oooo00<0
+00000?ooo`3oool0L at 3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo03/0oooo00<0
+00000?ooo`3oool0703oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo0280oooo0P00
+000P0?ooo`005P3oool2000000 at 0oooo00<000000?ooo`3oool0L03oool00`000000oooo0?ooo`0A
+0?ooo`030000003oool0oooo03X0oooo00<000000?ooo`3oool0703oool200000340oooo00<00000
+0?ooo`3oool0903oool2000001l0oooo000F0?ooo`030000003oool0oooo00<0oooo00<000000?oo
+o`3oool0L03oool00`000000oooo0?ooo`0A0?ooo`030000003oool0oooo03T0oooo0P00000O0?oo
+o`030000003oool0oooo02h0oooo0P00000W0?ooo`030000003oool0oooo01d0oooo000F0?ooo`03
+0000003oool0oooo00<0oooo00<000000?ooo`3oool0L03oool00`000000oooo0?ooo`0A0?ooo`03
+0000003oool0oooo03T0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`0]0?ooo`03
+0000003oool0oooo02L0oooo00<000000?ooo`3oool0703oool001H0oooo00<000000?ooo`3oool0
+103oool00`000000oooo0?ooo`1_0?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool0
+=`3oool200000240oooo0P00000]0?ooo`030000003oool0oooo02P0oooo0P00000M0?ooo`005P3o
+ool00`000000oooo0?ooo`040?ooo`030000003oool0oooo06h0oooo00<000000?ooo`3oool04`3o
+ool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0:P3o
+ool2000002/0oooo0P00000L0?ooo`005P3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo06h0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0
+oooo0280oooo00<000000?ooo`3oool0:@3oool00`000000oooo0?ooo`0[0?ooo`8000006`3oool0
+01H0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`1^0?ooo`030000003oool0oooo
+01 at 0oooo00<000000?ooo`3oool0=@3oool00`000000oooo0?ooo`0S0?ooo`800000:@3oool00`00
+0000oooo0?ooo`0]0?ooo`030000003oool0oooo01T0oooo000F0?ooo`030000003oool0oooo00 at 0
+oooo00<000000?ooo`3oool0KP3oool00`000000oooo0?ooo`0D0?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`0V0?ooo`030000003oool0oooo02l0
+oooo00<000000?ooo`3oool0603oool001H0oooo00<000000?ooo`3oool0103oool00`000000oooo
+0?ooo`1]0?ooo`030000003oool0oooo01D0oooo0P00000e0?ooo`030000003oool0oooo02H0oooo
+00<000000?ooo`3oool0903oool200000380oooo00<000000?ooo`3oool05`3oool001H0oooo00<0
+00000?ooo`3oool01 at 3oool00`000000oooo0?ooo`1/0?ooo`030000003oool0oooo01H0oooo00<0
+00000?ooo`3oool0<`3oool00`000000oooo0?ooo`0V0?ooo`800000903oool2000003 at 0oooo00<0
+00000?ooo`3oool05P3oool001H0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`1/
+0?ooo`030000003oool0oooo01H0oooo00<000000?ooo`3oool0<P3oool00`000000oooo0?ooo`0X
+0?ooo`8000008`3oool00`000000oooo0?ooo`0d0?ooo`030000003oool0oooo01D0oooo000F0?oo
+o`8000001P3oool00`000000oooo0?ooo`1/0?ooo`030000003oool0oooo01L0oooo00<000000?oo
+o`3oool0<@3oool00`000000oooo0?ooo`0Y0?ooo`8000008 at 3oool00`000000oooo0?ooo`0f0?oo
+o`8000005 at 3oool001H0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`1[0?ooo`03
+0000003oool0oooo01P0oooo00<000000?ooo`3oool0<03oool00`000000oooo0?ooo`0[0?ooo`03
+0000003oool0oooo01h0oooo00<000000?ooo`3oool0>03oool2000001 at 0oooo000F0?ooo`030000
+003oool0oooo00H0oooo00<000000?ooo`3oool0JP3oool00`000000oooo0?ooo`0H0?ooo`800000
+<03oool00`000000oooo0?ooo`0]0?ooo`8000007 at 3oool00`000000oooo0?ooo`0j0?ooo`<00000
+4P3oool001H0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`1Z0?ooo`030000003o
+ool0oooo01T0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`0^0?ooo`8000006`3o
+ool00`000000oooo0?ooo`0m0?ooo`<00000403oool001H0oooo00<000000?ooo`3oool01P3oool0
+0`000000oooo0?ooo`1Z0?ooo`030000003oool0oooo01T0oooo00<000000?ooo`3oool0;@3oool0
+0`000000oooo0?ooo`0`0?ooo`8000006 at 3oool00`000000oooo0?ooo`100?ooo`<000003P3oool0
+01H0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`1Y0?ooo`030000003oool0oooo
+01/0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`0a0?ooo`8000005P3oool20000
+04D0oooo1 at 00000:0?ooo`005P3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo06T0
+oooo00<000000?ooo`3oool06`3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo03<0
+oooo0P00000D0?ooo`800000BP3oool3000000P0oooo000F0?ooo`030000003oool0oooo00L0oooo
+00<000000?ooo`3oool0J03oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo02X0oooo
+00<000000?ooo`3oool0=@3oool200000140oooo0P00001F0?ooo`005P3oool00`000000oooo0?oo
+o`070?ooo`030000003oool0oooo06P0oooo00<000000?ooo`3oool0703oool00`000000oooo0?oo
+o`0Y0?ooo`030000003oool0oooo03L0oooo0`00000<0?ooo`<00000F03oool000 at 0oooo0`000003
+0?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`07
+0?ooo`030000003oool0oooo06P0oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?ooo`0W
+0?ooo`800000>`3oool3000000P0oooo0`00001J0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0
+000000L0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`070?ooo`030000003oool0
+oooo06L0oooo00<000000?ooo`3oool07P3oool2000002P0oooo00<000000?ooo`3oool0?03oool9
+000005d0oooo00030?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`04
+0?ooo`<000001`3oool00`000000oooo0?ooo`1W0?ooo`030000003oool0oooo01l0oooo00<00000
+0?ooo`3oool09 at 3oool00`000000oooo0?ooo`2S0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0
+000000L0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`070?ooo`030000003oool0
+oooo06L0oooo00<000000?ooo`3oool07`3oool2000002H0oooo00<000000?ooo`3oool0X`3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0000000H0oooo00<00000
+0?ooo`3oool0203oool00`000000oooo0?ooo`1V0?ooo`030000003oool0oooo0200oooo00<00000
+0?ooo`3oool08`3oool00`000000oooo0?ooo`2T0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0
+000000H0oooo0P0000060?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0I at 3oool0
+0`000000oooo0?ooo`0Q0?ooo`8000008`3oool200000:H0oooo00040?ooo`<00000203oool00`00
+0000oooo0?ooo`040?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0I at 3oool00`00
+0000oooo0?ooo`0R0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0Y at 3oool001H0
+oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`1U0?ooo`030000003oool0oooo02<0
+oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`2V0?ooo`005P3oool00`000000oooo
+0?ooo`080?ooo`030000003oool0oooo06D0oooo00<000000?ooo`3oool08`3oool00`000000oooo
+0?ooo`0N0?ooo`800000Z03oool001H0oooo00<000000?ooo`3oool0203oool00`000000oooo0?oo
+o`1T0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?oo
+o`2W0?ooo`005P3oool00`000000oooo0?ooo`090?ooo`030000003oool0oooo06<0oooo00<00000
+0?ooo`3oool09 at 3oool2000001d0oooo00<000000?ooo`3oool0Z03oool001H0oooo00<000000?oo
+o`3oool02 at 3oool00`000000oooo0?ooo`1S0?ooo`030000003oool0oooo02H0oooo00<000000?oo
+o`3oool06P3oool00`000000oooo0?ooo`2Y0?ooo`005P3oool00`000000oooo0?ooo`090?ooo`03
+0000003oool0oooo06<0oooo00<000000?ooo`3oool09`3oool00`000000oooo0?ooo`0H0?ooo`80
+0000Z`3oool001H0oooo0P00000:0?ooo`030000003oool0oooo0680oooo00<000000?ooo`3oool0
+:@3oool00`000000oooo0?ooo`0F0?ooo`800000[03oool001H0oooo00<000000?ooo`3oool02 at 3o
+ool00`000000oooo0?ooo`1R0?ooo`030000003oool0oooo02T0oooo0P00000F0?ooo`800000[@3o
+ool001H0oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`1Q0?ooo`030000003oool0
+oooo02X0oooo0P00000D0?ooo`800000[P3oool001H0oooo00<000000?ooo`3oool02P3oool00`00
+0000oooo0?ooo`1Q0?ooo`030000003oool0oooo02/0oooo0P00000B0?ooo`800000[`3oool001H0
+oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`1P0?ooo`030000003oool0oooo02d0
+oooo0P00000 at 0?ooo`800000/03oool001H0oooo00<000000?ooo`3oool02P3oool00`000000oooo
+0?ooo`1P0?ooo`030000003oool0oooo02h0oooo0P00000>0?ooo`800000/@3oool001H0oooo00<0
+00000?ooo`3oool02P3oool00`000000oooo0?ooo`1P0?ooo`030000003oool0oooo0300oooo0P00
+000:0?ooo`800000/`3oool001H0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`1O
+0?ooo`030000003oool0oooo0340oooo0`0000050?ooo`@00000]03oool001H0oooo00<000000?oo
+o`3oool02`3oool00`000000oooo0?ooo`1O0?ooo`030000003oool0oooo03 at 0oooo1P00002g0?oo
+o`005P3oool00`000000oooo0?ooo`0;0?ooo`030000003oool0oooo05h0oooo00<000000?ooo`3o
+ool0lP3oool001H0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`1N0?ooo`030000
+003oool0oooo0?80oooo000F0?ooo`800000303oool00`000000oooo0?ooo`1N0?ooo`030000003o
+ool0oooo0?80oooo000F0?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool0GP3oool0
+0`000000oooo0?ooo`3b0?ooo`005P3oool00`000000oooo0?ooo`0<0?ooo`030000003oool0oooo
+05`0oooo00<000000?ooo`3oool0l`3oool001H0oooo00<000000?ooo`3oool0303oool00`000000
+oooo0?ooo`1L0?ooo`030000003oool0oooo0?<0oooo000F0?ooo`030000003oool0oooo00`0oooo
+00<000000?ooo`3oool0G03oool00`000000oooo0?ooo`3c0?ooo`005P3oool00`000000oooo0?oo
+o`0<0?ooo`030000003oool0oooo05`0oooo00<000000?ooo`3oool0l`3oool001H0oooo00<00000
+0?ooo`3oool0303oool00`000000oooo0?ooo`1K0?ooo`030000003oool0oooo0?@0oooo000F0?oo
+o`030000003oool0oooo00d0oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?ooo`3d0?oo
+o`005P3oool00`000000oooo0?ooo`0=0?ooo`030000003oool0oooo05X0oooo00<000000?ooo`3o
+ool0m03oool001H0oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`1J0?ooo`030000
+003oool0oooo0?@0oooo000F0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool0F at 3o
+ool00`000000oooo0?ooo`3e0?ooo`005P3oool2000000h0oooo00<000000?ooo`3oool0F at 3oool0
+0`000000oooo0?ooo`3e0?ooo`005P3oool00`000000oooo0?ooo`0>0?ooo`030000003oool0oooo
+05P0oooo00<000000?ooo`3oool0m at 3oool001H0oooo00<000000?ooo`3oool03P3oool00`000000
+oooo0?ooo`1H0?ooo`030000003oool0oooo0?D0oooo000F0?ooo`030000003oool0oooo00h0oooo
+00<000000?ooo`3oool0F03oool00`000000oooo0?ooo`3e0?ooo`005P3oool00`000000oooo0?oo
+o`0>0?ooo`030000003oool0oooo05L0oooo00<000000?ooo`3oool0mP3oool001H0oooo00<00000
+0?ooo`3oool03P3oool00`000000oooo0?ooo`1G0?ooo`030000003oool0oooo0?H0oooo000F0?oo
+o`030000003oool0oooo00h0oooo00<000000?ooo`3oool0E`3oool00`000000oooo0?ooo`3f0?oo
+o`005P3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo05H0oooo00<000000?ooo`3o
+ool0mP3oool001H0oooo00<000000?ooo`3oool03`3oool00`000000oooo0?ooo`1E0?ooo`030000
+003oool0oooo0?L0oooo000F0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool0E at 3o
+ool00`000000oooo0?ooo`3g0?ooo`005P3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0
+oooo05D0oooo00<000000?ooo`3oool0m`3oool001H0oooo0P00000 at 0?ooo`030000003oool0oooo
+05D0oooo00<000000?ooo`3oool0m`3oool001H0oooo00<000000?ooo`3oool0403oool00`000000
+oooo0?ooo`1C0?ooo`030000003oool0oooo0?P0oooo000F0?ooo`030000003oool0oooo0100oooo
+00<000000?ooo`3oool0D`3oool00`000000oooo0?ooo`3h0?ooo`005P3oool00`000000oooo0?oo
+o`0 at 0?ooo`030000003oool0oooo05<0oooo00<000000?ooo`3oool0n03oool001H0oooo00<00000
+0?ooo`3oool0403oool00`000000oooo0?ooo`1C0?ooo`030000003oool0oooo0?P0oooo000F0?oo
+o`030000003oool0oooo0100oooo00<000000?ooo`3oool0DP3oool00`000000oooo0?ooo`3i0?oo
+o`005P3oool00`000000oooo0?ooo`0A0?ooo`030000003oool0oooo0540oooo00<000000?ooo`3o
+ool0n at 3oool001H0oooo00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`1A0?ooo`030000
+003oool0oooo0?T0oooo000F0?ooo`030000003oool0oooo0140oooo00<000000?ooo`3oool0D at 3o
+ool00`000000oooo0?ooo`3i0?ooo`00103oool3000000<0oooo00<000000?ooo`00000010000005
+0?ooo`030000003oool0oooo0140oooo00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`3j
+0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool01P3oool0
+0`000000oooo0?ooo`0A0?ooo`030000003oool0oooo0500oooo00<000000?ooo`3oool0nP3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo00D0oooo0`00000B
+0?ooo`030000003oool0oooo04l0oooo00<000000?ooo`3oool0nP3oool000<0oooo00D000000?oo
+o`3oool0oooo000000070?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool04P3oool0
+0`000000oooo0?ooo`1?0?ooo`030000003oool0oooo0?X0oooo00030?ooo`050000003oool0oooo
+0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0180oooo00<00000
+0?ooo`3oool0C`3oool00`000000oooo0?ooo`3j0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0
+000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0180oooo00<0
+00000?ooo`3oool0CP3oool00`000000oooo0?ooo`3k0?ooo`00103oool3000000H0oooo0`000006
+0?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool0CP3oool00`000000oooo0?ooo`3k
+0?ooo`005P3oool00`000000oooo0?ooo`0C0?ooo`030000003oool0oooo04`0oooo00<000000?oo
+o`3oool0o03oool001H0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`1<0?ooo`03
+0000003oool0oooo0?`0oooo000F0?ooo`030000003oool0oooo01<0oooo00<000000?ooo`3oool0
+C03oool00`000000oooo0?ooo`3l0?ooo`005P3oool00`000000oooo0?ooo`0C0?ooo`030000003o
+ool0oooo04`0oooo00<000000?ooo`3oool0o03oool001H0oooo00<000000?ooo`3oool04`3oool0
+0`000000oooo0?ooo`1;0?ooo`030000003oool0oooo0?d0oooo000F0?ooo`030000003oool0oooo
+01 at 0oooo00<000000?ooo`3oool0BP3oool00`000000oooo0?ooo`3m0?ooo`005P3oool2000001D0
+oooo00<000000?ooo`3oool0BP3oool00`000000oooo0?ooo`3m0?ooo`005P3oool00`000000oooo
+0?ooo`0D0?ooo`030000003oool0oooo04X0oooo00<000000?ooo`3oool0o at 3oool001H0oooo00<0
+00000?ooo`3oool0503oool00`000000oooo0?ooo`190?ooo`030000003oool0oooo0?h0oooo000F
+0?ooo`030000003oool0oooo01D0oooo00<000000?ooo`3oool0B03oool00`000000oooo0?ooo`3n
+0?ooo`005P3oool00`000000oooo0?ooo`0E0?ooo`030000003oool0oooo04P0oooo00<000000?oo
+o`3oool0oP3oool001H0oooo00<000000?ooo`3oool05 at 3oool00`000000oooo0?ooo`180?ooo`03
+0000003oool0oooo0?h0oooo000F0?ooo`030000003oool0oooo01D0oooo00<000000?ooo`3oool0
+A`3oool00`000000oooo0?ooo`3o0?ooo`005P3oool00`000000oooo0?ooo`0E0?ooo`030000003o
+ool0oooo04L0oooo00<000000?ooo`3oool0o`3oool001H0oooo00<000000?ooo`3oool05P3oool0
+0`000000oooo0?ooo`160?ooo`030000003oool0oooo0?l0oooo000F0?ooo`030000003oool0oooo
+01H0oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`3o0?ooo`005P3oool00`000000
+oooo0?ooo`0F0?ooo`030000003oool0oooo04D0oooo00<000000?ooo`3oool0o`3oool10?ooo`00
+5P3oool2000001L0oooo00<000000?ooo`3oool0A at 3oool00`000000oooo0?ooo`3o0?ooo`40oooo
+000F0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0A03oool00`000000oooo0?oo
+o`3o0?ooo`40oooo000F0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0A03oool0
+0`000000oooo0?ooo`3o0?ooo`40oooo000F0?ooo`030000003oool0oooo01L0oooo00<000000?oo
+o`3oool0@`3oool00`000000oooo0?ooo`3o0?ooo`80oooo000F0?ooo`030000003oool0oooo01L0
+oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`3o0?ooo`80oooo000F0?ooo`030000
+003oool0oooo01L0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`3o0?ooo`80oooo
+000F0?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool0 at P3oool00`000000oooo0?oo
+o`3o0?ooo`80oooo000F0?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool0@@3oool0
+0`000000oooo0?ooo`3o0?ooo`<0oooo000F0?ooo`030000003oool0oooo01P0oooo00<000000?oo
+o`3oool0@@3oool00`000000oooo0?ooo`3o0?ooo`<0oooo000F0?ooo`030000003oool0oooo01P0
+oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`3o0?ooo`<0oooo000F0?ooo`030000
+003oool0oooo01T0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`3o0?ooo`<0oooo
+000F0?ooo`8000006P3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo0?l0oooo103o
+ool001H0oooo00<000000?ooo`3oool06 at 3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0
+oooo0?l0oooo103oool001H0oooo00<000000?ooo`3oool06 at 3oool00`000000oooo0?ooo`0o0?oo
+o`030000003oool0oooo0?l0oooo103oool001H0oooo00<000000?ooo`3oool06P3oool00`000000
+oooo0?ooo`0n0?ooo`030000003oool0oooo0?l0oooo103oool001H0oooo00<000000?ooo`3oool0
+6P3oool00`000000oooo0?ooo`0m0?ooo`030000003oool0oooo0?l0oooo1 at 3oool001H0oooo00<0
+00000?ooo`3oool06P3oool00`000000oooo0?ooo`0m0?ooo`030000003oool0oooo0?l0oooo1 at 3o
+ool001H0oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0m0?ooo`030000003oool0
+oooo0?l0oooo1 at 3oool001H0oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0l0?oo
+o`030000003oool0oooo0?l0oooo1P3oool001H0oooo00<000000?ooo`3oool06`3oool00`000000
+oooo0?ooo`0k0?ooo`030000003oool0oooo0?l0oooo1P3oool001H0oooo00<000000?ooo`3oool0
+6`3oool00`000000oooo0?ooo`0k0?ooo`030000003oool0oooo0?l0oooo1P3oool001H0oooo00<0
+00000?ooo`3oool06`3oool00`000000oooo0?ooo`0k0?ooo`030000003oool0oooo0?l0oooo1P3o
+ool001H0oooo0P00000L0?ooo`030000003oool0oooo03X0oooo00<000000?ooo`3oool0o`3oool7
+0?ooo`005P3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo03T0oooo00<000000?oo
+o`3oool0o`3oool70?ooo`005P3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo03T0
+oooo00<000000?ooo`3oool0o`3oool70?ooo`005P3oool00`000000oooo0?ooo`0L0?ooo`030000
+003oool0oooo03P0oooo00<000000?ooo`3oool0o`3oool80?ooo`005P3oool00`000000oooo0?oo
+o`0M0?ooo`030000003oool0oooo03L0oooo00<000000?ooo`3oool0o`3oool80?ooo`005P3oool0
+0`000000oooo0?ooo`0M0?ooo`030000003oool0oooo03L0oooo00<000000?ooo`3oool0o`3oool8
+0?ooo`005P3oool00`000000oooo0?ooo`0M0?ooo`030000003oool0oooo03L0oooo00<000000?oo
+o`3oool0o`3oool80?ooo`005P3oool00`000000oooo0?ooo`0N0?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool0o`3oool90?ooo`005P3oool00`000000oooo0?ooo`0N0?ooo`030000
+003oool0oooo03D0oooo00<000000?ooo`3oool0o`3oool90?ooo`00103oool3000000<0oooo00<0
+00000?ooo`3oool00`0000060?ooo`030000003oool0oooo01h0oooo00<000000?ooo`3oool0=@3o
+ool00`000000oooo0?ooo`3o0?ooo`T0oooo00030?ooo`050000003oool0oooo0?ooo`000000103o
+ool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool07P3oool00`000000oooo
+0?ooo`0d0?ooo`030000003oool0oooo0?l0oooo2P3oool000<0oooo00D000000?ooo`3oool0oooo
+000000080?ooo`030000003oool0oooo00<0oooo0`00000O0?ooo`030000003oool0oooo03<0oooo
+00<000000?ooo`3oool0o`3oool:0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000H0oooo
+0P0000060?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool0<`3oool00`000000oooo
+0?ooo`3o0?ooo`X0oooo00030?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo
+0?ooo`030?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool0<`3oool00`000000oooo
+0?ooo`3o0?ooo`X0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo
+0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0803oool00`000000oooo0?ooo`0a0?ooo`03
+0000003oool0oooo0?l0oooo2`3oool000 at 0oooo0`0000060?ooo`<000001P3oool00`000000oooo
+0?ooo`0P0?ooo`030000003oool0oooo0340oooo00<000000?ooo`3oool0o`3oool;0?ooo`005P3o
+ool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo0340oooo00<000000?ooo`3oool0o`3o
+ool;0?ooo`005P3oool00`000000oooo0?ooo`0P0?ooo`030000003oool0oooo0300oooo00<00000
+0?ooo`3oool0o`3oool<0?ooo`005P3oool00`000000oooo0?ooo`0Q0?ooo`030000003oool0oooo
+02l0oooo00<000000?ooo`3oool0o`3oool<0?ooo`005P3oool00`000000oooo0?ooo`0Q0?ooo`03
+0000003oool0oooo02l0oooo00<000000?ooo`3oool0o`3oool<0?ooo`005P3oool00`000000oooo
+0?ooo`0Q0?ooo`030000003oool0oooo02h0oooo00<000000?ooo`3oool0o`3oool=0?ooo`005P3o
+ool00`000000oooo0?ooo`0R0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3oool0o`3o
+ool=0?ooo`005P3oool2000002<0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`3o
+0?ooo`d0oooo000F0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0;03oool00`00
+0000oooo0?ooo`3o0?ooo`h0oooo000F0?ooo`030000003oool0oooo02<0oooo00<000000?ooo`3o
+ool0:`3oool00`000000oooo0?ooo`3o0?ooo`h0oooo000F0?ooo`030000003oool0oooo02<0oooo
+00<000000?ooo`3oool0:`3oool00`000000oooo0?ooo`3o0?ooo`h0oooo000F0?ooo`030000003o
+ool0oooo02<0oooo00<000000?ooo`3oool0:P3oool00`000000oooo0?ooo`3o0?ooo`l0oooo000F
+0?ooo`030000003oool0oooo02 at 0oooo00<000000?ooo`3oool0:@3oool00`000000oooo0?ooo`3o
+0?ooo`l0oooo000F0?ooo`030000003oool0oooo02 at 0oooo00<000000?ooo`3oool0:@3oool00`00
+0000oooo0?ooo`3o0?ooo`l0oooo000F0?ooo`030000003oool0oooo02 at 0oooo00<000000?ooo`3o
+ool0:03oool00`000000oooo0?ooo`3o0?oooa00oooo000F0?ooo`030000003oool0oooo02D0oooo
+00<000000?ooo`3oool09`3oool00`000000oooo0?ooo`3o0?oooa00oooo000F0?ooo`030000003o
+ool0oooo02D0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`3o0?oooa40oooo000F
+0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`3o
+0?oooa40oooo000F0?ooo`8000009`3oool00`000000oooo0?ooo`0U0?ooo`030000003oool0oooo
+0?l0oooo4 at 3oool001H0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`0T0?ooo`03
+0000003oool0oooo0?l0oooo4P3oool001H0oooo00<000000?ooo`3oool09P3oool00`000000oooo
+0?ooo`0T0?ooo`030000003oool0oooo0?l0oooo4P3oool001H0oooo00<000000?ooo`3oool09`3o
+ool00`000000oooo0?ooo`0R0?ooo`800000o`3ooolD0?ooo`005P3oool00`000000oooo0?ooo`0W
+0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0o`3ooolC0?ooo`005P3oool00`00
+0000oooo0?ooo`0W0?ooo`8000008`3oool00`000000oooo0?ooo`3o0?oooa<0oooo000F0?ooo`03
+0000003oool0oooo02P0oooo00<000000?ooo`3oool0803oool00`000000oooo0?ooo`3o0?oooa at 0
+oooo000F0?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool07`3oool00`000000oooo
+0?ooo`3o0?oooaD0oooo000F0?ooo`030000003oool0oooo02T0oooo00<000000?ooo`3oool07P3o
+ool00`000000oooo0?ooo`3o0?oooaD0oooo000F0?ooo`030000003oool0oooo02T0oooo00<00000
+0?ooo`3oool07 at 3oool200000?l0oooo5`3oool001H0oooo00<000000?ooo`3oool0:P3oool00`00
+0000oooo0?ooo`0L0?ooo`030000003oool0oooo0?l0oooo5P3oool001H0oooo0P00000[0?ooo`03
+0000003oool0oooo01`0oooo00<000000?ooo`3oool0o`3ooolF0?ooo`005P3oool00`000000oooo
+0?ooo`0Z0?ooo`800000703oool00`000000oooo0?ooo`3o0?oooaL0oooo000F0?ooo`030000003o
+ool0oooo02/0oooo00<000000?ooo`3oool06 at 3oool200000?l0oooo6 at 3oool001H0oooo00<00000
+0?ooo`3oool0:`3oool2000001X0oooo00<000000?ooo`3oool0o`3ooolH0?ooo`005P3oool00`00
+0000oooo0?ooo`0/0?ooo`030000003oool0oooo01L0oooo0P00003o0?oooaX0oooo000F0?ooo`03
+0000003oool0oooo02`0oooo0P00000H0?ooo`030000003oool0oooo0?l0oooo6 at 3oool001H0oooo
+00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`0E0?ooo`030000003oool0oooo0?l0oooo
+6P3oool001H0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`0D0?ooo`030000003o
+ool0oooo0?l0oooo6P3oool001H0oooo00<000000?ooo`3oool0;P3oool2000001 at 0oooo00<00000
+0?ooo`3oool0o`3ooolK0?ooo`005P3oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo
+0140oooo0P00003o0?oooad0oooo000F0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3o
+ool03`3oool200000?l0oooo7P3oool001H0oooo0P00000a0?ooo`800000403oool00`000000oooo
+0?ooo`3o0?oooad0oooo000F0?ooo`030000003oool0oooo0340oooo0P00000>0?ooo`030000003o
+ool0oooo0?l0oooo7P3oool001H0oooo00<000000?ooo`3oool0<P3oool2000000/0oooo0P00003o
+0?ooob40oooo000F0?ooo`030000003oool0oooo03<0oooo0P0000090?ooo`800000o`3ooolR0?oo
+o`005P3oool00`000000oooo0?ooo`0e0?ooo`8000001 at 3oool300000?l0oooo8`3oool001H0oooo
+00<000000?ooo`3oool0=`3oool600000?l0oooo9 at 3oool001H0oooo00<000000?ooo`3oool0o`3o
+oomR0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof80oooo000F0?ooo`030000003oool0oooo
+0?l0ooooHP3oool001H0oooo00<000000?ooo`3oool0o`3ooomR0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooof80oooo003o0?ooog/0oooo003o0?ooog/0oooo003o0?ooog/0oooo003o0?ooog/0
+oooo0000\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-66.6901, -0.0170943, 
+  2.95734, 0.00181311}}],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.60077 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .09475 -24 -4.5 ]
+[.01131 .09475 0 4.5 ]
+[.01131 .17479 -18 -4.5 ]
+[.01131 .17479 0 4.5 ]
+[.01131 .25483 -24 -4.5 ]
+[.01131 .25483 0 4.5 ]
+[.01131 .33487 -18 -4.5 ]
+[.01131 .33487 0 4.5 ]
+[.01131 .41491 -24 -4.5 ]
+[.01131 .41491 0 4.5 ]
+[.01131 .49495 -18 -4.5 ]
+[.01131 .49495 0 4.5 ]
+[.01131 .57499 -24 -4.5 ]
+[.01131 .57499 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .09475 m
+.03006 .09475 L
+s
+[(0.05)] .01131 .09475 1 0 Mshowa
+.02381 .17479 m
+.03006 .17479 L
+s
+[(0.1)] .01131 .17479 1 0 Mshowa
+.02381 .25483 m
+.03006 .25483 L
+s
+[(0.15)] .01131 .25483 1 0 Mshowa
+.02381 .33487 m
+.03006 .33487 L
+s
+[(0.2)] .01131 .33487 1 0 Mshowa
+.02381 .41491 m
+.03006 .41491 L
+s
+[(0.25)] .01131 .41491 1 0 Mshowa
+.02381 .49495 m
+.03006 .49495 L
+s
+[(0.3)] .01131 .49495 1 0 Mshowa
+.02381 .57499 m
+.03006 .57499 L
+s
+[(0.35)] .01131 .57499 1 0 Mshowa
+.125 Mabswid
+.02381 .03072 m
+.02756 .03072 L
+s
+.02381 .04673 m
+.02756 .04673 L
+s
+.02381 .06274 m
+.02756 .06274 L
+s
+.02381 .07875 m
+.02756 .07875 L
+s
+.02381 .11076 m
+.02756 .11076 L
+s
+.02381 .12677 m
+.02756 .12677 L
+s
+.02381 .14278 m
+.02756 .14278 L
+s
+.02381 .15878 m
+.02756 .15878 L
+s
+.02381 .1908 m
+.02756 .1908 L
+s
+.02381 .20681 m
+.02756 .20681 L
+s
+.02381 .22282 m
+.02756 .22282 L
+s
+.02381 .23882 m
+.02756 .23882 L
+s
+.02381 .27084 m
+.02756 .27084 L
+s
+.02381 .28685 m
+.02756 .28685 L
+s
+.02381 .30285 m
+.02756 .30285 L
+s
+.02381 .31886 m
+.02756 .31886 L
+s
+.02381 .35088 m
+.02756 .35088 L
+s
+.02381 .36689 m
+.02756 .36689 L
+s
+.02381 .38289 m
+.02756 .38289 L
+s
+.02381 .3989 m
+.02756 .3989 L
+s
+.02381 .43092 m
+.02756 .43092 L
+s
+.02381 .44692 m
+.02756 .44692 L
+s
+.02381 .46293 m
+.02756 .46293 L
+s
+.02381 .47894 m
+.02756 .47894 L
+s
+.02381 .51095 m
+.02756 .51095 L
+s
+.02381 .52696 m
+.02756 .52696 L
+s
+.02381 .54297 m
+.02756 .54297 L
+s
+.02381 .55898 m
+.02756 .55898 L
+s
+.02381 .59099 m
+.02756 .59099 L
+s
+.02381 .607 m
+.02756 .607 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .01472 m
+.02567 .01473 L
+.0266 .01478 L
+.02753 .01487 L
+.02846 .01498 L
+.02938 .01514 L
+.03031 .01532 L
+.03124 .01554 L
+.03217 .01579 L
+.0331 .01608 L
+.03403 .01639 L
+.03496 .01675 L
+.03589 .01713 L
+.03682 .01755 L
+.03775 .018 L
+.03868 .01849 L
+.03961 .01901 L
+.04053 .01956 L
+.04146 .02014 L
+.04239 .02076 L
+.04332 .02141 L
+.04425 .02209 L
+.04518 .02281 L
+.04611 .02356 L
+.04704 .02434 L
+.04797 .02516 L
+.0489 .026 L
+.04983 .02688 L
+.05075 .02779 L
+.05168 .02873 L
+.05261 .02971 L
+.05354 .03072 L
+.05447 .03176 L
+.0554 .03283 L
+.05633 .03393 L
+.05726 .03506 L
+.05819 .03623 L
+.05912 .03742 L
+.06005 .03865 L
+.06098 .03991 L
+.0619 .0412 L
+.06283 .04252 L
+.06376 .04387 L
+.06469 .04525 L
+.06562 .04666 L
+.06655 .0481 L
+.06748 .04957 L
+.06841 .05107 L
+.06934 .0526 L
+.07027 .05415 L
+Mistroke
+.0712 .05574 L
+.07213 .05736 L
+.07305 .059 L
+.07398 .06068 L
+.07491 .06238 L
+.07584 .06411 L
+.07677 .06587 L
+.0777 .06766 L
+.07863 .06947 L
+.07956 .07131 L
+.08049 .07318 L
+.08142 .07508 L
+.08235 .077 L
+.08328 .07895 L
+.0842 .08092 L
+.08513 .08293 L
+.08606 .08495 L
+.08699 .08701 L
+.08792 .08908 L
+.08885 .09119 L
+.08978 .09332 L
+.09071 .09547 L
+.09164 .09765 L
+.09257 .09985 L
+.0935 .10208 L
+.09443 .10433 L
+.09535 .1066 L
+.09628 .1089 L
+.09721 .11121 L
+.09814 .11356 L
+.09907 .11592 L
+.1 .11831 L
+.10093 .12072 L
+.10186 .12315 L
+.10279 .1256 L
+.10372 .12807 L
+.10465 .13056 L
+.10557 .13308 L
+.1065 .13561 L
+.10743 .13816 L
+.10836 .14074 L
+.10929 .14333 L
+.11022 .14594 L
+.11115 .14857 L
+.11208 .15122 L
+.11301 .15389 L
+.11394 .15657 L
+.11487 .15928 L
+.1158 .162 L
+.11672 .16473 L
+Mistroke
+.11765 .16749 L
+.11858 .17026 L
+.11951 .17304 L
+.12044 .17584 L
+.12137 .17866 L
+.1223 .18149 L
+.12323 .18434 L
+.12416 .1872 L
+.12509 .19007 L
+.12602 .19296 L
+.12695 .19586 L
+.12787 .19878 L
+.1288 .20171 L
+.12973 .20465 L
+.13066 .2076 L
+.13159 .21056 L
+.13252 .21354 L
+.13345 .21652 L
+.13438 .21952 L
+.13531 .22253 L
+.13624 .22555 L
+.13717 .22857 L
+.1381 .23161 L
+.13902 .23465 L
+.13995 .23771 L
+.14088 .24077 L
+.14181 .24384 L
+.14274 .24692 L
+.14367 .25001 L
+.1446 .2531 L
+.14553 .2562 L
+.14646 .2593 L
+.14739 .26241 L
+.14832 .26553 L
+.14925 .26865 L
+.15017 .27178 L
+.1511 .27491 L
+.15203 .27804 L
+.15296 .28118 L
+.15389 .28432 L
+.15482 .28747 L
+.15575 .29061 L
+.15668 .29376 L
+.15761 .29692 L
+.15854 .30007 L
+.15947 .30322 L
+.16039 .30638 L
+.16132 .30953 L
+.16225 .31269 L
+.16318 .31585 L
+Mistroke
+.16411 .319 L
+.16504 .32216 L
+.16597 .32531 L
+.1669 .32846 L
+.16783 .33161 L
+.16876 .33475 L
+.16969 .3379 L
+.17062 .34104 L
+.17154 .34418 L
+.17247 .34731 L
+.1734 .35044 L
+.17433 .35356 L
+.17526 .35668 L
+.17619 .3598 L
+.17712 .36291 L
+.17805 .36601 L
+.17898 .3691 L
+.17991 .37219 L
+.18084 .37528 L
+.18177 .37835 L
+.18269 .38142 L
+.18362 .38448 L
+.18455 .38753 L
+.18548 .39057 L
+.18641 .3936 L
+.18734 .39663 L
+.18827 .39964 L
+.1892 .40264 L
+.19013 .40563 L
+.19106 .40862 L
+.19199 .41159 L
+.19292 .41454 L
+.19384 .41749 L
+.19477 .42043 L
+.1957 .42335 L
+.19663 .42626 L
+.19756 .42915 L
+.19849 .43203 L
+.19942 .4349 L
+.20035 .43775 L
+.20128 .44059 L
+.20221 .44342 L
+.20314 .44622 L
+.20407 .44902 L
+.20499 .45179 L
+.20592 .45456 L
+.20685 .4573 L
+.20778 .46003 L
+.20871 .46274 L
+.20964 .46543 L
+Mistroke
+.21057 .4681 L
+.2115 .47076 L
+.21243 .4734 L
+.21336 .47602 L
+.21429 .47862 L
+.21521 .4812 L
+.21614 .48376 L
+.21707 .4863 L
+.218 .48882 L
+.21893 .49132 L
+.21986 .4938 L
+.22079 .49626 L
+.22172 .49869 L
+.22265 .50111 L
+.22358 .5035 L
+.22451 .50587 L
+.22544 .50822 L
+.22636 .51054 L
+.22729 .51284 L
+.22822 .51512 L
+.22915 .51737 L
+.23008 .5196 L
+.23101 .52181 L
+.23194 .52399 L
+.23287 .52615 L
+.2338 .52828 L
+.23473 .53039 L
+.23566 .53247 L
+.23659 .53452 L
+.23751 .53655 L
+.23844 .53856 L
+.23937 .54053 L
+.2403 .54248 L
+.24123 .5444 L
+.24216 .5463 L
+.24309 .54817 L
+.24402 .55001 L
+.24495 .55182 L
+.24588 .5536 L
+.24681 .55536 L
+.24774 .55709 L
+.24866 .55879 L
+.24959 .56045 L
+.25052 .56209 L
+.25145 .56371 L
+.25238 .56529 L
+.25331 .56684 L
+.25424 .56836 L
+.25517 .56985 L
+.2561 .57131 L
+Mistroke
+.25703 .57274 L
+.25796 .57414 L
+.25889 .57551 L
+.25981 .57685 L
+.26074 .57816 L
+.26167 .57943 L
+.2626 .58068 L
+.26353 .58189 L
+.26446 .58307 L
+.26539 .58421 L
+.26632 .58533 L
+.26725 .58641 L
+.26818 .58746 L
+.26911 .58848 L
+.27003 .58947 L
+.27096 .59042 L
+.27189 .59134 L
+.27282 .59223 L
+.27375 .59308 L
+.27468 .5939 L
+.27561 .59469 L
+.27654 .59544 L
+.27747 .59616 L
+.2784 .59684 L
+.27933 .59749 L
+.28026 .59811 L
+.28118 .59869 L
+.28211 .59924 L
+.28304 .59976 L
+.28397 .60024 L
+.2849 .60068 L
+.28583 .60109 L
+.28676 .60147 L
+.28769 .60181 L
+.28862 .60212 L
+.28955 .60239 L
+.29048 .60263 L
+.29141 .60283 L
+.29233 .603 L
+.29326 .60313 L
+.29419 .60323 L
+.29512 .60329 L
+.29605 .60332 L
+.29698 .60331 L
+.29791 .60327 L
+.29884 .60319 L
+.29977 .60308 L
+.3007 .60293 L
+.30163 .60274 L
+.30256 .60252 L
+Mistroke
+.30348 .60227 L
+.30441 .60198 L
+.30534 .60165 L
+.30627 .60129 L
+.3072 .6009 L
+.30813 .60047 L
+.30906 .6 L
+.30999 .5995 L
+.31092 .59896 L
+.31185 .59839 L
+.31278 .59778 L
+.3137 .59714 L
+.31463 .59646 L
+.31556 .59575 L
+.31649 .595 L
+.31742 .59422 L
+.31835 .59341 L
+.31928 .59255 L
+.32021 .59167 L
+.32114 .59075 L
+.32207 .58979 L
+.323 .5888 L
+.32393 .58778 L
+.32485 .58672 L
+.32578 .58562 L
+.32671 .5845 L
+.32764 .58333 L
+.32857 .58214 L
+.3295 .58091 L
+.33043 .57964 L
+.33136 .57835 L
+.33229 .57702 L
+.33322 .57565 L
+.33415 .57425 L
+.33508 .57282 L
+.336 .57136 L
+.33693 .56986 L
+.33786 .56833 L
+.33879 .56677 L
+.33972 .56517 L
+.34065 .56355 L
+.34158 .56188 L
+.34251 .56019 L
+.34344 .55847 L
+.34437 .55671 L
+.3453 .55492 L
+.34623 .5531 L
+.34715 .55125 L
+.34808 .54937 L
+.34901 .54746 L
+Mistroke
+.34994 .54551 L
+.35087 .54354 L
+.3518 .54153 L
+.35273 .53949 L
+.35366 .53743 L
+.35459 .53533 L
+.35552 .5332 L
+.35645 .53105 L
+.35738 .52886 L
+.3583 .52665 L
+.35923 .5244 L
+.36016 .52213 L
+.36109 .51983 L
+.36202 .5175 L
+.36295 .51514 L
+.36388 .51276 L
+.36481 .51034 L
+.36574 .5079 L
+.36667 .50544 L
+.3676 .50294 L
+.36852 .50042 L
+.36945 .49787 L
+.37038 .49529 L
+.37131 .49269 L
+.37224 .49007 L
+.37317 .48741 L
+.3741 .48474 L
+.37503 .48203 L
+.37596 .4793 L
+.37689 .47655 L
+.37782 .47377 L
+.37875 .47097 L
+.37967 .46815 L
+.3806 .4653 L
+.38153 .46243 L
+.38246 .45953 L
+.38339 .45661 L
+.38432 .45367 L
+.38525 .45071 L
+.38618 .44772 L
+.38711 .44472 L
+.38804 .44169 L
+.38897 .43864 L
+.3899 .43557 L
+.39082 .43248 L
+.39175 .42937 L
+.39268 .42624 L
+.39361 .42309 L
+.39454 .41992 L
+.39547 .41673 L
+Mistroke
+.3964 .41353 L
+.39733 .4103 L
+.39826 .40706 L
+.39919 .40379 L
+.40012 .40051 L
+.40105 .39722 L
+.40197 .3939 L
+.4029 .39057 L
+.40383 .38723 L
+.40476 .38387 L
+.40569 .38049 L
+.40662 .37709 L
+.40755 .37369 L
+.40848 .37026 L
+.40941 .36683 L
+.41034 .36337 L
+.41127 .35991 L
+.4122 .35643 L
+.41312 .35294 L
+.41405 .34943 L
+.41498 .34592 L
+.41591 .34239 L
+.41684 .33885 L
+.41777 .33529 L
+.4187 .33173 L
+.41963 .32816 L
+.42056 .32457 L
+.42149 .32098 L
+.42242 .31737 L
+.42334 .31376 L
+.42427 .31014 L
+.4252 .30651 L
+.42613 .30287 L
+.42706 .29922 L
+.42799 .29556 L
+.42892 .2919 L
+.42985 .28823 L
+.43078 .28455 L
+.43171 .28087 L
+.43264 .27718 L
+.43357 .27349 L
+.43449 .26979 L
+.43542 .26608 L
+.43635 .26237 L
+.43728 .25866 L
+.43821 .25494 L
+.43914 .25122 L
+.44007 .24749 L
+.441 .24377 L
+.44193 .24004 L
+Mistroke
+.44286 .2363 L
+.44379 .23257 L
+.44472 .22883 L
+.44564 .2251 L
+.44657 .22136 L
+.4475 .21762 L
+.44843 .21388 L
+.44936 .21015 L
+.45029 .20641 L
+.45122 .20267 L
+.45215 .19894 L
+.45308 .1952 L
+.45401 .19147 L
+.45494 .18774 L
+.45587 .18402 L
+.45679 .18029 L
+.45772 .17657 L
+.45865 .17286 L
+.45958 .16914 L
+.46051 .16543 L
+.46144 .16173 L
+.46237 .15803 L
+.4633 .15434 L
+.46423 .15065 L
+.46516 .14697 L
+.46609 .14329 L
+.46702 .13963 L
+.46794 .13596 L
+.46887 .13231 L
+.4698 .12866 L
+.47073 .12503 L
+.47166 .12139 L
+.47259 .11777 L
+.47352 .11416 L
+.47445 .11056 L
+.47538 .10696 L
+.47631 .10338 L
+.47724 .09981 L
+.47816 .09624 L
+.47909 .09269 L
+.48002 .08915 L
+.48095 .08562 L
+.48188 .08211 L
+.48281 .0786 L
+.48374 .07511 L
+.48467 .07163 L
+.4856 .06816 L
+.48653 .06471 L
+.48746 .06127 L
+.48839 .05784 L
+Mistroke
+.48931 .05443 L
+.49024 .05103 L
+.49117 .04765 L
+.4921 .04429 L
+.49303 .04093 L
+.49396 .0376 L
+.49489 .03428 L
+.49582 .03098 L
+.49675 .02769 L
+.49768 .02442 L
+.49861 .02117 L
+.49954 .01793 L
+.50046 .01472 L
+.50139 .01791 L
+.50232 .0211 L
+.50325 .02426 L
+.50418 .0274 L
+.50511 .03053 L
+.50604 .03363 L
+.50697 .03672 L
+.5079 .03978 L
+.50883 .04283 L
+.50976 .04585 L
+.51069 .04886 L
+.51161 .05184 L
+.51254 .05481 L
+.51347 .05775 L
+.5144 .06067 L
+.51533 .06357 L
+.51626 .06644 L
+.51719 .0693 L
+.51812 .07213 L
+.51905 .07494 L
+.51998 .07772 L
+.52091 .08048 L
+.52184 .08322 L
+.52276 .08594 L
+.52369 .08863 L
+.52462 .0913 L
+.52555 .09394 L
+.52648 .09656 L
+.52741 .09916 L
+.52834 .10173 L
+.52927 .10427 L
+.5302 .10679 L
+.53113 .10928 L
+.53206 .11175 L
+.53298 .11419 L
+.53391 .11661 L
+.53484 .119 L
+Mistroke
+.53577 .12137 L
+.5367 .1237 L
+.53763 .12602 L
+.53856 .1283 L
+.53949 .13056 L
+.54042 .13279 L
+.54135 .13499 L
+.54228 .13717 L
+.54321 .13931 L
+.54413 .14143 L
+.54506 .14353 L
+.54599 .14559 L
+.54692 .14763 L
+.54785 .14963 L
+.54878 .15161 L
+.54971 .15357 L
+.55064 .15549 L
+.55157 .15738 L
+.5525 .15925 L
+.55343 .16108 L
+.55436 .16289 L
+.55528 .16467 L
+.55621 .16641 L
+.55714 .16813 L
+.55807 .16982 L
+.559 .17148 L
+.55993 .17311 L
+.56086 .17471 L
+.56179 .17628 L
+.56272 .17782 L
+.56365 .17933 L
+.56458 .18081 L
+.56551 .18226 L
+.56643 .18368 L
+.56736 .18507 L
+.56829 .18643 L
+.56922 .18776 L
+.57015 .18906 L
+.57108 .19032 L
+.57201 .19156 L
+.57294 .19277 L
+.57387 .19394 L
+.5748 .19509 L
+.57573 .1962 L
+.57666 .19729 L
+.57758 .19834 L
+.57851 .19936 L
+.57944 .20036 L
+.58037 .20132 L
+.5813 .20225 L
+Mistroke
+.58223 .20315 L
+.58316 .20401 L
+.58409 .20485 L
+.58502 .20566 L
+.58595 .20643 L
+.58688 .20718 L
+.5878 .20789 L
+.58873 .20858 L
+.58966 .20923 L
+.59059 .20985 L
+.59152 .21044 L
+.59245 .211 L
+.59338 .21153 L
+.59431 .21203 L
+.59524 .2125 L
+.59617 .21294 L
+.5971 .21335 L
+.59803 .21373 L
+.59895 .21407 L
+.59988 .21439 L
+.60081 .21468 L
+.60174 .21493 L
+.60267 .21516 L
+.6036 .21536 L
+.60453 .21552 L
+.60546 .21566 L
+.60639 .21577 L
+.60732 .21584 L
+.60825 .21589 L
+.60918 .21591 L
+.6101 .2159 L
+.61103 .21586 L
+.61196 .21579 L
+.61289 .21569 L
+.61382 .21556 L
+.61475 .2154 L
+.61568 .21522 L
+.61661 .215 L
+.61754 .21476 L
+.61847 .21449 L
+.6194 .21419 L
+.62033 .21386 L
+.62125 .2135 L
+.62218 .21312 L
+.62311 .2127 L
+.62404 .21226 L
+.62497 .2118 L
+.6259 .2113 L
+.62683 .21078 L
+.62776 .21023 L
+Mistroke
+.62869 .20965 L
+.62962 .20905 L
+.63055 .20842 L
+.63148 .20777 L
+.6324 .20708 L
+.63333 .20638 L
+.63426 .20564 L
+.63519 .20488 L
+.63612 .2041 L
+.63705 .20328 L
+.63798 .20245 L
+.63891 .20159 L
+.63984 .2007 L
+.64077 .19979 L
+.6417 .19885 L
+.64262 .19789 L
+.64355 .19691 L
+.64448 .1959 L
+.64541 .19487 L
+.64634 .19382 L
+.64727 .19274 L
+.6482 .19164 L
+.64913 .19051 L
+.65006 .18937 L
+.65099 .1882 L
+.65192 .187 L
+.65285 .18579 L
+.65377 .18456 L
+.6547 .1833 L
+.65563 .18202 L
+.65656 .18072 L
+.65749 .1794 L
+.65842 .17806 L
+.65935 .1767 L
+.66028 .17532 L
+.66121 .17392 L
+.66214 .1725 L
+.66307 .17106 L
+.664 .1696 L
+.66492 .16812 L
+.66585 .16662 L
+.66678 .1651 L
+.66771 .16357 L
+.66864 .16202 L
+.66957 .16045 L
+.6705 .15886 L
+.67143 .15726 L
+.67236 .15564 L
+.67329 .154 L
+.67422 .15235 L
+Mistroke
+.67515 .15068 L
+.67607 .14899 L
+.677 .14729 L
+.67793 .14557 L
+.67886 .14384 L
+.67979 .14209 L
+.68072 .14033 L
+.68165 .13855 L
+.68258 .13677 L
+.68351 .13496 L
+.68444 .13315 L
+.68537 .13132 L
+.6863 .12947 L
+.68722 .12762 L
+.68815 .12575 L
+.68908 .12387 L
+.69001 .12198 L
+.69094 .12008 L
+.69187 .11816 L
+.6928 .11624 L
+.69373 .1143 L
+.69466 .11236 L
+.69559 .1104 L
+.69652 .10844 L
+.69744 .10646 L
+.69837 .10448 L
+.6993 .10249 L
+.70023 .10048 L
+.70116 .09848 L
+.70209 .09646 L
+.70302 .09443 L
+.70395 .0924 L
+.70488 .09036 L
+.70581 .08831 L
+.70674 .08626 L
+.70767 .0842 L
+.70859 .08214 L
+.70952 .08007 L
+.71045 .07799 L
+.71138 .07591 L
+.71231 .07383 L
+.71324 .07174 L
+.71417 .06964 L
+.7151 .06754 L
+.71603 .06544 L
+.71696 .06334 L
+.71789 .06123 L
+.71882 .05912 L
+.71974 .05701 L
+.72067 .05489 L
+Mistroke
+.7216 .05278 L
+.72253 .05066 L
+.72346 .04854 L
+.72439 .04642 L
+.72532 .0443 L
+.72625 .04218 L
+.72718 .04006 L
+.72811 .03794 L
+.72904 .03582 L
+.72997 .0337 L
+.73089 .03158 L
+.73182 .02947 L
+.73275 .02735 L
+.73368 .02524 L
+.73461 .02313 L
+.73554 .02102 L
+.73647 .01892 L
+.7374 .01682 L
+.73833 .01472 L
+.73926 .0168 L
+.74019 .01889 L
+.74111 .02098 L
+.74204 .02306 L
+.74297 .02514 L
+.7439 .02721 L
+.74483 .02927 L
+.74576 .03133 L
+.74669 .03339 L
+.74762 .03543 L
+.74855 .03748 L
+.74948 .03951 L
+.75041 .04154 L
+.75134 .04356 L
+.75226 .04557 L
+.75319 .04757 L
+.75412 .04957 L
+.75505 .05156 L
+.75598 .05353 L
+.75691 .0555 L
+.75784 .05747 L
+.75877 .05942 L
+.7597 .06136 L
+.76063 .06329 L
+.76156 .06521 L
+.76249 .06712 L
+.76341 .06902 L
+.76434 .07091 L
+.76527 .07279 L
+.7662 .07466 L
+.76713 .07651 L
+Mistroke
+.76806 .07835 L
+.76899 .08018 L
+.76992 .082 L
+.77085 .08381 L
+.77178 .0856 L
+.77271 .08738 L
+.77364 .08915 L
+.77456 .0909 L
+.77549 .09264 L
+.77642 .09436 L
+.77735 .09607 L
+.77828 .09777 L
+.77921 .09945 L
+.78014 .10112 L
+.78107 .10277 L
+.782 .10441 L
+.78293 .10603 L
+.78386 .10763 L
+.78479 .10922 L
+.78571 .11079 L
+.78664 .11235 L
+.78757 .11389 L
+.7885 .11541 L
+.78943 .11692 L
+.79036 .11841 L
+.79129 .11988 L
+.79222 .12134 L
+.79315 .12277 L
+.79408 .12419 L
+.79501 .1256 L
+.79593 .12698 L
+.79686 .12834 L
+.79779 .12969 L
+.79872 .13102 L
+.79965 .13233 L
+.80058 .13362 L
+.80151 .13489 L
+.80244 .13614 L
+.80337 .13737 L
+.8043 .13858 L
+.80523 .13978 L
+.80616 .14095 L
+.80708 .1421 L
+.80801 .14324 L
+.80894 .14435 L
+.80987 .14544 L
+.8108 .14651 L
+.81173 .14756 L
+.81266 .14859 L
+.81359 .1496 L
+Mistroke
+.81452 .15059 L
+.81545 .15156 L
+.81638 .1525 L
+.81731 .15343 L
+.81823 .15433 L
+.81916 .15521 L
+.82009 .15607 L
+.82102 .15691 L
+.82195 .15773 L
+.82288 .15852 L
+.82381 .15929 L
+.82474 .16004 L
+.82567 .16077 L
+.8266 .16148 L
+.82753 .16216 L
+.82846 .16282 L
+.82938 .16346 L
+.83031 .16407 L
+.83124 .16467 L
+.83217 .16524 L
+.8331 .16578 L
+.83403 .16631 L
+.83496 .16681 L
+.83589 .16729 L
+.83682 .16775 L
+.83775 .16818 L
+.83868 .16859 L
+.83961 .16898 L
+.84053 .16934 L
+.84146 .16968 L
+.84239 .17 L
+.84332 .17029 L
+.84425 .17057 L
+.84518 .17081 L
+.84611 .17104 L
+.84704 .17124 L
+.84797 .17142 L
+.8489 .17157 L
+.84983 .17171 L
+.85075 .17181 L
+.85168 .1719 L
+.85261 .17196 L
+.85354 .172 L
+.85447 .17202 L
+.8554 .17201 L
+.85633 .17198 L
+.85726 .17193 L
+.85819 .17185 L
+.85912 .17175 L
+.86005 .17163 L
+Mistroke
+.86098 .17148 L
+.8619 .17131 L
+.86283 .17112 L
+.86376 .17091 L
+.86469 .17067 L
+.86562 .17041 L
+.86655 .17012 L
+.86748 .16982 L
+.86841 .16949 L
+.86934 .16914 L
+.87027 .16877 L
+.8712 .16837 L
+.87213 .16795 L
+.87305 .16751 L
+.87398 .16705 L
+.87491 .16656 L
+.87584 .16606 L
+.87677 .16553 L
+.8777 .16498 L
+.87863 .16441 L
+.87956 .16381 L
+.88049 .1632 L
+.88142 .16256 L
+.88235 .1619 L
+.88328 .16122 L
+.8842 .16052 L
+.88513 .1598 L
+.88606 .15906 L
+.88699 .15829 L
+.88792 .15751 L
+.88885 .1567 L
+.88978 .15588 L
+.89071 .15503 L
+.89164 .15417 L
+.89257 .15328 L
+.8935 .15237 L
+.89443 .15145 L
+.89535 .1505 L
+.89628 .14954 L
+.89721 .14856 L
+.89814 .14755 L
+.89907 .14653 L
+.9 .14549 L
+.90093 .14443 L
+.90186 .14335 L
+.90279 .14225 L
+.90372 .14114 L
+.90465 .14001 L
+.90557 .13885 L
+.9065 .13769 L
+Mistroke
+.90743 .1365 L
+.90836 .1353 L
+.90929 .13408 L
+.91022 .13284 L
+.91115 .13158 L
+.91208 .13031 L
+.91301 .12902 L
+.91394 .12772 L
+.91487 .1264 L
+.9158 .12506 L
+.91672 .12371 L
+.91765 .12234 L
+.91858 .12096 L
+.91951 .11956 L
+.92044 .11815 L
+.92137 .11672 L
+.9223 .11528 L
+.92323 .11382 L
+.92416 .11235 L
+.92509 .11087 L
+.92602 .10937 L
+.92695 .10786 L
+.92787 .10633 L
+.9288 .1048 L
+.92973 .10325 L
+.93066 .10168 L
+.93159 .10011 L
+.93252 .09852 L
+.93345 .09692 L
+.93438 .09531 L
+.93531 .09369 L
+.93624 .09206 L
+.93717 .09041 L
+.9381 .08876 L
+.93902 .08709 L
+.93995 .08541 L
+.94088 .08373 L
+.94181 .08203 L
+.94274 .08033 L
+.94367 .07861 L
+.9446 .07689 L
+.94553 .07516 L
+.94646 .07342 L
+.94739 .07167 L
+.94832 .06991 L
+.94925 .06814 L
+.95017 .06637 L
+.9511 .06459 L
+.95203 .06281 L
+.95296 .06101 L
+Mistroke
+.95389 .05921 L
+.95482 .0574 L
+.95575 .05559 L
+.95668 .05377 L
+.95761 .05195 L
+.95854 .05012 L
+.95947 .04829 L
+.96039 .04645 L
+.96132 .0446 L
+.96225 .04276 L
+.96318 .04091 L
+.96411 .03905 L
+.96504 .03719 L
+.96597 .03533 L
+.9669 .03346 L
+.96783 .0316 L
+.96876 .02973 L
+.96969 .02786 L
+.97062 .02598 L
+.97154 .02411 L
+.97247 .02223 L
+.9734 .02035 L
+.97433 .01847 L
+.97526 .01659 L
+.97619 .01472 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk
+0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo000L0?ooo`030000003oool0oooo0?l0
+ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`004`3oool3000000H0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo1 at 00
+002V0?ooo`030000003oool0oooo0540oooo0P00001C0?ooo`800000203oool00180oooo00D00000
+0?ooo`3oool0oooo000000050?ooo`040000003oool0oooo0?ooo`<00000X`3oool2000005<0oooo
+0P00001C0?ooo`030000003oool0oooo00L0oooo000B0?ooo`050000003oool0oooo0?ooo`000000
+1 at 3oool00`000000oooo0?ooo`030?ooo`800000XP3oool2000005<0oooo00<000000?ooo`000000
+D at 3oool2000000T0oooo000C0?ooo`<000001P3oool00`000000oooo0?ooo`050?ooo`800000X03o
+ool00`000000oooo0000001A0?ooo`040000003oool0oooo00000540oooo00<000000?ooo`3oool0
+203oool001`0oooo00<000000?ooo`3oool01P3oool2000009h0oooo00 at 000000?ooo`3oool00000
+D at 3oool01@000000oooo0?ooo`3oool0000004l0oooo0P00000:0?ooo`00703oool2000000P0oooo
+0P00002M0?ooo`040000003oool0oooo00000500oooo00<000000?ooo`3oool00P3oool00`000000
+oooo0?ooo`1=0?ooo`030000003oool0oooo00T0oooo000L0?ooo`030000003oool0oooo00P0oooo
+00<000000?ooo`3oool0V`3oool01 at 000000oooo0?ooo`3oool0000004l0oooo00<000000?ooo`3o
+ool00P3oool2000004d0oooo0P00000;0?ooo`00703oool00`000000oooo0?ooo`090?ooo`030000
+003oool0oooo09X0oooo00D000000?ooo`3oool0oooo0000001>0?ooo`030000003oool0oooo00 at 0
+oooo00<000000?ooo`3oool0B`3oool00`000000oooo0?ooo`0:0?ooo`00703oool00`000000oooo
+0?ooo`0:0?ooo`030000003oool0oooo09P0oooo00<000000?ooo`3oool00P3oool00`000000oooo
+0?ooo`1<0?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0BP3oool2000000`0oooo
+000L0?ooo`030000003oool0oooo00X0oooo0P00002I0?ooo`030000003oool0oooo0080oooo00<0
+00000?ooo`3oool0B`3oool2000000L0oooo00<000000?ooo`3oool0B at 3oool00`000000oooo0?oo
+o`0;0?ooo`00703oool00`000000oooo0?ooo`0;0?ooo`030000003oool0oooo09L0oooo00<00000
+0?ooo`3oool00`3oool00`000000oooo0?ooo`1:0?ooo`030000003oool0oooo00H0oooo00<00000
+0?ooo`3oool0B03oool2000000d0oooo000L0?ooo`8000003 at 3oool00`000000oooo0?ooo`2E0?oo
+o`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0BP3oool00`000000oooo0?ooo`070?oo
+o`030000003oool0oooo04L0oooo00<000000?ooo`3oool0303oool001`0oooo00<000000?ooo`3o
+ool0303oool2000009H0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`190?ooo`03
+0000003oool0oooo00P0oooo00<000000?ooo`3oool0AP3oool2000000h0oooo000L0?ooo`030000
+003oool0oooo00d0oooo00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`050?ooo`030000
+003oool0oooo04P0oooo00<000000?ooo`3oool02 at 3oool00`000000oooo0?ooo`150?ooo`030000
+003oool0oooo00d0oooo000L0?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0T`3o
+ool00`000000oooo0?ooo`050?ooo`030000003oool0oooo04L0oooo00<000000?ooo`3oool02P3o
+ool00`000000oooo0?ooo`140?ooo`8000003`3oool001`0oooo00<000000?ooo`3oool03P3oool2
+000009<0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`170?ooo`030000003oool0
+oooo00/0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`0>0?ooo`00703oool00`00
+0000oooo0?ooo`0?0?ooo`030000003oool0oooo0940oooo00<000000?ooo`3oool01`3oool00`00
+0000oooo0?ooo`150?ooo`8000003 at 3oool00`000000oooo0?ooo`120?ooo`800000403oool001`0
+oooo0P00000 at 0?ooo`800000TP3oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo04D0
+oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`110?ooo`030000003oool0oooo00l0
+oooo000L0?ooo`030000003oool0oooo0100oooo00<000000?ooo`3oool0T03oool00`000000oooo
+0?ooo`070?ooo`030000003oool0oooo04D0oooo00<000000?ooo`3oool03 at 3oool00`000000oooo
+0?ooo`100?ooo`030000003oool0oooo0100oooo000L0?ooo`030000003oool0oooo0100oooo0P00
+002 at 0?ooo`030000003oool0oooo00T0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?oo
+o`0?0?ooo`030000003oool0oooo03l0oooo00<000000?ooo`3oool0403oool001`0oooo00<00000
+0?ooo`3oool04 at 3oool00`000000oooo0?ooo`2>0?ooo`030000003oool0oooo00T0oooo00<00000
+0?ooo`3oool0@`3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo03h0oooo00<00000
+0?ooo`3oool04 at 3oool001`0oooo00<000000?ooo`3oool04 at 3oool2000008l0oooo00<000000?oo
+o`3oool02 at 3oool00`000000oooo0?ooo`120?ooo`030000003oool0oooo0140oooo00<000000?oo
+o`3oool0?@3oool00`000000oooo0?ooo`0A0?ooo`00703oool00`000000oooo0?ooo`0B0?ooo`03
+0000003oool0oooo08`0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`110?ooo`03
+0000003oool0oooo0140oooo00<000000?ooo`3oool0?03oool00`000000oooo0?ooo`0B0?ooo`00
+703oool2000001<0oooo0P00002=0?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool0
+ at 03oool00`000000oooo0?ooo`0C0?ooo`030000003oool0oooo03/0oooo00<000000?ooo`3oool0
+4P3oool001`0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`2;0?ooo`030000003o
+ool0oooo00/0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`0C0?ooo`030000003o
+ool0oooo03X0oooo00<000000?ooo`3oool04`3oool001`0oooo00<000000?ooo`3oool04`3oool0
+0`000000oooo0?ooo`2;0?ooo`030000003oool0oooo00`0oooo00<000000?ooo`3oool0?P3oool2
+000001H0oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`0C0?ooo`00103oool30000
+00<0oooo00<000000?ooo`3oool00`0000030?ooo`<000001P3oool00`000000oooo0?ooo`0D0?oo
+o`030000003oool0oooo08T0oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`0n0?oo
+o`030000003oool0oooo01D0oooo00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`0D0?oo
+o`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00L000000?ooo`3oool0oooo0000003o
+ool0000000<0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`0D0?ooo`030000003o
+ool0oooo08T0oooo00<000000?ooo`3oool03 at 3oool00`000000oooo0?ooo`0m0?ooo`800000603o
+ool00`000000oooo0?ooo`0f0?ooo`8000005P3oool000<0oooo00D000000?ooo`3oool0oooo0000
+00040?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`030?ooo`<00000
+5 at 3oool00`000000oooo0?ooo`280?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0
+?03oool00`000000oooo0?ooo`0G0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool0
+5 at 3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`070000003oool0oooo0?ooo`00
+0000oooo000000030?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool05 at 3oool00`00
+0000oooo0?ooo`280?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0?03oool00`00
+0000oooo0?ooo`0H0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool05P3oool000<0
+oooo00D000000?ooo`3oool0oooo000000040?ooo`060000003oool0oooo0?ooo`000000oooo1000
+00060?ooo`030000003oool0oooo01H0oooo00<000000?ooo`3oool0QP3oool00`000000oooo0?oo
+o`0?0?ooo`030000003oool0oooo03/0oooo00<000000?ooo`3oool06 at 3oool00`000000oooo0?oo
+o`0d0?ooo`030000003oool0oooo01H0oooo00030?ooo`050000003oool0oooo0?ooo`000000103o
+ool01 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool01P3oool00`000000oooo
+0?ooo`0F0?ooo`030000003oool0oooo08H0oooo00<000000?ooo`3oool0403oool00`000000oooo
+0?ooo`0j0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0<P3oool00`000000oooo
+0?ooo`0G0?ooo`00103oool3000000H0oooo0`0000030?ooo`@000001 at 3oool00`000000oooo0?oo
+o`0F0?ooo`030000003oool0oooo08H0oooo00<000000?ooo`3oool0403oool00`000000oooo0?oo
+o`0i0?ooo`030000003oool0oooo01/0oooo0P00000c0?ooo`030000003oool0oooo01L0oooo000L
+0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0Q at 3oool00`000000oooo0?ooo`0@
+0?ooo`800000>P3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo0300oooo00<00000
+0?ooo`3oool0603oool001`0oooo0P00000H0?ooo`030000003oool0oooo08 at 0oooo00<000000?oo
+o`3oool04P3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo01h0oooo00<000000?oo
+o`3oool0;`3oool00`000000oooo0?ooo`0H0?ooo`00703oool00`000000oooo0?ooo`0H0?ooo`03
+0000003oool0oooo08<0oooo00<000000?ooo`3oool04P3oool00`000000oooo0?ooo`0g0?ooo`03
+0000003oool0oooo01h0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`0I0?ooo`00
+703oool00`000000oooo0?ooo`0H0?ooo`030000003oool0oooo08<0oooo00<000000?ooo`3oool0
+4`3oool00`000000oooo0?ooo`0e0?ooo`030000003oool0oooo0200oooo00<000000?ooo`3oool0
+;03oool2000001/0oooo000L0?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool0P`3o
+ool00`000000oooo0?ooo`0C0?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool0803o
+ool2000002d0oooo00<000000?ooo`3oool06P3oool001`0oooo00<000000?ooo`3oool06 at 3oool0
+0`000000oooo0?ooo`210?ooo`030000003oool0oooo01 at 0oooo00<000000?ooo`3oool0=03oool0
+0`000000oooo0?ooo`0R0?ooo`030000003oool0oooo02X0oooo00<000000?ooo`3oool06`3oool0
+01`0oooo00<000000?ooo`3oool06 at 3oool00`000000oooo0?ooo`210?ooo`030000003oool0oooo
+01D0oooo00<000000?ooo`3oool0<`3oool00`000000oooo0?ooo`0S0?ooo`030000003oool0oooo
+02P0oooo0P00000M0?ooo`00703oool2000001/0oooo00<000000?ooo`3oool0P03oool00`000000
+oooo0?ooo`0E0?ooo`030000003oool0oooo0380oooo00<000000?ooo`3oool0903oool2000002T0
+oooo00<000000?ooo`3oool0703oool001`0oooo00<000000?ooo`3oool06P3oool00`000000oooo
+0?ooo`1o0?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0<@3oool00`000000oooo
+0?ooo`0U0?ooo`030000003oool0oooo02H0oooo00<000000?ooo`3oool07 at 3oool001`0oooo00<0
+00000?ooo`3oool06P3oool00`000000oooo0?ooo`1o0?ooo`030000003oool0oooo01L0oooo00<0
+00000?ooo`3oool0<03oool00`000000oooo0?ooo`0W0?ooo`030000003oool0oooo02 at 0oooo00<0
+00000?ooo`3oool07P3oool001`0oooo00<000000?ooo`3oool06`3oool00`000000oooo0?ooo`1n
+0?ooo`030000003oool0oooo01L0oooo0P00000a0?ooo`030000003oool0oooo02L0oooo0P00000T
+0?ooo`800000803oool001`0oooo00<000000?ooo`3oool06`3oool00`000000oooo0?ooo`1n0?oo
+o`030000003oool0oooo01P0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`0Y0?oo
+o`8000008P3oool200000240oooo000L0?ooo`800000703oool00`000000oooo0?ooo`1m0?ooo`03
+0000003oool0oooo01T0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`0Z0?ooo`03
+0000003oool0oooo0200oooo00<000000?ooo`3oool0803oool001`0oooo00<000000?ooo`3oool0
+703oool00`000000oooo0?ooo`1l0?ooo`030000003oool0oooo01X0oooo00<000000?ooo`3oool0
+;03oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo01h0oooo00<000000?ooo`3oool0
+8 at 3oool001`0oooo00<000000?ooo`3oool0703oool00`000000oooo0?ooo`1l0?ooo`030000003o
+ool0oooo01X0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`0]0?ooo`030000003o
+ool0oooo01`0oooo00<000000?ooo`3oool08P3oool001`0oooo00<000000?ooo`3oool0703oool2
+000007d0oooo00<000000?ooo`3oool06`3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0
+oooo02h0oooo0P00000L0?ooo`800000903oool001`0oooo00<000000?ooo`3oool07 at 3oool00`00
+0000oooo0?ooo`1j0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0:@3oool20000
+0340oooo0P00000J0?ooo`8000009 at 3oool001`0oooo00<000000?ooo`3oool07 at 3oool00`000000
+oooo0?ooo`1j0?ooo`030000003oool0oooo01d0oooo00<000000?ooo`3oool0:03oool00`000000
+oooo0?ooo`0a0?ooo`800000603oool2000002H0oooo000L0?ooo`8000007`3oool00`000000oooo
+0?ooo`1i0?ooo`030000003oool0oooo01d0oooo00<000000?ooo`3oool09`3oool2000003 at 0oooo
+0P00000F0?ooo`030000003oool0oooo02H0oooo000L0?ooo`030000003oool0oooo01h0oooo00<0
+00000?ooo`3oool0N at 3oool00`000000oooo0?ooo`0N0?ooo`030000003oool0oooo02H0oooo00<0
+00000?ooo`3oool0=@3oool200000180oooo0P00000Y0?ooo`00703oool00`000000oooo0?ooo`0N
+0?ooo`030000003oool0oooo07P0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`0U
+0?ooo`030000003oool0oooo03L0oooo0P00000 at 0?ooo`800000:P3oool000X0oooo0`0000030?oo
+o`030000003oool0oooo0080oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0O0?oo
+o`030000003oool0oooo07L0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`0U0?oo
+o`030000003oool0oooo03P0oooo0`00000<0?ooo`800000;03oool000T0oooo00D000000?ooo`3o
+ool0oooo000000070?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool07`3oool00`00
+0000oooo0?ooo`1g0?ooo`030000003oool0oooo0200oooo00<000000?ooo`3oool08`3oool00`00
+0000oooo0?ooo`0k0?ooo`@000001P3oool3000002h0oooo00090?ooo`050000003oool0oooo0?oo
+o`0000001`3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo01l0oooo00<000000?oo
+o`3oool0M`3oool00`000000oooo0?ooo`0P0?ooo`8000008`3oool200000400oooo2000000`0?oo
+o`002 at 3oool01@000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0103oool30000
+0200oooo00<000000?ooo`3oool0M at 3oool00`000000oooo0?ooo`0R0?ooo`030000003oool0oooo
+0240oooo00<000000?ooo`3oool0M`3oool000T0oooo00D000000?ooo`3oool0oooo000000050?oo
+o`030000003oool0000000H0oooo00<000000?ooo`3oool0803oool00`000000oooo0?ooo`1e0?oo
+o`030000003oool0oooo02<0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`1h0?oo
+o`002 at 3oool01@000000oooo0?ooo`3oool0000000H0oooo0P0000060?ooo`030000003oool0oooo
+0200oooo00<000000?ooo`3oool0M at 3oool00`000000oooo0?ooo`0S0?ooo`030000003oool0oooo
+01h0oooo0P00001j0?ooo`002P3oool3000000P0oooo00<000000?ooo`3oool0103oool00`000000
+oooo0?ooo`0Q0?ooo`030000003oool0oooo07 at 0oooo00<000000?ooo`3oool0903oool00`000000
+oooo0?ooo`0L0?ooo`800000N`3oool001`0oooo00<000000?ooo`3oool08 at 3oool00`000000oooo
+0?ooo`1c0?ooo`030000003oool0oooo02D0oooo0P00000M0?ooo`030000003oool0oooo07X0oooo
+000L0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0L`3oool00`000000oooo0?oo
+o`0V0?ooo`8000006`3oool00`000000oooo0?ooo`1k0?ooo`00703oool2000002<0oooo00<00000
+0?ooo`3oool0LP3oool00`000000oooo0?ooo`0W0?ooo`030000003oool0oooo01P0oooo0P00001m
+0?ooo`00703oool00`000000oooo0?ooo`0R0?ooo`030000003oool0oooo0780oooo00<000000?oo
+o`3oool0:03oool00`000000oooo0?ooo`0F0?ooo`800000OP3oool001`0oooo00<000000?ooo`3o
+ool08P3oool00`000000oooo0?ooo`1a0?ooo`030000003oool0oooo02T0oooo0P00000F0?ooo`80
+0000O`3oool001`0oooo00<000000?ooo`3oool08P3oool00`000000oooo0?ooo`1a0?ooo`030000
+003oool0oooo02X0oooo0P00000D0?ooo`800000P03oool001`0oooo00<000000?ooo`3oool08`3o
+ool00`000000oooo0?ooo`1`0?ooo`030000003oool0oooo02/0oooo0P00000B0?ooo`800000P at 3o
+ool001`0oooo0P00000T0?ooo`030000003oool0oooo0700oooo00<000000?ooo`3oool0;03oool2
+00000100oooo0P0000220?ooo`00703oool00`000000oooo0?ooo`0S0?ooo`030000003oool0oooo
+06l0oooo00<000000?ooo`3oool0;P3oool3000000`0oooo0P0000240?ooo`00703oool00`000000
+oooo0?ooo`0T0?ooo`030000003oool0oooo06h0oooo00<000000?ooo`3oool0<03oool2000000T0
+oooo0`0000250?ooo`00703oool00`000000oooo0?ooo`0T0?ooo`030000003oool0oooo06h0oooo
+00<000000?ooo`3oool0<P3oool3000000<0oooo100000270?ooo`00703oool00`000000oooo0?oo
+o`0T0?ooo`030000003oool0oooo06h0oooo00<000000?ooo`3oool0=@3oool4000008X0oooo000L
+0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool0K03oool00`000000oooo0?ooo`34
+0?ooo`00703oool2000002H0oooo00<000000?ooo`3oool0K03oool00`000000oooo0?ooo`340?oo
+o`00703oool00`000000oooo0?ooo`0U0?ooo`030000003oool0oooo06`0oooo00<000000?ooo`3o
+ool0a03oool001`0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`1[0?ooo`030000
+003oool0oooo0<@0oooo000L0?ooo`030000003oool0oooo02H0oooo00<000000?ooo`3oool0JP3o
+ool00`000000oooo0?ooo`350?ooo`00703oool00`000000oooo0?ooo`0V0?ooo`030000003oool0
+oooo06X0oooo00<000000?ooo`3oool0a at 3oool001`0oooo00<000000?ooo`3oool09`3oool00`00
+0000oooo0?ooo`1Y0?ooo`030000003oool0oooo0<D0oooo000L0?ooo`800000:03oool00`000000
+oooo0?ooo`1Y0?ooo`030000003oool0oooo0<D0oooo000L0?ooo`030000003oool0oooo02L0oooo
+00<000000?ooo`3oool0J03oool00`000000oooo0?ooo`360?ooo`00703oool00`000000oooo0?oo
+o`0W0?ooo`030000003oool0oooo06P0oooo00<000000?ooo`3oool0aP3oool000 at 0oooo0`000003
+0?ooo`030000003oool0oooo0080oooo00 at 000000?ooo`3oool0oooo0`0000060?ooo`030000003o
+ool0oooo02P0oooo00<000000?ooo`3oool0I`3oool00`000000oooo0?ooo`360?ooo`000`3oool0
+1 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo
+0?ooo`030?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0I`3oool00`000000oooo
+0?ooo`360?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0
+103oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0
+IP3oool00`000000oooo0?ooo`370?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo
+00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`030?ooo`<00000:@3oool00`000000
+oooo0?ooo`1U0?ooo`030000003oool0oooo0<L0oooo00030?ooo`050000003oool0oooo0?ooo`00
+00001 at 3oool00`000000oooo000000020?ooo`@000001P3oool00`000000oooo0?ooo`0Y0?ooo`03
+0000003oool0oooo06D0oooo00<000000?ooo`3oool0a`3oool000<0oooo00D000000?ooo`3oool0
+oooo000000060?ooo`8000000`3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo02T0
+oooo00<000000?ooo`3oool0I at 3oool00`000000oooo0?ooo`370?ooo`00103oool3000000P0oooo
+00 at 000000?ooo`3oool0oooo100000050?ooo`030000003oool0oooo02X0oooo00<000000?ooo`3o
+ool0H`3oool00`000000oooo0?ooo`380?ooo`00703oool00`000000oooo0?ooo`0Z0?ooo`030000
+003oool0oooo06<0oooo00<000000?ooo`3oool0b03oool001`0oooo0P00000[0?ooo`030000003o
+ool0oooo06<0oooo00<000000?ooo`3oool0b03oool001`0oooo00<000000?ooo`3oool0:P3oool0
+0`000000oooo0?ooo`1S0?ooo`030000003oool0oooo0<P0oooo000L0?ooo`030000003oool0oooo
+02/0oooo00<000000?ooo`3oool0H at 3oool00`000000oooo0?ooo`390?ooo`00703oool00`000000
+oooo0?ooo`0[0?ooo`030000003oool0oooo0640oooo00<000000?ooo`3oool0b at 3oool001`0oooo
+00<000000?ooo`3oool0:`3oool00`000000oooo0?ooo`1Q0?ooo`030000003oool0oooo0<T0oooo
+000L0?ooo`030000003oool0oooo02`0oooo00<000000?ooo`3oool0H03oool00`000000oooo0?oo
+o`390?ooo`00703oool2000002d0oooo00<000000?ooo`3oool0G`3oool00`000000oooo0?ooo`3:
+0?ooo`00703oool00`000000oooo0?ooo`0/0?ooo`030000003oool0oooo05l0oooo00<000000?oo
+o`3oool0bP3oool001`0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`1O0?ooo`03
+0000003oool0oooo0<X0oooo000L0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3oool0
+GP3oool00`000000oooo0?ooo`3:0?ooo`00703oool00`000000oooo0?ooo`0]0?ooo`030000003o
+ool0oooo05d0oooo00<000000?ooo`3oool0b`3oool001`0oooo00<000000?ooo`3oool0;@3oool0
+0`000000oooo0?ooo`1M0?ooo`030000003oool0oooo0</0oooo000L0?ooo`800000;`3oool00`00
+0000oooo0?ooo`1L0?ooo`030000003oool0oooo0</0oooo000L0?ooo`030000003oool0oooo02h0
+oooo00<000000?ooo`3oool0G03oool00`000000oooo0?ooo`3;0?ooo`00703oool00`000000oooo
+0?ooo`0^0?ooo`030000003oool0oooo05/0oooo00<000000?ooo`3oool0c03oool001`0oooo00<0
+00000?ooo`3oool0;`3oool00`000000oooo0?ooo`1J0?ooo`030000003oool0oooo0<`0oooo000L
+0?ooo`030000003oool0oooo02l0oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?ooo`3<
+0?ooo`00703oool200000300oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?ooo`3<0?oo
+o`00703oool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo05T0oooo00<000000?ooo`3o
+ool0c at 3oool001`0oooo00<000000?ooo`3oool0<03oool00`000000oooo0?ooo`1H0?ooo`030000
+003oool0oooo0<d0oooo000L0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3oool0F03o
+ool00`000000oooo0?ooo`3=0?ooo`002P3oool3000000<0oooo00<000000?ooo`00000010000005
+0?ooo`030000003oool0oooo0300oooo00<000000?ooo`3oool0F03oool00`000000oooo0?ooo`3=
+0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool01P3oool0
+0`000000oooo0?ooo`0a0?ooo`030000003oool0oooo05H0oooo00<000000?ooo`3oool0cP3oool0
+00T0oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0oooo00D0oooo0`00000a
+0?ooo`030000003oool0oooo05H0oooo00<000000?ooo`3oool0cP3oool000T0oooo00D000000?oo
+o`3oool0oooo000000070?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0<@3oool0
+0`000000oooo0?ooo`1F0?ooo`030000003oool0oooo0<h0oooo00090?ooo`050000003oool0oooo
+0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0380oooo00<00000
+0?ooo`3oool0E at 3oool00`000000oooo0?ooo`3>0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0
+000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0380oooo00<0
+00000?ooo`3oool0E03oool00`000000oooo0?ooo`3?0?ooo`002P3oool3000000H0oooo0`000006
+0?ooo`030000003oool0oooo0380oooo00<000000?ooo`3oool0E03oool00`000000oooo0?ooo`3?
+0?ooo`00703oool00`000000oooo0?ooo`0b0?ooo`030000003oool0oooo05 at 0oooo00<000000?oo
+o`3oool0c`3oool001`0oooo0P00000d0?ooo`030000003oool0oooo0580oooo00<000000?ooo`3o
+ool0d03oool001`0oooo00<000000?ooo`3oool0<`3oool00`000000oooo0?ooo`1B0?ooo`030000
+003oool0oooo0=00oooo000L0?ooo`030000003oool0oooo03<0oooo00<000000?ooo`3oool0DP3o
+ool00`000000oooo0?ooo`3 at 0?ooo`00703oool00`000000oooo0?ooo`0d0?ooo`030000003oool0
+oooo0540oooo00<000000?ooo`3oool0d03oool001`0oooo00<000000?ooo`3oool0=03oool00`00
+0000oooo0?ooo`1 at 0?ooo`030000003oool0oooo0=40oooo000L0?ooo`030000003oool0oooo03 at 0
+oooo00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`3A0?ooo`00703oool2000003H0oooo
+00<000000?ooo`3oool0C`3oool00`000000oooo0?ooo`3A0?ooo`00703oool00`000000oooo0?oo
+o`0e0?ooo`030000003oool0oooo04l0oooo00<000000?ooo`3oool0d at 3oool001`0oooo00<00000
+0?ooo`3oool0=@3oool00`000000oooo0?ooo`1>0?ooo`030000003oool0oooo0=80oooo000L0?oo
+o`030000003oool0oooo03D0oooo00<000000?ooo`3oool0CP3oool00`000000oooo0?ooo`3B0?oo
+o`00703oool00`000000oooo0?ooo`0f0?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3o
+ool0dP3oool001`0oooo0P00000g0?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3oool0
+dP3oool001`0oooo00<000000?ooo`3oool0=P3oool00`000000oooo0?ooo`1<0?ooo`030000003o
+ool0oooo0=<0oooo000L0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool0C03oool0
+0`000000oooo0?ooo`3C0?ooo`00703oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo
+04/0oooo00<000000?ooo`3oool0d`3oool001`0oooo00<000000?ooo`3oool0=`3oool00`000000
+oooo0?ooo`1:0?ooo`030000003oool0oooo0=@0oooo000L0?ooo`030000003oool0oooo03L0oooo
+00<000000?ooo`3oool0BP3oool00`000000oooo0?ooo`3D0?ooo`00703oool2000003T0oooo00<0
+00000?ooo`3oool0B at 3oool00`000000oooo0?ooo`3D0?ooo`00703oool00`000000oooo0?ooo`0h
+0?ooo`030000003oool0oooo04T0oooo00<000000?ooo`3oool0e03oool001`0oooo00<000000?oo
+o`3oool0>03oool00`000000oooo0?ooo`180?ooo`030000003oool0oooo0=D0oooo00040?ooo`<0
+00000`3oool00`000000oooo0000000400000080oooo0`0000060?ooo`030000003oool0oooo03P0
+oooo00<000000?ooo`3oool0B03oool00`000000oooo0?ooo`3E0?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000D0oooo00<000000?ooo`3oool00P3oool01 at 000000oooo0?ooo`3oool00000
+00D0oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`170?ooo`030000003oool0oooo
+0=D0oooo00030?ooo`050000003oool0oooo0?ooo`0000001P3oool00`000000oooo0?ooo`050?oo
+o`030000003oool0oooo00<0oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`160?oo
+o`030000003oool0oooo0=H0oooo00030?ooo`050000003oool0oooo0?ooo`0000001`3oool01000
+0000oooo0?ooo`0000030?ooo`030000003oool0oooo00<0oooo0`00000i0?ooo`030000003oool0
+oooo04H0oooo00<000000?ooo`3oool0eP3oool000<0oooo00D000000?ooo`3oool0oooo00000008
+0?ooo`030000003oool0000000<000001P3oool00`000000oooo0?ooo`0j0?ooo`030000003oool0
+oooo04D0oooo00<000000?ooo`3oool0eP3oool000<0oooo00D000000?ooo`3oool0oooo00000004
+0?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`060?ooo`030000003o
+ool0oooo03X0oooo00<000000?ooo`3oool0A at 3oool00`000000oooo0?ooo`3F0?ooo`00103oool3
+000000H0oooo0`0000030?ooo`@000001 at 3oool00`000000oooo0?ooo`0j0?ooo`030000003oool0
+oooo04 at 0oooo00<000000?ooo`3oool0e`3oool001`0oooo00<000000?ooo`3oool0>`3oool00`00
+0000oooo0?ooo`130?ooo`030000003oool0oooo0=L0oooo000L0?ooo`030000003oool0oooo03/0
+oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`3G0?ooo`00703oool2000003`0oooo
+00<000000?ooo`3oool0 at P3oool00`000000oooo0?ooo`3H0?ooo`00703oool00`000000oooo0?oo
+o`0l0?ooo`030000003oool0oooo0440oooo00<000000?ooo`3oool0f03oool001`0oooo00<00000
+0?ooo`3oool0?03oool00`000000oooo0?ooo`110?ooo`030000003oool0oooo0=P0oooo000L0?oo
+o`030000003oool0oooo03`0oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`3I0?oo
+o`00703oool00`000000oooo0?ooo`0m0?ooo`030000003oool0oooo03l0oooo00<000000?ooo`3o
+ool0f at 3oool001`0oooo0P00000n0?ooo`030000003oool0oooo03l0oooo00<000000?ooo`3oool0
+f at 3oool001`0oooo00<000000?ooo`3oool0?@3oool00`000000oooo0?ooo`0o0?ooo`030000003o
+ool0oooo0=T0oooo000L0?ooo`030000003oool0oooo03h0oooo00<000000?ooo`3oool0?@3oool0
+0`000000oooo0?ooo`3J0?ooo`00703oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo
+03d0oooo00<000000?ooo`3oool0fP3oool001`0oooo00<000000?ooo`3oool0?P3oool00`000000
+oooo0?ooo`0m0?ooo`030000003oool0oooo0=X0oooo000L0?ooo`030000003oool0oooo03l0oooo
+00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`3K0?ooo`00703oool200000400oooo00<0
+00000?ooo`3oool0>`3oool00`000000oooo0?ooo`3K0?ooo`00703oool00`000000oooo0?ooo`0o
+0?ooo`030000003oool0oooo03/0oooo00<000000?ooo`3oool0f`3oool001`0oooo00<000000?oo
+o`3oool0 at 03oool00`000000oooo0?ooo`0i0?ooo`030000003oool0oooo0=`0oooo000L0?ooo`03
+0000003oool0oooo0400oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`3L0?ooo`00
+703oool00`000000oooo0?ooo`100?ooo`030000003oool0oooo03T0oooo00<000000?ooo`3oool0
+g03oool001`0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0g0?ooo`030000003o
+ool0oooo0=d0oooo000L0?ooo`800000 at P3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0
+oooo0=d0oooo000L0?ooo`030000003oool0oooo0440oooo00<000000?ooo`3oool0=`3oool00`00
+0000oooo0?ooo`3M0?ooo`00703oool00`000000oooo0?ooo`120?ooo`030000003oool0oooo03D0
+oooo00<000000?ooo`3oool0gP3oool000X0oooo0`0000030?ooo`030000003oool0oooo00<00000
+1P3oool00`000000oooo0?ooo`120?ooo`030000003oool0oooo03D0oooo00<000000?ooo`3oool0
+gP3oool000T0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`00
+00001 at 3oool00`000000oooo0?ooo`130?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3o
+ool0gP3oool000T0oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool0oooo00<0
+oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`0c0?ooo`030000003oool0oooo0=l0
+oooo00090?ooo`050000003oool0oooo0?ooo`0000001P3oool2000000H0oooo0`0000130?ooo`03
+0000003oool0oooo03<0oooo00<000000?ooo`3oool0g`3oool000T0oooo00D000000?ooo`3oool0
+oooo000000080?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0A03oool00`000000
+oooo0?ooo`0a0?ooo`800000h at 3oool000T0oooo00D000000?ooo`3oool0oooo000000040?ooo`05
+0000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo
+0340oooo00<000000?ooo`3oool0h03oool000X0oooo0`0000060?ooo`<000001P3oool00`000000
+oooo0?ooo`140?ooo`800000<P3oool00`000000oooo0?ooo`3P0?ooo`00703oool00`000000oooo
+0?ooo`150?ooo`030000003oool0oooo02l0oooo00<000000?ooo`3oool0h at 3oool001`0oooo0P00
+00160?ooo`030000003oool0oooo02l0oooo00<000000?ooo`3oool0h at 3oool001`0oooo00<00000
+0?ooo`3oool0AP3oool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo0>40oooo000L0?oo
+o`030000003oool0oooo04H0oooo00<000000?ooo`3oool0;@3oool00`000000oooo0?ooo`3R0?oo
+o`00703oool00`000000oooo0?ooo`160?ooo`800000;P3oool00`000000oooo0?ooo`3R0?ooo`00
+703oool00`000000oooo0?ooo`170?ooo`030000003oool0oooo02/0oooo00<000000?ooo`3oool0
+h`3oool001`0oooo00<000000?ooo`3oool0A`3oool00`000000oooo0?ooo`0[0?ooo`030000003o
+ool0oooo0><0oooo000L0?ooo`800000B at 3oool00`000000oooo0?ooo`0Z0?ooo`030000003oool0
+oooo0><0oooo000L0?ooo`030000003oool0oooo04P0oooo00<000000?ooo`3oool0:@3oool00`00
+0000oooo0?ooo`3T0?ooo`00703oool00`000000oooo0?ooo`190?ooo`030000003oool0oooo02P0
+oooo00<000000?ooo`3oool0i03oool001`0oooo00<000000?ooo`3oool0B at 3oool00`000000oooo
+0?ooo`0W0?ooo`030000003oool0oooo0>D0oooo000L0?ooo`030000003oool0oooo04X0oooo00<0
+00000?ooo`3oool09P3oool00`000000oooo0?ooo`3U0?ooo`00703oool00`000000oooo0?ooo`1:
+0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool0iP3oool001`0oooo0P00001;0?oo
+o`8000009P3oool00`000000oooo0?ooo`3V0?ooo`00703oool00`000000oooo0?ooo`1;0?ooo`03
+0000003oool0oooo02<0oooo0P00003X0?ooo`00703oool00`000000oooo0?ooo`1;0?ooo`800000
+903oool00`000000oooo0?ooo`3W0?ooo`00703oool00`000000oooo0?ooo`1<0?ooo`030000003o
+ool0oooo0240oooo0P00003Y0?ooo`00703oool00`000000oooo0?ooo`1=0?ooo`030000003oool0
+oooo0200oooo00<000000?ooo`3oool0j03oool001`0oooo0P00001>0?ooo`030000003oool0oooo
+01l0oooo0P00003Z0?ooo`00703oool00`000000oooo0?ooo`1>0?ooo`030000003oool0oooo01h0
+oooo00<000000?ooo`3oool0j at 3oool001`0oooo00<000000?ooo`3oool0CP3oool00`000000oooo
+0?ooo`0M0?ooo`030000003oool0oooo0>X0oooo000L0?ooo`030000003oool0oooo04l0oooo00<0
+00000?ooo`3oool0703oool00`000000oooo0?ooo`3Z0?ooo`00103oool3000000<0oooo00<00000
+0?ooo`3oool00`0000030?ooo`<000001P3oool00`000000oooo0?ooo`1?0?ooo`800000703oool0
+0`000000oooo0?ooo`3[0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00L00000
+0?ooo`3oool0oooo0000003oool0000000<0oooo00<000000?ooo`3oool00`3oool00`000000oooo
+0?ooo`1 at 0?ooo`030000003oool0oooo01T0oooo0P00003]0?ooo`000`3oool01 at 000000oooo0?oo
+o`3oool0000000P0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`030?ooo`<00000
+D at 3oool00`000000oooo0?ooo`0H0?ooo`030000003oool0oooo0>`0oooo00030?ooo`050000003o
+ool0oooo0?ooo`0000001P3oool200000080oooo00D000000?ooo`3oool0oooo000000050?ooo`03
+0000003oool0oooo0540oooo0P00000H0?ooo`030000003oool0oooo0>d0oooo00030?ooo`050000
+003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000H0oooo00<000000?ooo`3o
+ool0DP3oool00`000000oooo0?ooo`0E0?ooo`800000k`3oool000<0oooo00D000000?ooo`3oool0
+oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`060?oo
+o`030000003oool0oooo05<0oooo00<000000?ooo`3oool0503oool00`000000oooo0?ooo`3^0?oo
+o`00103oool3000000H0oooo0`0000030?ooo`@000001 at 3oool00`000000oooo0?ooo`1D0?ooo`03
+0000003oool0oooo0180oooo00<000000?ooo`3oool0k`3oool001`0oooo00<000000?ooo`3oool0
+E03oool200000180oooo00<000000?ooo`3oool0l03oool001`0oooo0P00001F0?ooo`800000403o
+ool00`000000oooo0?ooo`3a0?ooo`00703oool00`000000oooo0?ooo`1F0?ooo`8000003P3oool0
+0`000000oooo0?ooo`3b0?ooo`00703oool00`000000oooo0?ooo`1H0?ooo`8000002P3oool20000
+0?D0oooo000L0?ooo`030000003oool0oooo05T0oooo0`0000060?ooo`<00000mP3oool001`0oooo
+00<000000?ooo`3oool0F`3oool800000?P0oooo000L0?ooo`030000003oool0oooo0?l0ooooG03o
+ool001`0oooo0P00003o0?oooed0oooo000L0?ooo`030000003oool0oooo0?l0ooooG03oool001`0
+oooo00<000000?ooo`3oool0o`3ooomL0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo
+000L0?ooo`030000003oool0oooo0?l0ooooG03oool00?l0ooooN`3oool00?l0ooooN`3oool00?l0
+ooooN`3oool00?l0ooooN`3oool00?l0ooooN`3oool00001\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-85.6377, -0.0195763, 
+  3.00749, 0.00174567}}],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.62304 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .09587 -24 -4.5 ]
+[.01131 .09587 0 4.5 ]
+[.01131 .17702 -18 -4.5 ]
+[.01131 .17702 0 4.5 ]
+[.01131 .25817 -24 -4.5 ]
+[.01131 .25817 0 4.5 ]
+[.01131 .33932 -18 -4.5 ]
+[.01131 .33932 0 4.5 ]
+[.01131 .42047 -24 -4.5 ]
+[.01131 .42047 0 4.5 ]
+[.01131 .50163 -18 -4.5 ]
+[.01131 .50163 0 4.5 ]
+[.01131 .58278 -24 -4.5 ]
+[.01131 .58278 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .09587 m
+.03006 .09587 L
+s
+[(0.05)] .01131 .09587 1 0 Mshowa
+.02381 .17702 m
+.03006 .17702 L
+s
+[(0.1)] .01131 .17702 1 0 Mshowa
+.02381 .25817 m
+.03006 .25817 L
+s
+[(0.15)] .01131 .25817 1 0 Mshowa
+.02381 .33932 m
+.03006 .33932 L
+s
+[(0.2)] .01131 .33932 1 0 Mshowa
+.02381 .42047 m
+.03006 .42047 L
+s
+[(0.25)] .01131 .42047 1 0 Mshowa
+.02381 .50163 m
+.03006 .50163 L
+s
+[(0.3)] .01131 .50163 1 0 Mshowa
+.02381 .58278 m
+.03006 .58278 L
+s
+[(0.35)] .01131 .58278 1 0 Mshowa
+.125 Mabswid
+.02381 .03095 m
+.02756 .03095 L
+s
+.02381 .04718 m
+.02756 .04718 L
+s
+.02381 .06341 m
+.02756 .06341 L
+s
+.02381 .07964 m
+.02756 .07964 L
+s
+.02381 .1121 m
+.02756 .1121 L
+s
+.02381 .12833 m
+.02756 .12833 L
+s
+.02381 .14456 m
+.02756 .14456 L
+s
+.02381 .16079 m
+.02756 .16079 L
+s
+.02381 .19325 m
+.02756 .19325 L
+s
+.02381 .20948 m
+.02756 .20948 L
+s
+.02381 .22571 m
+.02756 .22571 L
+s
+.02381 .24194 m
+.02756 .24194 L
+s
+.02381 .2744 m
+.02756 .2744 L
+s
+.02381 .29063 m
+.02756 .29063 L
+s
+.02381 .30686 m
+.02756 .30686 L
+s
+.02381 .32309 m
+.02756 .32309 L
+s
+.02381 .35555 m
+.02756 .35555 L
+s
+.02381 .37178 m
+.02756 .37178 L
+s
+.02381 .38801 m
+.02756 .38801 L
+s
+.02381 .40424 m
+.02756 .40424 L
+s
+.02381 .43671 m
+.02756 .43671 L
+s
+.02381 .45294 m
+.02756 .45294 L
+s
+.02381 .46917 m
+.02756 .46917 L
+s
+.02381 .4854 m
+.02756 .4854 L
+s
+.02381 .51786 m
+.02756 .51786 L
+s
+.02381 .53409 m
+.02756 .53409 L
+s
+.02381 .55032 m
+.02756 .55032 L
+s
+.02381 .56655 m
+.02756 .56655 L
+s
+.02381 .59901 m
+.02756 .59901 L
+s
+.02381 .61524 m
+.02756 .61524 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .01472 m
+.02567 .01531 L
+.0266 .0159 L
+.02753 .01649 L
+.02846 .01708 L
+.02938 .01767 L
+.03031 .01826 L
+.03124 .01885 L
+.03217 .01944 L
+.0331 .02002 L
+.03403 .0206 L
+.03496 .02118 L
+.03589 .02176 L
+.03682 .02233 L
+.03775 .0229 L
+.03868 .02347 L
+.03961 .02404 L
+.04053 .02459 L
+.04146 .02515 L
+.04239 .0257 L
+.04332 .02625 L
+.04425 .02679 L
+.04518 .02733 L
+.04611 .02786 L
+.04704 .02839 L
+.04797 .02891 L
+.0489 .02942 L
+.04983 .02993 L
+.05075 .03043 L
+.05168 .03093 L
+.05261 .03142 L
+.05354 .0319 L
+.05447 .03237 L
+.0554 .03284 L
+.05633 .0333 L
+.05726 .03375 L
+.05819 .03419 L
+.05912 .03462 L
+.06005 .03505 L
+.06098 .03547 L
+.0619 .03587 L
+.06283 .03627 L
+.06376 .03666 L
+.06469 .03704 L
+.06562 .03741 L
+.06655 .03776 L
+.06748 .03811 L
+.06841 .03845 L
+.06934 .03877 L
+.07027 .03909 L
+Mistroke
+.0712 .03939 L
+.07213 .03969 L
+.07305 .03997 L
+.07398 .04024 L
+.07491 .04049 L
+.07584 .04074 L
+.07677 .04097 L
+.0777 .04119 L
+.07863 .0414 L
+.07956 .04159 L
+.08049 .04177 L
+.08142 .04194 L
+.08235 .04209 L
+.08328 .04223 L
+.0842 .04236 L
+.08513 .04247 L
+.08606 .04257 L
+.08699 .04265 L
+.08792 .04272 L
+.08885 .04277 L
+.08978 .04281 L
+.09071 .04284 L
+.09164 .04284 L
+.09257 .04284 L
+.0935 .04281 L
+.09443 .04278 L
+.09535 .04272 L
+.09628 .04265 L
+.09721 .04256 L
+.09814 .04246 L
+.09907 .04234 L
+.1 .0422 L
+.10093 .04205 L
+.10186 .04188 L
+.10279 .04169 L
+.10372 .04148 L
+.10465 .04126 L
+.10557 .04102 L
+.1065 .04076 L
+.10743 .04048 L
+.10836 .04019 L
+.10929 .03988 L
+.11022 .03955 L
+.11115 .0392 L
+.11208 .03883 L
+.11301 .03845 L
+.11394 .03804 L
+.11487 .03762 L
+.1158 .03718 L
+.11672 .03672 L
+Mistroke
+.11765 .03624 L
+.11858 .03574 L
+.11951 .03522 L
+.12044 .03468 L
+.12137 .03412 L
+.1223 .03355 L
+.12323 .03295 L
+.12416 .03233 L
+.12509 .0317 L
+.12602 .03104 L
+.12695 .03036 L
+.12787 .02967 L
+.1288 .02895 L
+.12973 .02822 L
+.13066 .02746 L
+.13159 .02668 L
+.13252 .02589 L
+.13345 .02507 L
+.13438 .02423 L
+.13531 .02337 L
+.13624 .02249 L
+.13717 .02159 L
+.1381 .02067 L
+.13902 .01973 L
+.13995 .01877 L
+.14088 .01779 L
+.14181 .01678 L
+.14274 .01576 L
+.14367 .01472 L
+.1446 .01578 L
+.14553 .01687 L
+.14646 .01797 L
+.14739 .0191 L
+.14832 .02025 L
+.14925 .02142 L
+.15017 .02261 L
+.1511 .02383 L
+.15203 .02506 L
+.15296 .02631 L
+.15389 .02759 L
+.15482 .02888 L
+.15575 .0302 L
+.15668 .03154 L
+.15761 .0329 L
+.15854 .03428 L
+.15947 .03568 L
+.16039 .0371 L
+.16132 .03854 L
+.16225 .04 L
+.16318 .04148 L
+Mistroke
+.16411 .04299 L
+.16504 .04451 L
+.16597 .04606 L
+.1669 .04762 L
+.16783 .04921 L
+.16876 .05081 L
+.16969 .05244 L
+.17062 .05409 L
+.17154 .05575 L
+.17247 .05744 L
+.1734 .05915 L
+.17433 .06087 L
+.17526 .06262 L
+.17619 .06439 L
+.17712 .06618 L
+.17805 .06798 L
+.17898 .06981 L
+.17991 .07165 L
+.18084 .07352 L
+.18177 .0754 L
+.18269 .07731 L
+.18362 .07923 L
+.18455 .08117 L
+.18548 .08313 L
+.18641 .08511 L
+.18734 .08711 L
+.18827 .08913 L
+.1892 .09116 L
+.19013 .09322 L
+.19106 .09529 L
+.19199 .09738 L
+.19292 .09949 L
+.19384 .10161 L
+.19477 .10376 L
+.1957 .10592 L
+.19663 .1081 L
+.19756 .11029 L
+.19849 .11251 L
+.19942 .11474 L
+.20035 .11698 L
+.20128 .11925 L
+.20221 .12153 L
+.20314 .12383 L
+.20407 .12614 L
+.20499 .12847 L
+.20592 .13081 L
+.20685 .13318 L
+.20778 .13555 L
+.20871 .13794 L
+.20964 .14035 L
+Mistroke
+.21057 .14277 L
+.2115 .14521 L
+.21243 .14766 L
+.21336 .15013 L
+.21429 .15261 L
+.21521 .15511 L
+.21614 .15762 L
+.21707 .16014 L
+.218 .16268 L
+.21893 .16523 L
+.21986 .16779 L
+.22079 .17036 L
+.22172 .17295 L
+.22265 .17556 L
+.22358 .17817 L
+.22451 .1808 L
+.22544 .18343 L
+.22636 .18608 L
+.22729 .18874 L
+.22822 .19142 L
+.22915 .1941 L
+.23008 .1968 L
+.23101 .1995 L
+.23194 .20222 L
+.23287 .20494 L
+.2338 .20768 L
+.23473 .21043 L
+.23566 .21318 L
+.23659 .21594 L
+.23751 .21872 L
+.23844 .2215 L
+.23937 .22429 L
+.2403 .22709 L
+.24123 .2299 L
+.24216 .23271 L
+.24309 .23554 L
+.24402 .23837 L
+.24495 .2412 L
+.24588 .24405 L
+.24681 .2469 L
+.24774 .24976 L
+.24866 .25262 L
+.24959 .25549 L
+.25052 .25836 L
+.25145 .26124 L
+.25238 .26413 L
+.25331 .26702 L
+.25424 .26991 L
+.25517 .27281 L
+.2561 .27571 L
+Mistroke
+.25703 .27862 L
+.25796 .28153 L
+.25889 .28444 L
+.25981 .28736 L
+.26074 .29027 L
+.26167 .29319 L
+.2626 .29612 L
+.26353 .29904 L
+.26446 .30197 L
+.26539 .3049 L
+.26632 .30782 L
+.26725 .31075 L
+.26818 .31368 L
+.26911 .31661 L
+.27003 .31954 L
+.27096 .32247 L
+.27189 .3254 L
+.27282 .32833 L
+.27375 .33126 L
+.27468 .33418 L
+.27561 .3371 L
+.27654 .34003 L
+.27747 .34294 L
+.2784 .34586 L
+.27933 .34877 L
+.28026 .35168 L
+.28118 .35459 L
+.28211 .35749 L
+.28304 .36039 L
+.28397 .36329 L
+.2849 .36618 L
+.28583 .36906 L
+.28676 .37194 L
+.28769 .37481 L
+.28862 .37768 L
+.28955 .38054 L
+.29048 .3834 L
+.29141 .38625 L
+.29233 .38909 L
+.29326 .39192 L
+.29419 .39475 L
+.29512 .39757 L
+.29605 .40038 L
+.29698 .40319 L
+.29791 .40598 L
+.29884 .40877 L
+.29977 .41154 L
+.3007 .41431 L
+.30163 .41707 L
+.30256 .41981 L
+Mistroke
+.30348 .42255 L
+.30441 .42527 L
+.30534 .42799 L
+.30627 .43069 L
+.3072 .43338 L
+.30813 .43606 L
+.30906 .43873 L
+.30999 .44139 L
+.31092 .44403 L
+.31185 .44666 L
+.31278 .44928 L
+.3137 .45188 L
+.31463 .45447 L
+.31556 .45705 L
+.31649 .45961 L
+.31742 .46216 L
+.31835 .46469 L
+.31928 .46721 L
+.32021 .46971 L
+.32114 .47219 L
+.32207 .47466 L
+.323 .47712 L
+.32393 .47955 L
+.32485 .48198 L
+.32578 .48438 L
+.32671 .48677 L
+.32764 .48913 L
+.32857 .49149 L
+.3295 .49382 L
+.33043 .49613 L
+.33136 .49843 L
+.33229 .50071 L
+.33322 .50297 L
+.33415 .50521 L
+.33508 .50743 L
+.336 .50963 L
+.33693 .51181 L
+.33786 .51397 L
+.33879 .51611 L
+.33972 .51822 L
+.34065 .52032 L
+.34158 .5224 L
+.34251 .52445 L
+.34344 .52649 L
+.34437 .5285 L
+.3453 .53049 L
+.34623 .53245 L
+.34715 .5344 L
+.34808 .53632 L
+.34901 .53822 L
+Mistroke
+.34994 .54009 L
+.35087 .54194 L
+.3518 .54377 L
+.35273 .54557 L
+.35366 .54735 L
+.35459 .54911 L
+.35552 .55084 L
+.35645 .55254 L
+.35738 .55422 L
+.3583 .55588 L
+.35923 .55751 L
+.36016 .55912 L
+.36109 .56069 L
+.36202 .56225 L
+.36295 .56377 L
+.36388 .56527 L
+.36481 .56675 L
+.36574 .5682 L
+.36667 .56962 L
+.3676 .57101 L
+.36852 .57237 L
+.36945 .57371 L
+.37038 .57502 L
+.37131 .57631 L
+.37224 .57756 L
+.37317 .57879 L
+.3741 .57999 L
+.37503 .58116 L
+.37596 .5823 L
+.37689 .58341 L
+.37782 .5845 L
+.37875 .58555 L
+.37967 .58658 L
+.3806 .58758 L
+.38153 .58855 L
+.38246 .58948 L
+.38339 .59039 L
+.38432 .59127 L
+.38525 .59212 L
+.38618 .59294 L
+.38711 .59373 L
+.38804 .59448 L
+.38897 .59521 L
+.3899 .59591 L
+.39082 .59657 L
+.39175 .59721 L
+.39268 .59781 L
+.39361 .59839 L
+.39454 .59893 L
+.39547 .59944 L
+Mistroke
+.3964 .59992 L
+.39733 .60037 L
+.39826 .60079 L
+.39919 .60117 L
+.40012 .60153 L
+.40105 .60185 L
+.40197 .60214 L
+.4029 .6024 L
+.40383 .60263 L
+.40476 .60282 L
+.40569 .60299 L
+.40662 .60312 L
+.40755 .60322 L
+.40848 .60328 L
+.40941 .60332 L
+.41034 .60332 L
+.41127 .60329 L
+.4122 .60323 L
+.41312 .60313 L
+.41405 .603 L
+.41498 .60284 L
+.41591 .60265 L
+.41684 .60243 L
+.41777 .60217 L
+.4187 .60188 L
+.41963 .60156 L
+.42056 .6012 L
+.42149 .60082 L
+.42242 .6004 L
+.42334 .59994 L
+.42427 .59946 L
+.4252 .59894 L
+.42613 .59839 L
+.42706 .59781 L
+.42799 .59719 L
+.42892 .59654 L
+.42985 .59586 L
+.43078 .59515 L
+.43171 .59441 L
+.43264 .59363 L
+.43357 .59282 L
+.43449 .59198 L
+.43542 .5911 L
+.43635 .59019 L
+.43728 .58926 L
+.43821 .58828 L
+.43914 .58728 L
+.44007 .58625 L
+.441 .58518 L
+.44193 .58408 L
+Mistroke
+.44286 .58295 L
+.44379 .58178 L
+.44472 .58059 L
+.44564 .57936 L
+.44657 .57811 L
+.4475 .57682 L
+.44843 .5755 L
+.44936 .57414 L
+.45029 .57276 L
+.45122 .57135 L
+.45215 .5699 L
+.45308 .56843 L
+.45401 .56692 L
+.45494 .56538 L
+.45587 .56381 L
+.45679 .56222 L
+.45772 .56059 L
+.45865 .55893 L
+.45958 .55724 L
+.46051 .55552 L
+.46144 .55377 L
+.46237 .55199 L
+.4633 .55018 L
+.46423 .54834 L
+.46516 .54648 L
+.46609 .54458 L
+.46702 .54266 L
+.46794 .5407 L
+.46887 .53872 L
+.4698 .53671 L
+.47073 .53467 L
+.47166 .5326 L
+.47259 .53051 L
+.47352 .52838 L
+.47445 .52623 L
+.47538 .52405 L
+.47631 .52185 L
+.47724 .51961 L
+.47816 .51735 L
+.47909 .51506 L
+.48002 .51275 L
+.48095 .51041 L
+.48188 .50804 L
+.48281 .50565 L
+.48374 .50323 L
+.48467 .50079 L
+.4856 .49832 L
+.48653 .49582 L
+.48746 .4933 L
+.48839 .49076 L
+Mistroke
+.48931 .48819 L
+.49024 .4856 L
+.49117 .48298 L
+.4921 .48034 L
+.49303 .47767 L
+.49396 .47498 L
+.49489 .47227 L
+.49582 .46953 L
+.49675 .46678 L
+.49768 .464 L
+.49861 .46119 L
+.49954 .45837 L
+.50046 .45552 L
+.50139 .45265 L
+.50232 .44976 L
+.50325 .44685 L
+.50418 .44392 L
+.50511 .44097 L
+.50604 .43799 L
+.50697 .435 L
+.5079 .43199 L
+.50883 .42896 L
+.50976 .42591 L
+.51069 .42284 L
+.51161 .41975 L
+.51254 .41664 L
+.51347 .41351 L
+.5144 .41037 L
+.51533 .40721 L
+.51626 .40403 L
+.51719 .40083 L
+.51812 .39762 L
+.51905 .39439 L
+.51998 .39114 L
+.52091 .38788 L
+.52184 .3846 L
+.52276 .38131 L
+.52369 .378 L
+.52462 .37468 L
+.52555 .37134 L
+.52648 .36799 L
+.52741 .36462 L
+.52834 .36124 L
+.52927 .35785 L
+.5302 .35444 L
+.53113 .35103 L
+.53206 .34759 L
+.53298 .34415 L
+.53391 .3407 L
+.53484 .33723 L
+Mistroke
+.53577 .33375 L
+.5367 .33026 L
+.53763 .32676 L
+.53856 .32325 L
+.53949 .31973 L
+.54042 .3162 L
+.54135 .31267 L
+.54228 .30912 L
+.54321 .30556 L
+.54413 .302 L
+.54506 .29842 L
+.54599 .29484 L
+.54692 .29125 L
+.54785 .28766 L
+.54878 .28405 L
+.54971 .28045 L
+.55064 .27683 L
+.55157 .27321 L
+.5525 .26958 L
+.55343 .26595 L
+.55436 .26231 L
+.55528 .25867 L
+.55621 .25503 L
+.55714 .25138 L
+.55807 .24772 L
+.559 .24407 L
+.55993 .24041 L
+.56086 .23675 L
+.56179 .23308 L
+.56272 .22941 L
+.56365 .22575 L
+.56458 .22208 L
+.56551 .21841 L
+.56643 .21473 L
+.56736 .21106 L
+.56829 .20739 L
+.56922 .20372 L
+.57015 .20005 L
+.57108 .19638 L
+.57201 .19271 L
+.57294 .18904 L
+.57387 .18538 L
+.5748 .18172 L
+.57573 .17806 L
+.57666 .1744 L
+.57758 .17074 L
+.57851 .16709 L
+.57944 .16345 L
+.58037 .1598 L
+.5813 .15617 L
+Mistroke
+.58223 .15253 L
+.58316 .14891 L
+.58409 .14528 L
+.58502 .14167 L
+.58595 .13805 L
+.58688 .13445 L
+.5878 .13085 L
+.58873 .12726 L
+.58966 .12368 L
+.59059 .1201 L
+.59152 .11654 L
+.59245 .11298 L
+.59338 .10942 L
+.59431 .10588 L
+.59524 .10235 L
+.59617 .09883 L
+.5971 .09531 L
+.59803 .09181 L
+.59895 .08832 L
+.59988 .08484 L
+.60081 .08136 L
+.60174 .07791 L
+.60267 .07446 L
+.6036 .07102 L
+.60453 .0676 L
+.60546 .06419 L
+.60639 .06079 L
+.60732 .0574 L
+.60825 .05403 L
+.60918 .05067 L
+.6101 .04733 L
+.61103 .044 L
+.61196 .04068 L
+.61289 .03738 L
+.61382 .0341 L
+.61475 .03083 L
+.61568 .02757 L
+.61661 .02433 L
+.61754 .02111 L
+.61847 .01791 L
+.6194 .01472 L
+.62033 .01788 L
+.62125 .02104 L
+.62218 .02418 L
+.62311 .0273 L
+.62404 .0304 L
+.62497 .03348 L
+.6259 .03654 L
+.62683 .03959 L
+.62776 .04262 L
+Mistroke
+.62869 .04562 L
+.62962 .04861 L
+.63055 .05158 L
+.63148 .05452 L
+.6324 .05745 L
+.63333 .06036 L
+.63426 .06324 L
+.63519 .06611 L
+.63612 .06895 L
+.63705 .07177 L
+.63798 .07457 L
+.63891 .07735 L
+.63984 .08011 L
+.64077 .08284 L
+.6417 .08555 L
+.64262 .08824 L
+.64355 .0909 L
+.64448 .09354 L
+.64541 .09616 L
+.64634 .09876 L
+.64727 .10133 L
+.6482 .10387 L
+.64913 .1064 L
+.65006 .10889 L
+.65099 .11137 L
+.65192 .11382 L
+.65285 .11624 L
+.65377 .11864 L
+.6547 .12101 L
+.65563 .12336 L
+.65656 .12568 L
+.65749 .12797 L
+.65842 .13024 L
+.65935 .13249 L
+.66028 .1347 L
+.66121 .13689 L
+.66214 .13906 L
+.66307 .14119 L
+.664 .1433 L
+.66492 .14539 L
+.66585 .14744 L
+.66678 .14947 L
+.66771 .15147 L
+.66864 .15344 L
+.66957 .15539 L
+.6705 .1573 L
+.67143 .15919 L
+.67236 .16105 L
+.67329 .16288 L
+.67422 .16469 L
+Mistroke
+.67515 .16646 L
+.67607 .16821 L
+.677 .16993 L
+.67793 .17161 L
+.67886 .17327 L
+.67979 .1749 L
+.68072 .1765 L
+.68165 .17808 L
+.68258 .17962 L
+.68351 .18113 L
+.68444 .18261 L
+.68537 .18407 L
+.6863 .18549 L
+.68722 .18689 L
+.68815 .18825 L
+.68908 .18958 L
+.69001 .19089 L
+.69094 .19216 L
+.69187 .19341 L
+.6928 .19462 L
+.69373 .1958 L
+.69466 .19696 L
+.69559 .19808 L
+.69652 .19917 L
+.69744 .20024 L
+.69837 .20127 L
+.6993 .20227 L
+.70023 .20324 L
+.70116 .20418 L
+.70209 .20509 L
+.70302 .20597 L
+.70395 .20682 L
+.70488 .20764 L
+.70581 .20843 L
+.70674 .20919 L
+.70767 .20991 L
+.70859 .21061 L
+.70952 .21127 L
+.71045 .21191 L
+.71138 .21251 L
+.71231 .21309 L
+.71324 .21363 L
+.71417 .21415 L
+.7151 .21463 L
+.71603 .21508 L
+.71696 .2155 L
+.71789 .2159 L
+.71882 .21626 L
+.71974 .21659 L
+.72067 .21689 L
+Mistroke
+.7216 .21716 L
+.72253 .2174 L
+.72346 .21761 L
+.72439 .21779 L
+.72532 .21794 L
+.72625 .21806 L
+.72718 .21816 L
+.72811 .21822 L
+.72904 .21825 L
+.72997 .21825 L
+.73089 .21822 L
+.73182 .21817 L
+.73275 .21808 L
+.73368 .21797 L
+.73461 .21782 L
+.73554 .21765 L
+.73647 .21745 L
+.7374 .21722 L
+.73833 .21696 L
+.73926 .21667 L
+.74019 .21635 L
+.74111 .21601 L
+.74204 .21563 L
+.74297 .21523 L
+.7439 .2148 L
+.74483 .21434 L
+.74576 .21386 L
+.74669 .21334 L
+.74762 .2128 L
+.74855 .21224 L
+.74948 .21164 L
+.75041 .21102 L
+.75134 .21037 L
+.75226 .2097 L
+.75319 .20899 L
+.75412 .20826 L
+.75505 .20751 L
+.75598 .20673 L
+.75691 .20592 L
+.75784 .20509 L
+.75877 .20423 L
+.7597 .20335 L
+.76063 .20244 L
+.76156 .2015 L
+.76249 .20054 L
+.76341 .19956 L
+.76434 .19855 L
+.76527 .19752 L
+.7662 .19646 L
+.76713 .19538 L
+Mistroke
+.76806 .19428 L
+.76899 .19315 L
+.76992 .192 L
+.77085 .19082 L
+.77178 .18962 L
+.77271 .1884 L
+.77364 .18716 L
+.77456 .18589 L
+.77549 .18461 L
+.77642 .1833 L
+.77735 .18197 L
+.77828 .18061 L
+.77921 .17924 L
+.78014 .17784 L
+.78107 .17643 L
+.782 .17499 L
+.78293 .17354 L
+.78386 .17206 L
+.78479 .17056 L
+.78571 .16905 L
+.78664 .16751 L
+.78757 .16596 L
+.7885 .16438 L
+.78943 .16279 L
+.79036 .16118 L
+.79129 .15955 L
+.79222 .15791 L
+.79315 .15624 L
+.79408 .15456 L
+.79501 .15286 L
+.79593 .15115 L
+.79686 .14941 L
+.79779 .14767 L
+.79872 .1459 L
+.79965 .14412 L
+.80058 .14233 L
+.80151 .14052 L
+.80244 .13869 L
+.80337 .13685 L
+.8043 .13499 L
+.80523 .13312 L
+.80616 .13124 L
+.80708 .12934 L
+.80801 .12743 L
+.80894 .12551 L
+.80987 .12358 L
+.8108 .12163 L
+.81173 .11967 L
+.81266 .11769 L
+.81359 .11571 L
+Mistroke
+.81452 .11371 L
+.81545 .11171 L
+.81638 .10969 L
+.81731 .10766 L
+.81823 .10562 L
+.81916 .10357 L
+.82009 .10152 L
+.82102 .09945 L
+.82195 .09737 L
+.82288 .09529 L
+.82381 .09319 L
+.82474 .09109 L
+.82567 .08898 L
+.8266 .08687 L
+.82753 .08474 L
+.82846 .08261 L
+.82938 .08047 L
+.83031 .07833 L
+.83124 .07618 L
+.83217 .07402 L
+.8331 .07186 L
+.83403 .06969 L
+.83496 .06752 L
+.83589 .06535 L
+.83682 .06316 L
+.83775 .06098 L
+.83868 .05879 L
+.83961 .0566 L
+.84053 .05441 L
+.84146 .05221 L
+.84239 .05001 L
+.84332 .04781 L
+.84425 .0456 L
+.84518 .0434 L
+.84611 .04119 L
+.84704 .03898 L
+.84797 .03677 L
+.8489 .03456 L
+.84983 .03235 L
+.85075 .03015 L
+.85168 .02794 L
+.85261 .02573 L
+.85354 .02352 L
+.85447 .02132 L
+.8554 .01911 L
+.85633 .01691 L
+.85726 .01472 L
+.85819 .01691 L
+.85912 .0191 L
+.86005 .0213 L
+Mistroke
+.86098 .02348 L
+.8619 .02566 L
+.86283 .02784 L
+.86376 .03002 L
+.86469 .03219 L
+.86562 .03435 L
+.86655 .03651 L
+.86748 .03867 L
+.86841 .04081 L
+.86934 .04296 L
+.87027 .04509 L
+.8712 .04722 L
+.87213 .04934 L
+.87305 .05146 L
+.87398 .05357 L
+.87491 .05567 L
+.87584 .05776 L
+.87677 .05984 L
+.8777 .06191 L
+.87863 .06398 L
+.87956 .06604 L
+.88049 .06808 L
+.88142 .07012 L
+.88235 .07215 L
+.88328 .07417 L
+.8842 .07617 L
+.88513 .07817 L
+.88606 .08015 L
+.88699 .08213 L
+.88792 .08409 L
+.88885 .08604 L
+.88978 .08798 L
+.89071 .0899 L
+.89164 .09181 L
+.89257 .09372 L
+.8935 .0956 L
+.89443 .09748 L
+.89535 .09934 L
+.89628 .10118 L
+.89721 .10301 L
+.89814 .10483 L
+.89907 .10664 L
+.9 .10843 L
+.90093 .1102 L
+.90186 .11196 L
+.90279 .1137 L
+.90372 .11543 L
+.90465 .11714 L
+.90557 .11883 L
+.9065 .12051 L
+Mistroke
+.90743 .12218 L
+.90836 .12382 L
+.90929 .12545 L
+.91022 .12706 L
+.91115 .12865 L
+.91208 .13023 L
+.91301 .13179 L
+.91394 .13333 L
+.91487 .13485 L
+.9158 .13635 L
+.91672 .13784 L
+.91765 .13931 L
+.91858 .14075 L
+.91951 .14218 L
+.92044 .14359 L
+.92137 .14498 L
+.9223 .14635 L
+.92323 .1477 L
+.92416 .14903 L
+.92509 .15033 L
+.92602 .15162 L
+.92695 .15289 L
+.92787 .15414 L
+.9288 .15536 L
+.92973 .15657 L
+.93066 .15775 L
+.93159 .15891 L
+.93252 .16005 L
+.93345 .16117 L
+.93438 .16227 L
+.93531 .16334 L
+.93624 .1644 L
+.93717 .16543 L
+.9381 .16644 L
+.93902 .16742 L
+.93995 .16839 L
+.94088 .16933 L
+.94181 .17024 L
+.94274 .17114 L
+.94367 .17201 L
+.9446 .17286 L
+.94553 .17368 L
+.94646 .17448 L
+.94739 .17526 L
+.94832 .17601 L
+.94925 .17674 L
+.95017 .17745 L
+.9511 .17813 L
+.95203 .17879 L
+.95296 .17942 L
+Mistroke
+.95389 .18003 L
+.95482 .18062 L
+.95575 .18118 L
+.95668 .18172 L
+.95761 .18223 L
+.95854 .18272 L
+.95947 .18318 L
+.96039 .18362 L
+.96132 .18403 L
+.96225 .18442 L
+.96318 .18478 L
+.96411 .18512 L
+.96504 .18544 L
+.96597 .18573 L
+.9669 .18599 L
+.96783 .18623 L
+.96876 .18644 L
+.96969 .18663 L
+.97062 .1868 L
+.97154 .18694 L
+.97247 .18705 L
+.9734 .18714 L
+.97433 .1872 L
+.97526 .18724 L
+.97619 .18725 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk
+0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo000L0?ooo`030000003oool0oooo0?l0
+ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`004`3oool3000000H0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo0`00
+000W0?ooo`<00000Z03oool00`000000oooo0?ooo`1B0?ooo`800000<P3oool00180oooo00D00000
+0?ooo`3oool0oooo000000050?ooo`040000003oool00000000002D0oooo0P0000000`3oool00000
+0?ooo`2W0?ooo`030000003oool0oooo0580oooo0P00000b0?ooo`004P3oool01 at 000000oooo0?oo
+o`3oool0000000D0oooo00<000000?ooo`3oool00`00000R0?ooo`8000000`3oool00`000000oooo
+0?ooo`2T0?ooo`030000003oool000000580oooo00<000000?ooo`000000<P3oool001<0oooo0`00
+00060?ooo`030000003oool0oooo0080oooo0P00000P0?ooo`8000001 at 3oool00`000000oooo0?oo
+o`2S0?ooo`030000003oool000000580oooo00 at 000000?ooo`3oool00000<@3oool001`0oooo00<0
+00000?ooo`3oool0103oool2000001d0oooo0P0000060?ooo`800000Y03oool00`000000oooo0000
+001A0?ooo`8000000P3oool00`000000oooo0?ooo`0_0?ooo`00703oool2000000H0oooo0`00000J
+0?ooo`800000203oool00`000000oooo0?ooo`2Q0?ooo`050000003oool0oooo0?ooo`000000D03o
+ool00`000000oooo0?ooo`020?ooo`030000003oool0oooo02h0oooo000L0?ooo`030000003oool0
+oooo00L0oooo0`00000F0?ooo`8000002`3oool00`000000oooo0?ooo`2P0?ooo`050000003oool0
+oooo0?ooo`000000D03oool00`000000oooo0?ooo`020?ooo`030000003oool0oooo02h0oooo000L
+0?ooo`030000003oool0oooo00T0oooo0`00000C0?ooo`800000303oool200000:40oooo00D00000
+0?ooo`3oool0oooo0000001?0?ooo`030000003oool0oooo00<0oooo0P00000_0?ooo`00703oool0
+0`000000oooo0?ooo`0;0?ooo`@000003 at 3oool3000000l0oooo00<000000?ooo`3oool0W`3oool0
+1 at 000000oooo0?ooo`3oool0000004l0oooo00<000000?ooo`3oool0103oool00`000000oooo0?oo
+o`0]0?ooo`00703oool00`000000oooo0?ooo`0>0?ooo`D000001 at 3oool500000180oooo00<00000
+0?ooo`3oool0W at 3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo04/0oooo00<00000
+0?ooo`3oool01 at 3oool00`000000oooo0?ooo`0]0?ooo`00703oool00`000000oooo0?ooo`0C0?oo
+o`H000005P3oool2000009h0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`1;0?oo
+o`030000003oool0oooo00H0oooo00<000000?ooo`3oool0;03oool001`0oooo0P00000a0?ooo`03
+0000003oool0oooo09`0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`1:0?ooo`80
+0000203oool00`000000oooo0?ooo`0/0?ooo`00703oool00`000000oooo0?ooo`0a0?ooo`030000
+003oool0oooo09X0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`190?ooo`030000
+003oool0oooo00P0oooo00<000000?ooo`3oool0:`3oool001`0oooo00<000000?ooo`3oool0<@3o
+ool00`000000oooo0?ooo`2J0?ooo`030000003oool0oooo00D0oooo00<000000?ooo`3oool0B at 3o
+ool00`000000oooo0?ooo`080?ooo`030000003oool0oooo02/0oooo000L0?ooo`030000003oool0
+oooo0380oooo00<000000?ooo`3oool0V at 3oool00`000000oooo0?ooo`050?ooo`030000003oool0
+oooo04P0oooo00<000000?ooo`3oool02 at 3oool2000002`0oooo000L0?ooo`030000003oool0oooo
+0380oooo00<000000?ooo`3oool0V at 3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo
+04L0oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`0Z0?ooo`00703oool00`000000
+oooo0?ooo`0c0?ooo`030000003oool0oooo09L0oooo00<000000?ooo`3oool01`3oool00`000000
+oooo0?ooo`160?ooo`030000003oool0oooo00/0oooo00<000000?ooo`3oool0:P3oool001`0oooo
+0P00000d0?ooo`800000V03oool00`000000oooo0?ooo`070?ooo`030000003oool0oooo04H0oooo
+00<000000?ooo`3oool0303oool00`000000oooo0?ooo`0Y0?ooo`00703oool00`000000oooo0?oo
+o`0d0?ooo`030000003oool0oooo09H0oooo00<000000?ooo`3oool0203oool00`000000oooo0?oo
+o`150?ooo`030000003oool0oooo00`0oooo00<000000?ooo`3oool0:@3oool001`0oooo00<00000
+0?ooo`3oool0=03oool2000009L0oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`14
+0?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0:03oool001`0oooo00<000000?oo
+o`3oool0=@3oool00`000000oooo0?ooo`2D0?ooo`030000003oool0oooo00T0oooo00<000000?oo
+o`3oool0A03oool00`000000oooo0?ooo`0>0?ooo`030000003oool0oooo02P0oooo000L0?ooo`03
+0000003oool0oooo03D0oooo0P00002E0?ooo`030000003oool0oooo00X0oooo00<000000?ooo`3o
+ool0 at P3oool00`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo02L0oooo000L0?ooo`030000
+003oool0oooo03H0oooo00<000000?ooo`3oool0T`3oool00`000000oooo0?ooo`0:0?ooo`030000
+003oool0oooo0480oooo00<000000?ooo`3oool0403oool00`000000oooo0?ooo`0W0?ooo`00703o
+ool2000003L0oooo00<000000?ooo`3oool0TP3oool00`000000oooo0?ooo`0;0?ooo`030000003o
+ool0oooo0440oooo00<000000?ooo`3oool04P3oool00`000000oooo0?ooo`0V0?ooo`00703oool0
+0`000000oooo0?ooo`0g0?ooo`030000003oool0oooo0940oooo00<000000?ooo`3oool0303oool0
+0`000000oooo0?ooo`100?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool09P3oool0
+01`0oooo00<000000?ooo`3oool0=`3oool00`000000oooo0?ooo`2A0?ooo`030000003oool0oooo
+00`0oooo00<000000?ooo`3oool0?`3oool2000001D0oooo00<000000?ooo`3oool09 at 3oool000@0
+oooo0`0000030?ooo`030000003oool0oooo00<000000`3oool3000000H0oooo00<000000?ooo`3o
+ool0=`3oool200000980oooo00<000000?ooo`3oool0303oool00`000000oooo0?ooo`0o0?ooo`03
+0000003oool0oooo01 at 0oooo00<000000?ooo`3oool09 at 3oool000<0oooo00D000000?ooo`3oool0
+oooo000000040?ooo`070000003oool0oooo0?ooo`000000oooo000000030?ooo`030000003oool0
+oooo00<0oooo00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`2?0?ooo`030000003oool0
+oooo00h0oooo00<000000?ooo`3oool0?P3oool00`000000oooo0?ooo`0D0?ooo`8000009P3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000001 at 3o
+ool00`000000oooo0?ooo`030?ooo`030000003oool0oooo03P0oooo0P00002 at 0?ooo`030000003o
+ool0oooo00h0oooo00<000000?ooo`3oool0?@3oool00`000000oooo0?ooo`0F0?ooo`030000003o
+ool0oooo02 at 0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool01`000000oooo0?oo
+o`3oool000000?ooo`0000000`3oool00`000000oooo0?ooo`030?ooo`<00000>@3oool00`000000
+oooo0?ooo`2>0?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0?@3oool00`000000
+oooo0?ooo`0F0?ooo`8000009 at 3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`06
+0000003oool0oooo0?ooo`000000oooo100000060?ooo`030000003oool0oooo03T0oooo00<00000
+0?ooo`3oool0SP3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo03/0oooo00<00000
+0?ooo`3oool0603oool00`000000oooo0?ooo`0S0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0
+000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00H0oooo00<0
+00000?ooo`3oool0>P3oool00`000000oooo0?ooo`2<0?ooo`030000003oool0oooo0100oooo00<0
+00000?ooo`3oool0>`3oool00`000000oooo0?ooo`0H0?ooo`800000903oool000 at 0oooo0`000006
+0?ooo`<000000`3oool4000000D0oooo00<000000?ooo`3oool0>P3oool00`000000oooo0?ooo`2<
+0?ooo`030000003oool0oooo0100oooo0P00000k0?ooo`030000003oool0oooo01X0oooo00<00000
+0?ooo`3oool08P3oool001`0oooo00<000000?ooo`3oool0>`3oool00`000000oooo0?ooo`2;0?oo
+o`030000003oool0oooo0140oooo00<000000?ooo`3oool0>@3oool00`000000oooo0?ooo`0J0?oo
+o`8000008`3oool001`0oooo0P00000l0?ooo`030000003oool0oooo08/0oooo00<000000?ooo`3o
+ool04 at 3oool00`000000oooo0?ooo`0h0?ooo`8000007 at 3oool00`000000oooo0?ooo`0Q0?ooo`00
+703oool00`000000oooo0?ooo`0k0?ooo`800000R`3oool00`000000oooo0?ooo`0C0?ooo`030000
+003oool0oooo03L0oooo00<000000?ooo`3oool07 at 3oool00`000000oooo0?ooo`0P0?ooo`00703o
+ool00`000000oooo0?ooo`0l0?ooo`030000003oool0oooo08T0oooo00<000000?ooo`3oool04`3o
+ool00`000000oooo0?ooo`0f0?ooo`8000007`3oool00`000000oooo0?ooo`0P0?ooo`00703oool0
+0`000000oooo0?ooo`0l0?ooo`030000003oool0oooo08T0oooo00<000000?ooo`3oool04`3oool0
+0`000000oooo0?ooo`0f0?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool07`3oool0
+01`0oooo00<000000?ooo`3oool0?@3oool00`000000oooo0?ooo`270?ooo`030000003oool0oooo
+01D0oooo00<000000?ooo`3oool0=@3oool00`000000oooo0?ooo`0O0?ooo`030000003oool0oooo
+01l0oooo000L0?ooo`030000003oool0oooo03d0oooo00<000000?ooo`3oool0Q`3oool00`000000
+oooo0?ooo`0E0?ooo`030000003oool0oooo03 at 0oooo00<000000?ooo`3oool08 at 3oool00`000000
+oooo0?ooo`0N0?ooo`00703oool2000003h0oooo0P0000280?ooo`030000003oool0oooo01H0oooo
+00<000000?ooo`3oool0<`3oool00`000000oooo0?ooo`0Q0?ooo`8000007`3oool001`0oooo00<0
+00000?ooo`3oool0?P3oool00`000000oooo0?ooo`260?ooo`030000003oool0oooo01H0oooo00<0
+00000?ooo`3oool0<P3oool00`000000oooo0?ooo`0S0?ooo`030000003oool0oooo01d0oooo000L
+0?ooo`030000003oool0oooo03h0oooo00<000000?ooo`3oool0Q at 3oool00`000000oooo0?ooo`0G
+0?ooo`030000003oool0oooo0380oooo00<000000?ooo`3oool08`3oool2000001h0oooo000L0?oo
+o`030000003oool0oooo03l0oooo00<000000?ooo`3oool0Q03oool00`000000oooo0?ooo`0H0?oo
+o`030000003oool0oooo0300oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0L0?oo
+o`00703oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo08 at 0oooo00<000000?ooo`3o
+ool0603oool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo02H0oooo00<000000?ooo`3o
+ool06`3oool001`0oooo00<000000?ooo`3oool0?`3oool2000008D0oooo00<000000?ooo`3oool0
+6 at 3oool00`000000oooo0?ooo`0^0?ooo`030000003oool0oooo02L0oooo0P00000L0?ooo`00703o
+ool200000440oooo00<000000?ooo`3oool0PP3oool00`000000oooo0?ooo`0J0?ooo`030000003o
+ool0oooo02h0oooo00<000000?ooo`3oool0:03oool00`000000oooo0?ooo`0J0?ooo`00703oool0
+0`000000oooo0?ooo`100?ooo`030000003oool0oooo0880oooo00<000000?ooo`3oool06`3oool0
+0`000000oooo0?ooo`0/0?ooo`030000003oool0oooo02X0oooo00<000000?ooo`3oool06 at 3oool0
+01`0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`210?ooo`030000003oool0oooo
+01/0oooo00<000000?ooo`3oool0:`3oool2000002`0oooo0P00000J0?ooo`00703oool00`000000
+oooo0?ooo`110?ooo`030000003oool0oooo0840oooo00<000000?ooo`3oool06`3oool2000002`0
+oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`0H0?ooo`00703oool00`000000oooo
+0?ooo`110?ooo`030000003oool0oooo0800oooo00<000000?ooo`3oool07 at 3oool00`000000oooo
+0?ooo`0Y0?ooo`800000;`3oool00`000000oooo0?ooo`0G0?ooo`00703oool00`000000oooo0?oo
+o`120?ooo`030000003oool0oooo07l0oooo00<000000?ooo`3oool07 at 3oool2000002X0oooo00<0
+00000?ooo`3oool0;P3oool2000001P0oooo000L0?ooo`800000@`3oool00`000000oooo0?ooo`1o
+0?ooo`030000003oool0oooo01h0oooo00<000000?ooo`3oool09`3oool00`000000oooo0?ooo`0`
+0?ooo`8000005`3oool001`0oooo00<000000?ooo`3oool0 at P3oool00`000000oooo0?ooo`1o0?oo
+o`030000003oool0oooo01h0oooo0P00000X0?ooo`030000003oool0oooo0340oooo00<000000?oo
+o`3oool05 at 3oool001`0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`1m0?ooo`03
+0000003oool0oooo0200oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0c0?ooo`03
+0000003oool0oooo01 at 0oooo000:0?ooo`<000000`3oool00`000000oooo0?ooo`020?ooo`030000
+003oool0oooo00 at 0oooo00<000000?ooo`3oool0@`3oool00`000000oooo0?ooo`1m0?ooo`030000
+003oool0oooo0200oooo0P00000U0?ooo`800000=P3oool00`000000oooo0?ooo`0C0?ooo`002 at 3o
+ool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0103oool00`000000oooo
+0?ooo`140?ooo`030000003oool0oooo07`0oooo00<000000?ooo`3oool08 at 3oool00`000000oooo
+0?ooo`0S0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool04P3oool000T0oooo00D0
+00000?ooo`3oool0oooo000000070?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0
+A03oool00`000000oooo0?ooo`1l0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0
+8 at 3oool00`000000oooo0?ooo`0h0?ooo`8000004P3oool000T0oooo00D000000?ooo`3oool0oooo
+000000070?ooo`030000003oool0oooo00 at 0oooo0`0000140?ooo`030000003oool0oooo07/0oooo
+00<000000?ooo`3oool08`3oool00`000000oooo0?ooo`0Q0?ooo`030000003oool0oooo03T0oooo
+0P00000A0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`000000
+1P3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo07X0oooo00<000000?ooo`3oool0
+903oool00`000000oooo0?ooo`0O0?ooo`030000003oool0oooo03/0oooo0`00000?0?ooo`002 at 3o
+ool01 at 000000oooo0?ooo`3oool0000000H0oooo0P0000060?ooo`030000003oool0oooo04D0oooo
+00<000000?ooo`3oool0NP3oool00`000000oooo0?ooo`0T0?ooo`8000007`3oool2000003l0oooo
+0`00000=0?ooo`002P3oool3000000P0oooo00<000000?ooo`3oool0103oool00`000000oooo0?oo
+o`150?ooo`030000003oool0oooo07X0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?oo
+o`0L0?ooo`800000 at P3oool6000000P0oooo000L0?ooo`030000003oool0oooo04H0oooo00<00000
+0?ooo`3oool0N03oool00`000000oooo0?ooo`0W0?ooo`030000003oool0oooo01/0oooo00<00000
+0?ooo`3oool0C`3oool001`0oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`1h0?oo
+o`030000003oool0oooo02L0oooo0P00000K0?ooo`030000003oool0oooo0500oooo000L0?ooo`80
+0000A`3oool00`000000oooo0?ooo`1h0?ooo`030000003oool0oooo02P0oooo0P00000I0?ooo`80
+0000DP3oool001`0oooo00<000000?ooo`3oool0A`3oool00`000000oooo0?ooo`1g0?ooo`030000
+003oool0oooo02T0oooo00<000000?ooo`3oool05P3oool2000005<0oooo000L0?ooo`030000003o
+ool0oooo04L0oooo00<000000?ooo`3oool0MP3oool00`000000oooo0?ooo`0[0?ooo`030000003o
+ool0oooo01 at 0oooo0P00001D0?ooo`00703oool00`000000oooo0?ooo`170?ooo`030000003oool0
+oooo07H0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?ooo`0B0?ooo`800000E at 3oool0
+01`0oooo00<000000?ooo`3oool0B03oool00`000000oooo0?ooo`1e0?ooo`030000003oool0oooo
+02d0oooo00<000000?ooo`3oool0403oool2000005H0oooo000L0?ooo`800000B at 3oool00`000000
+oooo0?ooo`1e0?ooo`030000003oool0oooo02h0oooo00<000000?ooo`3oool03P3oool2000005L0
+oooo000L0?ooo`030000003oool0oooo04P0oooo00<000000?ooo`3oool0M03oool00`000000oooo
+0?ooo`0`0?ooo`800000303oool2000005T0oooo000L0?ooo`030000003oool0oooo04T0oooo00<0
+00000?ooo`3oool0L`3oool00`000000oooo0?ooo`0a0?ooo`<00000203oool3000005X0oooo000L
+0?ooo`030000003oool0oooo04T0oooo00<000000?ooo`3oool0L`3oool00`000000oooo0?ooo`0c
+0?ooo`X00000G03oool001`0oooo00<000000?ooo`3oool0B at 3oool00`000000oooo0?ooo`1c0?oo
+o`030000003oool0oooo09T0oooo000L0?ooo`030000003oool0oooo04X0oooo00<000000?ooo`3o
+ool0L at 3oool00`000000oooo0?ooo`2J0?ooo`00703oool2000004/0oooo00<000000?ooo`3oool0
+L at 3oool00`000000oooo0?ooo`2J0?ooo`00703oool00`000000oooo0?ooo`1:0?ooo`030000003o
+ool0oooo0740oooo00<000000?ooo`3oool0VP3oool001`0oooo00<000000?ooo`3oool0B`3oool0
+0`000000oooo0?ooo`1_0?ooo`030000003oool0oooo09/0oooo000L0?ooo`030000003oool0oooo
+04/0oooo00<000000?ooo`3oool0K`3oool00`000000oooo0?ooo`2K0?ooo`00703oool00`000000
+oooo0?ooo`1;0?ooo`030000003oool0oooo06l0oooo00<000000?ooo`3oool0V`3oool001`0oooo
+00<000000?ooo`3oool0C03oool00`000000oooo0?ooo`1^0?ooo`030000003oool0oooo09/0oooo
+000L0?ooo`800000C at 3oool00`000000oooo0?ooo`1]0?ooo`030000003oool0oooo09`0oooo000L
+0?ooo`030000003oool0oooo04`0oooo00<000000?ooo`3oool0K at 3oool00`000000oooo0?ooo`2L
+0?ooo`00703oool00`000000oooo0?ooo`1=0?ooo`030000003oool0oooo06`0oooo00<000000?oo
+o`3oool0W03oool000 at 0oooo0`0000030?ooo`030000003oool0oooo0080oooo00 at 000000?ooo`3o
+ool0oooo0`0000060?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3oool0K03oool00`00
+0000oooo0?ooo`2L0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?oo
+o`3oool000000`3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo04d0oooo00<00000
+0?ooo`3oool0J`3oool00`000000oooo0?ooo`2M0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0
+000000L0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`030?ooo`030000003oool0
+oooo04h0oooo00<000000?ooo`3oool0JP3oool00`000000oooo0?ooo`2M0?ooo`000`3oool01 at 00
+0000oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?oo
+o`030?ooo`<00000CP3oool00`000000oooo0?ooo`1Z0?ooo`030000003oool0oooo09d0oooo0003
+0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo000000020?ooo`@000001P3o
+ool00`000000oooo0?ooo`1>0?ooo`030000003oool0oooo06X0oooo00<000000?ooo`3oool0W at 3o
+ool000<0oooo00D000000?ooo`3oool0oooo000000060?ooo`8000000`3oool00`000000oooo0?oo
+o`060?ooo`030000003oool0oooo04l0oooo00<000000?ooo`3oool0J at 3oool00`000000oooo0?oo
+o`2M0?ooo`00103oool3000000P0oooo00 at 000000?ooo`3oool0oooo100000050?ooo`030000003o
+ool0oooo04l0oooo00<000000?ooo`3oool0J at 3oool00`000000oooo0?ooo`2M0?ooo`00703oool0
+0`000000oooo0?ooo`1?0?ooo`030000003oool0oooo06P0oooo00<000000?ooo`3oool0WP3oool0
+01`0oooo00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`1W0?ooo`030000003oool0oooo
+09h0oooo000L0?ooo`800000D at 3oool00`000000oooo0?ooo`1W0?ooo`030000003oool0oooo09h0
+oooo000L0?ooo`030000003oool0oooo0500oooo00<000000?ooo`3oool0IP3oool00`000000oooo
+0?ooo`2O0?ooo`00703oool00`000000oooo0?ooo`1A0?ooo`030000003oool0oooo06D0oooo00<0
+00000?ooo`3oool0W`3oool001`0oooo00<000000?ooo`3oool0D at 3oool00`000000oooo0?ooo`1U
+0?ooo`030000003oool0oooo09l0oooo000L0?ooo`030000003oool0oooo0540oooo00<000000?oo
+o`3oool0I at 3oool00`000000oooo0?ooo`2O0?ooo`00703oool2000005<0oooo00<000000?ooo`3o
+ool0H`3oool00`000000oooo0?ooo`2P0?ooo`00703oool00`000000oooo0?ooo`1B0?ooo`030000
+003oool0oooo06<0oooo00<000000?ooo`3oool0X03oool001`0oooo00<000000?ooo`3oool0DP3o
+ool00`000000oooo0?ooo`1S0?ooo`030000003oool0oooo0:00oooo000L0?ooo`030000003oool0
+oooo05<0oooo00<000000?ooo`3oool0HP3oool00`000000oooo0?ooo`2P0?ooo`00703oool00`00
+0000oooo0?ooo`1C0?ooo`030000003oool0oooo0640oooo00<000000?ooo`3oool0X at 3oool001`0
+oooo00<000000?ooo`3oool0D`3oool00`000000oooo0?ooo`1Q0?ooo`030000003oool0oooo0:40
+oooo000L0?ooo`800000E03oool00`000000oooo0?ooo`1Q0?ooo`030000003oool0oooo0:40oooo
+000L0?ooo`030000003oool0oooo05 at 0oooo00<000000?ooo`3oool0H03oool00`000000oooo0?oo
+o`2Q0?ooo`00703oool00`000000oooo0?ooo`1D0?ooo`030000003oool0oooo05l0oooo00<00000
+0?ooo`3oool0XP3oool001`0oooo00<000000?ooo`3oool0E03oool00`000000oooo0?ooo`1O0?oo
+o`030000003oool0oooo0:80oooo000L0?ooo`030000003oool0oooo05D0oooo00<000000?ooo`3o
+ool0GP3oool00`000000oooo0?ooo`2R0?ooo`00703oool00`000000oooo0?ooo`1E0?ooo`030000
+003oool0oooo05h0oooo00<000000?ooo`3oool0XP3oool001`0oooo0P00001F0?ooo`030000003o
+ool0oooo05d0oooo00<000000?ooo`3oool0X`3oool001`0oooo00<000000?ooo`3oool0EP3oool0
+0`000000oooo0?ooo`1L0?ooo`030000003oool0oooo0:<0oooo000L0?ooo`030000003oool0oooo
+05H0oooo00<000000?ooo`3oool0G03oool00`000000oooo0?ooo`2S0?ooo`002P3oool3000000<0
+oooo00<000000?ooo`000000100000050?ooo`030000003oool0oooo05H0oooo00<000000?ooo`3o
+ool0G03oool00`000000oooo0?ooo`2S0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0000000D0
+oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`1G0?ooo`030000003oool0oooo05X0
+oooo00<000000?ooo`3oool0Y03oool000T0oooo00D000000?ooo`3oool0oooo000000060?ooo`03
+0000003oool0oooo00D0oooo00<000000?ooo`3oool0E`3oool00`000000oooo0?ooo`1J0?ooo`03
+0000003oool0oooo0:@0oooo00090?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000
+oooo0?ooo`040?ooo`<00000E`3oool00`000000oooo0?ooo`1J0?ooo`030000003oool0oooo0:@0
+oooo00090?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`03
+0000003oool0oooo05P0oooo00<000000?ooo`3oool0F03oool00`000000oooo0?ooo`2U0?ooo`00
+2 at 3oool01@000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?oo
+o`030000003oool0oooo05P0oooo00<000000?ooo`3oool0F03oool00`000000oooo0?ooo`2U0?oo
+o`002P3oool3000000H0oooo0`0000060?ooo`030000003oool0oooo05P0oooo00<000000?ooo`3o
+ool0F03oool00`000000oooo0?ooo`2U0?ooo`00703oool00`000000oooo0?ooo`1I0?ooo`030000
+003oool0oooo05L0oooo00<000000?ooo`3oool0Y at 3oool001`0oooo00<000000?ooo`3oool0F at 3o
+ool00`000000oooo0?ooo`1F0?ooo`030000003oool0oooo0:H0oooo000L0?ooo`800000FP3oool0
+0`000000oooo0?ooo`1F0?ooo`030000003oool0oooo0:H0oooo000L0?ooo`030000003oool0oooo
+05X0oooo00<000000?ooo`3oool0E at 3oool00`000000oooo0?ooo`2V0?ooo`00703oool00`000000
+oooo0?ooo`1J0?ooo`030000003oool0oooo05D0oooo00<000000?ooo`3oool0YP3oool001`0oooo
+00<000000?ooo`3oool0FP3oool00`000000oooo0?ooo`1D0?ooo`030000003oool0oooo0:L0oooo
+000L0?ooo`030000003oool0oooo05/0oooo00<000000?ooo`3oool0D`3oool00`000000oooo0?oo
+o`2W0?ooo`00703oool2000005`0oooo00<000000?ooo`3oool0D`3oool00`000000oooo0?ooo`2W
+0?ooo`00703oool00`000000oooo0?ooo`1K0?ooo`030000003oool0oooo0580oooo00<000000?oo
+o`3oool0Z03oool001`0oooo00<000000?ooo`3oool0F`3oool00`000000oooo0?ooo`1B0?ooo`03
+0000003oool0oooo0:P0oooo000L0?ooo`030000003oool0oooo05`0oooo00<000000?ooo`3oool0
+D at 3oool00`000000oooo0?ooo`2X0?ooo`00703oool00`000000oooo0?ooo`1L0?ooo`030000003o
+ool0oooo0540oooo00<000000?ooo`3oool0Z03oool001`0oooo00<000000?ooo`3oool0G03oool0
+0`000000oooo0?ooo`1 at 0?ooo`030000003oool0oooo0:T0oooo000L0?ooo`800000GP3oool00`00
+0000oooo0?ooo`1?0?ooo`030000003oool0oooo0:T0oooo000L0?ooo`030000003oool0oooo05d0
+oooo00<000000?ooo`3oool0C`3oool00`000000oooo0?ooo`2Y0?ooo`00703oool00`000000oooo
+0?ooo`1M0?ooo`030000003oool0oooo04h0oooo00<000000?ooo`3oool0ZP3oool001`0oooo00<0
+00000?ooo`3oool0GP3oool00`000000oooo0?ooo`1=0?ooo`030000003oool0oooo0:X0oooo000L
+0?ooo`030000003oool0oooo05h0oooo00<000000?ooo`3oool0C at 3oool00`000000oooo0?ooo`2Z
+0?ooo`00703oool00`000000oooo0?ooo`1N0?ooo`030000003oool0oooo04d0oooo00<000000?oo
+o`3oool0ZP3oool001`0oooo0P00001P0?ooo`030000003oool0oooo04/0oooo00<000000?ooo`3o
+ool0Z`3oool001`0oooo00<000000?ooo`3oool0G`3oool00`000000oooo0?ooo`1;0?ooo`030000
+003oool0oooo0:/0oooo000L0?ooo`030000003oool0oooo05l0oooo00<000000?ooo`3oool0B`3o
+ool00`000000oooo0?ooo`2[0?ooo`00103oool3000000<0oooo00<000000?ooo`00000010000002
+0?ooo`<000001P3oool00`000000oooo0?ooo`1P0?ooo`030000003oool0oooo04T0oooo00<00000
+0?ooo`3oool0[03oool000<0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0
+oooo0080oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0600oooo00<0
+00000?ooo`3oool0B at 3oool00`000000oooo0?ooo`2/0?ooo`000`3oool01 at 000000oooo0?ooo`3o
+ool0000000H0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`030?ooo`030000003o
+ool0oooo0600oooo00<000000?ooo`3oool0B at 3oool00`000000oooo0?ooo`2/0?ooo`000`3oool0
+1 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo
+0?ooo`030?ooo`<00000H at 3oool00`000000oooo0?ooo`180?ooo`030000003oool0oooo0:`0oooo
+00030?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000H0oooo
+00<000000?ooo`3oool0H at 3oool00`000000oooo0?ooo`170?ooo`030000003oool0oooo0:d0oooo
+00030?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool000000080
+oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`1Q0?ooo`030000003oool0oooo04L0
+oooo00<000000?ooo`3oool0[@3oool000 at 0oooo0`0000060?ooo`<000000`3oool4000000D0oooo
+00<000000?ooo`3oool0HP3oool00`000000oooo0?ooo`160?ooo`030000003oool0oooo0:d0oooo
+000L0?ooo`030000003oool0oooo0680oooo00<000000?ooo`3oool0A at 3oool00`000000oooo0?oo
+o`2^0?ooo`00703oool00`000000oooo0?ooo`1S0?ooo`030000003oool0oooo04 at 0oooo00<00000
+0?ooo`3oool0[P3oool001`0oooo0P00001T0?ooo`030000003oool0oooo04 at 0oooo00<000000?oo
+o`3oool0[P3oool001`0oooo00<000000?ooo`3oool0H`3oool00`000000oooo0?ooo`130?ooo`03
+0000003oool0oooo0:l0oooo000L0?ooo`030000003oool0oooo06 at 0oooo00<000000?ooo`3oool0
+ at P3oool00`000000oooo0?ooo`2_0?ooo`00703oool00`000000oooo0?ooo`1T0?ooo`030000003o
+ool0oooo0480oooo00<000000?ooo`3oool0[`3oool001`0oooo00<000000?ooo`3oool0I03oool0
+0`000000oooo0?ooo`110?ooo`030000003oool0oooo0;00oooo000L0?ooo`800000IP3oool00`00
+0000oooo0?ooo`100?ooo`030000003oool0oooo0;00oooo000L0?ooo`030000003oool0oooo06D0
+oooo00<000000?ooo`3oool0 at 03oool00`000000oooo0?ooo`2`0?ooo`00703oool00`000000oooo
+0?ooo`1U0?ooo`030000003oool0oooo03l0oooo00<000000?ooo`3oool0/@3oool001`0oooo00<0
+00000?ooo`3oool0IP3oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo0;40oooo000L
+0?ooo`030000003oool0oooo06H0oooo00<000000?ooo`3oool0?P3oool00`000000oooo0?ooo`2a
+0?ooo`00703oool00`000000oooo0?ooo`1V0?ooo`030000003oool0oooo03d0oooo00<000000?oo
+o`3oool0/P3oool001`0oooo0P00001X0?ooo`030000003oool0oooo03`0oooo00<000000?ooo`3o
+ool0/P3oool001`0oooo00<000000?ooo`3oool0I`3oool00`000000oooo0?ooo`0l0?ooo`030000
+003oool0oooo0;80oooo000L0?ooo`030000003oool0oooo06P0oooo00<000000?ooo`3oool0>P3o
+ool00`000000oooo0?ooo`2c0?ooo`00703oool00`000000oooo0?ooo`1X0?ooo`030000003oool0
+oooo03X0oooo00<000000?ooo`3oool0/`3oool001`0oooo00<000000?ooo`3oool0J03oool00`00
+0000oooo0?ooo`0j0?ooo`030000003oool0oooo0;<0oooo000L0?ooo`030000003oool0oooo06T0
+oooo00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`2d0?ooo`00703oool2000006X0oooo
+00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`2d0?ooo`00703oool00`000000oooo0?oo
+o`1Y0?ooo`800000>@3oool00`000000oooo0?ooo`2d0?ooo`00703oool00`000000oooo0?ooo`1Z
+0?ooo`030000003oool0oooo03H0oooo00<000000?ooo`3oool0]@3oool000X0oooo0`0000030?oo
+o`030000003oool0oooo00<000001P3oool00`000000oooo0?ooo`1Z0?ooo`030000003oool0oooo
+03H0oooo00<000000?ooo`3oool0]@3oool000T0oooo00D000000?ooo`3oool0oooo000000040?oo
+o`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`1[0?ooo`030000003oool0
+oooo03D0oooo00<000000?ooo`3oool0]@3oool000T0oooo00D000000?ooo`3oool0oooo00000008
+0?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0J`3oool00`000000oooo0?ooo`0d
+0?ooo`030000003oool0oooo0;H0oooo00090?ooo`050000003oool0oooo0?ooo`0000001P3oool2
+000000H0oooo0`00001[0?ooo`800000=@3oool00`000000oooo0?ooo`2f0?ooo`002 at 3oool01@00
+0000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`1/
+0?ooo`030000003oool0oooo0380oooo00<000000?ooo`3oool0]`3oool000T0oooo00D000000?oo
+o`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?oo
+o`1/0?ooo`030000003oool0oooo0380oooo00<000000?ooo`3oool0]`3oool000X0oooo0`000006
+0?ooo`<000001P3oool00`000000oooo0?ooo`1]0?ooo`030000003oool0oooo0340oooo00<00000
+0?ooo`3oool0]`3oool001`0oooo00<000000?ooo`3oool0K at 3oool00`000000oooo0?ooo`0`0?oo
+o`030000003oool0oooo0;P0oooo000L0?ooo`030000003oool0oooo06h0oooo00<000000?ooo`3o
+ool0;`3oool00`000000oooo0?ooo`2h0?ooo`00703oool2000006l0oooo00<000000?ooo`3oool0
+;P3oool200000;X0oooo000L0?ooo`030000003oool0oooo06h0oooo0P00000_0?ooo`030000003o
+ool0oooo0;T0oooo000L0?ooo`030000003oool0oooo06l0oooo00<000000?ooo`3oool0;@3oool0
+0`000000oooo0?ooo`2i0?ooo`00703oool00`000000oooo0?ooo`1_0?ooo`030000003oool0oooo
+02`0oooo00<000000?ooo`3oool0^P3oool001`0oooo00<000000?ooo`3oool0L03oool00`000000
+oooo0?ooo`0[0?ooo`030000003oool0oooo0;X0oooo000L0?ooo`030000003oool0oooo0700oooo
+00<000000?ooo`3oool0:P3oool00`000000oooo0?ooo`2k0?ooo`00703oool200000780oooo00<0
+00000?ooo`3oool0:@3oool00`000000oooo0?ooo`2k0?ooo`00703oool00`000000oooo0?ooo`1a
+0?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0_03oool001`0oooo00<000000?oo
+o`3oool0LP3oool00`000000oooo0?ooo`0W0?ooo`030000003oool0oooo0;`0oooo000L0?ooo`03
+0000003oool0oooo0780oooo00<000000?ooo`3oool09P3oool200000;h0oooo000L0?ooo`030000
+003oool0oooo07<0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`2m0?ooo`00703o
+ool2000007 at 0oooo00<000000?ooo`3oool0903oool200000;l0oooo000L0?ooo`030000003oool0
+oooo07 at 0oooo00<000000?ooo`3oool08`3oool00`000000oooo0?ooo`2n0?ooo`00703oool00`00
+0000oooo0?ooo`1d0?ooo`8000008`3oool200000<00oooo000L0?ooo`030000003oool0oooo07D0
+oooo00<000000?ooo`3oool08 at 3oool00`000000oooo0?ooo`2o0?ooo`00703oool00`000000oooo
+0?ooo`1f0?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool0`03oool001`0oooo00<0
+00000?ooo`3oool0MP3oool00`000000oooo0?ooo`0O0?ooo`030000003oool0oooo0<00oooo000L
+0?ooo`800000N03oool00`000000oooo0?ooo`0M0?ooo`030000003oool0oooo0<40oooo000L0?oo
+o`030000003oool0oooo07L0oooo0P00000M0?ooo`800000``3oool001`0oooo00<000000?ooo`3o
+ool0N03oool00`000000oooo0?ooo`0K0?ooo`030000003oool0oooo0<80oooo00040?ooo`<00000
+0`3oool00`000000oooo0?ooo`03000000<0oooo0`0000060?ooo`030000003oool0oooo07T0oooo
+00<000000?ooo`3oool06 at 3oool00`000000oooo0?ooo`330?ooo`000`3oool01 at 000000oooo0?oo
+o`3oool0000000 at 0oooo00L000000?ooo`3oool0oooo0000003oool0000000<0oooo00<000000?oo
+o`3oool00`3oool00`000000oooo0?ooo`1i0?ooo`8000006 at 3oool200000<D0oooo00030?ooo`05
+0000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo
+00<0oooo00<000000?ooo`3oool0NP3oool2000001P0oooo00<000000?ooo`3oool0a03oool000<0
+oooo00D000000?ooo`3oool0oooo000000060?ooo`8000000P3oool01 at 000000oooo0?ooo`3oool0
+000000D0oooo0`00001k0?ooo`030000003oool0oooo01D0oooo00<000000?ooo`3oool0a at 3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool0000000<000001P3oool0
+0`000000oooo0?ooo`1l0?ooo`030000003oool0oooo01<0oooo00<000000?ooo`3oool0aP3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3o
+ool00`000000oooo0?ooo`060?ooo`030000003oool0oooo07d0oooo00<000000?ooo`3oool04 at 3o
+ool200000<P0oooo00040?ooo`<000001P3oool3000000<0oooo100000050?ooo`030000003oool0
+oooo07h0oooo00<000000?ooo`3oool03`3oool200000<T0oooo000L0?ooo`030000003oool0oooo
+07l0oooo0P00000>0?ooo`800000bP3oool001`0oooo00<000000?ooo`3oool0P03oool2000000/0
+oooo0P00003<0?ooo`00703oool200000880oooo0`0000070?ooo`<00000c at 3oool001`0oooo00<0
+00000?ooo`3oool0P`3oool900000<l0oooo000L0?ooo`030000003oool0oooo0?l0ooooG03oool0
+01`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0
+oooo000L0?ooo`030000003oool0oooo0?l0ooooG03oool001`0oooo0P00003o0?oooed0oooo000L
+0?ooo`030000003oool0oooo0?l0ooooG03oool00?l0ooooN`3oool00?l0ooooN`3oool00?l0oooo
+N`3oool00?l0ooooN`3oool00?l0ooooN`3oool00001\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-85.6377, -0.0193076, 
+  3.00749, 0.00172172}}],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.62748 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .09609 -24 -4.5 ]
+[.01131 .09609 0 4.5 ]
+[.01131 .17746 -18 -4.5 ]
+[.01131 .17746 0 4.5 ]
+[.01131 .25884 -24 -4.5 ]
+[.01131 .25884 0 4.5 ]
+[.01131 .34021 -18 -4.5 ]
+[.01131 .34021 0 4.5 ]
+[.01131 .42159 -24 -4.5 ]
+[.01131 .42159 0 4.5 ]
+[.01131 .50296 -18 -4.5 ]
+[.01131 .50296 0 4.5 ]
+[.01131 .58433 -24 -4.5 ]
+[.01131 .58433 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .09609 m
+.03006 .09609 L
+s
+[(0.05)] .01131 .09609 1 0 Mshowa
+.02381 .17746 m
+.03006 .17746 L
+s
+[(0.1)] .01131 .17746 1 0 Mshowa
+.02381 .25884 m
+.03006 .25884 L
+s
+[(0.15)] .01131 .25884 1 0 Mshowa
+.02381 .34021 m
+.03006 .34021 L
+s
+[(0.2)] .01131 .34021 1 0 Mshowa
+.02381 .42159 m
+.03006 .42159 L
+s
+[(0.25)] .01131 .42159 1 0 Mshowa
+.02381 .50296 m
+.03006 .50296 L
+s
+[(0.3)] .01131 .50296 1 0 Mshowa
+.02381 .58433 m
+.03006 .58433 L
+s
+[(0.35)] .01131 .58433 1 0 Mshowa
+.125 Mabswid
+.02381 .03099 m
+.02756 .03099 L
+s
+.02381 .04726 m
+.02756 .04726 L
+s
+.02381 .06354 m
+.02756 .06354 L
+s
+.02381 .07981 m
+.02756 .07981 L
+s
+.02381 .11236 m
+.02756 .11236 L
+s
+.02381 .12864 m
+.02756 .12864 L
+s
+.02381 .14491 m
+.02756 .14491 L
+s
+.02381 .16119 m
+.02756 .16119 L
+s
+.02381 .19374 m
+.02756 .19374 L
+s
+.02381 .21001 m
+.02756 .21001 L
+s
+.02381 .22629 m
+.02756 .22629 L
+s
+.02381 .24256 m
+.02756 .24256 L
+s
+.02381 .27511 m
+.02756 .27511 L
+s
+.02381 .29139 m
+.02756 .29139 L
+s
+.02381 .30766 m
+.02756 .30766 L
+s
+.02381 .32394 m
+.02756 .32394 L
+s
+.02381 .35649 m
+.02756 .35649 L
+s
+.02381 .37276 m
+.02756 .37276 L
+s
+.02381 .38904 m
+.02756 .38904 L
+s
+.02381 .40531 m
+.02756 .40531 L
+s
+.02381 .43786 m
+.02756 .43786 L
+s
+.02381 .45414 m
+.02756 .45414 L
+s
+.02381 .47041 m
+.02756 .47041 L
+s
+.02381 .48669 m
+.02756 .48669 L
+s
+.02381 .51924 m
+.02756 .51924 L
+s
+.02381 .53551 m
+.02756 .53551 L
+s
+.02381 .55178 m
+.02756 .55178 L
+s
+.02381 .56806 m
+.02756 .56806 L
+s
+.02381 .60061 m
+.02756 .60061 L
+s
+.02381 .61688 m
+.02756 .61688 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .01472 m
+.02567 .01472 L
+.0266 .01473 L
+.02753 .01475 L
+.02846 .01478 L
+.02938 .01481 L
+.03031 .01485 L
+.03124 .0149 L
+.03217 .01496 L
+.0331 .01502 L
+.03403 .0151 L
+.03496 .01518 L
+.03589 .01526 L
+.03682 .01536 L
+.03775 .01546 L
+.03868 .01557 L
+.03961 .01569 L
+.04053 .01582 L
+.04146 .01595 L
+.04239 .01609 L
+.04332 .01623 L
+.04425 .01639 L
+.04518 .01655 L
+.04611 .01672 L
+.04704 .01689 L
+.04797 .01708 L
+.0489 .01727 L
+.04983 .01746 L
+.05075 .01767 L
+.05168 .01788 L
+.05261 .0181 L
+.05354 .01832 L
+.05447 .01855 L
+.0554 .01879 L
+.05633 .01904 L
+.05726 .01929 L
+.05819 .01955 L
+.05912 .01981 L
+.06005 .02008 L
+.06098 .02036 L
+.0619 .02064 L
+.06283 .02093 L
+.06376 .02122 L
+.06469 .02153 L
+.06562 .02183 L
+.06655 .02215 L
+.06748 .02247 L
+.06841 .02279 L
+.06934 .02312 L
+.07027 .02346 L
+Mistroke
+.0712 .0238 L
+.07213 .02414 L
+.07305 .0245 L
+.07398 .02485 L
+.07491 .02521 L
+.07584 .02558 L
+.07677 .02595 L
+.0777 .02633 L
+.07863 .02671 L
+.07956 .0271 L
+.08049 .02749 L
+.08142 .02788 L
+.08235 .02828 L
+.08328 .02868 L
+.0842 .02909 L
+.08513 .0295 L
+.08606 .02992 L
+.08699 .03034 L
+.08792 .03076 L
+.08885 .03118 L
+.08978 .03161 L
+.09071 .03204 L
+.09164 .03248 L
+.09257 .03292 L
+.0935 .03336 L
+.09443 .0338 L
+.09535 .03425 L
+.09628 .0347 L
+.09721 .03515 L
+.09814 .0356 L
+.09907 .03606 L
+.1 .03652 L
+.10093 .03698 L
+.10186 .03744 L
+.10279 .0379 L
+.10372 .03837 L
+.10465 .03883 L
+.10557 .0393 L
+.1065 .03977 L
+.10743 .04024 L
+.10836 .04071 L
+.10929 .04118 L
+.11022 .04165 L
+.11115 .04212 L
+.11208 .04259 L
+.11301 .04306 L
+.11394 .04353 L
+.11487 .04401 L
+.1158 .04448 L
+.11672 .04495 L
+Mistroke
+.11765 .04542 L
+.11858 .04588 L
+.11951 .04635 L
+.12044 .04682 L
+.12137 .04728 L
+.1223 .04775 L
+.12323 .04821 L
+.12416 .04867 L
+.12509 .04913 L
+.12602 .04959 L
+.12695 .05004 L
+.12787 .05049 L
+.1288 .05094 L
+.12973 .05139 L
+.13066 .05184 L
+.13159 .05228 L
+.13252 .05272 L
+.13345 .05315 L
+.13438 .05358 L
+.13531 .05401 L
+.13624 .05443 L
+.13717 .05485 L
+.1381 .05527 L
+.13902 .05568 L
+.13995 .05609 L
+.14088 .05649 L
+.14181 .05689 L
+.14274 .05729 L
+.14367 .05767 L
+.1446 .05806 L
+.14553 .05843 L
+.14646 .05881 L
+.14739 .05917 L
+.14832 .05953 L
+.14925 .05989 L
+.15017 .06024 L
+.1511 .06058 L
+.15203 .06092 L
+.15296 .06125 L
+.15389 .06157 L
+.15482 .06188 L
+.15575 .06219 L
+.15668 .06249 L
+.15761 .06279 L
+.15854 .06307 L
+.15947 .06335 L
+.16039 .06362 L
+.16132 .06389 L
+.16225 .06414 L
+.16318 .06439 L
+Mistroke
+.16411 .06462 L
+.16504 .06485 L
+.16597 .06507 L
+.1669 .06528 L
+.16783 .06549 L
+.16876 .06568 L
+.16969 .06586 L
+.17062 .06604 L
+.17154 .0662 L
+.17247 .06635 L
+.1734 .0665 L
+.17433 .06663 L
+.17526 .06675 L
+.17619 .06687 L
+.17712 .06697 L
+.17805 .06706 L
+.17898 .06714 L
+.17991 .06721 L
+.18084 .06727 L
+.18177 .06732 L
+.18269 .06735 L
+.18362 .06737 L
+.18455 .06739 L
+.18548 .06739 L
+.18641 .06737 L
+.18734 .06735 L
+.18827 .06731 L
+.1892 .06726 L
+.19013 .0672 L
+.19106 .06713 L
+.19199 .06704 L
+.19292 .06694 L
+.19384 .06683 L
+.19477 .0667 L
+.1957 .06656 L
+.19663 .0664 L
+.19756 .06624 L
+.19849 .06605 L
+.19942 .06586 L
+.20035 .06565 L
+.20128 .06543 L
+.20221 .06519 L
+.20314 .06494 L
+.20407 .06467 L
+.20499 .06439 L
+.20592 .06409 L
+.20685 .06378 L
+.20778 .06346 L
+.20871 .06312 L
+.20964 .06276 L
+Mistroke
+.21057 .06239 L
+.2115 .062 L
+.21243 .0616 L
+.21336 .06118 L
+.21429 .06075 L
+.21521 .0603 L
+.21614 .05983 L
+.21707 .05935 L
+.218 .05885 L
+.21893 .05834 L
+.21986 .05781 L
+.22079 .05727 L
+.22172 .0567 L
+.22265 .05612 L
+.22358 .05553 L
+.22451 .05492 L
+.22544 .05429 L
+.22636 .05364 L
+.22729 .05298 L
+.22822 .0523 L
+.22915 .0516 L
+.23008 .05089 L
+.23101 .05016 L
+.23194 .04941 L
+.23287 .04864 L
+.2338 .04786 L
+.23473 .04706 L
+.23566 .04624 L
+.23659 .04541 L
+.23751 .04455 L
+.23844 .04368 L
+.23937 .04279 L
+.2403 .04189 L
+.24123 .04096 L
+.24216 .04002 L
+.24309 .03906 L
+.24402 .03808 L
+.24495 .03709 L
+.24588 .03607 L
+.24681 .03504 L
+.24774 .03399 L
+.24866 .03292 L
+.24959 .03184 L
+.25052 .03073 L
+.25145 .02961 L
+.25238 .02847 L
+.25331 .02731 L
+.25424 .02613 L
+.25517 .02494 L
+.2561 .02372 L
+Mistroke
+.25703 .02249 L
+.25796 .02124 L
+.25889 .01997 L
+.25981 .01869 L
+.26074 .01738 L
+.26167 .01606 L
+.2626 .01472 L
+.26353 .01608 L
+.26446 .01745 L
+.26539 .01885 L
+.26632 .02027 L
+.26725 .0217 L
+.26818 .02315 L
+.26911 .02462 L
+.27003 .02611 L
+.27096 .02761 L
+.27189 .02914 L
+.27282 .03068 L
+.27375 .03224 L
+.27468 .03382 L
+.27561 .03542 L
+.27654 .03703 L
+.27747 .03866 L
+.2784 .04031 L
+.27933 .04198 L
+.28026 .04367 L
+.28118 .04537 L
+.28211 .04709 L
+.28304 .04883 L
+.28397 .05059 L
+.2849 .05236 L
+.28583 .05416 L
+.28676 .05597 L
+.28769 .05779 L
+.28862 .05964 L
+.28955 .0615 L
+.29048 .06338 L
+.29141 .06527 L
+.29233 .06718 L
+.29326 .06911 L
+.29419 .07106 L
+.29512 .07302 L
+.29605 .075 L
+.29698 .077 L
+.29791 .07901 L
+.29884 .08104 L
+.29977 .08308 L
+.3007 .08515 L
+.30163 .08722 L
+.30256 .08932 L
+Mistroke
+.30348 .09143 L
+.30441 .09355 L
+.30534 .09569 L
+.30627 .09785 L
+.3072 .10002 L
+.30813 .10221 L
+.30906 .10441 L
+.30999 .10663 L
+.31092 .10886 L
+.31185 .11111 L
+.31278 .11337 L
+.3137 .11565 L
+.31463 .11794 L
+.31556 .12024 L
+.31649 .12256 L
+.31742 .1249 L
+.31835 .12724 L
+.31928 .12961 L
+.32021 .13198 L
+.32114 .13437 L
+.32207 .13677 L
+.323 .13919 L
+.32393 .14161 L
+.32485 .14406 L
+.32578 .14651 L
+.32671 .14898 L
+.32764 .15145 L
+.32857 .15395 L
+.3295 .15645 L
+.33043 .15896 L
+.33136 .16149 L
+.33229 .16403 L
+.33322 .16658 L
+.33415 .16914 L
+.33508 .17171 L
+.336 .17429 L
+.33693 .17689 L
+.33786 .17949 L
+.33879 .18211 L
+.33972 .18473 L
+.34065 .18737 L
+.34158 .19001 L
+.34251 .19267 L
+.34344 .19533 L
+.34437 .198 L
+.3453 .20068 L
+.34623 .20337 L
+.34715 .20607 L
+.34808 .20878 L
+.34901 .2115 L
+Mistroke
+.34994 .21422 L
+.35087 .21695 L
+.3518 .21969 L
+.35273 .22244 L
+.35366 .22519 L
+.35459 .22795 L
+.35552 .23072 L
+.35645 .23349 L
+.35738 .23628 L
+.3583 .23906 L
+.35923 .24185 L
+.36016 .24465 L
+.36109 .24746 L
+.36202 .25027 L
+.36295 .25308 L
+.36388 .2559 L
+.36481 .25872 L
+.36574 .26155 L
+.36667 .26438 L
+.3676 .26722 L
+.36852 .27006 L
+.36945 .2729 L
+.37038 .27574 L
+.37131 .27859 L
+.37224 .28144 L
+.37317 .2843 L
+.3741 .28716 L
+.37503 .29001 L
+.37596 .29287 L
+.37689 .29573 L
+.37782 .2986 L
+.37875 .30146 L
+.37967 .30433 L
+.3806 .30719 L
+.38153 .31006 L
+.38246 .31292 L
+.38339 .31579 L
+.38432 .31865 L
+.38525 .32152 L
+.38618 .32438 L
+.38711 .32724 L
+.38804 .3301 L
+.38897 .33296 L
+.3899 .33582 L
+.39082 .33867 L
+.39175 .34153 L
+.39268 .34438 L
+.39361 .34722 L
+.39454 .35007 L
+.39547 .35291 L
+Mistroke
+.3964 .35574 L
+.39733 .35858 L
+.39826 .3614 L
+.39919 .36423 L
+.40012 .36705 L
+.40105 .36986 L
+.40197 .37267 L
+.4029 .37547 L
+.40383 .37827 L
+.40476 .38106 L
+.40569 .38385 L
+.40662 .38662 L
+.40755 .3894 L
+.40848 .39216 L
+.40941 .39492 L
+.41034 .39767 L
+.41127 .40041 L
+.4122 .40314 L
+.41312 .40587 L
+.41405 .40859 L
+.41498 .41129 L
+.41591 .41399 L
+.41684 .41668 L
+.41777 .41936 L
+.4187 .42203 L
+.41963 .42469 L
+.42056 .42734 L
+.42149 .42998 L
+.42242 .43261 L
+.42334 .43523 L
+.42427 .43783 L
+.4252 .44043 L
+.42613 .44301 L
+.42706 .44558 L
+.42799 .44813 L
+.42892 .45068 L
+.42985 .45321 L
+.43078 .45573 L
+.43171 .45823 L
+.43264 .46072 L
+.43357 .4632 L
+.43449 .46566 L
+.43542 .46811 L
+.43635 .47055 L
+.43728 .47297 L
+.43821 .47537 L
+.43914 .47776 L
+.44007 .48013 L
+.441 .48249 L
+.44193 .48483 L
+Mistroke
+.44286 .48715 L
+.44379 .48946 L
+.44472 .49175 L
+.44564 .49402 L
+.44657 .49628 L
+.4475 .49852 L
+.44843 .50074 L
+.44936 .50294 L
+.45029 .50513 L
+.45122 .50729 L
+.45215 .50944 L
+.45308 .51157 L
+.45401 .51368 L
+.45494 .51577 L
+.45587 .51784 L
+.45679 .51989 L
+.45772 .52192 L
+.45865 .52393 L
+.45958 .52592 L
+.46051 .52788 L
+.46144 .52983 L
+.46237 .53176 L
+.4633 .53366 L
+.46423 .53555 L
+.46516 .53741 L
+.46609 .53925 L
+.46702 .54107 L
+.46794 .54286 L
+.46887 .54463 L
+.4698 .54638 L
+.47073 .54811 L
+.47166 .54981 L
+.47259 .55149 L
+.47352 .55315 L
+.47445 .55478 L
+.47538 .55639 L
+.47631 .55797 L
+.47724 .55953 L
+.47816 .56107 L
+.47909 .56258 L
+.48002 .56407 L
+.48095 .56553 L
+.48188 .56696 L
+.48281 .56837 L
+.48374 .56976 L
+.48467 .57112 L
+.4856 .57245 L
+.48653 .57376 L
+.48746 .57504 L
+.48839 .57629 L
+Mistroke
+.48931 .57752 L
+.49024 .57872 L
+.49117 .57989 L
+.4921 .58104 L
+.49303 .58216 L
+.49396 .58325 L
+.49489 .58431 L
+.49582 .58535 L
+.49675 .58636 L
+.49768 .58734 L
+.49861 .5883 L
+.49954 .58922 L
+.50046 .59012 L
+.50139 .59099 L
+.50232 .59183 L
+.50325 .59264 L
+.50418 .59342 L
+.50511 .59417 L
+.50604 .5949 L
+.50697 .59559 L
+.5079 .59626 L
+.50883 .5969 L
+.50976 .5975 L
+.51069 .59808 L
+.51161 .59863 L
+.51254 .59915 L
+.51347 .59963 L
+.5144 .60009 L
+.51533 .60052 L
+.51626 .60092 L
+.51719 .60129 L
+.51812 .60162 L
+.51905 .60193 L
+.51998 .60221 L
+.52091 .60246 L
+.52184 .60267 L
+.52276 .60286 L
+.52369 .60301 L
+.52462 .60313 L
+.52555 .60323 L
+.52648 .60329 L
+.52741 .60332 L
+.52834 .60332 L
+.52927 .60329 L
+.5302 .60323 L
+.53113 .60313 L
+.53206 .60301 L
+.53298 .60285 L
+.53391 .60266 L
+.53484 .60245 L
+Mistroke
+.53577 .6022 L
+.5367 .60191 L
+.53763 .6016 L
+.53856 .60126 L
+.53949 .60088 L
+.54042 .60048 L
+.54135 .60004 L
+.54228 .59957 L
+.54321 .59907 L
+.54413 .59854 L
+.54506 .59797 L
+.54599 .59738 L
+.54692 .59675 L
+.54785 .59609 L
+.54878 .59541 L
+.54971 .59468 L
+.55064 .59393 L
+.55157 .59315 L
+.5525 .59234 L
+.55343 .59149 L
+.55436 .59061 L
+.55528 .5897 L
+.55621 .58876 L
+.55714 .58779 L
+.55807 .58679 L
+.559 .58576 L
+.55993 .5847 L
+.56086 .5836 L
+.56179 .58248 L
+.56272 .58132 L
+.56365 .58013 L
+.56458 .57892 L
+.56551 .57767 L
+.56643 .57639 L
+.56736 .57508 L
+.56829 .57374 L
+.56922 .57237 L
+.57015 .57097 L
+.57108 .56954 L
+.57201 .56808 L
+.57294 .56659 L
+.57387 .56507 L
+.5748 .56352 L
+.57573 .56194 L
+.57666 .56033 L
+.57758 .55869 L
+.57851 .55703 L
+.57944 .55533 L
+.58037 .5536 L
+.5813 .55185 L
+Mistroke
+.58223 .55006 L
+.58316 .54825 L
+.58409 .54641 L
+.58502 .54454 L
+.58595 .54264 L
+.58688 .54071 L
+.5878 .53876 L
+.58873 .53678 L
+.58966 .53477 L
+.59059 .53273 L
+.59152 .53066 L
+.59245 .52857 L
+.59338 .52645 L
+.59431 .5243 L
+.59524 .52213 L
+.59617 .51992 L
+.5971 .5177 L
+.59803 .51544 L
+.59895 .51316 L
+.59988 .51086 L
+.60081 .50852 L
+.60174 .50616 L
+.60267 .50378 L
+.6036 .50137 L
+.60453 .49894 L
+.60546 .49648 L
+.60639 .49399 L
+.60732 .49149 L
+.60825 .48895 L
+.60918 .4864 L
+.6101 .48381 L
+.61103 .48121 L
+.61196 .47858 L
+.61289 .47593 L
+.61382 .47325 L
+.61475 .47055 L
+.61568 .46783 L
+.61661 .46509 L
+.61754 .46232 L
+.61847 .45954 L
+.6194 .45673 L
+.62033 .45389 L
+.62125 .45104 L
+.62218 .44817 L
+.62311 .44527 L
+.62404 .44236 L
+.62497 .43942 L
+.6259 .43646 L
+.62683 .43349 L
+.62776 .43049 L
+Mistroke
+.62869 .42747 L
+.62962 .42444 L
+.63055 .42138 L
+.63148 .41831 L
+.6324 .41522 L
+.63333 .41211 L
+.63426 .40898 L
+.63519 .40584 L
+.63612 .40267 L
+.63705 .39949 L
+.63798 .39629 L
+.63891 .39308 L
+.63984 .38985 L
+.64077 .3866 L
+.6417 .38334 L
+.64262 .38006 L
+.64355 .37677 L
+.64448 .37346 L
+.64541 .37013 L
+.64634 .3668 L
+.64727 .36344 L
+.6482 .36008 L
+.64913 .3567 L
+.65006 .3533 L
+.65099 .3499 L
+.65192 .34648 L
+.65285 .34305 L
+.65377 .3396 L
+.6547 .33615 L
+.65563 .33268 L
+.65656 .3292 L
+.65749 .32571 L
+.65842 .32221 L
+.65935 .3187 L
+.66028 .31517 L
+.66121 .31164 L
+.66214 .3081 L
+.66307 .30455 L
+.664 .30099 L
+.66492 .29742 L
+.66585 .29385 L
+.66678 .29026 L
+.66771 .28667 L
+.66864 .28307 L
+.66957 .27946 L
+.6705 .27585 L
+.67143 .27223 L
+.67236 .2686 L
+.67329 .26497 L
+.67422 .26133 L
+Mistroke
+.67515 .25769 L
+.67607 .25404 L
+.677 .25038 L
+.67793 .24673 L
+.67886 .24307 L
+.67979 .2394 L
+.68072 .23573 L
+.68165 .23206 L
+.68258 .22838 L
+.68351 .22471 L
+.68444 .22103 L
+.68537 .21735 L
+.6863 .21366 L
+.68722 .20998 L
+.68815 .2063 L
+.68908 .20261 L
+.69001 .19893 L
+.69094 .19524 L
+.69187 .19155 L
+.6928 .18787 L
+.69373 .18419 L
+.69466 .1805 L
+.69559 .17682 L
+.69652 .17315 L
+.69744 .16947 L
+.69837 .1658 L
+.6993 .16213 L
+.70023 .15846 L
+.70116 .15479 L
+.70209 .15113 L
+.70302 .14748 L
+.70395 .14383 L
+.70488 .14018 L
+.70581 .13654 L
+.70674 .1329 L
+.70767 .12927 L
+.70859 .12565 L
+.70952 .12203 L
+.71045 .11842 L
+.71138 .11482 L
+.71231 .11122 L
+.71324 .10763 L
+.71417 .10405 L
+.7151 .10048 L
+.71603 .09691 L
+.71696 .09336 L
+.71789 .08981 L
+.71882 .08628 L
+.71974 .08275 L
+.72067 .07923 L
+Mistroke
+.7216 .07572 L
+.72253 .07223 L
+.72346 .06874 L
+.72439 .06527 L
+.72532 .06181 L
+.72625 .05836 L
+.72718 .05492 L
+.72811 .05149 L
+.72904 .04808 L
+.72997 .04468 L
+.73089 .04129 L
+.73182 .03792 L
+.73275 .03456 L
+.73368 .03122 L
+.73461 .02789 L
+.73554 .02457 L
+.73647 .02127 L
+.7374 .01798 L
+.73833 .01472 L
+.73926 .01797 L
+.74019 .02121 L
+.74111 .02443 L
+.74204 .02763 L
+.74297 .03082 L
+.7439 .03399 L
+.74483 .03714 L
+.74576 .04028 L
+.74669 .0434 L
+.74762 .04649 L
+.74855 .04958 L
+.74948 .05264 L
+.75041 .05568 L
+.75134 .0587 L
+.75226 .06171 L
+.75319 .06469 L
+.75412 .06765 L
+.75505 .0706 L
+.75598 .07352 L
+.75691 .07642 L
+.75784 .0793 L
+.75877 .08216 L
+.7597 .085 L
+.76063 .08782 L
+.76156 .09061 L
+.76249 .09338 L
+.76341 .09613 L
+.76434 .09886 L
+.76527 .10157 L
+.7662 .10425 L
+.76713 .10691 L
+Mistroke
+.76806 .10954 L
+.76899 .11215 L
+.76992 .11474 L
+.77085 .1173 L
+.77178 .11984 L
+.77271 .12235 L
+.77364 .12484 L
+.77456 .1273 L
+.77549 .12974 L
+.77642 .13216 L
+.77735 .13455 L
+.77828 .13691 L
+.77921 .13924 L
+.78014 .14155 L
+.78107 .14384 L
+.782 .1461 L
+.78293 .14833 L
+.78386 .15053 L
+.78479 .15271 L
+.78571 .15486 L
+.78664 .15698 L
+.78757 .15908 L
+.7885 .16114 L
+.78943 .16318 L
+.79036 .1652 L
+.79129 .16718 L
+.79222 .16914 L
+.79315 .17106 L
+.79408 .17296 L
+.79501 .17483 L
+.79593 .17668 L
+.79686 .17849 L
+.79779 .18027 L
+.79872 .18203 L
+.79965 .18375 L
+.80058 .18545 L
+.80151 .18712 L
+.80244 .18875 L
+.80337 .19036 L
+.8043 .19194 L
+.80523 .19349 L
+.80616 .195 L
+.80708 .19649 L
+.80801 .19795 L
+.80894 .19938 L
+.80987 .20077 L
+.8108 .20214 L
+.81173 .20347 L
+.81266 .20478 L
+.81359 .20605 L
+Mistroke
+.81452 .2073 L
+.81545 .20851 L
+.81638 .20969 L
+.81731 .21084 L
+.81823 .21196 L
+.81916 .21305 L
+.82009 .21411 L
+.82102 .21513 L
+.82195 .21613 L
+.82288 .21709 L
+.82381 .21803 L
+.82474 .21893 L
+.82567 .2198 L
+.8266 .22064 L
+.82753 .22144 L
+.82846 .22222 L
+.82938 .22296 L
+.83031 .22367 L
+.83124 .22436 L
+.83217 .225 L
+.8331 .22562 L
+.83403 .22621 L
+.83496 .22676 L
+.83589 .22729 L
+.83682 .22778 L
+.83775 .22824 L
+.83868 .22867 L
+.83961 .22907 L
+.84053 .22943 L
+.84146 .22977 L
+.84239 .23007 L
+.84332 .23034 L
+.84425 .23058 L
+.84518 .23079 L
+.84611 .23097 L
+.84704 .23112 L
+.84797 .23123 L
+.8489 .23131 L
+.84983 .23137 L
+.85075 .23139 L
+.85168 .23138 L
+.85261 .23134 L
+.85354 .23127 L
+.85447 .23117 L
+.8554 .23104 L
+.85633 .23087 L
+.85726 .23068 L
+.85819 .23046 L
+.85912 .2302 L
+.86005 .22992 L
+Mistroke
+.86098 .2296 L
+.8619 .22926 L
+.86283 .22888 L
+.86376 .22848 L
+.86469 .22805 L
+.86562 .22758 L
+.86655 .22709 L
+.86748 .22656 L
+.86841 .22601 L
+.86934 .22543 L
+.87027 .22482 L
+.8712 .22418 L
+.87213 .22351 L
+.87305 .22281 L
+.87398 .22209 L
+.87491 .22133 L
+.87584 .22055 L
+.87677 .21974 L
+.8777 .2189 L
+.87863 .21803 L
+.87956 .21714 L
+.88049 .21621 L
+.88142 .21526 L
+.88235 .21429 L
+.88328 .21328 L
+.8842 .21225 L
+.88513 .21119 L
+.88606 .21011 L
+.88699 .209 L
+.88792 .20786 L
+.88885 .2067 L
+.88978 .20551 L
+.89071 .20429 L
+.89164 .20305 L
+.89257 .20179 L
+.8935 .2005 L
+.89443 .19918 L
+.89535 .19784 L
+.89628 .19647 L
+.89721 .19508 L
+.89814 .19367 L
+.89907 .19223 L
+.9 .19077 L
+.90093 .18929 L
+.90186 .18778 L
+.90279 .18625 L
+.90372 .1847 L
+.90465 .18312 L
+.90557 .18152 L
+.9065 .1799 L
+Mistroke
+.90743 .17826 L
+.90836 .17659 L
+.90929 .17491 L
+.91022 .1732 L
+.91115 .17147 L
+.91208 .16972 L
+.91301 .16795 L
+.91394 .16617 L
+.91487 .16436 L
+.9158 .16253 L
+.91672 .16068 L
+.91765 .15881 L
+.91858 .15692 L
+.91951 .15502 L
+.92044 .15309 L
+.92137 .15115 L
+.9223 .14919 L
+.92323 .14721 L
+.92416 .14522 L
+.92509 .14321 L
+.92602 .14118 L
+.92695 .13913 L
+.92787 .13707 L
+.9288 .13499 L
+.92973 .1329 L
+.93066 .13079 L
+.93159 .12867 L
+.93252 .12653 L
+.93345 .12437 L
+.93438 .1222 L
+.93531 .12002 L
+.93624 .11783 L
+.93717 .11562 L
+.9381 .11339 L
+.93902 .11116 L
+.93995 .10891 L
+.94088 .10665 L
+.94181 .10438 L
+.94274 .1021 L
+.94367 .0998 L
+.9446 .09749 L
+.94553 .09518 L
+.94646 .09285 L
+.94739 .09051 L
+.94832 .08816 L
+.94925 .08581 L
+.95017 .08344 L
+.9511 .08107 L
+.95203 .07868 L
+.95296 .07629 L
+Mistroke
+.95389 .07389 L
+.95482 .07148 L
+.95575 .06907 L
+.95668 .06664 L
+.95761 .06422 L
+.95854 .06178 L
+.95947 .05934 L
+.96039 .05689 L
+.96132 .05444 L
+.96225 .05198 L
+.96318 .04952 L
+.96411 .04705 L
+.96504 .04458 L
+.96597 .04211 L
+.9669 .03963 L
+.96783 .03714 L
+.96876 .03466 L
+.96969 .03217 L
+.97062 .02968 L
+.97154 .02719 L
+.97247 .0247 L
+.9734 .0222 L
+.97433 .01971 L
+.97526 .01721 L
+.97619 .01472 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk
+0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo000L0?ooo`030000003oool0oooo0?l0
+ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`004`3oool3000000H0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo2P00
+001;0?ooo`800000Z at 3oool00`000000oooo0?ooo`1B0?ooo`030000003oool0oooo00H0oooo000B
+0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`060?ooo`D00000AP3o
+ool300000:P0oooo0P00001C0?ooo`030000003oool0oooo00L0oooo000B0?ooo`050000003oool0
+oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`0:0?ooo`@00000 at P3oool200000080oooo00<0
+00000?ooo`3oool0Y at 3oool2000005<0oooo00<000000?ooo`3oool01`3oool001<0oooo0`000006
+0?ooo`030000003oool0oooo00d0oooo0`0000100?ooo`040000003oool0oooo0?ooo`800000YP3o
+ool00`000000oooo0000001A0?ooo`030000003oool0oooo00P0oooo000L0?ooo`030000003oool0
+oooo0100oooo0`00000l0?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0X`3oool0
+10000000oooo0?ooo`00001A0?ooo`030000003oool0oooo00P0oooo000L0?ooo`8000004`3oool3
+000003T0oooo0P0000060?ooo`030000003oool0oooo0:80oooo00 at 000000?ooo`3oool00000D at 3o
+ool00`000000oooo0?ooo`080?ooo`00703oool00`000000oooo0?ooo`0D0?ooo`<00000=P3oool2
+000000L0oooo0P00002S0?ooo`040000003oool0oooo00000500oooo00<000000?ooo`3oool02 at 3o
+ool001`0oooo00<000000?ooo`3oool05`3oool2000003<0oooo0P0000090?ooo`030000003oool0
+oooo0:40oooo00D000000?ooo`3oool0oooo0000001?0?ooo`030000003oool0oooo00T0oooo000L
+0?ooo`030000003oool0oooo01T0oooo0P00000`0?ooo`8000002P3oool200000:40oooo00<00000
+0?ooo`3oool00P3oool00`000000oooo0?ooo`1=0?ooo`030000003oool0oooo00T0oooo000L0?oo
+o`030000003oool0oooo01/0oooo0P00000]0?ooo`800000303oool00`000000oooo0?ooo`2O0?oo
+o`030000003oool0oooo0080oooo00<000000?ooo`3oool0C03oool00`000000oooo0?ooo`0:0?oo
+o`00703oool00`000000oooo0?ooo`0M0?ooo`800000:P3oool2000000h0oooo00<000000?ooo`3o
+ool0WP3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo04/0oooo00<000000?ooo`3o
+ool02P3oool001`0oooo0P00000P0?ooo`8000009`3oool2000000l0oooo00<000000?ooo`3oool0
+W at 3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo04X0oooo00<000000?ooo`3oool0
+2`3oool001`0oooo00<000000?ooo`3oool08 at 3oool2000002@0oooo0P00000A0?ooo`030000003o
+ool0oooo09`0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`1:0?ooo`030000003o
+ool0oooo00/0oooo000L0?ooo`030000003oool0oooo02<0oooo0P00000Q0?ooo`8000004P3oool0
+0`000000oooo0?ooo`2L0?ooo`030000003oool0oooo00D0oooo00<000000?ooo`3oool0B at 3oool0
+0`000000oooo0?ooo`0;0?ooo`00703oool00`000000oooo0?ooo`0U0?ooo`<00000703oool20000
+01D0oooo00<000000?ooo`3oool0V`3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo
+04P0oooo00<000000?ooo`3oool0303oool001`0oooo00<000000?ooo`3oool09`3oool3000001P0
+oooo0`00000F0?ooo`030000003oool0oooo09X0oooo00<000000?ooo`3oool01P3oool00`000000
+oooo0?ooo`180?ooo`030000003oool0oooo00`0oooo000L0?ooo`030000003oool0oooo02T0oooo
+1000000C0?ooo`<000006 at 3oool00`000000oooo0?ooo`2I0?ooo`030000003oool0oooo00L0oooo
+00<000000?ooo`3oool0AP3oool2000000h0oooo000L0?ooo`800000;@3oool4000000h0oooo0`00
+000K0?ooo`030000003oool0oooo09T0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?oo
+o`160?ooo`030000003oool0oooo00d0oooo000L0?ooo`030000003oool0oooo02l0oooo3`00000O
+0?ooo`030000003oool0oooo09P0oooo00<000000?ooo`3oool01`3oool00`000000oooo0?ooo`16
+0?ooo`030000003oool0oooo00d0oooo000L0?ooo`030000003oool0oooo05d0oooo00<000000?oo
+o`3oool0U`3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo04D0oooo00<000000?oo
+o`3oool03P3oool001`0oooo00<000000?ooo`3oool0GP3oool00`000000oooo0?ooo`2F0?ooo`03
+0000003oool0oooo00T0oooo00<000000?ooo`3oool0A03oool00`000000oooo0?ooo`0>0?ooo`00
+703oool00`000000oooo0?ooo`1N0?ooo`030000003oool0oooo09H0oooo00<000000?ooo`3oool0
+2 at 3oool00`000000oooo0?ooo`140?ooo`030000003oool0oooo00h0oooo000L0?ooo`030000003o
+ool0oooo05l0oooo00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`0:0?ooo`030000003o
+ool0oooo04<0oooo00<000000?ooo`3oool03`3oool001`0oooo0P00001P0?ooo`030000003oool0
+oooo09 at 0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`120?ooo`030000003oool0
+oooo00l0oooo000L0?ooo`030000003oool0oooo0600oooo00<000000?ooo`3oool0T`3oool00`00
+0000oooo0?ooo`0;0?ooo`030000003oool0oooo0440oooo00<000000?ooo`3oool0403oool001`0
+oooo00<000000?ooo`3oool0H03oool00`000000oooo0?ooo`2C0?ooo`030000003oool0oooo00/0
+oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`0 at 0?ooo`00103oool3000000<0oooo
+00<000000?ooo`3oool00`0000030?ooo`<000001P3oool00`000000oooo0?ooo`1P0?ooo`800000
+T`3oool00`000000oooo0?ooo`0=0?ooo`030000003oool0oooo0400oooo00<000000?ooo`3oool0
+403oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`070000003oool0oooo0?ooo`00
+0000oooo000000030?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0H at 3oool00`00
+0000oooo0?ooo`2A0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool0?`3oool00`00
+0000oooo0?ooo`0A0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?oo
+o`3oool0oooo000000050?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0H at 3oool0
+0`000000oooo0?ooo`2A0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool0?`3oool0
+0`000000oooo0?ooo`0A0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00L00000
+0?ooo`3oool0oooo0000003oool0000000<0oooo00<000000?ooo`3oool00`3oool300000680oooo
+00<000000?ooo`3oool0T03oool00`000000oooo0?ooo`0>0?ooo`030000003oool0oooo03d0oooo
+00<000000?ooo`3oool04P3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`060000
+003oool0oooo0?ooo`000000oooo100000060?ooo`030000003oool0oooo0680oooo00<000000?oo
+o`3oool0S`3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo03d0oooo00<000000?oo
+o`3oool04P3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo
+0?ooo`0000000P3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo06<0oooo00<00000
+0?ooo`3oool0SP3oool00`000000oooo0?ooo`0?0?ooo`030000003oool0oooo03d0oooo00<00000
+0?ooo`3oool04P3oool000 at 0oooo0`0000060?ooo`<000000`3oool4000000D0oooo00<000000?oo
+o`3oool0H`3oool00`000000oooo0?ooo`2>0?ooo`030000003oool0oooo0100oooo00<000000?oo
+o`3oool0>`3oool00`000000oooo0?ooo`0C0?ooo`00703oool00`000000oooo0?ooo`1S0?ooo`80
+0000S`3oool00`000000oooo0?ooo`0 at 0?ooo`030000003oool0oooo03/0oooo00<000000?ooo`3o
+ool04`3oool001`0oooo00<000000?ooo`3oool0I03oool00`000000oooo0?ooo`2<0?ooo`030000
+003oool0oooo0140oooo00<000000?ooo`3oool0>P3oool00`000000oooo0?ooo`0D0?ooo`00703o
+ool2000006D0oooo00<000000?ooo`3oool0S03oool00`000000oooo0?ooo`0B0?ooo`030000003o
+ool0oooo03T0oooo00<000000?ooo`3oool0503oool001`0oooo00<000000?ooo`3oool0I at 3oool0
+0`000000oooo0?ooo`2;0?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool0>@3oool0
+0`000000oooo0?ooo`0D0?ooo`00703oool00`000000oooo0?ooo`1U0?ooo`030000003oool0oooo
+08/0oooo00<000000?ooo`3oool04`3oool00`000000oooo0?ooo`0g0?ooo`030000003oool0oooo
+01D0oooo000L0?ooo`030000003oool0oooo06H0oooo00<000000?ooo`3oool0R at 3oool00`000000
+oooo0?ooo`0D0?ooo`030000003oool0oooo03L0oooo00<000000?ooo`3oool05 at 3oool001`0oooo
+00<000000?ooo`3oool0IP3oool00`000000oooo0?ooo`290?ooo`030000003oool0oooo01 at 0oooo
+00<000000?ooo`3oool0=P3oool00`000000oooo0?ooo`0F0?ooo`00703oool2000006L0oooo00<0
+00000?ooo`3oool0R at 3oool00`000000oooo0?ooo`0E0?ooo`030000003oool0oooo03D0oooo00<0
+00000?ooo`3oool05P3oool001`0oooo00<000000?ooo`3oool0I`3oool00`000000oooo0?ooo`28
+0?ooo`030000003oool0oooo01D0oooo00<000000?ooo`3oool0=03oool00`000000oooo0?ooo`0G
+0?ooo`00703oool00`000000oooo0?ooo`1W0?ooo`030000003oool0oooo08L0oooo00<000000?oo
+o`3oool05P3oool00`000000oooo0?ooo`0d0?ooo`030000003oool0oooo01L0oooo000L0?ooo`03
+0000003oool0oooo06P0oooo00<000000?ooo`3oool0QP3oool00`000000oooo0?ooo`0G0?ooo`03
+0000003oool0oooo03<0oooo00<000000?ooo`3oool05`3oool001`0oooo00<000000?ooo`3oool0
+J03oool00`000000oooo0?ooo`260?ooo`030000003oool0oooo01L0oooo00<000000?ooo`3oool0
+<P3oool00`000000oooo0?ooo`0H0?ooo`00703oool00`000000oooo0?ooo`1X0?ooo`030000003o
+ool0oooo08H0oooo00<000000?ooo`3oool0603oool00`000000oooo0?ooo`0a0?ooo`030000003o
+ool0oooo01P0oooo000L0?ooo`800000JP3oool00`000000oooo0?ooo`240?ooo`030000003oool0
+oooo01T0oooo00<000000?ooo`3oool0<03oool2000001X0oooo000L0?ooo`030000003oool0oooo
+06T0oooo00<000000?ooo`3oool0Q03oool00`000000oooo0?ooo`0I0?ooo`800000<@3oool00`00
+0000oooo0?ooo`0I0?ooo`00703oool00`000000oooo0?ooo`1Y0?ooo`030000003oool0oooo08 at 0
+oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0^0?ooo`8000006`3oool001`0oooo
+00<000000?ooo`3oool0JP3oool00`000000oooo0?ooo`220?ooo`030000003oool0oooo01/0oooo
+00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`0J0?ooo`00703oool00`000000oooo0?oo
+o`1Z0?ooo`030000003oool0oooo0880oooo00<000000?ooo`3oool0703oool00`000000oooo0?oo
+o`0]0?ooo`030000003oool0oooo01X0oooo000L0?ooo`030000003oool0oooo06/0oooo00<00000
+0?ooo`3oool0P at 3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo02`0oooo00<00000
+0?ooo`3oool06`3oool001`0oooo0P00001/0?ooo`030000003oool0oooo0840oooo00<000000?oo
+o`3oool07 at 3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo01/0oooo000L0?ooo`03
+0000003oool0oooo06/0oooo00<000000?ooo`3oool0P03oool00`000000oooo0?ooo`0N0?ooo`03
+0000003oool0oooo02X0oooo00<000000?ooo`3oool0703oool001`0oooo00<000000?ooo`3oool0
+K03oool00`000000oooo0?ooo`1o0?ooo`030000003oool0oooo01h0oooo0P00000Z0?ooo`800000
+7P3oool000X0oooo0`0000030?ooo`030000003oool0oooo0080oooo00<000000?ooo`3oool0103o
+ool00`000000oooo0?ooo`1/0?ooo`030000003oool0oooo07l0oooo00<000000?ooo`3oool07`3o
+ool00`000000oooo0?ooo`0X0?ooo`030000003oool0oooo01d0oooo00090?ooo`050000003oool0
+oooo0?ooo`0000001`3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo06`0oooo00<0
+00000?ooo`3oool0O`3oool00`000000oooo0?ooo`0O0?ooo`800000:03oool2000001l0oooo0009
+0?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`040?ooo`030000003o
+ool0oooo06d0oooo00<000000?ooo`3oool0O at 3oool00`000000oooo0?ooo`0Q0?ooo`030000003o
+ool0oooo02H0oooo00<000000?ooo`3oool07P3oool000T0oooo00D000000?ooo`3oool0oooo0000
+00070?ooo`030000003oool0oooo00 at 0oooo0`00001]0?ooo`030000003oool0oooo07d0oooo00<0
+00000?ooo`3oool08 at 3oool2000002H0oooo0P00000P0?ooo`002 at 3oool01@000000oooo0?ooo`3o
+ool0000000D0oooo00<000000?ooo`0000001P3oool00`000000oooo0?ooo`1]0?ooo`030000003o
+ool0oooo07d0oooo00<000000?ooo`3oool08P3oool00`000000oooo0?ooo`0T0?ooo`030000003o
+ool0oooo01l0oooo00090?ooo`050000003oool0oooo0?ooo`0000001P3oool2000000H0oooo00<0
+00000?ooo`3oool0KP3oool00`000000oooo0?ooo`1l0?ooo`030000003oool0oooo0280oooo0P00
+000T0?ooo`030000003oool0oooo0200oooo000:0?ooo`<00000203oool00`000000oooo0?ooo`04
+0?ooo`030000003oool0oooo06h0oooo00<000000?ooo`3oool0N`3oool00`000000oooo0?ooo`0T
+0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0803oool001`0oooo00<000000?oo
+o`3oool0K`3oool00`000000oooo0?ooo`1j0?ooo`030000003oool0oooo02D0oooo00<000000?oo
+o`3oool0803oool00`000000oooo0?ooo`0Q0?ooo`00703oool00`000000oooo0?ooo`1_0?ooo`03
+0000003oool0oooo07X0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`0O0?ooo`80
+00008`3oool001`0oooo0P00001`0?ooo`030000003oool0oooo07X0oooo00<000000?ooo`3oool0
+9P3oool00`000000oooo0?ooo`0N0?ooo`030000003oool0oooo0280oooo000L0?ooo`030000003o
+ool0oooo0700oooo00<000000?ooo`3oool0N03oool00`000000oooo0?ooo`0W0?ooo`8000007P3o
+ool00`000000oooo0?ooo`0S0?ooo`00703oool00`000000oooo0?ooo`1`0?ooo`030000003oool0
+oooo07P0oooo00<000000?ooo`3oool0:03oool00`000000oooo0?ooo`0K0?ooo`8000009 at 3oool0
+01`0oooo00<000000?ooo`3oool0L03oool00`000000oooo0?ooo`1h0?ooo`030000003oool0oooo
+02T0oooo00<000000?ooo`3oool06 at 3oool2000002H0oooo000L0?ooo`030000003oool0oooo0740
+oooo00<000000?ooo`3oool0M`3oool00`000000oooo0?ooo`0Y0?ooo`8000006P3oool00`000000
+oooo0?ooo`0U0?ooo`00703oool00`000000oooo0?ooo`1a0?ooo`030000003oool0oooo07H0oooo
+00<000000?ooo`3oool0:`3oool2000001P0oooo00<000000?ooo`3oool09P3oool001`0oooo0P00
+001b0?ooo`030000003oool0oooo07H0oooo00<000000?ooo`3oool0;03oool00`000000oooo0?oo
+o`0E0?ooo`800000:03oool001`0oooo00<000000?ooo`3oool0LP3oool00`000000oooo0?ooo`1e
+0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3oool04`3oool2000002T0oooo000L0?oo
+o`030000003oool0oooo0780oooo00<000000?ooo`3oool0M at 3oool00`000000oooo0?ooo`0^0?oo
+o`030000003oool0oooo0140oooo0P00000Z0?ooo`00703oool00`000000oooo0?ooo`1b0?ooo`03
+0000003oool0oooo07 at 0oooo00<000000?ooo`3oool0<03oool00`000000oooo0?ooo`0?0?ooo`80
+0000:`3oool001`0oooo00<000000?ooo`3oool0L`3oool00`000000oooo0?ooo`1c0?ooo`030000
+003oool0oooo0340oooo0P00000>0?ooo`800000;03oool001`0oooo0P00001d0?ooo`030000003o
+ool0oooo07<0oooo00<000000?ooo`3oool0<P3oool2000000/0oooo0P00000^0?ooo`00703oool0
+0`000000oooo0?ooo`1c0?ooo`030000003oool0oooo07<0oooo00<000000?ooo`3oool0<`3oool3
+000000L0oooo0`00000_0?ooo`00703oool00`000000oooo0?ooo`1d0?ooo`030000003oool0oooo
+0740oooo00<000000?ooo`3oool0=`3oool800000340oooo000L0?ooo`030000003oool0oooo07 at 0
+oooo00<000000?ooo`3oool0L at 3oool00`000000oooo0?ooo`1`0?ooo`00703oool00`000000oooo
+0?ooo`1d0?ooo`030000003oool0oooo0740oooo00<000000?ooo`3oool0L03oool001`0oooo00<0
+00000?ooo`3oool0M at 3oool00`000000oooo0?ooo`1`0?ooo`030000003oool0oooo0700oooo000L
+0?ooo`800000MP3oool00`000000oooo0?ooo`1_0?ooo`030000003oool0oooo0740oooo000L0?oo
+o`030000003oool0oooo07D0oooo00<000000?ooo`3oool0K`3oool00`000000oooo0?ooo`1a0?oo
+o`00703oool00`000000oooo0?ooo`1f0?ooo`030000003oool0oooo06h0oooo00<000000?ooo`3o
+ool0L at 3oool001`0oooo00<000000?ooo`3oool0MP3oool00`000000oooo0?ooo`1^0?ooo`030000
+003oool0oooo0740oooo00040?ooo`<000000`3oool00`000000oooo0?ooo`020?ooo`040000003o
+ool0oooo0?ooo`<000001P3oool00`000000oooo0?ooo`1f0?ooo`030000003oool0oooo06d0oooo
+00<000000?ooo`3oool0LP3oool000<0oooo00D000000?ooo`3oool0oooo000000070?ooo`040000
+003oool0oooo000000<0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`1g0?ooo`03
+0000003oool0oooo06`0oooo00<000000?ooo`3oool0LP3oool000<0oooo00D000000?ooo`3oool0
+oooo000000070?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool00`3oool3000007L0
+oooo00<000000?ooo`3oool0K03oool00`000000oooo0?ooo`1b0?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool00`000000oooo0?ooo`030?oo
+o`030000003oool0oooo07L0oooo00<000000?ooo`3oool0K03oool00`000000oooo0?ooo`1b0?oo
+o`000`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`0000000P3oool40000
+00H0oooo00<000000?ooo`3oool0N03oool00`000000oooo0?ooo`1Z0?ooo`030000003oool0oooo
+07<0oooo00030?ooo`050000003oool0oooo0?ooo`0000001P3oool2000000<0oooo00<000000?oo
+o`3oool01P3oool00`000000oooo0?ooo`1h0?ooo`030000003oool0oooo06X0oooo00<000000?oo
+o`3oool0L`3oool000 at 0oooo0`0000080?ooo`040000003oool0oooo0?ooo`@000001 at 3oool00`00
+0000oooo0?ooo`1h0?ooo`030000003oool0oooo06X0oooo00<000000?ooo`3oool0L`3oool001`0
+oooo00<000000?ooo`3oool0N at 3oool00`000000oooo0?ooo`1Y0?ooo`030000003oool0oooo07<0
+oooo000L0?ooo`800000NP3oool00`000000oooo0?ooo`1X0?ooo`030000003oool0oooo07 at 0oooo
+000L0?ooo`030000003oool0oooo07T0oooo00<000000?ooo`3oool0J03oool00`000000oooo0?oo
+o`1d0?ooo`00703oool00`000000oooo0?ooo`1j0?ooo`030000003oool0oooo06L0oooo00<00000
+0?ooo`3oool0M03oool001`0oooo00<000000?ooo`3oool0NP3oool00`000000oooo0?ooo`1W0?oo
+o`030000003oool0oooo07 at 0oooo000L0?ooo`030000003oool0oooo07X0oooo00<000000?ooo`3o
+ool0IP3oool00`000000oooo0?ooo`1e0?ooo`00703oool00`000000oooo0?ooo`1k0?ooo`030000
+003oool0oooo06D0oooo00<000000?ooo`3oool0M at 3oool001`0oooo0P00001l0?ooo`030000003o
+ool0oooo06D0oooo00<000000?ooo`3oool0M at 3oool001`0oooo00<000000?ooo`3oool0N`3oool0
+0`000000oooo0?ooo`1U0?ooo`030000003oool0oooo07D0oooo000L0?ooo`030000003oool0oooo
+07`0oooo00<000000?ooo`3oool0H`3oool00`000000oooo0?ooo`1f0?ooo`00703oool00`000000
+oooo0?ooo`1l0?ooo`030000003oool0oooo06<0oooo00<000000?ooo`3oool0MP3oool001`0oooo
+00<000000?ooo`3oool0O03oool00`000000oooo0?ooo`1S0?ooo`030000003oool0oooo07H0oooo
+000L0?ooo`800000OP3oool00`000000oooo0?ooo`1Q0?ooo`030000003oool0oooo07L0oooo000L
+0?ooo`030000003oool0oooo07d0oooo00<000000?ooo`3oool0H at 3oool00`000000oooo0?ooo`1g
+0?ooo`00703oool00`000000oooo0?ooo`1m0?ooo`030000003oool0oooo0640oooo00<000000?oo
+o`3oool0M`3oool001`0oooo00<000000?ooo`3oool0OP3oool00`000000oooo0?ooo`1P0?ooo`03
+0000003oool0oooo07L0oooo000L0?ooo`030000003oool0oooo07h0oooo00<000000?ooo`3oool0
+G`3oool00`000000oooo0?ooo`1h0?ooo`00703oool00`000000oooo0?ooo`1n0?ooo`030000003o
+ool0oooo05l0oooo00<000000?ooo`3oool0N03oool001`0oooo0P0000200?ooo`030000003oool0
+oooo05h0oooo00<000000?ooo`3oool0N03oool001`0oooo00<000000?ooo`3oool0O`3oool00`00
+0000oooo0?ooo`1N0?ooo`030000003oool0oooo07P0oooo000L0?ooo`030000003oool0oooo07l0
+oooo00<000000?ooo`3oool0G at 3oool00`000000oooo0?ooo`1i0?ooo`00703oool00`000000oooo
+0?ooo`1o0?ooo`030000003oool0oooo05d0oooo00<000000?ooo`3oool0N at 3oool000X0oooo0`00
+00030?ooo`030000003oool0000000 at 000001@3oool00`000000oooo0?ooo`200?ooo`030000003o
+ool0oooo05`0oooo00<000000?ooo`3oool0N at 3oool000T0oooo00D000000?ooo`3oool0oooo0000
+00050?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool0P03oool00`000000oooo0?oo
+o`1L0?ooo`030000003oool0oooo07T0oooo00090?ooo`050000003oool0oooo0?ooo`0000001P3o
+ool00`000000oooo0?ooo`050?ooo`<00000P03oool00`000000oooo0?ooo`1K0?ooo`030000003o
+ool0oooo07X0oooo00090?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?oo
+o`040?ooo`030000003oool0oooo0840oooo00<000000?ooo`3oool0FP3oool00`000000oooo0?oo
+o`1j0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3o
+ool00`000000oooo0?ooo`210?ooo`030000003oool0oooo05X0oooo00<000000?ooo`3oool0NP3o
+ool000T0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`000000
+1 at 3oool00`000000oooo0?ooo`210?ooo`030000003oool0oooo05T0oooo00<000000?ooo`3oool0
+N`3oool000X0oooo0`0000060?ooo`<000001P3oool00`000000oooo0?ooo`220?ooo`030000003o
+ool0oooo05P0oooo00<000000?ooo`3oool0N`3oool001`0oooo00<000000?ooo`3oool0PP3oool0
+0`000000oooo0?ooo`1H0?ooo`030000003oool0oooo07/0oooo000L0?ooo`800000P`3oool00`00
+0000oooo0?ooo`1H0?ooo`030000003oool0oooo07/0oooo000L0?ooo`030000003oool0oooo08<0
+oooo00<000000?ooo`3oool0EP3oool00`000000oooo0?ooo`1l0?ooo`00703oool00`000000oooo
+0?ooo`230?ooo`030000003oool0oooo05H0oooo00<000000?ooo`3oool0O03oool001`0oooo00<0
+00000?ooo`3oool0P`3oool00`000000oooo0?ooo`1F0?ooo`030000003oool0oooo07`0oooo000L
+0?ooo`030000003oool0oooo08 at 0oooo00<000000?ooo`3oool0E at 3oool00`000000oooo0?ooo`1l
+0?ooo`00703oool00`000000oooo0?ooo`240?ooo`030000003oool0oooo05 at 0oooo00<000000?oo
+o`3oool0O at 3oool001`0oooo0P0000250?ooo`030000003oool0oooo05 at 0oooo00<000000?ooo`3o
+ool0O at 3oool001`0oooo00<000000?ooo`3oool0Q at 3oool00`000000oooo0?ooo`1C0?ooo`030000
+003oool0oooo07d0oooo000L0?ooo`030000003oool0oooo08D0oooo00<000000?ooo`3oool0DP3o
+ool00`000000oooo0?ooo`1n0?ooo`00703oool00`000000oooo0?ooo`250?ooo`030000003oool0
+oooo0580oooo00<000000?ooo`3oool0OP3oool001`0oooo00<000000?ooo`3oool0QP3oool00`00
+0000oooo0?ooo`1A0?ooo`030000003oool0oooo07h0oooo000L0?ooo`030000003oool0oooo08H0
+oooo00<000000?ooo`3oool0D at 3oool00`000000oooo0?ooo`1n0?ooo`00703oool2000008L0oooo
+00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`1o0?ooo`00703oool00`000000oooo0?oo
+o`270?ooo`030000003oool0oooo04l0oooo00<000000?ooo`3oool0O`3oool001`0oooo00<00000
+0?ooo`3oool0Q`3oool00`000000oooo0?ooo`1?0?ooo`030000003oool0oooo07l0oooo000L0?oo
+o`030000003oool0oooo08L0oooo00<000000?ooo`3oool0CP3oool00`000000oooo0?ooo`200?oo
+o`00703oool00`000000oooo0?ooo`280?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3o
+ool0P03oool001`0oooo0P0000290?ooo`030000003oool0oooo04d0oooo00<000000?ooo`3oool0
+P03oool001`0oooo00<000000?ooo`3oool0R03oool00`000000oooo0?ooo`1=0?ooo`030000003o
+ool0oooo0800oooo000L0?ooo`030000003oool0oooo08T0oooo00<000000?ooo`3oool0B`3oool0
+0`000000oooo0?ooo`210?ooo`00703oool00`000000oooo0?ooo`290?ooo`030000003oool0oooo
+04/0oooo00<000000?ooo`3oool0P at 3oool000@0oooo0`0000030?ooo`030000003oool0000000 at 0
+00000P3oool3000000H0oooo00<000000?ooo`3oool0R at 3oool2000004`0oooo00<000000?ooo`3o
+ool0P at 3oool000<0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0080
+oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo08X0oooo00<000000?oo
+o`3oool0B at 3oool00`000000oooo0?ooo`220?ooo`000`3oool01 at 000000oooo0?ooo`3oool00000
+00H0oooo00<000000?ooo`3oool01 at 3oool00`000000oooo0?ooo`030?ooo`<00000RP3oool00`00
+0000oooo0?ooo`190?ooo`030000003oool0oooo0880oooo00030?ooo`050000003oool0oooo0?oo
+o`0000001`3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo00<0oooo00<00000
+0?ooo`3oool0R`3oool00`000000oooo0?ooo`180?ooo`030000003oool0oooo0880oooo00030?oo
+o`050000003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000H0oooo00<00000
+0?ooo`3oool0R`3oool00`000000oooo0?ooo`170?ooo`030000003oool0oooo08<0oooo00030?oo
+o`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool000000080oooo00<0
+00000?ooo`3oool01P3oool00`000000oooo0?ooo`2;0?ooo`030000003oool0oooo04L0oooo00<0
+00000?ooo`3oool0P`3oool000 at 0oooo0`0000060?ooo`<000000`3oool4000000D0oooo00<00000
+0?ooo`3oool0S03oool00`000000oooo0?ooo`160?ooo`030000003oool0oooo08<0oooo000L0?oo
+o`030000003oool0oooo08`0oooo00<000000?ooo`3oool0AP3oool00`000000oooo0?ooo`230?oo
+o`00703oool2000008d0oooo00<000000?ooo`3oool0A at 3oool00`000000oooo0?ooo`240?ooo`00
+703oool00`000000oooo0?ooo`2=0?ooo`030000003oool0oooo04 at 0oooo00<000000?ooo`3oool0
+Q03oool001`0oooo00<000000?ooo`3oool0S at 3oool00`000000oooo0?ooo`140?ooo`030000003o
+ool0oooo08 at 0oooo000L0?ooo`030000003oool0oooo08d0oooo00<000000?ooo`3oool0@`3oool0
+0`000000oooo0?ooo`250?ooo`00703oool00`000000oooo0?ooo`2>0?ooo`030000003oool0oooo
+0480oooo00<000000?ooo`3oool0Q at 3oool001`0oooo00<000000?ooo`3oool0SP3oool00`000000
+oooo0?ooo`120?ooo`030000003oool0oooo08D0oooo000L0?ooo`800000S`3oool200000480oooo
+00<000000?ooo`3oool0QP3oool001`0oooo00<000000?ooo`3oool0S`3oool00`000000oooo0?oo
+o`100?ooo`030000003oool0oooo08H0oooo000L0?ooo`030000003oool0oooo08l0oooo00<00000
+0?ooo`3oool0 at 03oool00`000000oooo0?ooo`260?ooo`00703oool00`000000oooo0?ooo`2 at 0?oo
+o`030000003oool0oooo03h0oooo00<000000?ooo`3oool0Q`3oool001`0oooo00<000000?ooo`3o
+ool0T03oool00`000000oooo0?ooo`0n0?ooo`030000003oool0oooo08L0oooo000L0?ooo`030000
+003oool0oooo0900oooo00<000000?ooo`3oool0?P3oool00`000000oooo0?ooo`270?ooo`00703o
+ool200000980oooo00<000000?ooo`3oool0?03oool00`000000oooo0?ooo`280?ooo`00703oool0
+0`000000oooo0?ooo`2A0?ooo`030000003oool0oooo03`0oooo00<000000?ooo`3oool0R03oool0
+01`0oooo00<000000?ooo`3oool0TP3oool00`000000oooo0?ooo`0k0?ooo`030000003oool0oooo
+08P0oooo000L0?ooo`030000003oool0oooo0980oooo00<000000?ooo`3oool0>P3oool00`000000
+oooo0?ooo`290?ooo`00703oool00`000000oooo0?ooo`2B0?ooo`030000003oool0oooo03X0oooo
+00<000000?ooo`3oool0R at 3oool001`0oooo00<000000?ooo`3oool0T`3oool00`000000oooo0?oo
+o`0h0?ooo`800000R`3oool001`0oooo0P00002D0?ooo`030000003oool0oooo03P0oooo00<00000
+0?ooo`3oool0RP3oool001`0oooo00<000000?ooo`3oool0T`3oool2000003T0oooo00<000000?oo
+o`3oool0RP3oool001`0oooo00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`0f0?ooo`03
+0000003oool0oooo08/0oooo000:0?ooo`<000000`3oool00`000000oooo0?ooo`03000000H0oooo
+00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`0f0?ooo`030000003oool0oooo08/0oooo
+00090?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0
+oooo00<000000?ooo`3oool0U at 3oool00`000000oooo0?ooo`0e0?ooo`030000003oool0oooo08/0
+oooo00090?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`<0
+0000U at 3oool00`000000oooo0?ooo`0d0?ooo`030000003oool0oooo08`0oooo00090?ooo`050000
+003oool0oooo0?ooo`0000001P3oool2000000H0oooo00<000000?ooo`3oool0UP3oool00`000000
+oooo0?ooo`0c0?ooo`030000003oool0oooo08`0oooo00090?ooo`050000003oool0oooo0?ooo`00
+0000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo09H0oooo00<000000?ooo`3o
+ool0<P3oool2000008h0oooo00090?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000
+oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0UP3oool2000003<0oooo00<000000?oo
+o`3oool0S at 3oool000X0oooo0`0000060?ooo`<000001P3oool00`000000oooo0?ooo`2G0?ooo`03
+0000003oool0oooo0340oooo00<000000?ooo`3oool0S at 3oool001`0oooo00<000000?ooo`3oool0
+U`3oool00`000000oooo0?ooo`0`0?ooo`030000003oool0oooo08h0oooo000L0?ooo`800000V at 3o
+ool00`000000oooo0?ooo`0_0?ooo`030000003oool0oooo08h0oooo000L0?ooo`030000003oool0
+oooo09P0oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`2?0?ooo`00703oool00`00
+0000oooo0?ooo`2I0?ooo`030000003oool0oooo02d0oooo00<000000?ooo`3oool0S`3oool001`0
+oooo00<000000?ooo`3oool0V at 3oool00`000000oooo0?ooo`0]0?ooo`030000003oool0oooo08l0
+oooo000L0?ooo`030000003oool0oooo09X0oooo00<000000?ooo`3oool0:`3oool00`000000oooo
+0?ooo`2 at 0?ooo`00703oool00`000000oooo0?ooo`2J0?ooo`030000003oool0oooo02/0oooo00<0
+00000?ooo`3oool0T03oool001`0oooo0P00002L0?ooo`030000003oool0oooo02T0oooo00<00000
+0?ooo`3oool0T at 3oool001`0oooo00<000000?ooo`3oool0V`3oool00`000000oooo0?ooo`0Y0?oo
+o`030000003oool0oooo0940oooo000L0?ooo`030000003oool0oooo09`0oooo00<000000?ooo`3o
+ool09`3oool00`000000oooo0?ooo`2B0?ooo`00703oool00`000000oooo0?ooo`2L0?ooo`030000
+003oool0oooo02L0oooo00<000000?ooo`3oool0TP3oool001`0oooo00<000000?ooo`3oool0W at 3o
+ool00`000000oooo0?ooo`0U0?ooo`030000003oool0oooo09<0oooo000L0?ooo`030000003oool0
+oooo09d0oooo00<000000?ooo`3oool09 at 3oool00`000000oooo0?ooo`2C0?ooo`00703oool20000
+09l0oooo00<000000?ooo`3oool08`3oool00`000000oooo0?ooo`2D0?ooo`00703oool00`000000
+oooo0?ooo`2N0?ooo`800000903oool00`000000oooo0?ooo`2D0?ooo`00703oool00`000000oooo
+0?ooo`2O0?ooo`030000003oool0oooo0240oooo00<000000?ooo`3oool0U at 3oool001`0oooo00<0
+00000?ooo`3oool0W`3oool200000240oooo0P00002G0?ooo`00703oool00`000000oooo0?ooo`2P
+0?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool0UP3oool001`0oooo00<000000?oo
+o`3oool0X at 3oool00`000000oooo0?ooo`0M0?ooo`800000V03oool001`0oooo0P00002R0?ooo`80
+00007P3oool00`000000oooo0?ooo`2G0?ooo`00703oool00`000000oooo0?ooo`2R0?ooo`030000
+003oool0oooo01/0oooo00<000000?ooo`3oool0V03oool001`0oooo00<000000?ooo`3oool0X`3o
+ool00`000000oooo0?ooo`0I0?ooo`800000VP3oool000 at 0oooo0`0000030?ooo`030000003oool0
+oooo00<000000`3oool3000000H0oooo00<000000?ooo`3oool0X`3oool2000001X0oooo00<00000
+0?ooo`3oool0V at 3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`070000003oool0
+oooo0?ooo`000000oooo000000030?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0
+Y03oool2000001P0oooo00<000000?ooo`3oool0VP3oool000<0oooo00D000000?ooo`3oool0oooo
+000000080?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool00`3oool300000:D0oooo
+0P00000F0?ooo`030000003oool0oooo09/0oooo00030?ooo`050000003oool0oooo0?ooo`000000
+1P3oool200000080oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo0:H0
+oooo00<000000?ooo`3oool04`3oool2000009d0oooo00030?ooo`050000003oool0oooo0?ooo`00
+0000203oool00`000000oooo00000003000000H0oooo00<000000?ooo`3oool0Y`3oool00`000000
+oooo0?ooo`0A0?ooo`800000WP3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`05
+0000003oool0oooo0?ooo`0000000P3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo
+0:P0oooo0P00000 at 0?ooo`800000W`3oool000 at 0oooo0`0000060?ooo`<000000`3oool4000000D0
+oooo00<000000?ooo`3oool0Z at 3oool2000000h0oooo0P00002P0?ooo`00703oool00`000000oooo
+0?ooo`2Z0?ooo`800000303oool200000:40oooo000L0?ooo`800000[@3oool2000000P0oooo0P00
+002S0?ooo`00703oool00`000000oooo0?ooo`2^0?ooo`P00000Y at 3oool001`0oooo00<000000?oo
+o`3oool0o`3ooomL0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo000L0?ooo`030000
+003oool0oooo0?l0ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`00703oool2
+00000?l0ooooG at 3oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`00o`3ooomk0?ooo`00
+o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-85.6377, -0.019255, 
+  3.00749, 0.00171702}}],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.61975 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .0957 -24 -4.5 ]
+[.01131 .0957 0 4.5 ]
+[.01131 .17669 -18 -4.5 ]
+[.01131 .17669 0 4.5 ]
+[.01131 .25768 -24 -4.5 ]
+[.01131 .25768 0 4.5 ]
+[.01131 .33867 -18 -4.5 ]
+[.01131 .33867 0 4.5 ]
+[.01131 .41965 -24 -4.5 ]
+[.01131 .41965 0 4.5 ]
+[.01131 .50064 -18 -4.5 ]
+[.01131 .50064 0 4.5 ]
+[.01131 .58163 -24 -4.5 ]
+[.01131 .58163 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .0957 m
+.03006 .0957 L
+s
+[(0.05)] .01131 .0957 1 0 Mshowa
+.02381 .17669 m
+.03006 .17669 L
+s
+[(0.1)] .01131 .17669 1 0 Mshowa
+.02381 .25768 m
+.03006 .25768 L
+s
+[(0.15)] .01131 .25768 1 0 Mshowa
+.02381 .33867 m
+.03006 .33867 L
+s
+[(0.2)] .01131 .33867 1 0 Mshowa
+.02381 .41965 m
+.03006 .41965 L
+s
+[(0.25)] .01131 .41965 1 0 Mshowa
+.02381 .50064 m
+.03006 .50064 L
+s
+[(0.3)] .01131 .50064 1 0 Mshowa
+.02381 .58163 m
+.03006 .58163 L
+s
+[(0.35)] .01131 .58163 1 0 Mshowa
+.125 Mabswid
+.02381 .03091 m
+.02756 .03091 L
+s
+.02381 .04711 m
+.02756 .04711 L
+s
+.02381 .06331 m
+.02756 .06331 L
+s
+.02381 .07951 m
+.02756 .07951 L
+s
+.02381 .1119 m
+.02756 .1119 L
+s
+.02381 .1281 m
+.02756 .1281 L
+s
+.02381 .1443 m
+.02756 .1443 L
+s
+.02381 .16049 m
+.02756 .16049 L
+s
+.02381 .19289 m
+.02756 .19289 L
+s
+.02381 .20909 m
+.02756 .20909 L
+s
+.02381 .22528 m
+.02756 .22528 L
+s
+.02381 .24148 m
+.02756 .24148 L
+s
+.02381 .27388 m
+.02756 .27388 L
+s
+.02381 .29007 m
+.02756 .29007 L
+s
+.02381 .30627 m
+.02756 .30627 L
+s
+.02381 .32247 m
+.02756 .32247 L
+s
+.02381 .35486 m
+.02756 .35486 L
+s
+.02381 .37106 m
+.02756 .37106 L
+s
+.02381 .38726 m
+.02756 .38726 L
+s
+.02381 .40346 m
+.02756 .40346 L
+s
+.02381 .43585 m
+.02756 .43585 L
+s
+.02381 .45205 m
+.02756 .45205 L
+s
+.02381 .46825 m
+.02756 .46825 L
+s
+.02381 .48444 m
+.02756 .48444 L
+s
+.02381 .51684 m
+.02756 .51684 L
+s
+.02381 .53304 m
+.02756 .53304 L
+s
+.02381 .54923 m
+.02756 .54923 L
+s
+.02381 .56543 m
+.02756 .56543 L
+s
+.02381 .59783 m
+.02756 .59783 L
+s
+.02381 .61402 m
+.02756 .61402 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .01472 m
+.02567 .01489 L
+.0266 .01507 L
+.02753 .01524 L
+.02846 .01542 L
+.02938 .0156 L
+.03031 .01577 L
+.03124 .01595 L
+.03217 .01612 L
+.0331 .01629 L
+.03403 .01647 L
+.03496 .01664 L
+.03589 .01681 L
+.03682 .01698 L
+.03775 .01715 L
+.03868 .01732 L
+.03961 .01749 L
+.04053 .01765 L
+.04146 .01782 L
+.04239 .01798 L
+.04332 .01814 L
+.04425 .0183 L
+.04518 .01846 L
+.04611 .01862 L
+.04704 .01878 L
+.04797 .01893 L
+.0489 .01908 L
+.04983 .01923 L
+.05075 .01938 L
+.05168 .01952 L
+.05261 .01967 L
+.05354 .01981 L
+.05447 .01995 L
+.0554 .02009 L
+.05633 .02022 L
+.05726 .02035 L
+.05819 .02048 L
+.05912 .02061 L
+.06005 .02073 L
+.06098 .02085 L
+.0619 .02097 L
+.06283 .02109 L
+.06376 .0212 L
+.06469 .02131 L
+.06562 .02141 L
+.06655 .02152 L
+.06748 .02162 L
+.06841 .02171 L
+.06934 .02181 L
+.07027 .0219 L
+Mistroke
+.0712 .02198 L
+.07213 .02207 L
+.07305 .02215 L
+.07398 .02222 L
+.07491 .02229 L
+.07584 .02236 L
+.07677 .02243 L
+.0777 .02249 L
+.07863 .02255 L
+.07956 .0226 L
+.08049 .02265 L
+.08142 .02269 L
+.08235 .02273 L
+.08328 .02277 L
+.0842 .0228 L
+.08513 .02283 L
+.08606 .02285 L
+.08699 .02287 L
+.08792 .02289 L
+.08885 .0229 L
+.08978 .02291 L
+.09071 .02291 L
+.09164 .0229 L
+.09257 .0229 L
+.0935 .02288 L
+.09443 .02287 L
+.09535 .02285 L
+.09628 .02282 L
+.09721 .02279 L
+.09814 .02275 L
+.09907 .02271 L
+.1 .02267 L
+.10093 .02262 L
+.10186 .02256 L
+.10279 .0225 L
+.10372 .02244 L
+.10465 .02237 L
+.10557 .02229 L
+.1065 .02221 L
+.10743 .02213 L
+.10836 .02203 L
+.10929 .02194 L
+.11022 .02184 L
+.11115 .02173 L
+.11208 .02162 L
+.11301 .0215 L
+.11394 .02138 L
+.11487 .02126 L
+.1158 .02112 L
+.11672 .02099 L
+Mistroke
+.11765 .02084 L
+.11858 .0207 L
+.11951 .02054 L
+.12044 .02039 L
+.12137 .02022 L
+.1223 .02005 L
+.12323 .01988 L
+.12416 .0197 L
+.12509 .01951 L
+.12602 .01932 L
+.12695 .01913 L
+.12787 .01893 L
+.1288 .01872 L
+.12973 .01851 L
+.13066 .01829 L
+.13159 .01807 L
+.13252 .01785 L
+.13345 .01761 L
+.13438 .01738 L
+.13531 .01713 L
+.13624 .01688 L
+.13717 .01663 L
+.1381 .01637 L
+.13902 .01611 L
+.13995 .01584 L
+.14088 .01557 L
+.14181 .01529 L
+.14274 .015 L
+.14367 .01472 L
+.1446 .01501 L
+.14553 .01531 L
+.14646 .01561 L
+.14739 .01592 L
+.14832 .01623 L
+.14925 .01655 L
+.15017 .01688 L
+.1511 .01721 L
+.15203 .01754 L
+.15296 .01788 L
+.15389 .01822 L
+.15482 .01857 L
+.15575 .01892 L
+.15668 .01927 L
+.15761 .01963 L
+.15854 .02 L
+.15947 .02037 L
+.16039 .02074 L
+.16132 .02112 L
+.16225 .0215 L
+.16318 .02189 L
+Mistroke
+.16411 .02228 L
+.16504 .02268 L
+.16597 .02308 L
+.1669 .02348 L
+.16783 .02389 L
+.16876 .0243 L
+.16969 .02471 L
+.17062 .02513 L
+.17154 .02556 L
+.17247 .02598 L
+.1734 .02641 L
+.17433 .02685 L
+.17526 .02728 L
+.17619 .02772 L
+.17712 .02817 L
+.17805 .02861 L
+.17898 .02906 L
+.17991 .02952 L
+.18084 .02997 L
+.18177 .03043 L
+.18269 .03089 L
+.18362 .03136 L
+.18455 .03182 L
+.18548 .03229 L
+.18641 .03277 L
+.18734 .03324 L
+.18827 .03372 L
+.1892 .0342 L
+.19013 .03468 L
+.19106 .03516 L
+.19199 .03565 L
+.19292 .03614 L
+.19384 .03663 L
+.19477 .03712 L
+.1957 .03761 L
+.19663 .03811 L
+.19756 .0386 L
+.19849 .0391 L
+.19942 .0396 L
+.20035 .0401 L
+.20128 .0406 L
+.20221 .04111 L
+.20314 .04161 L
+.20407 .04211 L
+.20499 .04262 L
+.20592 .04312 L
+.20685 .04363 L
+.20778 .04414 L
+.20871 .04464 L
+.20964 .04515 L
+Mistroke
+.21057 .04566 L
+.2115 .04616 L
+.21243 .04667 L
+.21336 .04718 L
+.21429 .04768 L
+.21521 .04819 L
+.21614 .04869 L
+.21707 .0492 L
+.218 .0497 L
+.21893 .05021 L
+.21986 .05071 L
+.22079 .05121 L
+.22172 .05171 L
+.22265 .0522 L
+.22358 .0527 L
+.22451 .0532 L
+.22544 .05369 L
+.22636 .05418 L
+.22729 .05467 L
+.22822 .05516 L
+.22915 .05564 L
+.23008 .05613 L
+.23101 .05661 L
+.23194 .05708 L
+.23287 .05756 L
+.2338 .05803 L
+.23473 .0585 L
+.23566 .05897 L
+.23659 .05943 L
+.23751 .05989 L
+.23844 .06034 L
+.23937 .0608 L
+.2403 .06125 L
+.24123 .06169 L
+.24216 .06213 L
+.24309 .06257 L
+.24402 .063 L
+.24495 .06343 L
+.24588 .06385 L
+.24681 .06427 L
+.24774 .06469 L
+.24866 .0651 L
+.24959 .0655 L
+.25052 .0659 L
+.25145 .0663 L
+.25238 .06669 L
+.25331 .06707 L
+.25424 .06745 L
+.25517 .06782 L
+.2561 .06819 L
+Mistroke
+.25703 .06855 L
+.25796 .0689 L
+.25889 .06925 L
+.25981 .06959 L
+.26074 .06993 L
+.26167 .07026 L
+.2626 .07058 L
+.26353 .07089 L
+.26446 .0712 L
+.26539 .0715 L
+.26632 .07179 L
+.26725 .07208 L
+.26818 .07236 L
+.26911 .07263 L
+.27003 .07289 L
+.27096 .07314 L
+.27189 .07339 L
+.27282 .07363 L
+.27375 .07386 L
+.27468 .07408 L
+.27561 .07429 L
+.27654 .07449 L
+.27747 .07469 L
+.2784 .07488 L
+.27933 .07505 L
+.28026 .07522 L
+.28118 .07538 L
+.28211 .07553 L
+.28304 .07567 L
+.28397 .0758 L
+.2849 .07591 L
+.28583 .07602 L
+.28676 .07612 L
+.28769 .07621 L
+.28862 .07629 L
+.28955 .07636 L
+.29048 .07642 L
+.29141 .07646 L
+.29233 .0765 L
+.29326 .07652 L
+.29419 .07654 L
+.29512 .07654 L
+.29605 .07653 L
+.29698 .07651 L
+.29791 .07648 L
+.29884 .07644 L
+.29977 .07638 L
+.3007 .07631 L
+.30163 .07623 L
+.30256 .07614 L
+Mistroke
+.30348 .07604 L
+.30441 .07592 L
+.30534 .07579 L
+.30627 .07565 L
+.3072 .0755 L
+.30813 .07533 L
+.30906 .07515 L
+.30999 .07496 L
+.31092 .07476 L
+.31185 .07454 L
+.31278 .07431 L
+.3137 .07406 L
+.31463 .0738 L
+.31556 .07353 L
+.31649 .07324 L
+.31742 .07294 L
+.31835 .07263 L
+.31928 .0723 L
+.32021 .07196 L
+.32114 .0716 L
+.32207 .07123 L
+.323 .07085 L
+.32393 .07045 L
+.32485 .07003 L
+.32578 .06961 L
+.32671 .06916 L
+.32764 .0687 L
+.32857 .06823 L
+.3295 .06774 L
+.33043 .06724 L
+.33136 .06672 L
+.33229 .06619 L
+.33322 .06564 L
+.33415 .06508 L
+.33508 .0645 L
+.336 .0639 L
+.33693 .06329 L
+.33786 .06267 L
+.33879 .06203 L
+.33972 .06137 L
+.34065 .06069 L
+.34158 .06001 L
+.34251 .0593 L
+.34344 .05858 L
+.34437 .05784 L
+.3453 .05709 L
+.34623 .05632 L
+.34715 .05553 L
+.34808 .05473 L
+.34901 .05391 L
+Mistroke
+.34994 .05308 L
+.35087 .05223 L
+.3518 .05136 L
+.35273 .05048 L
+.35366 .04958 L
+.35459 .04866 L
+.35552 .04773 L
+.35645 .04677 L
+.35738 .04581 L
+.3583 .04482 L
+.35923 .04382 L
+.36016 .04281 L
+.36109 .04177 L
+.36202 .04072 L
+.36295 .03965 L
+.36388 .03857 L
+.36481 .03746 L
+.36574 .03635 L
+.36667 .03521 L
+.3676 .03406 L
+.36852 .03289 L
+.36945 .0317 L
+.37038 .0305 L
+.37131 .02927 L
+.37224 .02804 L
+.37317 .02678 L
+.3741 .02551 L
+.37503 .02422 L
+.37596 .02291 L
+.37689 .02159 L
+.37782 .02025 L
+.37875 .01889 L
+.37967 .01752 L
+.3806 .01613 L
+.38153 .01472 L
+.38246 .01614 L
+.38339 .01758 L
+.38432 .01904 L
+.38525 .02052 L
+.38618 .02201 L
+.38711 .02352 L
+.38804 .02505 L
+.38897 .02659 L
+.3899 .02815 L
+.39082 .02973 L
+.39175 .03133 L
+.39268 .03294 L
+.39361 .03456 L
+.39454 .03621 L
+.39547 .03787 L
+Mistroke
+.3964 .03955 L
+.39733 .04124 L
+.39826 .04295 L
+.39919 .04468 L
+.40012 .04642 L
+.40105 .04818 L
+.40197 .04996 L
+.4029 .05175 L
+.40383 .05356 L
+.40476 .05538 L
+.40569 .05722 L
+.40662 .05908 L
+.40755 .06095 L
+.40848 .06284 L
+.40941 .06475 L
+.41034 .06666 L
+.41127 .0686 L
+.4122 .07055 L
+.41312 .07252 L
+.41405 .0745 L
+.41498 .0765 L
+.41591 .07851 L
+.41684 .08054 L
+.41777 .08258 L
+.4187 .08463 L
+.41963 .08671 L
+.42056 .08879 L
+.42149 .0909 L
+.42242 .09301 L
+.42334 .09514 L
+.42427 .09729 L
+.4252 .09945 L
+.42613 .10162 L
+.42706 .10381 L
+.42799 .10601 L
+.42892 .10822 L
+.42985 .11045 L
+.43078 .11269 L
+.43171 .11495 L
+.43264 .11722 L
+.43357 .1195 L
+.43449 .1218 L
+.43542 .12411 L
+.43635 .12643 L
+.43728 .12876 L
+.43821 .13111 L
+.43914 .13347 L
+.44007 .13584 L
+.441 .13822 L
+.44193 .14062 L
+Mistroke
+.44286 .14303 L
+.44379 .14545 L
+.44472 .14788 L
+.44564 .15032 L
+.44657 .15277 L
+.4475 .15524 L
+.44843 .15771 L
+.44936 .1602 L
+.45029 .1627 L
+.45122 .16521 L
+.45215 .16773 L
+.45308 .17026 L
+.45401 .17279 L
+.45494 .17534 L
+.45587 .1779 L
+.45679 .18047 L
+.45772 .18305 L
+.45865 .18564 L
+.45958 .18823 L
+.46051 .19084 L
+.46144 .19345 L
+.46237 .19608 L
+.4633 .19871 L
+.46423 .20135 L
+.46516 .20399 L
+.46609 .20665 L
+.46702 .20931 L
+.46794 .21198 L
+.46887 .21466 L
+.4698 .21734 L
+.47073 .22004 L
+.47166 .22274 L
+.47259 .22544 L
+.47352 .22815 L
+.47445 .23087 L
+.47538 .23359 L
+.47631 .23632 L
+.47724 .23906 L
+.47816 .2418 L
+.47909 .24454 L
+.48002 .2473 L
+.48095 .25005 L
+.48188 .25281 L
+.48281 .25558 L
+.48374 .25834 L
+.48467 .26112 L
+.4856 .26389 L
+.48653 .26667 L
+.48746 .26946 L
+.48839 .27224 L
+Mistroke
+.48931 .27503 L
+.49024 .27783 L
+.49117 .28062 L
+.4921 .28342 L
+.49303 .28622 L
+.49396 .28902 L
+.49489 .29182 L
+.49582 .29462 L
+.49675 .29743 L
+.49768 .30023 L
+.49861 .30304 L
+.49954 .30585 L
+.50046 .30865 L
+.50139 .31146 L
+.50232 .31427 L
+.50325 .31708 L
+.50418 .31988 L
+.50511 .32269 L
+.50604 .32549 L
+.50697 .32829 L
+.5079 .3311 L
+.50883 .3339 L
+.50976 .33669 L
+.51069 .33949 L
+.51161 .34228 L
+.51254 .34507 L
+.51347 .34786 L
+.5144 .35064 L
+.51533 .35342 L
+.51626 .3562 L
+.51719 .35897 L
+.51812 .36174 L
+.51905 .36451 L
+.51998 .36727 L
+.52091 .37002 L
+.52184 .37277 L
+.52276 .37552 L
+.52369 .37826 L
+.52462 .38099 L
+.52555 .38372 L
+.52648 .38644 L
+.52741 .38916 L
+.52834 .39186 L
+.52927 .39457 L
+.5302 .39726 L
+.53113 .39995 L
+.53206 .40262 L
+.53298 .4053 L
+.53391 .40796 L
+.53484 .41061 L
+Mistroke
+.53577 .41326 L
+.5367 .4159 L
+.53763 .41852 L
+.53856 .42114 L
+.53949 .42375 L
+.54042 .42635 L
+.54135 .42894 L
+.54228 .43152 L
+.54321 .43408 L
+.54413 .43664 L
+.54506 .43919 L
+.54599 .44172 L
+.54692 .44425 L
+.54785 .44676 L
+.54878 .44926 L
+.54971 .45174 L
+.55064 .45422 L
+.55157 .45668 L
+.5525 .45913 L
+.55343 .46157 L
+.55436 .46399 L
+.55528 .4664 L
+.55621 .46879 L
+.55714 .47118 L
+.55807 .47354 L
+.559 .4759 L
+.55993 .47823 L
+.56086 .48056 L
+.56179 .48286 L
+.56272 .48515 L
+.56365 .48743 L
+.56458 .48969 L
+.56551 .49194 L
+.56643 .49416 L
+.56736 .49637 L
+.56829 .49857 L
+.56922 .50075 L
+.57015 .50291 L
+.57108 .50505 L
+.57201 .50717 L
+.57294 .50928 L
+.57387 .51137 L
+.5748 .51344 L
+.57573 .51549 L
+.57666 .51753 L
+.57758 .51954 L
+.57851 .52154 L
+.57944 .52351 L
+.58037 .52547 L
+.5813 .52741 L
+Mistroke
+.58223 .52932 L
+.58316 .53122 L
+.58409 .53309 L
+.58502 .53495 L
+.58595 .53678 L
+.58688 .5386 L
+.5878 .54039 L
+.58873 .54216 L
+.58966 .54391 L
+.59059 .54564 L
+.59152 .54734 L
+.59245 .54902 L
+.59338 .55068 L
+.59431 .55232 L
+.59524 .55394 L
+.59617 .55553 L
+.5971 .5571 L
+.59803 .55865 L
+.59895 .56017 L
+.59988 .56167 L
+.60081 .56314 L
+.60174 .56459 L
+.60267 .56602 L
+.6036 .56742 L
+.60453 .5688 L
+.60546 .57015 L
+.60639 .57148 L
+.60732 .57279 L
+.60825 .57406 L
+.60918 .57532 L
+.6101 .57655 L
+.61103 .57775 L
+.61196 .57892 L
+.61289 .58007 L
+.61382 .5812 L
+.61475 .58229 L
+.61568 .58337 L
+.61661 .58441 L
+.61754 .58543 L
+.61847 .58642 L
+.6194 .58738 L
+.62033 .58832 L
+.62125 .58923 L
+.62218 .59011 L
+.62311 .59097 L
+.62404 .5918 L
+.62497 .5926 L
+.6259 .59337 L
+.62683 .59411 L
+.62776 .59483 L
+Mistroke
+.62869 .59552 L
+.62962 .59618 L
+.63055 .59681 L
+.63148 .59741 L
+.6324 .59798 L
+.63333 .59853 L
+.63426 .59904 L
+.63519 .59953 L
+.63612 .59999 L
+.63705 .60042 L
+.63798 .60082 L
+.63891 .60119 L
+.63984 .60153 L
+.64077 .60184 L
+.6417 .60212 L
+.64262 .60238 L
+.64355 .6026 L
+.64448 .60279 L
+.64541 .60295 L
+.64634 .60309 L
+.64727 .60319 L
+.6482 .60326 L
+.64913 .60331 L
+.65006 .60332 L
+.65099 .6033 L
+.65192 .60325 L
+.65285 .60317 L
+.65377 .60307 L
+.6547 .60293 L
+.65563 .60276 L
+.65656 .60256 L
+.65749 .60233 L
+.65842 .60206 L
+.65935 .60177 L
+.66028 .60145 L
+.66121 .60109 L
+.66214 .60071 L
+.66307 .6003 L
+.664 .59985 L
+.66492 .59937 L
+.66585 .59886 L
+.66678 .59833 L
+.66771 .59776 L
+.66864 .59716 L
+.66957 .59653 L
+.6705 .59586 L
+.67143 .59517 L
+.67236 .59445 L
+.67329 .59369 L
+.67422 .59291 L
+Mistroke
+.67515 .59209 L
+.67607 .59125 L
+.677 .59037 L
+.67793 .58946 L
+.67886 .58852 L
+.67979 .58755 L
+.68072 .58655 L
+.68165 .58552 L
+.68258 .58446 L
+.68351 .58337 L
+.68444 .58225 L
+.68537 .58109 L
+.6863 .57991 L
+.68722 .57869 L
+.68815 .57745 L
+.68908 .57618 L
+.69001 .57487 L
+.69094 .57354 L
+.69187 .57217 L
+.6928 .57078 L
+.69373 .56935 L
+.69466 .5679 L
+.69559 .56641 L
+.69652 .5649 L
+.69744 .56335 L
+.69837 .56178 L
+.6993 .56018 L
+.70023 .55854 L
+.70116 .55688 L
+.70209 .55519 L
+.70302 .55347 L
+.70395 .55172 L
+.70488 .54994 L
+.70581 .54813 L
+.70674 .5463 L
+.70767 .54443 L
+.70859 .54254 L
+.70952 .54062 L
+.71045 .53867 L
+.71138 .53669 L
+.71231 .53469 L
+.71324 .53265 L
+.71417 .53059 L
+.7151 .5285 L
+.71603 .52639 L
+.71696 .52424 L
+.71789 .52207 L
+.71882 .51987 L
+.71974 .51765 L
+.72067 .5154 L
+Mistroke
+.7216 .51312 L
+.72253 .51081 L
+.72346 .50848 L
+.72439 .50612 L
+.72532 .50374 L
+.72625 .50133 L
+.72718 .4989 L
+.72811 .49644 L
+.72904 .49395 L
+.72997 .49144 L
+.73089 .4889 L
+.73182 .48634 L
+.73275 .48376 L
+.73368 .48115 L
+.73461 .47851 L
+.73554 .47585 L
+.73647 .47317 L
+.7374 .47046 L
+.73833 .46773 L
+.73926 .46498 L
+.74019 .4622 L
+.74111 .45941 L
+.74204 .45658 L
+.74297 .45374 L
+.7439 .45087 L
+.74483 .44798 L
+.74576 .44507 L
+.74669 .44214 L
+.74762 .43919 L
+.74855 .43621 L
+.74948 .43322 L
+.75041 .4302 L
+.75134 .42716 L
+.75226 .4241 L
+.75319 .42103 L
+.75412 .41793 L
+.75505 .41481 L
+.75598 .41167 L
+.75691 .40852 L
+.75784 .40534 L
+.75877 .40215 L
+.7597 .39894 L
+.76063 .39571 L
+.76156 .39246 L
+.76249 .38919 L
+.76341 .38591 L
+.76434 .38261 L
+.76527 .37929 L
+.7662 .37595 L
+.76713 .3726 L
+Mistroke
+.76806 .36924 L
+.76899 .36585 L
+.76992 .36245 L
+.77085 .35904 L
+.77178 .35561 L
+.77271 .35217 L
+.77364 .34871 L
+.77456 .34523 L
+.77549 .34175 L
+.77642 .33825 L
+.77735 .33473 L
+.77828 .3312 L
+.77921 .32766 L
+.78014 .32411 L
+.78107 .32054 L
+.782 .31696 L
+.78293 .31338 L
+.78386 .30977 L
+.78479 .30616 L
+.78571 .30254 L
+.78664 .2989 L
+.78757 .29526 L
+.7885 .2916 L
+.78943 .28794 L
+.79036 .28427 L
+.79129 .28058 L
+.79222 .27689 L
+.79315 .27319 L
+.79408 .26948 L
+.79501 .26576 L
+.79593 .26204 L
+.79686 .25831 L
+.79779 .25457 L
+.79872 .25082 L
+.79965 .24707 L
+.80058 .24331 L
+.80151 .23955 L
+.80244 .23578 L
+.80337 .232 L
+.8043 .22822 L
+.80523 .22443 L
+.80616 .22064 L
+.80708 .21685 L
+.80801 .21305 L
+.80894 .20925 L
+.80987 .20545 L
+.8108 .20164 L
+.81173 .19783 L
+.81266 .19402 L
+.81359 .19021 L
+Mistroke
+.81452 .18639 L
+.81545 .18258 L
+.81638 .17876 L
+.81731 .17494 L
+.81823 .17112 L
+.81916 .16731 L
+.82009 .16349 L
+.82102 .15967 L
+.82195 .15586 L
+.82288 .15204 L
+.82381 .14823 L
+.82474 .14442 L
+.82567 .14061 L
+.8266 .1368 L
+.82753 .133 L
+.82846 .1292 L
+.82938 .1254 L
+.83031 .12161 L
+.83124 .11782 L
+.83217 .11404 L
+.8331 .11026 L
+.83403 .10649 L
+.83496 .10272 L
+.83589 .09895 L
+.83682 .0952 L
+.83775 .09145 L
+.83868 .0877 L
+.83961 .08397 L
+.84053 .08024 L
+.84146 .07652 L
+.84239 .0728 L
+.84332 .0691 L
+.84425 .0654 L
+.84518 .06171 L
+.84611 .05803 L
+.84704 .05436 L
+.84797 .0507 L
+.8489 .04705 L
+.84983 .04341 L
+.85075 .03979 L
+.85168 .03617 L
+.85261 .03256 L
+.85354 .02897 L
+.85447 .02539 L
+.8554 .02182 L
+.85633 .01826 L
+.85726 .01472 L
+.85819 .01825 L
+.85912 .02176 L
+.86005 .02527 L
+Mistroke
+.86098 .02876 L
+.8619 .03223 L
+.86283 .03569 L
+.86376 .03914 L
+.86469 .04257 L
+.86562 .04599 L
+.86655 .04938 L
+.86748 .05277 L
+.86841 .05613 L
+.86934 .05948 L
+.87027 .06282 L
+.8712 .06613 L
+.87213 .06943 L
+.87305 .07271 L
+.87398 .07597 L
+.87491 .07922 L
+.87584 .08244 L
+.87677 .08565 L
+.8777 .08883 L
+.87863 .092 L
+.87956 .09515 L
+.88049 .09827 L
+.88142 .10138 L
+.88235 .10447 L
+.88328 .10753 L
+.8842 .11058 L
+.88513 .1136 L
+.88606 .1166 L
+.88699 .11958 L
+.88792 .12253 L
+.88885 .12547 L
+.88978 .12838 L
+.89071 .13127 L
+.89164 .13414 L
+.89257 .13698 L
+.8935 .1398 L
+.89443 .14259 L
+.89535 .14536 L
+.89628 .14811 L
+.89721 .15083 L
+.89814 .15352 L
+.89907 .1562 L
+.9 .15884 L
+.90093 .16146 L
+.90186 .16406 L
+.90279 .16663 L
+.90372 .16917 L
+.90465 .17168 L
+.90557 .17417 L
+.9065 .17663 L
+Mistroke
+.90743 .17907 L
+.90836 .18148 L
+.90929 .18386 L
+.91022 .18621 L
+.91115 .18853 L
+.91208 .19083 L
+.91301 .1931 L
+.91394 .19534 L
+.91487 .19755 L
+.9158 .19973 L
+.91672 .20188 L
+.91765 .20401 L
+.91858 .2061 L
+.91951 .20816 L
+.92044 .2102 L
+.92137 .2122 L
+.9223 .21417 L
+.92323 .21612 L
+.92416 .21803 L
+.92509 .21991 L
+.92602 .22176 L
+.92695 .22358 L
+.92787 .22537 L
+.9288 .22713 L
+.92973 .22886 L
+.93066 .23055 L
+.93159 .23221 L
+.93252 .23385 L
+.93345 .23544 L
+.93438 .23701 L
+.93531 .23854 L
+.93624 .24005 L
+.93717 .24151 L
+.9381 .24295 L
+.93902 .24435 L
+.93995 .24572 L
+.94088 .24706 L
+.94181 .24836 L
+.94274 .24963 L
+.94367 .25087 L
+.9446 .25207 L
+.94553 .25324 L
+.94646 .25438 L
+.94739 .25548 L
+.94832 .25655 L
+.94925 .25758 L
+.95017 .25858 L
+.9511 .25955 L
+.95203 .26048 L
+.95296 .26137 L
+Mistroke
+.95389 .26223 L
+.95482 .26306 L
+.95575 .26385 L
+.95668 .26461 L
+.95761 .26534 L
+.95854 .26602 L
+.95947 .26668 L
+.96039 .26729 L
+.96132 .26788 L
+.96225 .26843 L
+.96318 .26894 L
+.96411 .26942 L
+.96504 .26986 L
+.96597 .27027 L
+.9669 .27064 L
+.96783 .27098 L
+.96876 .27128 L
+.96969 .27154 L
+.97062 .27177 L
+.97154 .27197 L
+.97247 .27213 L
+.9734 .27225 L
+.97433 .27234 L
+.97526 .27239 L
+.97619 .27241 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk
+0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo000L0?ooo`030000003oool0oooo0?l0
+ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`004`3oool3000000H0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo1P00
+000R0?ooo`H00000DP3oool00`000000oooo0?ooo`2W0?ooo`030000003oool0oooo0340oooo000B
+0?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`020?ooo`L00000603o
+ool5000000D0oooo0`00001>0?ooo`030000003oool000000:P0oooo0P00000b0?ooo`004P3oool0
+1 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0203oool:000000H0oooo2 at 00
+000<0?ooo`<00000B`3oool2000000030?ooo`00000000000:L0oooo0P00000b0?ooo`004`3oool3
+000000H0oooo00<000000?ooo`3oool04P3oool7000001L0oooo0`0000180?ooo`050000003oool0
+oooo0?ooo`000000YP3oool00`000000oooo0000000b0?ooo`00703oool00`000000oooo0?ooo`0b
+0?ooo`<00000A at 3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0:<0oooo00<00000
+0?ooo`000000<P3oool001`0oooo0P00000e0?ooo`<00000 at P3oool00`000000oooo0?ooo`040?oo
+o`030000003oool0oooo0:<0oooo00 at 000000?ooo`3oool00000<@3oool001`0oooo00<000000?oo
+o`3oool0=P3oool3000003l0oooo0P0000070?ooo`030000003oool0oooo0:80oooo00 at 000000?oo
+o`3oool00000<@3oool001`0oooo00<000000?ooo`3oool0>03oool3000003`0oooo0P0000080?oo
+o`800000XP3oool01 at 000000oooo0?ooo`3oool000000340oooo000L0?ooo`030000003oool0oooo
+03X0oooo0P00000k0?ooo`030000003oool0oooo00P0oooo00<000000?ooo`3oool0X03oool00`00
+0000oooo0?ooo`020?ooo`030000003oool0oooo02h0oooo000L0?ooo`030000003oool0oooo03`0
+oooo0P00000h0?ooo`030000003oool0oooo00T0oooo0P00002Q0?ooo`030000003oool0oooo0080
+oooo00<000000?ooo`3oool0;P3oool001`0oooo00<000000?ooo`3oool0?P3oool2000003D0oooo
+00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`2O0?ooo`030000003oool0oooo0080oooo
+00<000000?ooo`3oool0;P3oool001`0oooo0P0000100?ooo`<00000<P3oool00`000000oooo0?oo
+o`0=0?ooo`030000003oool0oooo09d0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?oo
+o`0^0?ooo`00703oool00`000000oooo0?ooo`110?ooo`<00000;`3oool00`000000oooo0?ooo`0>
+0?ooo`030000003oool0oooo09d0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0]
+0?ooo`00703oool00`000000oooo0?ooo`130?ooo`<00000;03oool00`000000oooo0?ooo`0 at 0?oo
+o`030000003oool0oooo09`0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0]0?oo
+o`00703oool00`000000oooo0?ooo`150?ooo`<00000:@3oool00`000000oooo0?ooo`0A0?ooo`03
+0000003oool0oooo09`0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`0]0?ooo`00
+703oool00`000000oooo0?ooo`170?ooo`<000009 at 3oool2000001D0oooo00<000000?ooo`3oool0
+VP3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo02d0oooo000L0?ooo`030000003o
+ool0oooo04T0oooo0`00000R0?ooo`8000005P3oool00`000000oooo0?ooo`2J0?ooo`030000003o
+ool0oooo00H0oooo00<000000?ooo`3oool0;03oool001`0oooo0P00001<0?ooo`<000007P3oool3
+000001P0oooo00<000000?ooo`3oool0V at 3oool00`000000oooo0?ooo`060?ooo`030000003oool0
+oooo02`0oooo000L0?ooo`030000003oool0oooo04d0oooo0`00000K0?ooo`8000006P3oool00`00
+0000oooo0?ooo`2I0?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3oool0;03oool001`0
+oooo00<000000?ooo`3oool0C`3oool4000001H0oooo0P00000M0?ooo`030000003oool0oooo09L0
+oooo00<000000?ooo`3oool0203oool00`000000oooo0?ooo`0[0?ooo`00703oool00`000000oooo
+0?ooo`1B0?ooo`@00000403oool3000001l0oooo00<000000?ooo`3oool0U`3oool00`000000oooo
+0?ooo`080?ooo`030000003oool0oooo02/0oooo000L0?ooo`030000003oool0oooo05D0oooo1P00
+00070?ooo`D000008P3oool00`000000oooo0?ooo`2F0?ooo`030000003oool0oooo00P0oooo00<0
+00000?ooo`3oool0:`3oool001`0oooo00<000000?ooo`3oool0FP3oool9000002H0oooo00<00000
+0?ooo`3oool0UP3oool00`000000oooo0?ooo`080?ooo`030000003oool0oooo02/0oooo000L0?oo
+o`800000R`3oool00`000000oooo0?ooo`2D0?ooo`030000003oool0oooo00X0oooo00<000000?oo
+o`3oool0:P3oool001`0oooo00<000000?ooo`3oool0RP3oool00`000000oooo0?ooo`2D0?ooo`03
+0000003oool0oooo00X0oooo00<000000?ooo`3oool0:P3oool001`0oooo00<000000?ooo`3oool0
+RP3oool2000009D0oooo00<000000?ooo`3oool02P3oool00`000000oooo0?ooo`0Z0?ooo`00103o
+ool3000000<0oooo00<000000?ooo`3oool00`0000030?ooo`<000001P3oool00`000000oooo0?oo
+o`2;0?ooo`030000003oool0oooo09<0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?oo
+o`0Y0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00L000000?ooo`3oool0oooo
+0000003oool0000000<0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`2;0?ooo`03
+0000003oool0oooo0980oooo00<000000?ooo`3oool0303oool00`000000oooo0?ooo`0Y0?ooo`00
+0`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?oo
+o`030000003oool0oooo00<0oooo00<000000?ooo`3oool0S03oool00`000000oooo0?ooo`2A0?oo
+o`030000003oool0oooo00`0oooo00<000000?ooo`3oool0:@3oool000<0oooo00D000000?ooo`3o
+ool0oooo000000040?ooo`070000003oool0oooo0?ooo`000000oooo000000030?ooo`030000003o
+ool0oooo00<0oooo0`00002<0?ooo`030000003oool0oooo0940oooo00<000000?ooo`3oool0303o
+ool00`000000oooo0?ooo`0Y0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00H0
+00000?ooo`3oool0oooo0000003oool4000000H0oooo00<000000?ooo`3oool0S at 3oool00`000000
+oooo0?ooo`2 at 0?ooo`030000003oool0oooo00d0oooo00<000000?ooo`3oool0:03oool000<0oooo
+00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3oool00`00
+0000oooo0?ooo`060?ooo`030000003oool0oooo08d0oooo00<000000?ooo`3oool0S`3oool00`00
+0000oooo0?ooo`0>0?ooo`030000003oool0oooo02P0oooo00040?ooo`<000001P3oool3000000<0
+oooo100000050?ooo`030000003oool0oooo08d0oooo0P00002 at 0?ooo`030000003oool0oooo00h0
+oooo00<000000?ooo`3oool0:03oool001`0oooo00<000000?ooo`3oool0SP3oool00`000000oooo
+0?ooo`2>0?ooo`030000003oool0oooo00l0oooo00<000000?ooo`3oool09`3oool001`0oooo0P00
+002?0?ooo`030000003oool0oooo08h0oooo00<000000?ooo`3oool03`3oool00`000000oooo0?oo
+o`0W0?ooo`00703oool00`000000oooo0?ooo`2?0?ooo`030000003oool0oooo08`0oooo00<00000
+0?ooo`3oool0403oool00`000000oooo0?ooo`0W0?ooo`00703oool00`000000oooo0?ooo`2?0?oo
+o`030000003oool0oooo08`0oooo00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`0V0?oo
+o`00703oool00`000000oooo0?ooo`2 at 0?ooo`030000003oool0oooo08/0oooo00<000000?ooo`3o
+ool04 at 3oool00`000000oooo0?ooo`0V0?ooo`00703oool00`000000oooo0?ooo`2 at 0?ooo`030000
+003oool0oooo08/0oooo00<000000?ooo`3oool04 at 3oool00`000000oooo0?ooo`0V0?ooo`00703o
+ool00`000000oooo0?ooo`2 at 0?ooo`030000003oool0oooo08X0oooo00<000000?ooo`3oool04`3o
+ool00`000000oooo0?ooo`0U0?ooo`00703oool200000980oooo00<000000?ooo`3oool0R at 3oool0
+0`000000oooo0?ooo`0C0?ooo`030000003oool0oooo02D0oooo000L0?ooo`030000003oool0oooo
+0940oooo00<000000?ooo`3oool0R at 3oool00`000000oooo0?ooo`0C0?ooo`030000003oool0oooo
+02D0oooo000L0?ooo`030000003oool0oooo0980oooo00<000000?ooo`3oool0R03oool00`000000
+oooo0?ooo`0D0?ooo`030000003oool0oooo02 at 0oooo000L0?ooo`030000003oool0oooo0980oooo
+00<000000?ooo`3oool0Q`3oool00`000000oooo0?ooo`0E0?ooo`030000003oool0oooo02 at 0oooo
+000L0?ooo`030000003oool0oooo0980oooo00<000000?ooo`3oool0Q`3oool00`000000oooo0?oo
+o`0E0?ooo`030000003oool0oooo02 at 0oooo000L0?ooo`030000003oool0oooo09<0oooo00<00000
+0?ooo`3oool0QP3oool00`000000oooo0?ooo`0F0?ooo`030000003oool0oooo02<0oooo000L0?oo
+o`800000U03oool00`000000oooo0?ooo`260?ooo`030000003oool0oooo01H0oooo00<000000?oo
+o`3oool08`3oool001`0oooo00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`240?ooo`03
+0000003oool0oooo01L0oooo00<000000?ooo`3oool08`3oool001`0oooo00<000000?ooo`3oool0
+U03oool00`000000oooo0?ooo`240?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool0
+8P3oool001`0oooo00<000000?ooo`3oool0U03oool00`000000oooo0?ooo`240?ooo`030000003o
+ool0oooo01P0oooo00<000000?ooo`3oool08P3oool001`0oooo00<000000?ooo`3oool0U at 3oool0
+0`000000oooo0?ooo`230?ooo`030000003oool0oooo01P0oooo00<000000?ooo`3oool08P3oool0
+01`0oooo00<000000?ooo`3oool0U at 3oool00`000000oooo0?ooo`220?ooo`030000003oool0oooo
+01X0oooo00<000000?ooo`3oool08 at 3oool001`0oooo0P00002F0?ooo`030000003oool0oooo0880
+oooo00<000000?ooo`3oool06P3oool00`000000oooo0?ooo`0Q0?ooo`00703oool00`000000oooo
+0?ooo`2F0?ooo`030000003oool0oooo0840oooo00<000000?ooo`3oool06P3oool00`000000oooo
+0?ooo`0Q0?ooo`00703oool00`000000oooo0?ooo`2F0?ooo`030000003oool0oooo0840oooo00<0
+00000?ooo`3oool06`3oool00`000000oooo0?ooo`0P0?ooo`002P3oool3000000<0oooo00<00000
+0?ooo`3oool00P3oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo09L0oooo00<00000
+0?ooo`3oool0O`3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0oooo0200oooo00090?oo
+o`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`040?ooo`030000003oool0
+oooo09L0oooo00<000000?ooo`3oool0O`3oool00`000000oooo0?ooo`0L0?ooo`030000003oool0
+oooo0200oooo00090?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`04
+0?ooo`030000003oool0oooo09L0oooo00<000000?ooo`3oool0O`3oool00`000000oooo0?ooo`0M
+0?ooo`030000003oool0oooo01l0oooo00090?ooo`050000003oool0oooo0?ooo`0000001`3oool0
+0`000000oooo0?ooo`040?ooo`<00000V03oool00`000000oooo0?ooo`1n0?ooo`030000003oool0
+oooo01d0oooo00<000000?ooo`3oool07`3oool000T0oooo00D000000?ooo`3oool0oooo00000005
+0?ooo`030000003oool0000000H0oooo00<000000?ooo`3oool0V03oool00`000000oooo0?ooo`1m
+0?ooo`030000003oool0oooo01l0oooo00<000000?ooo`3oool07P3oool000T0oooo00D000000?oo
+o`3oool0oooo000000060?ooo`8000001P3oool00`000000oooo0?ooo`2H0?ooo`030000003oool0
+oooo07d0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`0N0?ooo`002P3oool30000
+00P0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`2I0?ooo`030000003oool0oooo
+07`0oooo00<000000?ooo`3oool07`3oool00`000000oooo0?ooo`0N0?ooo`00703oool00`000000
+oooo0?ooo`2I0?ooo`030000003oool0oooo07`0oooo00<000000?ooo`3oool0803oool00`000000
+oooo0?ooo`0M0?ooo`00703oool2000009X0oooo00<000000?ooo`3oool0N`3oool00`000000oooo
+0?ooo`0Q0?ooo`030000003oool0oooo01d0oooo000L0?ooo`030000003oool0oooo09X0oooo00<0
+00000?ooo`3oool0NP3oool00`000000oooo0?ooo`0R0?ooo`030000003oool0oooo01`0oooo000L
+0?ooo`030000003oool0oooo09X0oooo00<000000?ooo`3oool0NP3oool00`000000oooo0?ooo`0R
+0?ooo`030000003oool0oooo01`0oooo000L0?ooo`030000003oool0oooo09/0oooo00<000000?oo
+o`3oool0N at 3oool00`000000oooo0?ooo`0R0?ooo`030000003oool0oooo01`0oooo000L0?ooo`03
+0000003oool0oooo09/0oooo00<000000?ooo`3oool0N at 3oool00`000000oooo0?ooo`0S0?ooo`03
+0000003oool0oooo01/0oooo000L0?ooo`030000003oool0oooo09/0oooo00<000000?ooo`3oool0
+N03oool00`000000oooo0?ooo`0T0?ooo`030000003oool0oooo01/0oooo000L0?ooo`800000W at 3o
+ool00`000000oooo0?ooo`1g0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool06P3o
+ool001`0oooo00<000000?ooo`3oool0W03oool00`000000oooo0?ooo`1g0?ooo`030000003oool0
+oooo02D0oooo00<000000?ooo`3oool06P3oool001`0oooo00<000000?ooo`3oool0W03oool00`00
+0000oooo0?ooo`1g0?ooo`030000003oool0oooo02H0oooo00<000000?ooo`3oool06 at 3oool001`0
+oooo00<000000?ooo`3oool0W at 3oool00`000000oooo0?ooo`1e0?ooo`030000003oool0oooo02L0
+oooo00<000000?ooo`3oool06 at 3oool001`0oooo00<000000?ooo`3oool0W at 3oool00`000000oooo
+0?ooo`1e0?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0603oool001`0oooo00<0
+00000?ooo`3oool0W at 3oool00`000000oooo0?ooo`1e0?ooo`030000003oool0oooo02P0oooo00<0
+00000?ooo`3oool0603oool001`0oooo0P00002O0?ooo`030000003oool0oooo07 at 0oooo00<00000
+0?ooo`3oool0:@3oool00`000000oooo0?ooo`0G0?ooo`00703oool00`000000oooo0?ooo`2N0?oo
+o`030000003oool0oooo07<0oooo00<000000?ooo`3oool0:P3oool00`000000oooo0?ooo`0G0?oo
+o`00703oool00`000000oooo0?ooo`2N0?ooo`030000003oool0oooo07<0oooo00<000000?ooo`3o
+ool0:P3oool2000001P0oooo000L0?ooo`030000003oool0oooo09l0oooo00<000000?ooo`3oool0
+LP3oool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo01H0oooo000L0?ooo`030000003o
+ool0oooo09l0oooo00<000000?ooo`3oool0LP3oool00`000000oooo0?ooo`0[0?ooo`8000005`3o
+ool001`0oooo00<000000?ooo`3oool0W`3oool00`000000oooo0?ooo`1a0?ooo`030000003oool0
+oooo02d0oooo00<000000?ooo`3oool05 at 3oool001`0oooo0P00002Q0?ooo`030000003oool0oooo
+0700oooo00<000000?ooo`3oool0;P3oool00`000000oooo0?ooo`0D0?ooo`00703oool00`000000
+oooo0?ooo`2P0?ooo`030000003oool0oooo0700oooo00<000000?ooo`3oool0;P3oool2000001D0
+oooo000L0?ooo`030000003oool0oooo0:00oooo00<000000?ooo`3oool0L03oool00`000000oooo
+0?ooo`0_0?ooo`030000003oool0oooo01<0oooo00040?ooo`<000000`3oool00`000000oooo0?oo
+o`020?ooo`040000003oool0oooo0?ooo`<000001P3oool00`000000oooo0?ooo`2Q0?ooo`030000
+003oool0oooo06h0oooo00<000000?ooo`3oool0<@3oool00`000000oooo0?ooo`0B0?ooo`000`3o
+ool01 at 000000oooo0?ooo`3oool0000000L0oooo00 at 000000?ooo`3oool000000`3oool00`000000
+oooo0?ooo`030?ooo`030000003oool0oooo0:40oooo00<000000?ooo`3oool0KP3oool00`000000
+oooo0?ooo`0a0?ooo`8000004`3oool000<0oooo00D000000?ooo`3oool0oooo000000070?ooo`03
+0000003oool0oooo00 at 0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`2Q0?ooo`03
+0000003oool0oooo06h0oooo00<000000?ooo`3oool0<P3oool200000180oooo00030?ooo`050000
+003oool0oooo0?ooo`0000001`3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo
+00<0oooo0`00002R0?ooo`030000003oool0oooo06d0oooo00<000000?ooo`3oool0<`3oool20000
+0140oooo00030?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo000000020?oo
+o`@000001P3oool00`000000oooo0?ooo`2R0?ooo`030000003oool0oooo06`0oooo00<000000?oo
+o`3oool0=@3oool200000100oooo00030?ooo`050000003oool0oooo0?ooo`0000001P3oool20000
+00<0oooo00<000000?ooo`3oool01P3oool00`000000oooo0?ooo`2R0?ooo`030000003oool0oooo
+06`0oooo00<000000?ooo`3oool0=P3oool2000000l0oooo00040?ooo`<00000203oool010000000
+oooo0?ooo`3oool4000000D0oooo00<000000?ooo`3oool0X`3oool00`000000oooo0?ooo`1[0?oo
+o`030000003oool0oooo03L0oooo0`00000=0?ooo`00703oool00`000000oooo0?ooo`2S0?ooo`03
+0000003oool0oooo06/0oooo00<000000?ooo`3oool0>@3oool3000000/0oooo000L0?ooo`800000
+Y03oool00`000000oooo0?ooo`1Z0?ooo`030000003oool0oooo03`0oooo100000080?ooo`00703o
+ool00`000000oooo0?ooo`2T0?ooo`030000003oool0oooo06T0oooo00<000000?ooo`3oool0B03o
+ool001`0oooo00<000000?ooo`3oool0Y03oool00`000000oooo0?ooo`1Y0?ooo`030000003oool0
+oooo04P0oooo000L0?ooo`030000003oool0oooo0:@0oooo00<000000?ooo`3oool0J at 3oool00`00
+0000oooo0?ooo`180?ooo`00703oool00`000000oooo0?ooo`2U0?ooo`030000003oool0oooo06L0
+oooo00<000000?ooo`3oool0B at 3oool001`0oooo00<000000?ooo`3oool0Y at 3oool00`000000oooo
+0?ooo`1W0?ooo`030000003oool0oooo04T0oooo000L0?ooo`800000YP3oool00`000000oooo0?oo
+o`1W0?ooo`030000003oool0oooo04T0oooo000L0?ooo`030000003oool0oooo0:H0oooo00<00000
+0?ooo`3oool0IP3oool00`000000oooo0?ooo`190?ooo`00703oool00`000000oooo0?ooo`2V0?oo
+o`030000003oool0oooo06D0oooo00<000000?ooo`3oool0BP3oool001`0oooo00<000000?ooo`3o
+ool0YP3oool00`000000oooo0?ooo`1U0?ooo`030000003oool0oooo04X0oooo000L0?ooo`030000
+003oool0oooo0:L0oooo00<000000?ooo`3oool0I03oool00`000000oooo0?ooo`1:0?ooo`00703o
+ool00`000000oooo0?ooo`2W0?ooo`030000003oool0oooo06 at 0oooo00<000000?ooo`3oool0BP3o
+ool001`0oooo0P00002X0?ooo`030000003oool0oooo06<0oooo00<000000?ooo`3oool0B`3oool0
+01`0oooo00<000000?ooo`3oool0Z03oool00`000000oooo0?ooo`1R0?ooo`030000003oool0oooo
+04/0oooo000L0?ooo`030000003oool0oooo0:P0oooo00<000000?ooo`3oool0HP3oool00`000000
+oooo0?ooo`1;0?ooo`00703oool00`000000oooo0?ooo`2X0?ooo`030000003oool0oooo0680oooo
+00<000000?ooo`3oool0B`3oool001`0oooo00<000000?ooo`3oool0Z at 3oool00`000000oooo0?oo
+o`1P0?ooo`030000003oool0oooo04`0oooo000L0?ooo`030000003oool0oooo0:T0oooo00<00000
+0?ooo`3oool0H03oool00`000000oooo0?ooo`1<0?ooo`00703oool200000:X0oooo00<000000?oo
+o`3oool0H03oool00`000000oooo0?ooo`1<0?ooo`00703oool00`000000oooo0?ooo`2Z0?ooo`03
+0000003oool0oooo05h0oooo00<000000?ooo`3oool0C at 3oool001`0oooo00<000000?ooo`3oool0
+ZP3oool00`000000oooo0?ooo`1N0?ooo`030000003oool0oooo04d0oooo000:0?ooo`<000000`3o
+ool00`000000oooo00000004000000D0oooo00<000000?ooo`3oool0ZP3oool00`000000oooo0?oo
+o`1N0?ooo`030000003oool0oooo04d0oooo00090?ooo`050000003oool0oooo0?ooo`0000001 at 3o
+ool00`000000oooo0?ooo`060?ooo`030000003oool0oooo0:/0oooo00<000000?ooo`3oool0G at 3o
+ool00`000000oooo0?ooo`1=0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0000000H0oooo00<0
+00000?ooo`3oool01 at 3oool00`000000oooo0?ooo`2[0?ooo`030000003oool0oooo05`0oooo00<0
+00000?ooo`3oool0CP3oool000T0oooo00D000000?ooo`3oool0oooo000000070?ooo`030000003o
+ool0oooo00 at 0oooo0`00002[0?ooo`030000003oool0oooo05`0oooo00<000000?ooo`3oool0CP3o
+ool000T0oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool0oooo00<0oooo00<0
+00000?ooo`3oool0[03oool00`000000oooo0?ooo`1K0?ooo`030000003oool0oooo04h0oooo0009
+0?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo
+00<000000?ooo`3oool0[03oool00`000000oooo0?ooo`1K0?ooo`030000003oool0oooo04h0oooo
+000:0?ooo`<000001P3oool3000000H0oooo00<000000?ooo`3oool0[03oool00`000000oooo0?oo
+o`1J0?ooo`030000003oool0oooo04l0oooo000L0?ooo`030000003oool0oooo0:d0oooo00<00000
+0?ooo`3oool0F at 3oool00`000000oooo0?ooo`1?0?ooo`00703oool200000:h0oooo00<000000?oo
+o`3oool0F at 3oool00`000000oooo0?ooo`1?0?ooo`00703oool00`000000oooo0?ooo`2]0?ooo`03
+0000003oool0oooo05T0oooo00<000000?ooo`3oool0C`3oool001`0oooo00<000000?ooo`3oool0
+[P3oool00`000000oooo0?ooo`1G0?ooo`030000003oool0oooo0500oooo000L0?ooo`030000003o
+ool0oooo0:h0oooo00<000000?ooo`3oool0E`3oool00`000000oooo0?ooo`1 at 0?ooo`00703oool0
+0`000000oooo0?ooo`2^0?ooo`030000003oool0oooo05L0oooo00<000000?ooo`3oool0D03oool0
+01`0oooo00<000000?ooo`3oool0[`3oool00`000000oooo0?ooo`1E0?ooo`030000003oool0oooo
+0540oooo000L0?ooo`800000/03oool00`000000oooo0?ooo`1E0?ooo`030000003oool0oooo0540
+oooo000L0?ooo`030000003oool0oooo0:l0oooo00<000000?ooo`3oool0E at 3oool00`000000oooo
+0?ooo`1A0?ooo`00703oool00`000000oooo0?ooo`2`0?ooo`030000003oool0oooo05 at 0oooo00<0
+00000?ooo`3oool0D at 3oool001`0oooo00<000000?ooo`3oool0/03oool00`000000oooo0?ooo`1C
+0?ooo`030000003oool0oooo0580oooo000L0?ooo`030000003oool0oooo0;00oooo00<000000?oo
+o`3oool0D`3oool00`000000oooo0?ooo`1B0?ooo`00703oool00`000000oooo0?ooo`2a0?ooo`03
+0000003oool0oooo0580oooo00<000000?ooo`3oool0DP3oool001`0oooo0P00002b0?ooo`030000
+003oool0oooo0540oooo00<000000?ooo`3oool0D`3oool001`0oooo00<000000?ooo`3oool0/@3o
+ool00`000000oooo0?ooo`1A0?ooo`030000003oool0oooo05<0oooo000L0?ooo`030000003oool0
+oooo0;80oooo00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`1C0?ooo`00703oool00`00
+0000oooo0?ooo`2b0?ooo`030000003oool0oooo0500oooo00<000000?ooo`3oool0D`3oool001`0
+oooo00<000000?ooo`3oool0/P3oool00`000000oooo0?ooo`1?0?ooo`030000003oool0oooo05 at 0
+oooo000L0?ooo`030000003oool0oooo0;<0oooo00<000000?ooo`3oool0CP3oool00`000000oooo
+0?ooo`1D0?ooo`00703oool200000;@0oooo00<000000?ooo`3oool0CP3oool00`000000oooo0?oo
+o`1D0?ooo`00703oool00`000000oooo0?ooo`2d0?ooo`030000003oool0oooo04`0oooo00<00000
+0?ooo`3oool0E at 3oool001`0oooo00<000000?ooo`3oool0]03oool00`000000oooo0?ooo`1<0?oo
+o`030000003oool0oooo05D0oooo00040?ooo`<000000`3oool00`000000oooo0000000400000080
+oooo0`0000060?ooo`030000003oool0oooo0;@0oooo00<000000?ooo`3oool0C03oool00`000000
+oooo0?ooo`1E0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3o
+ool00P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0]@3oool00`00
+0000oooo0?ooo`1;0?ooo`030000003oool0oooo05D0oooo00030?ooo`050000003oool0oooo0?oo
+o`0000001P3oool00`000000oooo0?ooo`050?ooo`030000003oool0oooo00<0oooo00<000000?oo
+o`3oool0]@3oool00`000000oooo0?ooo`1:0?ooo`030000003oool0oooo05H0oooo00030?ooo`05
+0000003oool0oooo0?ooo`0000001`3oool010000000oooo0?ooo`0000030?ooo`030000003oool0
+oooo00<0oooo0`00002e0?ooo`030000003oool0oooo04X0oooo00<000000?ooo`3oool0EP3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool0000000<000001P3oool0
+0`000000oooo0?ooo`2f0?ooo`030000003oool0oooo04T0oooo00<000000?ooo`3oool0EP3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3o
+ool00`000000oooo0?ooo`060?ooo`030000003oool0oooo0;H0oooo00<000000?ooo`3oool0B03o
+ool00`000000oooo0?ooo`1G0?ooo`00103oool3000000H0oooo0`0000030?ooo`@000001 at 3oool0
+0`000000oooo0?ooo`2f0?ooo`030000003oool0oooo04P0oooo00<000000?ooo`3oool0E`3oool0
+01`0oooo00<000000?ooo`3oool0]`3oool00`000000oooo0?ooo`170?ooo`030000003oool0oooo
+05L0oooo000L0?ooo`800000^03oool00`000000oooo0?ooo`160?ooo`030000003oool0oooo05P0
+oooo000L0?ooo`030000003oool0oooo0;L0oooo00<000000?ooo`3oool0AP3oool00`000000oooo
+0?ooo`1H0?ooo`00703oool00`000000oooo0?ooo`2h0?ooo`030000003oool0oooo04D0oooo00<0
+00000?ooo`3oool0F03oool001`0oooo00<000000?ooo`3oool0^03oool00`000000oooo0?ooo`15
+0?ooo`030000003oool0oooo05P0oooo000L0?ooo`030000003oool0oooo0;T0oooo00<000000?oo
+o`3oool0@`3oool00`000000oooo0?ooo`1I0?ooo`00703oool00`000000oooo0?ooo`2i0?ooo`03
+0000003oool0oooo04<0oooo00<000000?ooo`3oool0F at 3oool001`0oooo0P00002j0?ooo`030000
+003oool0oooo04<0oooo00<000000?ooo`3oool0F at 3oool001`0oooo00<000000?ooo`3oool0^P3o
+ool00`000000oooo0?ooo`110?ooo`030000003oool0oooo05X0oooo000L0?ooo`030000003oool0
+oooo0;X0oooo00<000000?ooo`3oool0@@3oool00`000000oooo0?ooo`1J0?ooo`00703oool00`00
+0000oooo0?ooo`2j0?ooo`030000003oool0oooo0440oooo00<000000?ooo`3oool0FP3oool001`0
+oooo00<000000?ooo`3oool0^`3oool00`000000oooo0?ooo`0o0?ooo`030000003oool0oooo05/0
+oooo000L0?ooo`030000003oool0oooo0;/0oooo00<000000?ooo`3oool0?`3oool00`000000oooo
+0?ooo`1K0?ooo`00703oool200000;`0oooo00<000000?ooo`3oool0?`3oool00`000000oooo0?oo
+o`1K0?ooo`00703oool00`000000oooo0?ooo`2l0?ooo`030000003oool0oooo03d0oooo00<00000
+0?ooo`3oool0G03oool001`0oooo00<000000?ooo`3oool0_03oool00`000000oooo0?ooo`0m0?oo
+o`030000003oool0oooo05`0oooo000L0?ooo`030000003oool0oooo0;`0oooo00<000000?ooo`3o
+ool0?@3oool00`000000oooo0?ooo`1L0?ooo`00703oool00`000000oooo0?ooo`2m0?ooo`030000
+003oool0oooo03/0oooo00<000000?ooo`3oool0G at 3oool001`0oooo00<000000?ooo`3oool0_ at 3o
+ool00`000000oooo0?ooo`0k0?ooo`030000003oool0oooo05d0oooo000L0?ooo`800000_`3oool0
+0`000000oooo0?ooo`0i0?ooo`800000G`3oool001`0oooo00<000000?ooo`3oool0_P3oool00`00
+0000oooo0?ooo`0i0?ooo`030000003oool0oooo05h0oooo000L0?ooo`030000003oool0oooo0;h0
+oooo0P00000j0?ooo`030000003oool0oooo05h0oooo000:0?ooo`<000000`3oool00`000000oooo
+0?ooo`03000000H0oooo00<000000?ooo`3oool0_`3oool00`000000oooo0?ooo`0g0?ooo`030000
+003oool0oooo05l0oooo00090?ooo`050000003oool0oooo0?ooo`000000103oool01 at 000000oooo
+0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0_`3oool00`000000oooo0?ooo`0g0?ooo`03
+0000003oool0oooo05l0oooo00090?ooo`050000003oool0oooo0?ooo`000000203oool00`000000
+oooo0?ooo`030?ooo`030000003oool0oooo0<00oooo00<000000?ooo`3oool0=P3oool00`000000
+oooo0?ooo`1O0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0000000H0oooo0P0000060?ooo`<0
+0000`03oool00`000000oooo0?ooo`0e0?ooo`030000003oool0oooo0600oooo00090?ooo`050000
+003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0<40
+oooo00<000000?ooo`3oool0=03oool00`000000oooo0?ooo`1P0?ooo`002 at 3oool01@000000oooo
+0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`030000003oool0oooo
+0<40oooo00<000000?ooo`3oool0<`3oool200000680oooo000:0?ooo`<000001P3oool3000000H0
+oooo00<000000?ooo`3oool0`@3oool2000003 at 0oooo00<000000?ooo`3oool0H at 3oool001`0oooo
+00<000000?ooo`3oool0`P3oool00`000000oooo0?ooo`0b0?ooo`030000003oool0oooo0640oooo
+000L0?ooo`800000``3oool00`000000oooo0?ooo`0a0?ooo`030000003oool0oooo0680oooo000L
+0?ooo`030000003oool0oooo0<<0oooo00<000000?ooo`3oool0<03oool00`000000oooo0?ooo`1R
+0?ooo`00703oool00`000000oooo0?ooo`330?ooo`030000003oool0oooo02l0oooo00<000000?oo
+o`3oool0H`3oool001`0oooo00<000000?ooo`3oool0a03oool00`000000oooo0?ooo`0^0?ooo`03
+0000003oool0oooo06<0oooo000L0?ooo`030000003oool0oooo0<@0oooo00<000000?ooo`3oool0
+;P3oool00`000000oooo0?ooo`1S0?ooo`00703oool00`000000oooo0?ooo`350?ooo`030000003o
+ool0oooo02`0oooo00<000000?ooo`3oool0I03oool001`0oooo0P0000360?ooo`030000003oool0
+oooo02`0oooo00<000000?ooo`3oool0I03oool001`0oooo00<000000?ooo`3oool0aP3oool00`00
+0000oooo0?ooo`0Z0?ooo`030000003oool0oooo06D0oooo000L0?ooo`030000003oool0oooo0<H0
+oooo00<000000?ooo`3oool0:P3oool00`000000oooo0?ooo`1U0?ooo`00703oool00`000000oooo
+0?ooo`370?ooo`030000003oool0oooo02P0oooo00<000000?ooo`3oool0IP3oool001`0oooo00<0
+00000?ooo`3oool0a`3oool00`000000oooo0?ooo`0X0?ooo`030000003oool0oooo06H0oooo000L
+0?ooo`030000003oool0oooo0<P0oooo00<000000?ooo`3oool09P3oool00`000000oooo0?ooo`1W
+0?ooo`00703oool200000<T0oooo0P00000W0?ooo`030000003oool0oooo06L0oooo000L0?ooo`03
+0000003oool0oooo0<T0oooo00<000000?ooo`3oool0903oool00`000000oooo0?ooo`1X0?ooo`00
+703oool00`000000oooo0?ooo`390?ooo`8000009 at 3oool00`000000oooo0?ooo`1X0?ooo`00703o
+ool00`000000oooo0?ooo`3:0?ooo`030000003oool0oooo0280oooo00<000000?ooo`3oool0J at 3o
+ool001`0oooo00<000000?ooo`3oool0b`3oool00`000000oooo0?ooo`0P0?ooo`800000J`3oool0
+01`0oooo00<000000?ooo`3oool0b`3oool200000240oooo00<000000?ooo`3oool0JP3oool001`0
+oooo0P00003=0?ooo`030000003oool0oooo01h0oooo0P00001/0?ooo`00703oool00`000000oooo
+0?ooo`3=0?ooo`030000003oool0oooo01d0oooo00<000000?ooo`3oool0J`3oool001`0oooo00<0
+00000?ooo`3oool0c at 3oool2000001d0oooo00<000000?ooo`3oool0K03oool000 at 0oooo0`000003
+0?ooo`030000003oool0oooo00<000000`3oool3000000H0oooo00<000000?ooo`3oool0cP3oool0
+0`000000oooo0?ooo`0J0?ooo`800000KP3oool000<0oooo00D000000?ooo`3oool0oooo00000004
+0?ooo`070000003oool0oooo0?ooo`000000oooo000000030?ooo`030000003oool0oooo00<0oooo
+00<000000?ooo`3oool0c`3oool00`000000oooo0?ooo`0H0?ooo`800000K`3oool000<0oooo00D0
+00000?ooo`3oool0oooo000000080?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0
+0`3oool00`000000oooo0?ooo`3?0?ooo`8000006 at 3oool00`000000oooo0?ooo`1^0?ooo`000`3o
+ool01 at 000000oooo0?ooo`3oool0000000H0oooo0P0000020?ooo`050000003oool0oooo0?ooo`00
+00001 at 3oool300000=00oooo0P00000G0?ooo`030000003oool0oooo06l0oooo00030?ooo`050000
+003oool0oooo0?ooo`000000203oool00`000000oooo00000003000000H0oooo00<000000?ooo`3o
+ool0d at 3oool2000001D0oooo0P00001a0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000 at 0
+oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0oooo00H0oooo00<000000?oo
+o`3oool0dP3oool2000001<0oooo0P00001b0?ooo`00103oool3000000H0oooo0`0000030?ooo`@0
+00001 at 3oool00`000000oooo0?ooo`3C0?ooo`8000004 at 3oool2000007<0oooo000L0?ooo`030000
+003oool0oooo0=@0oooo0P00000?0?ooo`800000M03oool001`0oooo0P00003G0?ooo`8000002`3o
+ool2000007H0oooo000L0?ooo`030000003oool0oooo0=L0oooo0`0000070?ooo`<00000M`3oool0
+01`0oooo00<000000?ooo`3oool0f at 3oool9000007T0oooo000L0?ooo`030000003oool0oooo0?l0
+ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`00703oool00`000000oooo0?oo
+o`3o0?oooe`0oooo000L0?ooo`800000o`3ooomM0?ooo`00703oool00`000000oooo0?ooo`3o0?oo
+oe`0oooo000L0?ooo`030000003oool0oooo0?l0ooooG03oool00?l0ooooN`3oool00?l0ooooN`3o
+ool00?l0ooooN`3oool00?l0ooooN`3oool00?l0ooooN`3oool00001\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-85.6377, -0.0193469, 
+  3.00749, 0.00172522}}],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.5847 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .09395 -24 -4.5 ]
+[.01131 .09395 0 4.5 ]
+[.01131 .17319 -18 -4.5 ]
+[.01131 .17319 0 4.5 ]
+[.01131 .25242 -24 -4.5 ]
+[.01131 .25242 0 4.5 ]
+[.01131 .33166 -18 -4.5 ]
+[.01131 .33166 0 4.5 ]
+[.01131 .41089 -24 -4.5 ]
+[.01131 .41089 0 4.5 ]
+[.01131 .49013 -18 -4.5 ]
+[.01131 .49013 0 4.5 ]
+[.01131 .56936 -24 -4.5 ]
+[.01131 .56936 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .09395 m
+.03006 .09395 L
+s
+[(0.05)] .01131 .09395 1 0 Mshowa
+.02381 .17319 m
+.03006 .17319 L
+s
+[(0.1)] .01131 .17319 1 0 Mshowa
+.02381 .25242 m
+.03006 .25242 L
+s
+[(0.15)] .01131 .25242 1 0 Mshowa
+.02381 .33166 m
+.03006 .33166 L
+s
+[(0.2)] .01131 .33166 1 0 Mshowa
+.02381 .41089 m
+.03006 .41089 L
+s
+[(0.25)] .01131 .41089 1 0 Mshowa
+.02381 .49013 m
+.03006 .49013 L
+s
+[(0.3)] .01131 .49013 1 0 Mshowa
+.02381 .56936 m
+.03006 .56936 L
+s
+[(0.35)] .01131 .56936 1 0 Mshowa
+.125 Mabswid
+.02381 .03056 m
+.02756 .03056 L
+s
+.02381 .04641 m
+.02756 .04641 L
+s
+.02381 .06226 m
+.02756 .06226 L
+s
+.02381 .0781 m
+.02756 .0781 L
+s
+.02381 .1098 m
+.02756 .1098 L
+s
+.02381 .12564 m
+.02756 .12564 L
+s
+.02381 .14149 m
+.02756 .14149 L
+s
+.02381 .15734 m
+.02756 .15734 L
+s
+.02381 .18903 m
+.02756 .18903 L
+s
+.02381 .20488 m
+.02756 .20488 L
+s
+.02381 .22073 m
+.02756 .22073 L
+s
+.02381 .23657 m
+.02756 .23657 L
+s
+.02381 .26827 m
+.02756 .26827 L
+s
+.02381 .28411 m
+.02756 .28411 L
+s
+.02381 .29996 m
+.02756 .29996 L
+s
+.02381 .31581 m
+.02756 .31581 L
+s
+.02381 .3475 m
+.02756 .3475 L
+s
+.02381 .36335 m
+.02756 .36335 L
+s
+.02381 .3792 m
+.02756 .3792 L
+s
+.02381 .39504 m
+.02756 .39504 L
+s
+.02381 .42674 m
+.02756 .42674 L
+s
+.02381 .44258 m
+.02756 .44258 L
+s
+.02381 .45843 m
+.02756 .45843 L
+s
+.02381 .47428 m
+.02756 .47428 L
+s
+.02381 .50597 m
+.02756 .50597 L
+s
+.02381 .52182 m
+.02756 .52182 L
+s
+.02381 .53767 m
+.02756 .53767 L
+s
+.02381 .55351 m
+.02756 .55351 L
+s
+.02381 .58521 m
+.02756 .58521 L
+s
+.02381 .60105 m
+.02756 .60105 L
+s
+.02381 .6169 m
+.02756 .6169 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .01472 m
+.02567 .01472 L
+.0266 .01472 L
+.02753 .01473 L
+.02846 .01473 L
+.02938 .01474 L
+.03031 .01476 L
+.03124 .01477 L
+.03217 .01479 L
+.0331 .01481 L
+.03403 .01483 L
+.03496 .01486 L
+.03589 .01488 L
+.03682 .01491 L
+.03775 .01495 L
+.03868 .01498 L
+.03961 .01502 L
+.04053 .01505 L
+.04146 .0151 L
+.04239 .01514 L
+.04332 .01518 L
+.04425 .01523 L
+.04518 .01528 L
+.04611 .01533 L
+.04704 .01539 L
+.04797 .01544 L
+.0489 .0155 L
+.04983 .01556 L
+.05075 .01563 L
+.05168 .01569 L
+.05261 .01576 L
+.05354 .01583 L
+.05447 .0159 L
+.0554 .01597 L
+.05633 .01605 L
+.05726 .01612 L
+.05819 .0162 L
+.05912 .01628 L
+.06005 .01637 L
+.06098 .01645 L
+.0619 .01654 L
+.06283 .01663 L
+.06376 .01672 L
+.06469 .01681 L
+.06562 .0169 L
+.06655 .017 L
+.06748 .0171 L
+.06841 .0172 L
+.06934 .0173 L
+.07027 .0174 L
+Mistroke
+.0712 .01751 L
+.07213 .01761 L
+.07305 .01772 L
+.07398 .01783 L
+.07491 .01794 L
+.07584 .01805 L
+.07677 .01816 L
+.0777 .01828 L
+.07863 .01839 L
+.07956 .01851 L
+.08049 .01863 L
+.08142 .01875 L
+.08235 .01887 L
+.08328 .01899 L
+.0842 .01912 L
+.08513 .01924 L
+.08606 .01937 L
+.08699 .0195 L
+.08792 .01962 L
+.08885 .01975 L
+.08978 .01988 L
+.09071 .02001 L
+.09164 .02014 L
+.09257 .02028 L
+.0935 .02041 L
+.09443 .02054 L
+.09535 .02068 L
+.09628 .02081 L
+.09721 .02095 L
+.09814 .02108 L
+.09907 .02122 L
+.1 .02136 L
+.10093 .0215 L
+.10186 .02164 L
+.10279 .02177 L
+.10372 .02191 L
+.10465 .02205 L
+.10557 .02219 L
+.1065 .02233 L
+.10743 .02247 L
+.10836 .02261 L
+.10929 .02275 L
+.11022 .02289 L
+.11115 .02303 L
+.11208 .02317 L
+.11301 .02331 L
+.11394 .02345 L
+.11487 .02359 L
+.1158 .02373 L
+.11672 .02387 L
+Mistroke
+.11765 .02401 L
+.11858 .02414 L
+.11951 .02428 L
+.12044 .02442 L
+.12137 .02455 L
+.1223 .02469 L
+.12323 .02482 L
+.12416 .02496 L
+.12509 .02509 L
+.12602 .02523 L
+.12695 .02536 L
+.12787 .02549 L
+.1288 .02562 L
+.12973 .02575 L
+.13066 .02588 L
+.13159 .02601 L
+.13252 .02613 L
+.13345 .02626 L
+.13438 .02638 L
+.13531 .0265 L
+.13624 .02662 L
+.13717 .02674 L
+.1381 .02686 L
+.13902 .02698 L
+.13995 .02709 L
+.14088 .02721 L
+.14181 .02732 L
+.14274 .02743 L
+.14367 .02754 L
+.1446 .02765 L
+.14553 .02775 L
+.14646 .02786 L
+.14739 .02796 L
+.14832 .02806 L
+.14925 .02816 L
+.15017 .02825 L
+.1511 .02835 L
+.15203 .02844 L
+.15296 .02853 L
+.15389 .02861 L
+.15482 .0287 L
+.15575 .02878 L
+.15668 .02886 L
+.15761 .02894 L
+.15854 .02902 L
+.15947 .02909 L
+.16039 .02916 L
+.16132 .02923 L
+.16225 .02929 L
+.16318 .02936 L
+Mistroke
+.16411 .02942 L
+.16504 .02947 L
+.16597 .02953 L
+.1669 .02958 L
+.16783 .02963 L
+.16876 .02968 L
+.16969 .02972 L
+.17062 .02976 L
+.17154 .0298 L
+.17247 .02983 L
+.1734 .02986 L
+.17433 .02989 L
+.17526 .02992 L
+.17619 .02994 L
+.17712 .02996 L
+.17805 .02997 L
+.17898 .02998 L
+.17991 .02999 L
+.18084 .03 L
+.18177 .03 L
+.18269 .03 L
+.18362 .02999 L
+.18455 .02998 L
+.18548 .02997 L
+.18641 .02995 L
+.18734 .02993 L
+.18827 .02991 L
+.1892 .02988 L
+.19013 .02985 L
+.19106 .02982 L
+.19199 .02978 L
+.19292 .02974 L
+.19384 .02969 L
+.19477 .02964 L
+.1957 .02959 L
+.19663 .02953 L
+.19756 .02947 L
+.19849 .02941 L
+.19942 .02934 L
+.20035 .02926 L
+.20128 .02919 L
+.20221 .02911 L
+.20314 .02902 L
+.20407 .02893 L
+.20499 .02884 L
+.20592 .02874 L
+.20685 .02864 L
+.20778 .02853 L
+.20871 .02842 L
+.20964 .02831 L
+Mistroke
+.21057 .02819 L
+.2115 .02807 L
+.21243 .02794 L
+.21336 .02781 L
+.21429 .02767 L
+.21521 .02753 L
+.21614 .02739 L
+.21707 .02724 L
+.218 .02709 L
+.21893 .02693 L
+.21986 .02677 L
+.22079 .02661 L
+.22172 .02644 L
+.22265 .02626 L
+.22358 .02608 L
+.22451 .0259 L
+.22544 .02571 L
+.22636 .02552 L
+.22729 .02532 L
+.22822 .02512 L
+.22915 .02492 L
+.23008 .02471 L
+.23101 .0245 L
+.23194 .02428 L
+.23287 .02406 L
+.2338 .02383 L
+.23473 .0236 L
+.23566 .02336 L
+.23659 .02313 L
+.23751 .02288 L
+.23844 .02263 L
+.23937 .02238 L
+.2403 .02212 L
+.24123 .02186 L
+.24216 .0216 L
+.24309 .02133 L
+.24402 .02105 L
+.24495 .02078 L
+.24588 .02049 L
+.24681 .02021 L
+.24774 .01992 L
+.24866 .01962 L
+.24959 .01932 L
+.25052 .01902 L
+.25145 .01871 L
+.25238 .0184 L
+.25331 .01809 L
+.25424 .01777 L
+.25517 .01745 L
+.2561 .01712 L
+Mistroke
+.25703 .01679 L
+.25796 .01645 L
+.25889 .01611 L
+.25981 .01577 L
+.26074 .01542 L
+.26167 .01507 L
+.2626 .01472 L
+.26353 .01507 L
+.26446 .01543 L
+.26539 .01579 L
+.26632 .01616 L
+.26725 .01654 L
+.26818 .01691 L
+.26911 .01729 L
+.27003 .01767 L
+.27096 .01806 L
+.27189 .01845 L
+.27282 .01884 L
+.27375 .01924 L
+.27468 .01964 L
+.27561 .02004 L
+.27654 .02045 L
+.27747 .02086 L
+.2784 .02127 L
+.27933 .02169 L
+.28026 .0221 L
+.28118 .02252 L
+.28211 .02295 L
+.28304 .02338 L
+.28397 .0238 L
+.2849 .02424 L
+.28583 .02467 L
+.28676 .02511 L
+.28769 .02555 L
+.28862 .02599 L
+.28955 .02644 L
+.29048 .02688 L
+.29141 .02733 L
+.29233 .02779 L
+.29326 .02824 L
+.29419 .0287 L
+.29512 .02915 L
+.29605 .02961 L
+.29698 .03008 L
+.29791 .03054 L
+.29884 .03101 L
+.29977 .03147 L
+.3007 .03194 L
+.30163 .03241 L
+.30256 .03288 L
+Mistroke
+.30348 .03336 L
+.30441 .03383 L
+.30534 .03431 L
+.30627 .03479 L
+.3072 .03526 L
+.30813 .03574 L
+.30906 .03622 L
+.30999 .03671 L
+.31092 .03719 L
+.31185 .03767 L
+.31278 .03816 L
+.3137 .03864 L
+.31463 .03912 L
+.31556 .03961 L
+.31649 .04009 L
+.31742 .04058 L
+.31835 .04107 L
+.31928 .04155 L
+.32021 .04204 L
+.32114 .04252 L
+.32207 .04301 L
+.323 .0435 L
+.32393 .04398 L
+.32485 .04447 L
+.32578 .04495 L
+.32671 .04543 L
+.32764 .04592 L
+.32857 .0464 L
+.3295 .04688 L
+.33043 .04736 L
+.33136 .04784 L
+.33229 .04832 L
+.33322 .04879 L
+.33415 .04927 L
+.33508 .04974 L
+.336 .05022 L
+.33693 .05069 L
+.33786 .05116 L
+.33879 .05162 L
+.33972 .05209 L
+.34065 .05255 L
+.34158 .05301 L
+.34251 .05347 L
+.34344 .05393 L
+.34437 .05438 L
+.3453 .05483 L
+.34623 .05528 L
+.34715 .05573 L
+.34808 .05617 L
+.34901 .05661 L
+Mistroke
+.34994 .05705 L
+.35087 .05749 L
+.3518 .05792 L
+.35273 .05834 L
+.35366 .05877 L
+.35459 .05919 L
+.35552 .05961 L
+.35645 .06002 L
+.35738 .06043 L
+.3583 .06083 L
+.35923 .06124 L
+.36016 .06163 L
+.36109 .06203 L
+.36202 .06241 L
+.36295 .0628 L
+.36388 .06318 L
+.36481 .06355 L
+.36574 .06392 L
+.36667 .06429 L
+.3676 .06465 L
+.36852 .065 L
+.36945 .06535 L
+.37038 .06569 L
+.37131 .06603 L
+.37224 .06637 L
+.37317 .06669 L
+.3741 .06701 L
+.37503 .06733 L
+.37596 .06764 L
+.37689 .06794 L
+.37782 .06824 L
+.37875 .06853 L
+.37967 .06881 L
+.3806 .06909 L
+.38153 .06936 L
+.38246 .06963 L
+.38339 .06989 L
+.38432 .07014 L
+.38525 .07038 L
+.38618 .07061 L
+.38711 .07084 L
+.38804 .07106 L
+.38897 .07128 L
+.3899 .07148 L
+.39082 .07168 L
+.39175 .07187 L
+.39268 .07206 L
+.39361 .07223 L
+.39454 .0724 L
+.39547 .07255 L
+Mistroke
+.3964 .0727 L
+.39733 .07284 L
+.39826 .07298 L
+.39919 .0731 L
+.40012 .07322 L
+.40105 .07332 L
+.40197 .07342 L
+.4029 .07351 L
+.40383 .07358 L
+.40476 .07365 L
+.40569 .07371 L
+.40662 .07376 L
+.40755 .0738 L
+.40848 .07383 L
+.40941 .07386 L
+.41034 .07387 L
+.41127 .07387 L
+.4122 .07386 L
+.41312 .07384 L
+.41405 .07381 L
+.41498 .07377 L
+.41591 .07372 L
+.41684 .07366 L
+.41777 .07358 L
+.4187 .0735 L
+.41963 .07341 L
+.42056 .0733 L
+.42149 .07318 L
+.42242 .07306 L
+.42334 .07292 L
+.42427 .07277 L
+.4252 .07261 L
+.42613 .07243 L
+.42706 .07225 L
+.42799 .07205 L
+.42892 .07184 L
+.42985 .07162 L
+.43078 .07139 L
+.43171 .07115 L
+.43264 .07089 L
+.43357 .07062 L
+.43449 .07034 L
+.43542 .07005 L
+.43635 .06974 L
+.43728 .06942 L
+.43821 .06909 L
+.43914 .06874 L
+.44007 .06839 L
+.441 .06802 L
+.44193 .06763 L
+Mistroke
+.44286 .06724 L
+.44379 .06683 L
+.44472 .0664 L
+.44564 .06597 L
+.44657 .06552 L
+.4475 .06506 L
+.44843 .06458 L
+.44936 .06409 L
+.45029 .06359 L
+.45122 .06307 L
+.45215 .06254 L
+.45308 .06199 L
+.45401 .06144 L
+.45494 .06086 L
+.45587 .06028 L
+.45679 .05968 L
+.45772 .05906 L
+.45865 .05843 L
+.45958 .05779 L
+.46051 .05713 L
+.46144 .05646 L
+.46237 .05577 L
+.4633 .05507 L
+.46423 .05435 L
+.46516 .05362 L
+.46609 .05288 L
+.46702 .05212 L
+.46794 .05135 L
+.46887 .05056 L
+.4698 .04975 L
+.47073 .04893 L
+.47166 .0481 L
+.47259 .04725 L
+.47352 .04639 L
+.47445 .04551 L
+.47538 .04462 L
+.47631 .04371 L
+.47724 .04278 L
+.47816 .04185 L
+.47909 .04089 L
+.48002 .03992 L
+.48095 .03894 L
+.48188 .03794 L
+.48281 .03692 L
+.48374 .03589 L
+.48467 .03485 L
+.4856 .03379 L
+.48653 .03271 L
+.48746 .03162 L
+.48839 .03051 L
+Mistroke
+.48931 .02939 L
+.49024 .02825 L
+.49117 .0271 L
+.4921 .02593 L
+.49303 .02474 L
+.49396 .02355 L
+.49489 .02233 L
+.49582 .0211 L
+.49675 .01985 L
+.49768 .01859 L
+.49861 .01732 L
+.49954 .01602 L
+.50046 .01472 L
+.50139 .01604 L
+.50232 .01738 L
+.50325 .01873 L
+.50418 .0201 L
+.50511 .02149 L
+.50604 .02289 L
+.50697 .0243 L
+.5079 .02573 L
+.50883 .02718 L
+.50976 .02864 L
+.51069 .03012 L
+.51161 .03161 L
+.51254 .03312 L
+.51347 .03464 L
+.5144 .03618 L
+.51533 .03773 L
+.51626 .0393 L
+.51719 .04089 L
+.51812 .04248 L
+.51905 .0441 L
+.51998 .04573 L
+.52091 .04737 L
+.52184 .04903 L
+.52276 .0507 L
+.52369 .05239 L
+.52462 .05409 L
+.52555 .05581 L
+.52648 .05754 L
+.52741 .05929 L
+.52834 .06105 L
+.52927 .06283 L
+.5302 .06462 L
+.53113 .06643 L
+.53206 .06825 L
+.53298 .07008 L
+.53391 .07193 L
+.53484 .07379 L
+Mistroke
+.53577 .07567 L
+.5367 .07756 L
+.53763 .07946 L
+.53856 .08138 L
+.53949 .08331 L
+.54042 .08526 L
+.54135 .08722 L
+.54228 .08919 L
+.54321 .09118 L
+.54413 .09318 L
+.54506 .09519 L
+.54599 .09722 L
+.54692 .09926 L
+.54785 .10131 L
+.54878 .10338 L
+.54971 .10546 L
+.55064 .10755 L
+.55157 .10966 L
+.5525 .11178 L
+.55343 .11391 L
+.55436 .11605 L
+.55528 .1182 L
+.55621 .12037 L
+.55714 .12255 L
+.55807 .12474 L
+.559 .12694 L
+.55993 .12916 L
+.56086 .13139 L
+.56179 .13362 L
+.56272 .13588 L
+.56365 .13814 L
+.56458 .14041 L
+.56551 .14269 L
+.56643 .14499 L
+.56736 .14729 L
+.56829 .14961 L
+.56922 .15194 L
+.57015 .15428 L
+.57108 .15662 L
+.57201 .15898 L
+.57294 .16135 L
+.57387 .16373 L
+.5748 .16612 L
+.57573 .16852 L
+.57666 .17092 L
+.57758 .17334 L
+.57851 .17577 L
+.57944 .17821 L
+.58037 .18065 L
+.5813 .1831 L
+Mistroke
+.58223 .18557 L
+.58316 .18804 L
+.58409 .19052 L
+.58502 .19301 L
+.58595 .1955 L
+.58688 .19801 L
+.5878 .20052 L
+.58873 .20304 L
+.58966 .20557 L
+.59059 .2081 L
+.59152 .21065 L
+.59245 .2132 L
+.59338 .21575 L
+.59431 .21832 L
+.59524 .22089 L
+.59617 .22346 L
+.5971 .22605 L
+.59803 .22863 L
+.59895 .23123 L
+.59988 .23383 L
+.60081 .23644 L
+.60174 .23905 L
+.60267 .24166 L
+.6036 .24429 L
+.60453 .24691 L
+.60546 .24955 L
+.60639 .25218 L
+.60732 .25482 L
+.60825 .25747 L
+.60918 .26012 L
+.6101 .26277 L
+.61103 .26543 L
+.61196 .26809 L
+.61289 .27075 L
+.61382 .27342 L
+.61475 .27609 L
+.61568 .27876 L
+.61661 .28143 L
+.61754 .28411 L
+.61847 .28679 L
+.6194 .28947 L
+.62033 .29215 L
+.62125 .29484 L
+.62218 .29752 L
+.62311 .30021 L
+.62404 .3029 L
+.62497 .30559 L
+.6259 .30828 L
+.62683 .31097 L
+.62776 .31366 L
+Mistroke
+.62869 .31635 L
+.62962 .31904 L
+.63055 .32173 L
+.63148 .32442 L
+.6324 .3271 L
+.63333 .32979 L
+.63426 .33248 L
+.63519 .33516 L
+.63612 .33785 L
+.63705 .34053 L
+.63798 .34321 L
+.63891 .34588 L
+.63984 .34856 L
+.64077 .35123 L
+.6417 .3539 L
+.64262 .35657 L
+.64355 .35923 L
+.64448 .36189 L
+.64541 .36454 L
+.64634 .3672 L
+.64727 .36984 L
+.6482 .37249 L
+.64913 .37513 L
+.65006 .37776 L
+.65099 .38039 L
+.65192 .38301 L
+.65285 .38563 L
+.65377 .38824 L
+.6547 .39085 L
+.65563 .39345 L
+.65656 .39605 L
+.65749 .39864 L
+.65842 .40122 L
+.65935 .40379 L
+.66028 .40636 L
+.66121 .40892 L
+.66214 .41147 L
+.66307 .41402 L
+.664 .41656 L
+.66492 .41908 L
+.66585 .4216 L
+.66678 .42412 L
+.66771 .42662 L
+.66864 .42911 L
+.66957 .4316 L
+.6705 .43407 L
+.67143 .43654 L
+.67236 .43899 L
+.67329 .44144 L
+.67422 .44387 L
+Mistroke
+.67515 .4463 L
+.67607 .44871 L
+.677 .45112 L
+.67793 .45351 L
+.67886 .45589 L
+.67979 .45826 L
+.68072 .46061 L
+.68165 .46296 L
+.68258 .46529 L
+.68351 .46761 L
+.68444 .46992 L
+.68537 .47221 L
+.6863 .47449 L
+.68722 .47676 L
+.68815 .47901 L
+.68908 .48125 L
+.69001 .48348 L
+.69094 .48569 L
+.69187 .48789 L
+.6928 .49007 L
+.69373 .49224 L
+.69466 .49439 L
+.69559 .49653 L
+.69652 .49865 L
+.69744 .50076 L
+.69837 .50285 L
+.6993 .50493 L
+.70023 .50699 L
+.70116 .50903 L
+.70209 .51105 L
+.70302 .51306 L
+.70395 .51505 L
+.70488 .51703 L
+.70581 .51899 L
+.70674 .52092 L
+.70767 .52285 L
+.70859 .52475 L
+.70952 .52663 L
+.71045 .5285 L
+.71138 .53035 L
+.71231 .53218 L
+.71324 .53399 L
+.71417 .53578 L
+.7151 .53755 L
+.71603 .5393 L
+.71696 .54103 L
+.71789 .54275 L
+.71882 .54444 L
+.71974 .54611 L
+.72067 .54776 L
+Mistroke
+.7216 .54939 L
+.72253 .551 L
+.72346 .55259 L
+.72439 .55416 L
+.72532 .5557 L
+.72625 .55723 L
+.72718 .55873 L
+.72811 .56021 L
+.72904 .56167 L
+.72997 .5631 L
+.73089 .56451 L
+.73182 .56591 L
+.73275 .56727 L
+.73368 .56862 L
+.73461 .56994 L
+.73554 .57124 L
+.73647 .57251 L
+.7374 .57376 L
+.73833 .57499 L
+.73926 .57619 L
+.74019 .57737 L
+.74111 .57853 L
+.74204 .57966 L
+.74297 .58077 L
+.7439 .58185 L
+.74483 .5829 L
+.74576 .58394 L
+.74669 .58494 L
+.74762 .58592 L
+.74855 .58688 L
+.74948 .58781 L
+.75041 .58871 L
+.75134 .58959 L
+.75226 .59044 L
+.75319 .59127 L
+.75412 .59207 L
+.75505 .59284 L
+.75598 .59359 L
+.75691 .59431 L
+.75784 .595 L
+.75877 .59567 L
+.7597 .59631 L
+.76063 .59692 L
+.76156 .59751 L
+.76249 .59806 L
+.76341 .5986 L
+.76434 .5991 L
+.76527 .59957 L
+.7662 .60002 L
+.76713 .60044 L
+Mistroke
+.76806 .60083 L
+.76899 .60119 L
+.76992 .60153 L
+.77085 .60183 L
+.77178 .60211 L
+.77271 .60236 L
+.77364 .60258 L
+.77456 .60277 L
+.77549 .60294 L
+.77642 .60307 L
+.77735 .60318 L
+.77828 .60325 L
+.77921 .6033 L
+.78014 .60332 L
+.78107 .60331 L
+.782 .60327 L
+.78293 .6032 L
+.78386 .6031 L
+.78479 .60297 L
+.78571 .60281 L
+.78664 .60262 L
+.78757 .6024 L
+.7885 .60215 L
+.78943 .60187 L
+.79036 .60157 L
+.79129 .60123 L
+.79222 .60086 L
+.79315 .60046 L
+.79408 .60003 L
+.79501 .59957 L
+.79593 .59908 L
+.79686 .59857 L
+.79779 .59802 L
+.79872 .59744 L
+.79965 .59683 L
+.80058 .59618 L
+.80151 .59551 L
+.80244 .59481 L
+.80337 .59408 L
+.8043 .59332 L
+.80523 .59252 L
+.80616 .5917 L
+.80708 .59084 L
+.80801 .58996 L
+.80894 .58904 L
+.80987 .5881 L
+.8108 .58712 L
+.81173 .58611 L
+.81266 .58507 L
+.81359 .584 L
+Mistroke
+.81452 .58291 L
+.81545 .58178 L
+.81638 .58061 L
+.81731 .57942 L
+.81823 .5782 L
+.81916 .57695 L
+.82009 .57567 L
+.82102 .57435 L
+.82195 .57301 L
+.82288 .57163 L
+.82381 .57023 L
+.82474 .56879 L
+.82567 .56733 L
+.8266 .56583 L
+.82753 .5643 L
+.82846 .56275 L
+.82938 .56116 L
+.83031 .55954 L
+.83124 .55789 L
+.83217 .55622 L
+.8331 .55451 L
+.83403 .55277 L
+.83496 .551 L
+.83589 .5492 L
+.83682 .54738 L
+.83775 .54552 L
+.83868 .54363 L
+.83961 .54172 L
+.84053 .53977 L
+.84146 .53779 L
+.84239 .53579 L
+.84332 .53375 L
+.84425 .53169 L
+.84518 .5296 L
+.84611 .52747 L
+.84704 .52532 L
+.84797 .52314 L
+.8489 .52093 L
+.84983 .51869 L
+.85075 .51643 L
+.85168 .51413 L
+.85261 .51181 L
+.85354 .50945 L
+.85447 .50707 L
+.8554 .50466 L
+.85633 .50223 L
+.85726 .49976 L
+.85819 .49727 L
+.85912 .49475 L
+.86005 .4922 L
+Mistroke
+.86098 .48962 L
+.8619 .48702 L
+.86283 .48439 L
+.86376 .48173 L
+.86469 .47905 L
+.86562 .47634 L
+.86655 .4736 L
+.86748 .47083 L
+.86841 .46804 L
+.86934 .46522 L
+.87027 .46238 L
+.8712 .45951 L
+.87213 .45661 L
+.87305 .45369 L
+.87398 .45074 L
+.87491 .44777 L
+.87584 .44477 L
+.87677 .44175 L
+.8777 .4387 L
+.87863 .43562 L
+.87956 .43253 L
+.88049 .4294 L
+.88142 .42625 L
+.88235 .42308 L
+.88328 .41989 L
+.8842 .41667 L
+.88513 .41342 L
+.88606 .41016 L
+.88699 .40687 L
+.88792 .40355 L
+.88885 .40022 L
+.88978 .39686 L
+.89071 .39347 L
+.89164 .39007 L
+.89257 .38664 L
+.8935 .38319 L
+.89443 .37972 L
+.89535 .37623 L
+.89628 .37272 L
+.89721 .36918 L
+.89814 .36562 L
+.89907 .36205 L
+.9 .35845 L
+.90093 .35483 L
+.90186 .35119 L
+.90279 .34753 L
+.90372 .34385 L
+.90465 .34015 L
+.90557 .33643 L
+.9065 .3327 L
+Mistroke
+.90743 .32894 L
+.90836 .32516 L
+.90929 .32137 L
+.91022 .31756 L
+.91115 .31373 L
+.91208 .30988 L
+.91301 .30601 L
+.91394 .30212 L
+.91487 .29822 L
+.9158 .2943 L
+.91672 .29037 L
+.91765 .28642 L
+.91858 .28245 L
+.91951 .27846 L
+.92044 .27446 L
+.92137 .27045 L
+.9223 .26641 L
+.92323 .26237 L
+.92416 .2583 L
+.92509 .25423 L
+.92602 .25014 L
+.92695 .24603 L
+.92787 .24191 L
+.9288 .23778 L
+.92973 .23363 L
+.93066 .22947 L
+.93159 .2253 L
+.93252 .22111 L
+.93345 .21691 L
+.93438 .2127 L
+.93531 .20848 L
+.93624 .20424 L
+.93717 .2 L
+.9381 .19574 L
+.93902 .19147 L
+.93995 .18719 L
+.94088 .1829 L
+.94181 .1786 L
+.94274 .17429 L
+.94367 .16997 L
+.9446 .16564 L
+.94553 .1613 L
+.94646 .15696 L
+.94739 .1526 L
+.94832 .14823 L
+.94925 .14386 L
+.95017 .13948 L
+.9511 .13509 L
+.95203 .1307 L
+.95296 .12629 L
+Mistroke
+.95389 .12189 L
+.95482 .11747 L
+.95575 .11305 L
+.95668 .10862 L
+.95761 .10418 L
+.95854 .09974 L
+.95947 .0953 L
+.96039 .09085 L
+.96132 .0864 L
+.96225 .08194 L
+.96318 .07747 L
+.96411 .07301 L
+.96504 .06854 L
+.96597 .06406 L
+.9669 .05959 L
+.96783 .05511 L
+.96876 .05063 L
+.96969 .04614 L
+.97062 .04166 L
+.97154 .03717 L
+.97247 .03268 L
+.9734 .02819 L
+.97433 .0237 L
+.97526 .01921 L
+.97619 .01472 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk
+0?ooo`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo000L0?ooo`030000003oool0oooo0?l0
+ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?ooo`004`3oool3000000H0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<0
+00000?ooo`3oool0o`3ooomL0?ooo`004P3oool01 at 000000oooo0?ooo`3oool0000000D0oooo4000
+00130?ooo`D00000DP3oool200000:T0oooo00<000000?ooo`3oool01P3oool00180oooo00D00000
+0?ooo`3oool0oooo000000050?ooo`030000003oool0oooo00d0oooo2 at 00000g0?ooo`@00000103o
+ool3000004h0oooo1000002W0?ooo`030000003oool0oooo00L0oooo000B0?ooo`050000003oool0
+oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`0E0?ooo`L00000;P3oool4000000T0oooo0`00
+001<0?ooo`040000003oool0oooo00000:L0oooo00<000000?ooo`3oool01`3oool001<0oooo0`00
+00060?ooo`030000003oool0oooo01`0oooo1`00000S0?ooo`@000003`3oool3000004T0oooo00<0
+00000?ooo`3oool00P3oool00`000000oooo0?ooo`2T0?ooo`030000003oool0oooo00L0oooo000L
+0?ooo`030000003oool0oooo0280oooo2 at 00000E0?ooo`H000005 at 3oool3000004H0oooo0P000004
+0?ooo`800000Y at 3oool00`000000oooo0?ooo`070?ooo`00703oool2000002`0oooo5 at 00000N0?oo
+o`800000@`3oool2000000H0oooo00<000000?ooo`3oool0XP3oool00`000000oooo0?ooo`080?oo
+o`00703oool00`000000oooo0?ooo`1P0?ooo`800000 at 03oool2000000P0oooo00<000000?ooo`3o
+ool0X at 3oool00`000000oooo0?ooo`080?ooo`00703oool00`000000oooo0?ooo`1R0?ooo`800000
+?P3oool00`000000oooo0?ooo`070?ooo`800000XP3oool00`000000oooo0?ooo`080?ooo`00703o
+ool00`000000oooo0?ooo`1S0?ooo`<00000>`3oool00`000000oooo0?ooo`090?ooo`030000003o
+ool0oooo0:00oooo00<000000?ooo`3oool0203oool001`0oooo00<000000?ooo`3oool0I at 3oool3
+000003P0oooo00<000000?ooo`3oool02`3oool00`000000oooo0?ooo`2O0?ooo`030000003oool0
+oooo00P0oooo000L0?ooo`030000003oool0oooo06L0oooo0`00000e0?ooo`030000003oool0oooo
+00`0oooo00<000000?ooo`3oool0WP3oool00`000000oooo0?ooo`090?ooo`00703oool2000006X0
+oooo0`00000b0?ooo`030000003oool0oooo00h0oooo00<000000?ooo`3oool0W at 3oool00`000000
+oooo0?ooo`090?ooo`00703oool00`000000oooo0?ooo`1[0?ooo`<00000;P3oool200000140oooo
+00<000000?ooo`3oool0W at 3oool00`000000oooo0?ooo`090?ooo`00703oool00`000000oooo0?oo
+o`1]0?ooo`<00000:`3oool2000001<0oooo00<000000?ooo`3oool0W03oool00`000000oooo0?oo
+o`090?ooo`00703oool00`000000oooo0?ooo`1_0?ooo`<00000:03oool2000001 at 0oooo0P00002M
+0?ooo`030000003oool0oooo00T0oooo000L0?ooo`030000003oool0oooo0740oooo0`00000U0?oo
+o`8000005P3oool00`000000oooo0?ooo`2J0?ooo`030000003oool0oooo00X0oooo000L0?ooo`03
+0000003oool0oooo07<0oooo0`00000Q0?ooo`800000603oool2000009/0oooo00<000000?ooo`3o
+ool02P3oool001`0oooo0P00001g0?ooo`<00000703oool3000001X0oooo00<000000?ooo`3oool0
+V at 3oool00`000000oooo0?ooo`0:0?ooo`00703oool00`000000oooo0?ooo`1h0?ooo`@000005`3o
+ool3000001`0oooo0P00002J0?ooo`030000003oool0oooo00X0oooo000L0?ooo`030000003oool0
+oooo07/0oooo1000000A0?ooo`@000007`3oool00`000000oooo0?ooo`2H0?ooo`030000003oool0
+oooo00X0oooo000L0?ooo`030000003oool0oooo07h0oooo1P0000080?ooo`D000008`3oool00`00
+0000oooo0?ooo`2F0?ooo`030000003oool0oooo00/0oooo000L0?ooo`030000003oool0oooo08<0
+oooo2P00000W0?ooo`030000003oool0oooo09H0oooo00<000000?ooo`3oool02`3oool001`0oooo
+0P00002f0?ooo`030000003oool0oooo09D0oooo00<000000?ooo`3oool02`3oool001`0oooo00<0
+00000?ooo`3oool0]@3oool00`000000oooo0?ooo`2E0?ooo`030000003oool0oooo00/0oooo000L
+0?ooo`030000003oool0oooo0;D0oooo0P00002F0?ooo`030000003oool0oooo00/0oooo000L0?oo
+o`030000003oool0oooo0;H0oooo00<000000?ooo`3oool0T`3oool00`000000oooo0?ooo`0<0?oo
+o`00103oool3000000<0oooo00<000000?ooo`3oool00`0000030?ooo`<000001P3oool00`000000
+oooo0?ooo`2f0?ooo`800000U03oool00`000000oooo0?ooo`0<0?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000 at 0oooo00L000000?ooo`3oool0oooo0000003oool0000000<0oooo00<00000
+0?ooo`3oool00`3oool00`000000oooo0?ooo`2g0?ooo`030000003oool0oooo0980oooo00<00000
+0?ooo`3oool0303oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0
+oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`030?ooo`<00000]`3oool2000009<0oooo00<0
+00000?ooo`3oool0303oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`070000003o
+ool0oooo0?ooo`000000oooo000000030?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3o
+ool0^03oool00`000000oooo0?ooo`2 at 0?ooo`030000003oool0oooo00d0oooo00030?ooo`050000
+003oool0oooo0?ooo`000000103oool01P000000oooo0?ooo`3oool000000?ooo`@000001P3oool0
+0`000000oooo0?ooo`2h0?ooo`030000003oool0oooo0900oooo00<000000?ooo`3oool03 at 3oool0
+00<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?ooo`0000000P3o
+ool00`000000oooo0?ooo`060?ooo`030000003oool0oooo0;T0oooo00<000000?ooo`3oool0S`3o
+ool00`000000oooo0?ooo`0=0?ooo`00103oool3000000H0oooo0`0000030?ooo`@000001 at 3oool0
+0`000000oooo0?ooo`2i0?ooo`030000003oool0oooo08l0oooo00<000000?ooo`3oool03 at 3oool0
+01`0oooo00<000000?ooo`3oool0^P3oool00`000000oooo0?ooo`2>0?ooo`030000003oool0oooo
+00d0oooo000L0?ooo`800000^`3oool00`000000oooo0?ooo`2=0?ooo`030000003oool0oooo00h0
+oooo000L0?ooo`030000003oool0oooo0;/0oooo00<000000?ooo`3oool0S03oool00`000000oooo
+0?ooo`0>0?ooo`00703oool00`000000oooo0?ooo`2k0?ooo`030000003oool0oooo08`0oooo00<0
+00000?ooo`3oool03P3oool001`0oooo00<000000?ooo`3oool0^`3oool00`000000oooo0?ooo`2<
+0?ooo`030000003oool0oooo00h0oooo000L0?ooo`030000003oool0oooo0;`0oooo00<000000?oo
+o`3oool0R`3oool00`000000oooo0?ooo`0>0?ooo`00703oool200000;d0oooo00<000000?ooo`3o
+ool0RP3oool00`000000oooo0?ooo`0?0?ooo`00703oool00`000000oooo0?ooo`2l0?ooo`030000
+003oool0oooo08X0oooo00<000000?ooo`3oool03`3oool001`0oooo00<000000?ooo`3oool0_ at 3o
+ool00`000000oooo0?ooo`290?ooo`030000003oool0oooo00l0oooo000L0?ooo`030000003oool0
+oooo0;d0oooo00<000000?ooo`3oool0R at 3oool00`000000oooo0?ooo`0?0?ooo`00703oool00`00
+0000oooo0?ooo`2n0?ooo`030000003oool0oooo08P0oooo00<000000?ooo`3oool03`3oool001`0
+oooo00<000000?ooo`3oool0_P3oool00`000000oooo0?ooo`270?ooo`030000003oool0oooo0100
+oooo000L0?ooo`800000_`3oool2000008P0oooo00<000000?ooo`3oool0403oool001`0oooo00<0
+00000?ooo`3oool0_`3oool00`000000oooo0?ooo`260?ooo`030000003oool0oooo0100oooo000L
+0?ooo`030000003oool0oooo0;l0oooo00<000000?ooo`3oool0QP3oool00`000000oooo0?ooo`0@
+0?ooo`00703oool00`000000oooo0?ooo`300?ooo`030000003oool0oooo08 at 0oooo00<000000?oo
+o`3oool04 at 3oool001`0oooo00<000000?ooo`3oool0`03oool00`000000oooo0?ooo`240?ooo`03
+0000003oool0oooo0140oooo000L0?ooo`030000003oool0oooo0<00oooo0P0000250?ooo`030000
+003oool0oooo0140oooo000L0?ooo`800000`P3oool00`000000oooo0?ooo`230?ooo`030000003o
+ool0oooo0140oooo000L0?ooo`030000003oool0oooo0<40oooo00<000000?ooo`3oool0P`3oool0
+0`000000oooo0?ooo`0A0?ooo`00703oool00`000000oooo0?ooo`320?ooo`030000003oool0oooo
+0840oooo00<000000?ooo`3oool04P3oool000X0oooo0`0000030?ooo`030000003oool0oooo0080
+oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`320?ooo`030000003oool0oooo0840
+oooo00<000000?ooo`3oool04P3oool000T0oooo00D000000?ooo`3oool0oooo000000070?ooo`03
+0000003oool0oooo00 at 0oooo00<000000?ooo`3oool0`P3oool00`000000oooo0?ooo`210?ooo`03
+0000003oool0oooo0180oooo00090?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000
+oooo0?ooo`040?ooo`<00000``3oool00`000000oooo0?ooo`200?ooo`030000003oool0oooo0180
+oooo00090?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`040?ooo`03
+0000003oool0oooo0<<0oooo00<000000?ooo`3oool0P03oool00`000000oooo0?ooo`0B0?ooo`00
+2 at 3oool01@000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`0000001P3oool00`000000
+oooo0?ooo`340?ooo`030000003oool0oooo07h0oooo00<000000?ooo`3oool04`3oool000T0oooo
+00D000000?ooo`3oool0oooo000000060?ooo`8000001P3oool00`000000oooo0?ooo`340?ooo`03
+0000003oool0oooo07h0oooo00<000000?ooo`3oool04`3oool000X0oooo0`0000080?ooo`030000
+003oool0oooo00 at 0oooo00<000000?ooo`3oool0a03oool00`000000oooo0?ooo`1n0?ooo`030000
+003oool0oooo01<0oooo000L0?ooo`030000003oool0oooo0<D0oooo00<000000?ooo`3oool0O at 3o
+ool00`000000oooo0?ooo`0C0?ooo`00703oool200000<H0oooo00<000000?ooo`3oool0O03oool0
+0`000000oooo0?ooo`0D0?ooo`00703oool00`000000oooo0?ooo`350?ooo`800000O at 3oool00`00
+0000oooo0?ooo`0D0?ooo`00703oool00`000000oooo0?ooo`360?ooo`030000003oool0oooo07/0
+oooo00<000000?ooo`3oool0503oool001`0oooo00<000000?ooo`3oool0aP3oool00`000000oooo
+0?ooo`1k0?ooo`030000003oool0oooo01 at 0oooo000L0?ooo`030000003oool0oooo0<L0oooo00<0
+00000?ooo`3oool0NP3oool00`000000oooo0?ooo`0D0?ooo`00703oool00`000000oooo0?ooo`37
+0?ooo`030000003oool0oooo07T0oooo00<000000?ooo`3oool05 at 3oool001`0oooo0P0000380?oo
+o`030000003oool0oooo07T0oooo00<000000?ooo`3oool05 at 3oool001`0oooo00<000000?ooo`3o
+ool0b03oool00`000000oooo0?ooo`1h0?ooo`030000003oool0oooo01D0oooo000L0?ooo`030000
+003oool0oooo0<P0oooo00<000000?ooo`3oool0N03oool00`000000oooo0?ooo`0E0?ooo`00703o
+ool00`000000oooo0?ooo`380?ooo`030000003oool0oooo07L0oooo00<000000?ooo`3oool05P3o
+ool001`0oooo00<000000?ooo`3oool0b at 3oool00`000000oooo0?ooo`1f0?ooo`030000003oool0
+oooo01H0oooo000L0?ooo`800000bP3oool00`000000oooo0?ooo`1f0?ooo`030000003oool0oooo
+01H0oooo000L0?ooo`030000003oool0oooo0<X0oooo00<000000?ooo`3oool0M at 3oool00`000000
+oooo0?ooo`0F0?ooo`00703oool00`000000oooo0?ooo`3:0?ooo`030000003oool0oooo07D0oooo
+00<000000?ooo`3oool05P3oool001`0oooo00<000000?ooo`3oool0bP3oool00`000000oooo0?oo
+o`1d0?ooo`030000003oool0oooo01L0oooo000L0?ooo`030000003oool0oooo0</0oooo00<00000
+0?ooo`3oool0L`3oool00`000000oooo0?ooo`0G0?ooo`00703oool00`000000oooo0?ooo`3;0?oo
+o`030000003oool0oooo07<0oooo00<000000?ooo`3oool05`3oool001`0oooo0P00003<0?ooo`03
+0000003oool0oooo07<0oooo00<000000?ooo`3oool05`3oool001`0oooo00<000000?ooo`3oool0
+c03oool00`000000oooo0?ooo`1b0?ooo`030000003oool0oooo01L0oooo000L0?ooo`030000003o
+ool0oooo0<`0oooo00<000000?ooo`3oool0LP3oool00`000000oooo0?ooo`0G0?ooo`00103oool3
+000000<0oooo00<000000?ooo`3oool00P3oool010000000oooo0?ooo`3oool3000000H0oooo00<0
+00000?ooo`3oool0c03oool00`000000oooo0?ooo`1a0?ooo`030000003oool0oooo01P0oooo0003
+0?ooo`050000003oool0oooo0?ooo`0000001`3oool010000000oooo0?ooo`0000030?ooo`030000
+003oool0oooo00<0oooo00<000000?ooo`3oool0c at 3oool00`000000oooo0?ooo`1`0?ooo`030000
+003oool0oooo01P0oooo00030?ooo`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo
+0?ooo`040?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0c at 3oool00`000000oooo
+0?ooo`1`0?ooo`030000003oool0oooo01P0oooo00030?ooo`050000003oool0oooo0?ooo`000000
+1`3oool010000000oooo0?ooo`0000030?ooo`030000003oool0oooo00<0oooo0`00003=0?ooo`03
+0000003oool0oooo0700oooo00<000000?ooo`3oool0603oool000<0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool000000080oooo100000060?ooo`030000003oool0oooo0<h0
+oooo00<000000?ooo`3oool0KP3oool00`000000oooo0?ooo`0I0?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000H0oooo0P0000030?ooo`030000003oool0oooo00H0oooo00<000000?ooo`3o
+ool0cP3oool00`000000oooo0?ooo`1^0?ooo`030000003oool0oooo01T0oooo00040?ooo`<00000
+203oool010000000oooo0?ooo`3oool4000000D0oooo00<000000?ooo`3oool0c`3oool00`000000
+oooo0?ooo`1]0?ooo`030000003oool0oooo01T0oooo000L0?ooo`030000003oool0oooo0<l0oooo
+00<000000?ooo`3oool0K at 3oool00`000000oooo0?ooo`0I0?ooo`00703oool200000=00oooo00<0
+00000?ooo`3oool0K at 3oool00`000000oooo0?ooo`0I0?ooo`00703oool00`000000oooo0?ooo`3@
+0?ooo`030000003oool0oooo06/0oooo00<000000?ooo`3oool06P3oool001`0oooo00<000000?oo
+o`3oool0d03oool00`000000oooo0?ooo`1[0?ooo`030000003oool0oooo01X0oooo000L0?ooo`03
+0000003oool0oooo0=00oooo00<000000?ooo`3oool0J`3oool00`000000oooo0?ooo`0J0?ooo`00
+703oool00`000000oooo0?ooo`3A0?ooo`030000003oool0oooo06X0oooo00<000000?ooo`3oool0
+6P3oool001`0oooo00<000000?ooo`3oool0d at 3oool00`000000oooo0?ooo`1Y0?ooo`030000003o
+ool0oooo01/0oooo000L0?ooo`800000dP3oool00`000000oooo0?ooo`1Y0?ooo`030000003oool0
+oooo01/0oooo000L0?ooo`030000003oool0oooo0=80oooo00<000000?ooo`3oool0J03oool00`00
+0000oooo0?ooo`0K0?ooo`00703oool00`000000oooo0?ooo`3B0?ooo`030000003oool0oooo06P0
+oooo00<000000?ooo`3oool06`3oool001`0oooo00<000000?ooo`3oool0dP3oool00`000000oooo
+0?ooo`1W0?ooo`030000003oool0oooo01`0oooo000L0?ooo`030000003oool0oooo0=<0oooo00<0
+00000?ooo`3oool0IP3oool00`000000oooo0?ooo`0L0?ooo`00703oool00`000000oooo0?ooo`3C
+0?ooo`030000003oool0oooo06H0oooo00<000000?ooo`3oool0703oool001`0oooo0P00003D0?oo
+o`030000003oool0oooo06H0oooo00<000000?ooo`3oool0703oool001`0oooo00<000000?ooo`3o
+ool0e03oool00`000000oooo0?ooo`1T0?ooo`030000003oool0oooo01d0oooo000L0?ooo`030000
+003oool0oooo0=@0oooo00<000000?ooo`3oool0I03oool00`000000oooo0?ooo`0M0?ooo`00703o
+ool00`000000oooo0?ooo`3D0?ooo`030000003oool0oooo06 at 0oooo00<000000?ooo`3oool07 at 3o
+ool001`0oooo00<000000?ooo`3oool0e at 3oool00`000000oooo0?ooo`1S0?ooo`030000003oool0
+oooo01d0oooo000L0?ooo`800000eP3oool00`000000oooo0?ooo`1S0?ooo`030000003oool0oooo
+01d0oooo000L0?ooo`030000003oool0oooo0=D0oooo00<000000?ooo`3oool0HP3oool00`000000
+oooo0?ooo`0N0?ooo`00703oool00`000000oooo0?ooo`3F0?ooo`030000003oool0oooo0640oooo
+00<000000?ooo`3oool07P3oool001`0oooo00<000000?ooo`3oool0eP3oool00`000000oooo0?oo
+o`1Q0?ooo`030000003oool0oooo01h0oooo000:0?ooo`<000000`3oool00`000000oooo00000004
+000000D0oooo00<000000?ooo`3oool0e`3oool00`000000oooo0?ooo`1P0?ooo`030000003oool0
+oooo01h0oooo00090?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`06
+0?ooo`030000003oool0oooo0=L0oooo00<000000?ooo`3oool0G`3oool00`000000oooo0?ooo`0O
+0?ooo`002 at 3oool01@000000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3oool01 at 3oool3
+00000=L0oooo00<000000?ooo`3oool0G`3oool00`000000oooo0?ooo`0O0?ooo`002 at 3oool01@00
+0000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0103oool00`000000oooo0?ooo`3H
+0?ooo`030000003oool0oooo05h0oooo00<000000?ooo`3oool07`3oool000T0oooo00D000000?oo
+o`3oool0oooo000000080?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0f03oool0
+0`000000oooo0?ooo`1N0?ooo`030000003oool0oooo01l0oooo00090?ooo`050000003oool0oooo
+0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0f03o
+ool00`000000oooo0?ooo`1M0?ooo`030000003oool0oooo0200oooo000:0?ooo`<000001P3oool3
+000000H0oooo00<000000?ooo`3oool0f at 3oool00`000000oooo0?ooo`1L0?ooo`030000003oool0
+oooo0200oooo000L0?ooo`030000003oool0oooo0=T0oooo00<000000?ooo`3oool0G03oool00`00
+0000oooo0?ooo`0P0?ooo`00703oool200000=X0oooo00<000000?ooo`3oool0G03oool00`000000
+oooo0?ooo`0P0?ooo`00703oool00`000000oooo0?ooo`3J0?ooo`030000003oool0oooo05X0oooo
+00<000000?ooo`3oool08 at 3oool001`0oooo00<000000?ooo`3oool0fP3oool00`000000oooo0?oo
+o`1J0?ooo`030000003oool0oooo0240oooo000L0?ooo`030000003oool0oooo0=X0oooo00<00000
+0?ooo`3oool0FP3oool00`000000oooo0?ooo`0Q0?ooo`00703oool00`000000oooo0?ooo`3K0?oo
+o`030000003oool0oooo05T0oooo00<000000?ooo`3oool08 at 3oool001`0oooo0P00003L0?ooo`03
+0000003oool0oooo05P0oooo00<000000?ooo`3oool08P3oool001`0oooo00<000000?ooo`3oool0
+f`3oool00`000000oooo0?ooo`1H0?ooo`030000003oool0oooo0280oooo000L0?ooo`030000003o
+ool0oooo0=`0oooo00<000000?ooo`3oool0E`3oool00`000000oooo0?ooo`0R0?ooo`00703oool0
+0`000000oooo0?ooo`3L0?ooo`030000003oool0oooo05H0oooo00<000000?ooo`3oool08`3oool0
+01`0oooo00<000000?ooo`3oool0g03oool00`000000oooo0?ooo`1F0?ooo`030000003oool0oooo
+02<0oooo000L0?ooo`030000003oool0oooo0=d0oooo00<000000?ooo`3oool0E at 3oool00`000000
+oooo0?ooo`0S0?ooo`00703oool200000=h0oooo00<000000?ooo`3oool0E at 3oool00`000000oooo
+0?ooo`0S0?ooo`00703oool00`000000oooo0?ooo`3M0?ooo`800000E at 3oool00`000000oooo0?oo
+o`0T0?ooo`00703oool00`000000oooo0?ooo`3N0?ooo`030000003oool0oooo05<0oooo00<00000
+0?ooo`3oool0903oool001`0oooo00<000000?ooo`3oool0gP3oool00`000000oooo0?ooo`1C0?oo
+o`030000003oool0oooo02 at 0oooo000L0?ooo`030000003oool0oooo0=l0oooo00<000000?ooo`3o
+ool0DP3oool00`000000oooo0?ooo`0T0?ooo`00703oool00`000000oooo0?ooo`3O0?ooo`030000
+003oool0oooo0540oooo00<000000?ooo`3oool09 at 3oool001`0oooo0P00003P0?ooo`030000003o
+ool0oooo0540oooo00<000000?ooo`3oool09 at 3oool001`0oooo00<000000?ooo`3oool0h03oool0
+0`000000oooo0?ooo`1 at 0?ooo`030000003oool0oooo02D0oooo000L0?ooo`030000003oool0oooo
+0>00oooo00<000000?ooo`3oool0D03oool00`000000oooo0?ooo`0U0?ooo`00103oool3000000<0
+oooo00<000000?ooo`000000100000020?ooo`<000001P3oool00`000000oooo0?ooo`3P0?ooo`03
+0000003oool0oooo04l0oooo00<000000?ooo`3oool09P3oool000<0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo0080oooo00D000000?ooo`3oool0oooo000000050?oo
+o`030000003oool0oooo0>40oooo00<000000?ooo`3oool0CP3oool00`000000oooo0?ooo`0V0?oo
+o`000`3oool01 at 000000oooo0?ooo`3oool0000000H0oooo00<000000?ooo`3oool01 at 3oool00`00
+0000oooo0?ooo`030?ooo`<00000h at 3oool00`000000oooo0?ooo`1>0?ooo`030000003oool0oooo
+02H0oooo00030?ooo`050000003oool0oooo0?ooo`0000001`3oool010000000oooo0?ooo`000003
+0?ooo`030000003oool0oooo00<0oooo00<000000?ooo`3oool0h at 3oool00`000000oooo0?ooo`1=
+0?ooo`030000003oool0oooo02L0oooo00030?ooo`050000003oool0oooo0?ooo`000000203oool0
+0`000000oooo00000003000000H0oooo00<000000?ooo`3oool0hP3oool00`000000oooo0?ooo`1<
+0?ooo`030000003oool0oooo02L0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool0
+1 at 000000oooo0?ooo`3oool000000080oooo00<000000?ooo`3oool01P3oool00`000000oooo0?oo
+o`3R0?ooo`030000003oool0oooo04`0oooo00<000000?ooo`3oool09`3oool000 at 0oooo0`000006
+0?ooo`<000000`3oool4000000D0oooo00<000000?ooo`3oool0h`3oool00`000000oooo0?ooo`1;
+0?ooo`030000003oool0oooo02L0oooo000L0?ooo`030000003oool0oooo0><0oooo00<000000?oo
+o`3oool0BP3oool00`000000oooo0?ooo`0X0?ooo`00703oool200000>@0oooo00<000000?ooo`3o
+ool0BP3oool00`000000oooo0?ooo`0X0?ooo`00703oool00`000000oooo0?ooo`3T0?ooo`030000
+003oool0oooo04T0oooo00<000000?ooo`3oool0:03oool001`0oooo00<000000?ooo`3oool0i03o
+ool00`000000oooo0?ooo`180?ooo`030000003oool0oooo02T0oooo000L0?ooo`030000003oool0
+oooo0>@0oooo00<000000?ooo`3oool0B03oool00`000000oooo0?ooo`0Y0?ooo`00703oool00`00
+0000oooo0?ooo`3U0?ooo`030000003oool0oooo04L0oooo00<000000?ooo`3oool0:@3oool001`0
+oooo00<000000?ooo`3oool0i at 3oool00`000000oooo0?ooo`160?ooo`030000003oool0oooo02X0
+oooo000L0?ooo`800000i`3oool00`000000oooo0?ooo`150?ooo`030000003oool0oooo02X0oooo
+000L0?ooo`030000003oool0oooo0>H0oooo00<000000?ooo`3oool0A at 3oool00`000000oooo0?oo
+o`0Z0?ooo`00703oool00`000000oooo0?ooo`3V0?ooo`030000003oool0oooo04D0oooo00<00000
+0?ooo`3oool0:P3oool001`0oooo00<000000?ooo`3oool0i`3oool00`000000oooo0?ooo`130?oo
+o`030000003oool0oooo02/0oooo000L0?ooo`030000003oool0oooo0>L0oooo00<000000?ooo`3o
+ool0@`3oool00`000000oooo0?ooo`0[0?ooo`00703oool200000>P0oooo0P0000140?ooo`030000
+003oool0oooo02/0oooo000L0?ooo`030000003oool0oooo0>P0oooo00<000000?ooo`3oool0@@3o
+ool00`000000oooo0?ooo`0/0?ooo`00703oool00`000000oooo0?ooo`3X0?ooo`030000003oool0
+oooo0440oooo00<000000?ooo`3oool0;03oool001`0oooo00<000000?ooo`3oool0j at 3oool00`00
+0000oooo0?ooo`100?ooo`030000003oool0oooo02`0oooo000L0?ooo`030000003oool0oooo0>T0
+oooo00<000000?ooo`3oool0?`3oool00`000000oooo0?ooo`0]0?ooo`00703oool00`000000oooo
+0?ooo`3Y0?ooo`800000 at 03oool00`000000oooo0?ooo`0]0?ooo`00703oool200000>/0oooo00<0
+00000?ooo`3oool0?P3oool00`000000oooo0?ooo`0]0?ooo`00703oool00`000000oooo0?ooo`3Z
+0?ooo`030000003oool0oooo03d0oooo00<000000?ooo`3oool0;P3oool001`0oooo00<000000?oo
+o`3oool0j`3oool00`000000oooo0?ooo`0l0?ooo`030000003oool0oooo02h0oooo000:0?ooo`<0
+00000`3oool00`000000oooo0?ooo`03000000H0oooo00<000000?ooo`3oool0j`3oool00`000000
+oooo0?ooo`0l0?ooo`030000003oool0oooo02h0oooo00090?ooo`050000003oool0oooo0?ooo`00
+0000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0k03oool00`00
+0000oooo0?ooo`0j0?ooo`030000003oool0oooo02l0oooo00090?ooo`050000003oool0oooo0?oo
+o`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0>`0oooo00<000000?oo
+o`3oool0>P3oool00`000000oooo0?ooo`0_0?ooo`002 at 3oool01@000000oooo0?ooo`3oool00000
+00H0oooo0P0000060?ooo`<00000k03oool00`000000oooo0?ooo`0j0?ooo`030000003oool0oooo
+02l0oooo00090?ooo`050000003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?oo
+o`030000003oool0oooo0>d0oooo00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`0`0?oo
+o`002 at 3oool01@000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo00000005
+0?ooo`030000003oool0oooo0>d0oooo00<000000?ooo`3oool0>03oool00`000000oooo0?ooo`0`
+0?ooo`002P3oool3000000H0oooo0`0000060?ooo`030000003oool0oooo0>h0oooo00<000000?oo
+o`3oool0=P3oool00`000000oooo0?ooo`0a0?ooo`00703oool00`000000oooo0?ooo`3^0?ooo`03
+0000003oool0oooo03H0oooo00<000000?ooo`3oool0<@3oool001`0oooo0P00003`0?ooo`030000
+003oool0oooo03D0oooo00<000000?ooo`3oool0<@3oool001`0oooo00<000000?ooo`3oool0k`3o
+ool00`000000oooo0?ooo`0d0?ooo`030000003oool0oooo0380oooo000L0?ooo`030000003oool0
+oooo0>l0oooo0P00000e0?ooo`030000003oool0oooo0380oooo000L0?ooo`030000003oool0oooo
+0?00oooo00<000000?ooo`3oool0<P3oool2000003 at 0oooo000L0?ooo`030000003oool0oooo0?00
+oooo0P00000c0?ooo`030000003oool0oooo03<0oooo000L0?ooo`030000003oool0oooo0?40oooo
+00<000000?ooo`3oool0<@3oool00`000000oooo0?ooo`0c0?ooo`00703oool200000?80oooo0P00
+000a0?ooo`030000003oool0oooo03 at 0oooo000L0?ooo`030000003oool0oooo0?80oooo00<00000
+0?ooo`3oool0;`3oool00`000000oooo0?ooo`0d0?ooo`00703oool00`000000oooo0?ooo`3b0?oo
+o`030000003oool0oooo02h0oooo00<000000?ooo`3oool0=@3oool001`0oooo00<000000?ooo`3o
+ool0l`3oool00`000000oooo0?ooo`0]0?ooo`030000003oool0oooo03D0oooo000L0?ooo`030000
+003oool0oooo0?<0oooo0P00000]0?ooo`800000=`3oool001`0oooo00<000000?ooo`3oool0m03o
+ool00`000000oooo0?ooo`0[0?ooo`030000003oool0oooo03H0oooo000L0?ooo`800000m at 3oool2
+000002`0oooo00<000000?ooo`3oool0=P3oool001`0oooo00<000000?ooo`3oool0m at 3oool00`00
+0000oooo0?ooo`0Y0?ooo`030000003oool0oooo03L0oooo000L0?ooo`030000003oool0oooo0?D0
+oooo0P00000Z0?ooo`030000003oool0oooo03L0oooo000L0?ooo`030000003oool0oooo0?H0oooo
+00<000000?ooo`3oool09`3oool00`000000oooo0?ooo`0h0?ooo`00703oool00`000000oooo0?oo
+o`3g0?ooo`030000003oool0oooo02H0oooo00<000000?ooo`3oool0>03oool001`0oooo0P00003h
+0?ooo`030000003oool0oooo02D0oooo00<000000?ooo`3oool0>@3oool001`0oooo00<000000?oo
+o`3oool0n03oool00`000000oooo0?ooo`0S0?ooo`800000>`3oool001`0oooo00<000000?ooo`3o
+ool0n03oool2000002 at 0oooo00<000000?ooo`3oool0>P3oool001`0oooo00<000000?ooo`3oool0
+n at 3oool00`000000oooo0?ooo`0Q0?ooo`800000?03oool000 at 0oooo0`0000030?ooo`030000003o
+ool0oooo00<000000`3oool3000000H0oooo00<000000?ooo`3oool0nP3oool00`000000oooo0?oo
+o`0P0?ooo`030000003oool0oooo03/0oooo00030?ooo`050000003oool0oooo0?ooo`000000103o
+ool01`000000oooo0?ooo`3oool000000?ooo`0000000`3oool00`000000oooo0?ooo`030?ooo`03
+0000003oool0oooo0?X0oooo0P00000P0?ooo`030000003oool0oooo03`0oooo00030?ooo`050000
+003oool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo00<0
+oooo0`00003k0?ooo`030000003oool0oooo01d0oooo0P00000n0?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000H0oooo0P0000020?ooo`050000003oool0oooo0?ooo`0000001 at 3oool00`00
+0000oooo0?ooo`3l0?ooo`030000003oool0oooo01`0oooo00<000000?ooo`3oool0?@3oool000<0
+oooo00D000000?ooo`3oool0oooo000000080?ooo`030000003oool0000000<000001P3oool00`00
+0000oooo0?ooo`3l0?ooo`800000703oool00`000000oooo0?ooo`0n0?ooo`000`3oool01 at 000000
+oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000020?ooo`030000003oool0
+oooo00H0oooo00<000000?ooo`3oool0o at 3oool2000001X0oooo0P0000100?ooo`00103oool30000
+00H0oooo0`0000030?ooo`@000001 at 3oool00`000000oooo0?ooo`3n0?ooo`030000003oool0oooo
+01P0oooo00<000000?ooo`3oool0?`3oool001`0oooo00<000000?ooo`3oool0o`3oool00`000000
+oooo0?ooo`0F0?ooo`030000003oool0oooo0400oooo000L0?ooo`800000o`3oool20?ooo`030000
+003oool0oooo01 at 0oooo00<000000?ooo`3oool0@@3oool001`0oooo00<000000?ooo`3oool0o`3o
+ool20?ooo`030000003oool0oooo0180oooo00<000000?ooo`3oool0 at P3oool001`0oooo00<00000
+0?ooo`3oool0o`3oool30?ooo`030000003oool0oooo0100oooo0P0000140?ooo`00703oool00`00
+0000oooo0?ooo`3o0?ooo`@0oooo0P00000>0?ooo`800000AP3oool001`0oooo00<000000?ooo`3o
+ool0o`3oool50?ooo`800000303oool2000004L0oooo000L0?ooo`800000o`3oool80?ooo`800000
+203oool3000004P0oooo000L0?ooo`030000003oool0oooo0?l0oooo2 at 3oool9000004X0oooo000L
+0?ooo`030000003oool0oooo0?l0ooooG03oool001`0oooo00<000000?ooo`3oool0o`3ooomL0?oo
+o`00703oool00`000000oooo0?ooo`3o0?oooe`0oooo000L0?ooo`030000003oool0oooo0?l0oooo
+G03oool001`0oooo0P00003o0?oooed0oooo000L0?ooo`030000003oool0oooo0?l0ooooG03oool0
+0?l0ooooN`3oool00?l0ooooN`3oool00?l0ooooN`3oool00?l0ooooN`3oool00?l0ooooN`3oool0
+0001\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-85.6377, -0.0197748, 
+  3.00749, 0.00176337}}],
+
+Cell[GraphicsData["PostScript", "\<\
+%!
+%%Creator: Mathematica
+%%AspectRatio: .61803 
+MathPictureStart
+/Mabs {
+Mgmatrix idtransform
+Mtmatrix dtransform
+} bind def
+/Mabsadd { Mabs
+3 -1 roll add
+3 1 roll add
+exch } bind def
+%% Graphics
+/Courier findfont 10  scalefont  setfont
+% Scaling calculations
+0.0238095 0.000929152 0.0147151 1.29916 [
+[.01131 .01472 -6 -4.5 ]
+[.01131 .01472 0 4.5 ]
+[.01131 .14463 -18 -4.5 ]
+[.01131 .14463 0 4.5 ]
+[.01131 .27455 -18 -4.5 ]
+[.01131 .27455 0 4.5 ]
+[.01131 .40446 -18 -4.5 ]
+[.01131 .40446 0 4.5 ]
+[.01131 .53438 -18 -4.5 ]
+[.01131 .53438 0 4.5 ]
+[ 0 0 0 0 ]
+[ 1 .61803 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+0 g
+.25 Mabswid
+.02381 .01472 m
+.03006 .01472 L
+s
+[(0)] .01131 .01472 1 0 Mshowa
+.02381 .14463 m
+.03006 .14463 L
+s
+[(0.1)] .01131 .14463 1 0 Mshowa
+.02381 .27455 m
+.03006 .27455 L
+s
+[(0.2)] .01131 .27455 1 0 Mshowa
+.02381 .40446 m
+.03006 .40446 L
+s
+[(0.3)] .01131 .40446 1 0 Mshowa
+.02381 .53438 m
+.03006 .53438 L
+s
+[(0.4)] .01131 .53438 1 0 Mshowa
+.125 Mabswid
+.02381 .0407 m
+.02756 .0407 L
+s
+.02381 .06668 m
+.02756 .06668 L
+s
+.02381 .09266 m
+.02756 .09266 L
+s
+.02381 .11865 m
+.02756 .11865 L
+s
+.02381 .17061 m
+.02756 .17061 L
+s
+.02381 .1966 m
+.02756 .1966 L
+s
+.02381 .22258 m
+.02756 .22258 L
+s
+.02381 .24856 m
+.02756 .24856 L
+s
+.02381 .30053 m
+.02756 .30053 L
+s
+.02381 .32651 m
+.02756 .32651 L
+s
+.02381 .3525 m
+.02756 .3525 L
+s
+.02381 .37848 m
+.02756 .37848 L
+s
+.02381 .43045 m
+.02756 .43045 L
+s
+.02381 .45643 m
+.02756 .45643 L
+s
+.02381 .48241 m
+.02756 .48241 L
+s
+.02381 .5084 m
+.02756 .5084 L
+s
+.02381 .56036 m
+.02756 .56036 L
+s
+.02381 .58635 m
+.02756 .58635 L
+s
+.02381 .61233 m
+.02756 .61233 L
+s
+.25 Mabswid
+.02381 0 m
+.02381 .61803 L
+s
+0 0 m
+1 0 L
+1 .61803 L
+0 .61803 L
+closepath
+clip
+newpath
+.5 Mabswid
+.02474 .01472 m
+.02567 .01475 L
+.0266 .01479 L
+.02753 .01482 L
+.02846 .01486 L
+.02938 .01489 L
+.03031 .01493 L
+.03124 .01496 L
+.03217 .015 L
+.0331 .01503 L
+.03403 .01507 L
+.03496 .0151 L
+.03589 .01514 L
+.03682 .01517 L
+.03775 .01521 L
+.03868 .01524 L
+.03961 .01528 L
+.04053 .01531 L
+.04146 .01534 L
+.04239 .01538 L
+.04332 .01541 L
+.04425 .01544 L
+.04518 .01547 L
+.04611 .0155 L
+.04704 .01554 L
+.04797 .01557 L
+.0489 .0156 L
+.04983 .01563 L
+.05075 .01566 L
+.05168 .01569 L
+.05261 .01572 L
+.05354 .01574 L
+.05447 .01577 L
+.0554 .0158 L
+.05633 .01583 L
+.05726 .01585 L
+.05819 .01588 L
+.05912 .01591 L
+.06005 .01593 L
+.06098 .01595 L
+.0619 .01598 L
+.06283 .016 L
+.06376 .01602 L
+.06469 .01605 L
+.06562 .01607 L
+.06655 .01609 L
+.06748 .01611 L
+.06841 .01613 L
+.06934 .01615 L
+.07027 .01616 L
+Mistroke
+.0712 .01618 L
+.07213 .0162 L
+.07305 .01621 L
+.07398 .01623 L
+.07491 .01624 L
+.07584 .01626 L
+.07677 .01627 L
+.0777 .01628 L
+.07863 .01629 L
+.07956 .0163 L
+.08049 .01631 L
+.08142 .01632 L
+.08235 .01633 L
+.08328 .01634 L
+.0842 .01634 L
+.08513 .01635 L
+.08606 .01635 L
+.08699 .01636 L
+.08792 .01636 L
+.08885 .01636 L
+.08978 .01636 L
+.09071 .01636 L
+.09164 .01636 L
+.09257 .01636 L
+.0935 .01636 L
+.09443 .01635 L
+.09535 .01635 L
+.09628 .01634 L
+.09721 .01634 L
+.09814 .01633 L
+.09907 .01632 L
+.1 .01631 L
+.10093 .0163 L
+.10186 .01629 L
+.10279 .01628 L
+.10372 .01626 L
+.10465 .01625 L
+.10557 .01623 L
+.1065 .01622 L
+.10743 .0162 L
+.10836 .01618 L
+.10929 .01616 L
+.11022 .01614 L
+.11115 .01612 L
+.11208 .0161 L
+.11301 .01607 L
+.11394 .01605 L
+.11487 .01602 L
+.1158 .016 L
+.11672 .01597 L
+Mistroke
+.11765 .01594 L
+.11858 .01591 L
+.11951 .01588 L
+.12044 .01585 L
+.12137 .01582 L
+.1223 .01578 L
+.12323 .01575 L
+.12416 .01571 L
+.12509 .01567 L
+.12602 .01563 L
+.12695 .01559 L
+.12787 .01555 L
+.1288 .01551 L
+.12973 .01547 L
+.13066 .01543 L
+.13159 .01538 L
+.13252 .01534 L
+.13345 .01529 L
+.13438 .01524 L
+.13531 .01519 L
+.13624 .01514 L
+.13717 .01509 L
+.1381 .01504 L
+.13902 .01499 L
+.13995 .01494 L
+.14088 .01488 L
+.14181 .01483 L
+.14274 .01477 L
+.14367 .01472 L
+.1446 .01478 L
+.14553 .01484 L
+.14646 .0149 L
+.14739 .01496 L
+.14832 .01502 L
+.14925 .01508 L
+.15017 .01515 L
+.1511 .01521 L
+.15203 .01528 L
+.15296 .01535 L
+.15389 .01541 L
+.15482 .01548 L
+.15575 .01555 L
+.15668 .01562 L
+.15761 .01569 L
+.15854 .01577 L
+.15947 .01584 L
+.16039 .01591 L
+.16132 .01599 L
+.16225 .01606 L
+.16318 .01614 L
+Mistroke
+.16411 .01622 L
+.16504 .01629 L
+.16597 .01637 L
+.1669 .01645 L
+.16783 .01653 L
+.16876 .01661 L
+.16969 .01669 L
+.17062 .01678 L
+.17154 .01686 L
+.17247 .01694 L
+.1734 .01703 L
+.17433 .01711 L
+.17526 .0172 L
+.17619 .01728 L
+.17712 .01737 L
+.17805 .01746 L
+.17898 .01754 L
+.17991 .01763 L
+.18084 .01772 L
+.18177 .01781 L
+.18269 .0179 L
+.18362 .01799 L
+.18455 .01808 L
+.18548 .01817 L
+.18641 .01826 L
+.18734 .01835 L
+.18827 .01845 L
+.1892 .01854 L
+.19013 .01863 L
+.19106 .01872 L
+.19199 .01882 L
+.19292 .01891 L
+.19384 .01901 L
+.19477 .0191 L
+.1957 .01919 L
+.19663 .01929 L
+.19756 .01938 L
+.19849 .01948 L
+.19942 .01958 L
+.20035 .01967 L
+.20128 .01977 L
+.20221 .01986 L
+.20314 .01996 L
+.20407 .02005 L
+.20499 .02015 L
+.20592 .02025 L
+.20685 .02034 L
+.20778 .02044 L
+.20871 .02053 L
+.20964 .02063 L
+Mistroke
+.21057 .02073 L
+.2115 .02082 L
+.21243 .02092 L
+.21336 .02101 L
+.21429 .02111 L
+.21521 .0212 L
+.21614 .0213 L
+.21707 .02139 L
+.218 .02148 L
+.21893 .02158 L
+.21986 .02167 L
+.22079 .02177 L
+.22172 .02186 L
+.22265 .02195 L
+.22358 .02204 L
+.22451 .02213 L
+.22544 .02223 L
+.22636 .02232 L
+.22729 .02241 L
+.22822 .0225 L
+.22915 .02259 L
+.23008 .02267 L
+.23101 .02276 L
+.23194 .02285 L
+.23287 .02294 L
+.2338 .02302 L
+.23473 .02311 L
+.23566 .02319 L
+.23659 .02328 L
+.23751 .02336 L
+.23844 .02344 L
+.23937 .02352 L
+.2403 .0236 L
+.24123 .02368 L
+.24216 .02376 L
+.24309 .02384 L
+.24402 .02392 L
+.24495 .024 L
+.24588 .02407 L
+.24681 .02414 L
+.24774 .02422 L
+.24866 .02429 L
+.24959 .02436 L
+.25052 .02443 L
+.25145 .0245 L
+.25238 .02457 L
+.25331 .02463 L
+.25424 .0247 L
+.25517 .02476 L
+.2561 .02483 L
+Mistroke
+.25703 .02489 L
+.25796 .02495 L
+.25889 .02501 L
+.25981 .02507 L
+.26074 .02512 L
+.26167 .02518 L
+.2626 .02523 L
+.26353 .02528 L
+.26446 .02533 L
+.26539 .02538 L
+.26632 .02543 L
+.26725 .02548 L
+.26818 .02552 L
+.26911 .02556 L
+.27003 .02561 L
+.27096 .02565 L
+.27189 .02568 L
+.27282 .02572 L
+.27375 .02576 L
+.27468 .02579 L
+.27561 .02582 L
+.27654 .02585 L
+.27747 .02588 L
+.2784 .02591 L
+.27933 .02593 L
+.28026 .02595 L
+.28118 .02597 L
+.28211 .02599 L
+.28304 .02601 L
+.28397 .02603 L
+.2849 .02604 L
+.28583 .02605 L
+.28676 .02606 L
+.28769 .02607 L
+.28862 .02607 L
+.28955 .02608 L
+.29048 .02608 L
+.29141 .02608 L
+.29233 .02608 L
+.29326 .02607 L
+.29419 .02606 L
+.29512 .02605 L
+.29605 .02604 L
+.29698 .02603 L
+.29791 .02602 L
+.29884 .026 L
+.29977 .02598 L
+.3007 .02596 L
+.30163 .02593 L
+.30256 .02591 L
+Mistroke
+.30348 .02588 L
+.30441 .02585 L
+.30534 .02581 L
+.30627 .02578 L
+.3072 .02574 L
+.30813 .0257 L
+.30906 .02566 L
+.30999 .02561 L
+.31092 .02557 L
+.31185 .02552 L
+.31278 .02546 L
+.3137 .02541 L
+.31463 .02535 L
+.31556 .02529 L
+.31649 .02523 L
+.31742 .02517 L
+.31835 .0251 L
+.31928 .02503 L
+.32021 .02496 L
+.32114 .02489 L
+.32207 .02481 L
+.323 .02473 L
+.32393 .02465 L
+.32485 .02457 L
+.32578 .02448 L
+.32671 .02439 L
+.32764 .0243 L
+.32857 .02421 L
+.3295 .02411 L
+.33043 .02401 L
+.33136 .02391 L
+.33229 .02381 L
+.33322 .0237 L
+.33415 .02359 L
+.33508 .02348 L
+.336 .02337 L
+.33693 .02325 L
+.33786 .02313 L
+.33879 .02301 L
+.33972 .02288 L
+.34065 .02276 L
+.34158 .02263 L
+.34251 .02249 L
+.34344 .02236 L
+.34437 .02222 L
+.3453 .02208 L
+.34623 .02194 L
+.34715 .0218 L
+.34808 .02165 L
+.34901 .0215 L
+Mistroke
+.34994 .02135 L
+.35087 .02119 L
+.3518 .02103 L
+.35273 .02087 L
+.35366 .02071 L
+.35459 .02055 L
+.35552 .02038 L
+.35645 .02021 L
+.35738 .02004 L
+.3583 .01986 L
+.35923 .01968 L
+.36016 .0195 L
+.36109 .01932 L
+.36202 .01914 L
+.36295 .01895 L
+.36388 .01876 L
+.36481 .01857 L
+.36574 .01837 L
+.36667 .01818 L
+.3676 .01798 L
+.36852 .01778 L
+.36945 .01757 L
+.37038 .01737 L
+.37131 .01716 L
+.37224 .01695 L
+.37317 .01673 L
+.3741 .01652 L
+.37503 .0163 L
+.37596 .01608 L
+.37689 .01586 L
+.37782 .01563 L
+.37875 .01541 L
+.37967 .01518 L
+.3806 .01495 L
+.38153 .01472 L
+.38246 .01495 L
+.38339 .01519 L
+.38432 .01543 L
+.38525 .01567 L
+.38618 .01591 L
+.38711 .01615 L
+.38804 .0164 L
+.38897 .01665 L
+.3899 .0169 L
+.39082 .01715 L
+.39175 .01741 L
+.39268 .01766 L
+.39361 .01792 L
+.39454 .01818 L
+.39547 .01844 L
+Mistroke
+.3964 .01871 L
+.39733 .01897 L
+.39826 .01924 L
+.39919 .01951 L
+.40012 .01978 L
+.40105 .02005 L
+.40197 .02032 L
+.4029 .0206 L
+.40383 .02087 L
+.40476 .02115 L
+.40569 .02143 L
+.40662 .02171 L
+.40755 .02199 L
+.40848 .02227 L
+.40941 .02256 L
+.41034 .02284 L
+.41127 .02313 L
+.4122 .02342 L
+.41312 .0237 L
+.41405 .02399 L
+.41498 .02428 L
+.41591 .02458 L
+.41684 .02487 L
+.41777 .02516 L
+.4187 .02546 L
+.41963 .02575 L
+.42056 .02605 L
+.42149 .02635 L
+.42242 .02664 L
+.42334 .02694 L
+.42427 .02724 L
+.4252 .02754 L
+.42613 .02784 L
+.42706 .02814 L
+.42799 .02844 L
+.42892 .02874 L
+.42985 .02905 L
+.43078 .02935 L
+.43171 .02965 L
+.43264 .02995 L
+.43357 .03025 L
+.43449 .03056 L
+.43542 .03086 L
+.43635 .03116 L
+.43728 .03147 L
+.43821 .03177 L
+.43914 .03207 L
+.44007 .03238 L
+.441 .03268 L
+.44193 .03298 L
+Mistroke
+.44286 .03328 L
+.44379 .03358 L
+.44472 .03388 L
+.44564 .03418 L
+.44657 .03448 L
+.4475 .03478 L
+.44843 .03508 L
+.44936 .03538 L
+.45029 .03568 L
+.45122 .03598 L
+.45215 .03627 L
+.45308 .03657 L
+.45401 .03686 L
+.45494 .03715 L
+.45587 .03744 L
+.45679 .03773 L
+.45772 .03802 L
+.45865 .03831 L
+.45958 .0386 L
+.46051 .03889 L
+.46144 .03917 L
+.46237 .03945 L
+.4633 .03973 L
+.46423 .04001 L
+.46516 .04029 L
+.46609 .04057 L
+.46702 .04084 L
+.46794 .04111 L
+.46887 .04138 L
+.4698 .04165 L
+.47073 .04192 L
+.47166 .04218 L
+.47259 .04245 L
+.47352 .04271 L
+.47445 .04296 L
+.47538 .04322 L
+.47631 .04347 L
+.47724 .04372 L
+.47816 .04397 L
+.47909 .04422 L
+.48002 .04446 L
+.48095 .0447 L
+.48188 .04494 L
+.48281 .04517 L
+.48374 .04541 L
+.48467 .04563 L
+.4856 .04586 L
+.48653 .04608 L
+.48746 .0463 L
+.48839 .04652 L
+Mistroke
+.48931 .04673 L
+.49024 .04694 L
+.49117 .04715 L
+.4921 .04735 L
+.49303 .04755 L
+.49396 .04775 L
+.49489 .04794 L
+.49582 .04813 L
+.49675 .04831 L
+.49768 .04849 L
+.49861 .04867 L
+.49954 .04884 L
+.50046 .04901 L
+.50139 .04917 L
+.50232 .04933 L
+.50325 .04949 L
+.50418 .04964 L
+.50511 .04979 L
+.50604 .04993 L
+.50697 .05007 L
+.5079 .0502 L
+.50883 .05033 L
+.50976 .05045 L
+.51069 .05057 L
+.51161 .05069 L
+.51254 .0508 L
+.51347 .0509 L
+.5144 .051 L
+.51533 .0511 L
+.51626 .05119 L
+.51719 .05127 L
+.51812 .05135 L
+.51905 .05142 L
+.51998 .05149 L
+.52091 .05155 L
+.52184 .05161 L
+.52276 .05166 L
+.52369 .0517 L
+.52462 .05174 L
+.52555 .05178 L
+.52648 .0518 L
+.52741 .05183 L
+.52834 .05184 L
+.52927 .05185 L
+.5302 .05185 L
+.53113 .05185 L
+.53206 .05184 L
+.53298 .05183 L
+.53391 .0518 L
+.53484 .05178 L
+Mistroke
+.53577 .05174 L
+.5367 .0517 L
+.53763 .05165 L
+.53856 .05159 L
+.53949 .05153 L
+.54042 .05146 L
+.54135 .05139 L
+.54228 .0513 L
+.54321 .05122 L
+.54413 .05112 L
+.54506 .05101 L
+.54599 .0509 L
+.54692 .05078 L
+.54785 .05066 L
+.54878 .05052 L
+.54971 .05038 L
+.55064 .05023 L
+.55157 .05008 L
+.5525 .04991 L
+.55343 .04974 L
+.55436 .04956 L
+.55528 .04938 L
+.55621 .04918 L
+.55714 .04898 L
+.55807 .04877 L
+.559 .04855 L
+.55993 .04832 L
+.56086 .04808 L
+.56179 .04784 L
+.56272 .04759 L
+.56365 .04733 L
+.56458 .04706 L
+.56551 .04678 L
+.56643 .0465 L
+.56736 .0462 L
+.56829 .0459 L
+.56922 .04559 L
+.57015 .04527 L
+.57108 .04494 L
+.57201 .0446 L
+.57294 .04426 L
+.57387 .0439 L
+.5748 .04354 L
+.57573 .04316 L
+.57666 .04278 L
+.57758 .04239 L
+.57851 .04199 L
+.57944 .04158 L
+.58037 .04116 L
+.5813 .04073 L
+Mistroke
+.58223 .04029 L
+.58316 .03985 L
+.58409 .03939 L
+.58502 .03892 L
+.58595 .03845 L
+.58688 .03796 L
+.5878 .03747 L
+.58873 .03696 L
+.58966 .03645 L
+.59059 .03593 L
+.59152 .03539 L
+.59245 .03485 L
+.59338 .0343 L
+.59431 .03374 L
+.59524 .03316 L
+.59617 .03258 L
+.5971 .03199 L
+.59803 .03139 L
+.59895 .03078 L
+.59988 .03015 L
+.60081 .02952 L
+.60174 .02888 L
+.60267 .02823 L
+.6036 .02756 L
+.60453 .02689 L
+.60546 .02621 L
+.60639 .02551 L
+.60732 .02481 L
+.60825 .0241 L
+.60918 .02337 L
+.6101 .02264 L
+.61103 .02189 L
+.61196 .02114 L
+.61289 .02037 L
+.61382 .01959 L
+.61475 .01881 L
+.61568 .01801 L
+.61661 .0172 L
+.61754 .01638 L
+.61847 .01555 L
+.6194 .01472 L
+.62033 .01557 L
+.62125 .01643 L
+.62218 .0173 L
+.62311 .01818 L
+.62404 .01907 L
+.62497 .01997 L
+.6259 .02089 L
+.62683 .02181 L
+.62776 .02275 L
+Mistroke
+.62869 .02369 L
+.62962 .02465 L
+.63055 .02562 L
+.63148 .0266 L
+.6324 .02758 L
+.63333 .02858 L
+.63426 .02959 L
+.63519 .03062 L
+.63612 .03165 L
+.63705 .03269 L
+.63798 .03374 L
+.63891 .03481 L
+.63984 .03588 L
+.64077 .03697 L
+.6417 .03806 L
+.64262 .03917 L
+.64355 .04029 L
+.64448 .04142 L
+.64541 .04255 L
+.64634 .0437 L
+.64727 .04486 L
+.6482 .04604 L
+.64913 .04722 L
+.65006 .04841 L
+.65099 .04961 L
+.65192 .05083 L
+.65285 .05205 L
+.65377 .05329 L
+.6547 .05453 L
+.65563 .05579 L
+.65656 .05706 L
+.65749 .05833 L
+.65842 .05962 L
+.65935 .06092 L
+.66028 .06223 L
+.66121 .06355 L
+.66214 .06488 L
+.66307 .06622 L
+.664 .06757 L
+.66492 .06893 L
+.66585 .0703 L
+.66678 .07168 L
+.66771 .07308 L
+.66864 .07448 L
+.66957 .07589 L
+.6705 .07732 L
+.67143 .07875 L
+.67236 .08019 L
+.67329 .08165 L
+.67422 .08311 L
+Mistroke
+.67515 .08458 L
+.67607 .08607 L
+.677 .08756 L
+.67793 .08906 L
+.67886 .09058 L
+.67979 .0921 L
+.68072 .09363 L
+.68165 .09518 L
+.68258 .09673 L
+.68351 .09829 L
+.68444 .09987 L
+.68537 .10145 L
+.6863 .10304 L
+.68722 .10464 L
+.68815 .10625 L
+.68908 .10787 L
+.69001 .1095 L
+.69094 .11114 L
+.69187 .11279 L
+.6928 .11444 L
+.69373 .11611 L
+.69466 .11779 L
+.69559 .11947 L
+.69652 .12117 L
+.69744 .12287 L
+.69837 .12458 L
+.6993 .1263 L
+.70023 .12803 L
+.70116 .12977 L
+.70209 .13151 L
+.70302 .13327 L
+.70395 .13503 L
+.70488 .13681 L
+.70581 .13859 L
+.70674 .14038 L
+.70767 .14217 L
+.70859 .14398 L
+.70952 .14579 L
+.71045 .14761 L
+.71138 .14944 L
+.71231 .15128 L
+.71324 .15313 L
+.71417 .15498 L
+.7151 .15684 L
+.71603 .15871 L
+.71696 .16059 L
+.71789 .16247 L
+.71882 .16437 L
+.71974 .16626 L
+.72067 .16817 L
+Mistroke
+.7216 .17008 L
+.72253 .17201 L
+.72346 .17393 L
+.72439 .17587 L
+.72532 .17781 L
+.72625 .17976 L
+.72718 .18171 L
+.72811 .18368 L
+.72904 .18564 L
+.72997 .18762 L
+.73089 .1896 L
+.73182 .19159 L
+.73275 .19358 L
+.73368 .19558 L
+.73461 .19759 L
+.73554 .1996 L
+.73647 .20162 L
+.7374 .20364 L
+.73833 .20567 L
+.73926 .20771 L
+.74019 .20975 L
+.74111 .21179 L
+.74204 .21384 L
+.74297 .2159 L
+.7439 .21796 L
+.74483 .22003 L
+.74576 .2221 L
+.74669 .22418 L
+.74762 .22626 L
+.74855 .22835 L
+.74948 .23044 L
+.75041 .23253 L
+.75134 .23463 L
+.75226 .23673 L
+.75319 .23884 L
+.75412 .24095 L
+.75505 .24307 L
+.75598 .24519 L
+.75691 .24731 L
+.75784 .24944 L
+.75877 .25157 L
+.7597 .2537 L
+.76063 .25584 L
+.76156 .25798 L
+.76249 .26013 L
+.76341 .26227 L
+.76434 .26442 L
+.76527 .26658 L
+.7662 .26873 L
+.76713 .27089 L
+Mistroke
+.76806 .27305 L
+.76899 .27521 L
+.76992 .27737 L
+.77085 .27954 L
+.77178 .28171 L
+.77271 .28388 L
+.77364 .28605 L
+.77456 .28823 L
+.77549 .2904 L
+.77642 .29258 L
+.77735 .29476 L
+.77828 .29694 L
+.77921 .29912 L
+.78014 .3013 L
+.78107 .30348 L
+.782 .30567 L
+.78293 .30785 L
+.78386 .31004 L
+.78479 .31222 L
+.78571 .31441 L
+.78664 .31659 L
+.78757 .31878 L
+.7885 .32096 L
+.78943 .32315 L
+.79036 .32534 L
+.79129 .32752 L
+.79222 .3297 L
+.79315 .33189 L
+.79408 .33407 L
+.79501 .33625 L
+.79593 .33843 L
+.79686 .34061 L
+.79779 .34279 L
+.79872 .34497 L
+.79965 .34714 L
+.80058 .34932 L
+.80151 .35149 L
+.80244 .35366 L
+.80337 .35583 L
+.8043 .358 L
+.80523 .36016 L
+.80616 .36232 L
+.80708 .36448 L
+.80801 .36664 L
+.80894 .36879 L
+.80987 .37094 L
+.8108 .37309 L
+.81173 .37524 L
+.81266 .37738 L
+.81359 .37952 L
+Mistroke
+.81452 .38165 L
+.81545 .38378 L
+.81638 .38591 L
+.81731 .38803 L
+.81823 .39015 L
+.81916 .39227 L
+.82009 .39438 L
+.82102 .39649 L
+.82195 .39859 L
+.82288 .40069 L
+.82381 .40279 L
+.82474 .40488 L
+.82567 .40696 L
+.8266 .40904 L
+.82753 .41111 L
+.82846 .41318 L
+.82938 .41524 L
+.83031 .4173 L
+.83124 .41935 L
+.83217 .4214 L
+.8331 .42344 L
+.83403 .42548 L
+.83496 .4275 L
+.83589 .42953 L
+.83682 .43154 L
+.83775 .43355 L
+.83868 .43555 L
+.83961 .43755 L
+.84053 .43954 L
+.84146 .44152 L
+.84239 .4435 L
+.84332 .44546 L
+.84425 .44743 L
+.84518 .44938 L
+.84611 .45132 L
+.84704 .45326 L
+.84797 .45519 L
+.8489 .45711 L
+.84983 .45903 L
+.85075 .46093 L
+.85168 .46283 L
+.85261 .46472 L
+.85354 .4666 L
+.85447 .46847 L
+.8554 .47034 L
+.85633 .47219 L
+.85726 .47404 L
+.85819 .47587 L
+.85912 .4777 L
+.86005 .47952 L
+Mistroke
+.86098 .48133 L
+.8619 .48313 L
+.86283 .48492 L
+.86376 .4867 L
+.86469 .48847 L
+.86562 .49023 L
+.86655 .49198 L
+.86748 .49372 L
+.86841 .49545 L
+.86934 .49717 L
+.87027 .49888 L
+.8712 .50057 L
+.87213 .50226 L
+.87305 .50394 L
+.87398 .5056 L
+.87491 .50726 L
+.87584 .5089 L
+.87677 .51053 L
+.8777 .51216 L
+.87863 .51377 L
+.87956 .51536 L
+.88049 .51695 L
+.88142 .51853 L
+.88235 .52009 L
+.88328 .52164 L
+.8842 .52318 L
+.88513 .52471 L
+.88606 .52622 L
+.88699 .52772 L
+.88792 .52921 L
+.88885 .53069 L
+.88978 .53216 L
+.89071 .53361 L
+.89164 .53505 L
+.89257 .53647 L
+.8935 .53789 L
+.89443 .53929 L
+.89535 .54068 L
+.89628 .54205 L
+.89721 .54341 L
+.89814 .54476 L
+.89907 .54609 L
+.9 .54741 L
+.90093 .54872 L
+.90186 .55001 L
+.90279 .55129 L
+.90372 .55256 L
+.90465 .55381 L
+.90557 .55505 L
+.9065 .55627 L
+Mistroke
+.90743 .55748 L
+.90836 .55868 L
+.90929 .55986 L
+.91022 .56102 L
+.91115 .56217 L
+.91208 .56331 L
+.91301 .56443 L
+.91394 .56554 L
+.91487 .56663 L
+.9158 .56771 L
+.91672 .56878 L
+.91765 .56982 L
+.91858 .57086 L
+.91951 .57187 L
+.92044 .57288 L
+.92137 .57386 L
+.9223 .57484 L
+.92323 .57579 L
+.92416 .57673 L
+.92509 .57766 L
+.92602 .57857 L
+.92695 .57946 L
+.92787 .58034 L
+.9288 .5812 L
+.92973 .58205 L
+.93066 .58288 L
+.93159 .5837 L
+.93252 .5845 L
+.93345 .58528 L
+.93438 .58605 L
+.93531 .5868 L
+.93624 .58753 L
+.93717 .58825 L
+.9381 .58896 L
+.93902 .58964 L
+.93995 .59031 L
+.94088 .59096 L
+.94181 .5916 L
+.94274 .59222 L
+.94367 .59283 L
+.9446 .59341 L
+.94553 .59398 L
+.94646 .59454 L
+.94739 .59508 L
+.94832 .5956 L
+.94925 .5961 L
+.95017 .59659 L
+.9511 .59706 L
+.95203 .59751 L
+.95296 .59795 L
+Mistroke
+.95389 .59837 L
+.95482 .59877 L
+.95575 .59916 L
+.95668 .59953 L
+.95761 .59988 L
+.95854 .60021 L
+.95947 .60053 L
+.96039 .60083 L
+.96132 .60111 L
+.96225 .60138 L
+.96318 .60163 L
+.96411 .60186 L
+.96504 .60208 L
+.96597 .60228 L
+.9669 .60246 L
+.96783 .60262 L
+.96876 .60277 L
+.96969 .6029 L
+.97062 .60301 L
+.97154 .6031 L
+.97247 .60318 L
+.9734 .60324 L
+.97433 .60328 L
+.97526 .60331 L
+.97619 .60332 L
+Mfstroke
+% End of Graphics
+MathPictureEnd
+\
+\>"], "Graphics",
+  ImageSize->{378.813, 234.063},
+  ImageMargins->{{43, 0}, {0, 0}},
+  ImageRegion->{{0, 1}, {0, 1}},
+  ImageCache->GraphicsData["Bitmap", "\<\
+CF5dJ6E]HGAYHf4PAg9QL6QYHg<PAVmbKF5d0`40005j0000jR000`400?l00000o`00003oo`3ooomk
+0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`00o`3ooomk0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?ooof80oooo000F0?ooo`030000003oool0oooo0?l0ooooHP3oool000d0
+oooo0`0000060?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooo`030000003oool0oooo0?l0ooooHP3oool000`0oooo00D000000?ooo`3oool0
+oooo000000050?ooocD00000B`3oool600000580oooo0P00002:0?ooo`00303oool01 at 000000oooo
+0?ooo`3oool0000000D0oooo00<000000?ooo`3oool0<@3oool<000003/0oooo1P0000040?ooo`@0
+0000CP3oool2000000030?ooo`000000oooo08P0oooo000<0?ooo`050000003oool0oooo0?ooo`00
+00001 at 3oool00`000000oooo0?ooo`0l0?ooo`X00000;03oool7000000`0oooo1000001:0?ooo`80
+00000`3oool2000008L0oooo000=0?ooo`<000001P3oool00`000000oooo0?ooo`160?ooo``00000
+603oool9000001H0oooo100000150?ooo`030000003oool0oooo00 at 0oooo0P0000260?ooo`005P3o
+ool00`000000oooo0?ooo`1A0?oooaX000008 at 3oool400000400oooo0P0000080?ooo`030000003o
+ool0oooo08 at 0oooo000F0?ooo`030000003oool0oooo08l0oooo1000000l0?ooo`8000002P3oool0
+0`000000oooo0?ooo`230?ooo`005P3oool00`000000oooo0?ooo`2B0?ooo`@00000=`3oool20000
+00d0oooo00<000000?ooo`3oool0PP3oool001H0oooo00<000000?ooo`3oool0U at 3oool4000003<0
+oooo0P00000?0?ooo`030000003oool0oooo0840oooo000F0?ooo`030000003oool0oooo09T0oooo
+0`00000^0?ooo`8000004 at 3oool200000880oooo000F0?ooo`800000W at 3oool4000002P0oooo0`00
+000C0?ooo`800000P at 3oool001H0oooo00<000000?ooo`3oool0W`3oool400000280oooo0`00000G
+0?ooo`800000P03oool001H0oooo00<000000?ooo`3oool0XP3oool5000001`0oooo0`00000J0?oo
+o`030000003oool0oooo07h0oooo000F0?ooo`030000003oool0oooo0:H0oooo1P00000B0?ooo`D0
+00007P3oool00`000000oooo0?ooo`1m0?ooo`005P3oool00`000000oooo0?ooo`2/0?oooa<00000
+8P3oool2000007h0oooo000F0?ooo`030000003oool0oooo0>80oooo0P00001m0?ooo`005P3oool0
+0`000000oooo0?ooo`3S0?ooo`030000003oool0oooo07/0oooo000F0?ooo`030000003oool0oooo
+0>@0oooo00<000000?ooo`3oool0NP3oool001H0oooo00<000000?ooo`3oool0i03oool2000007/0
+oooo000F0?ooo`030000003oool0oooo0>D0oooo00<000000?ooo`3oool0N at 3oool001H0oooo0P00
+003W0?ooo`030000003oool0oooo07P0oooo000F0?ooo`030000003oool0oooo0>H0oooo0P00001i
+0?ooo`005P3oool00`000000oooo0?ooo`3W0?ooo`030000003oool0oooo07L0oooo000F0?ooo`03
+0000003oool0oooo0>P0oooo00<000000?ooo`3oool0MP3oool001H0oooo00<000000?ooo`3oool0
+j03oool2000007L0oooo000F0?ooo`030000003oool0oooo0>T0oooo00<000000?ooo`3oool0M at 3o
+ool001H0oooo00<000000?ooo`3oool0jP3oool00`000000oooo0?ooo`1d0?ooo`005P3oool00`00
+0000oooo0?ooo`3Z0?ooo`800000M at 3oool001H0oooo00<000000?ooo`3oool0j`3oool00`000000
+oooo0?ooo`1c0?ooo`005P3oool200000>d0oooo00<000000?ooo`3oool0LP3oool001H0oooo00<0
+00000?ooo`3oool0k03oool00`000000oooo0?ooo`1b0?ooo`005P3oool00`000000oooo0?ooo`3]
+0?ooo`030000003oool0oooo0740oooo000F0?ooo`030000003oool0oooo0>d0oooo0P00001b0?oo
+o`005P3oool00`000000oooo0?ooo`3^0?ooo`030000003oool0oooo0700oooo000F0?ooo`030000
+003oool0oooo0>h0oooo0P00001a0?ooo`005P3oool00`000000oooo0?ooo`3_0?ooo`030000003o
+ool0oooo06l0oooo000F0?ooo`030000003oool0oooo0?00oooo00<000000?ooo`3oool0KP3oool0
+01H0oooo00<000000?ooo`3oool0l03oool2000006l0oooo000F0?ooo`030000003oool0oooo0?40
+oooo00<000000?ooo`3oool0K at 3oool001H0oooo0P00003c0?ooo`030000003oool0oooo06`0oooo
+000F0?ooo`030000003oool0oooo0?80oooo00<000000?ooo`3oool0K03oool001H0oooo00<00000
+0?ooo`3oool0l`3oool00`000000oooo0?ooo`1[0?ooo`005P3oool00`000000oooo0?ooo`3c0?oo
+o`030000003oool0oooo06/0oooo000F0?ooo`030000003oool0oooo0?@0oooo00<000000?ooo`3o
+ool0JP3oool001H0oooo00<000000?ooo`3oool0m03oool00`000000oooo0?ooo`1Z0?ooo`005P3o
+ool00`000000oooo0?ooo`3e0?ooo`030000003oool0oooo06T0oooo00040?ooo`<000000`3oool0
+0`000000oooo0?ooo`020?ooo`030000003oool0oooo00 at 0oooo00<000000?ooo`3oool0m at 3oool0
+0`000000oooo0?ooo`1Y0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<00000
+0?ooo`3oool0103oool00`000000oooo0?ooo`3f0?ooo`030000003oool0oooo06P0oooo00030?oo
+o`050000003oool0oooo0?ooo`0000001`3oool00`000000oooo0?ooo`040?ooo`<00000mP3oool0
+0`000000oooo0?ooo`1X0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<00000
+0?ooo`3oool0103oool00`000000oooo0?ooo`3g0?ooo`030000003oool0oooo06L0oooo00030?oo
+o`050000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo000000060?ooo`030000003oool0
+oooo0?L0oooo00<000000?ooo`3oool0I`3oool000<0oooo00D000000?ooo`3oool0oooo00000006
+0?ooo`8000001P3oool00`000000oooo0?ooo`3h0?ooo`030000003oool0oooo06H0oooo00040?oo
+o`<00000203oool00`000000oooo0?ooo`040?ooo`030000003oool0oooo0?P0oooo00<000000?oo
+o`3oool0IP3oool001H0oooo00<000000?ooo`3oool0n at 3oool00`000000oooo0?ooo`1U0?ooo`00
+5P3oool00`000000oooo0?ooo`3i0?ooo`030000003oool0oooo06D0oooo000F0?ooo`030000003o
+ool0oooo0?X0oooo00<000000?ooo`3oool0I03oool001H0oooo00<000000?ooo`3oool0nP3oool0
+0`000000oooo0?ooo`1T0?ooo`005P3oool00`000000oooo0?ooo`3k0?ooo`030000003oool0oooo
+06<0oooo000F0?ooo`800000o03oool00`000000oooo0?ooo`1S0?ooo`005P3oool00`000000oooo
+0?ooo`3l0?ooo`030000003oool0oooo0680oooo000F0?ooo`030000003oool0oooo0?`0oooo00<0
+00000?ooo`3oool0HP3oool001H0oooo00<000000?ooo`3oool0o at 3oool00`000000oooo0?ooo`1Q
+0?ooo`005P3oool00`000000oooo0?ooo`3m0?ooo`030000003oool0oooo0640oooo000F0?ooo`03
+0000003oool0oooo0?h0oooo00<000000?ooo`3oool0H03oool001H0oooo00<000000?ooo`3oool0
+oP3oool00`000000oooo0?ooo`1P0?ooo`005P3oool00`000000oooo0?ooo`3n0?ooo`800000H at 3o
+ool001H0oooo00<000000?ooo`3oool0o`3oool00`000000oooo0?ooo`1O0?ooo`005P3oool20000
+0?l0oooo0 at 3oool200000600oooo000F0?ooo`030000003oool0oooo0?l0oooo0 at 3oool00`000000
+oooo0?ooo`1N0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`40oooo00<000000?ooo`3oool0
+GP3oool001H0oooo00<000000?ooo`3oool0o`3oool20?ooo`030000003oool0oooo05d0oooo000F
+0?ooo`030000003oool0oooo0?l0oooo0P3oool00`000000oooo0?ooo`1M0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooo`<0oooo00<000000?ooo`3oool0G03oool001H0oooo00<000000?ooo`3o
+ool0o`3oool30?ooo`030000003oool0oooo05`0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+103oool00`000000oooo0?ooo`1K0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`@0oooo00<0
+00000?ooo`3oool0F`3oool001H0oooo00<000000?ooo`3oool0o`3oool40?ooo`800000G03oool0
+01H0oooo0P00003o0?ooo`H0oooo00<000000?ooo`3oool0FP3oool001H0oooo00<000000?ooo`3o
+ool0o`3oool50?ooo`030000003oool0oooo05X0oooo000F0?ooo`030000003oool0oooo0?l0oooo
+1P3oool00`000000oooo0?ooo`1I0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`H0oooo00<0
+00000?ooo`3oool0F at 3oool001H0oooo00<000000?ooo`3oool0o`3oool70?ooo`030000003oool0
+oooo05P0oooo000F0?ooo`030000003oool0oooo0?l0oooo1`3oool00`000000oooo0?ooo`1H0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooo`P0oooo00<000000?ooo`3oool0E`3oool001H0oooo
+00<000000?ooo`3oool0o`3oool80?ooo`030000003oool0oooo05L0oooo000F0?ooo`030000003o
+ool0oooo0?l0oooo2 at 3oool00`000000oooo0?ooo`1F0?ooo`005P3oool200000?l0oooo2P3oool0
+0`000000oooo0?ooo`1F0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooo`X0oooo00<000000?oo
+o`3oool0E at 3oool001H0oooo00<000000?ooo`3oool0o`3oool:0?ooo`030000003oool0oooo05D0
+oooo000F0?ooo`030000003oool0oooo0?l0oooo2P3oool2000005H0oooo000F0?ooo`030000003o
+ool0oooo0?l0oooo2`3oool00`000000oooo0?ooo`1D0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooo`/0oooo00<000000?ooo`3oool0E03oool001H0oooo00<000000?ooo`3oool0o`3oool<0?oo
+o`030000003oool0oooo05<0oooo00040?ooo`<000000`3oool00`000000oooo00000004000000D0
+oooo00<000000?ooo`3oool0o`3oool<0?ooo`030000003oool0oooo05<0oooo00030?ooo`050000
+003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`060?ooo`030000003oool0oooo0?l0
+oooo3 at 3oool00`000000oooo0?ooo`1B0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000H0
+oooo00<000000?ooo`3oool01 at 3oool300000?l0oooo3 at 3oool00`000000oooo0?ooo`1B0?ooo`00
+0`3oool01 at 000000oooo0?ooo`3oool0000000L0oooo00<000000?ooo`3oool0103oool00`000000
+oooo0?ooo`3o0?ooo`d0oooo0P00001C0?ooo`000`3oool01 at 000000oooo0?ooo`3oool0000000P0
+oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`3o0?ooo`h0oooo00<000000?ooo`3o
+ool0D at 3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`050000003oool0oooo0?oo
+o`0000001 at 3oool00`000000oooo0?ooo`3o0?ooo`h0oooo00<000000?ooo`3oool0D at 3oool000@0
+oooo0`0000060?ooo`<000001P3oool00`000000oooo0?ooo`3o0?ooo`l0oooo00<000000?ooo`3o
+ool0D03oool001H0oooo00<000000?ooo`3oool0o`3oool?0?ooo`030000003oool0oooo0500oooo
+000F0?ooo`030000003oool0oooo0?l0oooo403oool00`000000oooo0?ooo`1?0?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?oooa00oooo00<000000?ooo`3oool0C`3oool001H0oooo00<000000?oo
+o`3oool0o`3oool at 0?ooo`030000003oool0oooo04l0oooo000F0?ooo`030000003oool0oooo0?l0
+oooo4 at 3oool00`000000oooo0?ooo`1>0?ooo`005P3oool200000?l0oooo4P3oool00`000000oooo
+0?ooo`1>0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa80oooo00<000000?ooo`3oool0C at 3o
+ool001H0oooo00<000000?ooo`3oool0o`3ooolB0?ooo`030000003oool0oooo04d0oooo000F0?oo
+o`030000003oool0oooo0?l0oooo4P3oool2000004h0oooo000F0?ooo`030000003oool0oooo0?l0
+oooo4`3oool00`000000oooo0?ooo`1<0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa<0oooo
+00<000000?ooo`3oool0C03oool001H0oooo00<000000?ooo`3oool0o`3ooolD0?ooo`030000003o
+ool0oooo04/0oooo000F0?ooo`030000003oool0oooo0?l0oooo503oool00`000000oooo0?ooo`1;
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooaD0oooo00<000000?ooo`3oool0BP3oool001H0
+oooo0P00003o0?oooaH0oooo00<000000?ooo`3oool0BP3oool001H0oooo00<000000?ooo`3oool0
+o`3ooolE0?ooo`800000B`3oool001H0oooo00<000000?ooo`3oool0o`3ooolF0?ooo`030000003o
+ool0oooo04T0oooo000F0?ooo`030000003oool0oooo0?l0oooo5P3oool00`000000oooo0?ooo`19
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooaL0oooo00<000000?ooo`3oool0B03oool001H0
+oooo00<000000?ooo`3oool0o`3ooolG0?ooo`030000003oool0oooo04P0oooo000F0?ooo`030000
+003oool0oooo0?l0oooo603oool00`000000oooo0?ooo`170?ooo`005P3oool00`000000oooo0?oo
+o`3o0?oooaP0oooo00<000000?ooo`3oool0A`3oool001H0oooo00<000000?ooo`3oool0o`3ooolH
+0?ooo`030000003oool0oooo04L0oooo000F0?ooo`030000003oool0oooo0?l0oooo6 at 3oool00`00
+0000oooo0?ooo`160?ooo`005P3oool200000?l0oooo6P3oool00`000000oooo0?ooo`160?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?oooaX0oooo00<000000?ooo`3oool0A at 3oool001H0oooo00<0
+00000?ooo`3oool0o`3ooolJ0?ooo`030000003oool0oooo04D0oooo000F0?ooo`030000003oool0
+oooo0?l0oooo6P3oool2000004H0oooo000F0?ooo`030000003oool0oooo0?l0oooo6`3oool00`00
+0000oooo0?ooo`140?ooo`005P3oool00`000000oooo0?ooo`3o0?oooa/0oooo00<000000?ooo`3o
+ool0A03oool001H0oooo00<000000?ooo`3oool0o`3ooolL0?ooo`030000003oool0oooo04<0oooo
+000F0?ooo`030000003oool0oooo0?l0oooo703oool00`000000oooo0?ooo`130?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?oooad0oooo00<000000?ooo`3oool0 at P3oool001H0oooo0P00003o0?oo
+oah0oooo00<000000?ooo`3oool0 at P3oool001H0oooo00<000000?ooo`3oool0o`3ooolM0?ooo`80
+0000@`3oool001H0oooo00<000000?ooo`3oool0o`3ooolN0?ooo`030000003oool0oooo0440oooo
+000F0?ooo`030000003oool0oooo0?l0oooo7P3oool00`000000oooo0?ooo`110?ooo`005P3oool0
+0`000000oooo0?ooo`3o0?oooal0oooo00<000000?ooo`3oool0 at 03oool001H0oooo00<000000?oo
+o`3oool0o`3ooolP0?ooo`030000003oool0oooo03l0oooo000F0?ooo`030000003oool0oooo0?l0
+oooo803oool00`000000oooo0?ooo`0o0?ooo`00103oool3000000<0oooo00<000000?ooo`3oool0
+0`0000060?ooo`030000003oool0oooo0?l0oooo803oool00`000000oooo0?ooo`0o0?ooo`000`3o
+ool01 at 000000oooo0?ooo`3oool0000000 at 0oooo00D000000?ooo`3oool0oooo000000050?ooo`03
+0000003oool0oooo0?l0oooo8 at 3oool00`000000oooo0?ooo`0n0?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`3o0?ooob40
+oooo00<000000?ooo`3oool0?P3oool000<0oooo00D000000?ooo`3oool0oooo000000060?ooo`80
+00001P3oool300000?l0oooo8P3oool00`000000oooo0?ooo`0m0?ooo`000`3oool01 at 000000oooo
+0?ooo`3oool0000000P0oooo00<000000?ooo`3oool00`3oool00`000000oooo0?ooo`3o0?ooob80
+oooo00<000000?ooo`3oool0?@3oool000<0oooo00D000000?ooo`3oool0oooo000000040?ooo`05
+0000003oool0oooo0?ooo`0000001 at 3oool00`000000oooo0?ooo`3o0?ooob<0oooo00<000000?oo
+o`3oool0?03oool000 at 0oooo0`0000060?ooo`<000001P3oool00`000000oooo0?ooo`3o0?ooob<0
+oooo00<000000?ooo`3oool0?03oool001H0oooo00<000000?ooo`3oool0o`3ooolS0?ooo`800000
+?@3oool001H0oooo00<000000?ooo`3oool0o`3ooolT0?ooo`030000003oool0oooo03/0oooo000F
+0?ooo`030000003oool0oooo0?l0oooo903oool00`000000oooo0?ooo`0k0?ooo`005P3oool00`00
+0000oooo0?ooo`3o0?ooobD0oooo00<000000?ooo`3oool0>P3oool001H0oooo00<000000?ooo`3o
+ool0o`3ooolU0?ooo`030000003oool0oooo03X0oooo000F0?ooo`800000o`3ooolW0?ooo`030000
+003oool0oooo03T0oooo000F0?ooo`030000003oool0oooo0?l0oooo9P3oool00`000000oooo0?oo
+o`0i0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooobL0oooo00<000000?ooo`3oool0>03oool0
+01H0oooo00<000000?ooo`3oool0o`3ooolW0?ooo`030000003oool0oooo03P0oooo000F0?ooo`03
+0000003oool0oooo0?l0oooo:03oool00`000000oooo0?ooo`0g0?ooo`005P3oool00`000000oooo
+0?ooo`3o0?ooobP0oooo00<000000?ooo`3oool0=`3oool001H0oooo00<000000?ooo`3oool0o`3o
+oolX0?ooo`800000>03oool001H0oooo00<000000?ooo`3oool0o`3ooolY0?ooo`030000003oool0
+oooo03H0oooo000F0?ooo`030000003oool0oooo0?l0oooo:@3oool2000003L0oooo000F0?ooo`03
+0000003oool0oooo0?l0oooo:P3oool00`000000oooo0?ooo`0e0?ooo`005P3oool200000?l0oooo
+:`3oool00`000000oooo0?ooo`0e0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooob/0oooo00<0
+00000?ooo`3oool0=03oool001H0oooo00<000000?ooo`3oool0o`3oool[0?ooo`030000003oool0
+oooo03 at 0oooo000F0?ooo`030000003oool0oooo0?l0oooo;03oool00`000000oooo0?ooo`0c0?oo
+o`005P3oool00`000000oooo0?ooo`3o0?ooob`0oooo00<000000?ooo`3oool0<`3oool001H0oooo
+00<000000?ooo`3oool0o`3oool]0?ooo`030000003oool0oooo0380oooo000F0?ooo`030000003o
+ool0oooo0?l0oooo;@3oool00`000000oooo0?ooo`0b0?ooo`005P3oool00`000000oooo0?ooo`3o
+0?ooobh0oooo00<000000?ooo`3oool0<@3oool001H0oooo00<000000?ooo`3oool0o`3oool^0?oo
+o`030000003oool0oooo0340oooo000F0?ooo`800000o`3oool`0?ooo`030000003oool0oooo0300
+oooo000F0?ooo`030000003oool0oooo0?l0oooo;`3oool00`000000oooo0?ooo`0`0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?oooc00oooo00<000000?ooo`3oool0;`3oool001H0oooo00<00000
+0?ooo`3oool0o`3oool`0?ooo`030000003oool0oooo02l0oooo000F0?ooo`030000003oool0oooo
+0?l0oooo<@3oool00`000000oooo0?ooo`0^0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooc40
+oooo0P00000_0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooc80oooo00<000000?ooo`3oool0
+;@3oool001H0oooo00<000000?ooo`3oool0o`3ooolb0?ooo`800000;P3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolc0?ooo`030000003oool0oooo02`0oooo000F0?ooo`030000003oool0oooo
+0?l0oooo<`3oool2000002d0oooo000F0?ooo`800000o`3ooole0?ooo`030000003oool0oooo02/0
+oooo000F0?ooo`030000003oool0oooo0?l0oooo=@3oool00`000000oooo0?ooo`0Z0?ooo`005P3o
+ool00`000000oooo0?ooo`3o0?ooocD0oooo00<000000?ooo`3oool0:P3oool001H0oooo00<00000
+0?ooo`3oool0o`3ooolf0?ooo`030000003oool0oooo02T0oooo000F0?ooo`030000003oool0oooo
+0?l0oooo=P3oool2000002X0oooo000F0?ooo`030000003oool0oooo0?l0oooo=`3oool2000002T0
+oooo00040?ooo`<000000`3oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo00<0oooo
+00<000000?ooo`3oool0o`3ooolh0?ooo`030000003oool0oooo02L0oooo00030?ooo`050000003o
+ool0oooo0?ooo`000000203oool00`000000oooo0?ooo`030?ooo`030000003oool0oooo0?l0oooo
+>03oool2000002P0oooo00030?ooo`050000003oool0oooo0?ooo`000000103oool6000000 at 0oooo
+00<000000?ooo`3oool0o`3oooli0?ooo`030000003oool0oooo02H0oooo00030?ooo`050000003o
+ool0oooo0?ooo`000000103oool01 at 000000oooo0?ooo`3oool0000000D0oooo0`00003o0?ooocX0
+oooo00<000000?ooo`3oool09 at 3oool000<0oooo00D000000?ooo`3oool0oooo000000050?ooo`04
+0000003oool0oooo000000D0oooo00<000000?ooo`3oool0o`3ooolj0?ooo`8000009P3oool000<0
+oooo00D000000?ooo`3oool0oooo000000060?ooo`030000003oool0000000D0oooo00<000000?oo
+o`3oool0o`3ooolk0?ooo`030000003oool0oooo02 at 0oooo00040?ooo`<00000203oool2000000D0
+oooo00<000000?ooo`3oool0o`3oooll0?ooo`030000003oool0oooo02<0oooo000F0?ooo`030000
+003oool0oooo0?l0oooo?03oool2000002 at 0oooo000F0?ooo`030000003oool0oooo0?l0oooo?@3o
+ool00`000000oooo0?ooo`0R0?ooo`005P3oool00`000000oooo0?ooo`3o0?oooch0oooo00<00000
+0?ooo`3oool08 at 3oool001H0oooo00<000000?ooo`3oool0o`3oooln0?ooo`8000008P3oool001H0
+oooo00<000000?ooo`3oool0o`3ooolo0?ooo`8000008 at 3oool001H0oooo0P00003o0?oood40oooo
+00<000000?ooo`3oool07`3oool001H0oooo00<000000?ooo`3oool0o`3ooom10?ooo`030000003o
+ool0oooo01h0oooo000F0?ooo`030000003oool0oooo0?l0oooo@@3oool2000001l0oooo000F0?oo
+o`030000003oool0oooo0?l0oooo at P3oool2000001h0oooo000F0?ooo`030000003oool0oooo0?l0
+oooo@`3oool2000001d0oooo000F0?ooo`030000003oool0oooo0?l0ooooA03oool2000001`0oooo
+000F0?ooo`030000003oool0oooo0?l0ooooA at 3oool2000001/0oooo000F0?ooo`030000003oool0
+oooo0?l0ooooAP3oool2000001X0oooo000F0?ooo`030000003oool0oooo0?l0ooooA`3oool20000
+01T0oooo000F0?ooo`030000003oool0oooo0?l0ooooB03oool2000001P0oooo000F0?ooo`800000
+o`3ooom:0?ooo`8000005`3oool001H0oooo00<000000?ooo`3oool0o`3ooom:0?ooo`8000005P3o
+ool001H0oooo00<000000?ooo`3oool0o`3ooom<0?ooo`800000503oool001H0oooo00<000000?oo
+o`3oool0o`3ooom=0?ooo`<000004P3oool001H0oooo00<000000?ooo`3oool0o`3ooom?0?ooo`<0
+0000403oool001H0oooo00<000000?ooo`3oool0o`3ooomA0?ooo`@000003 at 3oool001H0oooo00<0
+00000?ooo`3oool0o`3ooomD0?ooo`H00000203oool001H0oooo00<000000?ooo`3oool0o`3ooomR
+0?ooo`005P3oool00`000000oooo0?ooo`3o0?ooof80oooo000F0?ooo`800000o`3ooomS0?ooo`00
+5P3oool00`000000oooo0?ooo`3o0?ooof80oooo000F0?ooo`030000003oool0oooo0?l0ooooHP3o
+ool00?l0ooooN`3oool00?l0ooooN`3oool00?l0ooooN`3oool00?l0ooooN`3oool00001\
+\>"],
+  ImageRangeCache->{{{0, 377.813}, {233.063, 0}} -> {-66.6901, -0.0199413, 
+  2.95734, 0.00211507}}]
+}, Open  ]]
+}, Open  ]],
+
+Cell[TextData[{
+  "The computation of the CSF filters themselves has been moved to \
+tools/csfgen.c\nThe version that used to reside in this notebook was \
+fundamentally flawed, and the version implemented in that file has not been \
+ported back into ",
+  StyleBox["Mathematica",
+    FontSlant->"Italic"],
+  ". Correspondingly, the code to dump the tables to a C file has been \
+disabled."
+}], "Text"],
+
+Cell["\<\
+Finally, write these to a C file for cut-and-pasting purposes.\
+\>", "Text"],
+
+Cell[BoxData[
+    \( (*csftablefile = OpenWrite["\<csftable.c\>"]; *) \)], "Input"],
+
+Cell[BoxData[
+    \( (*writenumber[n_] := 
+        WriteString[csftablefile, If[n < 0, "\<-\>", "\< \>"], 
+          SetAccuracy[Abs[n], 25], "\<F\>"]*) \)], "Input"],
+
+Cell[BoxData[
+    \( (*\(Block[{i, j, k, ni, nj, nk}, \n\t
+            WriteString[csftablefile, 
+              "\<static const oc_csf_filter_set OC_CSF_FILTERS[5][8]={\>"]; \n
+            \tFor[i = 1; ni = Length[#1], i <= ni, \(i++\), \n\t\t
+              WriteString[csftablefile, "\<\n  /*\>", #2[\([i]\)], 
+                "\<*/\n  {\>"]; \n\t\t
+              For[j = 1; nj = Length[#1[\([i]\)]], j <= nj, \(j++\), \n\t\t\t
+                WriteString[csftablefile, "\<\n    /*Contrast level \>", 
+                  If[j > 1, 2^\((j - 2)\), 0], "\< filters.*/\n    {\>"]; \n
+                \t\t\tFor[k = 1; nk = Length[#1[\([i, j]\)]], k <= nk, 
+                  \(k++\), \n\t\t\t\t
+                  WriteString[csftablefile, "\<\n      {\>"]; \n\t\t\t\t
+                  \(\((WriteString[csftablefile, "\<\n        \>"]; 
+                        writenumber[#[\([1]\)]]; 
+                        WriteString[csftablefile, "\<,\n        \>"]; 
+                        writenumber[#[\([2]\)]]; 
+                        WriteString[csftablefile, "\<,\>"]; 
+                        writenumber[#[\([3]\)]]; 
+                        WriteString[csftablefile, "\<,\n        \>"]; 
+                        writenumber[#[\([4]\)]]; 
+                        WriteString[csftablefile, "\<,\>"]; 
+                        writenumber[#[\([5]\)]])\)&\)[#1[\([i, j, k]\)]]; \n
+                  \t\t\t\tWriteString[csftablefile, "\<\n      }\>"]; \n
+                  \t\t\t\tIf[k + 1 <= nk, 
+                    WriteString[csftablefile, "\<,\>"]]; \n\t\t\t]; \n\t\t\t
+                WriteString[csftablefile, "\<\n    }\>"]; \n\t\t\t
+                If[j + 1 <= nj, WriteString[csftablefile, "\<,\>"]]; \n\t\t]; 
+              \n\t\tWriteString[csftablefile, "\<\n  }\>"]; \n\t\t
+              If[i + 1 <= ni, WriteString[csftablefile, "\<,\>"]]; \n\t]; \n\t
+            WriteString[csftablefile, "\<\n};\n\>"]; ]&\)[{csfyf, csfcrf, 
+          csfcrh, csfcbf, csfcbh}, {"\<Y channel filters\>", 
+          "\<Cr channel filters at full resolution\>", 
+          "\<Cr channel filters at half resolution\>", 
+          "\<Cb channel filters at full resolution\>", 
+          "\<Cb channel filters at half resolution\>"}]*) \)], "Input"],
+
+Cell[BoxData[
+    \( (*Close[csftablefile]; *) \)], "Input"]
+},
+FrontEndVersion->"Microsoft Windows 3.0",
+ScreenRectangle->{{0, 1600}, {0, 1142}},
+WindowSize->{432, 661},
+WindowMargins->{{5, Automatic}, {Automatic, 102}}
+]
+
+
+(***********************************************************************
+Cached data follows.  If you edit this Notebook file directly, not using
+Mathematica, you must remove the line containing CacheID at the top of 
+the file.  The cache data will then be recreated when you save this file 
+from within Mathematica.
+***********************************************************************)
+
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+
+(*NotebookFileOutline
+Notebook[{
+Cell[1709, 49, 53, 1, 29, "Input"],
+Cell[1765, 52, 54, 1, 29, "Input"],
+Cell[1822, 55, 352, 6, 90, "Text"],
+Cell[2177, 63, 150, 3, 48, "Input"],
+Cell[2330, 68, 91, 1, 29, "Input"],
+Cell[2424, 71, 125, 3, 48, "Input"],
+Cell[2552, 76, 88, 1, 29, "Input"],
+Cell[2643, 79, 87, 1, 29, "Input"],
+
+Cell[CellGroupData[{
+Cell[2755, 84, 262, 4, 86, "Input"],
+Cell[3020, 90, 90338, 1782, 776, 20356, 913, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+Cell[93373, 1875, 102, 3, 33, "Text"],
+Cell[93478, 1880, 89, 1, 29, "Input"],
+Cell[93570, 1883, 91, 1, 29, "Input"],
+Cell[93664, 1886, 91, 1, 29, "Input"],
+
+Cell[CellGroupData[{
+Cell[93780, 1891, 368, 5, 124, "Input"],
+Cell[94151, 1898, 112586, 2395, 778, 25758, 1318, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+Cell[206774, 4298, 378, 5, 124, "Input"],
+Cell[207155, 4305, 104740, 2138, 778, 23882, 1135, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+Cell[311932, 6448, 378, 5, 124, "Input"],
+Cell[312313, 6455, 125471, 2396, 776, 23716, 1135, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+Cell[437799, 8854, 295, 5, 90, "Text"],
+
+Cell[CellGroupData[{
+Cell[438119, 8863, 122, 3, 48, "Input"],
+Cell[438244, 8868, 54, 1, 29, "Output"]
+}, Open  ]],
+Cell[438313, 8872, 72, 0, 33, "Text"],
+Cell[438388, 8874, 256, 5, 86, "Input"],
+Cell[438647, 8881, 145, 3, 48, "Input"],
+Cell[438795, 8886, 143, 3, 48, "Input"],
+Cell[438941, 8891, 122, 3, 52, "Text"],
+Cell[439066, 8896, 86, 1, 29, "Input"],
+Cell[439155, 8899, 88, 1, 29, "Input"],
+Cell[439246, 8902, 88, 1, 29, "Input"],
+Cell[439337, 8905, 151, 3, 48, "Input"],
+Cell[439491, 8910, 143, 3, 48, "Input"],
+Cell[439637, 8915, 143, 3, 48, "Input"],
+Cell[439783, 8920, 99, 2, 29, "Input"],
+Cell[439885, 8924, 101, 2, 29, "Input"],
+Cell[439989, 8928, 101, 2, 29, "Input"],
+Cell[440093, 8932, 83, 1, 29, "Input"],
+Cell[440179, 8935, 58, 1, 29, "Input"],
+Cell[440240, 8938, 55, 1, 29, "Input"],
+
+Cell[CellGroupData[{
+Cell[440320, 8943, 342, 5, 105, "Input"],
+Cell[440665, 8950, 94230, 1670, 782, 7921, 600, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+Cell[534932, 10625, 350, 5, 124, "Input"],
+Cell[535285, 10632, 62337, 1163, 776, 6283, 466, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+
+Cell[CellGroupData[{
+Cell[597659, 11800, 350, 5, 124, "Input"],
+Cell[598012, 11807, 70804, 1267, 782, 6264, 466, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+Cell[668831, 13077, 62, 1, 29, "Input"],
+Cell[668896, 13080, 208, 4, 67, "Input"],
+Cell[669107, 13086, 259, 6, 86, "Input"],
+Cell[669369, 13094, 68, 1, 29, "Input"],
+Cell[669440, 13097, 57, 1, 29, "Input"],
+Cell[669500, 13100, 322, 9, 105, "Input"],
+Cell[669825, 13111, 338, 6, 90, "Text"],
+Cell[670166, 13119, 2164, 33, 922, "Input"],
+Cell[672333, 13154, 67, 1, 29, "Input"],
+
+Cell[CellGroupData[{
+Cell[672425, 13159, 314, 6, 124, "Input"],
+Cell[672742, 13167, 96212, 3060, 500, 28379, 2218, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]],
+Cell[768969, 16230, 93, 2, 33, "Text"],
+Cell[769065, 16234, 88, 1, 29, "Input"],
+
+Cell[CellGroupData[{
+Cell[769178, 16239, 128, 2, 48, "Input"],
+
+Cell[CellGroupData[{
+Cell[769331, 16245, 39436, 1449, 243, 18351, 1184, "GraphicsData", 
+"PostScript", "Graphics"],
+Cell[808770, 17696, 45771, 1508, 243, 17971, 1160, "GraphicsData", 
+"PostScript", "Graphics"],
+Cell[854544, 19206, 47470, 1583, 243, 18901, 1226, "GraphicsData", 
+"PostScript", "Graphics"],
+Cell[902017, 20791, 46690, 1573, 243, 18935, 1226, "GraphicsData", 
+"PostScript", "Graphics"],
+Cell[948710, 22366, 45906, 1563, 243, 18942, 1226, "GraphicsData", 
+"PostScript", "Graphics"],
+Cell[994619, 23931, 44738, 1549, 243, 18915, 1226, "GraphicsData", 
+"PostScript", "Graphics"],
+Cell[1039360, 25482, 42540, 1525, 243, 18956, 1229, "GraphicsData", 
+"PostScript", "Graphics"],
+Cell[1081903, 27009, 35059, 1387, 243, 18211, 1175, "GraphicsData", 
+"PostScript", "Graphics"]
+}, Open  ]]
+}, Open  ]],
+Cell[1116989, 28400, 401, 9, 90, "Text"],
+Cell[1117393, 28411, 86, 2, 33, "Text"],
+Cell[1117482, 28415, 83, 1, 29, "Input"],
+Cell[1117568, 28418, 166, 3, 48, "Input"],
+Cell[1117737, 28423, 2234, 35, 675, "Input"],
+Cell[1119974, 28460, 60, 1, 29, "Input"]
+}
+]
+*)
+
+
+
+
+(***********************************************************************
+End of Mathematica Notebook file.
+***********************************************************************)
+

Added: trunk/theora-exp/examples/Makefile.am
===================================================================
--- trunk/theora-exp/examples/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/examples/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,19 @@
+INCLUDES = -I $(top_srcdir)/include
+
+AM_CFLAGS = $(SDL_CFLAGS) $(OGG_CFLAGS) $(OPTIMIZATION_CFLAGS)
+
+LDADD = ../lib/libtheoradec.la -lm $(OGG_LIBS)
+ENCODERLDADD = ../lib/libtheoraenc.la
+
+noinst_PROGRAMS = dump_video $(BUILDABLE_EXAMPLES)
+
+EXTRA_PROGRAMS = encoder_example player_example
+
+dump_video_SOURCES = dump_video.c
+dump_video_LDFLAGS = $(OGG_LIBS)
+
+encoder_example_SOURCES = encoder_example.c
+encoder_example_LDADD = $(LDADD) $(ENCODERLDADD) $(VORBIS_LIBS) $(VORBISENC_LIBS)
+
+player_example_SOURCES = player_example.c
+player_example_LDADD = $(LDADD) $(SDL_LIBS) $(VORBIS_LIBS)

Added: trunk/theora-exp/examples/dump_video.c
===================================================================
--- trunk/theora-exp/examples/dump_video.c	                        (rev 0)
+++ trunk/theora-exp/examples/dump_video.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,439 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2006                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function: example dumpvid application; dumps  Theora streams
+  last mod: $Id: dump_video.c,v 1.2 2004/03/24 19:12:42 derf Exp $
+
+ ********************************************************************/
+
+/* By Mauricio Piacentini (mauricio at xiph.org) */
+/*  simply dump decoded YUV data, for verification of theora bitstream */
+
+#if !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#if !defined(_GNU_SOURCE)
+#define _GNU_SOURCE
+#endif
+#if !defined(_LARGEFILE_SOURCE)
+#define _LARGEFILE_SOURCE
+#endif
+#if !defined(_LARGEFILE64_SOURCE)
+#define _LARGEFILE64_SOURCE
+#endif
+#if !defined(_FILE_OFFSET_BITS)
+#define _FILE_OFFSET_BITS 64
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/timeb.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/*Yes, yes, we're going to hell.*/
+#if defined(_WIN32)
+#include <io.h>
+#endif
+#include <fcntl.h>
+#include <math.h>
+#include <signal.h>
+#include "getopt.h"
+#include "theora/theoradec.h"
+
+const char *optstring = "o:rf";
+struct option options [] = {
+  {"output",required_argument,NULL,'o'},
+  {"raw",no_argument, NULL,'r'}, /*Disable YUV4MPEG2 headers:*/
+  {"fps-only",no_argument, NULL, 'f'}, /* Only interested in fps of decode loop */
+  {NULL,0,NULL,0}
+};
+
+/* Helper; just grab some more compressed bitstream and sync it for
+   page extraction */
+int buffer_data(FILE *in,ogg_sync_state *oy){
+  char *buffer=ogg_sync_buffer(oy,4096);
+  int bytes=fread(buffer,1,4096,in);
+  ogg_sync_wrote(oy,bytes);
+  return(bytes);
+}
+
+/* never forget that globals are a one-way ticket to Hell */
+/* Ogg and codec state for demux/decode */
+ogg_sync_state     oy;
+ogg_page           og;
+ogg_stream_state   vo;
+ogg_stream_state   to;
+th_info            ti;
+th_comment         tc;
+th_setup_info     *ts;
+th_dec_ctx        *td;
+
+int              theora_p=0;
+int              theora_processing_headers;
+int              stateflag=0;
+
+/* single frame video buffering */
+int          videobuf_ready=0;
+ogg_int64_t  videobuf_granulepos=-1;
+double       videobuf_time=0;
+int          raw=0;
+
+FILE* outfile = NULL;
+
+int got_sigint=0;
+static void sigint_handler (int signal) {
+  got_sigint = 1;
+}
+
+static th_ycbcr_buffer ycbcr;
+
+static void stripe_decoded(th_ycbcr_buffer _dst,th_ycbcr_buffer _src,
+ int _fragy0,int _fragy_end){
+  int pli;
+  for(pli=0;pli<3;pli++){
+    int yshift;
+    int y_end;
+    int y;
+    yshift=pli!=0&&!(ti.pixel_fmt&2);
+    y_end=_fragy_end<<3-yshift;
+    for(y=_fragy0<<3-yshift;y<y_end;y++){
+      memcpy(_dst[pli].data+y*_dst[pli].ystride,
+       _src[pli].data+y*_src[pli].ystride,_src[pli].width);
+    }
+  }
+}
+
+static void open_video(void){
+  th_stripe_callback cb;
+  int                pli;
+  /*Here we allocate a buffer so we can use the striped decode feature.
+    There's no real reason to do this in this application, because we want to
+     write to the file top-down, but the frame gets decoded bottom up, so we
+     have to buffer it all anyway.
+    But this illustrates how the API works.*/
+  for(pli=0;pli<3;pli++){
+    int xshift;
+    int yshift;
+    xshift=pli!=0&&!(ti.pixel_fmt&1);
+    yshift=pli!=0&&!(ti.pixel_fmt&2);
+    ycbcr[pli].data=(unsigned char *)malloc(
+     (ti.frame_width>>xshift)*(ti.frame_height>>yshift)*sizeof(char));
+    ycbcr[pli].ystride=ti.frame_width>>xshift;
+    ycbcr[pli].width=ti.frame_width>>xshift;
+    ycbcr[pli].height=ti.frame_height>>yshift;
+  }
+  /*Similarly, since ycbcr is a global, there's no real reason to pass it as
+     the context.
+    In a more object-oriented decoder, we could pass the "this" pointer
+     instead (though in C++ platform-dependent calling convention differences
+     prevent us from using a real member function pointer).*/
+  cb.ctx=ycbcr;
+  cb.stripe_decoded=(th_stripe_decoded_func)stripe_decoded;
+  th_decode_ctl(td,TH_DECCTL_SET_STRIPE_CB,&cb,sizeof(cb));
+}
+
+static void video_write(void){
+  int pli;
+  int i;
+  /*Uncomment the following to do normal, non-striped decoding.
+  th_ycbcr_buffer ycbcr;
+  th_decode_ycbcr_out(td,ycbcr);*/
+  if(outfile){
+    if(!raw)fprintf(outfile, "FRAME\n");
+    for(pli=0;pli<3;pli++){
+      for(i=0;i<ycbcr[pli].height;i++){
+        fwrite(ycbcr[pli].data+ycbcr[pli].ystride*i, 1,
+         ycbcr[pli].width, outfile);
+      }
+    }
+  }
+}
+
+/* helper: push a page into the appropriate steam */
+/* this can be done blindly; a stream won't accept a page
+                that doesn't belong to it */
+static int queue_page(ogg_page *page){
+  if(theora_p)ogg_stream_pagein(&to,page);
+  return 0;
+}
+
+static void usage(void){
+  fprintf(stderr,
+          "Usage: dumpvid <file.ogv> > outfile\n"
+          "input is read from stdin if no file is passed on the command line\n"
+          "\n"
+  );
+}
+
+int main(int argc,char *argv[]){
+
+  ogg_packet op;
+
+  int long_option_index;
+  int c;
+
+  int frames = 0;
+
+  FILE *infile = stdin;
+  outfile = stdout;
+
+  struct timeb start;
+  struct timeb after;
+  struct timeb last;
+  int fps_only=0;
+
+#ifdef _WIN32 /* We need to set stdin/stdout to binary mode on 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
+
+  /* Process option arguments. */
+  while((c=getopt_long(argc,argv,optstring,options,&long_option_index))!=EOF){
+    switch(c){
+    case 'o':
+      if(strcmp(optarg,"-")!=0){
+        outfile=fopen(optarg,"wb");
+        if(outfile==NULL){
+          fprintf(stderr,"Unable to open output file '%s'\n", optarg);
+          exit(1);
+        }
+      }else{
+        outfile=stdout;
+      }
+      break;
+
+    case 'r':
+        raw=1;
+        break;
+
+    case 'f':
+      fps_only = 1;
+      outfile = NULL;
+      break;
+
+    default:
+      usage();
+    }
+  }
+  if(optind<argc){
+    infile=fopen(argv[optind],"rb");
+    if(infile==NULL){
+      fprintf(stderr,"Unable to open '%s' for extraction.\n", argv[optind]);
+      exit(1);
+    }
+    if(++optind<argc){
+      usage();
+      exit(1);
+    }
+  }
+
+  /* start up Ogg stream synchronization layer */
+  ogg_sync_init(&oy);
+
+  /* init supporting Vorbis structures needed in header parsing */
+  /*vorbis_info_init(&vi);*/
+  /*vorbis_comment_init(&vc);*/
+
+  /* init supporting Theora structures needed in header parsing */
+  th_comment_init(&tc);
+  th_info_init(&ti);
+
+  /* Ogg file open; parse the headers */
+  /* Only interested in Vorbis/Theora streams */
+  while(!stateflag){
+    int ret=buffer_data(infile,&oy);
+    if(ret==0)break;
+    while(ogg_sync_pageout(&oy,&og)>0){
+      ogg_stream_state test;
+
+      /* is this a mandated initial header? If not, stop parsing */
+      if(!ogg_page_bos(&og)){
+        /* don't leak the page; get it into the appropriate stream */
+        queue_page(&og);
+        stateflag=1;
+        break;
+      }
+
+      ogg_stream_init(&test,ogg_page_serialno(&og));
+      ogg_stream_pagein(&test,&og);
+      ogg_stream_packetpeek(&test,&op);
+
+      /* identify the codec: try theora */
+      if(!theora_p && (theora_processing_headers=
+       th_decode_headerin(&ti,&tc,&ts,&op))>=0){
+        /* it is theora */
+        memcpy(&to,&test,sizeof(test));
+        theora_p=1;
+        /*Advance past the successfully processed header.*/
+        if(theora_processing_headers)ogg_stream_packetout(&to,NULL);
+      }else{
+        /* whatever it is, we don't care about it */
+        ogg_stream_clear(&test);
+      }
+    }
+    /* fall through to non-bos page parsing */
+  }
+
+  /* we're expecting more header packets. */
+  while(theora_p && theora_processing_headers){
+    int ret;
+
+    /* look for further theora headers */
+    while(theora_processing_headers&&(ret=ogg_stream_packetpeek(&to,&op))){
+      if(ret<0)continue;
+      theora_processing_headers=th_decode_headerin(&ti,&tc,&ts,&op);
+      if(theora_processing_headers<0){
+        printf("Error parsing Theora stream headers; corrupt stream?\n");
+        exit(1);
+      }
+      else if(theora_processing_headers>0){
+        /*Advance past the successfully processed header.*/
+        ogg_stream_packetout(&to,NULL);
+      }
+      theora_p++;
+    }
+
+    /*Stop now so we don't fail if there aren't enough pages in a short
+       stream.*/
+    if(!(theora_p && theora_processing_headers))break;
+
+    /* The header pages/packets will arrive before anything else we
+       care about, or the stream is not obeying spec */
+
+    if(ogg_sync_pageout(&oy,&og)>0){
+      queue_page(&og); /* demux into the appropriate stream */
+    }else{
+      int ret=buffer_data(infile,&oy); /* someone needs more data */
+      if(ret==0){
+        fprintf(stderr,"End of file while searching for codec headers.\n");
+        exit(1);
+      }
+    }
+  }
+
+  /* and now we have it all.  initialize decoders */
+  if(theora_p){
+    td=th_decode_alloc(&ti,ts);
+    fprintf(stderr,"Ogg logical stream %lx is Theora %dx%d %.02f fps video\nEncoded frame content is %dx%d with %dx%d offset\n",
+            to.serialno,ti.frame_width,ti.frame_height,
+            (double)ti.fps_numerator/ti.fps_denominator,
+            ti.pic_width, ti.pic_height, ti.pic_x, ti.pic_y);
+  }else{
+    /* tear down the partial theora setup */
+    th_info_clear(&ti);
+    th_comment_clear(&tc);
+  }
+  /*Either way, we're done with the codec setup data.*/
+  th_setup_free(ts);
+
+  /* open video */
+  if(theora_p)open_video();
+
+  if(!raw && outfile){
+    fprintf(outfile, "YUV4MPEG2 W%d H%d F%d:%d I%c A%d:%d\n",
+     ti.pic_width,ti.pic_height,ti.fps_numerator,ti.fps_denominator,'p',
+     ti.aspect_numerator,ti.aspect_denominator);
+  }
+
+  /* install signal handler */
+  signal (SIGINT, sigint_handler);
+
+  /* on to the main decode loop.*/
+
+  stateflag=0; /* playback has not begun */
+  /* queue any remaining pages from data we buffered but that did not
+      contain headers */
+  while(ogg_sync_pageout(&oy,&og)>0){
+    queue_page(&og);
+  }
+
+  if(fps_only){
+    ftime(&start);
+    ftime(&last);
+  }
+
+  while(!got_sigint){
+
+    while(theora_p && !videobuf_ready){
+      /* theora is one in, one out... */
+      if(ogg_stream_packetout(&to,&op)>0){
+
+        if(th_decode_packetin(td,&op,&videobuf_granulepos)>=0){
+          videobuf_time=th_granule_time(td,videobuf_granulepos);
+          videobuf_ready=1;
+          frames++;
+          if(fps_only)
+            ftime(&after);
+        }
+
+      }else
+        break;
+    }
+
+    if(fps_only && (videobuf_ready || fps_only==2)){
+      long ms =
+        after.time*1000.+after.millitm-
+        (last.time*1000.+last.millitm);
+
+      if(ms>500 || fps_only==1 ||
+         (feof(infile) && !videobuf_ready)){
+        float file_fps = (float)ti.fps_numerator/ti.fps_denominator;
+        fps_only=2;
+
+        ms = after.time*1000.+after.millitm-
+          (start.time*1000.+start.millitm);
+
+        fprintf(stderr,"\rframe:%d rate:%.2fx           ",
+                frames,
+                frames*1000./(ms*file_fps));
+        memcpy(&last,&after,sizeof(last));
+      }
+    }
+
+    if(!videobuf_ready  && feof(infile))break;
+
+    if(!videobuf_ready ){
+      /* no data yet for somebody.  Grab another page */
+      buffer_data(infile,&oy);
+      while(ogg_sync_pageout(&oy,&og)>0){
+        queue_page(&og);
+      }
+    }
+    /* dumpvideo frame, and get new one */
+    else video_write();
+
+    videobuf_ready=0;
+  }
+
+  /* close everything */
+
+  if(theora_p){
+    ogg_stream_clear(&to);
+    th_decode_free(td);
+    th_comment_clear(&tc);
+    th_info_clear(&ti);
+  }
+  ogg_sync_clear(&oy);
+
+  if(infile && infile!=stdin)fclose(infile);
+  if(outfile && outfile!=stdout)fclose(outfile);
+
+  fprintf(stderr, "\n\n%d frames\n", frames);
+  fprintf(stderr, "\nDone.\n");
+
+  return(0);
+
+}

Added: trunk/theora-exp/examples/encoder_example.c
===================================================================
--- trunk/theora-exp/examples/encoder_example.c	                        (rev 0)
+++ trunk/theora-exp/examples/encoder_example.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,1420 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function: example encoder application; makes an Ogg Theora/Vorbis
+            file from YUV4MPEG2 and WAV input
+  last mod: $Id: encoder_example.c,v 1.10 2004/03/24 19:12:42 derf Exp $
+
+ ********************************************************************/
+
+#if !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#if !defined(_GNU_SOURCE)
+#define _GNU_SOURCE
+#endif
+#if !defined(_LARGEFILE_SOURCE)
+#define _LARGEFILE_SOURCE
+#endif
+#if !defined(_LARGEFILE64_SOURCE)
+#define _LARGEFILE64_SOURCE
+#endif
+#if !defined(_FILE_OFFSET_BITS)
+#define _FILE_OFFSET_BITS 64
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <time.h>
+#include <math.h>
+#include "theora/theoraenc.h"
+#include "vorbis/codec.h"
+#include "vorbis/vorbisenc.h"
+
+#ifdef _WIN32
+/*supply missing headers and functions to Win32. going to hell, I know*/
+#include <fcntl.h>
+#include <io.h>
+
+static double rint(double x)
+{
+  if (x < 0.0)
+    return (double)(int)(x - 0.5);
+  else
+    return (double)(int)(x + 0.5);
+}
+#endif
+
+const char *optstring = "o:a:A:v:V:s:S:f:F:c";
+struct option options [] = {
+  {"output",required_argument,NULL,'o'},
+  {"audio-rate-target",required_argument,NULL,'A'},
+  {"video-rate-target",required_argument,NULL,'V'},
+  {"audio-quality",required_argument,NULL,'a'},
+  {"video-quality",required_argument,NULL,'v'},
+  {"aspect-numerator",optional_argument,NULL,'s'},
+  {"aspect-denominator",optional_argument,NULL,'S'},
+  {"framerate-numerator",optional_argument,NULL,'f'},
+  {"framerate-denominator",optional_argument,NULL,'F'},
+  {"vp3-compatible",0,NULL,'c'},
+  {NULL,0,NULL,0}
+};
+
+/* You'll go to Hell for using globals. */
+
+FILE *audio=NULL;
+FILE *video=NULL;
+
+int audio_ch=0;
+int audio_hz=0;
+
+float audio_q=.1F;
+int audio_r=-1;
+int vp3_compatible=0;
+
+int frame_w=0;
+int frame_h=0;
+int pic_w=0;
+int pic_h=0;
+int pic_x=0;
+int pic_y=0;
+int video_fps_n=-1;
+int video_fps_d=-1;
+int video_par_n=-1;
+int video_par_d=-1;
+char interlace;
+int src_c_dec_h=2;
+int src_c_dec_v=2;
+int dst_c_dec_h=2;
+int dst_c_dec_v=2;
+char chroma_type[16];
+
+/*The size of each converted frame buffer.*/
+size_t y4m_dst_buf_sz;
+/*The amount to read directly into the converted frame buffer.*/
+size_t y4m_dst_buf_read_sz;
+/*The size of the auxilliary buffer.*/
+size_t y4m_aux_buf_sz;
+/*The amount to read into the auxilliary buffer.*/
+size_t y4m_aux_buf_read_sz;
+
+/*The function used perform chroma conversion.*/
+typedef void (*y4m_convert_func)(unsigned char *_dst,unsigned char *_aux);
+
+y4m_convert_func y4m_convert=NULL;
+
+int video_r=-1;
+int video_q=48;
+
+static void usage(void){
+  fprintf(stderr,
+          "Usage: encoder_example [options] [audio_file] video_file\n\n"
+          "Options: \n\n"
+          "  -o --output <filename.ogv>     file name for encoded output;\n"
+          "                                 If this option is not given, the\n"
+          "                                 compressed data is sent to stdout.\n\n"
+          "  -A --audio-rate-target <n>     bitrate target for Vorbis audio;\n"
+          "                                 use -a and not -A if at all possible,\n"
+          "                                 as -a gives higher quality for a given\n"
+          "                                 bitrate.\n\n"
+          "  -V --video-rate-target <n>     bitrate target for Theora video\n\n"
+          "  -a --audio-quality <n>         Vorbis quality selector from -1 to 10\n"
+          "                                 (-1 yields smallest files but lowest\n"
+          "                                 fidelity; 10 yields highest fidelity\n"
+          "                                 but large files. '2' is a reasonable\n"
+          "                                 default).\n\n"
+          "   -v --video-quality <n>        Theora quality selector fro 0 to 10\n"
+          "                                 (0 yields smallest files but lowest\n"
+          "                                 video quality. 10 yields highest\n"
+          "                                 fidelity but large files).\n\n"
+          "   -s --aspect-numerator <n>     Aspect ratio numerator, default is 0\n"
+          "                                 or extracted from YUV input file\n"
+          "   -S --aspect-denominator <n>   Aspect ratio denominator, default is 0\n"
+          "                                 or extracted from YUV input file\n"
+          "   -f --framerate-numerator <n>  Frame rate numerator, can be extracted\n"
+          "                                 from YUV input file. ex: 30000000\n"
+          "   -F --framerate-denominator <n>Frame rate denominator, can be extracted\n"
+          "                                 from YUV input file. ex: 1000000\n"
+          "                                 The frame rate nominator divided by this\n"
+          "                                 determinates the frame rate in units per tick\n"
+          "encoder_example accepts only uncompressed RIFF WAV format audio and\n"
+          "YUV4MPEG2 uncompressed video.\n\n");
+  exit(1);
+}
+
+static int y4m_parse_tags(char *_tags){
+  int   got_w;
+  int   got_h;
+  int   got_fps;
+  int   got_interlace;
+  int   got_par;
+  int   got_chroma;
+  int   tmp_video_fps_n;
+  int   tmp_video_fps_d;
+  int   tmp_video_par_n;
+  int   tmp_video_par_d;
+  char *p;
+  char *q;
+  got_w=got_h=got_fps=got_interlace=got_par=got_chroma=0;
+  for(p=_tags;;p=q){
+    /*Skip any leading spaces.*/
+    while(*p==' ')p++;
+    /*If that's all we have, stop.*/
+    if(p[0]=='\0')break;
+    /*Find the end of this tag.*/
+    for(q=p+1;*q!='\0'&&*q!=' ';q++);
+    /*Process the tag.*/
+    switch(p[0]){
+      case 'W':{
+        if(sscanf(p+1,"%d",&pic_w)!=1)return -1;
+        got_w=1;
+      }break;
+      case 'H':{
+        if(sscanf(p+1,"%d",&pic_h)!=1)return -1;
+        got_h=1;
+      }break;
+      case 'F':{
+        if(sscanf(p+1,"%d:%d",&tmp_video_fps_n,&tmp_video_fps_d)!=2)return -1;
+        got_fps=1;
+      }break;
+      case 'I':{
+        interlace=p[1];
+        got_interlace=1;
+      }break;
+      case 'A':{
+        if(sscanf(p+1,"%d:%d",&tmp_video_par_n,&tmp_video_par_d)!=2)return -1;
+        got_par=1;
+      }break;
+      case 'C':{
+        if(q-p>16)return -1;
+        memcpy(chroma_type,p+1,q-p-1);
+        chroma_type[q-p-1]='\0';
+        got_chroma=1;
+      }break;
+      /*Ignore unknown tags.*/
+    }
+  }
+  if(!got_w||!got_h||!got_fps||!got_interlace||!got_par)return -1;
+  /*Chroma-type is not specified in older files, e.g., those generated by
+     mplayer.*/
+  if(!got_chroma)strcpy(chroma_type,"420");
+  /*Update fps and aspect ratio globals if not specified in the command line.*/
+  if(video_fps_n==-1)video_fps_n=tmp_video_fps_n;
+  if(video_fps_d==-1)video_fps_d=tmp_video_fps_d;
+  if(video_par_n==-1)video_par_n=tmp_video_par_n;
+  if(video_par_d==-1)video_par_d=tmp_video_par_d;
+  return 0;
+}
+
+/*All anti-aliasing filters in the following conversion functions are based on
+   one of two window functions:
+  The 6-tap Lanczos window (for down-sampling and shifts):
+   sinc(\pi*t)*sinc(\pi*t/3), |t|<3  (sinc(t)==sin(t)/t)
+   0,                         |t|>=3
+  The 4-tap Mitchell window (for up-sampling):
+   7|t|^3-12|t|^2+16/3,             |t|<1
+   -(7/3)|x|^3+12|x|^2-20|x|+32/3,  |t|<2
+   0,                               |t|>=2
+  The number of taps is intentionally kept small to reduce computational
+   overhead and limit ringing.
+
+  The taps from these filters are scaled so that their sum is 1, and the result
+   is scaled by 128 and rounded to integers to create a filter whose
+   intermediate values fit inside 16 bits.
+  Coefficients are rounded in such a way as to ensure their sum is still 128,
+   which is usually equivalent to normal rounding.*/
+
+#define OC_MINI(_a,_b)      ((_a)>(_b)?(_b):(_a))
+#define OC_MAXI(_a,_b)      ((_a)<(_b)?(_b):(_a))
+#define OC_CLAMPI(_a,_b,_c) (OC_MAXI(_a,OC_MINI(_b,_c)))
+
+/*420jpeg chroma samples are sited like:
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |   BR  |       |   BR  |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |   BR  |       |   BR  |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+
+  420mpeg2 chroma samples are sited like:
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  BR      |       BR      |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  BR      |       BR      |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+
+  We use a resampling filter to shift the site locations one quarter pixel (at
+   the chroma plane's resolution) to the right.
+  The 4:2:2 modes look exactly the same, except there are twice as many chroma
+   lines, and they are vertically co-sited with the luma samples in both the
+   mpeg2 and jpeg cases (thus requiring no vertical resampling).*/
+static void y4m_convert_42xmpeg2_42xjpeg(unsigned char *_dst,
+ unsigned char *_aux){
+  int c_w;
+  int c_h;
+  int pli;
+  int y;
+  int x;
+  /*Skip past the luma data.*/
+  _dst+=pic_w*pic_h;
+  /*Compute the size of each chroma plane.*/
+  c_w=(pic_w+dst_c_dec_h-1)/dst_c_dec_h;
+  c_h=(pic_h+dst_c_dec_v-1)/dst_c_dec_v;
+  for(pli=1;pli<3;pli++){
+    for(y=0;y<c_h;y++){
+      /*Filter: [4 -17 114 35 -9 1]/128, derived from a 6-tap Lanczos
+         window.*/
+      for(x=0;x<OC_MINI(c_w,2);x++){
+        _dst[x]=(unsigned char)OC_CLAMPI(0,4*_aux[0]-17*_aux[OC_MAXI(x-1,0)]+
+         114*_aux[x]+35*_aux[OC_MINI(x+1,c_w-1)]-9*_aux[OC_MINI(x+2,c_w-1)]+
+         _aux[OC_MINI(x+3,c_w-1)]+64>>7,255);
+      }
+      for(;x<c_w-3;x++){
+        _dst[x]=(unsigned char)OC_CLAMPI(0,4*_aux[x-2]-17*_aux[x-1]+
+         114*_aux[x]+35*_aux[x+1]-9*_aux[x+2]+_aux[x+3]+64>>7,255);
+      }
+      for(;x<c_w;x++){
+        _dst[x]=(unsigned char)OC_CLAMPI(0,4*_aux[x-2]-17*_aux[x-1]+
+         114*_aux[x]+35*_aux[OC_MINI(x+1,c_w-1)]-9*_aux[OC_MINI(x+2,c_w-1)]+
+         _aux[c_w-1]+64>>7,255);
+      }
+      _dst+=c_w;
+      _aux+=c_w;
+    }
+  }
+}
+
+/*This format is only used for interlaced content, but is included for
+   completeness.
+
+  420jpeg chroma samples are sited like:
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |   BR  |       |   BR  |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |   BR  |       |   BR  |
+  |       |       |       |
+  Y-------Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+
+  420paldv chroma samples are sited like:
+  YR------Y-------YR------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  YB------Y-------YB------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  YR------Y-------YR------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  YB------Y-------YB------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+
+  We use a resampling filter to shift the site locations one quarter pixel (at
+   the chroma plane's resolution) to the right.
+  Then we use another filter to move the C_r location down one quarter pixel,
+   and the C_b location up one quarter pixel.*/
+static void y4m_convert_42xpaldv_42xjpeg(unsigned char *_dst,
+ unsigned char *_aux){
+  unsigned char *tmp;
+  int            c_w;
+  int            c_h;
+  int            c_sz;
+  int            pli;
+  int            y;
+  int            x;
+  /*Skip past the luma data.*/
+  _dst+=pic_w*pic_h;
+  /*Compute the size of each chroma plane.*/
+  c_w=(pic_w+1)/2;
+  c_h=(pic_h+dst_c_dec_h-1)/dst_c_dec_h;
+  c_sz=c_w*c_h;
+  /*First do the horizontal re-sampling.
+    This is the same as the mpeg2 case, except that after the horizontal case,
+     we need to apply a second vertical filter.*/
+  tmp=_aux+2*c_sz;
+  for(pli=1;pli<3;pli++){
+    for(y=0;y<c_h;y++){
+      /*Filter: [4 -17 114 35 -9 1]/128, derived from a 6-tap Lanczos
+         window.*/
+      for(x=0;x<OC_MINI(c_w,2);x++){
+        tmp[x]=(unsigned char)OC_CLAMPI(0,4*_aux[0]-17*_aux[OC_MAXI(x-1,0)]+
+         114*_aux[x]+35*_aux[OC_MINI(x+1,c_w-1)]-9*_aux[OC_MINI(x+2,c_w-1)]+
+         _aux[OC_MINI(x+3,c_w-1)]+64>>7,255);
+      }
+      for(;x<c_w-3;x++){
+        tmp[x]=(unsigned char)OC_CLAMPI(0,4*_aux[x-2]-17*_aux[x-1]+
+         114*_aux[x]+35*_aux[x+1]-9*_aux[x+2]+_aux[x+3]+64>>7,255);
+      }
+      for(;x<c_w;x++){
+        tmp[x]=(unsigned char)OC_CLAMPI(0,4*_aux[x-2]-17*_aux[x-1]+
+         114*_aux[x]+35*_aux[OC_MINI(x+1,c_w-1)]-9*_aux[OC_MINI(x+2,c_w-1)]+
+         _aux[c_w-1]+64>>7,255);
+      }
+      tmp+=c_w;
+      _aux+=c_w;
+    }
+    switch(pli){
+      case 1:{
+        tmp-=c_sz;
+        /*Slide C_b up a quarter-pel.
+          This is the same filter used above, but in the other order.*/
+        for(x=0;x<c_w;x++){
+          for(y=0;y<OC_MINI(c_h,3);y++){
+            _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,tmp[0]-
+             9*tmp[OC_MAXI(y-2,0)*c_w]+35*tmp[OC_MAXI(y-1,0)*c_w]+
+             114*tmp[y*c_w]-17*tmp[OC_MINI(y+1,c_h-1)*c_w]+
+             4*tmp[OC_MINI(y+2,c_h-1)*c_w]+64>>7,255);
+          }
+          for(;y<c_h-2;y++){
+            _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,tmp[(y-3)*c_w]-
+             9*tmp[(y-2)*c_w]+35*tmp[(y-1)*c_w]+114*tmp[y*c_w]-
+             17*tmp[(y+1)*c_w]+4*tmp[(y+2)*c_w]+64>>7,255);
+          }
+          for(;y<c_h;y++){
+            _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,tmp[(y-3)*c_w]-
+             9*tmp[(y-2)*c_w]+35*tmp[(y-1)*c_w]+114*tmp[y*c_w]-
+             17*tmp[OC_MINI(y+1,c_h-1)*c_w]+4*tmp[(c_h-1)*c_w]+64>>7,255);
+          }
+          _dst++;
+          tmp++;
+        }
+        _dst+=c_sz-c_w;
+        tmp-=c_w;
+      }break;
+      case 2:{
+        tmp-=c_sz;
+        /*Slide C_r down a quarter-pel.
+          This is the same as the horizontal filter.*/
+        for(x=0;x<c_w;x++){
+          for(y=0;y<OC_MINI(c_h,2);y++){
+            _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,4*tmp[0]-
+             17*tmp[OC_MAXI(y-1,0)*c_w]+114*tmp[y*c_w]+
+             35*tmp[OC_MINI(y+1,c_h-1)*c_w]-9*tmp[OC_MINI(y+2,c_h-1)*c_w]+
+             tmp[OC_MINI(y+3,c_h-1)*c_w]+64>>7,255);
+          }
+          for(;y<c_h-3;y++){
+            _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,4*tmp[(y-2)*c_w]-
+             17*tmp[(y-1)*c_w]+114*tmp[y*c_w]+35*tmp[(y+1)*c_w]-
+             9*tmp[(y+2)*c_w]+tmp[(y+3)*c_w]+64>>7,255);
+          }
+          for(;y<c_h;y++){
+            _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,4*tmp[(y-2)*c_w]-
+             17*tmp[(y-1)*c_w]+114*tmp[y*c_w]+35*tmp[OC_MINI(y+1,c_h-1)*c_w]-
+             9*tmp[OC_MINI(y+2,c_h-1)*c_w]+tmp[(c_h-1)*c_w]+64>>7,255);
+          }
+          _dst++;
+          tmp++;
+        }
+      }break;
+    }
+    /*For actual interlaced material, this would have to be done separately on
+       each field, and the shift amounts would be different.
+      C_r moves down 1/8, C_b up 3/8 in the top field, and C_r moves down 3/8,
+       C_b up 1/8 in the bottom field.
+      The corresponding filters would be:
+       Down 1/8 (reverse order for up): [3 -11 125 15 -4 0]/128
+       Down 3/8 (reverse order for up): [4 -19 98 56 -13 2]/128*/
+  }
+}
+
+/*422jpeg chroma samples are sited like:
+  Y---BR--Y-------Y---BR--Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  Y---BR--Y-------Y---BR--Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  Y---BR--Y-------Y---BR--Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  Y---BR--Y-------Y---BR--Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+
+  411 chroma samples are sited like:
+  YBR-----Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  YBR-----Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  YBR-----Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+  YBR-----Y-------Y-------Y-------
+  |       |       |       |
+  |       |       |       |
+  |       |       |       |
+
+  We use a filter to resample at site locations one eighth pixel (at the source
+   chroma plane's horizontal resolution) and five eighths of a pixel to the
+   right.*/
+static void y4m_convert_411_422jpeg(unsigned char *_dst,
+ unsigned char *_aux){
+  int c_w;
+  int dst_c_w;
+  int c_h;
+  int pli;
+  int y;
+  int x;
+  /*Skip past the luma data.*/
+  _dst+=pic_w*pic_h;
+  /*Compute the size of each chroma plane.*/
+  c_w=(pic_w+src_c_dec_h-1)/src_c_dec_h;
+  dst_c_w=(pic_w+dst_c_dec_h-1)/dst_c_dec_h;
+  c_h=(pic_h+dst_c_dec_v-1)/dst_c_dec_v;
+  for(pli=1;pli<3;pli++){
+    for(y=0;y<c_h;y++){
+      /*Filters: [1 110 18 -1]/128 and [-3 50 86 -5]/128, both derived from a
+         4-tap Mitchell window.*/
+      for(x=0;x<OC_MINI(c_w,1);x++){
+        _dst[x<<1]=(unsigned char)OC_CLAMPI(0,111*_aux[0]+
+         18*_aux[OC_MINI(1,c_w-1)]-_aux[OC_MINI(2,c_w-1)]+64>>7,255);
+        _dst[x<<1|1]=(unsigned char)OC_CLAMPI(0,47*_aux[0]+
+         86*_aux[OC_MINI(1,c_w-1)]-5*_aux[OC_MINI(2,c_w-1)]+64>>7,255);
+      }
+      for(;x<c_w-2;x++){
+        _dst[x<<1]=(unsigned char)OC_CLAMPI(0,_aux[x-1]+110*_aux[x]+
+         18*_aux[x+1]-_aux[x+2]+64>>7,255);
+        _dst[x<<1|1]=(unsigned char)OC_CLAMPI(0,-3*_aux[x-1]+50*_aux[x]+
+         86*_aux[x+1]-5*_aux[x+2]+64>>7,255);
+      }
+      for(;x<c_w;x++){
+        _dst[x<<1]=(unsigned char)OC_CLAMPI(0,_aux[x-1]+110*_aux[x]+
+         18*_aux[OC_MINI(x+1,c_w-1)]-_aux[c_w-1]+64>>7,255);
+        if((x<<1|1)<dst_c_w){
+          _dst[x<<1|1]=(unsigned char)OC_CLAMPI(0,-3*_aux[x-1]+50*_aux[x]+
+           86*_aux[OC_MINI(x+1,c_w-1)]-5*_aux[c_w-1]+64>>7,255);
+        }
+      }
+      _dst+=dst_c_w;
+      _aux+=c_w;
+    }
+  }
+}
+
+/*The image is padded with empty chroma components at 4:2:0.
+  This costs about 17 bits a frame to code.*/
+static void y4m_convert_mono_420jpeg(unsigned char *_dst,
+ unsigned char *_aux){
+  int c_sz;
+  _dst+=pic_w*pic_h;
+  c_sz=((pic_w+dst_c_dec_h-1)/dst_c_dec_h)*((pic_h+dst_c_dec_v-1)/dst_c_dec_v);
+  memset(_dst,128,c_sz*2);
+}
+
+#if 0
+/*Right now just 444 to 420.
+  Not too hard to generalize.*/
+static void y4m_convert_4xxjpeg_42xjpeg(unsigned char *_dst,
+ unsigned char *_aux){
+  unsigned char *tmp;
+  int            c_w;
+  int            c_h;
+  int            pic_sz;
+  int            tmp_sz;
+  int            c_sz;
+  int            pli;
+  int            y;
+  int            x;
+  /*Compute the size of each chroma plane.*/
+  c_w=(pic_w+dst_c_dec_h-1)/dst_c_dec_h;
+  c_h=(pic_h+dst_c_dec_v-1)/dst_c_dec_v;
+  pic_sz=pic_w*pic_h;
+  tmp_sz=c_w*pic_h;
+  c_sz=c_w*c_h;
+  _dst+=pic_sz;
+  for(pli=1;pli<3;pli++){
+    tmp=_aux+pic_sz;
+    /*In reality, the horizontal and vertical steps could be pipelined, for
+       less memory consumption and better cache performance, but we do them
+       separately for simplicity.*/
+    /*First do horizontal filtering (convert to 4:2:2)*/
+    /*Filter: [3 -17 78 78 -17 3]/128, derived from a 6-tap Lanczos window.*/
+    for(y=0;y<pic_h;y++){
+      for(x=0;x<OC_MINI(pic_w,2);x+=2){
+        tmp[x>>1]=OC_CLAMPI(0,64*_aux[0]+78*_aux[OC_MINI(1,pic_w-1)]-
+         17*_aux[OC_MINI(2,pic_w-1)]+3*_aux[OC_MINI(3,pic_w-1)]+64>>7,255);
+      }
+      for(;x<pic_w-3;x+=2){
+        tmp[x>>1]=OC_CLAMPI(0,3*(_aux[x-2]+_aux[x+3])-17*(_aux[x-1]+_aux[x+2])+
+         78*(_aux[x]+_aux[x+1])+64>>7,255);
+      }
+      for(;x<pic_w;x+=2){
+        tmp[x>>1]=OC_CLAMPI(0,3*(_aux[x-2]+_aux[pic_w-1])-
+         17*(_aux[x-1]+_aux[OC_MINI(x+2,pic_w-1)])+
+         78*(_aux[x]+_aux[OC_MINI(x+1,pic_w-1)])+64>>7,255);
+      }
+      tmp+=c_w;
+      _aux+=pic_w;
+    }
+    _aux-=pic_sz;
+    tmp-=tmp_sz;
+    /*Now do the vertical filtering.*/
+    for(x=0;x<c_w;x++){
+      for(y=0;y<OC_MINI(pic_h,2);y+=2){
+        _dst[(y>>1)*c_w]=OC_CLAMPI(0,64*tmp[0]+78*tmp[OC_MINI(1,pic_h-1)*c_w]-
+         17*tmp[OC_MINI(2,pic_h-1)*c_w]+3*tmp[OC_MINI(3,pic_h-1)*c_w]+
+         64>>7,255);
+      }
+      for(;y<pic_h-3;y+=2){
+        _dst[(y>>1)*c_w]=OC_CLAMPI(0,3*(tmp[(y-2)*c_w]+tmp[(y+3)*c_w])-
+         17*(tmp[(y-1)*c_w]+tmp[(y+2)*c_w])+78*(tmp[y*c_w]+tmp[(y+1)*c_w])+
+         64>>7,255);
+      }
+      for(;y<pic_h;y+=2){
+        _dst[(y>>1)*c_w]=OC_CLAMPI(0,3*(tmp[(y-2)*c_w]+tmp[(pic_h-1)*c_w])-
+         17*(tmp[(y-1)*c_w]+tmp[OC_MINI(y+2,pic_h-1)*c_w])+
+         78*(tmp[y*c_w]+tmp[OC_MINI(y+1,pic_h-1)*c_w])+64>>7,255);
+      }
+      tmp++;
+      _dst++;
+    }
+    _dst-=c_w;
+  }
+}
+#endif
+
+
+/*No conversion function needed.*/
+static void y4m_convert_null(unsigned char *_dst,
+ unsigned char *_aux){
+}
+
+static void id_file(char *f){
+  FILE *test;
+  unsigned char buffer[80];
+  int ret;
+
+  /* open it, look for magic */
+
+  if(!strcmp(f,"-")){
+    /* stdin */
+    test=stdin;
+  }else{
+    test=fopen(f,"rb");
+    if(!test){
+      fprintf(stderr,"Unable to open file %s.\n",f);
+      exit(1);
+    }
+  }
+
+  ret=fread(buffer,1,4,test);
+  if(ret<4){
+    fprintf(stderr,"EOF determining file type of file %s.\n",f);
+    exit(1);
+  }
+
+  if(!memcmp(buffer,"RIFF",4)){
+    /* possible WAV file */
+
+    if(audio){
+      /* umm, we already have one */
+      fprintf(stderr,"Multiple RIFF WAVE files specified on command line.\n");
+      exit(1);
+    }
+
+    /* Parse the rest of the header */
+
+    ret=fread(buffer,1,4,test);
+    ret=fread(buffer,1,4,test);
+    if(ret<4)goto riff_err;
+    if(!memcmp(buffer,"WAVE",4)){
+
+      while(!feof(test)){
+        ret=fread(buffer,1,4,test);
+        if(ret<4)goto riff_err;
+        if(!memcmp("fmt",buffer,3)){
+
+          /* OK, this is our audio specs chunk.  Slurp it up. */
+
+          ret=fread(buffer,1,20,test);
+          if(ret<20)goto riff_err;
+
+          if(memcmp(buffer+4,"\001\000",2)){
+            fprintf(stderr,"The WAV file %s is in a compressed format; "
+                    "can't read it.\n",f);
+            exit(1);
+          }
+
+          audio=test;
+          audio_ch=buffer[6]+(buffer[7]<<8);
+          audio_hz=buffer[8]+(buffer[9]<<8)+
+            (buffer[10]<<16)+(buffer[11]<<24);
+
+          if(buffer[18]+(buffer[19]<<8)!=16){
+            fprintf(stderr,"Can only read 16 bit WAV files for now.\n");
+            exit(1);
+          }
+
+          /* Now, align things to the beginning of the data */
+          /* Look for 'dataxxxx' */
+          while(!feof(test)){
+            ret=fread(buffer,1,4,test);
+            if(ret<4)goto riff_err;
+            if(!memcmp("data",buffer,4)){
+              /* We're there.  Ignore the declared size for now. */
+              ret=fread(buffer,1,4,test);
+              if(ret<4)goto riff_err;
+
+              fprintf(stderr,"File %s is 16 bit %d channel %d Hz RIFF WAV audio.\n",
+                      f,audio_ch,audio_hz);
+
+              return;
+            }
+          }
+        }
+      }
+    }
+
+    fprintf(stderr,"Couldn't find WAVE data in RIFF file %s.\n",f);
+    exit(1);
+
+  }
+  if(!memcmp(buffer,"YUV4",4)){
+    /* possible YUV2MPEG2 format file */
+    /* read until newline, or 80 cols, whichever happens first */
+    int i;
+    for(i=0;i<79;i++){
+      ret=fread(buffer+i,1,1,test);
+      if(ret<1)goto yuv_err;
+      if(buffer[i]=='\n')break;
+    }
+    if(i==79){
+      fprintf(stderr,"Error parsing %s header; not a YUV2MPEG2 file?\n",f);
+    }
+    buffer[i]='\0';
+
+    if(!memcmp(buffer,"MPEG",4)){
+
+      if(video){
+        /* umm, we already have one */
+        fprintf(stderr,"Multiple video files specified on command line.\n");
+        exit(1);
+      }
+
+      if(buffer[4]!='2'){
+        fprintf(stderr,"Incorrect YUV input file version; YUV4MPEG2 required.\n");
+      }
+
+      ret=y4m_parse_tags((char *)buffer+5);
+      if(ret<0){
+        fprintf(stderr,"Error parsing YUV4MPEG2 header in file %s.\n",f);
+        exit(1);
+      }
+
+      if(interlace!='p'){
+        fprintf(stderr,"Input video is interlaced; Theora handles only progressive scan\n");
+        exit(1);
+      }
+
+      if(strcmp(chroma_type,"420")==0||strcmp(chroma_type,"420jpeg")==0){
+        src_c_dec_h=dst_c_dec_h=src_c_dec_v=dst_c_dec_v=2;
+        y4m_dst_buf_read_sz=pic_w*pic_h+2*((pic_w+1)/2)*((pic_h+1)/2);
+        y4m_aux_buf_sz=y4m_aux_buf_read_sz=0;
+        y4m_convert=y4m_convert_null;
+      }
+      else if(strcmp(chroma_type,"420mpeg2")==0){
+        src_c_dec_h=dst_c_dec_h=src_c_dec_v=dst_c_dec_v=2;
+        y4m_dst_buf_read_sz=pic_w*pic_h;
+        /*Chroma filter required: read into the aux buf first.*/
+        y4m_aux_buf_sz=y4m_aux_buf_read_sz=2*((pic_w+1)/2)*((pic_h+1)/2);
+        y4m_convert=y4m_convert_42xmpeg2_42xjpeg;
+      }
+      else if(strcmp(chroma_type,"420paldv")==0){
+        src_c_dec_h=dst_c_dec_h=src_c_dec_v=dst_c_dec_v=2;
+        y4m_dst_buf_read_sz=pic_w*pic_h;
+        /*Chroma filter required: read into the aux buf first.
+          We need to make two filter passes, so we need some extra space in the
+           aux buffer.*/
+        y4m_aux_buf_sz=3*((pic_w+1)/2)*((pic_h+1)/2);
+        y4m_aux_buf_read_sz=2*((pic_w+1)/2)*((pic_h+1)/2);
+        y4m_convert=y4m_convert_42xpaldv_42xjpeg;
+      }
+      else if(strcmp(chroma_type,"422")==0){
+        src_c_dec_h=dst_c_dec_h=2;
+        src_c_dec_v=dst_c_dec_v=1;
+        y4m_dst_buf_read_sz=pic_w*pic_h;
+        /*Chroma filter required: read into the aux buf first.*/
+        y4m_aux_buf_sz=y4m_aux_buf_read_sz=2*((pic_w+1)/2)*pic_h;
+        y4m_convert=y4m_convert_42xmpeg2_42xjpeg;
+      }
+      else if(strcmp(chroma_type,"411")==0){
+        src_c_dec_h=4;
+        /*We don't want to introduce any additional sub-sampling, so we
+           promote 4:1:1 material to 4:2:2, as the closest format Theora can
+           handle.*/
+        dst_c_dec_h=2;
+        src_c_dec_v=dst_c_dec_v=1;
+        y4m_dst_buf_read_sz=pic_w*pic_h;
+        /*Chroma filter required: read into the aux buf first.*/
+        y4m_aux_buf_sz=y4m_aux_buf_read_sz=2*((pic_w+3)/4)*pic_h;
+        y4m_convert=y4m_convert_411_422jpeg;
+      }
+      else if(strcmp(chroma_type,"444")==0){
+        src_c_dec_h=dst_c_dec_h=src_c_dec_v=dst_c_dec_v=1;
+        y4m_dst_buf_read_sz=pic_w*pic_h*3;
+        y4m_aux_buf_sz=y4m_aux_buf_read_sz=0;
+        y4m_convert=y4m_convert_null;
+      }
+      else if(strcmp(chroma_type,"444alpha")==0){
+        src_c_dec_h=dst_c_dec_h=src_c_dec_v=dst_c_dec_v=1;
+        y4m_dst_buf_read_sz=pic_w*pic_h*3;
+        /*Read the extra alpha plane into the aux buf.
+          It will be discarded.*/
+        y4m_aux_buf_sz=y4m_aux_buf_read_sz=pic_w*pic_h;
+        y4m_convert=y4m_convert_null;
+      }
+      else if(strcmp(chroma_type,"mono")==0){
+        src_c_dec_h=src_c_dec_v=0;
+        dst_c_dec_h=dst_c_dec_v=2;
+        y4m_dst_buf_read_sz=pic_w*pic_h;
+        y4m_aux_buf_sz=y4m_aux_buf_read_sz=0;
+        y4m_convert=y4m_convert_mono_420jpeg;
+      }
+      else{
+        fprintf(stderr,"Unknown chroma sampling type: %s\n",chroma_type);
+        exit(1);
+      }
+      /*The size of the final frame buffers is always computed from the
+         destination chroma decimation type.*/
+      y4m_dst_buf_sz=pic_w*pic_h+2*((pic_w+dst_c_dec_h-1)/dst_c_dec_h)*
+       ((pic_h+dst_c_dec_v-1)/dst_c_dec_v);
+
+      video=test;
+
+      fprintf(stderr,"File %s is %dx%d %.02f fps %s video.\n",
+              f,pic_w,pic_h,(double)video_fps_n/video_fps_d,chroma_type);
+
+      return;
+    }
+  }
+  fprintf(stderr,"Input file %s is neither a WAV nor YUV4MPEG2 file.\n",f);
+  exit(1);
+
+ riff_err:
+  fprintf(stderr,"EOF parsing RIFF file %s.\n",f);
+  exit(1);
+ yuv_err:
+  fprintf(stderr,"EOF parsing YUV4MPEG2 file %s.\n",f);
+  exit(1);
+
+}
+
+int spinner=0;
+char *spinascii="|/-\\";
+void spinnit(void){
+  spinner++;
+  if(spinner==4)spinner=0;
+  fprintf(stderr,"\r%c",spinascii[spinner]);
+}
+
+int fetch_and_process_audio(FILE *audio,ogg_page *audiopage,
+                            ogg_stream_state *vo,
+                            vorbis_dsp_state *vd,
+                            vorbis_block *vb,
+                            int audioflag){
+  ogg_packet op;
+  int i,j;
+
+  while(audio && !audioflag){
+    /* process any audio already buffered */
+    spinnit();
+    if(ogg_stream_pageout(vo,audiopage)>0) return 1;
+    if(ogg_stream_eos(vo))return 0;
+
+    {
+      /* read and process more audio */
+      signed char readbuffer[4096];
+      int toread=4096/2/audio_ch;
+      int bytesread=fread(readbuffer,1,toread*2*audio_ch,audio);
+      int sampread=bytesread/2/audio_ch;
+      float **vorbis_buffer;
+      int count=0;
+
+      if(bytesread<=0){
+        /* end of file.  this can be done implicitly, but it's
+           easier to see here in non-clever fashion.  Tell the
+           library we're at end of stream so that it can handle the
+           last frame and mark end of stream in the output properly */
+        vorbis_analysis_wrote(vd,0);
+      }else{
+        vorbis_buffer=vorbis_analysis_buffer(vd,sampread);
+        /* uninterleave samples */
+        for(i=0;i<sampread;i++){
+          for(j=0;j<audio_ch;j++){
+            vorbis_buffer[j][i]=((readbuffer[count+1]<<8)|
+                                 (0x00ff&(int)readbuffer[count]))/32768.f;
+            count+=2;
+          }
+        }
+        
+        vorbis_analysis_wrote(vd,sampread);
+        
+      }
+
+      while(vorbis_analysis_blockout(vd,vb)==1){
+        
+        /* analysis, assume we want to use bitrate management */
+        vorbis_analysis(vb,NULL);
+        vorbis_bitrate_addblock(vb);
+        
+        /* weld packets into the bitstream */
+        while(vorbis_bitrate_flushpacket(vd,&op))
+          ogg_stream_packetin(vo,&op);
+        
+      }
+    }
+  }
+
+  return audioflag;
+}
+
+int fetch_and_process_video(FILE *video,ogg_page *videopage,
+                            ogg_stream_state *to,
+                            th_enc_ctx *td,
+                            int videoflag){
+  /* You'll go to Hell for using static variables */
+  static int                 state=-1;
+  static unsigned char      *yuvframe[3];
+  static th_ycbcr_buffer     ycbcr;
+  ogg_packet                 op;
+  int                        pic_sz;
+  int                        frame_c_w;
+  int                        frame_c_h;
+  int                        c_w;
+  int                        c_h;
+  int                        c_sz;
+  int                        i;
+
+  pic_sz=pic_w*pic_h;
+  frame_c_w=frame_w/dst_c_dec_h;
+  frame_c_h=frame_h/dst_c_dec_v;
+  c_w=(pic_w+dst_c_dec_h-1)/dst_c_dec_h;
+  c_h=(pic_h+dst_c_dec_v-1)/dst_c_dec_v;
+  c_sz=c_w*c_h;
+
+  if(state==-1){
+        /* initialize the double frame buffer */
+    yuvframe[0]=(unsigned char *)malloc(y4m_dst_buf_sz);
+    yuvframe[1]=(unsigned char *)malloc(y4m_dst_buf_sz);
+    yuvframe[2]=(unsigned char *)malloc(y4m_aux_buf_sz);
+
+    state=0;
+  }
+
+  /* is there a video page flushed?  If not, work until there is. */
+  while(!videoflag){
+    spinnit();
+
+    if(ogg_stream_pageout(to,videopage)>0) return 1;
+    if(ogg_stream_eos(to)) return 0;
+
+    {
+      /* read and process more video */
+      /* video strategy reads one frame ahead so we know when we're
+         at end of stream and can mark last video frame as such
+         (vorbis audio has to flush one frame past last video frame
+         due to overlap and thus doesn't need this extra work */
+
+      /* have two frame buffers full (if possible) before
+         proceeding.  after first pass and until eos, one will
+         always be full when we get here */
+
+      for(i=state;i<2;i++){
+        char c,frame[6];
+        int ret=fread(frame,1,6,video);
+
+        /* match and skip the frame header */
+        if(ret<6)break;
+        if(memcmp(frame,"FRAME",5)){
+          fprintf(stderr,"Loss of framing in YUV input data\n");
+          exit(1);
+        }
+        if(frame[5]!='\n'){
+          int j;
+          for(j=0;j<79;j++)
+            if(fread(&c,1,1,video)&&c=='\n')break;
+          if(j==79){
+            fprintf(stderr,"Error parsing YUV frame header\n");
+            exit(1);
+          }
+        }
+        /*Read the frame data that needs no conversion.*/
+        if(fread(yuvframe[i],1,y4m_dst_buf_read_sz,video)!=
+         y4m_dst_buf_read_sz){
+          fprintf(stderr,"Error reading YUV frame data.\n");
+          exit(1);
+        }
+        /*Read the frame data that does need conversion.*/
+        if(fread(yuvframe[2],1,y4m_aux_buf_read_sz,video)!=
+         y4m_aux_buf_read_sz){
+          fprintf(stderr,"Error reading YUV frame data.\n");
+          exit(1);
+        }
+        /*Now convert the just read frame.*/
+        (*y4m_convert)(yuvframe[i],yuvframe[2]);
+        state++;
+      }
+
+      if(state<1){
+        /* can't get here unless YUV4MPEG stream has no video */
+        fprintf(stderr,"Video input contains no frames.\n");
+        exit(1);
+      }
+
+      /* Theora is a one-frame-in,one-frame-out system; submit a frame
+         for compression and pull out the packet */
+
+      /*We submit the buffer to the library as if it were padded, but we do not
+         actually allocate space for the padding.
+        This is okay, because the library will never read data from the padded
+         region.
+        This is only currently true of the experimental encoder; do NOT do this
+         with the reference encoder.*/
+      ycbcr[0].width=frame_w;
+      ycbcr[0].height=frame_h;
+      ycbcr[0].ystride=pic_w;
+      ycbcr[0].data=yuvframe[0]-pic_x-pic_y*pic_w;
+      ycbcr[1].width=frame_c_w;
+      ycbcr[1].height=frame_c_h;
+      ycbcr[1].ystride=c_w;
+      ycbcr[1].data=yuvframe[0]+pic_sz-(pic_x/dst_c_dec_h)-
+       (pic_y/dst_c_dec_v)*c_w;
+      ycbcr[2].width=frame_c_w;
+      ycbcr[2].height=frame_c_h;
+      ycbcr[2].ystride=c_w;
+      ycbcr[2].data=ycbcr[1].data+c_sz;
+
+      th_encode_ycbcr_in(td,ycbcr);
+
+      /* if there's only one frame, it's the last in the stream */
+      while(th_encode_packetout(td,state<2,&op)){
+        ogg_stream_packetin(to,&op);
+      }
+
+      {
+        unsigned char *temp=yuvframe[0];
+        yuvframe[0]=yuvframe[1];
+        yuvframe[1]=temp;
+        state--;
+      }
+
+    }
+  }
+  return videoflag;
+}
+
+int main(int argc,char *argv[]){
+  int c,long_option_index,ret;
+
+  ogg_stream_state to; /* take physical pages, weld into a logical
+                           stream of packets */
+  ogg_stream_state vo; /* take physical pages, weld into a logical
+                           stream of packets */
+  ogg_page         og; /* one Ogg bitstream page.  Vorbis packets are inside */
+  ogg_packet       op; /* one raw packet of data for decode */
+
+  th_enc_ctx      *td;
+  th_info          ti;
+  th_comment       tc;
+
+  vorbis_info      vi; /* struct that stores all the static vorbis bitstream
+                          settings */
+  vorbis_comment   vc; /* struct that stores all the user comments */
+
+  vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
+  vorbis_block     vb; /* local working space for packet->PCM decode */
+
+  int audioflag=0;
+  int videoflag=0;
+  int akbps=0;
+  int vkbps=0;
+
+  ogg_int64_t audio_bytesout=0;
+  ogg_int64_t video_bytesout=0;
+  double timebase;
+
+  FILE* outfile = stdout;
+
+#ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */
+  /* if we were reading/writing a file, it would also need to in
+     binary mode, eg, fopen("file.wav","wb"); */
+  /* 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
+
+  while((c=getopt_long(argc,argv,optstring,options,&long_option_index))!=EOF){
+    switch(c){
+    case 'o':
+      outfile=fopen(optarg,"wb");
+      if(outfile==NULL){
+        fprintf(stderr,"Unable to open output file '%s'\n", optarg);
+        exit(1);
+      }
+      break;;
+
+    case 'a':
+      audio_q=(float)(atof(optarg)*.099);
+      if(audio_q<-.1 || audio_q>1){
+        fprintf(stderr,"Illegal audio quality (choose -1 through 10)\n");
+        exit(1);
+      }
+      audio_r=-1;
+      break;
+
+    case 'v':
+      video_q=(int)rint(atof(optarg)*6.3);
+      if(video_q<0 || video_q>63){
+        fprintf(stderr,"Illegal video quality (choose 0 through 10)\n");
+        exit(1);
+      }
+      video_r=0;
+      break;
+
+    case 'A':
+      audio_r=(int)(atof(optarg)*1000);
+      if(audio_q<0){
+        fprintf(stderr,"Illegal audio quality (choose > 0 please)\n");
+        exit(1);
+      }
+      audio_q=-99;
+      break;
+
+    case 'V':
+      video_r=(int)rint(atof(optarg)*1000);
+      if(video_r<45000 || video_r>2000000){
+        fprintf(stderr,"Illegal video bitrate (choose 45kbps through 2000kbps)\n");
+        exit(1);
+      }
+      video_q=0;
+     break;
+
+    case 's':
+      video_par_n=(int)rint(atof(optarg));
+      break;
+
+    case 'S':
+      video_par_d=(int)rint(atof(optarg));
+      break;
+
+    case 'f':
+      video_fps_n=(int)rint(atof(optarg));
+      break;
+
+    case 'F':
+      video_fps_d=(int)rint(atof(optarg));
+      break;
+
+    case 'c':
+      vp3_compatible=1;
+      break;
+
+    default:
+      usage();
+    }
+  }
+
+  while(optind<argc){
+    /* assume that anything following the options must be a filename */
+    id_file(argv[optind]);
+    optind++;
+  }
+
+  /* yayness.  Set up Ogg output stream */
+  srand(time(NULL));
+  ogg_stream_init(&vo,rand());
+  ogg_stream_init(&to,rand()); /* oops, add one ot the above */
+
+  /* Set up Theora encoder */
+  if(!video){
+    fprintf(stderr,"No video files submitted for compression?\n");
+    exit(1);
+  }
+  /* Theora has a divisible-by-sixteen restriction for the encoded frame size */
+  /* scale the picture size up to the nearest /16 and calculate offsets */
+  frame_w=pic_w+15&~0xF;
+  frame_h=pic_h+15&~0xF;
+  /*Force the offsets to be even so that chroma samples line up like we
+     expect.*/
+  pic_x=frame_w-pic_w>>1&~1;
+  pic_y=frame_h-pic_h>>1&~1;
+
+  th_info_init(&ti);
+  ti.frame_width=frame_w;
+  ti.frame_height=frame_h;
+  ti.pic_width=pic_w;
+  ti.pic_height=pic_h;
+  ti.pic_x=pic_x;
+  ti.pic_y=pic_y;
+  ti.fps_numerator=video_fps_n;
+  ti.fps_denominator=video_fps_d;
+  ti.aspect_numerator=video_par_n;
+  ti.aspect_denominator=video_par_d;
+  ti.colorspace=TH_CS_UNSPECIFIED;
+  ti.target_bitrate=video_r;
+  ti.quality=video_q;
+  ti.keyframe_granule_shift=6;
+
+  if(dst_c_dec_h==2){
+    if(dst_c_dec_v==2)ti.pixel_fmt=TH_PF_420;
+    else ti.pixel_fmt=TH_PF_422;
+  }
+  else ti.pixel_fmt=TH_PF_444;
+
+  td=th_encode_alloc(&ti);
+  th_info_clear(&ti);
+
+  if(vp3_compatible){
+    ret=th_encode_ctl(td,TH_ENCCTL_SET_VP3_COMPATIBLE,&vp3_compatible,
+     sizeof(vp3_compatible));
+    if(ret<0||!vp3_compatible){
+      fprintf(stderr,"Could not enable strict VP3 compatibility.\n");
+      if(ret>=0){
+        fprintf(stderr,"Ensure your source format is supported by VP3.\n");
+        fprintf(stderr,
+         "(4:2:0 pixel format, width and height multiples of 16).\n");
+      }
+    }
+  }
+
+  /* initialize Vorbis too, assuming we have audio to compress. */
+  if(audio){
+    vorbis_info_init(&vi);
+    if(audio_q>-99)
+      ret = vorbis_encode_init_vbr(&vi,audio_ch,audio_hz,audio_q);
+    else
+      ret = vorbis_encode_init(&vi,audio_ch,audio_hz,-1,audio_r,-1);
+    if(ret){
+      fprintf(stderr,"The Vorbis encoder could not set up a mode according to\n"
+              "the requested quality or bitrate.\n\n");
+      exit(1);
+    }
+
+    vorbis_comment_init(&vc);
+    vorbis_analysis_init(&vd,&vi);
+    vorbis_block_init(&vd,&vb);
+  }
+
+  /* write the bitstream header packets with proper page interleave */
+
+  th_comment_init(&tc);
+
+  /* first packet will get its own page automatically */
+  if(th_encode_flushheader(td,&tc,&op)<=0){
+    fprintf(stderr,"Internal Theora library error.\n");
+    exit(1);
+  }
+  ogg_stream_packetin(&to,&op);
+  if(ogg_stream_pageout(&to,&og)!=1){
+    fprintf(stderr,"Internal Ogg library error.\n");
+    exit(1);
+  }
+  fwrite(og.header,1,og.header_len,outfile);
+  fwrite(og.body,1,og.body_len,outfile);
+
+  /* create the remaining theora headers */
+  for(;;){
+    ret=th_encode_flushheader(td,&tc,&op);
+    if(ret<0){
+      fprintf(stderr,"Internal Theora library error.\n");
+      exit(1);
+    }
+    else if(!ret)break;
+    ogg_stream_packetin(&to,&op);
+  }
+
+  if(audio){
+    ogg_packet header;
+    ogg_packet header_comm;
+    ogg_packet header_code;
+
+    vorbis_analysis_headerout(&vd,&vc,&header,&header_comm,&header_code);
+    ogg_stream_packetin(&vo,&header); /* automatically placed in its own
+                                         page */
+    if(ogg_stream_pageout(&vo,&og)!=1){
+      fprintf(stderr,"Internal Ogg library error.\n");
+      exit(1);
+    }
+    fwrite(og.header,1,og.header_len,outfile);
+    fwrite(og.body,1,og.body_len,outfile);
+
+    /* remaining vorbis header packets */
+    ogg_stream_packetin(&vo,&header_comm);
+    ogg_stream_packetin(&vo,&header_code);
+  }
+
+  /* Flush the rest of our headers. This ensures
+     the actual data in each stream will start
+     on a new page, as per spec. */
+  for(;;){
+    int result = ogg_stream_flush(&to,&og);
+      if(result<0){
+        /* can't get here */
+        fprintf(stderr,"Internal Ogg library error.\n");
+        exit(1);
+      }
+    if(result==0)break;
+    fwrite(og.header,1,og.header_len,outfile);
+    fwrite(og.body,1,og.body_len,outfile);
+  }
+  if(audio){
+    for(;;){
+      int result=ogg_stream_flush(&vo,&og);
+      if(result<0){
+        /* can't get here */
+        fprintf(stderr,"Internal Ogg library error.\n");
+        exit(1);
+      }
+      if(result==0)break;
+      fwrite(og.header,1,og.header_len,outfile);
+      fwrite(og.body,1,og.body_len,outfile);
+    }
+  }
+
+  /* setup complete.  Raw processing loop */
+  fprintf(stderr,"Compressing....\n");
+  for(;;){
+    ogg_page audiopage;
+    ogg_page videopage;
+
+    /* is there an audio page flushed?  If not, fetch one if possible */
+    audioflag=fetch_and_process_audio(audio,&audiopage,&vo,&vd,&vb,audioflag);
+
+    /* is there a video page flushed?  If not, fetch one if possible */
+    videoflag=fetch_and_process_video(video,&videopage,&to,td,videoflag);
+
+    /* no pages of either?  Must be end of stream. */
+    if(!audioflag && !videoflag)break;
+
+    /* which is earlier; the end of the audio page or the end of the
+       video page? Flush the earlier to stream */
+    {
+      int audio_or_video=-1;
+      double audiotime=
+        audioflag?vorbis_granule_time(&vd,ogg_page_granulepos(&audiopage)):-1;
+      double videotime=
+        videoflag?th_granule_time(td,ogg_page_granulepos(&videopage)):-1;
+
+      if(!audioflag){
+        audio_or_video=1;
+      } else if(!videoflag) {
+        audio_or_video=0;
+      } else {
+        if(audiotime<videotime)
+          audio_or_video=0;
+        else
+          audio_or_video=1;
+      }
+
+      if(audio_or_video==1){
+        /* flush a video page */
+        video_bytesout+=fwrite(videopage.header,1,videopage.header_len,outfile);
+        video_bytesout+=fwrite(videopage.body,1,videopage.body_len,outfile);
+        videoflag=0;
+        timebase=videotime;
+        
+      }else{
+        /* flush an audio page */
+        audio_bytesout+=fwrite(audiopage.header,1,audiopage.header_len,outfile);
+        audio_bytesout+=fwrite(audiopage.body,1,audiopage.body_len,outfile);
+        audioflag=0;
+        timebase=audiotime;
+      }
+      {
+        int hundredths=(int)(timebase*100-(long)timebase*100);
+        int seconds=(long)timebase%60;
+        int minutes=((long)timebase/60)%60;
+        int hours=(long)timebase/3600;
+        
+        if(audio_or_video)
+          vkbps=(int)rint(video_bytesout*8./timebase*.001);
+        else
+          akbps=(int)rint(audio_bytesout*8./timebase*.001);
+        
+        fprintf(stderr,
+                "\r      %d:%02d:%02d.%02d audio: %dkbps video: %dkbps                 ",
+                hours,minutes,seconds,hundredths,akbps,vkbps);
+      }
+    }
+
+  }
+
+  /* clear out state */
+
+  if(audio){
+    ogg_stream_clear(&vo);
+    vorbis_block_clear(&vb);
+    vorbis_dsp_clear(&vd);
+    vorbis_comment_clear(&vc);
+    vorbis_info_clear(&vi);
+  }
+  if(video){
+    ogg_stream_clear(&to);
+    th_encode_free(td);
+    th_comment_clear(&tc);
+  }
+
+  if(outfile && outfile!=stdout)fclose(outfile);
+
+  fprintf(stderr,"\r   \ndone.\n\n");
+
+  return(0);
+
+}

Added: trunk/theora-exp/examples/player_example.c
===================================================================
--- trunk/theora-exp/examples/player_example.c	                        (rev 0)
+++ trunk/theora-exp/examples/player_example.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,816 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function: example SDL player application; plays Ogg Theora files (with
+            optional Vorbis audio second stream)
+  last mod: $Id: player_example.c,v 1.29 2004/03/08 06:44:26 giles Exp $
+
+ ********************************************************************/
+
+/* far more complex than most Ogg 'example' programs.  The complexity
+   of maintaining A/V sync is pretty much unavoidable.  It's necessary
+   to actually have audio/video playback to make the hard audio clock
+   sync actually work.  If there's audio playback, there might as well
+   be simple video playback as well...
+
+   A simple 'demux and write back streams' would have been easier,
+   it's true. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#if !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#if !defined(_GNU_SOURCE)
+#define _GNU_SOURCE
+#endif
+#if !defined(_LARGEFILE_SOURCE)
+#define _LARGEFILE_SOURCE
+#endif
+#if !defined(_LARGEFILE64_SOURCE)
+#define _LARGEFILE64_SOURCE
+#endif
+#if !defined(_FILE_OFFSET_BITS)
+#define _FILE_OFFSET_BITS 64
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <math.h>
+#include <signal.h>
+#include "theora/theoradec.h"
+#include "vorbis/codec.h"
+#include <SDL.h>
+
+/* yes, this makes us OSS-specific for now. None of SDL, libao, libao2
+   give us any way to determine hardware timing, and since the
+   hard/kernel buffer is going to be most of or > a second, that's
+   just a little bit important */
+#if defined(__FreeBSD__)
+#include <machine/soundcard.h>
+#define AUDIO_DEVICE "/dev/audio"
+#elif defined(__NetBSD__) || defined(__OpenBSD__)
+#include <soundcard.h>
+#define AUDIO_DEVICE "/dev/audio"
+#else
+#include <sys/soundcard.h>
+#define AUDIO_DEVICE "/dev/dsp"
+#endif
+#include <sys/ioctl.h>
+
+/* Helper; just grab some more compressed bitstream and sync it for
+   page extraction */
+int buffer_data(FILE *in,ogg_sync_state *oy){
+  char *buffer=ogg_sync_buffer(oy,4096);
+  int bytes=fread(buffer,1,4096,in);
+  ogg_sync_wrote(oy,bytes);
+  return(bytes);
+}
+
+/* never forget that globals are a one-way ticket to Hell */
+/* Ogg and codec state for demux/decode */
+ogg_sync_state   oy;
+ogg_page         og;
+ogg_stream_state vo;
+ogg_stream_state to;
+th_info          ti;
+th_comment       tc;
+th_setup_info   *ts;
+th_dec_ctx      *td;
+vorbis_info      vi;
+vorbis_dsp_state vd;
+vorbis_block     vb;
+vorbis_comment   vc;
+
+int              theora_p=0;
+int              theora_processing_headers;
+int              vorbis_p=0;
+int              stateflag=0;
+
+/* SDL Video playback structures */
+SDL_Surface *screen;
+SDL_Overlay *yuv_overlay;
+SDL_Rect rect;
+
+/* single frame video buffering */
+int          videobuf_ready=0;
+ogg_int64_t  videobuf_granulepos=-1;
+double       videobuf_time=0;
+
+/* single audio fragment audio buffering */
+int          audiobuf_fill=0;
+int          audiobuf_ready=0;
+ogg_int16_t *audiobuf;
+ogg_int64_t  audiobuf_granulepos=0; /* time position of last sample */
+
+/* audio / video synchronization tracking:
+
+Since this will make it to Google at some point and lots of people
+search for how to do this, a quick rundown of a practical A/V sync
+strategy under Linux [the UNIX where Everything Is Hard].  Naturally,
+this works on other platforms using OSS for sound as well.
+
+In OSS, we don't have reliable access to any precise information on
+the exact current playback position (that, of course would have been
+too easy; the kernel folks like to keep us app people working hard
+doing simple things that should have been solved once and abstracted
+long ago).  Hopefully ALSA solves this a little better; we'll probably
+use that once ALSA is the standard in the stable kernel.
+
+We can't use the system clock for a/v sync because audio is hard
+synced to its own clock, and both the system and audio clocks suffer
+from wobble, drift, and a lack of accuracy that can be guaranteed to
+add a reliable percent or so of error.  After ten seconds, that's
+100ms.  We can't drift by half a second every minute.
+
+Although OSS can't generally tell us where the audio playback pointer
+is, we do know that if we work in complete audio fragments and keep
+the kernel buffer full, a blocking select on the audio buffer will
+give us a writable fragment immediately after playback finishes with
+it.  We assume at that point that we know the exact number of bytes in
+the kernel buffer that have not been played (total fragments minus
+one) and calculate clock drift between audio and system then (and only
+then).  Damp the sync correction fraction, apply, and walla: A
+reliable A/V clock that even works if it's interrupted. */
+
+long         audiofd_totalsize=-1;
+int          audiofd_fragsize;      /* read and write only complete fragments
+                                       so that SNDCTL_DSP_GETOSPACE is
+                                       accurate immediately after a bank
+                                       switch */
+int          audiofd=-1;
+ogg_int64_t  audiofd_timer_calibrate=-1;
+
+static void open_audio(){
+  audio_buf_info info;
+  int format=AFMT_S16_NE; /* host endian */
+  int channels=vi.channels;
+  int rate=vi.rate;
+  int ret;
+
+  audiofd=open(AUDIO_DEVICE,O_RDWR);
+  if(audiofd<0){
+    fprintf(stderr,"Could not open audio device " AUDIO_DEVICE ".\n");
+    exit(1);
+  }
+
+  ret=ioctl(audiofd,SNDCTL_DSP_SETFMT,&format);
+  if(ret){
+    fprintf(stderr,"Could not set 16 bit host-endian playback\n");
+    exit(1);
+  }
+
+  ret=ioctl(audiofd,SNDCTL_DSP_CHANNELS,&channels);
+  if(ret){
+    fprintf(stderr,"Could not set %d channel playback\n",channels);
+    exit(1);
+  }
+
+  ret=ioctl(audiofd,SNDCTL_DSP_SPEED,&rate);
+  if(ret){
+    fprintf(stderr,"Could not set %d Hz playback\n",rate);
+    exit(1);
+  }
+
+  ioctl(audiofd,SNDCTL_DSP_GETOSPACE,&info);
+  audiofd_fragsize=info.fragsize;
+  audiofd_totalsize=info.fragstotal*info.fragsize;
+
+  audiobuf=malloc(audiofd_fragsize);
+}
+
+static void audio_close(void){
+  if(audiofd>-1){
+    ioctl(audiofd,SNDCTL_DSP_RESET,NULL);
+    close(audiofd);
+    free(audiobuf);
+  }
+}
+
+/* call this only immediately after unblocking from a full kernel
+   having a newly empty fragment or at the point of DMA restart */
+void audio_calibrate_timer(int restart){
+  struct timeval tv;
+  ogg_int64_t current_sample;
+  ogg_int64_t new_time;
+
+  gettimeofday(&tv,0);
+  new_time=tv.tv_sec*1000+tv.tv_usec/1000;
+
+  if(restart){
+    current_sample=audiobuf_granulepos-audiobuf_fill/2/vi.channels;
+  }else
+    current_sample=audiobuf_granulepos-
+      (audiobuf_fill+audiofd_totalsize-audiofd_fragsize)/2/vi.channels;
+
+  new_time-=1000*current_sample/vi.rate;
+
+  audiofd_timer_calibrate=new_time;
+}
+
+/* get relative time since beginning playback, compensating for A/V
+   drift */
+double get_time(){
+  static ogg_int64_t last=0;
+  static ogg_int64_t up=0;
+  ogg_int64_t now;
+  struct timeval tv;
+
+  gettimeofday(&tv,0);
+  now=tv.tv_sec*1000+tv.tv_usec/1000;
+
+  if(audiofd_timer_calibrate==-1)audiofd_timer_calibrate=last=now;
+
+  if(audiofd<0){
+    /* no audio timer to worry about, we can just use the system clock */
+    /* only one complication: If the process is suspended, we should
+       reset timing to account for the gap in play time.  Do it the
+       easy/hack way */
+    if(now-last>1000)audiofd_timer_calibrate+=(now-last);
+    last=now;
+  }
+
+  if(now-up>200){
+    double timebase=(now-audiofd_timer_calibrate)*.001;
+    int hundredths=timebase*100-(long)timebase*100;
+    int seconds=(long)timebase%60;
+    int minutes=((long)timebase/60)%60;
+    int hours=(long)timebase/3600;
+
+    fprintf(stderr,"   Playing: %d:%02d:%02d.%02d                       \r",
+            hours,minutes,seconds,hundredths);
+    up=now;
+  }
+
+  return (now-audiofd_timer_calibrate)*.001;
+
+}
+
+/* write a fragment to the OSS kernel audio API, but only if we can
+   stuff in a whole fragment without blocking */
+void audio_write_nonblocking(void){
+
+  if(audiobuf_ready){
+    audio_buf_info info;
+    long bytes;
+
+    ioctl(audiofd,SNDCTL_DSP_GETOSPACE,&info);
+    bytes=info.bytes;
+    if(bytes>=audiofd_fragsize){
+      if(bytes==audiofd_totalsize)audio_calibrate_timer(1);
+
+      while(1){
+        bytes=write(audiofd,audiobuf+(audiofd_fragsize-audiobuf_fill),
+                    audiofd_fragsize);
+        
+        if(bytes>0){
+        
+          if(bytes!=audiobuf_fill){
+            /* shouldn't actually be possible... but eh */
+            audiobuf_fill-=bytes;
+          }else
+            break;
+        }
+      }
+
+      audiobuf_fill=0;
+      audiobuf_ready=0;
+
+    }
+  }
+}
+
+/* clean quit on Ctrl-C for SDL and thread shutdown as per SDL example
+   (we don't use any threads, but libSDL does) */
+int got_sigint=0;
+static void sigint_handler (int signal) {
+  got_sigint = 1;
+}
+
+static void open_video(void){
+  if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
+    fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
+    exit(1);
+  }
+
+  screen = SDL_SetVideoMode(ti.pic_width, ti.pic_height, 0, SDL_SWSURFACE);
+  if ( screen == NULL ) {
+    fprintf(stderr, "Unable to set %dx%d video: %s\n",
+            ti.pic_width,ti.pic_height,SDL_GetError());
+    exit(1);
+  }
+
+  yuv_overlay = SDL_CreateYUVOverlay(ti.pic_width, ti.pic_height,
+                                     SDL_YV12_OVERLAY,
+                                     screen);
+  if ( yuv_overlay == NULL ) {
+    fprintf(stderr, "SDL: Couldn't create SDL_yuv_overlay: %s\n",
+            SDL_GetError());
+    exit(1);
+  }
+  rect.x = 0;
+  rect.y = 0;
+  rect.w = ti.pic_width;
+  rect.h = ti.pic_height;
+
+  SDL_DisplayYUVOverlay(yuv_overlay, &rect);
+}
+
+static void video_write(void){
+  static const int planemap[3] = {0,2,1};
+  int pli;
+  int wscale, hscale;
+  int i;
+  th_ycbcr_buffer ycbcr;
+  int crop_offset;
+
+  th_decode_ycbcr_out(td,ycbcr);
+
+  /* Lock SDL_yuv_overlay */
+  if ( SDL_MUSTLOCK(screen) ) {
+    if ( SDL_LockSurface(screen) < 0 ) return;
+  }
+  if (SDL_LockYUVOverlay(yuv_overlay) < 0) return;
+
+  /* let's draw the data on a SDL screen (*screen) */
+  /* deal with border stride */
+  /* reverse u and v for SDL */
+  /* and crop input properly, respecting the encoded frame rect */
+  /* problems may exist for odd frame rect for some encodings */
+  for (pli = 0; pli < 3; pli++) {
+    wscale = ycbcr[0].width / ycbcr[pli].width;
+    hscale = ycbcr[0].height / ycbcr[pli].height;
+    crop_offset = (ti.pic_x / wscale)
+                + (ycbcr[pli].ystride)
+                * (ti.pic_y / hscale);
+    for(i=0;i<yuv_overlay->h / hscale;i++)
+      memcpy(yuv_overlay->pixels[planemap[pli]]
+                      + yuv_overlay->pitches[planemap[pli]]*i,
+             ycbcr[pli].data+crop_offset+ycbcr[pli].ystride*i,
+             yuv_overlay->w / wscale);
+  }
+
+  /* Unlock SDL_yuv_overlay */
+  if ( SDL_MUSTLOCK(screen) ) {
+    SDL_UnlockSurface(screen);
+  }
+  SDL_UnlockYUVOverlay(yuv_overlay);
+
+
+  /* Show, baby, show! */
+  SDL_DisplayYUVOverlay(yuv_overlay, &rect);
+
+}
+/* dump the theora (or vorbis) comment header */
+static int dump_comments(th_comment *tc){
+  int i, len;
+  char *value;
+  FILE *out=stdout;
+
+  fprintf(out,"Encoded by %s\n",tc->vendor);
+  if(tc->comments){
+    fprintf(out, "theora comment header:\n");
+    for(i=0;i<tc->comments;i++){
+      if(tc->user_comments[i]){
+        len=tc->comment_lengths[i];
+        value=malloc(len+1);
+        memcpy(value,tc->user_comments[i],len);
+        value[len]='\0';
+        fprintf(out, "\t%s\n", value);
+        free(value);
+      }
+    }
+  }
+  return(0);
+}
+
+/* Report the encoder-specified colorspace for the video, if any.
+   We don't actually make use of the information in this example;
+   a real player should attempt to perform color correction for
+   whatever display device it supports. */
+static void report_colorspace(th_info *ti)
+{
+    switch(ti->colorspace){
+      case TH_CS_UNSPECIFIED:
+        /* nothing to report */
+        break;;
+      case TH_CS_ITU_REC_470M:
+        fprintf(stderr,"  encoder specified ITU Rec 470M (NTSC) color.\n");
+        break;;
+      case TH_CS_ITU_REC_470BG:
+        fprintf(stderr,"  encoder specified ITU Rec 470BG (PAL) color.\n");
+        break;;
+      default:
+        fprintf(stderr,"warning: encoder specified unknown colorspace (%d).\n",
+            ti->colorspace);
+        break;;
+    }
+}
+
+/* helper: push a page into the appropriate steam */
+/* this can be done blindly; a stream won't accept a page
+                that doesn't belong to it */
+static int queue_page(ogg_page *page){
+  if(theora_p)ogg_stream_pagein(&to,page);
+  if(vorbis_p)ogg_stream_pagein(&vo,&og);
+  return 0;
+}
+
+static void usage(void){
+  fprintf(stderr,
+          "Usage: player_example <file.ogv>\n"
+          "input is read from stdin if no file is passed on the command line\n"
+          "\n"
+  );
+}
+
+int main(int argc,char *argv[]){
+
+  int pp_level_max;
+  int pp_level;
+  int pp_inc;
+  int i,j;
+  ogg_packet op;
+
+  FILE *infile = stdin;
+
+  int frames = 0;
+  int dropped = 0;
+
+#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 );
+#endif
+
+  /* open the input file if any */
+  if(argc==2){
+    infile=fopen(argv[1],"rb");
+    if(infile==NULL){
+      fprintf(stderr,"Unable to open '%s' for playback.\n", argv[1]);
+      exit(1);
+    }
+  }
+  if(argc>2){
+      usage();
+      exit(1);
+  }
+
+  /* start up Ogg stream synchronization layer */
+  ogg_sync_init(&oy);
+
+  /* init supporting Vorbis structures needed in header parsing */
+  vorbis_info_init(&vi);
+  vorbis_comment_init(&vc);
+
+  /* init supporting Theora structures needed in header parsing */
+  th_comment_init(&tc);
+  th_info_init(&ti);
+
+  /* Ogg file open; parse the headers */
+  /* Only interested in Vorbis/Theora streams */
+  while(!stateflag){
+    int ret=buffer_data(infile,&oy);
+    if(ret==0)break;
+    while(ogg_sync_pageout(&oy,&og)>0){
+      ogg_stream_state test;
+
+      /* is this a mandated initial header? If not, stop parsing */
+      if(!ogg_page_bos(&og)){
+        /* don't leak the page; get it into the appropriate stream */
+        queue_page(&og);
+        stateflag=1;
+        break;
+      }
+
+      ogg_stream_init(&test,ogg_page_serialno(&og));
+      ogg_stream_pagein(&test,&og);
+      ogg_stream_packetpeek(&test,&op);
+
+      /* identify the codec: try theora */
+      if(!theora_p && (theora_processing_headers=
+       th_decode_headerin(&ti,&tc,&ts,&op))>=0){
+        /* it is theora */
+        memcpy(&to,&test,sizeof(test));
+        theora_p=1;
+        /*Advance past the successfully processed header.*/
+        if(theora_processing_headers)ogg_stream_packetout(&to,NULL);
+      }else if(!vorbis_p && vorbis_synthesis_headerin(&vi,&vc,&op)>=0){
+        /* it is vorbis */
+        memcpy(&vo,&test,sizeof(test));
+        vorbis_p=1;
+        /*Advance past the successfully processed header.*/
+        ogg_stream_packetout(&vo,NULL);
+      }else{
+        /* whatever it is, we don't care about it */
+        ogg_stream_clear(&test);
+      }
+    }
+    /* fall through to non-bos page parsing */
+  }
+
+  /* we're expecting more header packets. */
+  while((theora_p && theora_processing_headers) || (vorbis_p && vorbis_p<3)){
+    int ret;
+
+    /* look for further theora headers */
+    while(theora_processing_headers&&(ret=ogg_stream_packetpeek(&to,&op))){
+      if(ret<0)continue;
+      theora_processing_headers=th_decode_headerin(&ti,&tc,&ts,&op);
+      if(theora_processing_headers<0){
+        printf("Error parsing Theora stream headers; corrupt stream?\n");
+        exit(1);
+      }
+      else if(theora_processing_headers>0){
+        /*Advance past the successfully processed header.*/
+        ogg_stream_packetout(&to,NULL);
+      }
+      theora_p++;
+    }
+
+    /* look for more vorbis header packets */
+    while(vorbis_p && (vorbis_p<3) && (ret=ogg_stream_packetout(&vo,&op))){
+      if(ret<0){
+        fprintf(stderr,"Error parsing Vorbis stream headers; corrupt stream?\n");
+        exit(1);
+      }
+      if(vorbis_synthesis_headerin(&vi,&vc,&op)){
+        fprintf(stderr,"Error parsing Vorbis stream headers; corrupt stream?\n");
+        exit(1);
+      }
+      vorbis_p++;
+      if(vorbis_p==3)break;
+    }
+
+    /*Stop now so we don't fail if there aren't enough pages in a short
+       stream.*/
+    if(!(theora_p&&theora_processing_headers)&&!(vorbis_p&&vorbis_p<3))break;
+
+    /* The header pages/packets will arrive before anything else we
+       care about, or the stream is not obeying spec */
+
+    if(ogg_sync_pageout(&oy,&og)>0){
+      queue_page(&og); /* demux into the appropriate stream */
+    }else{
+      int ret=buffer_data(infile,&oy); /* someone needs more data */
+      if(ret==0){
+        fprintf(stderr,"End of file while searching for codec headers.\n");
+        exit(1);
+      }
+    }
+  }
+
+  /* and now we have it all.  initialize decoders */
+  if(theora_p){
+    td=th_decode_alloc(&ti,ts);
+    printf("Ogg logical stream %lx is Theora %dx%d %.02f fps video\n",
+           to.serialno,ti.frame_width,ti.frame_height, 
+           (double)ti.fps_numerator/ti.fps_denominator);
+    if(ti.frame_width!=ti.pic_width || ti.frame_height!=ti.pic_height)
+      printf("  Frame content is %dx%d with offset (%d,%d).\n",
+           ti.pic_width, ti.pic_height, ti.pic_x, ti.pic_y);
+    report_colorspace(&ti);
+    dump_comments(&tc);
+    th_decode_ctl(td,TH_DECCTL_GET_PPLEVEL_MAX,&pp_level_max,
+     sizeof(pp_level_max));
+    pp_level=1;
+    th_decode_ctl(td,TH_DECCTL_SET_PPLEVEL,&pp_level,sizeof(pp_level));
+    pp_inc=0;
+  }else{
+    /* tear down the partial theora setup */
+    th_info_clear(&ti);
+    th_comment_clear(&tc);
+  }
+  /*Either way, we're done with the codec setup data.*/
+  th_setup_free(ts);
+  if(vorbis_p){
+    vorbis_synthesis_init(&vd,&vi);
+    vorbis_block_init(&vd,&vb);
+    fprintf(stderr,"Ogg logical stream %lx is Vorbis %d channel %ld Hz audio.\n",
+            vo.serialno,vi.channels,vi.rate);
+  }else{
+    /* tear down the partial vorbis setup */
+    vorbis_info_clear(&vi);
+    vorbis_comment_clear(&vc);
+  }
+
+  /* open audio */
+  if(vorbis_p)open_audio();
+
+  /* open video */
+  if(theora_p)open_video();
+
+  /* install signal handler as SDL clobbered the default */
+  signal (SIGINT, sigint_handler);
+
+  /* on to the main decode loop.  We assume in this example that audio
+     and video start roughly together, and don't begin playback until
+     we have a start frame for both.  This is not necessarily a valid
+     assumption in Ogg A/V streams! It will always be true of the
+     example_encoder (and most streams) though. */
+
+  stateflag=0; /* playback has not begun */
+  while(!got_sigint){
+
+    /* we want a video and audio frame ready to go at all times.  If
+       we have to buffer incoming, buffer the compressed data (ie, let
+       ogg do the buffering) */
+    while(vorbis_p && !audiobuf_ready){
+      int ret;
+      float **pcm;
+
+      /* if there's pending, decoded audio, grab it */
+      if((ret=vorbis_synthesis_pcmout(&vd,&pcm))>0){
+        int count=audiobuf_fill/2;
+        int maxsamples=(audiofd_fragsize-audiobuf_fill)/2/vi.channels;
+        for(i=0;i<ret && i<maxsamples;i++)
+          for(j=0;j<vi.channels;j++){
+            int val=rint(pcm[j][i]*32767.f);
+            if(val>32767)val=32767;
+            if(val<-32768)val=-32768;
+            audiobuf[count++]=val;
+          }
+        vorbis_synthesis_read(&vd,i);
+        audiobuf_fill+=i*vi.channels*2;
+        if(audiobuf_fill==audiofd_fragsize)audiobuf_ready=1;
+        if(vd.granulepos>=0)
+          audiobuf_granulepos=vd.granulepos-ret+i;
+        else
+          audiobuf_granulepos+=i;
+        
+      }else{
+        
+        /* no pending audio; is there a pending packet to decode? */
+        if(ogg_stream_packetout(&vo,&op)>0){
+          if(vorbis_synthesis(&vb,&op)==0) /* test for success! */
+            vorbis_synthesis_blockin(&vd,&vb);
+        }else   /* we need more data; break out to suck in another page */
+          break;
+      }
+    }
+
+    while(theora_p && !videobuf_ready){
+      /* theora is one in, one out... */
+      if(ogg_stream_packetout(&to,&op)>0){
+
+        if(pp_inc){
+          pp_level+=pp_inc;
+          th_decode_ctl(td,TH_DECCTL_SET_PPLEVEL,&pp_level,
+           sizeof(pp_level));
+          pp_inc=0;
+        }
+        /*HACK: This should be set after a seek or a gap, but we might not have
+           a granulepos for the first packet (we only have them for the last
+           packet on a page), so we just set it as often as we get it.
+          To do this right, we should back-track from the last packet on the
+           page and compute the correct granulepos for the first packet after
+           a seek or a gap.*/
+        if(op.granulepos>=0){
+          th_decode_ctl(td,TH_DECCTL_SET_GRANPOS,&op.granulepos,
+           sizeof(op.granulepos));
+        }
+        if(th_decode_packetin(td,&op,&videobuf_granulepos)==0){
+          videobuf_time=th_granule_time(td,videobuf_granulepos);
+          frames++;
+
+          /* is it already too old to be useful?  This is only actually
+             useful cosmetically after a SIGSTOP.  Note that we have to
+             decode the frame even if we don't show it (for now) due to
+             keyframing.  Soon enough libtheora will be able to deal
+             with non-keyframe seeks.  */
+
+          if(videobuf_time>=get_time())
+            videobuf_ready=1;
+          else{
+            /*If we are too slow, reduce the pp level.*/
+	    pp_inc=pp_level>0?-1:0;
+            dropped++;
+          }
+        }
+
+      }else
+        break;
+    }
+
+    if(!videobuf_ready && !audiobuf_ready && feof(infile))break;
+
+    if(!videobuf_ready || !audiobuf_ready){
+      /* no data yet for somebody.  Grab another page */
+      buffer_data(infile,&oy);
+      while(ogg_sync_pageout(&oy,&og)>0){
+        queue_page(&og);
+      }
+    }
+
+    /* If playback has begun, top audio buffer off immediately. */
+    if(stateflag) audio_write_nonblocking();
+
+    /* are we at or past time for this video frame? */
+    if(stateflag && videobuf_ready && videobuf_time<=get_time()){
+      video_write();
+      videobuf_ready=0;
+    }
+
+    if(stateflag &&
+       (audiobuf_ready || !vorbis_p) &&
+       (videobuf_ready || !theora_p) &&
+       !got_sigint){
+      /* we have an audio frame ready (which means the audio buffer is
+         full), it's not time to play video, so wait until one of the
+         audio buffer is ready or it's near time to play video */
+        
+      /* set up select wait on the audiobuffer and a timeout for video */
+      struct timeval timeout;
+      fd_set writefs;
+      fd_set empty;
+      int n=0;
+
+      FD_ZERO(&writefs);
+      FD_ZERO(&empty);
+      if(audiofd>=0){
+        FD_SET(audiofd,&writefs);
+        n=audiofd+1;
+      }
+
+      if(theora_p){
+        double tdiff;
+        long milliseconds;
+        tdiff=videobuf_time-get_time();
+        /*If we have lots of extra time, increase the post-processing level.*/
+        if(tdiff>ti.fps_denominator*0.25/ti.fps_numerator){
+          pp_inc=pp_level<pp_level_max?1:0;
+        }
+        else if(tdiff<ti.fps_denominator*0.05/ti.fps_numerator){
+          pp_inc=pp_level>0?-1:0;
+        }
+        milliseconds=tdiff*1000-5;
+        if(milliseconds>500)milliseconds=500;
+        if(milliseconds>0){
+          timeout.tv_sec=milliseconds/1000;
+          timeout.tv_usec=(milliseconds%1000)*1000;
+
+          n=select(n,&empty,&writefs,&empty,&timeout);
+          if(n)audio_calibrate_timer(0);
+        }
+      }else{
+        select(n,&empty,&writefs,&empty,NULL);
+      }
+    }
+
+    /* if our buffers either don't exist or are ready to go,
+       we can begin playback */
+    if((!theora_p || videobuf_ready) &&
+       (!vorbis_p || audiobuf_ready))stateflag=1;
+    /* same if we've run out of input */
+    if(feof(infile))stateflag=1;
+
+  }
+
+  /* tear it all down */
+
+  audio_close();
+  SDL_Quit();
+
+  if(vorbis_p){
+    ogg_stream_clear(&vo);
+    vorbis_block_clear(&vb);
+    vorbis_dsp_clear(&vd);
+    vorbis_comment_clear(&vc);
+    vorbis_info_clear(&vi);
+  }
+  if(theora_p){
+    ogg_stream_clear(&to);
+    th_decode_free(td);
+    th_comment_clear(&tc);
+    th_info_clear(&ti);
+  }
+  ogg_sync_clear(&oy);
+
+  if(infile && infile!=stdin)fclose(infile);
+
+  fprintf(stderr,
+          "\r                                                             \r");
+  fprintf(stderr, "%d frames", frames);
+  if (dropped) fprintf(stderr, " (%d dropped)", dropped);
+  fprintf(stderr, "\n");
+  fprintf(stderr, "\nDone.\n");
+
+  return(0);
+
+}

Added: trunk/theora-exp/examples/rehuff.c
===================================================================
--- trunk/theora-exp/examples/rehuff.c	                        (rev 0)
+++ trunk/theora-exp/examples/rehuff.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,1198 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2006                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function: example rehuff application; optimizes the Huffman codes
+   for Theora streams.
+  last mod: $Id: rehuff.c,v 1.2 2004/03/24 19:12:42 derf Exp $
+
+ ********************************************************************/
+
+#if !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#if !defined(_GNU_SOURCE)
+#define _GNU_SOURCE
+#endif
+#if !defined(_LARGEFILE_SOURCE)
+#define _LARGEFILE_SOURCE
+#endif
+#if !defined(_LARGEFILE64_SOURCE)
+#define _LARGEFILE64_SOURCE
+#endif
+#if !defined(_FILE_OFFSET_BITS)
+#define _FILE_OFFSET_BITS 64
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#include <string.h>
+/*Yes, yes, we're going to hell.*/
+#if defined(_WIN32)
+#include <io.h>
+#include <fcntl.h>
+#endif
+#include "getopt.h"
+#include "../lib/recode.h"
+#include <vorbis/codec.h>
+
+
+
+#define OC_MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
+#define OC_MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
+/*The ANSI offsetof macro is broken on some platforms (e.g., older DECs).*/
+#define _ogg_offsetof(_type,_field)\
+ ((size_t)((char *)&((_type *)0)->_field-(char *)0))
+
+
+
+typedef struct oc_huff_entry oc_huff_entry;
+
+
+
+struct oc_huff_entry{
+  oc_huff_entry *next;
+  oc_huff_entry *children[2];
+  ogg_int64_t    freq;
+  int            token;
+  int            min_token;
+};
+
+
+
+/*Fills in an array of Huffman codes given a Huffman tree.
+  _entry:   The root of the current branch of the tree.
+  _codes:   The array in which to store the codes.
+  _pattern: The prefix required to reach the current branch of the tree.
+  _nbits:   The number of bits in the prefix.*/
+static void huff_codes_create(oc_huff_entry *_entry,
+ th_huff_code _codes[TH_NDCT_TOKENS],int _pattern,int _nbits){
+  if(_entry->children[0]==NULL&&_entry->children[1]==NULL){
+    th_huff_code *code;
+    code=_codes+_entry->token;
+    code->pattern=_pattern;
+    code->nbits=_nbits;
+  }
+  else{
+    _nbits++;
+    huff_codes_create(_entry->children[0],_codes,_pattern<<1,_nbits);
+    huff_codes_create(_entry->children[1],_codes,_pattern<<1|1,_nbits);
+  }
+}
+
+/*Inserts an element into a singly linked list of Huffman tree nodes.
+  The element is inserted in ascending order by frequency.
+  _root:  The start of the list.
+  _entry: The entry to insert.
+  Return: The new head of the list. */
+static oc_huff_entry *huff_list_ins(oc_huff_entry *_root,
+ oc_huff_entry *_entry){
+  oc_huff_entry **pnext;
+  oc_huff_entry  *search;
+  for(pnext=&_root,search=_root;search!=NULL&&search->freq<_entry->freq;
+   pnext=&search->next,search=search->next);
+  _entry->next=search;
+  *pnext=_entry;
+  return _root;
+}
+
+/*Creates a list of Huffman tree nodes for the given frequency table, sorted in
+   ascending order.
+  _freqs: A list of frequency counts.
+          All counts less than 1 will be upgraded to 1.
+  Return: A pointer to the first tree node in the list.
+          At this point, the nodes just form a list, and are not arranged in a
+           single tree.*/
+static oc_huff_entry *huff_list_create(oc_huff_entry _entries[TH_NDCT_TOKENS],
+ const ogg_int64_t _freqs[TH_NDCT_TOKENS]){
+  oc_huff_entry *root;
+  int            ti;
+  root=NULL;
+  for(ti=0;ti<TH_NDCT_TOKENS;ti++){
+    oc_huff_entry *entry;
+    /*Create a new entry for this value.*/
+    entry=_entries+ti;
+    entry->children[0]=entry->children[1]=NULL;
+    entry->token=ti;
+    entry->min_token=ti;
+    entry->freq=_freqs[ti]<<5;
+    if(entry->freq<=0)entry->freq=1;
+    root=huff_list_ins(root,entry);
+  }
+  return root;
+}
+
+/*Builds a complete Huffman code for a given frequency table.
+  _codes: The array to store the Huffman codes in.
+  _freqs: The frequency table to build the tree from.*/
+static void huff_code_build(th_huff_code _codes[TH_NDCT_TOKENS],
+ const ogg_int64_t _freqs[TH_NDCT_TOKENS]){
+  oc_huff_entry  entries[(TH_NDCT_TOKENS<<1)-1];
+  oc_huff_entry *root;
+  oc_huff_entry *next;
+  /*Create an initial sorted list of what will become the leaf nodes of the
+     tree.*/
+  root=huff_list_create(entries,_freqs);
+  next=entries+TH_NDCT_TOKENS;
+  /*Merge pairs of nodes until the tree is complete.*/
+  while(root->next!=NULL){
+    oc_huff_entry *entry;
+    entry=next++;
+    entry->children[0]=root;
+    entry->children[1]=root->next;
+    /*Sort the codes so that the branch containing the smaller minimum token
+       value is on the left.
+      This ensures that a bitstream of all 0's decodes to an EOB token, which
+       is useful if a packet gets truncated.*/
+    if(root->next->min_token<root->min_token){
+      entry->children[0]=root->next;
+      entry->children[1]=root;
+    }
+    entry->min_token=entry->children[0]->min_token;
+    entry->token=-1;
+    entry->freq=root->freq+root->next->freq;
+    root=huff_list_ins(root->next->next,entry);
+  }
+  /*Create the Huffman codes corresponding to the generated tree.*/
+  huff_codes_create(root,_codes,0,0);
+}
+
+/*Builds a complete Huffman code for a given frequency table.
+  _codes: The array to store the Huffman codes in.
+  _freqs: The frequency table to build the tree from.*/
+static void huff_code_buildi(th_huff_code _codes[TH_NDCT_TOKENS],
+ const int _freqs[TH_NDCT_TOKENS]){
+  ogg_int64_t freqs[TH_NDCT_TOKENS];
+  int         ti;
+  for(ti=0;ti<TH_NDCT_TOKENS;ti++)freqs[ti]=_freqs[ti];
+  huff_code_build(_codes,freqs);
+}
+
+/*Prints C code for an array of Huffman codes.*/
+static void huff_codes_print(const char *_symbol,
+ th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]){
+  int maxlen;
+  int ti;
+  int tj;
+  maxlen=0;
+  fprintf(stderr,"th_huff_code %s[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]={",
+   _symbol);
+  for(ti=0;ti<TH_NHUFFMAN_TABLES;ti++){
+    for(tj=0;tj<TH_NDCT_TOKENS;tj++){
+      if(_codes[ti][tj].nbits>maxlen)maxlen=_codes[ti][tj].nbits;
+    }
+  }
+  maxlen=maxlen+3>>2;
+  for(ti=0;ti<TH_NHUFFMAN_TABLES;ti++){
+    if(ti>0)fprintf(stderr,",");
+    fprintf(stderr,"\n  {");
+    for(tj=0;tj<TH_NDCT_TOKENS;tj++){
+      if(tj>0)fprintf(stderr,",");
+      if((tj&3)==0)fprintf(stderr,"\n    ");
+      fprintf(stderr,"{0x%0*X,%2i}",maxlen,
+       _codes[ti][tj].pattern,_codes[ti][tj].nbits);
+    }
+    fprintf(stderr,"\n  }");
+  }
+  fprintf(stderr,"\n};\n");
+}
+
+
+
+/*Farthest point clustering and k-means clustering code based on work
+   originally by Nathan E. Egge.*/
+
+/*Compute the total number of tokens in a frequency count table.*/
+int count_tokens(const int *_freqs,int _nfreqs){
+  int ti;
+  int c;
+  c=0;
+  /*LOOP VECTORIZES.*/
+  for(ti=0;ti<_nfreqs;ti++)c+=_freqs[ti];
+  return c;
+}
+
+/*Compute the quantized cross entropy of a given vector by counting the number
+   of bits it takes to encode it with the Huffman table from another vector.*/
+int count_bits(const int *_freqs,int _nfreqs,const th_huff_code *_codes){
+  int ti;
+  int c;
+  c=0;
+  for(ti=0;ti<_nfreqs;ti++)c+=_freqs[ti]*_codes[ti].nbits;
+  return c;
+}
+
+typedef struct oc_tok_vec oc_tok_vec;
+
+struct oc_tok_vec{
+  const int *freqs;
+  int        entropy;
+  int        dist;
+  int        idx;
+};
+
+#define NDC_TOKENS  (TH_NDCT_TOKENS)
+#define NAC_TOKENS  (TH_NDCT_TOKENS<<2)
+#define NTOKENS_MAX (OC_MAX(NDC_TOKENS,NAC_TOKENS))
+
+void oc_tok_vec_init(oc_tok_vec *_vec,const int *_freqs,int _nfreqs){
+  th_huff_code codes[NTOKENS_MAX];
+  int          ti;
+  _vec->freqs=_freqs;
+  for(ti=0;ti<_nfreqs;ti+=TH_NDCT_TOKENS)huff_code_buildi(codes+ti,_freqs+ti);
+  _vec->entropy=count_bits(_freqs,_nfreqs,codes);
+  _vec->dist=INT_MAX;
+  _vec->idx=-1;
+}
+
+/*Farthest point clustering.
+  At each step, a new cluster center is added that is the vector that is the
+   farthest from any of the existing cluster centers.
+  Return: The total number of wasted bits.*/
+ogg_int64_t tok_vecs_fpc(oc_tok_vec *_vecs,long _nvecs,int _nfreqs,
+ int _cis[16]){
+  ogg_int64_t ret;
+  long        vi;
+  int         best_ntoks;
+  int         best_vi;
+  int         ntoks;
+  int         ti;
+  int         cii;
+  /*Initialize the first cluster as the frame with the most tokens.*/
+  best_ntoks=best_vi=-1;
+  for(vi=0;vi<_nvecs;vi++){
+    ntoks=count_tokens(_vecs[vi].freqs,_nfreqs);
+    if(ntoks>best_ntoks){
+      best_ntoks=ntoks;
+      best_vi=vi;
+    }
+  }
+  for(cii=0;cii<16;cii++){
+    int          dist;
+    int          max_dist;
+    int          max_ntoks;
+    th_huff_code codes[NTOKENS_MAX];
+    _cis[cii]=best_vi;
+    /*Build the optimal Huffman code for the new cluster center.*/
+    for(ti=0;ti<_nfreqs;ti+=TH_NDCT_TOKENS){
+      huff_code_buildi(codes+ti,_vecs[best_vi].freqs+ti);
+    }
+    /*Update cluster membership to see if the new cluster center is closer.*/
+    max_dist=0;
+    max_ntoks=0;
+    ret=0;
+    for(vi=0;vi<_nvecs;vi++){
+      dist=count_bits(_vecs[vi].freqs,_nfreqs,codes)-_vecs[vi].entropy;
+      if(dist<=_vecs[vi].dist){
+        _vecs[vi].dist=dist;
+        _vecs[vi].idx=cii;
+      }
+      else dist=_vecs[vi].dist;
+      ret+=dist;
+      ntoks=count_tokens(_vecs[vi].freqs,_nfreqs);
+      /*The distances are inverse weighted by the number of tokens, so that we
+         are measuring the average number of bits wasted, not the total.*/
+      if(dist*(ogg_int64_t)max_ntoks>=max_dist*(ogg_int64_t)ntoks){
+        max_dist=dist;
+        max_ntoks=ntoks;
+        best_vi=vi;
+      }
+    }
+  }
+  fprintf(stderr,"After FPC: %lli wasted bits.\n",(long long)ret);
+  return ret;
+}
+
+/*A single iteration of K-means clustering.
+  New cluster centers are computed from the current cluster members, and then
+   the numbers are redistributed to belong to the new closest clusters.
+  Return: The total number of wasted bits.*/
+ogg_int64_t tok_vecs_kmeans(oc_tok_vec *_vecs,long _nvecs,int _nfreqs,
+ th_huff_code _codes[16][NTOKENS_MAX],int *_converged){
+  ogg_int64_t  freqs[16][NTOKENS_MAX];
+  ogg_int64_t  ret;
+  int          converged;
+  long         vi;
+  int          ti;
+  int          ci;
+  /*Gather the frequency statistics for all the clusters.*/
+  memset(freqs,0,sizeof(freqs));
+  for(vi=0;vi<_nvecs;vi++)for(ti=0;ti<_nfreqs;ti++){
+    freqs[_vecs[vi].idx][ti]+=_vecs[vi].freqs[ti];
+  }
+  /*Build the new Huffman codes for these clusters.*/
+  for(ci=0;ci<16;ci++)for(ti=0;ti<_nfreqs;ti+=TH_NDCT_TOKENS){
+    huff_code_build(_codes[ci]+ti,freqs[ci]+ti);
+  }
+  /*Re-assign points into the new clusters.*/
+  converged=1;
+  ret=0;
+  for(vi=0;vi<_nvecs;vi++){
+    int old_idx;
+    old_idx=_vecs[vi].idx;
+    _vecs[vi].dist=INT_MAX;
+    _vecs[vi].idx=0;
+    for(ci=0;ci<16;ci++){
+      int dist;
+      dist=count_bits(_vecs[vi].freqs,_nfreqs,_codes[ci])-_vecs[vi].entropy;
+      if(dist<=_vecs[vi].dist){
+        _vecs[vi].dist=dist;
+        _vecs[vi].idx=ci;
+      }
+    }
+    if(_vecs[vi].idx!=old_idx)converged=0;
+    ret+=_vecs[vi].dist;
+  }
+  fprintf(stderr,"After K-means: %lli wasted bits.\n",(long long int)ret);
+  *_converged=converged;
+  return ret;
+}
+
+/*Initialize a set of token vectors from the given frame statistics.*/
+long tok_vecs_init(oc_tok_vec **_dc_vecs,oc_tok_vec **_ac_vecs,
+ const oc_frame_tok_hist *_tok_hists,long _ntok_hists){
+  oc_tok_vec *dc_vecs;
+  oc_tok_vec *ac_vecs;
+  long        vi;
+  long        fi;
+  dc_vecs=(oc_tok_vec *)_ogg_malloc((_ntok_hists<<1)*sizeof(*dc_vecs));
+  ac_vecs=(oc_tok_vec *)_ogg_malloc((_ntok_hists<<1)*sizeof(*ac_vecs));
+  for(fi=vi=0;fi<_ntok_hists;fi++){
+    oc_tok_vec_init(dc_vecs+vi,_tok_hists[fi].tok_hist[0][0],NDC_TOKENS);
+    oc_tok_vec_init(ac_vecs+vi,_tok_hists[fi].tok_hist[0][1],NAC_TOKENS);
+    vi++;
+    oc_tok_vec_init(dc_vecs+vi,_tok_hists[fi].tok_hist[1][0],NDC_TOKENS);
+    oc_tok_vec_init(ac_vecs+vi,_tok_hists[fi].tok_hist[1][1],NAC_TOKENS);
+    vi++;
+  }
+  *_dc_vecs=dc_vecs;
+  *_ac_vecs=ac_vecs;
+  return vi;
+}
+
+
+
+typedef struct th_rehuff_ctx      th_rehuff_ctx;
+typedef struct page_queue         page_queue;
+typedef struct ov_passthrough_ctx ov_passthrough_ctx;
+
+struct th_rehuff_ctx{
+  ogg_stream_state  to;
+  ogg_stream_state  tp;
+  ogg_page          og;
+  unsigned char    *page_data;
+  int               cpage_data;
+  long              serialno;
+  int               processing_headers;
+  int               page_ready;
+  th_info           ti;
+  th_comment        tc;
+  th_setup_info    *ts;
+  th_rec_ctx       *tr;
+};
+
+static void th_rehuff_init(th_rehuff_ctx *_ctx,const ogg_stream_state *_to,
+ const th_info *_ti,int _processing_headers){
+  /*Copy the preliminary data used to parse the BOS packet.*/
+  memcpy(&_ctx->to,_to,sizeof(_ctx->to));
+  _ctx->serialno=_to->serialno;
+  _ctx->processing_headers=_processing_headers;
+  memcpy(&_ctx->ti,_ti,sizeof(_ctx->ti));
+  /*Init supporting Theora structures needed in header parsing */
+  th_comment_init(&_ctx->tc);
+  _ctx->ts=NULL;
+  _ctx->page_ready=0;
+  _ctx->page_data=NULL;
+  _ctx->cpage_data=0;
+  ogg_stream_init(&_ctx->tp,_ctx->serialno);
+}
+
+static void th_rehuff_clear(th_rehuff_ctx *_ctx){
+  ogg_stream_clear(&_ctx->to);
+  ogg_stream_clear(&_ctx->tp);
+  _ogg_free(_ctx->page_data);
+  th_info_clear(&_ctx->ti);
+  th_comment_clear(&_ctx->tc);
+  th_setup_free(_ctx->ts);
+  th_recode_free(_ctx->tr);
+}
+
+static void th_rehuff_copy_page_data(th_rehuff_ctx *_ctx){
+  int npage_data;
+  npage_data=_ctx->og.header_len+_ctx->og.body_len;
+  if(_ctx->cpage_data<npage_data){
+    _ctx->page_data=(unsigned char *)_ogg_realloc(_ctx->page_data,npage_data);
+    _ctx->cpage_data=npage_data;
+  }
+  memcpy(_ctx->page_data,_ctx->og.header,_ctx->og.header_len);
+  memcpy(_ctx->page_data+_ctx->og.header_len,_ctx->og.body,_ctx->og.body_len);
+  _ctx->og.header=_ctx->page_data;
+  _ctx->og.body=_ctx->page_data+_ctx->og.header_len;
+}
+
+static int th_rehuff_pagein(th_rehuff_ctx *_ctx,ogg_page *_og){
+  ogg_packet op;
+  int        ret;
+  ret=ogg_stream_pagein(&_ctx->to,_og);
+  if(ret<0)return ret;
+  /*Recode all the packets available.*/
+  while(ogg_stream_packetout(&_ctx->to,&op)>0){
+    int err;
+    if(!th_packet_isheader(&op)){
+     ogg_packet oq;
+     err=th_recode_packet_rewrite(_ctx->tr,&op,&oq);
+     if(err<0){
+       ret=err;
+       break;
+     }
+     ogg_stream_packetin(&_ctx->tp,&oq);
+    }
+  }
+  /*TODO: Also flush packets after a certain elapsed time.*/
+  if(!_ctx->page_ready){
+    _ctx->page_ready=ogg_stream_pageout(&_ctx->tp,&_ctx->og)>0;
+    if(_ctx->page_ready)th_rehuff_copy_page_data(_ctx);
+  }
+  return ret;
+}
+
+static double th_rehuff_pagetime(th_rehuff_ctx *_ctx,int _flush){
+  if(!_ctx->page_ready){
+    if(!_flush)return -2;
+    _ctx->page_ready=ogg_stream_flush(&_ctx->tp,&_ctx->og)>0;
+    if(_ctx->page_ready)th_rehuff_copy_page_data(_ctx);
+    else return -2;
+  }
+  return th_granule_time(_ctx->tr,ogg_page_granulepos(&_ctx->og));
+}
+
+static size_t th_rehuff_writepage(th_rehuff_ctx *_ctx,FILE *_out){
+  size_t ret;
+  ret=fwrite(_ctx->og.header,1,_ctx->og.header_len,_out)+
+   fwrite(_ctx->og.body,1,_ctx->og.body_len,_out);
+  if(_ctx->processing_headers){
+    _ctx->page_ready=ogg_stream_flush(&_ctx->tp,&_ctx->og)>0;
+    if(_ctx->page_ready)th_rehuff_copy_page_data(_ctx);
+    else _ctx->processing_headers=0;
+  }
+  else{
+    _ctx->page_ready=ogg_stream_pageout(&_ctx->tp,&_ctx->og)>0;
+    if(_ctx->page_ready)th_rehuff_copy_page_data(_ctx);
+  }
+  return ret;
+}
+
+struct page_queue{
+  ogg_page       page;
+  page_queue    *next;
+  page_queue    *prev;
+  unsigned char  data[1];
+};
+
+struct ov_passthrough_ctx{
+  vorbis_info       vi;
+  vorbis_dsp_state  vd;
+  long              serialno;
+  page_queue       *head;
+  page_queue       *tail;
+};
+
+static void ov_passthrough_init(ov_passthrough_ctx *_ctx,
+ const vorbis_info *_vi,long _serialno);
+static void ov_passthrough_clear(ov_passthrough_ctx *_ctx);
+static int ov_passthrough_queuepage(ov_passthrough_ctx *_ctx,ogg_page *_og);
+static page_queue *ov_passthrough_dequeuepage(ov_passthrough_ctx *_ctx);
+
+static void ov_passthrough_init(ov_passthrough_ctx *_ctx,
+ const vorbis_info *_vi,long _serialno){
+  memcpy(&_ctx->vi,_vi,sizeof(_ctx->vi));
+  vorbis_analysis_init(&_ctx->vd,&_ctx->vi);
+  _ctx->serialno=_serialno;
+  _ctx->head=_ctx->tail=NULL;
+}
+
+static void ov_passthrough_clear(ov_passthrough_ctx *_ctx){
+  while(_ctx->tail!=NULL)_ogg_free(ov_passthrough_dequeuepage(_ctx));
+  vorbis_dsp_clear(&_ctx->vd);
+  vorbis_info_clear(&_ctx->vi);
+}
+
+static int ov_passthrough_queuepage(ov_passthrough_ctx *_ctx,ogg_page *_og){
+  page_queue *oq;
+  /*Only queue pages that belong to our stream.*/
+  if(ogg_page_serialno(_og)!=_ctx->serialno)return 0;
+  /*The page data gets trampled when the next page is read from the stream, so
+     make a copy of it.*/
+  oq=(page_queue *)_ogg_malloc(
+   _ogg_offsetof(page_queue,data)+_og->header_len+_og->body_len);
+  memcpy(&oq->page,_og,sizeof(oq->page));
+  oq->page.header=oq->data;
+  memcpy(oq->page.header,_og->header,_og->header_len);
+  oq->page.body=oq->data+_og->header_len;
+  memcpy(oq->page.body,_og->body,_og->body_len);
+  oq->next=_ctx->head;
+  oq->prev=NULL;
+  if(_ctx->tail==NULL)_ctx->tail=oq;
+  else oq->next->prev=oq;
+  _ctx->head=oq;
+  return 1;
+}
+
+static page_queue *ov_passthrough_dequeuepage(ov_passthrough_ctx *_ctx){
+  page_queue *oq;
+  oq=_ctx->tail;
+  _ctx->tail=oq->prev;
+  if(_ctx->tail==NULL)_ctx->head=NULL;
+  else oq->prev->next=NULL;
+  return oq;
+}
+
+static double ov_passthrough_pagetime(ov_passthrough_ctx *_ctx,int _flush){
+  if(_ctx->tail==NULL)return -2;
+  return vorbis_granule_time(&_ctx->vd,ogg_page_granulepos(&_ctx->tail->page));
+}
+
+static size_t ov_passthrough_writepage(ov_passthrough_ctx *_ctx,FILE *_out){
+  page_queue *oq;
+  size_t      ret;
+  oq=ov_passthrough_dequeuepage(_ctx);
+  ret=fwrite(oq->data,1,oq->page.header_len+oq->page.body_len,_out);
+  _ogg_free(oq);
+  return ret;
+}
+
+typedef int    (*stream_pagein_func)(void *_stream,ogg_page *_og);
+typedef double (*stream_pagetime_func)(void *_stream,int _flush);
+typedef size_t (*stream_writepage_func)(void *_stream,FILE *_out);
+typedef struct stream_ctx_vtbl stream_ctx_vtbl;
+typedef struct stream_ctx      stream_ctx;
+
+struct stream_ctx_vtbl{
+  stream_pagein_func    pagein;
+  stream_pagetime_func  pagetime;
+  stream_writepage_func writepage;
+};
+
+struct stream_ctx{
+  const stream_ctx_vtbl *vtbl;
+  void                  *ctx;
+};
+
+static void write_pages(stream_ctx *_sos,int _nsos,int _flush,FILE *_out){
+  double min_time;
+  int    min_si;
+  int    nready;
+  int    si;
+  for(;;){
+    min_time=DBL_MAX;
+    min_si=-1;
+    nready=0;
+    for(si=0;si<_nsos;si++){
+      double time;
+      /*Write out any header pages.
+        Technically checking for time!=0 is not a reliable check if a page is
+         not a header page, but because we process pages in the order they
+         appear in the input, in this case it works out even if the check
+         fails.*/
+      for(;;){
+        time=(*_sos[si].vtbl->pagetime)(_sos[si].ctx,_flush);
+        /*Write any header or intermediate pages immediately.*/
+        if(time!=0&&time!=-1)break;
+        (*_sos[si].vtbl->writepage)(_sos[si].ctx,_out);
+      }
+      if(time>0){
+        if(time<min_time){
+          min_time=time;
+          min_si=si;
+        }
+        nready++;
+      }
+    }
+    /*If everyone has a data page, or we are flushing the last pages and
+       there's at least one, write out the earliest.*/
+    if(nready==_nsos||_flush&&nready>0){
+      (*_sos[min_si].vtbl->writepage)(_sos[min_si].ctx,_out);
+    }
+    else break;
+  }
+}
+
+static const stream_ctx_vtbl STREAM_STATE_VTBL={
+  (stream_pagein_func)ogg_stream_pagein,
+  NULL,
+  NULL
+};
+
+static const stream_ctx_vtbl TH_REHUFF_VTBL={
+  (stream_pagein_func)th_rehuff_pagein,
+  (stream_pagetime_func)th_rehuff_pagetime,
+  (stream_writepage_func)th_rehuff_writepage
+};
+
+static const stream_ctx_vtbl OV_PASSTHROUGH_VTBL={
+  (stream_pagein_func)ov_passthrough_queuepage,
+  (stream_pagetime_func)ov_passthrough_pagetime,
+  (stream_writepage_func)ov_passthrough_writepage
+};
+
+static void stream_ctx_add(stream_ctx **_sos,int *_nsos,int *_csos,
+ const stream_ctx_vtbl *_vtbl,void *_ctx){
+  stream_ctx *sos;
+  int         nsos;
+  int         csos;
+  sos=*_sos;
+  nsos=*_nsos;
+  csos=*_csos;
+  if(nsos>=csos){
+    csos=csos<<1|1;
+    sos=(stream_ctx *)_ogg_realloc(sos,csos*sizeof(*sos));
+  }
+  sos[nsos].vtbl=_vtbl;
+  sos[nsos].ctx=_ctx;
+  nsos++;
+  *_sos=sos;
+  *_nsos=nsos;
+  *_csos=csos;
+}
+
+const char *optstring="o:s:";
+
+const struct option options[]={
+  {"output",required_argument,NULL,'o'},
+  {"output-stats",required_argument,NULL,'s'},
+  /*{"input-stats",required_argument,NULL,'S'},*/
+  {NULL,0,NULL,0}
+};
+
+
+
+/*Grab some more compressed bitstream and sync it for page extraction.*/
+size_t buffer_data(FILE *_fin,ogg_sync_state *_oy){
+  char   *buf;
+  size_t  bytes;
+  buf=ogg_sync_buffer(_oy,4096);
+  bytes=fread(buf,1,4096,_fin);
+  ogg_sync_wrote(_oy,(long)bytes);
+  return bytes;
+}
+
+/*Push a page into the appropriate steam.*/
+static int queue_page(stream_ctx *_sos,int _nsos,ogg_page *_og){
+  int si;
+  /*This can be done blindly; a stream won't accept a page that doesn't belong
+     to it.*/
+  for(si=0;si<_nsos;si++){
+    if(!(*_sos[si].vtbl->pagein)(_sos[si].ctx,_og))break;
+  }
+  return 0;
+}
+
+static void usage(void){
+  fprintf(stderr,"Usage: rehuff [-s <statsout.txt> ] "
+   "<infile.ogv> <outfile.ogv>\n");
+  exit(-1);
+}
+
+static void oc_process_bos0(ogg_page *_og,th_rehuff_ctx **_rehuffs,
+ int *_nrehuffs,int *_crehuffs,stream_ctx **_sos,int *_nsos,int *_csos){
+  th_rehuff_ctx    *rehuffs;
+  int               nrehuffs;
+  int               crehuffs;
+  ogg_stream_state  test;
+  ogg_packet        op;
+  th_info           ti;
+  int               theorap;
+  rehuffs=*_rehuffs;
+  nrehuffs=*_nrehuffs;
+  crehuffs=*_crehuffs;
+  ogg_stream_init(&test,ogg_page_serialno(_og));
+  ogg_stream_pagein(&test,_og);
+  /*If we don't get a packet back, something is wrong.*/
+  if(!ogg_stream_packetpeek(&test,&op)){
+    fprintf(stderr,
+     "Warning: BOS page encountered without a complete packet.\n");
+    ogg_stream_clear(&test);
+    return;
+  }
+  /*Identify the codec: try Theora.*/
+  th_info_init(&ti);
+  theorap=th_decode_headerin(&ti,NULL,NULL,&op);
+  if(theorap>=0){
+    /*It is Theora.*/
+    if(nrehuffs>=crehuffs){
+      int ri;
+      crehuffs=crehuffs<<1|1;
+      rehuffs=(th_rehuff_ctx *)_ogg_realloc(rehuffs,
+       crehuffs*sizeof(*rehuffs));
+      for(ri=0;ri<nrehuffs;ri++)(*_sos)[ri].ctx=&rehuffs[ri].to;
+    }
+    th_rehuff_init(rehuffs+nrehuffs,&test,&ti,theorap);
+    /*Advance past the successfully processed header.*/
+    ogg_stream_packetout(&rehuffs[nrehuffs].to,NULL);
+    stream_ctx_add(_sos,_nsos,_csos,&STREAM_STATE_VTBL,&rehuffs[nrehuffs].to);
+    nrehuffs++;
+  }
+  else{
+    /*Whatever it is, we don't care about it.*/
+    th_info_clear(&ti);
+    ogg_stream_clear(&test);
+  }
+  *_rehuffs=rehuffs;
+  *_nrehuffs=nrehuffs;
+  *_crehuffs=crehuffs;
+}
+
+static void oc_process_bos1(ogg_page *_og,th_rehuff_ctx *_rehuffs,
+ int _nrehuffs,ov_passthrough_ctx **_passthroughs,int *_npassthroughs,
+ int *_cpassthroughs,stream_ctx **_sos,int *_nsos,int *_csos){
+  ov_passthrough_ctx *passthroughs;
+  int                 npassthroughs;
+  int                 cpassthroughs;
+  ogg_stream_state    test;
+  ogg_packet          op;
+  th_info             ti;
+  int                 theorap;
+  int                 vorbisp;
+  int                 ri;
+  passthroughs=*_passthroughs;
+  npassthroughs=*_npassthroughs;
+  cpassthroughs=*_cpassthroughs;
+  ogg_stream_init(&test,ogg_page_serialno(_og));
+  ogg_stream_pagein(&test,_og);
+  /*If we don't get a packet back, something is wrong.*/
+  if(!ogg_stream_packetpeek(&test,&op)){
+    ogg_stream_clear(&test);
+    return;
+  }
+  /*Identify the codec: try Theora.*/
+  th_info_init(&ti);
+  theorap=th_decode_headerin(&ti,NULL,NULL,&op);
+  if(theorap>=0){
+    th_rehuff_ctx *rehuff;
+    for(ri=0;ri<_nrehuffs;ri++){
+      if(_rehuffs[ri].serialno==test.serialno)break;
+    }
+    if(ri>=_nrehuffs){
+      fprintf(stderr,"Error: Stream headers changed after first pass.\n");
+      return;
+    }
+    rehuff=_rehuffs+ri;
+    if(!rehuff->page_ready){
+      ogg_packet op;
+      ogg_stream_clear(&rehuff->to);
+      ogg_stream_init(&rehuff->to,rehuff->serialno);
+      th_recode_flushheader(rehuff->tr,&rehuff->tc,&op);
+      ogg_stream_packetin(&rehuff->tp,&op);
+      ogg_stream_pageout(&rehuff->tp,&rehuff->og);
+      th_rehuff_copy_page_data(rehuff);
+      rehuff->page_ready=1;
+      /*processing_headers now means "flush pages until we run out", to ensure
+         they all appear before any data pages.
+        We don't want to start doing that until all the BOS pages are written.*/
+      rehuff->processing_headers=0;
+    }
+  }
+  else{
+    vorbis_info vi;
+    int         pi;
+    vorbis_info_init(&vi);
+    vorbisp=vorbis_synthesis_headerin(&vi,NULL,&op);
+    if(vorbisp>=0){
+      ov_passthrough_ctx *passthrough;
+      if(npassthroughs>=cpassthroughs){
+        cpassthroughs=cpassthroughs<<1|1;
+        passthroughs=(ov_passthrough_ctx *)_ogg_realloc(passthroughs,
+         cpassthroughs*sizeof(*passthroughs));
+        *_nsos=0;
+        for(ri=0;ri<_nrehuffs;ri++){
+          stream_ctx_add(_sos,_nsos,_csos,&TH_REHUFF_VTBL,_rehuffs+ri);
+        }
+        for(pi=0;pi<npassthroughs;pi++){
+          stream_ctx_add(_sos,_nsos,_csos,&OV_PASSTHROUGH_VTBL,passthroughs+pi);
+        }
+      }
+      passthrough=passthroughs+npassthroughs++;
+      ov_passthrough_init(passthrough,&vi,test.serialno);
+      stream_ctx_add(_sos,_nsos,_csos,&OV_PASSTHROUGH_VTBL,passthrough);
+      ov_passthrough_queuepage(passthrough,_og);
+    }
+    else{
+      fprintf(stderr,"Warning: Ignoring unknown stream with serialno 0x%08lX\n",
+       test.serialno);
+    }
+  }
+  *_passthroughs=passthroughs;
+  *_npassthroughs=npassthroughs;
+  *_cpassthroughs=cpassthroughs;
+}
+
+
+int main(int _argc,char **_argv){
+  th_rehuff_ctx      *rehuffs;
+  int                 nrehuffs;
+  int                 crehuffs;
+  ov_passthrough_ctx *passthroughs;
+  int                 npassthroughs;
+  int                 cpassthroughs;
+  stream_ctx         *sos;
+  int                 nsos;
+  int                 csos;
+  ogg_sync_state      oy;
+  ogg_sync_state      oz;
+  ogg_page            og;
+  ogg_page            og0;
+  ogg_page            og1;
+  ogg_packet          op;
+  FILE               *infile;
+  FILE               *outfile;
+  /*FILE               *statsin;*/
+  FILE               *statsout;
+  fpos_t              chain_start;
+  int                 long_option_index;
+  int                 have_bos0;
+  int                 have_bos1;
+  int                 done;
+  int                 c;
+  int                 ret;
+  int                 ri;
+#if defined(_WIN32)
+  /*We need to set stdin/stdout to binary mode on 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
+  infile=NULL;
+  outfile=NULL;
+  /*statsin=NULL;*/
+  statsout=NULL;
+  /*Process option arguments.*/
+  for(;;){
+    c=getopt_long(_argc,_argv,optstring,options,&long_option_index);
+    if(c==EOF)break;
+    switch(c){
+      case 'o':{
+        if(strcmp(optarg,"-")){
+          outfile=fopen(optarg,"wb");
+          if(outfile==NULL){
+            fprintf(stderr,"Unable to open output file '%s'.\n",optarg);
+            exit(1);
+          }
+        }
+        else outfile=stdout;
+      }break;
+      case 's':{
+        if(strcmp(optarg,"-")){
+          statsout=fopen(optarg,"ab");
+          if(statsout==NULL){
+            fprintf(stderr,
+             "Unable to open statistics output file '%s'.\n",optarg);
+            exit(1);
+          }
+        }
+        else statsout=stdout;
+      }break;
+      /*case 'S':{
+        if(!strcmp(optarg,"-")){
+          statsin=fopen(optarg,"rb");
+          if(statsin==NULL){
+            fprintf(stderr,
+             "Unable to open statistics input file '%s'.\n",optarg);
+            exit(1);
+          }
+        }
+        else statsin=stdin;
+      }break;*/
+      default:usage();break;
+    }
+  }
+  if(optind<_argc){
+    infile=fopen(_argv[optind],"rb");
+    if(infile==NULL){
+      fprintf(stderr,"Unable to open input file '%s'.\n",_argv[optind]);
+      exit(1);
+    }
+    optind++;
+  }
+  if(outfile==NULL&&optind<_argc){
+    outfile=fopen(_argv[optind],"wb");
+    if(outfile==NULL){
+      fprintf(stderr,"Unable to open output file '%s'.\n",_argv[optind]);
+      exit(1);
+    }
+    optind++;
+  }
+  if(infile==NULL&&outfile==NULL||optind<_argc)usage();
+  if(infile==NULL)infile=stdin;
+  if(outfile==NULL)outfile=stdout;
+  if(fseek(infile,0,SEEK_END)==-1||fseek(infile,0,SEEK_SET)==-1){
+    fprintf(stderr,"Cannot seek on input file.\n");
+    exit(1);
+  }
+  sos=NULL;
+  csos=0;
+  rehuffs=NULL;
+  crehuffs=0;
+  passthroughs=NULL;
+  cpassthroughs=0;
+  /*Start up Ogg stream synchronization layer.*/
+  ogg_sync_init(&oy);
+  ogg_sync_init(&oz);
+  have_bos0=0;
+  have_bos1=0;
+  /*Loop over the links of a chained file.*/
+  do{
+    fgetpos(infile,&chain_start);
+    /*Parse the headers.*/
+    nsos=0;
+    nrehuffs=0;
+    /*Only interested Theora streams.
+      All others are ignored.*/
+    for(done=0;!done;){
+      /*We have a BOS page encountered during a previous chain segment.*/
+      if(have_bos0){
+        oc_process_bos0(&og0,&rehuffs,&nrehuffs,&crehuffs,&sos,&nsos,&csos);
+        have_bos0=0;
+      }
+      else{
+        if(!buffer_data(infile,&oy))break;
+        while(ogg_sync_pageout(&oy,&og)>0){
+          /*Is this a mandated initial header? If not, stop parsing.*/
+          if(!ogg_page_bos(&og)){
+            /*Don't leak the page; get it into the appropriate stream.*/
+            queue_page(sos,nsos,&og);
+            done=1;
+            break;
+          }
+          oc_process_bos0(&og,&rehuffs,&nrehuffs,&crehuffs,&sos,&nsos,&csos);
+        }
+      }
+    }
+    for(;;){
+      /*Try to read in any available headers for any streams.*/
+      for(ri=0;ri<nrehuffs;ri++){
+        while(rehuffs[ri].processing_headers){
+          /*We're expecting more header packets.*/
+          ret=ogg_stream_packetpeek(&rehuffs[ri].to,&op);
+          /*We're ignoring any gaps.
+            If it's a problem, we'll find it soon enough.*/
+          if(ret<0)continue;
+          /*No packet -> stop.*/
+          if(!ret)break;
+          rehuffs[ri].processing_headers=th_decode_headerin(&rehuffs[ri].ti,
+           &rehuffs[ri].tc,&rehuffs[ri].ts,&op);
+          if(rehuffs[ri].processing_headers<0){
+            fprintf(stderr,
+             "Error parsing Theora stream headers; corrupt stream?\n");
+            exit(1);
+          }
+          else if(rehuffs[ri].processing_headers>0){
+            /*Advance past the successfully processed header.*/
+            ogg_stream_packetout(&rehuffs[ri].to,NULL);
+          }
+        }
+      }
+      /*If all Theora streams have all their header packets, stop now so we don't
+         fail if there aren't enough pages in a short stream.*/
+      for(ri=0;ri<nrehuffs;ri++)if(rehuffs[ri].processing_headers)break;
+      if(ri>=nrehuffs)break;
+      /*The header pages/packets will arrive before anything else we care about,
+         or the stream is not obeying spec.*/
+      /*Demux into the appropriate stream.*/
+      if(ogg_sync_pageout(&oy,&og)>0)queue_page(sos,nsos,&og);
+      else{
+        /*Someone needs more data.*/
+        if(!buffer_data(infile,&oy)){
+          fprintf(stderr,"End of file while searching for codec headers.\n");
+          exit(1);
+        }
+      }
+    }
+    /*And now we have it all.
+      Initialize recoders.*/
+    for(ri=0;ri<nrehuffs;ri++){
+      rehuffs[ri].tr=th_recode_alloc(&rehuffs[ri].ti,rehuffs[ri].ts);
+      fprintf(stderr,"Ogg logical stream %lx is Theora %dx%d %.02f fps video\n"
+       "Encoded frame content is %dx%d with %dx%d offset\n",
+       rehuffs[ri].to.serialno,
+       rehuffs[ri].ti.frame_width,rehuffs[ri].ti.frame_height,
+       (double)rehuffs[ri].ti.fps_numerator/rehuffs[ri].ti.fps_denominator,
+       rehuffs[ri].ti.pic_width,rehuffs[ri].ti.pic_height,
+       rehuffs[ri].ti.pic_x,rehuffs[ri].ti.pic_y);
+    }
+    /*Queue any remaining pages from data we buffered but that did not contain
+       headers.*/
+    while(ogg_sync_pageout(&oy,&og)>0)queue_page(sos,nsos,&og);
+    /*On to the main decode loop.*/
+    for(;;){
+      /*Process all the packets from all the Theora streams.*/
+      for(ri=0;ri<nrehuffs;ri++){
+        while(ogg_stream_packetout(&rehuffs[ri].to,&op)>0){
+          th_recode_packetin(rehuffs[ri].tr,&op,NULL);
+        }
+      }
+      if(!buffer_data(infile,&oy))break;
+      while(ogg_sync_pageout(&oy,&og)>0){
+        /*Stop if we encounter a new chain segment.*/
+        if(ogg_page_bos(&og)){
+          /*Save the page for the next chain segment to use.*/
+          memcpy(&og0,&og,sizeof(og0));
+          have_bos0=1;
+          break;
+        }
+        else queue_page(sos,nsos,&og);
+      }
+      if(have_bos0)break;
+    }
+    /*Decode of this chain segment complete.*/
+    for(ri=0;ri<nrehuffs;ri++){
+      th_huff_code       codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS];
+      th_huff_code       cluster_codes[16][NTOKENS_MAX];
+      int                cluster_centers[16];
+      oc_frame_tok_hist *tok_hists;
+      long               ntok_hists;
+      oc_tok_vec        *dc_vecs;
+      oc_tok_vec        *ac_vecs;
+      ogg_int64_t        bits_wasted;
+      ogg_int64_t        granpos;
+      int                converged;
+      long               nvecs;
+      long               fi;
+      int                pli;
+      int                hgi;
+      int                ci;
+      /*Get the token statistics for all the frames.*/
+      th_recode_ctl(rehuffs[ri].tr,TH_RECCTL_GET_TOK_NSTATS,
+       &ntok_hists,sizeof(ntok_hists));
+      th_recode_ctl(rehuffs[ri].tr,TH_RECCTL_GET_TOK_STATS,
+       &tok_hists,sizeof(tok_hists));
+      /*If the user requested output statistics, write some.*/
+      if(statsout!=NULL)for(fi=0;fi<ntok_hists;fi++){
+        for(pli=0;pli<2;pli++){
+          for(hgi=0;hgi<5;hgi++){
+            for(ci=0;ci<TH_NDCT_TOKENS;ci++){
+              fprintf(statsout,"%i%c",tok_hists[fi].tok_hist[pli][hgi][ci],
+               ci+1<TH_NDCT_TOKENS?' ':hgi+1<5?'\t':'\n');
+            }
+          }
+        }
+      }
+      nvecs=tok_vecs_init(&dc_vecs,&ac_vecs,tok_hists,ntok_hists);
+      bits_wasted=tok_vecs_fpc(dc_vecs,nvecs,NDC_TOKENS,cluster_centers);
+      do{
+        bits_wasted=tok_vecs_kmeans(dc_vecs,nvecs,NDC_TOKENS,cluster_codes,
+         &converged);
+      }
+      while(!converged);
+      for(ci=0;ci<16;ci++)memcpy(codes[ci],cluster_codes[ci],sizeof(codes[ci]));
+      bits_wasted=tok_vecs_fpc(ac_vecs,nvecs,NAC_TOKENS,cluster_centers);
+      do{
+        bits_wasted=tok_vecs_kmeans(ac_vecs,nvecs,NAC_TOKENS,cluster_codes,
+         &converged);
+      }
+      while(!converged);
+      for(ci=0;ci<16;ci++){
+        memcpy(codes[ci+16],cluster_codes[ci]+TH_NDCT_TOKENS*0,
+         sizeof(codes[ci+16]));
+        memcpy(codes[ci+32],cluster_codes[ci]+TH_NDCT_TOKENS*1,
+         sizeof(codes[ci+32]));
+        memcpy(codes[ci+48],cluster_codes[ci]+TH_NDCT_TOKENS*2,
+         sizeof(codes[ci+48]));
+        memcpy(codes[ci+64],cluster_codes[ci]+TH_NDCT_TOKENS*3,
+         sizeof(codes[ci+64]));
+      }
+      huff_codes_print("CODES",codes);
+      th_recode_ctl(rehuffs[ri].tr,TH_ENCCTL_SET_HUFFMAN_CODES,
+       codes,sizeof(codes));
+      /*TODO: Detect start offset in input video and correct for it.*/
+      granpos=0;
+      th_recode_ctl(rehuffs[ri].tr,TH_DECCTL_SET_GRANPOS,
+       &granpos,sizeof(granpos));
+    }
+    /*Now read the chain segment a second time and rewrite the packets.*/
+    fsetpos(infile,&chain_start);
+    /*Parse the headers.*/
+    nsos=0;
+    npassthroughs=0;
+    for(ri=0;ri<nrehuffs;ri++){
+      stream_ctx_add(&sos,&nsos,&csos,&TH_REHUFF_VTBL,rehuffs+ri);
+    }
+    /*Only interested in Theora streams.
+      Vorbis streams are passed through.
+      All others are ignored, since we don't know how to re-mux them.*/
+    for(done=0;!done;){
+      /*We have a BOS page encountered during a previous chain segment.*/
+      if(have_bos1){
+        oc_process_bos1(&og1,rehuffs,nrehuffs,&passthroughs,
+         &npassthroughs,&cpassthroughs,&sos,&nsos,&csos);
+        have_bos1=0;
+      }
+      else{
+        if(!buffer_data(infile,&oz))break;
+        while(ogg_sync_pageout(&oz,&og)>0){
+          /*Is this a mandated initial header? If not, stop parsing.*/
+          if(!ogg_page_bos(&og)){
+            /*Don't leak the page; get it into the appropriate stream.*/
+            queue_page(sos,nsos,&og);
+            done=1;
+            break;
+          }
+          oc_process_bos1(&og,rehuffs,nrehuffs,&passthroughs,
+           &npassthroughs,&cpassthroughs,&sos,&nsos,&csos);
+        }
+      }
+      /*Write the new BOS page.*/
+      write_pages(sos,nsos,0,outfile);
+    }
+    /*Queue up the rest of the Theora headers.
+      The rest of the streams will write them out as they come to them.*/
+    for(ri=0;ri<nrehuffs;ri++){
+      ogg_packet op;
+      while(th_recode_flushheader(rehuffs[ri].tr,&rehuffs[ri].tc,&op)>0){
+        ogg_stream_packetin(&rehuffs[ri].tp,&op);
+      }
+      rehuffs[ri].processing_headers=1;
+    }
+    write_pages(sos,nsos,0,outfile);
+    /*Main re-coding loop.*/
+    for(;;){
+      if(!buffer_data(infile,&oz))break;
+      while(ogg_sync_pageout(&oz,&og)>0){
+        /*Stop if we encounter a new chain segment.*/
+        if(ogg_page_bos(&og)){
+          /*Save the page for the next chain segment to use.*/
+          memcpy(&og1,&og,sizeof(og1));
+          have_bos1=1;
+          break;
+        }
+        else{
+          queue_page(sos,nsos,&og);
+          write_pages(sos,nsos,0,outfile);
+        }
+      }
+      if(have_bos1)break;
+    }
+    /*Flush out any remaining pages.*/
+    write_pages(sos,nsos,1,outfile);
+    /*Tear down the structures for this chain segment.*/
+    for(ri=0;ri<nrehuffs;ri++)th_rehuff_clear(rehuffs+ri);
+    for(ri=0;ri<npassthroughs;ri++)ov_passthrough_clear(passthroughs+ri);
+  }
+  while(have_bos0||!(feof(infile)||ferror(infile)));
+  ogg_sync_clear(&oy);
+  ogg_sync_clear(&oz);
+  fclose(outfile);
+  return(0);
+}

Added: trunk/theora-exp/include/Makefile.am
===================================================================
--- trunk/theora-exp/include/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/include/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,3 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = theora

Added: trunk/theora-exp/include/theora/Makefile.am
===================================================================
--- trunk/theora-exp/include/theora/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/include/theora/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,18 @@
+## Process this file with automake to produce Makefile.in
+
+EXTRA_DIST = \
+  theoraenc.h
+
+SUBDIRS = compat
+
+if TH_ENCODER
+TH_ENCODER_FILES= \
+  theoraenc.h
+else
+TH_ENCODER_FILES=
+endif
+
+theoraincludedir = $(includedir)/theora
+
+theorainclude_HEADERS = codec.h theoradec.h $(TH_ENCODER_FILES)
+

Added: trunk/theora-exp/include/theora/codec.h
===================================================================
--- trunk/theora-exp/include/theora/codec.h	                        (rev 0)
+++ trunk/theora-exp/include/theora/codec.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,569 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function:
+  last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $
+
+ ********************************************************************/
+
+/**\mainpage
+ * 
+ * \section intro Introduction
+ *
+ * This is the documentation for the <tt>libtheoradec</tt> and
+ *  <tt>libtheoraenc</tt> C API.
+ * These were written to replace <tt>libtheora</tt>, the current reference
+ *  implementation for <a href="http://www.theora.org/">Theora</a>, a free,
+ *  patent-unencumbered video codec.
+ * Theora is derived from On2's VP3 codec with additional features and
+ *  integration for Ogg multimedia formats by
+ *  <a href="http://www.xiph.org/">the Xiph.Org Foundation</a>.
+ * Complete documentation of the format itself is available in
+ * <a href="http://www.theora.org/doc/Theora_I_spec.pdf">the Theora
+ *  specification</a>.
+ *
+ * \subsection Organization
+ *
+ * The functions documented here are actually subdivided into two separate
+ *  libraries:
+ * - <tt>libtheoraenc</tt>, containing routines exclusive to the encoder.
+ *   You must link to this if you use any of the functions listed in
+ *    \ref encfuncs.
+ * - <tt>libtheoradec</tt>, contains the decoder and shared routines.
+ *   You must link to this if you use any of the functions listed in
+ *    this API, i.e., those listed in \ref basefuncs and \ref decfuncs.*/
+
+/**\file
+ * The shared <tt>libtheoradec</tt> and <tt>libtheoraenc</tt> C API.*/
+
+#if !defined(_O_THEORA_CODEC_H_)
+# define _O_THEORA_CODEC_H_ (1)
+# include <ogg/ogg.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+
+/**\name Return codes*/
+/*@{*/
+/**An invalid pointer was provided.*/
+#define TH_EFAULT     (-1)
+/**An invalid argument was provided.*/
+#define TH_EINVAL     (-10)
+/**The contents of the header were incomplete, invalid, or unexpected.*/
+#define TH_EBADHEADER (-20)
+/**The header does not belong to a Theora stream.*/
+#define TH_ENOTFORMAT (-21)
+/**The bitstream version is too high.*/
+#define TH_EVERSION   (-22)
+/**The specified function is not implemented.*/
+#define TH_EIMPL      (-23)
+/**There were errors in the video data packet.*/
+#define TH_EBADPACKET (-24)
+/**The decoded packet represented a dropped frame.
+   The player can continue to display the current frame, as the contents of the
+    decoded frame buffer have not changed.*/
+#define TH_DUPFRAME   (1)
+/*@}*/
+
+/**The currently defined color space tags.
+ * See <a href="http://www.theora.org/doc/Theora_I_spec.pdf">the Theora
+ *  specification</a>, Chapter 4, for exact details on the meaning of each of
+ *  these color spaces.*/
+typedef enum{
+  /**The color space was not specified at the encoder.
+      It may be conveyed by an external means.*/
+  TH_CS_UNSPECIFIED,
+  /**A color space designed for NTSC content.*/
+  TH_CS_ITU_REC_470M,
+  /**A color space designed for PAL/SECAM content.*/
+  TH_CS_ITU_REC_470BG,
+  /**The total number of currently defined color spaces.*/
+  TH_CS_NSPACES
+}th_colorspace;
+
+/**The currently defined pixel format tags.
+ * See <a href="http://www.theora.org/doc/Theora_I_spec.pdf">the Theora
+ *  specification</a>, Section 4.4, for details on the precise sample
+ *  locations.*/
+typedef enum{
+  /**Chroma decimation by 2 in both the X and Y directions (4:2:0).*/
+  TH_PF_420,
+  /**Currently reserved.*/
+  TH_PF_RSVD,
+  /**Chroma decimation by 2 in the X direction (4:2:2).*/
+  TH_PF_422,
+  /**No chroma decimation (4:4:4).*/
+  TH_PF_444,
+  /**The total number of currently defined pixel formats.*/
+  TH_PF_NFORMATS
+}th_pixel_fmt;
+
+
+
+/**A buffer for a single color plane in an uncompressed image.
+ * This contains the image data in a left-to-right, top-down format.
+ * Each row of pixels is stored contiguously in memory, but successive rows
+ *  need not be.
+ * Use \a ystride to compute the offset of the next row.
+ * The encoder accepts both positive \a ystride values (top-down in memory) and
+ *  negative (bottom-up in memory).
+ * The decoder currently always generates images with positive strides.*/
+typedef struct{
+  /**The width of this plane.*/
+  int            width;
+  /**The height of this plane.*/
+  int            height;
+  /**The offset in bytes between successive rows.*/
+  int            ystride;
+  /**A pointer to the beginning of the first row.*/
+  unsigned char *data;
+}th_img_plane;
+
+/**A complete image buffer for an uncompressed frame.
+ * The chroma planes may be decimated by a factor of two in either direction,
+ *  as indicated by th_info#pixel_fmt.
+ * The width and height of the Y' plane must be multiples of 16.
+ * They may need to be cropped for display, using the rectangle specified by
+ *  th_info#pic_x, th_info#pic_y, th_info#pic_width, and th_info#pic_height.
+ * All samples are 8 bits.
+ * \note The term YUV often used to describe a colorspace is ambiguous.
+ * The exact parameters of the RGB to YUV conversion process aside, in many
+ *  contexts the U and V channels actually have opposite meanings.
+ * To avoid this confusion, we are explicit: the name of the color channels are
+ *  Y'CbCr, and they appear in that order, always.
+ * The prime symbol denotes that the Y channel is non-linear.
+ * Cb and Cr stand for "Chroma blue" and "Chroma red", respectively.*/
+typedef th_img_plane th_ycbcr_buffer[3];
+
+/**Theora bitstream information.
+ * This contains the basic playback parameters for a stream, and corresponds to 
+ *  the initial 'info' header packet.
+ * To initialize an encoder, the application fills in this structure and
+ *  passes it to th_encode_alloc().
+ * A default encoding mode is chosen based on the values of the #quality and
+ *  #target_bitrate fields.
+ * On decode, it is filled in by th_decode_headerin(), and then passed to
+ *  th_decode_alloc().
+ *
+ * Encoded Theora frames must be a multiple of 16 in size;
+ *  this is what the #frame_width and #frame_height members represent.
+ * To handle arbitrary picture sizes, a crop rectangle is specified in the
+ *  #pic_x, #pic_y, #pic_width and #pic_height members.
+ *
+ * All frame buffers contain pointers to the full, padded frame.
+ * However, the current encoder <em>will not</em> reference pixels outside of
+ *  the cropped picture region, and the application does not need to fill them
+ *  in.
+ * The decoder <em>will</em> allocate storage for a full frame, but the
+ *  application <em>should not</em> rely on the padding containing sensible
+ *  data.
+ *
+ * It is also generally recommended that the offsets and sizes should still be
+ *  multiples of 2 to avoid chroma sampling shifts when chroma is sub-sampled.
+ * See <a href="http://www.theora.org/doc/Theora_I_spec.pdf">the Theora
+ *  specification</a>, Section 4.4, for more details.
+ *
+ * Frame rate, in frames per second, is stored as a rational fraction, as is
+ *  the pixel aspect ratio.
+ * Note that this refers to the aspect ratio of the individual pixels, not of
+ *  the overall frame itself.
+ * The frame aspect ratio can be computed from pixel aspect ratio using the
+ *  image dimensions.*/
+typedef struct{
+  /**\name Theora version
+   * Bitstream version information.*/
+  /*@{*/
+  unsigned char  version_major;
+  unsigned char  version_minor;
+  unsigned char  version_subminor;
+  /*@}*/
+  /**The encoded frame width.
+   * This must be a multiple of 16, and less than 1048576.*/
+  ogg_uint32_t   frame_width;
+  /**The encoded frame height.
+   * This must be a multiple of 16, and less than 1048576.*/
+  ogg_uint32_t   frame_height;
+  /**The displayed picture width.
+   * This must be no larger than width.*/
+  ogg_uint32_t   pic_width;
+  /**The displayed picture height.
+   * This must be no larger than height.*/
+  ogg_uint32_t   pic_height;
+  /**The X offset of the displayed picture.
+   * This must be no larger than #frame_width-#pic_width or 255, whichever is
+   *  smaller.*/
+  ogg_uint32_t   pic_x;
+  /**The Y offset of the displayed picture.
+   * This must be no larger than #frame_height-#pic_height, and
+   *  #frame_height-#pic_height-#pic_y must be no larger than 255.
+   * This slightly funny restriction is due to the fact that the offset is
+   *  specified from the top of the image for consistency with the standard
+   *  graphics left-handed coordinate system used throughout this API, while it
+   *  is stored in the encoded stream as an offset from the bottom.*/
+  ogg_uint32_t   pic_y;
+  /**\name Frame rate
+   * The frame rate, as a fraction.
+   * If either is 0, the frame rate is undefined.*/
+  /*@{*/
+  ogg_uint32_t   fps_numerator;
+  ogg_uint32_t   fps_denominator;
+  /*@}*/
+  /**\name Aspect ratio
+   * The aspect ratio of the pixels.
+   * If either value is zero, the aspect ratio is undefined.
+   * If not specified by any external means, 1:1 should be assumed.
+   * The aspect ratio of the full picture can be computed as
+   * \code
+   *  aspect_numerator*pic_width/(aspect_denominator*pic_height).
+   * \endcode */
+  /*@{*/
+  ogg_uint32_t   aspect_numerator;
+  ogg_uint32_t   aspect_denominator;
+  /*@}*/
+  /**The color space.*/
+  th_colorspace  colorspace;
+  /**The pixel format.*/
+  th_pixel_fmt   pixel_fmt;
+  /**The target bit-rate in bits per second.
+     If initializing an encoder with this struct, set this field to a non-zero
+      value to activate CBR encoding by default.*/
+  /*TODO: Current encoder does not support CBR mode, or anything like it.
+    We also don't really know what nominal rate each quality level
+     corresponds to yet.*/
+  int            target_bitrate;
+  /**The target quality level.
+     Valid values range from 0 to 63, inclusive, with higher values giving
+      higher quality.
+     If initializing an encoder with this struct, and #target_bitrate is set
+      to zero, VBR encoding at this quality will be activated by default.*/
+  /*Currently this is set so that a qi of 0 corresponds to distortions of 24
+     times the JND, and each increase by 16 halves that value.
+    This gives us fine discrimination at low qualities, yet effective rate
+     control at high qualities.
+    The qi value 63 is special, however.
+    For this, the highest quality, we use one half of a JND for our threshold.
+    Due to the lower bounds placed on allowable quantizers in Theora, we will
+     not actually be able to achieve quality this good, but this should
+     provide as close to visually lossless quality as Theora is capable of.
+    We could lift the quantizer restrictions without breaking VP3.1
+     compatibility, but this would result in quantized coefficients that are
+     too large for the current bitstream to be able to store.
+    We'd have to redesign the token syntax to store these large coefficients,
+     which would make transcoding complex.*/
+  int            quality;
+  /**The amount to shift to extract the last keyframe number from the granule
+   *  position.
+   * This can be at most 31.
+   * th_info_init() will set this to a default value (currently <tt>6</tt>,
+   *  which is good for streaming applications), but you can set it to 0 to
+   *  make every frame a keyframe.
+   * The maximum distance between key frames is
+   *  <tt>1<<#keyframe_granule_shift</tt>.
+   * The keyframe frequency can be more finely controlled with
+   *  #TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE, which can also be adjusted
+   *  during encoding (for example, to force the next frame to be a keyframe),
+   *  but it cannot be set larger than the amount permitted by this field after
+   *  the headers have been output.*/
+  int            keyframe_granule_shift;
+}th_info;
+
+/**The comment information.
+ *
+ * This structure holds the in-stream metadata corresponding to
+ *  the 'comment' header packet.
+ * The comment header is meant to be used much like someone jotting a quick
+ *  note on the label of a video.
+ * It should be a short, to the point text note that can be more than a couple
+ *  words, but not more than a short paragraph.
+ *
+ * The metadata is stored as a series of (tag, value) pairs, in
+ *  length-encoded string vectors.
+ * The first occurrence of the '=' character delimits the tag and value.
+ * A particular tag may occur more than once, and order is significant.
+ * The character set encoding for the strings is always UTF-8, but the tag
+ *  names are limited to ASCII, and treated as case-insensitive.
+ * See <a href="http://www.theora.org/doc/Theora_I_spec.pdf">the Theora
+ *  specification</a>, Section 6.3.3 for details.
+ *
+ * In filling in this structure, th_decode_headerin() will null-terminate
+ *  the user_comment strings for safety.
+ * However, the bitstream format itself treats them as 8-bit clean vectors,
+ *  possibly containing null characters, and so the length array should be
+ *  treated as their authoritative length.
+ */
+typedef struct th_comment{
+  /**The array of comment string vectors.*/
+  char **user_comments;
+  /**An array of the corresponding length of each vector, in bytes.*/
+  int   *comment_lengths;
+  /**The total number of comment strings.*/
+  int    comments;
+  /**The null-terminated vendor string.
+     This identifies the software used to encode the stream.*/
+  char  *vendor;
+}th_comment;
+
+
+
+/**A single base matrix.*/
+typedef unsigned char th_quant_base[64];
+
+/**A set of \a qi ranges.*/
+typedef struct{
+  /**The number of ranges in the set.*/
+  int                  nranges;
+  /**The size of each of the #nranges ranges.
+     These must sum to 63.*/
+  const int           *sizes;
+  /**#nranges <tt>+1</tt> base matrices.
+     Matrices \a i and <tt>i+1</tt> form the endpoints of range \a i.*/
+  const th_quant_base *base_matrices;
+}th_quant_ranges;
+
+/**A complete set of quantization parameters.
+   The quantizer for each coefficient is calculated as:
+   \code
+    Q=MAX(MIN(qmin[qti][ci!=0],scale[ci!=0][qi]*base[qti][pli][qi][ci]/100),
+     1024).
+   \endcode
+
+   \a qti is the quantization type index: 0 for intra, 1 for inter.
+   <tt>ci!=0</tt> is 0 for the DC coefficient and 1 for AC coefficients.
+   \a qi is the quality index, ranging between 0 (low quality) and 63 (high
+    quality).
+   \a pli is the color plane index: 0 for Y', 1 for Cb, 2 for Cr.
+   \a ci is the DCT coefficient index.
+   Coefficient indices correspond to the normal 2D DCT block
+    ordering--row-major with low frequencies first--\em not zig-zag order.
+
+   Minimum quantizers are constant, and are given by:
+   \code
+   qmin[2][2]={{4,2},{8,4}}.
+   \endcode
+
+   Parameters that can be stored in the bitstream are as follows:
+    - The two scale matrices ac_scale and dc_scale.
+      \code
+      scale[2][64]={dc_scale,ac_scale}.
+      \endcode
+    - The base matrices for each \a qi, \a qti and \a pli (up to 384 in all).
+      In order to avoid storing a full 384 base matrices, only a sparse set of
+       matrices are stored, and the rest are linearly interpolated.
+      This is done as follows.
+      For each \a qti and \a pli, a series of \a n \a qi ranges is defined.
+      The size of each \a qi range can vary arbitrarily, but they must sum to
+       63.
+      Then, <tt>n+1</tt> matrices are specified, one for each endpoint of the
+       ranges.
+      For interpolation purposes, each range's endpoints are the first \a qi
+       value it contains and one past the last \a qi value it contains.
+      Fractional values are rounded to the nearest integer, with ties rounded
+       away from zero.
+
+      Base matrices are stored by reference, so if the same matrices are used
+       multiple times, they will only appear once in the bitstream.
+      The bitstream is also capable of omitting an entire set of ranges and
+       its associated matrices if they are the same as either the previous
+       set (indexed in row-major order) or if the inter set is the same as the
+       intra set.
+
+    - Loop filter limit values.
+      The same limits are used for the loop filter in all color planes, despite
+       potentially differing levels of quantization in each.
+
+   For the current encoder, <tt>scale[ci!=0][qi]</tt> must be no greater
+    than <tt>scale[ci!=0][qi-1]</tt> and <tt>base[qti][pli][qi][ci]</tt> must
+    be no greater than <tt>base[qti][pli][qi-1][ci]</tt>.
+   These two conditions ensure that the actual quantizer for a given \a qti,
+    \a pli, and \a ci does not increase as \a qi increases.
+   This is not required by the decoder.*/
+typedef struct{
+  /**The DC scaling factors.*/
+  ogg_uint16_t    dc_scale[64];
+  /**The AC scaling factors.*/
+  ogg_uint16_t    ac_scale[64];
+  /**The loop filter limit values.*/
+  unsigned char   loop_filter_limits[64];
+  /**The \a qi ranges for each \a ci and \a pli.*/
+  th_quant_ranges qi_ranges[2][3];
+}th_quant_info;
+
+
+
+/**The number of Huffman tables used by Theora.*/
+#define TH_NHUFFMAN_TABLES (80)
+/**The number of DCT token values in each table.*/
+#define TH_NDCT_TOKENS     (32)
+
+/**A Huffman code for a Theora DCT token.
+ * Each set of Huffman codes in a given table must form a complete, prefix-free
+ *  code.
+ * There is no requirement that all the tokens in a table have a valid code,
+ *  but the current encoder is not optimized to take advantage of this.
+ * If each of the five grouops of 16 tables does not contain at least one table
+ *  with a code for every token, then the encoder may fail to encode certain
+ *  frames.
+ * The complete table in the first group of 16 does not have to be in the same
+ *  place as the complete table in the other groups, but the complete tables in
+ *  the remaining four groups must all be in the same place.*/
+typedef struct{
+  /**The bit pattern for the code, with the LSbit of the pattern aligned in
+   *   the LSbit of the word.*/
+  ogg_uint32_t pattern;
+  /**The number of bits in the code.
+   * This must be between 0 and 32, inclusive.*/
+  int          nbits;
+}th_huff_code;
+
+
+
+/**\defgroup basefuncs Functions Shared by Encode and Decode*/
+/*@{*/
+/**\name Basic shared functions*/
+/*@{*/
+/**Retrieves a human-readable string to identify the library vendor and
+ *  version.
+ * \return the version string.*/
+extern const char *th_version_string(void);
+/**Retrieves the library version number.
+ * This is the highest bitstream version that the encoder library will produce,
+ *  or that the decoder library can decode.
+ * This number is composed of a 16-bit major version, 8-bit minor version
+ * and 8 bit sub-version, composed as follows:
+ * \code
+ * (VERSION_MAJOR<<16)+(VERSION_MINOR<<8)+(VERSION_SUBMINOR)
+ * \endcode
+ * \return the version number.*/
+extern ogg_uint32_t th_version_number(void);
+/**Converts a granule position to an absolute frame index, starting at
+ *  <tt>0</tt>.
+ * The granule position is interpreted in the context of a given
+ *  #th_enc_ctx or #th_dec_ctx handle (either will suffice).
+ * \param _encdec  A previously allocated #th_enc_ctx or #th_dec_ctx handle.
+ * \param _granpos The granule position to convert.
+ * \returns The absolute frame index corresponding to \a _granpos.
+ * \retval -1 The given granule position was invalid (i.e. negative).*/
+extern ogg_int64_t th_granule_frame(void *_encdec,ogg_int64_t _granpos);
+/**Converts a granule position to an absolute time in seconds.
+ * The granule position is interpreted in the context of a given
+ *  #th_enc_ctx or #th_dec_ctx handle (either will suffice).
+ * \param _encdec  A previously allocated #th_enc_ctx or #th_dec_ctx handle.
+ * \param _granpos The granule position to convert.
+ * \return The absolute time in seconds corresponding to \a _granpos.
+ *         This is the "end time" for the frame, or the latest time it should
+ *          be displayed.
+ *         It is not the presentation time.
+ * \retval -1 The given granule position was invalid (i.e. negative).*/
+extern double th_granule_time(void *_encdec,ogg_int64_t _granpos);
+/**Determines whether a Theora packet is a header or not.
+ * This function does no verification beyond checking the packet type bit, so
+ *  it should not be used for bitstream identification; use
+ *  th_decode_headerin() for that.
+ * As per the Theora specification, an empty (0-byte) packet is treated as a
+ *  data packet (a delta frame with no coded blocks).
+ * \param _op An <tt>ogg_packet</tt> containing encoded Theora data.
+ * \retval 1 The packet is a header packet
+ * \retval 0 The packet is a video data packet.*/
+extern int th_packet_isheader(ogg_packet *_op);
+/**Determines whether a theora packet is a key frame or not.
+ * This function does no verification beyond checking the packet type and
+ *  key frame bits, so it should not be used for bitstream identification; use
+ *  th_decode_headerin() for that.
+ * As per the Theora specification, an empty (0-byte) packet is treated as a
+ *  delta frame (with no coded blocks).
+ * \param _op An <tt>ogg_packet</tt> containing encoded Theora data.
+ * \retval 1  The packet contains a key frame.
+ * \retval 0  The packet contains a delta frame.
+ * \retval -1 The packet is not a video data packet.*/
+extern int th_packet_iskeyframe(ogg_packet *_op);
+/*@}*/
+
+
+/**\name Functions for manipulating header data*/
+/*@{*/
+/**Initializes a th_info structure.
+ * This should be called on a freshly allocated #th_info structure before
+ *  attempting to use it.
+ * \param _info The #th_info struct to initialize.*/
+extern void th_info_init(th_info *_info);
+/**Clears a #th_info structure.
+ * This should be called on a #th_info structure after it is no longer needed.
+ * \param _info The #th_info struct to clear.*/
+extern void th_info_clear(th_info *_info);
+
+/**Initialize a #th_comment structure.
+ * This should be called on a freshly allocated #th_comment structure before
+ *  attempting to use it.
+ * \param _tc The #th_comment struct to initialize.*/
+extern void th_comment_init(th_comment *_tc);
+/**Add a comment to an initialized #th_comment structure.
+ * \note Neither th_comment_add() nor th_comment_add_tag() support comments
+ *  containing null values, although the bitstream format does support them.
+ * To add such comments you will need to manipulate the #th_comment structure
+ *  directly.
+ * \param _tc      The #th_comment struct to add the comment to.
+ * \param _comment Must be a null-terminated UTF-8 string containing the
+ *                  comment in "TAG=the value" form.*/
+extern void th_comment_add(th_comment *_tc, char *_comment);
+/**Add a comment to an initialized #th_comment structure.
+ * \note Neither th_comment_add() nor th_comment_add_tag() support comments
+ *  containing null values, although the bitstream format does support them.
+ * To add such comments you will need to manipulate the #th_comment
+ *  structure directly.
+ * \param _tc  The #th_comment struct to add the comment to.
+ * \param _tag A null-terminated string containing the tag  associated with
+ *              the comment.
+ * \param _val The corresponding value as a null-terminated string.*/
+extern void th_comment_add_tag(th_comment *_tc,char *_tag,char *_val);
+/**Look up a comment value by its tag.
+ * \param _tc    An initialized #th_comment structure.
+ * \param _tag   The tag to look up.
+ * \param _count The instance of the tag.
+ *               The same tag can appear multiple times, each with a distinct
+ *                value, so an index is required to retrieve them all.
+ *               The order in which these values appear is significant and
+ *                should be preserved.
+ *               Use th_comment_query_count() to get the legal range for the
+ *                \a _count parameter.
+ * \return A pointer to the queried tag's value.
+ *         This points directly to data in the #th_comment structure.
+ *         It should not be modified or freed by the application, and
+ *          modifications to the structure may invalidate the pointer.
+ * \retval NULL If no matching tag is found.*/
+extern char *th_comment_query(th_comment *_tc,char *_tag,int _count);
+/**Look up the number of instances of a tag.
+ * Call this first when querying for a specific tag and then iterate over the
+ *  number of instances with separate calls to th_comment_query() to retrieve
+ *  all the values for that tag in order.
+ * \param _tc    An initialized #th_comment structure.
+ * \param _tag   The tag to look up.
+ * \return The number on instances of this particular tag.*/
+extern int th_comment_query_count(th_comment *_tc,char *_tag);
+/**Clears a #th_comment structure.
+ * This should be called on a #th_comment structure after it is no longer
+ *  needed.
+ * It will free all memory used by the structure members.
+ * \param _tc The #th_comment struct to clear.*/
+extern void th_comment_clear(th_comment *_tc);
+/*@}*/
+/*@}*/
+
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif

Added: trunk/theora-exp/include/theora/compat/Makefile.am
===================================================================
--- trunk/theora-exp/include/theora/compat/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/include/theora/compat/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,3 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = theora

Added: trunk/theora-exp/include/theora/compat/theora/Makefile.am
===================================================================
--- trunk/theora-exp/include/theora/compat/theora/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/include/theora/compat/theora/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,6 @@
+## Process this file with automake to produce Makefile.in
+
+theoraincludedir = $(includedir)/theora/compat/theora
+
+theorainclude_HEADERS = theora.h
+

Added: trunk/theora-exp/include/theora/compat/theora/theora.h
===================================================================
--- trunk/theora-exp/include/theora/compat/theora/theora.h	                        (rev 0)
+++ trunk/theora-exp/include/theora/compat/theora/theora.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,563 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function:
+  last mod: $Id: theora.h,v 1.17 2003/12/06 18:06:19 arc Exp $
+
+ ********************************************************************/
+
+#ifndef _O_THEORA_H_
+#define _O_THEORA_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#ifndef LIBOGG2
+#include <ogg/ogg.h>
+#else
+#include <ogg2/ogg.h>
+/* This is temporary until libogg2 is more complete */
+ogg_buffer_state *ogg_buffer_create(void);
+#endif
+
+/** \mainpage
+ * 
+ * \section intro Introduction
+ *
+ * This is the documentation for the libtheora C API.
+ * libtheora is the reference implementation for
+ * <a href="http://www.theora.org/">Theora</a>, a free video codec.
+ * Theora is derived from On2's VP3 codec with improved integration for
+ * Ogg multimedia formats by <a href="http://www.xiph.org/">Xiph.Org</a>.
+ * 
+ * \section overview Overview
+ *
+ * This library will both decode and encode theora packets to/from raw YUV 
+ * frames.  In either case, the packets will most likely either come from or
+ * need to be embedded in an Ogg stream.  Use 
+ * <a href="http://xiph.org/ogg/">libogg</a> or 
+ * <a href="http://www.annodex.net/software/liboggz/index.html">liboggz</a>
+ * to extract/package these packets.
+ *
+ * \section decoding Decoding Process
+ *
+ * Decoding can be separated into the following steps:
+ * -# initialise theora_info and theora_comment structures using 
+ *    theora_info_init() and theora_comment_init():
+ \verbatim
+ theora_info     info;
+ theora_comment  comment;
+   
+ theora_info_init(&info);
+ theora_comment_init(&comment);
+ \endverbatim
+ * -# retrieve header packets from Ogg stream (there should be 3) and decode 
+ *    into theora_info and theora_comment structures using 
+ *    theora_decode_header().  See \ref identification for more information on 
+ *    identifying which packets are theora packets.
+ \verbatim
+ int i;
+ for (i = 0; i < 3; i++)
+ {
+   (get a theora packet "op" from the Ogg stream)
+   theora_decode_header(&info, &comment, op);
+ }
+ \endverbatim
+ * -# initialise the decoder based on the information retrieved into the
+ *    theora_info struct by theora_decode_header().  You will need a 
+ *    theora_state struct.
+ \verbatim
+ theora_state state;
+ 
+ theora_decode_init(&state, &info);
+ \endverbatim
+ * -# pass in packets and retrieve decoded frames!  See the yuv_buffer 
+ *    documentation for information on how to retrieve raw YUV data.
+ \verbatim
+ yuf_buffer buffer;
+ while (last packet was not e_o_s) {
+   (get a theora packet "op" from the Ogg stream)
+   theora_decode_packetin(&state, op);
+   theora_decode_YUVout(&state, &buffer);
+ }
+ \endverbatim
+ *  
+ *
+ * \subsection identification Identifying Theora Packets
+ *
+ * All streams inside an Ogg file have a unique serial_no attached to the 
+ * stream.  Typically, you will want to 
+ *  - retrieve the serial_no for each b_o_s (beginning of stream) page 
+ *    encountered within the Ogg file; 
+ *  - test the first (only) packet on that page to determine if it is a theora 
+ *    packet;
+ *  - once you have found a theora b_o_s page then use the retrieved serial_no 
+ *    to identify future packets belonging to the same theora stream.
+ * 
+ * Note that you \e cannot use theora_packet_isheader() to determine if a 
+ * packet is a theora packet or not, as this function does not perform any
+ * checking beyond whether a header bit is present.  Instead, use the
+ * theora_decode_header() function and check the return value; or examine the
+ * header bytes at the beginning of the Ogg page.
+ *
+ * \subsection example Example Decoder 
+ *
+ * See <a href="http://svn.xiph.org/trunk/theora/examples/dump_video.c">
+ * examples/dump_video.c</a> for a simple decoder implementation.
+ *
+ * \section encoding Encoding Process
+ *
+ * See <a href="http://svn.xiph.org/trunk/theora/examples/encoder_example.c">
+ * examples/encoder_example.c</a> for a simple encoder implementation.
+ */
+
+/** \file
+ * The libtheora C API.
+ */
+
+/**
+ * A YUV buffer for passing uncompressed frames to and from the codec.
+ * This holds a Y'CbCr frame in planar format. The CbCr planes can be
+ * subsampled and have their own separate dimensions and row stride
+ * offsets. Note that the strides may be negative in some 
+ * configurations. For theora the width and height of the largest plane
+ * must be a multiple of 16. The actual meaningful picture size and 
+ * offset are stored in the theora_info structure; frames returned by
+ * the decoder may need to be cropped for display.
+ *
+ * All samples are 8 bits. Within each plane samples are ordered by
+ * row from the top of the frame to the bottom. Within each row samples
+ * are ordered from left to right.
+ *
+ * During decode, the yuv_buffer struct is allocated by the user, but all
+ * fields (including luma and chroma pointers) are filled by the library.  
+ * These pointers address library-internal memory and their contents should 
+ * not be modified.
+ *
+ * Conversely, during encode the user allocates the struct and fills out all
+ * fields.  The user also manages the data addressed by the luma and chroma
+ * pointers.  See the encoder_example.c and dump_video.c example files in
+ * theora/examples/ for more information.
+ */
+typedef struct {
+    int   y_width;      /**< Width of the Y' luminance plane */
+    int   y_height;     /**< Height of the luminance plane */
+    int   y_stride;     /**< Offset in bytes between successive rows */
+
+    int   uv_width;     /**< Width of the Cb and Cr chroma planes */
+    int   uv_height;    /**< Height of the chroma planes */
+    int   uv_stride;    /**< Offset between successive chroma rows */
+    unsigned char *y;   /**< Pointer to start of luminance data */
+    unsigned char *u;   /**< Pointer to start of Cb data */
+    unsigned char *v;   /**< Pointer to start of Cr data */
+
+} yuv_buffer;
+
+/**
+ * A Colorspace.
+ */
+typedef enum {
+  OC_CS_UNSPECIFIED,    /**< The colorspace is unknown or unspecified */
+  OC_CS_ITU_REC_470M,   /**< This is the best option for 'NTSC' content */
+  OC_CS_ITU_REC_470BG,  /**< This is the best option for 'PAL' content */
+  OC_CS_NSPACES         /**< This marks the end of the defined colorspaces */
+} theora_colorspace;
+
+/**
+ * A Chroma subsampling
+ *
+ * These enumerate the available chroma subsampling options supported
+ * by the theora format. See Section 4.4 of the specification for
+ * exact definitions.
+ */
+typedef enum {
+  OC_PF_420,    /**< Chroma subsampling by 2 in each direction (4:2:0) */
+  OC_PF_RSVD,   /**< Reserved value */
+  OC_PF_422,    /**< Horizonatal chroma subsampling by 2 (4:2:2) */
+  OC_PF_444,    /**< No chroma subsampling at all (4:4:4) */
+} theora_pixelformat;
+
+/**
+ * Theora bitstream info.
+ * Contains the basic playback parameters for a stream,
+ * corresponding to the initial 'info' header packet.
+ * 
+ * Encoded theora frames must be a multiple of 16 in width and height.
+ * To handle other frame sizes, a crop rectangle is specified in
+ * frame_height and frame_width, offset_x and * offset_y. The offset
+ * and size should still be a multiple of 2 to avoid chroma sampling
+ * shifts. Offset values in this structure are measured from the
+ * upper left of the image.
+ *
+ * Frame rate, in frames per second, is stored as a rational
+ * fraction. Aspect ratio is also stored as a rational fraction, and
+ * refers to the aspect ratio of the frame pixels, not of the
+ * overall frame itself.
+ * 
+ * See <a href="http://svn.xiph.org/trunk/theora/examples/encoder_example.c">
+ * examples/encoder_example.c</a> for usage examples of the
+ * other paramters and good default settings for the encoder parameters.
+ */
+typedef struct {
+  ogg_uint32_t  width;		/**< encoded frame width  */
+  ogg_uint32_t  height;		/**< encoded frame height */
+  ogg_uint32_t  frame_width;	/**< display frame width  */
+  ogg_uint32_t  frame_height;	/**< display frame height */
+  ogg_uint32_t  offset_x;	/**< horizontal offset of the displayed frame */
+  ogg_uint32_t  offset_y;	/**< vertical offset of the displayed frame */
+  ogg_uint32_t  fps_numerator;	    /**< frame rate numerator **/
+  ogg_uint32_t  fps_denominator;    /**< frame rate denominator **/
+  ogg_uint32_t  aspect_numerator;   /**< pixel aspect ratio numerator */
+  ogg_uint32_t  aspect_denominator; /**< pixel aspect ratio denominator */
+  theora_colorspace colorspace;	    /**< colorspace */
+  int           target_bitrate;	    /**< nominal bitrate in bits per second */
+  int           quality;  /**< Nominal quality setting, 0-63 */
+  int           quick_p;  /**< Quick encode/decode */
+
+  /* decode only */
+  unsigned char version_major;
+  unsigned char version_minor;
+  unsigned char version_subminor;
+
+  void *codec_setup;
+
+  /* encode only */
+  int           dropframes_p;
+  int           keyframe_auto_p;
+  ogg_uint32_t  keyframe_frequency;
+  ogg_uint32_t  keyframe_frequency_force;  /* also used for decode init to
+                                              get granpos shift correct */
+  ogg_uint32_t  keyframe_data_target_bitrate;
+  ogg_int32_t   keyframe_auto_threshold;
+  ogg_uint32_t  keyframe_mindistance;
+  ogg_int32_t   noise_sensitivity;
+  ogg_int32_t   sharpness;
+
+  theora_pixelformat pixelformat;	/**< chroma subsampling mode to expect */
+
+} theora_info;
+
+/** Codec internal state and context.
+ */
+typedef struct{
+  theora_info *i;
+  ogg_int64_t granulepos;
+
+  void *internal_encode;
+  void *internal_decode;
+
+} theora_state;
+
+/** 
+ * Comment header metadata.
+ *
+ * This structure holds the in-stream metadata corresponding to
+ * the 'comment' header packet.
+ *
+ * Meta data is stored as a series of (tag, value) pairs, in
+ * length-encoded string vectors. The first occurence of the 
+ * '=' character delimits the tag and value. A particular tag
+ * may occur more than once. The character set encoding for
+ * the strings is always UTF-8, but the tag names are limited
+ * to case-insensitive ASCII. See the spec for details.
+ *
+ * In filling in this structure, theora_decode_header() will
+ * null-terminate the user_comment strings for safety. However,
+ * the bitstream format itself treats them as 8-bit clean,
+ * and so the length array should be treated as authoritative
+ * for their length.
+ */
+typedef struct theora_comment{
+  char **user_comments;         /**< An array of comment string vectors */
+  int   *comment_lengths;       /**< An array of corresponding string vector lengths in bytes */
+  int    comments;              /**< The total number of comment string vectors */
+  char  *vendor;                /**< The vendor string identifying the encoder, null terminated */
+
+} theora_comment;
+
+#define OC_FAULT       -1       /**< General failure */
+#define OC_EINVAL      -10      /**< Library encountered invalid internal data */
+#define OC_DISABLED    -11      /**< Requested action is disabled */
+#define OC_BADHEADER   -20      /**< Header packet was corrupt/invalid */
+#define OC_NOTFORMAT   -21      /**< Packet is not a theora packet */
+#define OC_VERSION     -22      /**< Bitstream version is not handled */
+#define OC_IMPL        -23      /**< Feature or action not implemented */
+#define OC_BADPACKET   -24      /**< Packet is corrupt */
+#define OC_NEWPACKET   -25      /**< Packet is an (ignorable) unhandled extension */
+#define OC_DUPFRAME    1        /**< Packet is a dropped frame */
+
+/** 
+ * Retrieve a human-readable string to identify the encoder vendor and version.
+ * \returns A version string.
+ */
+extern const char *theora_version_string(void);
+
+/**
+ * Retrieve a 32-bit version number.
+ * This number is composed of a 16-bit major version, 8-bit minor version
+ * and 8 bit sub-version, composed as follows:
+<pre>
+   (VERSION_MAJOR<<16) + (VERSION_MINOR<<8) + (VERSION_SUB)
+</pre>
+* \returns The version number.
+*/
+extern ogg_uint32_t theora_version_number(void);
+
+/**
+ * Decode an Ogg packet, with the expectation that the packet contains
+ * an initial header, comment data or codebook tables.
+ *
+ * \param ci A theora_info structure to fill. This must have been previously
+ *           initialized with theora_info_init(). If \a op contains an initial
+ *           header, theora_decode_header() will fill \a ci with the
+ *           parsed header values. If \a op contains codebook tables,
+ *           theora_decode_header() will parse these and attach an internal
+ *           representation to \a ci->codec_setup.
+ * \param cc A theora_comment structure to fill. If \a op contains comment
+ *           data, theora_decode_header() will fill \a cc with the parsed
+ *           comments.
+ * \param op An ogg_packet structure which you expect contains an initial
+ *           header, comment data or codebook tables.
+ *
+ * \retval OC_BADHEADER \a op is NULL; OR the first byte of \a op->packet
+ *                      has the signature of an initial packet, but op is
+ *                      not a b_o_s packet; OR this packet has the signature
+ *                      of an initial header packet, but an initial header
+ *                      packet has already been seen; OR this packet has the
+ *                      signature of a comment packet, but the initial header
+ *                      has not yet been seen; OR this packet has the signature
+ *                      of a comment packet, but contains invalid data; OR
+ *                      this packet has the signature of codebook tables,
+ *                      but the initial header or comments have not yet
+ *                      been seen; OR this packet has the signature of codebook
+ *                      tables, but contains invalid data;
+ *                      OR the stream being decoded has a compatible version
+ *                      but this packet does not have the signature of a
+ *                      theora initial header, comments, or codebook packet
+ * \retval OC_VERSION   The packet data of \a op is an initial header with
+ *                      a version which is incompatible with this version of
+ *                      libtheora.
+ * \retval OC_NEWPACKET the stream being decoded has an incompatible (future)
+ *                      version and contains an unknown signature.
+ * \retval 0            Success
+ *
+ * \note The normal usage is that theora_decode_header() be called on the
+ *       first three packets of a theora logical bitstream in succession.
+ */
+extern int theora_decode_header(theora_info *ci, theora_comment *cc,
+                                ogg_packet *op);
+
+/**
+ * Initialize a theora_state handle for decoding.
+ * \param th The theora_state handle to initialize.
+ * \param c  A theora_info struct filled with the desired decoding parameters.
+ *           This is of course usually obtained from a previous call to
+ *           theora_decode_header().
+ * \retval 0 Success
+ */
+extern int theora_decode_init(theora_state *th, theora_info *c);
+
+/**
+ * Input a packet containing encoded data into the theora decoder.
+ * \param th A theora_state handle previously initialized for decoding.
+ * \param op An ogg_packet containing encoded theora data.
+ * \retval 0 Success
+ * \retval OC_BADPACKET \a op does not contain encoded video data
+ */
+extern int theora_decode_packetin(theora_state *th,ogg_packet *op);
+
+/**
+ * Output the next available frame of decoded YUV data.
+ * \param th A theora_state handle previously initialized for decoding.
+ * \param yuv A yuv_buffer in which libtheora should place the decoded data.
+ *            Note that the buffer struct itself is allocated by the user, but
+ *            that the luma and chroma pointers will be filled in by the 
+ *            library.  Also note that these luma and chroma regions should be 
+ *            considered read-only by the user.
+ * \retval 0 Success
+ */
+extern int theora_decode_YUVout(theora_state *th,yuv_buffer *yuv);
+
+/**
+ * Report whether a theora packet is a header or not
+ * This function does no verification beyond checking the header
+ * flag bit so it should not be used for bitstream identification;
+ * use theora_decode_header() for that.
+ *
+ * \param op An ogg_packet containing encoded theora data.
+ * \retval 1 The packet is a header packet
+ * \retval 0 The packet is not a header packet (and so contains frame data)
+ *
+ * Thus function was added in the 1.0alpha4 release.
+ */
+extern int theora_packet_isheader(ogg_packet *op);
+
+/**
+ * Report whether a theora packet is a keyframe or not
+ *
+ * \param op An ogg_packet containing encoded theora data.
+ * \retval 1 The packet contains a keyframe image
+ * \retval 0 The packet is contains an interframe delta
+ * \retval -1 The packet is not an image data packet at all
+ *
+ * Thus function was added in the 1.0alpha4 release.
+ */
+extern int theora_packet_iskeyframe(ogg_packet *op);
+
+/**
+ * Report the granulepos shift radix
+ *
+ * When embedded in Ogg, Theora uses a two-part granulepos, 
+ * splitting the 64-bit field into two pieces. The more-significant
+ * section represents the frame count at the last keyframe,
+ * and the less-significant section represents the count of
+ * frames since the last keyframe. In this way the overall
+ * field is still non-decreasing with time, but usefully encodes
+ * a pointer to the last keyframe, which is necessary for
+ * correctly restarting decode after a seek. 
+ *
+ * This function reports the number of bits used to represent
+ * the distance to the last keyframe, and thus how the granulepos
+ * field must be shifted or masked to obtain the two parts.
+ * 
+ * Since libtheora returns compressed data in an ogg_packet
+ * structure, this may be generally useful even if the Theora
+ * packets are not being used in an Ogg container. 
+ *
+ * \param ti A previously initialized theora_info struct
+ * \returns The bit shift dividing the two granulepos fields
+ *
+ * This function was added in the 1.0alpha5 release.
+ */
+int theora_granule_shift(theora_info *ti);
+
+/**
+ * Convert a granulepos to an absolute frame number. The granulepos is
+ * interpreted in the context of a given theora_state handle.
+ *
+ * \param th A previously initialized theora_state handle (encode or decode)
+ * \param granulepos The granulepos to convert.
+ * \returns The frame number corresponding to \a granulepos.
+ * \retval -1 The given granulepos is undefined (i.e. negative)
+ *
+ * Thus function was added in the 1.0alpha4 release.
+ */
+extern ogg_int64_t theora_granule_frame(theora_state *th,ogg_int64_t granulepos);
+
+/**
+ * Convert a granulepos to absolute time in seconds. The granulepos is
+ * interpreted in the context of a given theora_state handle.
+ * \param th A previously initialized theora_state handle (encode or decode)
+ * \param granulepos The granulepos to convert.
+ * \returns The absolute time in seconds corresponding to \a granulepos.
+ * \retval -1. The given granulepos is undefined (i.e. negative), or
+ * \retval -1. The function has been disabled because floating 
+ *              point support is not available.
+ */
+extern double theora_granule_time(theora_state *th,ogg_int64_t granulepos);
+
+/**
+ * Initialize a theora_info structure. All values within the given theora_info
+ * structure are initialized, and space is allocated within libtheora for
+ * internal codec setup data.
+ * \param c A theora_info struct to initialize.
+ */
+extern void theora_info_init(theora_info *c);
+
+/**
+ * Clear a theora_info structure. All values within the given theora_info
+ * structure are cleared, and associated internal codec setup data is freed.
+ * \param c A theora_info struct to initialize.
+ */
+extern void theora_info_clear(theora_info *c);
+
+/**
+ * Free all internal data associated with a theora_state handle.
+ * \param t A theora_state handle.
+ */
+extern void theora_clear(theora_state *t);
+
+/**
+ * Initialize an allocated theora_comment structure
+ * \param tc An allocated theora_comment structure 
+ **/
+extern void theora_comment_init(theora_comment *tc);
+
+/**
+ * Add a comment to an initialized theora_comment structure
+ * \param tc A previously initialized theora comment structure
+ * \param comment A null-terminated string encoding the comment in the form
+ *                "TAG=the value"
+ *
+ * Neither theora_comment_add() nor theora_comment_add_tag() support
+ * comments containing null values, although the bitstream format
+ * supports this. To add such comments you will need to manipulate
+ * the theora_comment structure directly.
+ **/
+
+extern void theora_comment_add(theora_comment *tc, char *comment);
+
+/**
+ * Add a comment to an initialized theora_comment structure.
+ * \param tc A previously initialized theora comment structure
+ * \param tag A null-terminated string containing the tag 
+ *            associated with the comment.
+ * \param value The corresponding value as a null-terminated string
+ *
+ * Neither theora_comment_add() nor theora_comment_add_tag() support
+ * comments containing null values, although the bitstream format
+ * supports this. To add such comments you will need to manipulate
+ * the theora_comment structure directly.
+ **/
+extern void theora_comment_add_tag(theora_comment *tc,
+                                       char *tag, char *value);
+
+/**
+ * Look up a comment value by tag.
+ * \param tc Tn initialized theora_comment structure
+ * \param tag The tag to look up
+ * \param count The instance of the tag. The same tag can appear multiple
+ *              times, each with a distinct and ordered value, so an index
+ *              is required to retrieve them all.
+ * \returns A pointer to the queried tag's value
+ * \retval NULL No matching tag is found
+ *
+ * \note Use theora_comment_query_count() to get the legal range for the
+ * count parameter.
+ **/
+
+extern char *theora_comment_query(theora_comment *tc, char *tag, int count);
+
+/** Look up the number of instances of a tag.
+ *  \param tc An initialized theora_comment structure
+ *  \param tag The tag to look up
+ *  \returns The number on instances of a particular tag.
+ * 
+ *  Call this first when querying for a specific tag and then interate
+ *  over the number of instances with separate calls to 
+ *  theora_comment_query() to retrieve all instances in order.
+ **/
+extern int   theora_comment_query_count(theora_comment *tc, char *tag);
+
+/**
+ * Clear an allocated theora_comment struct so that it can be freed.
+ * \param tc An allocated theora_comment structure.
+ **/
+extern void  theora_comment_clear(theora_comment *tc);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _O_THEORA_H_ */

Added: trunk/theora-exp/include/theora/theoradec.h
===================================================================
--- trunk/theora-exp/include/theora/theoradec.h	                        (rev 0)
+++ trunk/theora-exp/include/theora/theoradec.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,286 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function:
+  last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $
+
+ ********************************************************************/
+
+/**\file
+ * The <tt>libtheoradec</tt> C decoding API.*/
+
+#if !defined(_O_THEORA_THEORADEC_H_)
+# define _O_THEORA_THEORADEC_H_ (1)
+# include <ogg/ogg.h>
+# include "codec.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+
+/**\name th_decode_ctl() codes
+ * \anchor decctlcodes
+ * These are the available request codes for th_decode_ctl().
+ * By convention, these are odd, to distinguish them from the
+ *  \ref encctlcodes "encoder control codes".
+ * Keep any experimental or vendor-specific values above \c 0x8000.*/
+/*@{*/
+/**Gets the maximum post-processing level.
+ *
+ * \param[out] _buf int: The maximum post-processing level.
+ * \retval TH_EFAULT  \a _dec_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL  \a _buf_sz is not <tt>sizeof(int)</tt>.
+ * \retval TH_EIMPL   Not supported by this implementation.*/
+#define TH_DECCTL_GET_PPLEVEL_MAX (1)
+/**Sets the post-processing level.
+ * By default, post-processing is disabled.
+ *
+ * \param[in] _buf int: The new post-processing level.
+ *                      0 to disable; larger values use more CPU.
+ * \retval TH_EFAULT  \a _dec_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL  \a _buf_sz is not <tt>sizeof(int)</tt>, or the
+ *                     post-processing level is out of bounds.
+ *                    The maximum post-processing level may be
+ *                     implementation-specific, and can be obtained via
+ *                     #TH_DECCTL_GET_PPLEVEL_MAX.
+ * \retval TH_EIMPL   Not supported by this implementation.*/
+#define TH_DECCTL_SET_PPLEVEL (3)
+/**Sets the granule position.
+ * Call this after a seek, before decoding the first frame, to ensure that the
+ *  proper granule position is returned for all subsequent frames.
+ * If you track timestamps yourself and do not use the granule position
+ *  returned by the decoder, then you need not call this function.
+ *
+ * \param[in] _buf <tt>ogg_int64_t</tt>: The granule position of the next
+ *                  frame.
+ * \retval TH_EFAULT  \a _dec_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL  \a _buf_sz is not <tt>sizeof(ogg_int64_t)</tt>, or the
+ *                     granule position is negative.*/
+#define TH_DECCTL_SET_GRANPOS (5)
+/**Sets the striped decode callback function.
+ * If set, this function will be called as each piece of a frame is fully
+ *  decoded in th_decode_packetin().
+ * You can pass in a #th_stripe_callback with th_stripe_callback#stripe_decoded
+ *  set to <tt>NULL</tt> to disable the callbacks at any point.
+ * Enabling striped decode does not prevent you from calling
+ *  th_decode_ycbcr_out() after the frame is fully decoded.
+ *
+ * \param[in]  _buf #th_stripe_callback: The callback parameters.
+ * \retval TH_EFAULT  \a _dec_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL  \a _buf_sz is not <tt>sizeof(th_stripe_callback)</tt>.*/
+#define TH_DECCTL_SET_STRIPE_CB (7)
+/*@}*/
+
+
+
+/**A callback function for striped decode.
+ * This is a function pointer to an application-provided function that will be
+ *  called each time a section of the image is fully decoded in
+ *  th_decode_packetin().
+ * This allows the application to process the section immediately, while it is
+ *  still in cache.
+ * Note that the frame is decoded bottom to top, so \a _yfrag0 will steadily
+ *  decrease with each call until it reaches 0, at which point the full frame
+ *  is decoded.
+ * The number of fragment rows made available in each call depends on the pixel
+ *  format and the number of post-processing filters enabled, and may not even
+ *  be constant for the entire frame.
+ * If a non-<tt>NULL</tt> \a _granpos pointer is passed to
+ *  th_decode_packetin(), the granule position for the frame will be stored in
+ *  it before the first callback is made.
+ * If an entire frame is dropped (a 0-byte packet), then no callbacks will be
+ *  made at all for that frame.
+ * \param _ctx       An application-provided context pointer.
+ * \param _buf       The image buffer for the decoded frame.
+ * \param _yfrag0    The Y coordinate of the first row of 8x8 fragments
+ *                    decoded.
+ *                   Multiply this by 8 to obtain the pixel row number in the
+ *                    luma plane.
+ *                   If the chroma planes are subsampled in the Y direction,
+ *                    this will always be divisible by two.
+ * \param _yfrag_end The Y coordinate of the first row of 8x8 fragments past
+ *                    the newly decoded section.
+ *                   If the chroma planes are subsampled in the Y direction,
+ *                    this will always be divisible by two.
+ *                   I.e., this section contains fragment rows
+ *                    <tt>\a _yfrag0 ...\a _yfrag_end -1</tt>.*/
+typedef void (*th_stripe_decoded_func)(void *_ctx,th_ycbcr_buffer _buf,
+ int _yfrag0,int _yfrag_end);
+
+/**The striped decode callback data to pass to #TH_DECCTL_SET_STRIPE_CB.*/
+typedef struct{
+  /**An application-provided context pointer.
+   * This will be passed back verbatim to the application.*/
+  void                   *ctx;
+  /**The callback function pointer.*/
+  th_stripe_decoded_func  stripe_decoded;
+}th_stripe_callback;
+
+
+
+/**\name Decoder state
+   The following data structures are opaque, and their contents are not
+    publicly defined by this API.
+   Referring to their internals directly is unsupported, and may break without
+    warning.*/
+/*@{*/
+/**The decoder context.*/
+typedef struct th_dec_ctx    th_dec_ctx;
+/**Setup information.
+   This contains auxiliary information (Huffman tables and quantization
+    parameters) decoded from the setup header by th_decode_headerin() to be
+    passed to th_decode_alloc().
+   It can be re-used to initialize any number of decoders, and can be freed
+    via th_setup_free() at any time.*/
+typedef struct th_setup_info th_setup_info;
+/*@}*/
+
+
+
+/**\defgroup decfuncs Functions for Decoding*/
+/*@{*/
+/**\name Functions for decoding
+ * You must link to <tt>libtheoradec</tt> if you use any of the 
+ * functions in this section.
+ *
+ * The functions are listed in the order they are used in a typical decode.
+ * The basic steps are:
+ * - Parse the header packets by repeatedly calling th_decode_headerin().
+ * - Allocate a #th_dec_ctx handle with th_decode_alloc().
+ * - Call th_setup_free() to free any memory used for codec setup information.
+ * - Perform any additional decoder configuration with th_decode_ctl().
+ * - For each video data packet:
+ *   - Submit the packet to the decoder via th_decode_packetin().
+ *   - Retrieve the uncompressed video data via th_decode_ycbcr_out().
+ * - Call th_decode_free() to release all decoder memory.*/
+/*@{*/
+/**Decodes the header packets of a Theora stream.
+ * This should be called on the initial packets of the stream, in succession,
+ *  until it returns <tt>0</tt>, indicating that all headers have been
+ *  processed, or an error is encountered.
+ * At least three header packets are required, and additional optional header
+ *  packets may follow.
+ * This can be used on the first packet of any logical stream to determine if
+ *  that stream is a Theora stream.
+ * \param _info  A #th_info structure to fill in.
+ *               This must have been previously initialized with
+ *                th_info_init().
+ *               The application may immediately begin using the contents of
+ *                this structure after the first header is decoded, though it
+ *                must continue to be passed in on all subsequent calls.
+ * \param _tc    A #th_comment structure to fill in.
+ *               The application may immediately begin using the contents of
+ *                this structure after the second header is decoded, though it
+ *                must continue to be passed in on all subsequent calls.
+ * \param _setup Returns a pointer to additional, private setup information
+ *                needed by the decoder.
+ *               The contents of this pointer must be initialized to
+ *                <tt>NULL</tt> on the first call, and the returned value must
+ *                continue to be passed in on all subsequent calls.
+ * \param _op    An <tt>ogg_packet</tt> structure which contains one of the
+ *                initial packets of an Ogg logical stream.
+ * \return A positive value indicates that a Theora header was successfully
+ *          processed.
+ * \retval 0             The first video data packet was encountered after all
+ *                        required header packets were parsed.
+ *                       The packet just passed in on this call should be saved
+ *                        and fed to th_decode_packetin() to begin decoding
+ *                        video data.
+ * \retval TH_EFAULT     One of \a _info, \a _tc, or \a _setup was
+ *                        <tt>NULL</tt>.
+ * \retval TH_EBADHEADER \a _op was <tt>NULL</tt>, the packet was not the next
+ *                        header packet in the expected sequence, or the format
+ *                        of the header data was invalid.
+ * \retval TH_EVERSION   The packet data was a Theora info header, but for a
+ *                        bitstream version not decodable with this version of
+ *                        <tt>libtheoradec</tt>.
+ * \retval TH_ENOTFORMAT The packet was not a Theora header.
+ */
+extern int th_decode_headerin(th_info *_info,th_comment *_tc,
+ th_setup_info **_setup,ogg_packet *_op);
+/**Allocates a decoder instance.
+ * \param _info  A #th_info struct filled via th_decode_headerin().
+ * \param _setup A #th_setup_info handle returned via
+ *                th_decode_headerin().
+ * \return The initialized #th_dec_ctx handle.
+ * \retval NULL If the decoding parameters were invalid.*/
+extern th_dec_ctx *th_decode_alloc(const th_info *_info,
+ const th_setup_info *_setup);
+/**Releases all storage used for the decoder setup information.
+ * This should be called after you no longer want to create any decoders for
+ *  a stream whose headers you have parsed with th_decode_headerin().
+ * \param _setup The setup information to free.
+ *               This can safely be <tt>NULL</tt>.*/
+extern void th_setup_free(th_setup_info *_setup);
+/**Decoder control function.
+ * This is used to provide advanced control of the decoding process.
+ * \param _dec    A #th_dec_ctx handle.
+ * \param _req    The control code to process.
+ *                See \ref decctlcodes "the list of available control codes"
+ *                 for details.
+ * \param _buf    The parameters for this control code.
+ * \param _buf_sz The size of the parameter buffer.*/
+extern int th_decode_ctl(th_dec_ctx *_dec,int _req,void *_buf,
+ size_t _buf_sz);
+/**Submits a packet containing encoded video data to the decoder.
+ * \param _dec     A #th_dec_ctx handle.
+ * \param _op      An <tt>ogg_packet</tt> containing encoded video data.
+ * \param _granpos Returns the granule position of the decoded packet.
+ *                 If non-<tt>NULL</tt>, the granule position for this specific
+ *                  packet is stored in this location.
+ *                 This is computed incrementally from previously decoded
+ *                  packets.
+ *                 After a seek, the correct granule position must be set via
+ *                  #TH_DECCTL_SET_GRANPOS for this to work properly.
+ * \retval 0             Success.
+ *                       A new decoded frame can be retrieved by calling
+ *                        th_decode_ycbcr_out().
+ * \retval TH_DUPFRAME   The packet represented a dropped (0-byte) frame.
+ *                       The player can skip the call to th_decode_ycbcr_out(),
+ *                        as the contents of the decoded frame buffer have not
+ *                        changed.
+ * \retval TH_EFAULT     \a _dec or _op was <tt>NULL</tt>.
+ * \retval TH_EBADPACKET \a _op does not contain encoded video data.
+ * \retval TH_EIMPL      The video data uses bitstream features which this
+ *                        library does not support.*/
+extern int th_decode_packetin(th_dec_ctx *_dec,const ogg_packet *_op,
+ ogg_int64_t *_granpos);
+/**Outputs the next available frame of decoded Y'CbCr data.
+ * If a striped decode callback has been set with #TH_DECCTL_SET_STRIPE_CB,
+ *  then the application does not need to call this function.
+ * \param _dec   A #th_dec_ctx handle.
+ * \param _ycbcr A video buffer structure to fill in.
+ *               <tt>libtheoradec</tt> will fill in all the members of this
+ *                structure, including the pointers to the uncompressed video
+ *                data.
+ *               The memory for this video data is owned by
+ *                <tt>libtheoradec</tt>.
+ *               It may be freed or overwritten without notification when
+ *                subsequent frames are decoded.
+ * \retval 0 Success
+ */
+extern int th_decode_ycbcr_out(th_dec_ctx *_dec,th_ycbcr_buffer _ycbcr);
+/**Frees an allocated decoder instance.
+ * \param _dec A #th_dec_ctx handle.*/
+extern void th_decode_free(th_dec_ctx *_dec);
+/*@}*/
+/*@}*/
+
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif

Added: trunk/theora-exp/include/theora/theoraenc.h
===================================================================
--- trunk/theora-exp/include/theora/theoraenc.h	                        (rev 0)
+++ trunk/theora-exp/include/theora/theoraenc.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,347 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function:
+  last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $
+
+ ********************************************************************/
+
+/**\file
+ * The <tt>libtheoraenc</tt> C encoding API.*/
+
+#if !defined(_O_THEORA_THEORAENC_H_)
+# define _O_THEORA_THEORAENC_H_ (1)
+# include <ogg/ogg.h>
+# include "codec.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+
+/**The configuration information for the VBR encoding mode.
+ * This mode attempts to encode the video with a constant psychovisual
+ *  quality.
+ * It can be enabled by calling th_encode_ctl() with #TH_ENCCTL_SETUP_VBR.
+ * See the #th_info struct documentation for details on how the default
+ *  encoding mode is chosen.*/
+typedef struct th_vbr_cfg{
+  /**The target quality index.
+   * Valid values range from 0 to 63, inclusive, with higher values giving
+   *  higher quality.
+   * Note that, in this case, this corresponds to a <em>perceptual</em>
+   *  quality, and may not translate directly into a quantization setting.
+   * Limits on the admissible quantizers can be controlled below.*/
+  int qi;
+  /**The minimum quality to use for a keyframe.
+   * Valid values range from 0 to 63, inclusive, with higher values giving
+   *  higher quality.*/
+  int kf_qi_min;
+  /**The maximum quality to use for a keyframe.
+   * Valid values range from 0 to 63, inclusive, with higher values giving
+   *  higher quality.
+   * This must be at least as large as #kf_qi_max.*/
+  int kf_qi_max;
+  /**The minimum quality to use for a delta frame.
+   * Valid values range from 0 to 63, inclusive, with higher values giving
+   *  higher quality.*/
+  int df_qi_min;
+  /**The maximum quality to use for a delta frame.
+   * Valid values range from 0 to 63, inclusive, with higher values giving
+   *  higher quality.
+   * This must be at least as large as #df_qi_max.*/
+  int df_qi_max;
+}th_vbr_cfg;
+
+/**The configuration information for the constant QI encoding mode.
+ * This mode encodes the video with a constant quality index.
+ * This is the fastest encoding mode.
+ * It can be enabled by calling th_encode_ctl() with #TH_ENCCTL_SETUP_CQI.
+ * See the #th_info struct documentation for details on how the default
+ *  encoding mode is chosen.*/
+typedef struct th_cqi_cfg{
+  /**The target quality index.
+     Valid values range from 0 to 63, inclusive, with higher values giving
+      higher quality.*/
+  int qi;
+}th_cqi_cfg;
+
+/**\name th_encode_ctl() codes
+ * \anchor encctlcodes
+ * These are the available request codes for th_encode_ctl().
+ * By convention, these are even, to distinguish them from the
+ *  \ref decctlcodes "decoder control codes".
+ * Keep any experimental or vendor-specific values above \c 0x8000.*/
+/*@{*/
+/**Sets the Huffman tables to use.
+ * The tables are copied, not stored by reference, so they can be freed after
+ *  this call.
+ * <tt>NULL</tt> may be specified to revert to the default tables.
+ *
+ * \param[in] _buf <tt>#th_huff_code[#TH_NHUFFMAN_TABLES][#TH_NDCT_TOKENS]</tt>
+ * \retval TH_EFAULT \a _enc_ctx is <tt>NULL</tt>.
+ * \retval TH_EINVAL Encoding has already begun or one or more of the given
+ *                     tables is not full or prefix-free, \a _buf is
+ *                     <tt>NULL</tt> and \a _buf_sz is not zero, or \a _buf is
+ *                     non-<tt>NULL</tt> and \a _buf_sz is not
+ *                     <tt>sizeof(#th_huff_code)*#TH_NHUFFMAN_TABLES*#TH_NDCT_TOKENS</tt>.
+ * \retval TH_IMPL   Not supported by this implementation.*/
+#define TH_ENCCTL_SET_HUFFMAN_CODES (0)
+/**Sets the quantization parameters to use.
+ * The parameters are copied, not stored by reference, so they can be freed
+ *  after this call.
+ * <tt>NULL</tt> may be specified to revert to the default parameters.
+ * For the current encoder, <tt>scale[ci!=0][qi]</tt> must be no greater than
+ *  <tt>scale[ci!=0][qi-1]</tt> and <tt>base[qti][pli][qi][ci]</tt> must be no
+ *  greater than <tt>base[qti][pli][qi-1][ci]</tt>.
+ * These two conditions ensure that the actual quantizer for a given \a qti,
+ *  \a pli, and \a ci does not increase as \a qi increases.
+ *
+ * \param[in] _buf #th_quant_info
+ * \retval TH_EFAULT \a _enc_ctx is <tt>NULL</tt>.
+ * \retval TH_EINVAL Encoding has already begun, the quantization parameters
+ *                    do not meet one of the above stated conditions, \a _buf
+ *                    is <tt>NULL</tt> and \a _buf_sz is not zero, or \a _buf
+ *                    is non-<tt>NULL</tt> and \a _buf_sz is not
+ *                    <tt>sizeof(#th_quant_info)</tt>.
+ * \retval TH_IMPL   Not supported by this implementation.*/
+#define TH_ENCCTL_SET_QUANT_PARAMS (2)
+/**Sets the maximum distance between key frames.
+ * This can be changed during an encode, but will be bounded by
+ *  <tt>1<<th_info#keyframe_granule_shift</tt>.
+ * If it is set before encoding begins, th_info#keyframe_granule_shift will
+ *  be enlarged appropriately.
+ *
+ * \param[in]  _buf <tt>ogg_uint32_t</tt>: The maximum distance between key
+ *                   frames.
+ * \param[out] _buf <tt>ogg_uint32_t</tt>: The actual maximum distance set.
+ * \retval TH_EFAULT \a _enc_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL \a _buf_sz is not <tt>sizeof(ogg_uint32_t)</tt>.
+ * \retval TH_IMPL   Not supported by this implementation.*/
+#define TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE (4)
+/**Disables any encoder features that would prevent lossless transcoding back
+ *  to VP3.
+ * This primarily means disabling block-level QI values and not using 4MV mode
+ *  when any of the luma blocks in a macro block are not coded.
+ * It also includes using the VP3 quantization tables and Huffman codes; if you
+ *  set them explicitly after calling this function, the resulting stream will
+ *  not be VP3-compatible.
+ * If you enable VP3-compatibility when encoding 4:2:2 or 4:4:4 source
+ *  material, or when using a picture region smaller than the full frame (e.g.
+ *  a non-multiple-of-16 width or height), then non-VP3 bitstream features will
+ *  still be disabled, but the stream will still not be VP3-compatible, as VP3
+ *  was not capable of encoding such formats.
+ * If you call this after encoding has already begun, then the quantization
+ *  tables and codebooks cannot be changed, but the frame-level features will
+ *  be enabled or disabled as requested.
+ *
+ * \param[in]  _buf <tt>int</tt>: a non-zero value to enable VP3 compatibility,
+ *                   or 0 to disable it (the default).
+ * \param[out] _buf <tt>int</tt>: 1 if all bitstream features required for
+ *                   VP3-compatibility could be set, and 0 otherwise.
+ *                  The latter will be returned if the pixel format is not
+ *                   4:2:0, the picture region is smaller than the full frame,
+ *                   or if encoding has begun, preventing the quantization
+ *                   tables and codebooks from being set.
+ * \retval TH_EFAULT \a _enc_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL \a _buf_sz is not <tt>sizeof(int)</tt>.
+ * \retval TH_IMPL   Not supported by this implementation.*/
+#define TH_ENCCTL_SET_VP3_COMPATIBLE (10)
+/**Gets the maximum speed level.
+ * Higher speed levels favor quicker encoding over better quality per bit.
+ * Depending on the encoding mode, and the internal algorithms used, quality
+ *  may actually improve, but in this case bitrate will also likely increase.
+ * In any case, overall rate/distortion performance will probably decrease.
+ * The maximum value, and the meaning of each value, may change depending on
+ *  the current encoding mode (VBR vs. CQI, etc.).
+ *
+ * \param[out] _buf int: The maximum encoding speed level.
+ * \retval TH_EFAULT \a _enc_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL \a _buf_sz is not <tt>sizeof(int)</tt>.
+ * \retval TH_IMPL   Not supported by this implementation in the current
+ *                    encoding mode.*/
+#define TH_ENCCTL_GET_SPLEVEL_MAX (12)
+/**Sets the speed level.
+ * By default, the slowest speed (0) is used.
+ *
+ * \param[in] _buf int: The new encoding speed level.
+ *                      0 is slowest, larger values use less CPU.
+ * \retval TH_EFAULT \a _enc_ctx or \a _buf is <tt>NULL</tt>.
+ * \retval TH_EINVAL \a _buf_sz is not <tt>sizeof(int)</tt>, or the
+ *                    encoding speed level is out of bounds.
+ *                   The maximum encoding speed level may be
+ *                    implementation- and encoding mode-specific, and can be
+ *                    obtained via #TH_ENCCTL_GET_SPLEVEL_MAX.
+ * \retval TH_IMPL   Not supported by this implementation in the current
+ *                    encoding mode.*/
+#define TH_ENCCTL_SET_SPLEVEL (14)
+/**Puts the encoder in VBR mode.
+ * This can be done at any time during the encoding process, with different
+ *  configuration parameters, to encode different regions of the video segment
+ *  with different qualities.
+ * See the #th_info struct documentation for details on how the default
+ *  encoding mode is chosen.
+ *
+ * \param[in] _buf <tt>#th_vbr_cfg</tt>: the configuration parameters.
+ *                 This may be <tt>NULL</tt>, in which case the current VBR
+ *                  configuration is unchanged.
+ *                 The default is to use the QI setting passed in via the
+ *                  #th_info struct when the encoder was initialized, with a
+ *                  full range of admissible quantizers.
+ * \retval TH_EFAULT \a _enc_ctx is <tt>NULL</tt>.
+ * \retval TH_EINVAL The configuration parameters do not meet one of their
+ *                    stated requirements, \a _buf is <tt>NULL</tt> and
+ *                    \a _buf_sz is not zero, or \a _buf is non-<tt>NULL</tt>
+ *                    and \a _buf_sz is not <tt>sizeof(#th_vbr_cfg)</tt>.
+ * \retval TH_IMPL   Not supported by this implementation.*/
+#define TH_ENCCTL_SETUP_VBR (16)
+/**Puts the encoder in CQI mode.
+ * This can be done at any time during the encoding process, with different QI
+ *  values.
+ * See the #th_info struct documentation for details on how the default
+ *  encoding mode is chosen.
+ *
+ * \param[in] _buf <tt>#th_cqi_cfg</tt>: the configuration parameters.
+ *                 This may be <tt>NULL</tt>, in which case the current CQI
+ *                  configuration is unchanged.
+ *                 The default is to use the QI setting passed in via the
+ *                  #th_info struct when the encoder was initialized.
+ * \retval TH_EFAULT \a _enc_ctx is <tt>NULL</tt>.
+ * \retval TH_EINVAL \a _buf_sz is not <tt>sizeof(#th_cqi_cfg)</tt>.
+ * \retval TH_IMPL   Not supported by this implementation.*/
+#define TH_ENCCTL_SETUP_CQI (18)
+/*@}*/
+
+
+
+/**The quantization parameters used by VP3.*/
+extern const th_quant_info TH_VP31_QUANT_INFO;
+
+/**The Huffman tables used by VP3.*/
+extern const th_huff_code
+ TH_VP31_HUFF_CODES[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS];
+
+
+
+/**\name Encoder state
+   The following data structure is opaque, and its contents are not publicly
+    defined by this API.
+   Referring to its internals directly is unsupported, and may break without
+    warning.*/
+/*@{*/
+/**The encoder context.*/
+typedef struct th_enc_ctx    th_enc_ctx;
+/*@}*/
+
+
+
+/**\defgroup encfuncs Functions for Encoding*/
+/*@{*/
+/**\name Functions for encoding
+ * You must link to <tt>libtheoraenc</tt> and <tt>libtheoradec</tt>
+ *  if you use any of the functions in this section.
+ *
+ * The functions are listed in the order they are used in a typical encode.
+ * The basic steps are:
+ * - Fill in a #th_info structure with details on the format of the video you
+ *    wish to encode.
+ * - Allocate a #th_enc_ctx handle with th_encode_alloc().
+ * - Perform any additional encoder configuration required with
+ *    th_encode_ctl().
+ * - Repeatedly call th_encode_flushheader() to retrieve all the header
+ *    packets.
+ * - For each uncompressed frame:
+ *   - Submit the uncompressed frame via th_encode_ycbcr_in()
+ *   - Repeatedly call th_encode_packetout() to retrieve any video data packets
+ *      that are ready.
+ * - Call th_encode_free() to release all encoder memory.*/
+/*@{*/
+/**Allocates an encoder instance.
+ * \param _info A #th_info struct filled with the desired encoding parameters.
+ * \return The initialized #th_enc_ctx handle.
+ * \retval NULL If the encoding parameters were invalid.*/
+extern th_enc_ctx *th_encode_alloc(const th_info *_info);
+/**Encoder control function.
+ * This is used to provide advanced control the encoding process.
+ * \param _enc    A #th_enc_ctx handle.
+ * \param _req    The control code to process.
+ *                See \ref encctlcodes "the list of available control codes"
+ *                 for details.
+ * \param _buf    The parameters for this control code.
+ * \param _buf_sz The size of the parameter buffer.*/
+extern int th_encode_ctl(th_enc_ctx *_enc,int _req,void *_buf,size_t _buf_sz);
+/**Outputs the next header packet.
+ * This should be called repeatedly after encoder initialization until it
+ *  returns 0 in order to get all of the header packets, in order, before
+ *  encoding actual video data.
+ * \param _enc      A #th_enc_ctx handle.
+ * \param _comments The metadata to place in the comment header, when it is
+ *                   encoded.
+ * \param _op       An <tt>ogg_packet</tt> structure to fill.
+ *                  All of the elements of this structure will be set,
+ *                   including a pointer to the header data.
+ *                  The memory for the header data is owned by
+ *                   <tt>libtheoraenc</tt>, and may be invalidated when the
+ *                   next encoder function is called.
+ * \return A positive value indicates that a header packet was successfully
+ *          produced.
+ * \retval 0         No packet was produced, and no more header packets remain.
+ * \retval TH_EFAULT \a _enc, \a _comments, or \a _op was <tt>NULL</tt>.*/
+extern int th_encode_flushheader(th_enc_ctx *_enc,
+ th_comment *_comments,ogg_packet *_op);
+/**Submits an uncompressed frame to the encoder.
+ * \param _enc   A #th_enc_ctx handle.
+ * \param _ycbcr A buffer of Y'CbCr data to encode.
+ * \retval 0         Success.
+ * \retval TH_EFAULT \a _enc or \a _ycbcr is <tt>NULL</tt>.
+ * \retval TH_EINVAL The buffer size does not match the frame size the encoder
+ *                    was initialized with, or encoding has already
+ *                    completed.*/
+extern int th_encode_ycbcr_in(th_enc_ctx *_enc,th_ycbcr_buffer _ycbcr);
+/**Retrieves encoded video data packets.
+ * This should be called repeatedly after each frame is submitted to flush any
+ *  encoded packets, until it returns 0.
+ * The encoder will not buffer these packets as subsequent frames are
+ *  compressed, so a failure to do so will result in lost video data.
+ * \note Currently the encoder operates in a one-frame-in, one-packet-out
+ *        manner.
+ *       However, this may be changed in the future.
+ * \param _enc  A #th_enc_ctx handle.
+ * \param _last Set this flag to a non-zero value if no more uncompressed
+ *               frames will be submitted.
+ *              This ensures that a proper EOS flag is set on the last packet.
+ * \param _op   An <tt>ogg_packet</tt> structure to fill.
+ *              All of the elements of this structure will be set, including a
+ *               pointer to the video data.
+ *              The memory for the video data is owned by
+ *               <tt>libtheoraenc</tt>, and may be invalidated when the next
+ *               encoder function is called.
+ * \return A positive value indicates that a video data packet was successfully
+ *          produced.
+ * \retval 0         No packet was produced, and no more encoded video data
+ *                    remains.
+ * \retval TH_EFAULT \a _enc or \a _op was <tt>NULL</tt>.*/
+extern int th_encode_packetout(th_enc_ctx *_enc,int _last,ogg_packet *_op);
+/**Frees an allocated encoder instance.
+ * \param _enc A #th_enc_ctx handle.*/
+extern void th_encode_free(th_enc_ctx *_enc);
+/*@}*/
+/*@}*/
+
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif

Added: trunk/theora-exp/lib/Makefile.am
===================================================================
--- trunk/theora-exp/lib/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/lib/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,89 @@
+if TH_ENCODER
+ENCODER_LA=libtheoraenc.la
+else
+ENCODER_LA=
+endif
+
+lib_LTLIBRARIES = libtheoradec.la libtheoracompat.la $(ENCODER_LA)
+
+INCLUDES = -I $(top_srcdir)/include -I $(top_srcdir)/include/theora/compat
+AM_CFLAGS = $(OGG_CFLAGS) $(OPTIMIZATION_CFLAGS)
+
+EXTRA_DIST = \
+	x86/cpu.c \
+	x86/mmxidct.c \
+	x86/mmxfrag.c \
+	x86/mmxstate.c \
+	x86/x86state.c
+
+if OC_X86ASM
+X86ASM_FILES = \
+	x86/cpu.c \
+	x86/mmxidct.c \
+	x86/mmxfrag.c \
+	x86/mmxstate.c \
+	x86/x86state.c
+endif
+
+noinst_HEADERS = \
+	apiwrapper.h \
+	dct.h \
+	decint.h \
+	dequant.h \
+	encint.h \
+	enquant.h \
+	encvbr.h \
+	fdct.h \
+	huffdec.h \
+	huffenc.h \
+	huffman.h \
+	idct.h \
+	internal.h \
+	ocintrin.h \
+	psych.h \
+	quant.h \
+	x86/cpu.h \
+	x86/x86int.h
+
+libtheoracompat_la_SOURCES = \
+	apiwrapper.c \
+	decapiwrapper.c
+#	encapiwrapper.c
+
+libtheoradec_la_SOURCES = \
+	decinfo.c \
+	decode.c \
+	dequant.c \
+	fragment.c \
+	huffdec.c \
+	idct.c \
+	info.c \
+	internal.c \
+	quant.c \
+	state.c  \
+	$(X86ASM_FILES)
+
+
+libtheoradec_la_LDFLAGS = -version-info @V_LIB_CURRENT@:@V_LIB_REVISION@:@V_LIB_AGE@ @OGG_LIBS@
+
+libtheoraenc_la_SOURCES = \
+	bitrate.c \
+	encinfo.c \
+	encode.c \
+	encmsc.c \
+	encvbr.c \
+	enquant.c \
+	fdct.c \
+	huffenc.c \
+	impmap.c \
+	mcenc.c \
+	psych.c
+
+libtheoraenc_la_LDFLAGS = -version-info @V_LIB_CURRENT@:@V_LIB_REVISION@:@V_LIB_AGE@ @OGG_LIBS@
+
+debug:
+	$(MAKE) all CFLAGS="@DEBUG@" LDFLAGS="-lefence"
+
+profile:
+	$(MAKE) all CFLAGS="@PROFILE@"
+

Added: trunk/theora-exp/lib/apiwrapper.c
===================================================================
--- trunk/theora-exp/lib/apiwrapper.c	                        (rev 0)
+++ trunk/theora-exp/lib/apiwrapper.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,149 @@
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "apiwrapper.h"
+
+
+
+const char *theora_version_string(void){
+  return th_version_string();
+}
+
+ogg_uint32_t theora_version_number(void){
+  return th_version_number();
+}
+
+void theora_info_init(theora_info *_ci){
+  memset(_ci,0,sizeof(*_ci));
+}
+
+void theora_info_clear(theora_info *_ci){
+  th_api_wrapper *api;
+  api=(th_api_wrapper *)_ci->codec_setup;
+  memset(_ci,0,sizeof(*_ci));
+  if(api!=NULL){
+    if(api->clear!=NULL)(*api->clear)(api);
+    free(api);
+  }
+}
+
+void theora_clear(theora_state *_th){
+  /*Provide compatibility with mixed encoder and decoder shared lib versions.*/
+  if(_th->internal_decode!=NULL){
+    (*((oc_state_dispatch_vtbl *)_th->internal_decode)->clear)(_th);
+  }
+  if(_th->internal_encode!=NULL){
+    (*((oc_state_dispatch_vtbl *)_th->internal_encode)->clear)(_th);
+  }
+  if(_th->i!=NULL)theora_info_clear(_th->i);
+  memset(_th,0,sizeof(*_th));
+}
+
+int theora_control(theora_state *_th,int _req,void *_buf,size_t _buf_sz){
+  /*Provide compatibility with mixed encoder and decoder shared lib versions.*/
+  if(_th->internal_decode!=NULL){
+    return (*((oc_state_dispatch_vtbl *)_th->internal_decode)->control)(_th,
+     _req,_buf,_buf_sz);
+  }
+  else if(_th->internal_encode!=NULL){
+    return (*((oc_state_dispatch_vtbl *)_th->internal_encode)->control)(_th,
+     _req,_buf,_buf_sz);
+  }
+  else return TH_EINVAL;
+}
+
+ogg_int64_t theora_granule_frame(theora_state *_th,ogg_int64_t _gp){
+  /*Provide compatibility with mixed encoder and decoder shared lib versions.*/
+  if(_th->internal_decode!=NULL){
+    return (*((oc_state_dispatch_vtbl *)_th->internal_decode)->granule_frame)(
+     _th,_gp);
+  }
+  else if(_th->internal_encode!=NULL){
+    return (*((oc_state_dispatch_vtbl *)_th->internal_encode)->granule_frame)(
+     _th,_gp);
+  }
+  else return -1;
+}
+
+double theora_granule_time(theora_state *_th, ogg_int64_t _gp){
+  /*Provide compatibility with mixed encoder and decoder shared lib versions.*/
+  if(_th->internal_decode!=NULL){
+    return (*((oc_state_dispatch_vtbl *)_th->internal_decode)->granule_time)(
+     _th,_gp);
+  }
+  else if(_th->internal_encode!=NULL){
+    return (*((oc_state_dispatch_vtbl *)_th->internal_encode)->granule_time)(
+     _th,_gp);
+  }
+  else return -1;
+}
+
+void oc_theora_info2th_info(th_info *_info,const theora_info *_ci){
+  _info->version_major=_ci->version_major;
+  _info->version_minor=_ci->version_minor;
+  _info->version_subminor=_ci->version_subminor;
+  _info->frame_width=_ci->width;
+  _info->frame_height=_ci->height;
+  _info->pic_width=_ci->frame_width;
+  _info->pic_height=_ci->frame_height;
+  _info->pic_x=_ci->offset_x;
+  _info->pic_y=_ci->offset_y;
+  _info->fps_numerator=_ci->fps_numerator;
+  _info->fps_denominator=_ci->fps_denominator;
+  _info->aspect_numerator=_ci->aspect_numerator;
+  _info->aspect_denominator=_ci->aspect_denominator;
+  switch(_ci->colorspace){
+    case OC_CS_ITU_REC_470M:_info->colorspace=TH_CS_ITU_REC_470M;break;
+    case OC_CS_ITU_REC_470BG:_info->colorspace=TH_CS_ITU_REC_470BG;break;
+    default:_info->colorspace=TH_CS_UNSPECIFIED;break;
+  }
+  switch(_ci->pixelformat){
+    case OC_PF_420:_info->pixel_fmt=TH_PF_420;break;
+    case OC_PF_422:_info->pixel_fmt=TH_PF_422;break;
+    case OC_PF_444:_info->pixel_fmt=TH_PF_444;break;
+    default:_info->pixel_fmt=TH_PF_RSVD;
+  }
+  _info->target_bitrate=_ci->target_bitrate;
+  _info->quality=_ci->quality;
+  _info->keyframe_granule_shift=_ci->keyframe_frequency_force>0?
+   OC_MINI(31,oc_ilog(_ci->keyframe_frequency_force-1)):0;
+}
+
+int theora_packet_isheader(ogg_packet *_op){
+  return th_packet_isheader(_op);
+}
+
+int theora_packet_iskeyframe(ogg_packet *_op){
+  return th_packet_iskeyframe(_op);
+}
+
+int theora_granule_shift(theora_info *_ci){
+  /*This breaks when keyframe_frequency_force is not positive or is larger than
+     2**31 (if your int is more than 32 bits), but that's what the original
+     function does.*/
+  return oc_ilog(_ci->keyframe_frequency_force-1);
+}
+
+void theora_comment_init(theora_comment *_tc){
+  th_comment_init((th_comment *)_tc);
+}
+
+char *theora_comment_query(theora_comment *_tc,char *_tag,int _count){
+  return th_comment_query((th_comment *)_tc,_tag,_count);
+}
+
+int theora_comment_query_count(theora_comment *_tc,char *_tag){
+  return th_comment_query_count((th_comment *)_tc,_tag);
+}
+
+void theora_comment_clear(theora_comment *_tc){
+  th_comment_clear((th_comment *)_tc);
+}
+
+void theora_comment_add(theora_comment *_tc,char *_comment){
+  th_comment_add((th_comment *)_tc,_comment);
+}
+
+void theora_comment_add_tag(theora_comment *_tc, char *_tag, char *_value){
+  th_comment_add_tag((th_comment *)_tc,_tag,_value);
+}

Added: trunk/theora-exp/lib/apiwrapper.h
===================================================================
--- trunk/theora-exp/lib/apiwrapper.h	                        (rev 0)
+++ trunk/theora-exp/lib/apiwrapper.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,37 @@
+#if !defined(_apiwrapper_H)
+# define _apiwrapper_H (1)
+# include <ogg/ogg.h>
+# include <theora/theora.h>
+# include "theora/theoradec.h"
+# include "theora/theoraenc.h"
+# include "internal.h"
+
+typedef struct th_api_wrapper th_api_wrapper;
+typedef struct th_api_info    th_api_info;
+
+/*Provide an entry point for the codec setup to clear itself in case we ever
+   want to break pieces off into a common base library shared by encoder and
+   decoder.
+  In addition, this makes several other pieces of the API wrapper cleaner.*/
+typedef void (*oc_setup_clear_func)(void *_ts);
+
+/*Generally only one of these pointers will be non-NULL in any given instance.
+  Technically we do not even really need this struct, since we should be able
+   to figure out which one from "context", but doing it this way makes sure we
+   don't flub it up.*/
+struct th_api_wrapper{
+  oc_setup_clear_func  clear;
+  th_setup_info       *setup;
+  th_dec_ctx          *decode;
+  th_enc_ctx          *encode;
+};
+
+struct th_api_info{
+  th_api_wrapper api;
+  theora_info    info;
+};
+
+
+void oc_theora_info2th_info(th_info *_info,const theora_info *_ci);
+
+#endif

Added: trunk/theora-exp/lib/bitrate.c
===================================================================
--- trunk/theora-exp/lib/bitrate.c	                        (rev 0)
+++ trunk/theora-exp/lib/bitrate.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,8580 @@
+#include <string.h>
+#include <ogg/ogg.h>
+#include "encint.h"
+
+ogg_uint16_t OC_RES_BITRATES[64][3][OC_NMODES][16]={
+  {
+    {
+      /*Y'  qi=0  OC_MODE_INTRA*/
+      {
+          476,  632, 1372, 2027, 2619, 3272, 3956, 4620,
+         5300, 5974, 6626, 7245, 7836, 8474, 9056,12823
+      },
+      /*Y'  qi=0  OC_MODE_INTER_NOMV*/
+      {
+           74,   95,  127,  263,  592, 1010, 1582, 2359,
+         3295, 4275, 5286, 6236, 6988, 7777, 8725,13318
+      },
+      /*Y'  qi=0  OC_MODE_INTER_MV*/
+      {
+          223,  258,  305,  459,  824, 1461, 2273, 3168,
+         4062, 4967, 5893, 6785, 7694, 8470, 9289,12589
+      },
+      /*Y'  qi=0  OC_MDOE_INTER_MV_LAST*/
+      {
+          199,  229,  266,  420,  776, 1350, 2121, 2987,
+         3909, 4868, 5841, 6780, 7688, 8529, 9327,12668
+      },
+      /*Y'  qi=0  OC_MODE_INTER_MV_LAST2*/
+      {
+          221,  261,  295,  436,  793, 1375, 2144, 3011,
+         3936, 4895, 5882, 6839, 7776, 8639, 9398,12826
+      },
+      /*Y'  qi=0  OC_MODE_INTER_MV_FOUR*/
+      {
+          252,  289,  324,  477,  844, 1463, 2274, 3173,
+         4100, 5046, 5982, 6909, 7780, 8588, 9358,12248
+      },
+      /*Y'  qi=0  OC_MODE_GOLDEN_NOMV*/
+      {
+          265,  297,  408,  739, 1444, 1989, 2404, 3139,
+         3879, 4394, 5131, 5967, 6262, 6833, 7631,13096
+      },
+      /*Y'  qi=0  OC_MODE_GOLDEN_MV*/
+      {
+          316,  348,  381,  625, 1158, 1661, 2342, 3151,
+         4094, 5062, 6045, 6988, 7862, 8665, 9420,12760
+      }
+    },
+    {
+      /*Cb  qi=0  OC_MODE_INTRA*/
+      {
+          457, 1182, 2197, 3154, 4159, 5256, 6252, 7084,
+         7945, 8846, 9524,10479,11039,11905,12674,16114
+      },
+      /*Cb  qi=0  OC_MODE_INTER_NOMV*/
+      {
+           55,   90,  260,  679, 1505, 3029, 4482, 5749,
+         6616, 7001, 7349, 7457, 7671, 7492, 7782, 8001
+      },
+      /*Cb  qi=0  OC_MODE_INTER_MV*/
+      {
+           35,  173,  510, 1346, 2519, 3995, 5144, 6672,
+         7823, 8681, 9591,10611,10955,12535,12121,14330
+      },
+      /*Cb  qi=0  OC_MDOE_INTER_MV_LAST*/
+      {
+           34,  156,  476, 1130, 2159, 3629, 5215, 6754,
+         8110, 9218,10134,10300,10982,10395,10888,10719
+      },
+      /*Cb  qi=0  OC_MODE_INTER_MV_LAST2*/
+      {
+           33,  166,  497, 1140, 2157, 3630, 5234, 6730,
+         8149, 9295,10312,10488,10568,10645,10943,11595
+      },
+      /*Cb  qi=0  OC_MODE_INTER_MV_FOUR*/
+      {
+           20,  178,  526, 1239, 2328, 3699, 5120, 6558,
+         7873, 8890, 9785,10528,11189,11793,12165,14903
+      },
+      /*Cb  qi=0  OC_MODE_GOLDEN_NOMV*/
+      {
+          112,  220,  500, 1066, 1908, 3199, 3770, 4392,
+         4592, 5275, 5284, 5458, 6029, 6134, 6305, 8462
+      },
+      /*Cb  qi=0  OC_MODE_GOLDEN_MV*/
+      {
+           23,  204,  572, 1248, 2271, 3523, 4832, 5771,
+         6389, 6313, 6357, 6756, 6406, 6533, 6549, 8494
+      }
+    },
+    {
+      /*Cr  qi=0  OC_MODE_INTRA*/
+      {
+          354,  976, 1749, 2553, 3277, 3998, 4656, 5295,
+         5948, 6531, 7173, 7740, 8309, 9125, 9439,11887
+      },
+      /*Cr  qi=0  OC_MODE_INTER_NOMV*/
+      {
+           47,   64,  105,  209,  447,  916, 2069, 2923,
+         3616, 3837, 4237, 4515, 4435, 4719, 4754, 4264
+      },
+      /*Cr  qi=0  OC_MODE_INTER_MV*/
+      {
+           32,  112,  258,  636, 1207, 1919, 2837, 3772,
+         4447, 5092, 5832, 6519, 6945, 6537, 7111, 8700
+      },
+      /*Cr  qi=0  OC_MDOE_INTER_MV_LAST*/
+      {
+           33,  115,  236,  607, 1107, 1681, 2592, 3621,
+         4588, 5507, 6271, 6687, 7354, 7199, 6916, 5722
+      },
+      /*Cr  qi=0  OC_MODE_INTER_MV_LAST2*/
+      {
+           31,  120,  236,  589, 1125, 1655, 2550, 3525,
+         4290, 5056, 5672, 6112, 6678, 6058, 5292, 5296
+      },
+      /*Cr  qi=0  OC_MODE_INTER_MV_FOUR*/
+      {
+           20,  120,  261,  663, 1245, 1871, 2711, 3641,
+         4597, 5351, 6091, 6884, 7369, 7670, 8045, 9350
+      },
+      /*Cr  qi=0  OC_MODE_GOLDEN_NOMV*/
+      {
+           93,  116,  202,  456,  960, 1495, 2274, 2914,
+         3091, 3475, 3958, 4175, 4293, 4415, 4675, 4808
+      },
+      /*Cr  qi=0  OC_MODE_GOLDEN_MV*/
+      {
+           24,  135,  267,  655, 1226, 1777, 2537, 3357,
+         3704, 3986, 4465, 4350, 4359, 4758, 4889, 4295
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=1  OC_MODE_INTRA*/
+      {
+          485,  652, 1438, 2134, 2764, 3465, 4192, 4881,
+         5591, 6285, 6958, 7579, 8191, 8840, 9430,13291
+      },
+      /*Y'  qi=1  OC_MODE_INTER_NOMV*/
+      {
+           78,   99,  138,  311,  688, 1153, 1817, 2695,
+         3700, 4744, 5813, 6771, 7547, 8466, 9413,13919
+      },
+      /*Y'  qi=1  OC_MODE_INTER_MV*/
+      {
+          239,  270,  317,  502,  969, 1700, 2600, 3515,
+         4434, 5331, 6241, 7209, 8081, 8896, 9762,13081
+      },
+      /*Y'  qi=1  OC_MDOE_INTER_MV_LAST*/
+      {
+          192,  229,  273,  460,  877, 1539, 2384, 3307,
+         4282, 5283, 6288, 7256, 8170, 9040, 9821,13176
+      },
+      /*Y'  qi=1  OC_MODE_INTER_MV_LAST2*/
+      {
+          225,  268,  304,  476,  898, 1566, 2412, 3333,
+         4307, 5316, 6341, 7331, 8245, 9114, 9900,13359
+      },
+      /*Y'  qi=1  OC_MODE_INTER_MV_FOUR*/
+      {
+          253,  292,  333,  521,  951, 1655, 2540, 3485,
+         4458, 5447, 6428, 7393, 8270, 9107, 9851,12755
+      },
+      /*Y'  qi=1  OC_MODE_GOLDEN_NOMV*/
+      {
+          285,  309,  441,  905, 1635, 2025, 2594, 3251,
+         4036, 4655, 5471, 6248, 6556, 7138, 7876,13739
+      },
+      /*Y'  qi=1  OC_MODE_GOLDEN_MV*/
+      {
+          339,  348,  387,  689, 1234, 1797, 2566, 3441,
+         4454, 5463, 6521, 7493, 8402, 9187, 9947,13286
+      }
+    },
+    {
+      /*Cb  qi=1  OC_MODE_INTRA*/
+      {
+          469, 1231, 2305, 3310, 4341, 5465, 6471, 7341,
+         8227, 9150, 9872,10820,11414,12362,13075,16640
+      },
+      /*Cb  qi=1  OC_MODE_INTER_NOMV*/
+      {
+           57,   99,  304,  797, 1727, 3370, 4809, 6067,
+         6910, 7450, 7468, 7969, 7648, 7747, 7930, 8330
+      },
+      /*Cb  qi=1  OC_MODE_INTER_MV*/
+      {
+           27,  192,  571, 1432, 2674, 4147, 5662, 7246,
+         8536, 9590,10045,11387,12736,14068,12607,14603
+      },
+      /*Cb  qi=1  OC_MDOE_INTER_MV_LAST*/
+      {
+           35,  170,  539, 1268, 2364, 3963, 5607, 7175,
+         8543, 9659,10420,10704,11477,10757,11486,11450
+      },
+      /*Cb  qi=1  OC_MODE_INTER_MV_LAST2*/
+      {
+           33,  184,  563, 1277, 2368, 3963, 5674, 7210,
+         8568, 9673,10362,10549,10951,11780,11816,12030
+      },
+      /*Cb  qi=1  OC_MODE_INTER_MV_FOUR*/
+      {
+           20,  196,  594, 1369, 2524, 3983, 5469, 6954,
+         8218, 9281,10111,10831,11632,12277,13257,15247
+      },
+      /*Cb  qi=1  OC_MODE_GOLDEN_NOMV*/
+      {
+          116,  216,  592, 1122, 1905, 3353, 4044, 4836,
+         4835, 5581, 5451, 5961, 6350, 6610, 6457, 8852
+      },
+      /*Cb  qi=1  OC_MODE_GOLDEN_MV*/
+      {
+           24,  208,  634, 1382, 2483, 3824, 5133, 6049,
+         6686, 6738, 6955, 7293, 6615, 7244, 7503, 8992
+      }
+    },
+    {
+      /*Cr  qi=1  OC_MODE_INTRA*/
+      {
+          363, 1030, 1850, 2693, 3453, 4200, 4866, 5526,
+         6253, 6844, 7498, 8073, 8633, 9539, 9893,12400
+      },
+      /*Cr  qi=1  OC_MODE_INTER_NOMV*/
+      {
+           49,   67,  117,  247,  551, 1115, 2247, 3264,
+         3829, 4189, 4330, 4677, 4879, 4746, 5399, 4432
+      },
+      /*Cr  qi=1  OC_MODE_INTER_MV*/
+      {
+           24,  118,  295,  719, 1275, 1932, 2956, 3993,
+         4952, 5669, 6508, 7293, 7309, 7100, 7450, 8738
+      },
+      /*Cr  qi=1  OC_MDOE_INTER_MV_LAST*/
+      {
+           34,  121,  262,  680, 1231, 1894, 2879, 3976,
+         4980, 5929, 6596, 7111, 7546, 7237, 7229, 6053
+      },
+      /*Cr  qi=1  OC_MODE_INTER_MV_LAST2*/
+      {
+           31,  126,  261,  676, 1270, 1874, 2856, 3851,
+         4701, 5384, 6003, 6573, 6988, 6267, 6763, 5411
+      },
+      /*Cr  qi=1  OC_MODE_INTER_MV_FOUR*/
+      {
+           21,  127,  288,  758, 1402, 2100, 3002, 4008,
+         4936, 5739, 6483, 7048, 7770, 8247, 8413, 9825
+      },
+      /*Cr  qi=1  OC_MODE_GOLDEN_NOMV*/
+      {
+           96,  120,  249,  574,  865, 1688, 2528, 3322,
+         3226, 3537, 4023, 4444, 4583, 4656, 4877, 4962
+      },
+      /*Cr  qi=1  OC_MODE_GOLDEN_MV*/
+      {
+           25,  138,  289,  740, 1370, 1991, 2803, 3677,
+         4205, 4319, 4979, 4651, 4860, 5132, 5524, 4751
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=2  OC_MODE_INTRA*/
+      {
+          496,  675, 1519, 2272, 2949, 3692, 4456, 5186,
+         5929, 6637, 7334, 7968, 8594, 9252, 9861,13843
+      },
+      /*Y'  qi=2  OC_MODE_INTER_NOMV*/
+      {
+           82,  103,  151,  371,  801, 1327, 2118, 3113,
+         4204, 5312, 6412, 7346, 8173, 9147,10260,14547
+      },
+      /*Y'  qi=2  OC_MODE_INTER_MV*/
+      {
+          236,  280,  336,  568, 1108, 1952, 2937, 3917,
+         4856, 5829, 6789, 7761, 8652, 9519,10375,13705
+      },
+      /*Y'  qi=2  OC_MDOE_INTER_MV_LAST*/
+      {
+          199,  233,  282,  513, 1012, 1775, 2705, 3698,
+         4729, 5789, 6830, 7825, 8754, 9653,10445,13772
+      },
+      /*Y'  qi=2  OC_MODE_INTER_MV_LAST2*/
+      {
+          226,  270,  305,  523, 1031, 1797, 2733, 3715,
+         4762, 5823, 6879, 7917, 8872, 9710,10517,13980
+      },
+      /*Y'  qi=2  OC_MODE_INTER_MV_FOUR*/
+      {
+          260,  297,  348,  581, 1095, 1904, 2870, 3881,
+         4912, 5950, 6980, 7968, 8860, 9697,10464,13338
+      },
+      /*Y'  qi=2  OC_MODE_GOLDEN_NOMV*/
+      {
+          279,  306,  476,  957, 1725, 2297, 2839, 3633,
+         4444, 5124, 6036, 6529, 6922, 7776, 7979,14329
+      },
+      /*Y'  qi=2  OC_MODE_GOLDEN_MV*/
+      {
+          308,  353,  394,  776, 1383, 2030, 2871, 3845,
+         4925, 6026, 7099, 8106, 8994, 9831,10572,13876
+      }
+    },
+    {
+      /*Cb  qi=2  OC_MODE_INTRA*/
+      {
+          485, 1291, 2447, 3500, 4570, 5739, 6737, 7641,
+         8558, 9482,10212,11223,11788,12802,13591,17150
+      },
+      /*Cb  qi=2  OC_MODE_INTER_NOMV*/
+      {
+           61,  110,  358,  940, 1968, 3694, 5260, 6435,
+         7182, 7927, 7849, 8157, 8033, 7860, 8125, 8433
+      },
+      /*Cb  qi=2  OC_MODE_INTER_MV*/
+      {
+           28,  209,  645, 1570, 2916, 4580, 6179, 7715,
+         8988, 9990,10472,11590,12642,13135,13104,14829
+      },
+      /*Cb  qi=2  OC_MDOE_INTER_MV_LAST*/
+      {
+           37,  188,  619, 1436, 2615, 4315, 6093, 7691,
+         9098,10234,11175,11294,11304,11712,11862,11917
+      },
+      /*Cb  qi=2  OC_MODE_INTER_MV_LAST2*/
+      {
+           35,  204,  644, 1442, 2594, 4292, 6149, 7725,
+         9140,10176,10551,11524,11779,11536,12599,12935
+      },
+      /*Cb  qi=2  OC_MODE_INTER_MV_FOUR*/
+      {
+           21,  214,  673, 1535, 2772, 4314, 5874, 7395,
+         8652, 9640,10566,11408,12140,12526,13187,15633
+      },
+      /*Cb  qi=2  OC_MODE_GOLDEN_NOMV*/
+      {
+          125,  261,  613, 1204, 2159, 3435, 4405, 5125,
+         5145, 5595, 5789, 6160, 6574, 6878, 6799, 8953
+      },
+      /*Cb  qi=2  OC_MODE_GOLDEN_MV*/
+      {
+           26,  229,  720, 1534, 2729, 4083, 5394, 6314,
+         6714, 6961, 6843, 6942, 6645, 7057, 7525, 9052
+      }
+    },
+    {
+      /*Cr  qi=2  OC_MODE_INTRA*/
+      {
+          373, 1086, 1967, 2863, 3653, 4449, 5158, 5834,
+         6643, 7204, 7893, 8529, 9091, 9986,10418,12982
+      },
+      /*Cr  qi=2  OC_MODE_INTER_NOMV*/
+      {
+           51,   72,  135,  303,  678, 1508, 2543, 3703,
+         4121, 4334, 4711, 4893, 5119, 4983, 5223, 4521
+      },
+      /*Cr  qi=2  OC_MODE_INTER_MV*/
+      {
+           25,  129,  331,  818, 1441, 2224, 3309, 4478,
+         5354, 6231, 6735, 7665, 8357, 7694, 8091, 9234
+      },
+      /*Cr  qi=2  OC_MDOE_INTER_MV_LAST*/
+      {
+           34,  131,  298,  786, 1399, 2180, 3303, 4462,
+         5452, 6530, 7106, 7346, 8099, 7448, 7438, 5942
+      },
+      /*Cr  qi=2  OC_MODE_INTER_MV_LAST2*/
+      {
+           34,  138,  298,  772, 1438, 2170, 3303, 4244,
+         5075, 5879, 6437, 6807, 7101, 6423, 6783, 5220
+      },
+      /*Cr  qi=2  OC_MODE_INTER_MV_FOUR*/
+      {
+           22,  136,  331,  873, 1595, 2382, 3392, 4427,
+         5382, 6184, 6957, 7928, 8173, 8378, 9142,10498
+      },
+      /*Cr  qi=2  OC_MODE_GOLDEN_NOMV*/
+      {
+          107,  140,  314,  662,  874, 1914, 2905, 3181,
+         3303, 3796, 4349, 4571, 4694, 5076, 5092, 5231
+      },
+      /*Cr  qi=2  OC_MODE_GOLDEN_MV*/
+      {
+           27,  146,  330,  845, 1531, 2264, 3100, 3930,
+         4173, 4362, 5105, 4699, 4814, 5492, 5364, 4739
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=3  OC_MODE_INTRA*/
+      {
+          502,  686, 1550, 2333, 3044, 3812, 4592, 5334,
+         6087, 6806, 7513, 8156, 8783, 9448,10058,14101
+      },
+      /*Y'  qi=3  OC_MODE_INTER_NOMV*/
+      {
+           83,  105,  157,  404,  857, 1425, 2272, 3316,
+         4426, 5553, 6654, 7600, 8366, 9286,10513,14877
+      },
+      /*Y'  qi=3  OC_MODE_INTER_MV*/
+      {
+          240,  285,  343,  607, 1194, 2087, 3079, 4078,
+         5034, 6016, 6990, 7961, 8916, 9788,10614,14008
+      },
+      /*Y'  qi=3  OC_MDOE_INTER_MV_LAST*/
+      {
+          199,  235,  286,  538, 1081, 1900, 2867, 3884,
+         4940, 6018, 7075, 8085, 9014, 9879,10700,14015
+      },
+      /*Y'  qi=3  OC_MODE_INTER_MV_LAST2*/
+      {
+          232,  273,  328,  581, 1145, 1980, 2949, 3937,
+         4975, 6048, 7111, 8110, 9070, 9956,10742,14274
+      },
+      /*Y'  qi=3  OC_MODE_INTER_MV_FOUR*/
+      {
+          259,  302,  356,  617, 1178, 2040, 3036, 4068,
+         5121, 6174, 7203, 8188, 9101, 9925,10700,13631
+      },
+      /*Y'  qi=3  OC_MODE_GOLDEN_NOMV*/
+      {
+          286,  286,  486, 1041, 1755, 2478, 2971, 3789,
+         4618, 5382, 6175, 6709, 7280, 7663, 8416,14660
+      },
+      /*Y'  qi=3  OC_MODE_GOLDEN_MV*/
+      {
+          341,  349,  402,  819, 1426, 2126, 3015, 4022,
+         5122, 6239, 7303, 8345, 9264,10073,10875,14167
+      }
+    },
+    {
+      /*Cb  qi=3  OC_MODE_INTRA*/
+      {
+          499, 1338, 2562, 3673, 4784, 5986, 7007, 7928,
+         8910, 9862,10621,11696,12350,13266,14028,17697
+      },
+      /*Cb  qi=3  OC_MODE_INTER_NOMV*/
+      {
+           64,  119,  403, 1089, 2258, 4109, 5682, 6749,
+         7626, 8187, 8077, 8623, 8370, 8243, 8621, 8922
+      },
+      /*Cb  qi=3  OC_MODE_INTER_MV*/
+      {
+           30,  222,  721, 1754, 3195, 4772, 6536, 8204,
+         9477,10372,11172,12128,12479,14549,14228,15843
+      },
+      /*Cb  qi=3  OC_MDOE_INTER_MV_LAST*/
+      {
+           38,  202,  690, 1594, 2863, 4685, 6544, 8157,
+         9476,10583,11737,12361,13068,13616,13986,15475
+      },
+      /*Cb  qi=3  OC_MODE_INTER_MV_LAST2*/
+      {
+           35,  215,  716, 1623, 2912, 4780, 6558, 8216,
+         9613,10463,11078,11309,11113,11356,12284,11630
+      },
+      /*Cb  qi=3  OC_MODE_INTER_MV_FOUR*/
+      {
+           23,  229,  742, 1695, 3015, 4670, 6321, 7863,
+         9128,10303,11028,12045,12465,13034,13877,16260
+      },
+      /*Cb  qi=3  OC_MODE_GOLDEN_NOMV*/
+      {
+          122,  314,  647, 1391, 2469, 3857, 4946, 5212,
+         5371, 5936, 6156, 6596, 6811, 7079, 7233, 9525
+      },
+      /*Cb  qi=3  OC_MODE_GOLDEN_MV*/
+      {
+           29,  254,  777, 1690, 2963, 4444, 5823, 6719,
+         7044, 7279, 7391, 7463, 7255, 7705, 8388, 9719
+      }
+    },
+    {
+      /*Cr  qi=3  OC_MODE_INTRA*/
+      {
+          382, 1111, 1999, 2899, 3696, 4496, 5219, 5914,
+         6724, 7315, 7991, 8649, 9266,10080,10536,13102
+      },
+      /*Cr  qi=3  OC_MODE_INTER_NOMV*/
+      {
+           52,   75,  142,  313,  696, 1575, 2627, 3713,
+         4281, 4402, 4756, 4905, 5121, 5463, 5283, 4892
+      },
+      /*Cr  qi=3  OC_MODE_INTER_MV*/
+      {
+           26,  131,  356,  853, 1535, 2380, 3435, 4513,
+         5580, 6278, 6876, 7860, 7934, 8073, 8429, 9093
+      },
+      /*Cr  qi=3  OC_MDOE_INTER_MV_LAST*/
+      {
+           36,  136,  312,  807, 1454, 2266, 3410, 4564,
+         5749, 6650, 7202, 7999, 8513, 7783, 8245, 8183
+      },
+      /*Cr  qi=3  OC_MODE_INTER_MV_LAST2*/
+      {
+           32,  141,  323,  833, 1435, 2182, 3357, 4485,
+         5322, 6165, 6620, 7250, 7385, 6943, 6487, 5132
+      },
+      /*Cr  qi=3  OC_MODE_INTER_MV_FOUR*/
+      {
+           23,  141,  348,  905, 1622, 2435, 3505, 4601,
+         5540, 6360, 7200, 7930, 8305, 8722, 9172,10336
+      },
+      /*Cr  qi=3  OC_MODE_GOLDEN_NOMV*/
+      {
+          114,  153,  326,  646, 1003, 1983, 2982, 3309,
+         3355, 3728, 4404, 4711, 4799, 5294, 5145, 5354
+      },
+      /*Cr  qi=3  OC_MODE_GOLDEN_MV*/
+      {
+           27,  153,  338,  873, 1539, 2352, 3258, 4224,
+         4401, 4705, 4910, 4573, 5208, 5224, 5967, 5637
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=4  OC_MODE_INTRA*/
+      {
+          511,  703, 1587, 2424, 3173, 3989, 4808, 5576,
+         6361, 7098, 7829, 8475, 9120, 9804,10422,14518
+      },
+      /*Y'  qi=4  OC_MODE_INTER_NOMV*/
+      {
+           87,  111,  175,  467,  968, 1611, 2571, 3690,
+         4869, 6045, 7206, 8163, 8984, 9922,11129,15347
+      },
+      /*Y'  qi=4  OC_MODE_INTER_MV*/
+      {
+          246,  292,  364,  672, 1347, 2331, 3388, 4417,
+         5426, 6440, 7458, 8448, 9402,10269,11146,14476
+      },
+      /*Y'  qi=4  OC_MDOE_INTER_MV_LAST*/
+      {
+          204,  238,  298,  592, 1211, 2124, 3154, 4224,
+         5338, 6453, 7539, 8564, 9494,10406,11220,14512
+      },
+      /*Y'  qi=4  OC_MODE_INTER_MV_LAST2*/
+      {
+          236,  276,  320,  608, 1242, 2167, 3198, 4254,
+         5376, 6498, 7602, 8658, 9584,10446,11312,14719
+      },
+      /*Y'  qi=4  OC_MODE_INTER_MV_FOUR*/
+      {
+          268,  309,  372,  672, 1308, 2261, 3325, 4413,
+         5508, 6611, 7687, 8692, 9596,10438,11212,14062
+      },
+      /*Y'  qi=4  OC_MODE_GOLDEN_NOMV*/
+      {
+          272,  294,  548, 1152, 1956, 2593, 3259, 4076,
+         4980, 5882, 6433, 7054, 7451, 8481, 8794,15068
+      },
+      /*Y'  qi=4  OC_MODE_GOLDEN_MV*/
+      {
+          331,  350,  424,  887, 1552, 2335, 3271, 4398,
+         5547, 6708, 7840, 8861, 9834,10574,11312,14608
+      }
+    },
+    {
+      /*Cb  qi=4  OC_MODE_INTRA*/
+      {
+          520, 1397, 2685, 3843, 4991, 6209, 7247, 8176,
+         9180,10156,10968,11996,12606,13564,14262,17938
+      },
+      /*Cb  qi=4  OC_MODE_INTER_NOMV*/
+      {
+           68,  133,  463, 1233, 2487, 4478, 5937, 6962,
+         7729, 8181, 8416, 8688, 8225, 8525, 8918, 9004
+      },
+      /*Cb  qi=4  OC_MODE_INTER_MV*/
+      {
+           29,  250,  800, 1906, 3430, 5178, 6996, 8650,
+         9908,11034,11578,12568,13131,14065,14728,16652
+      },
+      /*Cb  qi=4  OC_MDOE_INTER_MV_LAST*/
+      {
+           42,  225,  775, 1753, 3075, 5003, 6918, 8521,
+         9899,11004,11951,12080,12037,13284,12832,12956
+      },
+      /*Cb  qi=4  OC_MODE_INTER_MV_LAST2*/
+      {
+           41,  244,  822, 1758, 3048, 5015, 6929, 8652,
+         9785,11063,11494,12384,12552,13532,14308,14735
+      },
+      /*Cb  qi=4  OC_MODE_INTER_MV_FOUR*/
+      {
+           25,  257,  829, 1847, 3226, 4942, 6621, 8169,
+         9457,10524,11416,12245,12874,13489,15075,16289
+      },
+      /*Cb  qi=4  OC_MODE_GOLDEN_NOMV*/
+      {
+          141,  338,  680, 1514, 2484, 3988, 5141, 5361,
+         5513, 6150, 6366, 6593, 6988, 7292, 7310, 9675
+      },
+      /*Cb  qi=4  OC_MODE_GOLDEN_MV*/
+      {
+           31,  275,  874, 1831, 3117, 4730, 6004, 6752,
+         7395, 7243, 7468, 7403, 7112, 7901, 8036, 9963
+      }
+    },
+    {
+      /*Cr  qi=4  OC_MODE_INTRA*/
+      {
+          396, 1163, 2080, 3011, 3826, 4652, 5397, 6117,
+         6947, 7556, 8181, 8926, 9527,10356,10821,13399
+      },
+      /*Cr  qi=4  OC_MODE_INTER_NOMV*/
+      {
+           55,   82,  163,  366,  803, 1739, 2867, 3973,
+         4345, 4699, 4970, 5063, 5176, 5286, 5835, 4720
+      },
+      /*Cr  qi=4  OC_MODE_INTER_MV*/
+      {
+           26,  143,  393,  909, 1581, 2419, 3622, 4808,
+         5690, 6499, 7464, 8205, 8752, 7905, 9340,10595
+      },
+      /*Cr  qi=4  OC_MDOE_INTER_MV_LAST*/
+      {
+           38,  148,  351,  885, 1561, 2442, 3682, 4848,
+         5969, 6948, 7431, 7702, 8547, 7014, 7022, 6058
+      },
+      /*Cr  qi=4  OC_MODE_INTER_MV_LAST2*/
+      {
+           37,  158,  354,  887, 1607, 2411, 3641, 4780,
+         5507, 6312, 6739, 7383, 7391, 7145, 6150, 6136
+      },
+      /*Cr  qi=4  OC_MODE_INTER_MV_FOUR*/
+      {
+           24,  156,  390,  983, 1760, 2647, 3746, 4811,
+         5751, 6662, 7414, 7934, 8548, 8762,10129,10869
+      },
+      /*Cr  qi=4  OC_MODE_GOLDEN_NOMV*/
+      {
+          122,  162,  326,  645, 1132, 2252, 3216, 3506,
+         3623, 3932, 4555, 4787, 4785, 5169, 5323, 5431
+      },
+      /*Cr  qi=4  OC_MODE_GOLDEN_MV*/
+      {
+           31,  167,  376,  934, 1656, 2468, 3440, 4376,
+         4490, 4649, 5167, 4780, 5140, 5584, 6055, 4984
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=5  OC_MODE_INTRA*/
+      {
+          521,  726, 1660, 2572, 3362, 4218, 5074, 5868,
+         6673, 7435, 8173, 8831, 9495,10186,10820,15020
+      },
+      /*Y'  qi=5  OC_MODE_INTER_NOMV*/
+      {
+           89,  114,  192,  542, 1087, 1829, 2902, 4122,
+         5364, 6602, 7790, 8764, 9549,10598,11823,15917
+      },
+      /*Y'  qi=5  OC_MODE_INTER_MV*/
+      {
+          255,  299,  381,  762, 1534, 2611, 3704, 4780,
+         5817, 6881, 7933, 8951, 9925,10797,11647,14990
+      },
+      /*Y'  qi=5  OC_MDOE_INTER_MV_LAST*/
+      {
+          207,  242,  318,  670, 1379, 2381, 3473, 4604,
+         5769, 6920, 8033, 9069,10026,10918,11737,15085
+      },
+      /*Y'  qi=5  OC_MODE_INTER_MV_LAST2*/
+      {
+          242,  271,  323,  672, 1403, 2409, 3499, 4634,
+         5802, 6980, 8096, 9145,10126,11014,11823,15271
+      },
+      /*Y'  qi=5  OC_MODE_INTER_MV_FOUR*/
+      {
+          277,  313,  392,  757, 1490, 2526, 3646, 4789,
+         5940, 7083, 8178, 9196,10124,10971,11739,14598
+      },
+      /*Y'  qi=5  OC_MODE_GOLDEN_NOMV*/
+      {
+          282,  282,  531, 1319, 2107, 2752, 3535, 4413,
+         5409, 6239, 6767, 7398, 7934, 8521, 9940,15622
+      },
+      /*Y'  qi=5  OC_MODE_GOLDEN_MV*/
+      {
+          339,  355,  453,  966, 1691, 2566, 3605, 4762,
+         5986, 7209, 8370, 9399,10370,11207,11933,15161
+      }
+    },
+    {
+      /*Cb  qi=5  OC_MODE_INTRA*/
+      {
+          530, 1447, 2810, 4029, 5212, 6457, 7496, 8481,
+         9501,10539,11376,12444,12994,13939,14711,18424
+      },
+      /*Cb  qi=5  OC_MODE_INTER_NOMV*/
+      {
+           70,  141,  509, 1407, 2806, 4909, 6182, 7359,
+         8041, 8497, 8715, 9058, 8768, 8760, 9306, 9412
+      },
+      /*Cb  qi=5  OC_MODE_INTER_MV*/
+      {
+           30,  270,  877, 2089, 3678, 5607, 7503, 9107,
+        10491,11593,11881,12986,13949,14005,15208,16496
+      },
+      /*Cb  qi=5  OC_MDOE_INTER_MV_LAST*/
+      {
+           42,  238,  857, 1938, 3348, 5424, 7381, 9053,
+        10373,11424,12375,12399,12894,13643,13428,13986
+      },
+      /*Cb  qi=5  OC_MODE_INTER_MV_LAST2*/
+      {
+           48,  262,  913, 1927, 3279, 5379, 7313, 9021,
+        10364,11507,11959,12239,14029,14040,13656,14941
+      },
+      /*Cb  qi=5  OC_MODE_INTER_MV_FOUR*/
+      {
+           27,  270,  912, 2027, 3481, 5270, 7028, 8623,
+         9827,10943,11917,12546,13483,14146,15172,17260
+      },
+      /*Cb  qi=5  OC_MODE_GOLDEN_NOMV*/
+      {
+          130,  329,  743, 1652, 2760, 4507, 5842, 5433,
+         5817, 6214, 6544, 6805, 7373, 7523, 7645,10070
+      },
+      /*Cb  qi=5  OC_MODE_GOLDEN_MV*/
+      {
+           33,  286,  958, 2017, 3417, 5085, 6378, 7122,
+         7562, 7943, 7607, 7800, 7972, 8534, 8719,10247
+      }
+    },
+    {
+      /*Cr  qi=5  OC_MODE_INTRA*/
+      {
+          406, 1213, 2167, 3138, 3991, 4851, 5631, 6398,
+         7206, 7854, 8484, 9343, 9987,10727,11196,13787
+      },
+      /*Cr  qi=5  OC_MODE_INTER_NOMV*/
+      {
+           57,   88,  180,  418,  922, 1953, 3157, 4270,
+         4563, 4909, 5131, 5338, 5594, 5782, 5498, 5065
+      },
+      /*Cr  qi=5  OC_MODE_INTER_MV*/
+      {
+           26,  152,  425, 1015, 1735, 2624, 4000, 5120,
+         6182, 7023, 7566, 8433, 9700, 8864, 8038,10979
+      },
+      /*Cr  qi=5  OC_MDOE_INTER_MV_LAST*/
+      {
+           38,  157,  381,  968, 1702, 2695, 4016, 5258,
+         6391, 7322, 7793, 7627, 8547, 7629, 7197, 5952
+      },
+      /*Cr  qi=5  OC_MODE_INTER_MV_LAST2*/
+      {
+           43,  170,  385,  964, 1790, 2678, 3903, 5002,
+         5877, 6687, 7070, 7039, 7370, 6540, 6556, 6066
+      },
+      /*Cr  qi=5  OC_MODE_INTER_MV_FOUR*/
+      {
+           25,  165,  423, 1079, 1932, 2909, 4047, 5148,
+         6175, 6990, 7633, 8490, 8885, 9437,10259,11937
+      },
+      /*Cr  qi=5  OC_MODE_GOLDEN_NOMV*/
+      {
+          116,  171,  342,  720, 1286, 2628, 3147, 3489,
+         3562, 4119, 4759, 4903, 4999, 5375, 5385, 5611
+      },
+      /*Cr  qi=5  OC_MODE_GOLDEN_MV*/
+      {
+           33,  179,  418, 1029, 1846, 2735, 3633, 4652,
+         4846, 5103, 5372, 4823, 5249, 5928, 5880, 5795
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=6  OC_MODE_INTRA*/
+      {
+          535,  748, 1714, 2666, 3494, 4385, 5271, 6085,
+         6920, 7699, 8456, 9118, 9789,10494,11132,15403
+      },
+      /*Y'  qi=6  OC_MODE_INTER_NOMV*/
+      {
+           93,  119,  212,  607, 1198, 2036, 3197, 4504,
+         5785, 7061, 8267, 9279,10198,11251,12276,16375
+      },
+      /*Y'  qi=6  OC_MODE_INTER_MV*/
+      {
+          270,  309,  407,  841, 1693, 2828, 3962, 5058,
+         6140, 7252, 8316, 9372,10302,11226,12078,15373
+      },
+      /*Y'  qi=6  OC_MDOE_INTER_MV_LAST*/
+      {
+          204,  244,  333,  729, 1519, 2597, 3739, 4917,
+         6124, 7308, 8434, 9481,10412,11353,12183,15482
+      },
+      /*Y'  qi=6  OC_MODE_INTER_MV_LAST2*/
+      {
+          241,  272,  337,  732, 1549, 2637, 3781, 4957,
+         6151, 7349, 8508, 9584,10498,11397,12239,15652
+      },
+      /*Y'  qi=6  OC_MODE_INTER_MV_FOUR*/
+      {
+          275,  317,  410,  824, 1638, 2751, 3921, 5113,
+         6301, 7472, 8592, 9615,10536,11379,12145,15016
+      },
+      /*Y'  qi=6  OC_MODE_GOLDEN_NOMV*/
+      {
+          298,  297,  619, 1363, 2259, 2927, 3776, 4648,
+         5719, 6519, 7073, 7709, 8174, 9022,10459,16031
+      },
+      /*Y'  qi=6  OC_MODE_GOLDEN_MV*/
+      {
+          340,  367,  473, 1038, 1821, 2773, 3876, 5111,
+         6376, 7624, 8761, 9829,10743,11555,12252,15572
+      }
+    },
+    {
+      /*Cb  qi=6  OC_MODE_INTRA*/
+      {
+          551, 1510, 2948, 4223, 5435, 6697, 7743, 8740,
+         9803,10874,11745,12851,13355,14281,15140,18896
+      },
+      /*Cb  qi=6  OC_MODE_INTER_NOMV*/
+      {
+           76,  164,  594, 1601, 3088, 5189, 6627, 7604,
+         8215, 8836, 9117, 9226, 8773, 9243, 9313, 9515
+      },
+      /*Cb  qi=6  OC_MODE_INTER_MV*/
+      {
+           31,  303,  980, 2269, 3973, 5950, 7900, 9489,
+        10875,11994,12666,13647,15488,14763,16044,17567
+      },
+      /*Cb  qi=6  OC_MDOE_INTER_MV_LAST*/
+      {
+           46,  270,  956, 2101, 3592, 5793, 7815, 9485,
+        10846,11871,12698,13022,13268,13535,13990,14401
+      },
+      /*Cb  qi=6  OC_MODE_INTER_MV_LAST2*/
+      {
+           52,  299, 1017, 2093, 3533, 5682, 7745, 9505,
+        10744,11983,12747,12484,14471,14406,15294,16275
+      },
+      /*Cb  qi=6  OC_MODE_INTER_MV_FOUR*/
+      {
+           29,  306, 1013, 2205, 3727, 5623, 7409, 9009,
+        10268,11393,12208,13012,13864,14694,14930,17693
+      },
+      /*Cb  qi=6  OC_MODE_GOLDEN_NOMV*/
+      {
+          133,  376,  812, 1766, 2963, 4821, 6427, 5958,
+         6140, 6554, 6890, 7219, 7574, 7779, 7946,10397
+      },
+      /*Cb  qi=6  OC_MODE_GOLDEN_MV*/
+      {
+           34,  324, 1057, 2178, 3630, 5426, 6819, 7534,
+         7855, 8144, 7953, 8086, 7928, 8224, 8204,10424
+      }
+    },
+    {
+      /*Cr  qi=6  OC_MODE_INTRA*/
+      {
+          417, 1276, 2300, 3320, 4209, 5104, 5910, 6742,
+         7569, 8255, 8861, 9717,10445,11219,11628,14270
+      },
+      /*Cr  qi=6  OC_MODE_INTER_NOMV*/
+      {
+           61,   96,  214,  518, 1149, 2246, 3808, 4540,
+         4940, 5097, 5320, 5498, 5799, 5941, 6036, 5180
+      },
+      /*Cr  qi=6  OC_MODE_INTER_MV*/
+      {
+           27,  168,  480, 1151, 1935, 3005, 4432, 5527,
+         6598, 7581, 8547, 8203, 8871, 9541, 8910,12025
+      },
+      /*Cr  qi=6  OC_MDOE_INTER_MV_LAST*/
+      {
+           40,  172,  431, 1094, 1935, 3063, 4454, 5709,
+         6916, 7693, 8313, 8147, 8063, 7824, 7565, 6179
+      },
+      /*Cr  qi=6  OC_MODE_INTER_MV_LAST2*/
+      {
+           46,  185,  435, 1099, 2038, 2998, 4460, 5545,
+         6368, 7124, 7701, 7687, 7638, 7109, 7179, 6673
+      },
+      /*Cr  qi=6  OC_MODE_INTER_MV_FOUR*/
+      {
+           27,  180,  485, 1229, 2155, 3223, 4475, 5568,
+         6580, 7479, 8226, 8901, 9630,10508,10550,12095
+      },
+      /*Cr  qi=6  OC_MODE_GOLDEN_NOMV*/
+      {
+          114,  182,  384,  846, 1418, 2587, 3213, 3860,
+         3780, 4407, 5062, 5140, 5318, 5710, 5593, 5837
+      },
+      /*Cr  qi=6  OC_MODE_GOLDEN_MV*/
+      {
+           33,  190,  475, 1168, 2043, 3001, 3985, 4935,
+         5063, 5163, 5699, 5507, 5451, 6608, 5813, 5751
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=7  OC_MODE_INTRA*/
+      {
+          548,  765, 1782, 2795, 3670, 4591, 5511, 6362,
+         7215, 8006, 8779, 9452,10131,10847,11482,15825
+      },
+      /*Y'  qi=7  OC_MODE_INTER_NOMV*/
+      {
+           95,  121,  229,  679, 1322, 2286, 3559, 4942,
+         6270, 7579, 8796, 9799,10792,11898,12802,16828
+      },
+      /*Y'  qi=7  OC_MODE_INTER_MV*/
+      {
+          259,  312,  427,  934, 1917, 3113, 4288, 5416,
+         6525, 7663, 8753, 9815,10741,11651,12473,15830
+      },
+      /*Y'  qi=7  OC_MDOE_INTER_MV_LAST*/
+      {
+          214,  248,  353,  813, 1704, 2861, 4054, 5278,
+         6526, 7738, 8875, 9933,10893,11806,12635,15935
+      },
+      /*Y'  qi=7  OC_MODE_INTER_MV_LAST2*/
+      {
+          243,  278,  365,  817, 1735, 2907, 4098, 5327,
+         6569, 7785, 8962,10002,10957,11891,12657,16149
+      },
+      /*Y'  qi=7  OC_MODE_INTER_MV_FOUR*/
+      {
+          277,  319,  432,  915, 1833, 3026, 4247, 5484,
+         6704, 7891, 9037,10079,10986,11853,12605,15434
+      },
+      /*Y'  qi=7  OC_MODE_GOLDEN_NOMV*/
+      {
+          284,  297,  689, 1487, 2308, 3063, 4067, 4975,
+         6095, 6931, 7424, 8022, 8395, 9433,11190,16480
+      },
+      /*Y'  qi=7  OC_MODE_GOLDEN_MV*/
+      {
+          347,  356,  510, 1127, 1977, 3023, 4199, 5477,
+         6778, 8045, 9226,10298,11104,11995,12715,15999
+      }
+    },
+    {
+      /*Cb  qi=7  OC_MODE_INTRA*/
+      {
+          578, 1575, 3050, 4366, 5618, 6898, 7971, 9005,
+        10062,11237,12115,13169,13758,14578,15545,19337
+      },
+      /*Cb  qi=7  OC_MODE_INTER_NOMV*/
+      {
+           78,  178,  646, 1746, 3412, 5452, 6861, 7915,
+         8721, 9082, 9014, 9508, 9311, 9216, 9590, 9709
+      },
+      /*Cb  qi=7  OC_MODE_INTER_MV*/
+      {
+           32,  328, 1052, 2423, 4211, 6392, 8329,10020,
+        11320,12335,13187,13673,14507,15569,15613,17477
+      },
+      /*Cb  qi=7  OC_MDOE_INTER_MV_LAST*/
+      {
+           48,  293, 1028, 2245, 3815, 6137, 8174, 9877,
+        11138,12262,12871,13341,13603,14971,14591,14952
+      },
+      /*Cb  qi=7  OC_MODE_INTER_MV_LAST2*/
+      {
+           56,  321, 1095, 2231, 3726, 6046, 8057, 9855,
+        11066,12240,13138,12724,14364,15267,15743,16337
+      },
+      /*Cb  qi=7  OC_MODE_INTER_MV_FOUR*/
+      {
+           33,  333, 1088, 2342, 3949, 5906, 7760, 9331,
+        10671,11771,12918,13478,14038,14750,15301,17891
+      },
+      /*Cb  qi=7  OC_MODE_GOLDEN_NOMV*/
+      {
+          132,  403,  848, 1854, 3147, 5245, 6528, 5879,
+         6302, 6808, 7233, 7617, 7733, 8331, 8001,10520
+      },
+      /*Cb  qi=7  OC_MODE_GOLDEN_MV*/
+      {
+           39,  343, 1133, 2343, 3857, 5663, 6881, 7622,
+         8006, 8245, 7893, 8273, 7969, 8364, 8803,10610
+      }
+    },
+    {
+      /*Cr  qi=7  OC_MODE_INTRA*/
+      {
+          435, 1319, 2374, 3426, 4349, 5261, 6080, 6933,
+         7785, 8498, 9065, 9934,10697,11441,11879,14561
+      },
+      /*Cr  qi=7  OC_MODE_INTER_NOMV*/
+      {
+           62,  100,  229,  561, 1287, 2464, 4093, 4719,
+         4999, 5342, 5618, 5631, 6062, 5827, 6099, 5207
+      },
+      /*Cr  qi=7  OC_MODE_INTER_MV*/
+      {
+           27,  176,  517, 1225, 2088, 3157, 4633, 5865,
+         6870, 7862, 8407, 8405, 9364, 9164,10974,10981
+      },
+      /*Cr  qi=7  OC_MDOE_INTER_MV_LAST*/
+      {
+           42,  183,  461, 1171, 2074, 3287, 4725, 6016,
+         7165, 8073, 8222, 8227, 8760, 7649, 7481, 6486
+      },
+      /*Cr  qi=7  OC_MODE_INTER_MV_LAST2*/
+      {
+           48,  196,  468, 1177, 2131, 3289, 4672, 5678,
+         6620, 7506, 7733, 7743, 7971, 7608, 8029, 6429
+      },
+      /*Cr  qi=7  OC_MODE_INTER_MV_FOUR*/
+      {
+           29,  191,  520, 1314, 2304, 3427, 4743, 5874,
+         6876, 7810, 8591, 9553, 9902,10356,11418,12678
+      },
+      /*Cr  qi=7  OC_MODE_GOLDEN_NOMV*/
+      {
+          116,  195,  422,  915, 1502, 2431, 3299, 3742,
+         3971, 4774, 4878, 5258, 5430, 5410, 6139, 5936
+      },
+      /*Cr  qi=7  OC_MODE_GOLDEN_MV*/
+      {
+           36,  196,  500, 1227, 2192, 3194, 4268, 5204,
+         5219, 5398, 5565, 5405, 5769, 6391, 6147, 5729
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=8  OC_MODE_INTRA*/
+      {
+          562,  790, 1842, 2922, 3842, 4793, 5749, 6624,
+         7506, 8313, 9097, 9774,10459,11206,11844,16218
+      },
+      /*Y'  qi=8  OC_MODE_INTER_NOMV*/
+      {
+          101,  131,  264,  784, 1491, 2573, 3953, 5391,
+         6735, 8069, 9312,10306,11378,12442,13626,17294
+      },
+      /*Y'  qi=8  OC_MODE_INTER_MV*/
+      {
+          266,  326,  471, 1054, 2147, 3392, 4597, 5729,
+         6881, 8022, 9166,10225,11196,12115,12948,16248
+      },
+      /*Y'  qi=8  OC_MDOE_INTER_MV_LAST*/
+      {
+          221,  254,  375,  897, 1897, 3130, 4383, 5669,
+         6966, 8227, 9390,10453,11417,12312,13149,16452
+      },
+      /*Y'  qi=8  OC_MODE_INTER_MV_LAST2*/
+      {
+          251,  294,  424,  956, 1976, 3215, 4441, 5713,
+         6972, 8184, 9332,10382,11327,12242,13047,16509
+      },
+      /*Y'  qi=8  OC_MODE_INTER_MV_FOUR*/
+      {
+          285,  329,  465, 1015, 2036, 3300, 4581, 5868,
+         7126, 8344, 9498,10530,11456,12292,13037,15817
+      },
+      /*Y'  qi=8  OC_MODE_GOLDEN_NOMV*/
+      {
+          304,  307,  727, 1606, 2471, 3276, 4359, 5375,
+         6545, 7275, 7754, 8512, 8945, 9537,12077,16894
+      },
+      /*Y'  qi=8  OC_MODE_GOLDEN_MV*/
+      {
+          373,  372,  570, 1270, 2166, 3295, 4532, 5890,
+         7245, 8530, 9737,10784,11665,12491,13186,16377
+      }
+    },
+    {
+      /*Cb  qi=8  OC_MODE_INTRA*/
+      {
+          612, 1696, 3272, 4668, 5982, 7274, 8378, 9437,
+        10479,11750,12631,13640,14329,15060,16043,19886
+      },
+      /*Cb  qi=8  OC_MODE_INTER_NOMV*/
+      {
+           83,  203,  763, 2035, 3871, 5784, 7451, 8681,
+        10213,12002,11900,11320,11930,12408,10549, 7446
+      },
+      /*Cb  qi=8  OC_MODE_INTER_MV*/
+      {
+           33,  377, 1214, 2713, 4582, 6847, 8871,10571,
+        11871,13066,14081,14684,15172,16096,15613,17972
+      },
+      /*Cb  qi=8  OC_MDOE_INTER_MV_LAST*/
+      {
+           58,  344, 1214, 2529, 4200, 6689, 8759,10335,
+        11390,11881,11823,11981,11073,10764,10918,10280
+      },
+      /*Cb  qi=8  OC_MODE_INTER_MV_LAST2*/
+      {
+           55,  366, 1264, 2567, 4252, 6698, 8706,10572,
+        11852,12920,13168,13724,14546,15601,16427,16842
+      },
+      /*Cb  qi=8  OC_MODE_INTER_MV_FOUR*/
+      {
+           38,  388, 1267, 2640, 4316, 6393, 8236, 9822,
+        11113,12171,13105,13822,14769,15540,16011,18461
+      },
+      /*Cb  qi=8  OC_MODE_GOLDEN_NOMV*/
+      {
+          131,  460,  965, 2172, 3563, 5959, 6333, 6291,
+         6630, 7185, 7626, 8132, 8148, 8435, 8372,10536
+      },
+      /*Cb  qi=8  OC_MODE_GOLDEN_MV*/
+      {
+           42,  405, 1317, 2640, 4224, 6195, 7213, 8034,
+         8064, 8514, 8060, 8441, 8294, 8444, 8803,10454
+      }
+    },
+    {
+      /*Cr  qi=8  OC_MODE_INTRA*/
+      {
+          451, 1387, 2495, 3583, 4536, 5479, 6313, 7188,
+         8055, 8769, 9363,10252,11061,11738,12235,14983
+      },
+      /*Cr  qi=8  OC_MODE_INTER_NOMV*/
+      {
+           66,  109,  260,  633, 1405, 2679, 4375, 4885,
+         5414, 5939, 6845, 7824, 7937, 6923, 8967, 6027
+      },
+      /*Cr  qi=8  OC_MODE_INTER_MV*/
+      {
+           27,  193,  575, 1344, 2255, 3487, 5071, 6218,
+         7239, 8243, 8876, 9292, 9720, 8756,10391,11109
+      },
+      /*Cr  qi=8  OC_MDOE_INTER_MV_LAST*/
+      {
+           49,  203,  510, 1281, 2271, 3544, 5005, 6187,
+         7031, 7422, 7296, 6922, 6715, 6833, 6994, 5814
+      },
+      /*Cr  qi=8  OC_MODE_INTER_MV_LAST2*/
+      {
+           45,  209,  527, 1321, 2290, 3516, 4972, 6072,
+         6901, 7350, 7296, 7321, 8406, 6898, 6931, 7460
+      },
+      /*Cr  qi=8  OC_MODE_INTER_MV_FOUR*/
+      {
+           31,  211,  577, 1439, 2511, 3717, 5050, 6167,
+         7085, 7967, 8704, 9383,10441,10688,11291,12481
+      },
+      /*Cr  qi=8  OC_MODE_GOLDEN_NOMV*/
+      {
+          112,  209,  491, 1044, 1675, 2875, 3332, 4103,
+         4262, 5162, 5069, 5549, 5605, 5795, 5852, 6134
+      },
+      /*Cr  qi=8  OC_MODE_GOLDEN_MV*/
+      {
+           40,  223,  556, 1362, 2360, 3437, 4598, 5022,
+         5211, 5574, 5272, 5393, 5741, 5726, 5955, 5582
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=9  OC_MODE_INTRA*/
+      {
+          583,  823, 1954, 3146, 4114, 5110, 6098, 7001,
+         7902, 8716, 9516,10191,10894,11647,12297,16748
+      },
+      /*Y'  qi=9  OC_MODE_INTER_NOMV*/
+      {
+          102,  134,  304,  897, 1708, 2955, 4448, 5946,
+         7317, 8681, 9869,10884,11713,12906,14232,17956
+      },
+      /*Y'  qi=9  OC_MODE_INTER_MV*/
+      {
+          267,  329,  521, 1239, 2421, 3782, 4998, 6195,
+         7407, 8594, 9701,10739,11722,12651,13557,16726
+      },
+      /*Y'  qi=9  OC_MDOE_INTER_MV_LAST*/
+      {
+          225,  262,  423, 1053, 2183, 3498, 4805, 6137,
+         7470, 8750, 9918,11007,11946,12870,13657,16992
+      },
+      /*Y'  qi=9  OC_MODE_INTER_MV_LAST2*/
+      {
+          243,  300,  474, 1119, 2276, 3591, 4879, 6176,
+         7479, 8725, 9905,10942,11908,12829,13592,17087
+      },
+      /*Y'  qi=9  OC_MODE_INTER_MV_FOUR*/
+      {
+          292,  336,  522, 1192, 2342, 3676, 5014, 6348,
+         7643, 8874,10045,11083,11986,12831,13590,16379
+      },
+      /*Y'  qi=9  OC_MODE_GOLDEN_NOMV*/
+      {
+          291,  333,  823, 1778, 2652, 3561, 4717, 5839,
+         6951, 7717, 8308, 8669, 9684,10657,12384,17450
+      },
+      /*Y'  qi=9  OC_MODE_GOLDEN_MV*/
+      {
+          362,  378,  616, 1398, 2427, 3650, 4961, 6373,
+         7779, 9115,10267,11337,12205,13010,13669,16908
+      }
+    },
+    {
+      /*Cb  qi=9  OC_MODE_INTRA*/
+      {
+          631, 1766, 3404, 4886, 6261, 7559, 8690, 9749,
+        10829,12169,13059,14081,14709,15468,16505,20330
+      },
+      /*Cb  qi=9  OC_MODE_INTER_NOMV*/
+      {
+           86,  217,  844, 2284, 4217, 6245, 7901, 9038,
+        11119,12379,12070,11851,12745,12266,11269, 7327
+      },
+      /*Cb  qi=9  OC_MODE_INTER_MV*/
+      {
+           38,  413, 1345, 2961, 4938, 7331, 9416,11071,
+        12432,13264,13984,15158,15082,17712,17441,18168
+      },
+      /*Cb  qi=9  OC_MDOE_INTER_MV_LAST*/
+      {
+           59,  370, 1338, 2772, 4538, 7174, 9279,10844,
+        11850,12375,12193,12246,11251,11034,11021,10726
+      },
+      /*Cb  qi=9  OC_MODE_INTER_MV_LAST2*/
+      {
+           60,  395, 1392, 2817, 4626, 7159, 9320,11050,
+        12307,13338,14330,14130,15615,17268,15844,16476
+      },
+      /*Cb  qi=9  OC_MODE_INTER_MV_FOUR*/
+      {
+           41,  415, 1388, 2880, 4654, 6823, 8766,10387,
+        11649,12827,13823,14349,14962,15954,16932,19138
+      },
+      /*Cb  qi=9  OC_MODE_GOLDEN_NOMV*/
+      {
+          144,  479, 1057, 2382, 4162, 5999, 6231, 6296,
+         6958, 7236, 8314, 8275, 8586, 8687, 8694,10895
+      },
+      /*Cb  qi=9  OC_MODE_GOLDEN_MV*/
+      {
+           45,  460, 1453, 2878, 4553, 6534, 7715, 8300,
+         8421, 8778, 8562, 8913, 8670, 8944, 9391,10824
+      }
+    },
+    {
+      /*Cr  qi=9  OC_MODE_INTRA*/
+      {
+          467, 1460, 2618, 3746, 4739, 5704, 6588, 7470,
+         8361, 9072, 9659,10533,11398,11958,12557,15329
+      },
+      /*Cr  qi=9  OC_MODE_INTER_NOMV*/
+      {
+           67,  118,  290,  723, 1600, 3145, 4706, 5334,
+         5873, 6266, 7165, 7962, 7729, 8448, 8588, 5948
+      },
+      /*Cr  qi=9  OC_MODE_INTER_MV*/
+      {
+           30,  212,  627, 1492, 2508, 3831, 5434, 6536,
+         7643, 8910, 8868, 9374, 9772, 9712,11167,11630
+      },
+      /*Cr  qi=9  OC_MDOE_INTER_MV_LAST*/
+      {
+           51,  215,  560, 1419, 2481, 3866, 5364, 6551,
+         7349, 7692, 7274, 7120, 6874, 6655, 7142, 6065
+      },
+      /*Cr  qi=9  OC_MODE_INTER_MV_LAST2*/
+      {
+           49,  223,  587, 1452, 2495, 3803, 5270, 6409,
+         7096, 7424, 7607, 7800, 7361, 7250, 7654, 7824
+      },
+      /*Cr  qi=9  OC_MODE_INTER_MV_FOUR*/
+      {
+           34,  227,  633, 1584, 2706, 3993, 5345, 6491,
+         7505, 8370, 9124, 9898,10980,10596,12049,13587
+      },
+      /*Cr  qi=9  OC_MODE_GOLDEN_NOMV*/
+      {
+          120,  237,  549, 1206, 1914, 2950, 3680, 4144,
+         4524, 4906, 5409, 5483, 5581, 6060, 5839, 6292
+      },
+      /*Cr  qi=9  OC_MODE_GOLDEN_MV*/
+      {
+           45,  245,  616, 1495, 2593, 3703, 4877, 5221,
+         5443, 5546, 5474, 5663, 5779, 6191, 5957, 5800
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=10  OC_MODE_INTRA*/
+      {
+          592,  846, 1981, 3196, 4189, 5213, 6215, 7133,
+         8041, 8869, 9676,10362,11063,11820,12489,17017
+      },
+      /*Y'  qi=10  OC_MODE_INTER_NOMV*/
+      {
+          106,  140,  333,  967, 1819, 3120, 4664, 6178,
+         7568, 8937,10127,11138,11992,13342,14563,18285
+      },
+      /*Y'  qi=10  OC_MODE_INTER_MV*/
+      {
+          287,  343,  546, 1306, 2574, 3931, 5198, 6413,
+         7629, 8825, 9963,11000,11964,12913,13737,17069
+      },
+      /*Y'  qi=10  OC_MDOE_INTER_MV_LAST*/
+      {
+          221,  268,  442, 1112, 2296, 3648, 4987, 6345,
+         7699, 8983,10161,11248,12195,13123,13927,17311
+      },
+      /*Y'  qi=10  OC_MODE_INTER_MV_LAST2*/
+      {
+          261,  306,  492, 1180, 2392, 3740, 5065, 6380,
+         7701, 8968,10161,11225,12122,13081,13829,17412
+      },
+      /*Y'  qi=10  OC_MODE_INTER_MV_FOUR*/
+      {
+          302,  343,  541, 1246, 2450, 3825, 5192, 6549,
+         7863, 9112,10295,11313,12240,13075,13830,16660
+      },
+      /*Y'  qi=10  OC_MODE_GOLDEN_NOMV*/
+      {
+          310,  341,  817, 1834, 2694, 3712, 4879, 6058,
+         7196, 7960, 8486, 8868, 9703,10837,12813,17824
+      },
+      /*Y'  qi=10  OC_MODE_GOLDEN_MV*/
+      {
+          353,  379,  641, 1465, 2535, 3782, 5137, 6586,
+         7995, 9353,10543,11643,12573,13469,14156,17511
+      }
+    },
+    {
+      /*Cb  qi=10  OC_MODE_INTRA*/
+      {
+          644, 1789, 3424, 4917, 6289, 7592, 8731, 9791,
+        10880,12194,13104,14107,14789,15539,16546,20340
+      },
+      /*Cb  qi=10  OC_MODE_INTER_NOMV*/
+      {
+           88,  227,  869, 2320, 4281, 6210, 7953, 9428,
+        10073,12490,12040,12486,12938,12168,12805, 7137
+      },
+      /*Cb  qi=10  OC_MODE_INTER_MV*/
+      {
+           36,  421, 1375, 2999, 5010, 7425, 9547,11201,
+        12589,14006,14252,14613,15709,17649,17098,18775
+      },
+      /*Cb  qi=10  OC_MDOE_INTER_MV_LAST*/
+      {
+           62,  380, 1366, 2809, 4576, 7215, 9306,10903,
+        11943,12417,12474,12645,11730,11248,11707,11106
+      },
+      /*Cb  qi=10  OC_MODE_INTER_MV_LAST2*/
+      {
+           63,  401, 1424, 2848, 4655, 7209, 9333,11107,
+        12430,13447,15432,15722,16103,15374,17623,17061
+      },
+      /*Cb  qi=10  OC_MODE_INTER_MV_FOUR*/
+      {
+           42,  425, 1409, 2910, 4686, 6867, 8823,10475,
+        11677,12806,13956,14556,14898,16552,17390,19429
+      },
+      /*Cb  qi=10  OC_MODE_GOLDEN_NOMV*/
+      {
+          163,  489, 1088, 2440, 4169, 5996, 6240, 6662,
+         7167, 7603, 8353, 8363, 8532, 9065, 8831,11131
+      },
+      /*Cb  qi=10  OC_MODE_GOLDEN_MV*/
+      {
+           48,  464, 1472, 2914, 4590, 6862, 8706, 9723,
+        10641,10117,10307,10250, 9007,12307,10550, 9113
+      }
+    },
+    {
+      /*Cr  qi=10  OC_MODE_INTRA*/
+      {
+          476, 1501, 2682, 3823, 4837, 5830, 6724, 7628,
+         8566, 9257, 9869,10750,11666,12213,12857,15631
+      },
+      /*Cr  qi=10  OC_MODE_INTER_NOMV*/
+      {
+           70,  128,  322,  795, 1743, 3412, 4841, 5507,
+         6072, 6585, 6805, 7446, 7868, 9084, 8101, 6417
+      },
+      /*Cr  qi=10  OC_MODE_INTER_MV*/
+      {
+           29,  230,  670, 1545, 2609, 4029, 5639, 6750,
+         7896, 8425, 9102, 9378, 9319,10298,10303,13429
+      },
+      /*Cr  qi=10  OC_MDOE_INTER_MV_LAST*/
+      {
+           55,  229,  597, 1502, 2650, 4075, 5584, 6835,
+         7613, 7863, 7482, 7200, 6998, 7480, 7393, 6369
+      },
+      /*Cr  qi=10  OC_MODE_INTER_MV_LAST2*/
+      {
+           54,  240,  630, 1560, 2701, 4035, 5560, 6553,
+         7327, 7937, 7506, 8733, 8040, 6384, 7895, 8749
+      },
+      /*Cr  qi=10  OC_MODE_INTER_MV_FOUR*/
+      {
+           36,  243,  675, 1674, 2847, 4202, 5562, 6713,
+         7737, 8651, 9498,10123,10973,11042,12613,14092
+      },
+      /*Cr  qi=10  OC_MODE_GOLDEN_NOMV*/
+      {
+          126,  244,  587, 1253, 2109, 3204, 4063, 4400,
+         4792, 4870, 5738, 5760, 5861, 6402, 6490, 6733
+      },
+      /*Cr  qi=10  OC_MODE_GOLDEN_MV*/
+      {
+           48,  255,  642, 1602, 2798, 4018, 5571, 6216,
+         7695, 6689, 7023, 7240, 7011, 9217, 8570, 8429
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=11  OC_MODE_INTRA*/
+      {
+          609,  871, 2061, 3353, 4392, 5457, 6498, 7447,
+         8373, 9212,10038,10734,11446,12223,12862,17460
+      },
+      /*Y'  qi=11  OC_MODE_INTER_NOMV*/
+      {
+          108,  142,  376, 1072, 2038, 3503, 5142, 6680,
+         8103, 9464,10705,11756,12711,13997,15048,18940
+      },
+      /*Y'  qi=11  OC_MODE_INTER_MV*/
+      {
+          301,  351,  596, 1471, 2818, 4245, 5546, 6791,
+         8025, 9257,10441,11496,12474,13421,14257,17510
+      },
+      /*Y'  qi=11  OC_MDOE_INTER_MV_LAST*/
+      {
+          232,  272,  482, 1253, 2565, 3993, 5389, 6802,
+         8185, 9484,10683,11741,12715,13624,14395,17747
+      },
+      /*Y'  qi=11  OC_MODE_INTER_MV_LAST2*/
+      {
+          265,  311,  532, 1321, 2654, 4087, 5457, 6821,
+         8150, 9417,10613,11647,12574,13487,14274,17831
+      },
+      /*Y'  qi=11  OC_MODE_INTER_MV_FOUR*/
+      {
+          310,  347,  593, 1406, 2729, 4175, 5607, 7005,
+         8349, 9600,10797,11826,12748,13552,14316,17104
+      },
+      /*Y'  qi=11  OC_MODE_GOLDEN_NOMV*/
+      {
+          303,  332,  921, 2022, 2900, 4068, 5358, 6562,
+         7605, 8480, 8884, 9320, 9835,11589,13177,18244
+      },
+      /*Y'  qi=11  OC_MODE_GOLDEN_MV*/
+      {
+          394,  397,  723, 1627, 2790, 4139, 5543, 7042,
+         8507, 9849,11042,12106,13034,13822,14519,17647
+      }
+    },
+    {
+      /*Cb  qi=11  OC_MODE_INTRA*/
+      {
+          693, 1940, 3661, 5256, 6684, 8019, 9166,10216,
+        11394,12742,13706,14690,15430,16118,17135,21064
+      },
+      /*Cb  qi=11  OC_MODE_INTER_NOMV*/
+      {
+           96,  266, 1021, 2689, 4805, 6688, 8445, 9490,
+        10985,13177,12478,13909,12860,13041,11786, 7035
+      },
+      /*Cb  qi=11  OC_MODE_INTER_MV*/
+      {
+           39,  475, 1548, 3354, 5461, 8089,10157,11911,
+        13192,14418,14652,15775,17096,17397,19344,20330
+      },
+      /*Cb  qi=11  OC_MDOE_INTER_MV_LAST*/
+      {
+           70,  437, 1596, 3164, 5028, 7826, 9929,11482,
+        12453,12953,12791,12958,11968,11597,11851,11435
+      },
+      /*Cb  qi=11  OC_MODE_INTER_MV_LAST2*/
+      {
+           71,  465, 1656, 3186, 5104, 7777, 9953,11895,
+        12876,14244,16218,15200,16101,16815,19361,19582
+      },
+      /*Cb  qi=11  OC_MODE_INTER_MV_FOUR*/
+      {
+           48,  487, 1624, 3271, 5154, 7429, 9419,11158,
+        12392,13468,14557,15151,15595,16701,18737,20143
+      },
+      /*Cb  qi=11  OC_MODE_GOLDEN_NOMV*/
+      {
+          163,  542, 1237, 2823, 4347, 6147, 6403, 6720,
+         7445, 8089, 8652, 8883, 9220, 9450, 9159,11573
+      },
+      /*Cb  qi=11  OC_MODE_GOLDEN_MV*/
+      {
+           54,  538, 1707, 3264, 5039, 7180, 8390, 8974,
+         8873, 9230, 9298, 9573, 9185, 9615,10330,11284
+      }
+    },
+    {
+      /*Cr  qi=11  OC_MODE_INTRA*/
+      {
+          497, 1589, 2837, 4019, 5073, 6100, 7036, 7965,
+         8896, 9606,10314,11131,12062,12583,13221,16195
+      },
+      /*Cr  qi=11  OC_MODE_INTER_NOMV*/
+      {
+           72,  140,  366,  918, 2024, 3802, 5152, 5530,
+         6154, 6525, 7951, 7934, 8668, 7936, 9412, 6516
+      },
+      /*Cr  qi=11  OC_MODE_INTER_MV*/
+      {
+           31,  246,  731, 1706, 2858, 4487, 6039, 7345,
+         8205, 9376, 9989, 9855,10542,11663,10961,12939
+      },
+      /*Cr  qi=11  OC_MDOE_INTER_MV_LAST*/
+      {
+           59,  247,  660, 1693, 2959, 4503, 6065, 7247,
+         7959, 8239, 7841, 7423, 7232, 7390, 7523, 6570
+      },
+      /*Cr  qi=11  OC_MODE_INTER_MV_LAST2*/
+      {
+           58,  259,  699, 1749, 3020, 4428, 5974, 7179,
+         7875, 8188, 7727, 8509, 7490, 8309, 8743, 9875
+      },
+      /*Cr  qi=11  OC_MODE_INTER_MV_FOUR*/
+      {
+           40,  264,  758, 1857, 3119, 4558, 5985, 7178,
+         8235, 9133,10110,10709,11655,12467,13190,14572
+      },
+      /*Cr  qi=11  OC_MODE_GOLDEN_NOMV*/
+      {
+          136,  275,  638, 1272, 2450, 3388, 4233, 4688,
+         4623, 5392, 5578, 5633, 6320, 6368, 6640, 6784
+      },
+      /*Cr  qi=11  OC_MODE_GOLDEN_MV*/
+      {
+           51,  279,  707, 1770, 2996, 4290, 5388, 5724,
+         5922, 5936, 6155, 6146, 6570, 6840, 7133, 7304
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=12  OC_MODE_INTRA*/
+      {
+          639,  929, 2209, 3638, 4750, 5865, 6943, 7921,
+         8870, 9737,10574,11281,12011,12796,13447,18159
+      },
+      /*Y'  qi=12  OC_MODE_INTER_NOMV*/
+      {
+          115,  158,  484, 1296, 2430, 4093, 5840, 7416,
+         8877,10230,11423,12631,13617,14874,15771,20116
+      },
+      /*Y'  qi=12  OC_MODE_INTER_MV*/
+      {
+          304,  368,  709, 1785, 3304, 4743, 6119, 7432,
+         8701, 9950,11131,12181,13147,14099,14928,18197
+      },
+      /*Y'  qi=12  OC_MDOE_INTER_MV_LAST*/
+      {
+          239,  286,  579, 1522, 2999, 4507, 5978, 7434,
+         8851,10169,11377,12426,13380,14289,15085,18421
+      },
+      /*Y'  qi=12  OC_MODE_INTER_MV_LAST2*/
+      {
+          265,  324,  633, 1599, 3082, 4600, 6044, 7449,
+         8808,10114,11271,12351,13274,14190,14984,18488
+      },
+      /*Y'  qi=12  OC_MODE_INTER_MV_FOUR*/
+      {
+          315,  365,  696, 1669, 3146, 4685, 6195, 7642,
+         9014,10313,11507,12514,13437,14268,15009,17771
+      },
+      /*Y'  qi=12  OC_MODE_GOLDEN_NOMV*/
+      {
+          324,  383, 1107, 2232, 3243, 4588, 5911, 7087,
+         8248, 9059, 9377, 9871,10916,12179,13513,18885
+      },
+      /*Y'  qi=12  OC_MODE_GOLDEN_MV*/
+      {
+          368,  419,  863, 1881, 3189, 4650, 6184, 7747,
+         9250,10620,11711,12801,13683,14462,15036,18301
+      }
+    },
+    {
+      /*Cb  qi=12  OC_MODE_INTRA*/
+      {
+          731, 2045, 3839, 5541, 7015, 8373, 9516,10570,
+        11796,13154,14124,15270,15980,16650,17728,21647
+      },
+      /*Cb  qi=12  OC_MODE_INTER_NOMV*/
+      {
+          109,  325, 1182, 2978, 5199, 7122, 8660,10054,
+        11083,14580,12600,13009,12892,12674,12186, 6210
+      },
+      /*Cb  qi=12  OC_MODE_INTER_MV*/
+      {
+           39,  547, 1729, 3675, 5946, 8682,10819,12640,
+        14064,14963,15087,15897,16347,18103,19644,20596
+      },
+      /*Cb  qi=12  OC_MDOE_INTER_MV_LAST*/
+      {
+           76,  504, 1783, 3477, 5479, 8369,10488,12015,
+        12987,13180,13226,13230,12260,12063,12157,11790
+      },
+      /*Cb  qi=12  OC_MODE_INTER_MV_LAST2*/
+      {
+           79,  533, 1857, 3497, 5550, 8317,10570,12371,
+        13621,14433,14818,14233,14476,18431,17887,16163
+      },
+      /*Cb  qi=12  OC_MODE_INTER_MV_FOUR*/
+      {
+           54,  554, 1811, 3544, 5489, 7910, 9927,11577,
+        12816,13795,15363,15520,16332,18049,18804,20224
+      },
+      /*Cb  qi=12  OC_MODE_GOLDEN_NOMV*/
+      {
+          171,  610, 1383, 2946, 4822, 6475, 6610, 7061,
+         7561, 8587, 8755, 9427, 9492, 9711, 9637,11734
+      },
+      /*Cb  qi=12  OC_MODE_GOLDEN_MV*/
+      {
+           56,  609, 1911, 3568, 5487, 7692, 8683, 9269,
+         9399, 9972, 9441, 9745, 9579, 9723,10227,11619
+      }
+    },
+    {
+      /*Cr  qi=12  OC_MODE_INTRA*/
+      {
+          525, 1688, 2993, 4214, 5301, 6380, 7354, 8309,
+         9237, 9931,10648,11575,12404,12958,13602,16716
+      },
+      /*Cr  qi=12  OC_MODE_INTER_NOMV*/
+      {
+           80,  166,  438, 1073, 2322, 4198, 5594, 5765,
+         5867, 6561, 7579, 7954, 9573, 8488, 8417, 6513
+      },
+      /*Cr  qi=12  OC_MODE_INTER_MV*/
+      {
+           33,  288,  826, 1872, 3136, 4829, 6471, 7702,
+         8412, 9640,10252,10588,11416,11416,11996,14060
+      },
+      /*Cr  qi=12  OC_MDOE_INTER_MV_LAST*/
+      {
+           65,  284,  747, 1885, 3268, 4907, 6492, 7637,
+         8333, 8485, 7889, 7514, 7409, 7549, 7443, 6548
+      },
+      /*Cr  qi=12  OC_MODE_INTER_MV_LAST2*/
+      {
+           64,  295,  794, 1931, 3266, 4821, 6442, 7481,
+         8139, 8441, 7925, 7504, 7445, 7529, 7249, 6060
+      },
+      /*Cr  qi=12  OC_MODE_INTER_MV_FOUR*/
+      {
+           46,  303,  845, 2057, 3422, 4968, 6400, 7585,
+         8693, 9470,10382,11354,11930,12255,13511,14946
+      },
+      /*Cr  qi=12  OC_MODE_GOLDEN_NOMV*/
+      {
+          144,  312,  775, 1364, 2823, 3992, 4396, 4874,
+         4744, 5534, 5779, 6006, 6358, 6475, 6920, 6974
+      },
+      /*Cr  qi=12  OC_MODE_GOLDEN_MV*/
+      {
+           55,  324,  810, 1955, 3306, 4686, 5572, 6063,
+         6126, 6314, 6418, 6359, 6581, 6856, 6891, 6586
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=13  OC_MODE_INTRA*/
+      {
+          658,  965, 2286, 3824, 4982, 6128, 7236, 8238,
+         9200,10080,10937,11647,12392,13183,13862,18635
+      },
+      /*Y'  qi=13  OC_MODE_INTER_NOMV*/
+      {
+          118,  164,  545, 1435, 2710, 4513, 6324, 7931,
+         9388,10719,11901,13114,14223,15447,16266,20612
+      },
+      /*Y'  qi=13  OC_MODE_INTER_MV*/
+      {
+          309,  380,  801, 2022, 3582, 5065, 6448, 7798,
+         9105,10376,11596,12648,13626,14562,15400,18647
+      },
+      /*Y'  qi=13  OC_MDOE_INTER_MV_LAST*/
+      {
+          247,  292,  641, 1718, 3303, 4868, 6380, 7884,
+         9323,10637,11855,12876,13876,14780,15565,18913
+      },
+      /*Y'  qi=13  OC_MODE_INTER_MV_LAST2*/
+      {
+          269,  335,  703, 1804, 3389, 4969, 6483, 7915,
+         9290,10578,11734,12775,13690,14583,15326,18867
+      },
+      /*Y'  qi=13  OC_MODE_INTER_MV_FOUR*/
+      {
+          317,  372,  767, 1866, 3447, 5050, 6616, 8094,
+         9499,10796,12002,13018,13919,14753,15519,18240
+      },
+      /*Y'  qi=13  OC_MODE_GOLDEN_NOMV*/
+      {
+          314,  388, 1240, 2536, 3502, 4963, 6334, 7515,
+         8781, 9343, 9864,10403,11026,12739,14132,19367
+      },
+      /*Y'  qi=13  OC_MODE_GOLDEN_MV*/
+      {
+          384,  417,  946, 2061, 3472, 5017, 6607, 8193,
+         9742,11070,12208,13246,14105,14894,15500,18763
+      }
+    },
+    {
+      /*Cb  qi=13  OC_MODE_INTRA*/
+      {
+          786, 2214, 4095, 5897, 7425, 8799, 9966,11023,
+        12297,13640,14695,15914,16556,17248,18420,22432
+      },
+      /*Cb  qi=13  OC_MODE_INTER_NOMV*/
+      {
+          120,  384, 1361, 3384, 5719, 7569, 9061,10623,
+        12296,14908,13198,14142,13391,14737,12933, 6557
+      },
+      /*Cb  qi=13  OC_MODE_INTER_MV*/
+      {
+           45,  618, 1942, 4096, 6410, 9330,11490,13258,
+        14751,15154,16673,17335,16730,20006,19651,21592
+      },
+      /*Cb  qi=13  OC_MDOE_INTER_MV_LAST*/
+      {
+           87,  578, 2055, 3865, 5987, 9014,11167,12630,
+        13573,13811,13693,13817,12973,12666,12497,12303
+      },
+      /*Cb  qi=13  OC_MODE_INTER_MV_LAST2*/
+      {
+           84,  613, 2129, 3891, 6181, 9131,11325,13367,
+        14479,15053,15737,15517,15957,18428,19719,16527
+      },
+      /*Cb  qi=13  OC_MODE_INTER_MV_FOUR*/
+      {
+           64,  632, 2057, 3919, 5988, 8481,10538,12280,
+        13544,14659,15741,16540,16843,18360,19647,21182
+      },
+      /*Cb  qi=13  OC_MODE_GOLDEN_NOMV*/
+      {
+          185,  675, 1563, 3257, 5030, 7012, 7185, 7539,
+         8068, 8797, 9317,10040, 9848,10218,10088,12294
+      },
+      /*Cb  qi=13  OC_MODE_GOLDEN_MV*/
+      {
+           69,  707, 2174, 3974, 5972, 8181, 9146, 9649,
+         9996,10059,10047,10171,10065,10347,10496,12237
+      }
+    },
+    {
+      /*Cr  qi=13  OC_MODE_INTRA*/
+      {
+          548, 1760, 3107, 4371, 5498, 6612, 7597, 8560,
+         9533,10214,10891,11832,12810,13295,13989,17158
+      },
+      /*Cr  qi=13  OC_MODE_INTER_NOMV*/
+      {
+           81,  178,  474, 1175, 2592, 4568, 5920, 6152,
+         6498, 7279, 7474, 8499, 9825, 8632, 7819, 7414
+      },
+      /*Cr  qi=13  OC_MODE_INTER_MV*/
+      {
+           36,  302,  877, 2024, 3402, 5231, 6934, 8192,
+         9049, 9975,10349,10683,10506,12455,12046,14688
+      },
+      /*Cr  qi=13  OC_MDOE_INTER_MV_LAST*/
+      {
+           72,  304,  805, 2071, 3578, 5296, 6858, 8031,
+         8610, 8648, 8080, 7655, 7926, 7493, 7781, 6750
+      },
+      /*Cr  qi=13  OC_MODE_INTER_MV_LAST2*/
+      {
+           67,  317,  858, 2114, 3453, 5140, 6805, 8078,
+         8720, 8826, 8271, 7999, 8461, 7057, 7802, 7046
+      },
+      /*Cr  qi=13  OC_MODE_INTER_MV_FOUR*/
+      {
+           51,  324,  908, 2226, 3696, 5287, 6729, 7942,
+         8941, 9924,11031,11903,12186,12886,14435,15105
+      },
+      /*Cr  qi=13  OC_MODE_GOLDEN_NOMV*/
+      {
+          140,  356,  841, 1491, 3000, 4251, 4547, 4992,
+         4873, 5683, 5870, 6295, 6204, 6743, 6798, 7308
+      },
+      /*Cr  qi=13  OC_MODE_GOLDEN_MV*/
+      {
+           63,  342,  876, 2112, 3528, 4999, 5826, 6275,
+         6229, 6613, 6460, 6686, 6867, 7195, 7202, 6850
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=14  OC_MODE_INTRA*/
+      {
+          679,  999, 2391, 4022, 5238, 6416, 7548, 8573,
+         9554,10468,11334,12043,12801,13610,14264,19184
+      },
+      /*Y'  qi=14  OC_MODE_INTER_NOMV*/
+      {
+          120,  173,  623, 1603, 3054, 5007, 6859, 8533,
+         9957,11292,12442,13731,14869,15985,16758,21428
+      },
+      /*Y'  qi=14  OC_MODE_INTER_MV*/
+      {
+          318,  391,  898, 2256, 3906, 5457, 6890, 8247,
+         9579,10879,12083,13125,14113,15070,15887,19180
+      },
+      /*Y'  qi=14  OC_MDOE_INTER_MV_LAST*/
+      {
+          254,  300,  723, 1939, 3634, 5257, 6809, 8326,
+         9783,11122,12340,13413,14368,15286,16052,19468
+      },
+      /*Y'  qi=14  OC_MODE_INTER_MV_LAST2*/
+      {
+          275,  345,  788, 2026, 3710, 5350, 6892, 8357,
+         9762,11084,12267,13331,14212,15061,15813,19320
+      },
+      /*Y'  qi=14  OC_MODE_INTER_MV_FOUR*/
+      {
+          323,  387,  862, 2101, 3782, 5454, 7059, 8555,
+         9973,11292,12464,13500,14408,15265,15999,18782
+      },
+      /*Y'  qi=14  OC_MODE_GOLDEN_NOMV*/
+      {
+          325,  426, 1297, 2591, 3805, 5292, 6805, 8023,
+         9204, 9683,10418,10891,11236,13195,14517,20007
+      },
+      /*Y'  qi=14  OC_MODE_GOLDEN_MV*/
+      {
+          378,  434, 1038, 2268, 3795, 5406, 7079, 8694,
+        10217,11592,12705,13715,14649,15285,15937,19341
+      }
+    },
+    {
+      /*Cb  qi=14  OC_MODE_INTRA*/
+      {
+          798, 2291, 4194, 6058, 7620, 9009,10198,11297,
+        12573,13977,15070,16332,16986,17651,18784,22905
+      },
+      /*Cb  qi=14  OC_MODE_INTER_NOMV*/
+      {
+          120,  397, 1444, 3606, 5928, 7655, 9462,10997,
+        12957,14257,13521,14736,14102,12819,15748, 6509
+      },
+      /*Cb  qi=14  OC_MODE_INTER_MV*/
+      {
+           46,  648, 2064, 4316, 6834, 9771,12006,13750,
+        15050,15892,16677,17526,20421,20352,20188,22002
+      },
+      /*Cb  qi=14  OC_MDOE_INTER_MV_LAST*/
+      {
+           89,  594, 2171, 4075, 6298, 9413,11588,13032,
+        13981,14263,14108,14096,13177,12857,12948,12791
+      },
+      /*Cb  qi=14  OC_MODE_INTER_MV_LAST2*/
+      {
+           95,  637, 2245, 4064, 6368, 9201,11389,13523,
+        14693,15668,16657,16987,17432,19451,18513,22443
+      },
+      /*Cb  qi=14  OC_MODE_INTER_MV_FOUR*/
+      {
+           68,  660, 2168, 4125, 6260, 8837,10931,12651,
+        14016,15114,16203,17097,17632,19932,19673,21908
+      },
+      /*Cb  qi=14  OC_MODE_GOLDEN_NOMV*/
+      {
+          193,  712, 1648, 3495, 5310, 7116, 7151, 7851,
+         8264, 9030, 9709,10201, 9960,10480,10406,12576
+      },
+      /*Cb  qi=14  OC_MODE_GOLDEN_MV*/
+      {
+           71,  729, 2309, 4184, 6264, 8479, 9524,10037,
+        10242,10419,10538,10403,10367,10745,10854,12763
+      }
+    },
+    {
+      /*Cr  qi=14  OC_MODE_INTRA*/
+      {
+          557, 1848, 3253, 4565, 5731, 6873, 7893, 8916,
+         9873,10559,11286,12203,13131,13648,14432,17707
+      },
+      /*Cr  qi=14  OC_MODE_INTER_NOMV*/
+      {
+           81,  188,  517, 1317, 3031, 4965, 5974, 6398,
+         6756, 8015, 7918,10043, 9928,10240, 9176, 7346
+      },
+      /*Cr  qi=14  OC_MODE_INTER_MV*/
+      {
+           38,  325,  974, 2227, 3724, 5641, 7262, 8614,
+         9465, 9981,11118,12323,12248,13367,12617,15090
+      },
+      /*Cr  qi=14  OC_MDOE_INTER_MV_LAST*/
+      {
+           73,  321,  877, 2285, 3879, 5694, 7240, 8450,
+         8917, 8990, 8296, 8043, 7723, 8083, 8074, 6930
+      },
+      /*Cr  qi=14  OC_MODE_INTER_MV_LAST2*/
+      {
+           75,  336,  943, 2364, 3808, 5499, 7055, 8316,
+         8876, 9258, 8802, 9769, 9488, 8801,10330,11839
+      },
+      /*Cr  qi=14  OC_MODE_INTER_MV_FOUR*/
+      {
+           55,  345, 1003, 2442, 4002, 5647, 7139, 8403,
+         9491,10247,11462,12301,12751,13977,14594,15385
+      },
+      /*Cr  qi=14  OC_MODE_GOLDEN_NOMV*/
+      {
+          146,  368,  894, 1753, 3288, 4511, 4978, 5029,
+         5261, 5892, 6285, 6428, 6496, 6907, 7152, 7412
+      },
+      /*Cr  qi=14  OC_MODE_GOLDEN_MV*/
+      {
+           66,  371,  954, 2349, 3856, 5289, 6158, 6456,
+         6404, 6912, 6574, 6947, 6641, 7822, 7124, 7003
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=15  OC_MODE_INTRA*/
+      {
+          710, 1055, 2510, 4247, 5522, 6740, 7904, 8951,
+         9950,10885,11773,12480,13259,14094,14730,19742
+      },
+      /*Y'  qi=15  OC_MODE_INTER_NOMV*/
+      {
+          125,  196,  754, 1840, 3471, 5550, 7450, 9148,
+        10571,11876,13097,14317,15585,16562,17085,23143
+      },
+      /*Y'  qi=15  OC_MODE_INTER_MV*/
+      {
+          331,  418, 1021, 2520, 4238, 5821, 7296, 8702,
+        10096,11419,12603,13633,14653,15595,16390,19727
+      },
+      /*Y'  qi=15  OC_MDOE_INTER_MV_LAST*/
+      {
+          259,  314,  830, 2210, 4012, 5696, 7296, 8862,
+        10344,11663,12861,13886,14870,15794,16550,20009
+      },
+      /*Y'  qi=15  OC_MODE_INTER_MV_LAST2*/
+      {
+          281,  368,  912, 2309, 4091, 5796, 7394, 8879,
+        10313,11616,12764,13780,14703,15535,16216,19778
+      },
+      /*Y'  qi=15  OC_MODE_INTER_MV_FOUR*/
+      {
+          333,  413,  980, 2366, 4155, 5899, 7556, 9099,
+        10524,11850,13015,14043,14951,15803,16520,19304
+      },
+      /*Y'  qi=15  OC_MODE_GOLDEN_NOMV*/
+      {
+          356,  482, 1401, 2777, 4193, 5707, 7247, 8533,
+         9513,10151,11018,11310,11914,14019,14827,20528
+      },
+      /*Y'  qi=15  OC_MODE_GOLDEN_MV*/
+      {
+          387,  461, 1171, 2544, 4175, 5846, 7571, 9239,
+        10800,12127,13286,14240,15097,15857,16453,19863
+      }
+    },
+    {
+      /*Cb  qi=15  OC_MODE_INTRA*/
+      {
+          847, 2475, 4442, 6407, 8007, 9410,10601,11729,
+        13043,14430,15566,16847,17562,18239,19470,23623
+      },
+      /*Cb  qi=15  OC_MODE_INTER_NOMV*/
+      {
+          132,  470, 1675, 4020, 6239, 7976, 9724,10533,
+        12365,14549,13173,14194,14417,14276,10166, 5841
+      },
+      /*Cb  qi=15  OC_MODE_INTER_MV*/
+      {
+           53,  741, 2298, 4730, 7293,10409,12556,14281,
+        15677,16745,17527,18924,18867,19749,21406,23108
+      },
+      /*Cb  qi=15  OC_MDOE_INTER_MV_LAST*/
+      {
+          103,  684, 2467, 4462, 6812, 9983,12104,13667,
+        14508,14733,14538,14771,13831,13150,13695,13269
+      },
+      /*Cb  qi=15  OC_MODE_INTER_MV_LAST2*/
+      {
+           96,  737, 2543, 4496, 7047,10172,12579,14406,
+        15461,16296,16982,17751,16705,18372,21377,18999
+      },
+      /*Cb  qi=15  OC_MODE_INTER_MV_FOUR*/
+      {
+           77,  754, 2439, 4504, 6722, 9367,11492,13285,
+        14507,15617,16864,17986,18453,18464,21086,22951
+      },
+      /*Cb  qi=15  OC_MODE_GOLDEN_NOMV*/
+      {
+          214,  798, 1884, 3787, 5863, 7487, 7686, 8149,
+         8789, 9533,10134,10777,10569,10862,10887,13090
+      },
+      /*Cb  qi=15  OC_MODE_GOLDEN_MV*/
+      {
+           85,  824, 2590, 4585, 6755, 9062, 9941,10311,
+        10600,11011,10713,11235,10589,11282,11257,13063
+      }
+    },
+    {
+      /*Cr  qi=15  OC_MODE_INTRA*/
+      {
+          580, 1957, 3431, 4793, 6003, 7165, 8212, 9278,
+        10270,10982,11701,12575,13644,14276,14887,18160
+      },
+      /*Cr  qi=15  OC_MODE_INTER_NOMV*/
+      {
+           87,  213,  592, 1510, 3380, 5327, 6194, 6477,
+         6389, 7235, 7633, 8675,10056,10345, 8704, 6301
+      },
+      /*Cr  qi=15  OC_MODE_INTER_MV*/
+      {
+           43,  358, 1068, 2440, 4080, 6048, 7794, 9019,
+         9825,10515,11770,11892,12805,14299,13933,15160
+      },
+      /*Cr  qi=15  OC_MDOE_INTER_MV_LAST*/
+      {
+           83,  351,  981, 2534, 4281, 6103, 7700, 8836,
+         9304, 9262, 8518, 8251, 7941, 8193, 8017, 7174
+      },
+      /*Cr  qi=15  OC_MODE_INTER_MV_LAST2*/
+      {
+           75,  370, 1053, 2554, 4040, 5926, 7569, 8789,
+         9360, 9358, 9223, 9139, 8817, 8369, 8116, 7704
+      },
+      /*Cr  qi=15  OC_MODE_INTER_MV_FOUR*/
+      {
+           61,  380, 1118, 2694, 4352, 6041, 7538, 8721,
+         9832,10791,11819,12768,13337,14262,15590,16166
+      },
+      /*Cr  qi=15  OC_MODE_GOLDEN_NOMV*/
+      {
+          148,  405,  978, 1821, 3639, 4852, 5152, 5242,
+         5464, 5680, 6473, 6644, 6554, 7214, 7435, 7635
+      },
+      /*Cr  qi=15  OC_MODE_GOLDEN_MV*/
+      {
+           76,  407, 1060, 2559, 4181, 5684, 6442, 6995,
+         6700, 7133, 6902, 7294, 7095, 7739, 7234, 7414
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=16  OC_MODE_INTRA*/
+      {
+          717, 1070, 2530, 4299, 5597, 6833, 8010, 9067,
+        10079,11025,11922,12625,13411,14250,14907,19948
+      },
+      /*Y'  qi=16  OC_MODE_INTER_NOMV*/
+      {
+          123,  195,  769, 1899, 3616, 5747, 7664, 9413,
+        10816,12119,13351,14565,15893,16743,17276,22994
+      },
+      /*Y'  qi=16  OC_MODE_INTER_MV*/
+      {
+          335,  425, 1059, 2613, 4361, 5970, 7466, 8884,
+        10295,11613,12812,13832,14871,15799,16574,19935
+      },
+      /*Y'  qi=16  OC_MDOE_INTER_MV_LAST*/
+      {
+          260,  317,  860, 2299, 4142, 5849, 7475, 9060,
+        10539,11871,13065,14094,15109,15992,16769,20226
+      },
+      /*Y'  qi=16  OC_MODE_INTER_MV_LAST2*/
+      {
+          279,  371,  939, 2392, 4205, 5936, 7551, 9079,
+        10509,11832,12978,13954,14939,15758,16421,20074
+      },
+      /*Y'  qi=16  OC_MODE_INTER_MV_FOUR*/
+      {
+          335,  417, 1009, 2445, 4272, 6052, 7725, 9275,
+        10700,12040,13207,14221,15151,15996,16739,19515
+      },
+      /*Y'  qi=16  OC_MODE_GOLDEN_NOMV*/
+      {
+          369,  509, 1470, 2868, 4294, 5851, 7416, 8652,
+         9643,10306,11206,11425,12120,14461,14998,20780
+      },
+      /*Y'  qi=16  OC_MODE_GOLDEN_MV*/
+      {
+          413,  474, 1210, 2630, 4296, 6008, 7758, 9432,
+        11002,12337,13457,14434,15356,15996,16667,20098
+      }
+    },
+    {
+      /*Cb  qi=16  OC_MODE_INTRA*/
+      {
+          875, 2528, 4520, 6502, 8120, 9536,10725,11865,
+        13162,14575,15729,17008,17782,18371,19646,23808
+      },
+      /*Cb  qi=16  OC_MODE_INTER_NOMV*/
+      {
+          134,  483, 1727, 4125, 6355, 8177, 9924,11407,
+        13572,14106,14639,13963,14121,14066,13880, 6350
+      },
+      /*Cb  qi=16  OC_MODE_INTER_MV*/
+      {
+           56,  764, 2369, 4836, 7427,10571,12697,14474,
+        15801,16876,17915,18829,18341,20368,21015,23192
+      },
+      /*Cb  qi=16  OC_MDOE_INTER_MV_LAST*/
+      {
+          110,  704, 2542, 4567, 6940,10114,12243,13756,
+        14603,14954,14730,14733,13657,13578,13545,13446
+      },
+      /*Cb  qi=16  OC_MODE_INTER_MV_LAST2*/
+      {
+          107,  757, 2619, 4570, 7139,10251,12679,14467,
+        15701,16753,16784,16102,18243,18707,21886,18943
+      },
+      /*Cb  qi=16  OC_MODE_INTER_MV_FOUR*/
+      {
+           83,  774, 2504, 4592, 6848, 9492,11666,13416,
+        14695,15768,16947,17894,18229,19603,20537,23049
+      },
+      /*Cb  qi=16  OC_MODE_GOLDEN_NOMV*/
+      {
+          232,  822, 1926, 3871, 6139, 7591, 7702, 8197,
+         8788, 9433,10331,10842,10530,10839,11016,13217
+      },
+      /*Cb  qi=16  OC_MODE_GOLDEN_MV*/
+      {
+           91,  849, 2664, 4694, 6893, 9229, 9997,10739,
+        10798,10796,11009,11383,10994,11296,11514,13301
+      }
+    },
+    {
+      /*Cr  qi=16  OC_MODE_INTRA*/
+      {
+          595, 1992, 3476, 4852, 6072, 7251, 8314, 9409,
+        10394,11081,11856,12726,13890,14453,15082,18367
+      },
+      /*Cr  qi=16  OC_MODE_INTER_NOMV*/
+      {
+           87,  218,  606, 1564, 3582, 5326, 6247, 6646,
+         7038, 7546, 9337, 8391,10629,11032, 8824, 6677
+      },
+      /*Cr  qi=16  OC_MODE_INTER_MV*/
+      {
+           44,  371, 1093, 2505, 4216, 6277, 7899, 9243,
+         9757,10923,11967,12371,12669,13293,13961,14683
+      },
+      /*Cr  qi=16  OC_MDOE_INTER_MV_LAST*/
+      {
+           85,  360, 1003, 2608, 4405, 6309, 7863, 9077,
+         9402, 9295, 8493, 8323, 8339, 8195, 8296, 7245
+      },
+      /*Cr  qi=16  OC_MODE_INTER_MV_LAST2*/
+      {
+           82,  384, 1092, 2632, 4182, 6206, 7781, 9056,
+         9383, 9619, 9200, 9006, 9125, 8290, 8526, 7320
+      },
+      /*Cr  qi=16  OC_MODE_INTER_MV_FOUR*/
+      {
+           64,  391, 1142, 2768, 4458, 6208, 7666, 8984,
+        10079,10905,12010,13222,13500,14437,15386,17279
+      },
+      /*Cr  qi=16  OC_MODE_GOLDEN_NOMV*/
+      {
+          158,  429, 1002, 1891, 3677, 4972, 5244, 5315,
+         5351, 5821, 6507, 6635, 6974, 6935, 7783, 7730
+      },
+      /*Cr  qi=16  OC_MODE_GOLDEN_MV*/
+      {
+           79,  417, 1087, 2639, 4252, 5618, 6622, 6732,
+         6983, 6883, 7093, 7084, 7326, 7586, 7831, 7416
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=17  OC_MODE_INTRA*/
+      {
+          742, 1117, 2656, 4534, 5900, 7175, 8383, 9454,
+        10492,11469,12390,13101,13902,14774,15382,20585
+      },
+      /*Y'  qi=17  OC_MODE_INTER_NOMV*/
+      {
+          125,  212,  879, 2147, 4096, 6339, 8325,10070,
+        11489,12742,14042,15246,16490,17348,17997,23592
+      },
+      /*Y'  qi=17  OC_MODE_INTER_MV*/
+      {
+          334,  454, 1190, 2916, 4766, 6446, 8016, 9478,
+        10884,12212,13394,14407,15458,16369,17156,20524
+      },
+      /*Y'  qi=17  OC_MDOE_INTER_MV_LAST*/
+      {
+          259,  334,  984, 2611, 4554, 6327, 7993, 9601,
+        11098,12460,13662,14709,15708,16590,17336,20925
+      },
+      /*Y'  qi=17  OC_MODE_INTER_MV_LAST2*/
+      {
+          284,  390, 1067, 2679, 4607, 6391, 8039, 9596,
+        11077,12399,13598,14627,15591,16464,17044,21039
+      },
+      /*Y'  qi=17  OC_MODE_INTER_MV_FOUR*/
+      {
+          340,  439, 1150, 2753, 4685, 6534, 8244, 9820,
+        11260,12619,13781,14802,15725,16561,17313,20161
+      },
+      /*Y'  qi=17  OC_MODE_GOLDEN_NOMV*/
+      {
+          377,  521, 1654, 3135, 4678, 6278, 7909, 9148,
+        10021,10863,11580,11828,12700,15108,15525,21453
+      },
+      /*Y'  qi=17  OC_MODE_GOLDEN_MV*/
+      {
+          402,  509, 1361, 2895, 4666, 6493, 8300,10008,
+        11558,12925,14046,15021,15906,16645,17277,20762
+      }
+    },
+    {
+      /*Cb  qi=17  OC_MODE_INTRA*/
+      {
+          925, 2734, 4812, 6913, 8585, 9994,11221,12377,
+        13693,15135,16302,17725,18425,19092,20425,24706
+      },
+      /*Cb  qi=17  OC_MODE_INTER_NOMV*/
+      {
+          143,  552, 1999, 4638, 6743, 8494,10488,12018,
+        14234,16214,14142,16149,14899,16360,15904, 6799
+      },
+      /*Cb  qi=17  OC_MODE_INTER_MV*/
+      {
+           62,  888, 2727, 5305, 8195,11399,13582,15420,
+        16709,17622,18465,18930,19995,21688,23192,24403
+      },
+      /*Cb  qi=17  OC_MDOE_INTER_MV_LAST*/
+      {
+          118,  788, 2864, 5014, 7545,10804,12907,14407,
+        15359,15558,15315,15238,14602,13862,14315,14106
+      },
+      /*Cb  qi=17  OC_MODE_INTER_MV_LAST2*/
+      {
+          133,  844, 2936, 4981, 7618,10776,12993,14846,
+        16218,16991,18190,17384,17444,22165,20686,21170
+      },
+      /*Cb  qi=17  OC_MODE_INTER_MV_FOUR*/
+      {
+           92,  869, 2820, 5035, 7412,10155,12368,14232,
+        15579,16694,17608,18446,19286,21298,22477,24178
+      },
+      /*Cb  qi=17  OC_MODE_GOLDEN_NOMV*/
+      {
+          245,  896, 2158, 4236, 6576, 7995, 8424, 8691,
+         9195,10064,10986,11355,11092,11771,11520,13798
+      },
+      /*Cb  qi=17  OC_MODE_GOLDEN_MV*/
+      {
+          100,  969, 3004, 5144, 7457, 9672,10670,11082,
+        11369,11583,11595,11847,11667,12096,11976,14029
+      }
+    },
+    {
+      /*Cr  qi=17  OC_MODE_INTRA*/
+      {
+          620, 2102, 3663, 5092, 6360, 7580, 8677, 9806,
+        10830,11490,12287,13209,14357,15068,15626,18989
+      },
+      /*Cr  qi=17  OC_MODE_INTER_NOMV*/
+      {
+           91,  243,  689, 1799, 4049, 5731, 6511, 7106,
+         6803, 7079, 8480, 9885,11454, 9849, 8769, 6980
+      },
+      /*Cr  qi=17  OC_MODE_INTER_MV*/
+      {
+           47,  413, 1229, 2805, 4577, 6696, 8452, 9688,
+        10283,11290,12283,13442,13295,12898,15390,16827
+      },
+      /*Cr  qi=17  OC_MDOE_INTER_MV_LAST*/
+      {
+           91,  392, 1112, 2885, 4791, 6804, 8387, 9538,
+         9818, 9571, 8794, 8467, 8485, 8255, 8678, 7523
+      },
+      /*Cr  qi=17  OC_MODE_INTER_MV_LAST2*/
+      {
+           98,  416, 1198, 2934, 4668, 6659, 8171, 9453,
+         9725, 9818, 9365, 9009, 8796, 8933, 8440, 8254
+      },
+      /*Cr  qi=17  OC_MODE_INTER_MV_FOUR*/
+      {
+           70,  426, 1275, 3053, 4852, 6667, 8136, 9450,
+        10568,11478,12610,13594,13959,14950,16534,16416
+      },
+      /*Cr  qi=17  OC_MODE_GOLDEN_NOMV*/
+      {
+          169,  457, 1109, 2151, 3895, 5170, 5608, 5546,
+         5662, 6023, 6786, 6965, 7165, 7243, 8080, 8040
+      },
+      /*Cr  qi=17  OC_MODE_GOLDEN_MV*/
+      {
+           88,  459, 1220, 2931, 4650, 6000, 6899, 6993,
+         7364, 7281, 7299, 7577, 7721, 7775, 7810, 7663
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=18  OC_MODE_INTRA*/
+      {
+          772, 1193, 2810, 4799, 6235, 7554, 8794, 9888,
+        10959,11963,12899,13617,14447,15340,15966,21266
+      },
+      /*Y'  qi=18  OC_MODE_INTER_NOMV*/
+      {
+          133,  248, 1048, 2471, 4636, 6986, 9022,10741,
+        12226,13360,14819,16008,17158,17828,18539,24557
+      },
+      /*Y'  qi=18  OC_MODE_INTER_MV*/
+      {
+          343,  484, 1369, 3230, 5159, 6914, 8525,10050,
+        11495,12804,14008,15067,16108,17014,17814,21335
+      },
+      /*Y'  qi=18  OC_MDOE_INTER_MV_LAST*/
+      {
+          259,  362, 1140, 2964, 5013, 6863, 8607,10263,
+        11748,13075,14270,15346,16368,17289,18034,21701
+      },
+      /*Y'  qi=18  OC_MODE_INTER_MV_LAST2*/
+      {
+          294,  425, 1247, 3030, 5068, 6957, 8677,10270,
+        11719,13006,14152,15169,16106,16850,17429,21113
+      },
+      /*Y'  qi=18  OC_MODE_INTER_MV_FOUR*/
+      {
+          351,  479, 1335, 3104, 5149, 7074, 8848,10457,
+        11916,13264,14441,15428,16401,17226,17980,20874
+      },
+      /*Y'  qi=18  OC_MODE_GOLDEN_NOMV*/
+      {
+          367,  665, 1821, 3441, 5122, 6868, 8499, 9691,
+        10485,11488,12251,12197,13766,15765,16066,22187
+      },
+      /*Y'  qi=18  OC_MODE_GOLDEN_MV*/
+      {
+          421,  574, 1544, 3210, 5143, 7042, 8907,10693,
+        12175,13589,14695,15653,16559,17256,17924,21485
+      }
+    },
+    {
+      /*Cb  qi=18  OC_MODE_INTRA*/
+      {
+         1005, 2959, 5117, 7328, 9066,10451,11682,12894,
+        14171,15681,16901,18286,19060,19770,21085,25523
+      },
+      /*Cb  qi=18  OC_MODE_INTER_NOMV*/
+      {
+          159,  647, 2306, 5141, 7102, 8799,11278,12618,
+        14572,14373,16939,14955,15770,15861,13793, 7075
+      },
+      /*Cb  qi=18  OC_MODE_INTER_MV*/
+      {
+           78,  979, 3024, 5767, 8668,11925,14191,15919,
+        17279,18558,19049,19697,20399,22552,23150,24172
+      },
+      /*Cb  qi=18  OC_MDOE_INTER_MV_LAST*/
+      {
+          143,  893, 3216, 5455, 8100,11394,13546,14990,
+        15881,16226,16048,16005,15262,14789,15026,14703
+      },
+      /*Cb  qi=18  OC_MODE_INTER_MV_LAST2*/
+      {
+          128,  976, 3280, 5493, 8330,11519,14006,15895,
+        17152,17680,18247,19808,18124,20903,20931,22658
+      },
+      /*Cb  qi=18  OC_MODE_INTER_MV_FOUR*/
+      {
+          110,  982, 3153, 5472, 7953,10805,12986,14862,
+        16243,17349,18710,18967,20385,21888,22696,24390
+      },
+      /*Cb  qi=18  OC_MODE_GOLDEN_NOMV*/
+      {
+          266, 1017, 2460, 4699, 7208, 8482, 9001, 9071,
+         9800,10872,11509,11920,11528,12183,11963,14327
+      },
+      /*Cb  qi=18  OC_MODE_GOLDEN_MV*/
+      {
+          122, 1094, 3340, 5597, 7982,10310,11093,11528,
+        11894,12162,11956,12213,12090,12363,12660,14505
+      }
+    },
+    {
+      /*Cr  qi=18  OC_MODE_INTRA*/
+      {
+          664, 2259, 3913, 5403, 6711, 7980, 9113,10262,
+        11334,12021,12836,13683,14841,15560,16297,19630
+      },
+      /*Cr  qi=18  OC_MODE_INTER_NOMV*/
+      {
+          103,  308,  841, 2110, 4545, 6204, 6939, 7915,
+         7808, 7902, 8305, 9168,10009,10383, 9237, 6932
+      },
+      /*Cr  qi=18  OC_MODE_INTER_MV*/
+      {
+           57,  486, 1391, 3145, 5169, 7333, 9084,10345,
+        11085,12560,13286,13442,13997,15635,15570,15470
+      },
+      /*Cr  qi=18  OC_MDOE_INTER_MV_LAST*/
+      {
+          106,  465, 1280, 3281, 5327, 7369, 8950,10072,
+        10233, 9995, 9242, 8878, 8871, 8616, 8840, 7744
+      },
+      /*Cr  qi=18  OC_MODE_INTER_MV_LAST2*/
+      {
+           95,  492, 1399, 3219, 5030, 7040, 8873,10163,
+        10271,10438, 9828, 9743,10424, 9601, 9739, 9941
+      },
+      /*Cr  qi=18  OC_MODE_INTER_MV_FOUR*/
+      {
+           79,  506, 1472, 3409, 5323, 7205, 8687,10032,
+        11039,12092,13571,13967,14509,15819,16888,18279
+      },
+      /*Cr  qi=18  OC_MODE_GOLDEN_NOMV*/
+      {
+          176,  571, 1288, 2442, 4260, 5285, 5676, 6107,
+         5896, 6465, 7050, 7262, 7544, 7776, 7894, 8370
+      },
+      /*Cr  qi=18  OC_MODE_GOLDEN_MV*/
+      {
+           96,  548, 1389, 3274, 5089, 6523, 7490, 7451,
+         7783, 7650, 7809, 7628, 8102, 8137, 8386, 8189
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=19  OC_MODE_INTRA*/
+      {
+          799, 1239, 2938, 5018, 6495, 7842, 9093,10198,
+        11285,12308,13255,13985,14814,15722,16368,21723
+      },
+      /*Y'  qi=19  OC_MODE_INTER_NOMV*/
+      {
+          136,  272, 1163, 2723, 5014, 7416, 9459,11126,
+        12573,13830,15203,16532,17485,18365,19143,25375
+      },
+      /*Y'  qi=19  OC_MODE_INTER_MV*/
+      {
+          344,  518, 1515, 3480, 5481, 7290, 8934,10434,
+        11895,13226,14411,15493,16522,17399,18207,21741
+      },
+      /*Y'  qi=19  OC_MDOE_INTER_MV_LAST*/
+      {
+          256,  388, 1283, 3256, 5352, 7224, 8985,10631,
+        12127,13469,14648,15691,16696,17556,18296,22092
+      },
+      /*Y'  qi=19  OC_MODE_INTER_MV_LAST2*/
+      {
+          290,  444, 1383, 3285, 5368, 7290, 9058,10624,
+        12045,13399,14572,15650,16656,17500,18258,22248
+      },
+      /*Y'  qi=19  OC_MODE_INTER_MV_FOUR*/
+      {
+          354,  506, 1490, 3376, 5479, 7430, 9223,10835,
+        12289,13652,14816,15844,16793,17622,18392,21334
+      },
+      /*Y'  qi=19  OC_MODE_GOLDEN_NOMV*/
+      {
+          365,  700, 1982, 3662, 5489, 7241, 8809,10035,
+        10919,11842,12502,12749,14079,15935,16438,22700
+      },
+      /*Y'  qi=19  OC_MODE_GOLDEN_MV*/
+      {
+          413,  587, 1667, 3425, 5464, 7406, 9264,11049,
+        12604,13963,15069,16007,16974,17656,18308,21937
+      }
+    },
+    {
+      /*Cb  qi=19  OC_MODE_INTRA*/
+      {
+         1045, 3108, 5323, 7593, 9379,10776,12008,13255,
+        14528,16024,17347,18789,19505,20317,21580,26079
+      },
+      /*Cb  qi=19  OC_MODE_INTER_NOMV*/
+      {
+          164,  695, 2524, 5487, 7512, 9148,11860,12498,
+        14334,16490,16915,16530,15549,15473,18212, 7299
+      },
+      /*Cb  qi=19  OC_MODE_INTER_MV*/
+      {
+           87, 1080, 3288, 6080, 9101,12495,14712,16503,
+        18006,18892,19851,19911,21216,23036,24689,25364
+      },
+      /*Cb  qi=19  OC_MDOE_INTER_MV_LAST*/
+      {
+          148,  960, 3436, 5790, 8543,11943,14075,15433,
+        16360,16550,16470,16186,15556,15556,15339,15257
+      },
+      /*Cb  qi=19  OC_MODE_INTER_MV_LAST2*/
+      {
+          174, 1032, 3552, 5719, 8426,11685,13998,15881,
+        17229,18490,18602,19140,20472,22679,22656,22874
+      },
+      /*Cb  qi=19  OC_MODE_INTER_MV_FOUR*/
+      {
+          122, 1055, 3382, 5777, 8345,11237,13387,15356,
+        16743,18120,19070,19687,21104,20928,23889,25790
+      },
+      /*Cb  qi=19  OC_MODE_GOLDEN_NOMV*/
+      {
+          290, 1063, 2652, 4925, 7788, 8856, 9257, 9329,
+        10151,11008,11707,12502,11870,12696,12132,14837
+      },
+      /*Cb  qi=19  OC_MODE_GOLDEN_MV*/
+      {
+          138, 1185, 3582, 5912, 8319,10886,11561,11806,
+        12146,12280,12261,12853,12514,12874,13293,15010
+      }
+    },
+    {
+      /*Cr  qi=19  OC_MODE_INTRA*/
+      {
+          680, 2298, 3972, 5486, 6829, 8133, 9296,10466,
+        11562,12216,13133,13938,15155,15832,16649,19960
+      },
+      /*Cr  qi=19  OC_MODE_INTER_NOMV*/
+      {
+          105,  320,  873, 2246, 4844, 6236, 6912, 8208,
+         8753, 8095, 9184, 9290, 9678, 9636,10059, 7456
+      },
+      /*Cr  qi=19  OC_MODE_INTER_MV*/
+      {
+           59,  515, 1478, 3311, 5359, 7585, 9280,10831,
+        11177,12145,13187,14162,14665,14573,14488,16463
+      },
+      /*Cr  qi=19  OC_MDOE_INTER_MV_LAST*/
+      {
+          107,  485, 1333, 3412, 5540, 7630, 9239,10340,
+        10455,10141, 9226, 9060, 8838, 8535, 8953, 7796
+      },
+      /*Cr  qi=19  OC_MODE_INTER_MV_LAST2*/
+      {
+          122,  512, 1438, 3507, 5478, 7504, 9104,10224,
+        10585,10307,10410, 9792,11089, 9178, 9127, 9354
+      },
+      /*Cr  qi=19  OC_MODE_INTER_MV_FOUR*/
+      {
+           85,  524, 1525, 3539, 5516, 7437, 8957,10279,
+        11392,12395,13425,14407,14863,15464,16745,17950
+      },
+      /*Cr  qi=19  OC_MODE_GOLDEN_NOMV*/
+      {
+          186,  587, 1304, 2666, 4610, 5534, 5808, 6283,
+         6114, 6642, 7135, 7329, 7798, 7944, 8162, 8639
+      },
+      /*Cr  qi=19  OC_MODE_GOLDEN_MV*/
+      {
+          108,  562, 1452, 3417, 5292, 6807, 7551, 7755,
+         7665, 7629, 7959, 7952, 8381, 8206, 8443, 8282
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=20  OC_MODE_INTRA*/
+      {
+          826, 1346, 3202, 5420, 6999, 8403, 9686,10820,
+        11946,13020,14000,14709,15574,16498,17109,22597
+      },
+      /*Y'  qi=20  OC_MODE_INTER_NOMV*/
+      {
+          139,  315, 1394, 3260, 5840, 8342,10353,12036,
+        13481,14869,16152,17377,18284,19235,19774,26401
+      },
+      /*Y'  qi=20  OC_MODE_INTER_MV*/
+      {
+          341,  572, 1827, 4010, 6131, 8022, 9707,11266,
+        12733,14079,15285,16367,17406,18331,19135,22815
+      },
+      /*Y'  qi=20  OC_MDOE_INTER_MV_LAST*/
+      {
+          260,  436, 1560, 3799, 6037, 8003, 9837,11502,
+        12994,14305,15482,16521,17510,18418,19160,23095
+      },
+      /*Y'  qi=20  OC_MODE_INTER_MV_LAST2*/
+      {
+          290,  485, 1673, 3788, 6032, 8089, 9910,11492,
+        12937,14227,15400,16530,17428,18356,19116,23324
+      },
+      /*Y'  qi=20  OC_MODE_INTER_MV_FOUR*/
+      {
+          354,  555, 1794, 3920, 6156, 8200,10036,11674,
+        13131,14499,15673,16725,17658,18496,19316,22275
+      },
+      /*Y'  qi=20  OC_MODE_GOLDEN_NOMV*/
+      {
+          381,  771, 2174, 4151, 6180, 7969, 9561,10671,
+        11778,12492,13199,13785,15426,16631,17062,23729
+      },
+      /*Y'  qi=20  OC_MODE_GOLDEN_MV*/
+      {
+          430,  676, 1936, 3922, 6133, 8178,10118,11913,
+        13455,14787,15948,16873,17837,18502,19169,22970
+      }
+    },
+    {
+      /*Cb  qi=20  OC_MODE_INTRA*/
+      {
+         1108, 3364, 5668, 8042, 9884,11295,12524,13814,
+        15120,16706,18004,19584,20253,21106,22346,26882
+      },
+      /*Cb  qi=20  OC_MODE_INTER_NOMV*/
+      {
+          179,  782, 2884, 5975, 7851, 9764,12258,12994,
+        17568,17087,17227,18018,16906,18271,17465, 7901
+      },
+      /*Cb  qi=20  OC_MODE_INTER_MV*/
+      {
+          103, 1203, 3663, 6635, 9767,13231,15478,17189,
+        18942,19555,20448,21608,22302,25504,25078,28354
+      },
+      /*Cb  qi=20  OC_MDOE_INTER_MV_LAST*/
+      {
+          165, 1072, 3825, 6305, 9221,12685,14834,16130,
+        16953,17275,17083,17106,16541,16178,16318,15943
+      },
+      /*Cb  qi=20  OC_MODE_INTER_MV_LAST2*/
+      {
+          206, 1150, 3944, 6198, 8991,12361,14807,16393,
+        18131,19005,19929,20150,21400,22741,22966,25862
+      },
+      /*Cb  qi=20  OC_MODE_INTER_MV_FOUR*/
+      {
+          144, 1164, 3745, 6277, 8930,11906,14150,16126,
+        17420,19042,20377,20595,21414,21968,26449,27536
+      },
+      /*Cb  qi=20  OC_MODE_GOLDEN_NOMV*/
+      {
+          312, 1194, 2968, 5589, 8357, 9200, 9873, 9927,
+        10805,11739,12315,13057,12634,13418,13007,15498
+      },
+      /*Cb  qi=20  OC_MODE_GOLDEN_MV*/
+      {
+          160, 1315, 3981, 6395, 8954,11242,12337,12489,
+        12909,12635,12800,13435,13003,13306,13824,15739
+      }
+    },
+    {
+      /*Cr  qi=20  OC_MODE_INTRA*/
+      {
+          714, 2480, 4270, 5851, 7233, 8567, 9777,10995,
+        12181,12866,13814,14694,15902,16581,17353,20735
+      },
+      /*Cr  qi=20  OC_MODE_INTER_NOMV*/
+      {
+          113,  379, 1054, 2633, 5368, 6552, 7323, 7835,
+         8494, 7871, 8718, 9999,11632,11207, 9371, 7624
+      },
+      /*Cr  qi=20  OC_MODE_INTER_MV*/
+      {
+           68,  586, 1685, 3735, 6009, 8241, 9926,11125,
+        11917,12597,13342,15116,15179,14870,16640,17964
+      },
+      /*Cr  qi=20  OC_MDOE_INTER_MV_LAST*/
+      {
+          117,  552, 1531, 3891, 6147, 8293, 9881,11028,
+        10985,10454, 9773, 9362, 9009, 9020, 9930, 8243
+      },
+      /*Cr  qi=20  OC_MODE_INTER_MV_LAST2*/
+      {
+          141,  583, 1653, 3969, 6006, 8159, 9632,10788,
+        11220,11200,11487,10835,11115,10424, 9968,10827
+      },
+      /*Cr  qi=20  OC_MODE_INTER_MV_FOUR*/
+      {
+           98,  598, 1761, 3977, 6090, 8053, 9633,10977,
+        12178,13027,14302,15075,16159,16777,17447,18884
+      },
+      /*Cr  qi=20  OC_MODE_GOLDEN_NOMV*/
+      {
+          190,  650, 1484, 3039, 5110, 5818, 6203, 6557,
+         6340, 6814, 7346, 7722, 7812, 8330, 8373, 9043
+      },
+      /*Cr  qi=20  OC_MODE_GOLDEN_MV*/
+      {
+          117,  650, 1667, 3854, 5819, 7230, 8097, 8109,
+         8180, 8190, 8193, 8440, 8470, 8717, 8920, 8775
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=21  OC_MODE_INTRA*/
+      {
+          832, 1352, 3212, 5467, 7066, 8491, 9788,10935,
+        12073,13153,14137,14860,15733,16655,17295,22807
+      },
+      /*Y'  qi=21  OC_MODE_INTER_NOMV*/
+      {
+          138,  318, 1421, 3378, 6027, 8551,10554,12241,
+        13714,15092,16320,17491,18394,19221,19905,27152
+      },
+      /*Y'  qi=21  OC_MODE_INTER_MV*/
+      {
+          339,  565, 1848, 4073, 6244, 8172, 9869,11439,
+        12913,14275,15463,16560,17602,18526,19342,23039
+      },
+      /*Y'  qi=21  OC_MDOE_INTER_MV_LAST*/
+      {
+          255,  437, 1605, 3905, 6179, 8165,10025,11692,
+        13173,14477,15638,16712,17674,18558,19310,23276
+      },
+      /*Y'  qi=21  OC_MODE_INTER_MV_LAST2*/
+      {
+          293,  493, 1677, 3850, 6174, 8322,10141,11685,
+        13102,14390,15571,16707,17682,18506,19335,23498
+      },
+      /*Y'  qi=21  OC_MODE_INTER_MV_FOUR*/
+      {
+          359,  565, 1834, 4016, 6300, 8377,10225,11881,
+        13320,14699,15859,16922,17866,18722,19507,22496
+      },
+      /*Y'  qi=21  OC_MODE_GOLDEN_NOMV*/
+      {
+          380,  783, 2183, 4215, 6315, 8150, 9656,10770,
+        11952,12853,13487,14032,15813,16917,17169,23932
+      },
+      /*Y'  qi=21  OC_MODE_GOLDEN_MV*/
+      {
+          427,  671, 1984, 4034, 6273, 8356,10302,12113,
+        13652,15012,16190,17054,18026,18711,19410,23171
+      }
+    },
+    {
+      /*Cb  qi=21  OC_MODE_INTRA*/
+      {
+         1164, 3538, 5889, 8311,10184,11578,12804,14085,
+        15424,17023,18349,19934,20615,21422,22725,27372
+      },
+      /*Cb  qi=21  OC_MODE_INTER_NOMV*/
+      {
+          190,  845, 3117, 6245, 8009, 9871,12618,13100,
+        16486,15773,17227,17207,18807,18512,17662, 7697
+      },
+      /*Cb  qi=21  OC_MODE_INTER_MV*/
+      {
+          125, 1267, 3897, 6899,10069,13502,15804,17667,
+        19452,19588,21005,21682,22662,25876,25580,28092
+      },
+      /*Cb  qi=21  OC_MDOE_INTER_MV_LAST*/
+      {
+          180, 1144, 4048, 6606, 9616,13044,15236,16536,
+        17486,17507,17489,17646,16933,16085,16219,16378
+      },
+      /*Cb  qi=21  OC_MODE_INTER_MV_LAST2*/
+      {
+          227, 1250, 4204, 6474, 9213,12598,14882,16576,
+        18393,19014,20203,19765,22140,25783,28198,24604
+      },
+      /*Cb  qi=21  OC_MODE_INTER_MV_FOUR*/
+      {
+          158, 1259, 3988, 6566, 9297,12283,14603,16415,
+        18031,19362,20417,21004,22355,22932,26220,27668
+      },
+      /*Cb  qi=21  OC_MODE_GOLDEN_NOMV*/
+      {
+          355, 1280, 3186, 6071, 8709, 9582,10224,10327,
+        10969,12058,12722,13485,12920,13410,13461,15949
+      },
+      /*Cb  qi=21  OC_MODE_GOLDEN_MV*/
+      {
+          181, 1422, 4220, 6691, 9324,11687,12680,12862,
+        12970,13060,13112,13294,13426,13649,14103,16128
+      }
+    },
+    {
+      /*Cr  qi=21  OC_MODE_INTRA*/
+      {
+          737, 2583, 4460, 6094, 7495, 8849,10084,11321,
+        12560,13226,14145,15042,16251,17044,17744,21268
+      },
+      /*Cr  qi=21  OC_MODE_INTER_NOMV*/
+      {
+          116,  407, 1166, 2895, 5596, 6950, 7739, 8365,
+         8667, 8380, 9345, 8799,12540, 9575,10352, 7498
+      },
+      /*Cr  qi=21  OC_MODE_INTER_MV*/
+      {
+           78,  621, 1844, 4052, 6436, 8659,10403,11580,
+        12287,13136,13809,14659,15957,14770,16590,17305
+      },
+      /*Cr  qi=21  OC_MDOE_INTER_MV_LAST*/
+      {
+          120,  591, 1675, 4188, 6498, 8684,10282,11364,
+        11284,10917,10061, 9486, 9571, 9562,10272, 8597
+      },
+      /*Cr  qi=21  OC_MODE_INTER_MV_LAST2*/
+      {
+          157,  635, 1765, 4264, 6452, 8518,10176,11436,
+        11647,11231,11627,10450,11507, 8604,11349,11265
+      },
+      /*Cr  qi=21  OC_MODE_INTER_MV_FOUR*/
+      {
+          103,  645, 1924, 4271, 6432, 8401,10006,11278,
+        12568,13539,14772,15868,16788,16866,18425,19876
+      },
+      /*Cr  qi=21  OC_MODE_GOLDEN_NOMV*/
+      {
+          198,  698, 1637, 3273, 5324, 5959, 6395, 6702,
+         6527, 7012, 7510, 7811, 8124, 8601, 8741, 9262
+      },
+      /*Cr  qi=21  OC_MODE_GOLDEN_MV*/
+      {
+          125,  698, 1813, 4149, 6106, 7736, 8392, 8460,
+         8361, 8209, 8369, 8606, 8859, 8988, 8844, 9002
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=22  OC_MODE_INTRA*/
+      {
+          879, 1494, 3451, 5782, 7442, 8895,10208,11362,
+        12523,13621,14625,15361,16229,17182,17820,23388
+      },
+      /*Y'  qi=22  OC_MODE_INTER_NOMV*/
+      {
+          152,  402, 1659, 3785, 6576, 9111,11091,12846,
+        14284,15623,16834,17994,18970,19671,20461,27884
+      },
+      /*Y'  qi=22  OC_MODE_INTER_MV*/
+      {
+          359,  649, 2125, 4462, 6685, 8659,10355,11955,
+        13451,14785,15978,17117,18141,19065,19916,23682
+      },
+      /*Y'  qi=22  OC_MDOE_INTER_MV_LAST*/
+      {
+          270,  505, 1844, 4284, 6634, 8675,10543,12201,
+        13679,14996,16166,17255,18215,19124,19905,24001
+      },
+      /*Y'  qi=22  OC_MODE_INTER_MV_LAST2*/
+      {
+          301,  562, 1951, 4238, 6639, 8825,10643,12197,
+        13605,14959,16101,17250,18218,19190,19928,24240
+      },
+      /*Y'  qi=22  OC_MODE_INTER_MV_FOUR*/
+      {
+          378,  645, 2097, 4408, 6763, 8872,10723,12389,
+        13843,15216,16407,17461,18386,19270,20075,23104
+      },
+      /*Y'  qi=22  OC_MODE_GOLDEN_NOMV*/
+      {
+          391,  813, 2436, 4607, 6808, 8750,10176,11165,
+        12658,13421,14145,14785,15999,17211,17884,24609
+      },
+      /*Y'  qi=22  OC_MODE_GOLDEN_MV*/
+      {
+          449,  750, 2227, 4398, 6728, 8834,10808,12609,
+        14158,15501,16697,17639,18545,19265,19916,23855
+      }
+    },
+    {
+      /*Cb  qi=22  OC_MODE_INTRA*/
+      {
+         1192, 3642, 6050, 8517,10419,11804,13039,14330,
+        15702,17298,18668,20161,20985,21790,23130,27772
+      },
+      /*Cb  qi=22  OC_MODE_INTER_NOMV*/
+      {
+          198,  893, 3297, 6476, 8195,10297,12639,14214,
+        19547,19351,17234,18259,18475,20676,18444, 8103
+      },
+      /*Cb  qi=22  OC_MODE_INTER_MV*/
+      {
+          131, 1339, 4085, 7190,10474,13967,16297,18132,
+        19774,21165,21454,22011,22598,22784,25913,27175
+      },
+      /*Cb  qi=22  OC_MDOE_INTER_MV_LAST*/
+      {
+          195, 1196, 4244, 6861, 9923,13403,15606,16933,
+        17711,17907,17889,18071,16911,16679,16630,16722
+      },
+      /*Cb  qi=22  OC_MODE_INTER_MV_LAST2*/
+      {
+          240, 1278, 4379, 6741, 9575,12974,15457,16924,
+        18510,19687,20166,20711,21671,23384,22366,25799
+      },
+      /*Cb  qi=22  OC_MODE_INTER_MV_FOUR*/
+      {
+          171, 1305, 4153, 6818, 9582,12602,14939,16851,
+        18290,19514,21363,21404,23235,23273,27653,26386
+      },
+      /*Cb  qi=22  OC_MODE_GOLDEN_NOMV*/
+      {
+          353, 1344, 3388, 6224, 8683, 9618,10458,10357,
+        11402,12384,13127,13573,13146,13838,13685,16122
+      },
+      /*Cb  qi=22  OC_MODE_GOLDEN_MV*/
+      {
+          191, 1479, 4408, 6967, 9599,12187,12777,13247,
+        13127,13516,13808,13602,13882,14017,14375,16386
+      }
+    },
+    {
+      /*Cr  qi=22  OC_MODE_INTRA*/
+      {
+          781, 2648, 4544, 6197, 7617, 8998,10242,11508,
+        12771,13430,14370,15273,16517,17266,17933,21537
+      },
+      /*Cr  qi=22  OC_MODE_INTER_NOMV*/
+      {
+          128,  453, 1243, 3018, 5728, 6983, 8065, 8250,
+         8429, 8298, 8600, 9075,11365,11568,11285, 7813
+      },
+      /*Cr  qi=22  OC_MODE_INTER_MV*/
+      {
+           82,  670, 1906, 4177, 6601, 8861,10600,11635,
+        12620,13660,14745,14921,16260,16197,16452,17853
+      },
+      /*Cr  qi=22  OC_MDOE_INTER_MV_LAST*/
+      {
+          134,  635, 1726, 4340, 6710, 8894,10460,11577,
+        11468,10978,10121, 9709, 9342, 9614,10556, 8437
+      },
+      /*Cr  qi=22  OC_MODE_INTER_MV_LAST2*/
+      {
+          166,  676, 1864, 4380, 6562, 8572,10323,11366,
+        11760,11585,12162,11313,11545, 9542,11669,11550
+      },
+      /*Cr  qi=22  OC_MODE_INTER_MV_FOUR*/
+      {
+          113,  693, 2007, 4400, 6614, 8623,10244,11560,
+        12736,13873,15137,16377,17386,18283,18726,20161
+      },
+      /*Cr  qi=22  OC_MODE_GOLDEN_NOMV*/
+      {
+          205,  764, 1703, 3465, 5259, 6170, 6653, 6770,
+         6883, 7260, 7984, 8018, 8342, 8634, 8831, 9526
+      },
+      /*Cr  qi=22  OC_MODE_GOLDEN_MV*/
+      {
+          130,  739, 1885, 4288, 6224, 7811, 8611, 8314,
+         8624, 8439, 8476, 8857, 9171, 8775, 8959, 9175
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=23  OC_MODE_INTRA*/
+      {
+          916, 1648, 3771, 6208, 7945, 9436,10786,11943,
+        13144,14287,15301,16031,16941,17907,18606,24258
+      },
+      /*Y'  qi=23  OC_MODE_INTER_NOMV*/
+      {
+          156,  482, 1973, 4425, 7428, 9952,11912,13603,
+        15139,16469,17523,18863,19816,20530,21395,28515
+      },
+      /*Y'  qi=23  OC_MODE_INTER_MV*/
+      {
+          365,  777, 2523, 5037, 7370, 9387,11109,12715,
+        14250,15594,16799,17939,18988,19920,20793,24676
+      },
+      /*Y'  qi=23  OC_MDOE_INTER_MV_LAST*/
+      {
+          267,  575, 2215, 4868, 7331, 9445,11325,12981,
+        14458,15783,16962,18050,19050,19960,20783,24966
+      },
+      /*Y'  qi=23  OC_MODE_INTER_MV_LAST2*/
+      {
+          300,  646, 2307, 4813, 7362, 9598,11415,12948,
+        14373,15722,16877,18009,18920,19892,20659,25139
+      },
+      /*Y'  qi=23  OC_MODE_INTER_MV_FOUR*/
+      {
+          382,  728, 2461, 4970, 7427, 9604,11469,13120,
+        14577,15920,17163,18225,19175,20089,20917,24003
+      },
+      /*Y'  qi=23  OC_MODE_GOLDEN_NOMV*/
+      {
+          383,  871, 2719, 5163, 7490, 9481,10691,11940,
+        13266,14098,15082,16227,16927,17832,18481,25523
+      },
+      /*Y'  qi=23  OC_MODE_GOLDEN_MV*/
+      {
+          435,  842, 2530, 4941, 7415, 9582,11593,13414,
+        14988,16302,17449,18458,19425,20089,20819,24768
+      }
+    },
+    {
+      /*Cb  qi=23  OC_MODE_INTRA*/
+      {
+         1262, 3995, 6517, 9074,11067,12444,13690,15008,
+        16470,18016,19385,21086,21768,22822,23951,28726
+      },
+      /*Cb  qi=23  OC_MODE_INTER_NOMV*/
+      {
+          227, 1022, 3792, 7082, 8790,10912,13470,15105,
+        17338,17380,19046,17676,21909,20672,20108, 9649
+      },
+      /*Cb  qi=23  OC_MODE_INTER_MV*/
+      {
+          158, 1526, 4633, 7872,11187,14697,17084,19001,
+        20547,22010,22425,23034,24591,25610,26706,30113
+      },
+      /*Cb  qi=23  OC_MDOE_INTER_MV_LAST*/
+      {
+          222, 1350, 4763, 7548,10780,14328,16428,17701,
+        18490,18462,18727,18797,17682,17413,17587,17564
+      },
+      /*Cb  qi=23  OC_MODE_INTER_MV_LAST2*/
+      {
+          273, 1450, 4909, 7407,10384,13693,16444,18130,
+        19888,21095,21715,21966,25170,25525,26252,26123
+      },
+      /*Cb  qi=23  OC_MODE_INTER_MV_FOUR*/
+      {
+          207, 1465, 4649, 7461,10353,13448,15802,17914,
+        19215,20849,21876,22297,24443,24801,26495,28669
+      },
+      /*Cb  qi=23  OC_MODE_GOLDEN_NOMV*/
+      {
+          393, 1508, 3891, 6634, 9473,10147,11021,11105,
+        11994,13226,13810,14393,14232,14684,14309,17107
+      },
+      /*Cb  qi=23  OC_MODE_GOLDEN_MV*/
+      {
+          226, 1661, 4931, 7602,10373,12826,13392,14015,
+        14186,14099,14257,14465,14639,14933,15201,17335
+      }
+    },
+    {
+      /*Cr  qi=23  OC_MODE_INTRA*/
+      {
+          807, 2826, 4840, 6563, 8036, 9452,10785,12081,
+        13396,14085,14966,15870,17087,18011,18676,22323
+      },
+      /*Cr  qi=23  OC_MODE_INTER_NOMV*/
+      {
+          137,  510, 1451, 3583, 6310, 7660, 8871, 9369,
+         9292, 8871, 9858, 9930,12408,10753,12069, 9619
+      },
+      /*Cr  qi=23  OC_MODE_INTER_MV*/
+      {
+           87,  756, 2203, 4726, 7327, 9551,11211,12390,
+        12862,13551,14920,14994,18269,17077,16480,18466
+      },
+      /*Cr  qi=23  OC_MDOE_INTER_MV_LAST*/
+      {
+          141,  711, 1960, 4855, 7411, 9632,11160,12191,
+        11937,11445,10672, 9870,10044,10075,10088, 8973
+      },
+      /*Cr  qi=23  OC_MODE_INTER_MV_LAST2*/
+      {
+          180,  765, 2112, 4839, 7272, 9485,11108,12166,
+        12354,11972,12321,10789,11730,11851,12477,12672
+      },
+      /*Cr  qi=23  OC_MODE_INTER_MV_FOUR*/
+      {
+          130,  771, 2271, 4878, 7227, 9287,10940,12285,
+        13489,14558,15968,16519,17502,19044,19067,20788
+      },
+      /*Cr  qi=23  OC_MODE_GOLDEN_NOMV*/
+      {
+          211,  854, 1878, 3762, 5715, 6439, 6939, 7272,
+         7256, 7595, 8396, 8547, 8793, 8929, 9660, 9849
+      },
+      /*Cr  qi=23  OC_MODE_GOLDEN_MV*/
+      {
+          138,  829, 2146, 4797, 6788, 8388, 8961, 9034,
+         8928, 9049, 9055, 9338, 9400, 9302, 9253, 9584
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=24  OC_MODE_INTRA*/
+      {
+          925, 1659, 3781, 6234, 7979, 9478,10827,11984,
+        13196,14345,15358,16088,16990,17953,18682,24311
+      },
+      /*Y'  qi=24  OC_MODE_INTER_NOMV*/
+      {
+          154,  481, 1989, 4482, 7498,10016,11962,13685,
+        15232,16509,17649,18887,19723,20618,21484,28686
+      },
+      /*Y'  qi=24  OC_MODE_INTER_MV*/
+      {
+          369,  779, 2565, 5096, 7415, 9414,11160,12793,
+        14313,15654,16877,18000,19024,19968,20825,24748
+      },
+      /*Y'  qi=24  OC_MDOE_INTER_MV_LAST*/
+      {
+          266,  600, 2245, 4918, 7392, 9509,11388,13042,
+        14529,15853,17055,18129,19108,20053,20872,25036
+      },
+      /*Y'  qi=24  OC_MODE_INTER_MV_LAST2*/
+      {
+          300,  649, 2331, 4868, 7422, 9658,11453,12987,
+        14433,15754,16952,18069,19005,19776,20672,25197
+      },
+      /*Y'  qi=24  OC_MODE_INTER_MV_FOUR*/
+      {
+          383,  736, 2485, 5014, 7482, 9665,11520,13165,
+        14624,15965,17212,18267,19234,20137,20956,24079
+      },
+      /*Y'  qi=24  OC_MODE_GOLDEN_NOMV*/
+      {
+          388,  900, 2740, 5208, 7544, 9524,10697,12006,
+        13240,14289,15212,16465,17042,17835,18463,25589
+      },
+      /*Y'  qi=24  OC_MODE_GOLDEN_MV*/
+      {
+          441,  856, 2564, 4999, 7463, 9661,11681,13489,
+        15010,16407,17514,18524,19423,20160,20852,24829
+      }
+    },
+    {
+      /*Cb  qi=24  OC_MODE_INTRA*/
+      {
+         1326, 4124, 6699, 9285,11285,12642,13877,15209,
+        16703,18225,19650,21316,22089,23092,24251,29098
+      },
+      /*Cb  qi=24  OC_MODE_INTER_NOMV*/
+      {
+          238, 1085, 3985, 7297, 9037,11027,13527,14819,
+        18605,20637,21479,17006,19967,22144,20165, 9407
+      },
+      /*Cb  qi=24  OC_MODE_INTER_MV*/
+      {
+          175, 1599, 4875, 8104,11378,14879,17227,19181,
+        20975,22072,22521,23249,25771,24770,27741,31130
+      },
+      /*Cb  qi=24  OC_MDOE_INTER_MV_LAST*/
+      {
+          239, 1440, 4958, 7781,11033,14588,16710,17782,
+        18971,18729,19192,19136,18264,17614,17965,17907
+      },
+      /*Cb  qi=24  OC_MODE_INTER_MV_LAST2*/
+      {
+          297, 1545, 5102, 7624,10595,14003,16491,18495,
+        20200,21250,21195,22919,24174,24981,27546,26388
+      },
+      /*Cb  qi=24  OC_MODE_INTER_MV_FOUR*/
+      {
+          225, 1548, 4841, 7678,10602,13740,16169,18097,
+        19555,21049,22294,23345,24447,24158,28239,29073
+      },
+      /*Cb  qi=24  OC_MODE_GOLDEN_NOMV*/
+      {
+          412, 1574, 4056, 6817, 9862,10542,11442,11190,
+        12430,13298,13998,14689,14259,14915,14706,17386
+      },
+      /*Cb  qi=24  OC_MODE_GOLDEN_MV*/
+      {
+          249, 1765, 5120, 7805,10509,12978,13750,14139,
+        14218,14561,14343,14854,14945,15137,15465,17690
+      }
+    },
+    {
+      /*Cr  qi=24  OC_MODE_INTRA*/
+      {
+          854, 2906, 4937, 6669, 8151, 9573,10896,12205,
+        13504,14218,15067,16026,17218,18125,18839,22443
+      },
+      /*Cr  qi=24  OC_MODE_INTER_NOMV*/
+      {
+          140,  529, 1505, 3686, 6360, 7687, 8769, 8678,
+         8934, 8156, 9306,10385,10890,10996,12755, 8948
+      },
+      /*Cr  qi=24  OC_MODE_INTER_MV*/
+      {
+           97,  787, 2299, 4871, 7455, 9713,11277,12289,
+        13022,14286,14557,15484,17137,18756,17715,20175
+      },
+      /*Cr  qi=24  OC_MDOE_INTER_MV_LAST*/
+      {
+          153,  740, 2039, 4942, 7534, 9762,11345,12192,
+        12106,11510,10813, 9636,10196,10190,10228, 9195
+      },
+      /*Cr  qi=24  OC_MODE_INTER_MV_LAST2*/
+      {
+          194,  804, 2184, 4946, 7377, 9579,11451,12293,
+        12252,12295,12048,12679,12847,12288,13791,12703
+      },
+      /*Cr  qi=24  OC_MODE_INTER_MV_FOUR*/
+      {
+          142,  806, 2360, 4983, 7365, 9400,11112,12422,
+        13547,14752,16200,16996,18016,18588,18964,22103
+      },
+      /*Cr  qi=24  OC_MODE_GOLDEN_NOMV*/
+      {
+          224,  895, 1957, 3830, 5807, 6593, 7090, 7207,
+         7424, 7696, 8421, 8509, 8817, 9023, 9359, 9893
+      },
+      /*Cr  qi=24  OC_MODE_GOLDEN_MV*/
+      {
+          154,  878, 2240, 4903, 6815, 8412, 9279, 8888,
+         9040, 8955, 9227, 9033, 9233, 9253, 9232, 9567
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=25  OC_MODE_INTRA*/
+      {
+          963, 1877, 4170, 6710, 8531,10066,11444,12602,
+        13856,15046,16073,16795,17731,18715,19470,25206
+      },
+      /*Y'  qi=25  OC_MODE_INTER_NOMV*/
+      {
+          158,  581, 2377, 5216, 8377,10847,12780,14487,
+        15977,17336,18528,19672,20734,21509,22403,29163
+      },
+      /*Y'  qi=25  OC_MODE_INTER_MV*/
+      {
+          354,  906, 2832, 5486, 8125,10286,12074,13632,
+        15098,16460,17750,18893,19838,20827,21788,25948
+      },
+      /*Y'  qi=25  OC_MDOE_INTER_MV_LAST*/
+      {
+          261,  707, 2692, 5569, 8145,10279,12146,13825,
+        15310,16649,17906,19010,20016,20982,21859,26007
+      },
+      /*Y'  qi=25  OC_MODE_INTER_MV_LAST2*/
+      {
+          292,  775, 2783, 5542, 8169,10357,12179,13772,
+        15241,16616,17857,18942,19987,20865,21769,26111
+      },
+      /*Y'  qi=25  OC_MODE_INTER_MV_FOUR*/
+      {
+          383,  842, 2926, 5670, 8207,10383,12241,13859,
+        15346,16690,17928,19018,20024,20952,21851,25087
+      },
+      /*Y'  qi=25  OC_MODE_GOLDEN_NOMV*/
+      {
+          394, 1061, 3165, 5849, 8243,10121,11349,12649,
+        13877,14927,15973,17191,17802,18348,19377,26510
+      },
+      /*Y'  qi=25  OC_MODE_GOLDEN_MV*/
+      {
+          448,  976, 2952, 5609, 8205,10448,12492,14276,
+        15808,17181,18331,19326,20282,21036,21793,25809
+      }
+    },
+    {
+      /*Cb  qi=25  OC_MODE_INTRA*/
+      {
+         1404, 4461, 7141, 9818,11908,13289,14525,15921,
+        17497,19096,20487,22219,23012,24140,25167,30177
+      },
+      /*Cb  qi=25  OC_MODE_INTER_NOMV*/
+      {
+          253, 1210, 4481, 7896, 9722,11954,14933,15636,
+        22272,19058,20018,19333,21440,24549,19414,11606
+      },
+      /*Cb  qi=25  OC_MODE_INTER_MV*/
+      {
+          308, 2183, 5637, 8349,11556,14800,17119,18967,
+        21053,21802,22667,23629,26332,24444,27675,30190
+      },
+      /*Cb  qi=25  OC_MDOE_INTER_MV_LAST*/
+      {
+          252, 1624, 5548, 8487,11823,15401,17400,18457,
+        19541,19530,19639,19357,18990,18223,18480,18672
+      },
+      /*Cb  qi=25  OC_MODE_INTER_MV_LAST2*/
+      {
+          294, 1689, 5596, 8409,11721,15153,17718,19706,
+        20954,22461,25656,24975,25295,28032,26898,29577
+      },
+      /*Cb  qi=25  OC_MODE_INTER_MV_FOUR*/
+      {
+          243, 1686, 5306, 8410,11481,14762,17160,19127,
+        20504,22072,23403,23936,25231,26217,30722,31060
+      },
+      /*Cb  qi=25  OC_MODE_GOLDEN_NOMV*/
+      {
+          459, 1728, 4508, 7295,10509,11326,12027,11945,
+        13262,13950,14535,15670,15156,15757,15342,18241
+      },
+      /*Cb  qi=25  OC_MODE_GOLDEN_MV*/
+      {
+          267, 1957, 5658, 8501,11297,13659,14578,14653,
+        14902,15207,14974,16046,15557,16177,16364,18469
+      }
+    },
+    {
+      /*Cr  qi=25  OC_MODE_INTRA*/
+      {
+          911, 3115, 5286, 7089, 8634,10086,11490,12849,
+        14184,14936,15764,16826,18108,18958,19641,23323
+      },
+      /*Cr  qi=25  OC_MODE_INTER_NOMV*/
+      {
+          144,  593, 1805, 4359, 7002, 8352, 9370,10684,
+        10398, 8849, 9175,11421,11651,12592,12223, 9732
+      },
+      /*Cr  qi=25  OC_MODE_INTER_MV*/
+      {
+          185,  941, 2737, 5594, 8094,10219,11868,12926,
+        13854,14567,15303,16914,18354,19943,19749,22938
+      },
+      /*Cr  qi=25  OC_MDOE_INTER_MV_LAST*/
+      {
+          161,  852, 2398, 5561, 8349,10562,12105,12841,
+        12707,11883,11274,10426,10302,10611,11157, 9541
+      },
+      /*Cr  qi=25  OC_MODE_INTER_MV_LAST2*/
+      {
+          186,  886, 2521, 5575, 8200,10427,11912,12857,
+        13256,12301,12533,13018,12412,13235,13423,13367
+      },
+      /*Cr  qi=25  OC_MODE_INTER_MV_FOUR*/
+      {
+          152,  917, 2741, 5556, 8071,10155,11775,13176,
+        14585,15677,17045,17651,18442,20112,20461,21667
+      },
+      /*Cr  qi=25  OC_MODE_GOLDEN_NOMV*/
+      {
+          251,  979, 2175, 4587, 6224, 6993, 7590, 7465,
+         7957, 8166, 8830, 8961, 9365, 9431, 9871,10171
+      },
+      /*Cr  qi=25  OC_MODE_GOLDEN_MV*/
+      {
+          175, 1006, 2593, 5447, 7460, 9017, 9737, 9342,
+         9620, 9282, 9642, 9586, 9850, 9845, 9759,10073
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=26  OC_MODE_INTRA*/
+      {
+          969, 1886, 4210, 6763, 8608,10162,11549,12721,
+        13989,15197,16233,16967,17906,18902,19676,25632
+      },
+      /*Y'  qi=26  OC_MODE_INTER_NOMV*/
+      {
+          168,  646, 2460, 5394, 8602,11051,12999,14790,
+        16265,17533,18729,19753,20568,21243,22033,27751
+      },
+      /*Y'  qi=26  OC_MODE_INTER_MV*/
+      {
+          385,  948, 2934, 5689, 8287,10454,12210,13787,
+        15286,16643,17898,19047,20071,21051,21986,26224
+      },
+      /*Y'  qi=26  OC_MDOE_INTER_MV_LAST*/
+      {
+          226,  697, 2721, 5704, 8330,10480,12356,14027,
+        15529,16891,18118,19190,20203,21144,22029,25814
+      },
+      /*Y'  qi=26  OC_MODE_INTER_MV_LAST2*/
+      {
+          272,  796, 2829, 5626, 8333,10619,12487,14021,
+        15432,16772,18058,19204,20244,21305,22120,26780
+      },
+      /*Y'  qi=26  OC_MODE_INTER_MV_FOUR*/
+      {
+          394,  879, 2999, 5802, 8394,10603,12506,14146,
+        15619,17004,18238,19330,20346,21284,22170,25523
+      },
+      /*Y'  qi=26  OC_MODE_GOLDEN_NOMV*/
+      {
+          403, 1071, 3131, 5987, 8393,10293,11504,12911,
+        14126,15106,15976,17316,17912,18499,19403,27092
+      },
+      /*Y'  qi=26  OC_MODE_GOLDEN_MV*/
+      {
+          449, 1005, 3017, 5721, 8372,10660,12714,14497,
+        16058,17422,18586,19545,20482,21323,22053,26411
+      }
+    },
+    {
+      /*Cb  qi=26  OC_MODE_INTRA*/
+      {
+         1485, 4776, 7553,10293,12424,13818,15031,16479,
+        18080,19719,21109,22942,23798,24886,25968,30987
+      },
+      /*Cb  qi=26  OC_MODE_INTER_NOMV*/
+      {
+          295, 1367, 4939, 8508,10598,13501,15519,15755,
+        16825,17198,17562,17930,18107,18120,18221,18816
+      },
+      /*Cb  qi=26  OC_MODE_INTER_MV*/
+      {
+          282, 2128, 5945, 9132,12780,16230,18561,20345,
+        21906,23145,24325,25481,26333,28054,29258,31492
+      },
+      /*Cb  qi=26  OC_MDOE_INTER_MV_LAST*/
+      {
+          290, 1759, 6016, 8969,12225,15835,18144,19800,
+        21353,22582,23857,24489,23848,28160,24989,26860
+      },
+      /*Cb  qi=26  OC_MODE_INTER_MV_LAST2*/
+      {
+          371, 1874, 6050, 8804,12255,15613,17976,19944,
+        21569,23069,23534,23337,26953,27461,27673,31600
+      },
+      /*Cb  qi=26  OC_MODE_INTER_MV_FOUR*/
+      {
+          290, 1865, 5753, 8901,12015,15156,17585,19632,
+        21189,22967,23970,24890,26253,28234,28848,31823
+      },
+      /*Cb  qi=26  OC_MODE_GOLDEN_NOMV*/
+      {
+          519, 1892, 4943, 7711,10604,11778,12020,12339,
+        13679,14720,14883,16549,15926,16604,16341,19894
+      },
+      /*Cb  qi=26  OC_MODE_GOLDEN_MV*/
+      {
+          311, 2162, 6131, 9040,11797,14170,15245,15303,
+        15392,15879,16206,16490,16477,17025,17448,20547
+      }
+    },
+    {
+      /*Cr  qi=26  OC_MODE_INTRA*/
+      {
+          937, 3290, 5580, 7453, 9066,10557,11999,13380,
+        14774,15523,16355,17535,18710,19556,20328,24080
+      },
+      /*Cr  qi=26  OC_MODE_INTER_NOMV*/
+      {
+          153,  656, 2115, 5167, 7962, 9355,10456,10810,
+        10818,10354,10738,10540,10776,11372,11489, 9252
+      },
+      /*Cr  qi=26  OC_MODE_INTER_MV*/
+      {
+          155, 1007, 3017, 6181, 8911,11210,12944,14503,
+        15055,15060,17437,17701,18167,19569,20056,21443
+      },
+      /*Cr  qi=26  OC_MDOE_INTER_MV_LAST*/
+      {
+          172,  930, 2717, 6070, 9038,11365,13249,14778,
+        15521,15619,17974,17221,19531,18452,17394,16846
+      },
+      /*Cr  qi=26  OC_MODE_INTER_MV_LAST2*/
+      {
+          220,  974, 2850, 6201, 8866,10983,12805,14361,
+        14833,14566,15278,16277,14890,12779,14562,15468
+      },
+      /*Cr  qi=26  OC_MODE_INTER_MV_FOUR*/
+      {
+          174, 1004, 3053, 6108, 8677,10757,12470,13917,
+        15284,16482,17742,18557,19280,20322,21645,23491
+      },
+      /*Cr  qi=26  OC_MODE_GOLDEN_NOMV*/
+      {
+          267, 1048, 2388, 5109, 6283, 6973, 7712, 7843,
+         8320, 8688, 9410, 9565, 9976,10254,10624,10795
+      },
+      /*Cr  qi=26  OC_MODE_GOLDEN_MV*/
+      {
+          199, 1103, 2913, 5992, 8039, 9507,10358,10100,
+        10241,10130,10242,10273,10704,10745,10889,10981
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=27  OC_MODE_INTRA*/
+      {
+         1020, 2098, 4577, 7168, 9052,10626,12030,13207,
+        14504,15736,16772,17504,18449,19448,20250,26046
+      },
+      /*Y'  qi=27  OC_MODE_INTER_NOMV*/
+      {
+          174,  754, 2797, 5947, 9197,11608,13542,15316,
+        16737,17992,19356,20503,21450,22288,23312,29974
+      },
+      /*Y'  qi=27  OC_MODE_INTER_MV*/
+      {
+          372, 1070, 3323, 6161, 8854,10963,12774,14332,
+        15835,17282,18535,19658,20738,21775,22526,26787
+      },
+      /*Y'  qi=27  OC_MDOE_INTER_MV_LAST*/
+      {
+          238,  814, 3115, 6203, 8863,11032,12907,14587,
+        16076,17427,18696,19792,20844,21847,22768,26945
+      },
+      /*Y'  qi=27  OC_MODE_INTER_MV_LAST2*/
+      {
+          277,  918, 3154, 6129, 8925,11209,13043,14624,
+        16047,17357,18576,19668,20710,21677,22449,27088
+      },
+      /*Y'  qi=27  OC_MODE_INTER_MV_FOUR*/
+      {
+          403, 1013, 3288, 6231, 8868,11065,12927,14566,
+        16061,17455,18712,19820,20837,21810,22707,25986
+      },
+      /*Y'  qi=27  OC_MODE_GOLDEN_NOMV*/
+      {
+          398, 1193, 3482, 6519, 8972,10805,11952,13519,
+        14632,15520,16569,17931,18645,19115,19967,27435
+      },
+      /*Y'  qi=27  OC_MODE_GOLDEN_MV*/
+      {
+          452, 1142, 3393, 6249, 8919,11218,13237,15041,
+        16562,17903,19095,20082,20999,21815,22604,26700
+      }
+    },
+    {
+      /*Cb  qi=27  OC_MODE_INTRA*/
+      {
+         1531, 4845, 7638,10380,12498,13859,15098,16497,
+        18117,19763,21206,23004,23844,24935,25995,31061
+      },
+      /*Cb  qi=27  OC_MODE_INTER_NOMV*/
+      {
+          333, 1420, 4973, 8466,10346,13347,15560,16385,
+        20482,18920,21658,20564,25754,24832,23293,13981
+      },
+      /*Cb  qi=27  OC_MODE_INTER_MV*/
+      {
+          457, 2665, 6262, 9122,12326,15427,17955,18876,
+        20483,22388,23419,24784,25889,29127,28575,32410
+      },
+      /*Cb  qi=27  OC_MDOE_INTER_MV_LAST*/
+      {
+          322, 1814, 6094, 9099,12546,16072,18008,19005,
+        19933,19937,20396,19881,19445,18912,18652,19393
+      },
+      /*Cb  qi=27  OC_MODE_INTER_MV_LAST2*/
+      {
+          399, 1968, 6186, 8929,12112,15470,18015,20032,
+        21422,22571,24770,23473,24685,27733,27232,34169
+      },
+      /*Cb  qi=27  OC_MODE_INTER_MV_FOUR*/
+      {
+          311, 1919, 5848, 8987,12153,15375,17792,19737,
+        21334,22588,23883,24384,26867,26786,28608,32011
+      },
+      /*Cb  qi=27  OC_MODE_GOLDEN_NOMV*/
+      {
+          540, 1932, 4949, 7754,10972,12093,12133,12526,
+        13899,14916,15294,16280,15920,16353,16070,18965
+      },
+      /*Cb  qi=27  OC_MODE_GOLDEN_MV*/
+      {
+          332, 2220, 6185, 9125,11957,14223,14942,15282,
+        15707,15488,15790,16400,16491,16934,17050,19286
+      }
+    },
+    {
+      /*Cr  qi=27  OC_MODE_INTRA*/
+      {
+          958, 3379, 5687, 7571, 9181,10651,12110,13503,
+        14861,15617,16391,17605,18835,19575,20431,24317
+      },
+      /*Cr  qi=27  OC_MODE_INTER_NOMV*/
+      {
+          157,  678, 2169, 5181, 7777, 9190,10304,10721,
+        10689,10281,10385,12240,13456,10660,12808,13854
+      },
+      /*Cr  qi=27  OC_MODE_INTER_MV*/
+      {
+          240, 1175, 3271, 6293, 8795,10955,12607,13526,
+        14100,14892,17274,17813,19522,21703,21436,21320
+      },
+      /*Cr  qi=27  OC_MDOE_INTER_MV_LAST*/
+      {
+          180,  963, 2831, 6263, 9146,11331,12844,13587,
+        13273,12281,12097,11023,10551,10445,12008, 9881
+      },
+      /*Cr  qi=27  OC_MODE_INTER_MV_LAST2*/
+      {
+          226, 1039, 2909, 6251, 8803,11138,12670,13876,
+        13693,13459,14366,13240,13581,13784,14346,16056
+      },
+      /*Cr  qi=27  OC_MODE_INTER_MV_FOUR*/
+      {
+          179, 1034, 3125, 6187, 8780,10900,12571,13843,
+        15093,16435,17770,18728,19501,20419,20649,23958
+      },
+      /*Cr  qi=27  OC_MODE_GOLDEN_NOMV*/
+      {
+          265, 1093, 2517, 5167, 6637, 7338, 8004, 8001,
+         8402, 8463, 9176, 9434, 9728, 9775,10366,10585
+      },
+      /*Cr  qi=27  OC_MODE_GOLDEN_MV*/
+      {
+          203, 1158, 2985, 6088, 8128, 9618,10292,10021,
+         9965,10006,10056,10140,10660,10552,10112,10397
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=28  OC_MODE_INTRA*/
+      {
+         1042, 2249, 4805, 7405, 9335,10930,12355,13553,
+        14884,16129,17186,17926,18885,19884,20739,26640
+      },
+      /*Y'  qi=28  OC_MODE_INTER_NOMV*/
+      {
+          192,  846, 3061, 6419, 9713,12033,14045,15854,
+        17123,18494,19755,20895,21847,22842,23664,30681
+      },
+      /*Y'  qi=28  OC_MODE_INTER_MV*/
+      {
+          388, 1160, 3488, 6472, 9261,11452,13250,14845,
+        16323,17699,19009,20122,21217,22213,23140,27498
+      },
+      /*Y'  qi=28  OC_MDOE_INTER_MV_LAST*/
+      {
+          217,  896, 3363, 6612, 9318,11442,13305,14998,
+        16485,17886,19146,20288,21335,22355,23296,27635
+      },
+      /*Y'  qi=28  OC_MODE_INTER_MV_LAST2*/
+      {
+          297, 1013, 3398, 6520, 9440,11717,13520,15084,
+        16471,17812,19061,20201,21240,22269,23078,27667
+      },
+      /*Y'  qi=28  OC_MODE_INTER_MV_FOUR*/
+      {
+          406, 1103, 3544, 6624, 9317,11563,13436,15096,
+        16595,17990,19240,20355,21401,22397,23325,26638
+      },
+      /*Y'  qi=28  OC_MODE_GOLDEN_NOMV*/
+      {
+          203,  986, 3529, 6793, 9381,11151,12377,14017,
+        15022,15919,17154,18454,19059,19608,20615,28195
+      },
+      /*Y'  qi=28  OC_MODE_GOLDEN_MV*/
+      {
+          436, 1220, 3596, 6603, 9371,11695,13671,15485,
+        17013,18375,19641,20698,21749,22524,23555,27726
+      }
+    },
+    {
+      /*Cb  qi=28  OC_MODE_INTRA*/
+      {
+         1651, 5231, 8127,10919,13108,14460,15726,17122,
+        18843,20512,22012,23782,24723,25814,26804,31978
+      },
+      /*Cb  qi=28  OC_MODE_INTER_NOMV*/
+      {
+          417, 1632, 5536, 9246,11008,14183,17042,18551,
+        21603,19461,21416,24172,27648,26262,23048,16867
+      },
+      /*Cb  qi=28  OC_MODE_INTER_MV*/
+      {
+          431, 2803, 6751, 9600,12899,16300,18618,20152,
+        23610,23184,24281,25502,26150,27452,31287,31986
+      },
+      /*Cb  qi=28  OC_MDOE_INTER_MV_LAST*/
+      {
+          362, 1994, 6620, 9713,13199,16648,18609,19706,
+        20673,21006,21167,20902,19965,20178,20011,20435
+      },
+      /*Cb  qi=28  OC_MODE_INTER_MV_LAST2*/
+      {
+          448, 2229, 6750, 9542,12812,16344,18623,20713,
+        21818,22677,22964,27255,27352,27520,29541,32815
+      },
+      /*Cb  qi=28  OC_MODE_INTER_MV_FOUR*/
+      {
+          363, 2121, 6326, 9583,12789,15985,18501,20354,
+        22037,23511,24685,25800,26672,27421,31166,32497
+      },
+      /*Cb  qi=28  OC_MODE_GOLDEN_NOMV*/
+      {
+          471, 2029, 5308, 7884,11137,12228,12984,13465,
+        14671,15644,16133,17691,17299,17773,17539,19972
+      },
+      /*Cb  qi=28  OC_MODE_GOLDEN_MV*/
+      {
+          377, 2428, 6753, 9681,12548,15546,17468,17725,
+        18450,17646,19289,17644,17634,17975,18580,19051
+      }
+    },
+    {
+      /*Cr  qi=28  OC_MODE_INTRA*/
+      {
+         1002, 3557, 6014, 7984, 9658,11150,12650,14092,
+        15527,16291,17075,18343,19575,20297,21240,25136
+      },
+      /*Cr  qi=28  OC_MODE_INTER_NOMV*/
+      {
+          186,  768, 2528, 5851, 8515,10021,11106,12151,
+        12600,10581, 9604,10801,11600,12494,12542,12766
+      },
+      /*Cr  qi=28  OC_MODE_INTER_MV*/
+      {
+          237, 1192, 3516, 6913, 9556,11669,13357,14421,
+        14805,15981,16973,17495,20224,22253,21081,22640
+      },
+      /*Cr  qi=28  OC_MDOE_INTER_MV_LAST*/
+      {
+          190, 1046, 3221, 6893, 9852,12007,13537,14135,
+        13734,13016,12537,11439,11078,11840,12385,10495
+      },
+      /*Cr  qi=28  OC_MODE_INTER_MV_LAST2*/
+      {
+          250, 1169, 3197, 6856, 9463,11751,13449,14288,
+        14132,14789,14380,13871,14268,14874,17894,18031
+      },
+      /*Cr  qi=28  OC_MODE_INTER_MV_FOUR*/
+      {
+          202, 1141, 3522, 6770, 9434,11568,13166,14701,
+        15934,17390,18713,18951,20733,21810,21587,24700
+      },
+      /*Cr  qi=28  OC_MODE_GOLDEN_NOMV*/
+      {
+          219, 1128, 2763, 5656, 6883, 7583, 8403, 8453,
+         8509, 9003, 9713, 9922,10571,10736,10899,11418
+      },
+      /*Cr  qi=28  OC_MODE_GOLDEN_MV*/
+      {
+          228, 1276, 3351, 6889, 9183,11072,12095,12312,
+        11545,10391,10239,10620,11128,11131,10927,11872
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=29  OC_MODE_INTRA*/
+      {
+         1114, 2616, 5385, 7984, 9968,11594,13073,14294,
+        15643,16905,17955,18689,19657,20658,21513,27544
+      },
+      /*Y'  qi=29  OC_MODE_INTER_NOMV*/
+      {
+          215, 1069, 3638, 7274,10566,12827,14936,16663,
+        17934,19256,20504,21636,22741,23416,24266,31396
+      },
+      /*Y'  qi=29  OC_MODE_INTER_MV*/
+      {
+          437, 1396, 4049, 7209,10044,12216,14010,15600,
+        17087,18508,19827,20996,22082,23183,24110,28506
+      },
+      /*Y'  qi=29  OC_MDOE_INTER_MV_LAST*/
+      {
+          284, 1157, 3954, 7377,10111,12238,14090,15783,
+        17292,18716,19981,21174,22308,23297,24242,28633
+      },
+      /*Y'  qi=29  OC_MODE_INTER_MV_LAST2*/
+      {
+          306, 1243, 3941, 7369,10348,12520,14284,15813,
+        17218,18577,19872,20995,22083,23048,24008,28520
+      },
+      /*Y'  qi=29  OC_MODE_INTER_MV_FOUR*/
+      {
+          402, 1333, 4078, 7336,10091,12331,14202,15877,
+        17387,18807,20061,21228,22309,23311,24280,27603
+      },
+      /*Y'  qi=29  OC_MODE_GOLDEN_NOMV*/
+      {
+          211, 1003, 3967, 7553,10088,11840,13136,14676,
+        15583,16671,18242,19337,19900,20553,21345,29165
+      },
+      /*Y'  qi=29  OC_MODE_GOLDEN_MV*/
+      {
+          430, 1444, 4112, 7294,10170,12490,14493,16265,
+        17801,19196,20461,21617,22654,23388,24698,28665
+      }
+    },
+    {
+      /*Cb  qi=29  OC_MODE_INTRA*/
+      {
+         1794, 5650, 8640,11437,13654,15046,16334,17734,
+        19548,21238,22753,24553,25536,26646,27595,32691
+      },
+      /*Cb  qi=29  OC_MODE_INTER_NOMV*/
+      {
+          505, 1858, 6151, 9951,11910,15248,19305,18491,
+        24640,22562,23381,23224,24763,28297,32424,20931
+      },
+      /*Cb  qi=29  OC_MODE_INTER_MV*/
+      {
+          545, 3113, 7315,10202,13589,16916,19401,21229,
+        22755,24450,24629,28367,27982,27559,32036,32032
+      },
+      /*Cb  qi=29  OC_MDOE_INTER_MV_LAST*/
+      {
+          427, 2318, 7205,10369,13976,17415,19386,20450,
+        21413,21867,22013,21928,21301,20584,21113,21281
+      },
+      /*Cb  qi=29  OC_MODE_INTER_MV_LAST2*/
+      {
+          527, 2548, 7355,10162,13537,16847,19922,21576,
+        23044,24158,25447,26211,27020,28227,30794,30722
+      },
+      /*Cb  qi=29  OC_MODE_INTER_MV_FOUR*/
+      {
+          438, 2373, 6852,10192,13454,16682,19141,21214,
+        22757,24379,25482,26481,27630,28485,31612,32604
+      },
+      /*Cb  qi=29  OC_MODE_GOLDEN_NOMV*/
+      {
+          554, 2197, 5762, 7968,11559,12994,13747,13883,
+        15396,16474,17354,18656,17894,18520,18518,21054
+      },
+      /*Cb  qi=29  OC_MODE_GOLDEN_MV*/
+      {
+          470, 2688, 7325,10336,13225,16148,18086,19287,
+        19057,19858,21301,19523,19518,20009,20248,21213
+      }
+    },
+    {
+      /*Cr  qi=29  OC_MODE_INTRA*/
+      {
+         1060, 3774, 6296, 8297,10008,11536,13080,14574,
+        16016,16878,17629,18970,20088,20777,21745,25700
+      },
+      /*Cr  qi=29  OC_MODE_INTER_NOMV*/
+      {
+          214,  842, 2779, 6378, 8921,10553,11727,16171,
+        12743,10157, 8325,10563,10328,13563,13407, 8771
+      },
+      /*Cr  qi=29  OC_MODE_INTER_MV*/
+      {
+          290, 1286, 3754, 7316,10022,12196,13845,14601,
+        15515,16184,17469,18897,20356,21606,20251,23554
+      },
+      /*Cr  qi=29  OC_MDOE_INTER_MV_LAST*/
+      {
+          217, 1149, 3550, 7328,10311,12416,13956,14650,
+        14434,13210,12966,12585,11438,12211,12543,11006
+      },
+      /*Cr  qi=29  OC_MODE_INTER_MV_LAST2*/
+      {
+          283, 1288, 3457, 7157, 9873,12399,13891,14973,
+        15029,15012,14168,15137,14448,15683,14652,17462
+      },
+      /*Cr  qi=29  OC_MODE_INTER_MV_FOUR*/
+      {
+          229, 1246, 3816, 7168, 9849,11986,13655,15128,
+        16546,17595,19446,19931,20844,21307,22983,24773
+      },
+      /*Cr  qi=29  OC_MODE_GOLDEN_NOMV*/
+      {
+          229, 1234, 2957, 5960, 7197, 7875, 9019, 8840,
+         9056, 9244,10003,10644,10461,10919,11686,11941
+      },
+      /*Cr  qi=29  OC_MODE_GOLDEN_MV*/
+      {
+          259, 1374, 3622, 7259, 9640,11681,12737,13179,
+        13476,11427,11785,11877,12185,13778,12968,12052
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=30  OC_MODE_INTRA*/
+      {
+         1132, 2723, 5519, 8106,10104,11743,13211,14470,
+        15832,17098,18153,18890,19861,20873,21744,27706
+      },
+      /*Y'  qi=30  OC_MODE_INTER_NOMV*/
+      {
+          222, 1122, 3790, 7527,10836,13065,15217,16909,
+        18161,19530,20796,21963,23000,23926,25061,31555
+      },
+      /*Y'  qi=30  OC_MODE_INTER_MV*/
+      {
+          496, 1454, 4238, 7453,10420,12537,14228,15782,
+        17295,18745,20124,21354,22385,23478,24399,28806
+      },
+      /*Y'  qi=30  OC_MDOE_INTER_MV_LAST*/
+      {
+          284, 1208, 4100, 7595,10356,12479,14346,16043,
+        17547,18966,20256,21438,22581,23617,24632,28815
+      },
+      /*Y'  qi=30  OC_MODE_INTER_MV_LAST2*/
+      {
+          300, 1298, 4092, 7602,10577,12746,14493,16035,
+        17456,18828,20092,21252,22273,23338,24105,28707
+      },
+      /*Y'  qi=30  OC_MODE_INTER_MV_FOUR*/
+      {
+          401, 1378, 4190, 7526,10309,12548,14431,16103,
+        17619,19038,20319,21486,22578,23609,24533,27829
+      },
+      /*Y'  qi=30  OC_MODE_GOLDEN_NOMV*/
+      {
+          211, 1048, 4127, 7773,10317,12096,13330,14860,
+        15808,16898,18656,19453,20176,20792,21615,29208
+      },
+      /*Y'  qi=30  OC_MODE_GOLDEN_MV*/
+      {
+          435, 1486, 4267, 7550,10427,12771,14773,16554,
+        18070,19485,20670,21754,22819,23508,24459,28527
+      }
+    },
+    {
+      /*Cb  qi=30  OC_MODE_INTRA*/
+      {
+         1875, 5900, 8960,11778,14007,15393,16701,18106,
+        19979,21699,23236,25061,26079,27177,28285,33412
+      },
+      /*Cb  qi=30  OC_MODE_INTER_NOMV*/
+      {
+          557, 1986, 6483,10306,12135,16136,32988,21821,
+        23333,22089,23451,24653,28243,32688,28240,23215
+      },
+      /*Cb  qi=30  OC_MODE_INTER_MV*/
+      {
+          645, 3366, 7725,10619,13966,17514,19951,21444,
+        23806,24633,25194,29184,28718,29210,30854,32944
+      },
+      /*Cb  qi=30  OC_MDOE_INTER_MV_LAST*/
+      {
+          475, 2473, 7607,10819,14437,17852,19815,20921,
+        21850,22072,22565,21979,20784,20904,21176,21410
+      },
+      /*Cb  qi=30  OC_MODE_INTER_MV_LAST2*/
+      {
+          580, 2795, 7752,10634,14032,17572,20408,22168,
+        23712,24526,26111,26087,28970,28566,30662,31528
+      },
+      /*Cb  qi=30  OC_MODE_INTER_MV_FOUR*/
+      {
+          484, 2514, 7215,10615,13922,17169,19651,21835,
+        23170,25084,26498,26860,28712,28207,31329,33709
+      },
+      /*Cb  qi=30  OC_MODE_GOLDEN_NOMV*/
+      {
+          608, 2316, 6004, 8323,11589,13344,14031,14545,
+        15436,16840,17752,18961,17891,18535,18606,21236
+      },
+      /*Cb  qi=30  OC_MODE_GOLDEN_MV*/
+      {
+          512, 2862, 7721,10818,13688,16105,16682,17215,
+        17233,17756,17844,18549,18122,18909,19031,21435
+      }
+    },
+    {
+      /*Cr  qi=30  OC_MODE_INTRA*/
+      {
+         1095, 3927, 6553, 8584,10317,11852,13401,14938,
+        16400,17287,18037,19461,20571,21382,22353,26214
+      },
+      /*Cr  qi=30  OC_MODE_INTER_NOMV*/
+      {
+          226,  920, 3064, 6757, 9301,10698,11669,19968,
+        14040,10730, 8926, 9147,10583,11143,11759, 8836
+      },
+      /*Cr  qi=30  OC_MODE_INTER_MV*/
+      {
+          341, 1428, 4038, 7764,10495,12740,14320,15464,
+        15996,16937,19705,19040,21586,22355,20191,23474
+      },
+      /*Cr  qi=30  OC_MDOE_INTER_MV_LAST*/
+      {
+          234, 1259, 3880, 7787,10786,12873,14416,15053,
+        14695,13660,13010,12199,11427,12217,12174,11093
+      },
+      /*Cr  qi=30  OC_MODE_INTER_MV_LAST2*/
+      {
+          301, 1414, 3779, 7466,10314,12679,14361,15549,
+        15252,14721,14280,15947,18164,16521,18211,17054
+      },
+      /*Cr  qi=30  OC_MODE_INTER_MV_FOUR*/
+      {
+          249, 1349, 4130, 7567,10283,12414,14076,15597,
+        17205,18145,19724,20572,21321,22567,22814,25543
+      },
+      /*Cr  qi=30  OC_MODE_GOLDEN_NOMV*/
+      {
+          252, 1321, 3165, 6196, 7406, 8135, 9230, 9195,
+         9241, 9570,10080,10504,10432,10746,11208,11700
+      },
+      /*Cr  qi=30  OC_MODE_GOLDEN_MV*/
+      {
+          278, 1507, 3957, 7497, 9389,10908,11524,11374,
+        11336,11022,10925,10980,11143,11534,11127,11510
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=31  OC_MODE_INTRA*/
+      {
+         1243, 3194, 6173, 8714,10746,12418,13880,15098,
+        16507,17856,18942,19676,20668,21695,22573,28604
+      },
+      /*Y'  qi=31  OC_MODE_INTER_NOMV*/
+      {
+          259, 1441, 4459, 8389,11662,13859,16072,17688,
+        18961,20294,21580,22864,23931,24790,25928,33176
+      },
+      /*Y'  qi=31  OC_MODE_INTER_MV*/
+      {
+          710, 1839, 4916, 8249,11183,13277,14981,16538,
+        18052,19536,20875,22064,23189,24323,25227,29847
+      },
+      /*Y'  qi=31  OC_MDOE_INTER_MV_LAST*/
+      {
+          334, 1580, 4791, 8420,11163,13255,15111,16786,
+        18298,19741,21046,22287,23453,24506,25493,29822
+      },
+      /*Y'  qi=31  OC_MODE_INTER_MV_LAST2*/
+      {
+          340, 1660, 4796, 8411,11386,13521,15231,16788,
+        18213,19605,20912,22095,23183,24277,25073,29773
+      },
+      /*Y'  qi=31  OC_MODE_INTER_MV_FOUR*/
+      {
+          398, 1711, 4839, 8308,11100,13325,15206,16867,
+        18415,19860,21183,22375,23479,24548,25532,28945
+      },
+      /*Y'  qi=31  OC_MODE_GOLDEN_NOMV*/
+      {
+          250, 1331, 4688, 8559,11084,12753,14151,15533,
+        16273,17617,19452,20392,20937,21704,22372,30217
+      },
+      /*Y'  qi=31  OC_MODE_GOLDEN_MV*/
+      {
+          462, 1818, 4899, 8330,11244,13556,15492,17306,
+        18834,20273,21493,22590,23733,24462,25371,29530
+      }
+    },
+    {
+      /*Cb  qi=31  OC_MODE_INTRA*/
+      {
+         1969, 6266, 9420,12254,14526,15913,17272,18728,
+        20625,22400,23982,25849,26832,27869,29084,34270
+      },
+      /*Cb  qi=31  OC_MODE_INTER_NOMV*/
+      {
+          602, 2192, 6990,10801,12770,16604,35344,19558,
+        27291,23126,24691,25060,26278,35277,25919,28248
+      },
+      /*Cb  qi=31  OC_MODE_INTER_MV*/
+      {
+          716, 3627, 8237,11193,14656,18188,20843,22277,
+        23979,25632,26623,27331,28221,30677,33286,34856
+      },
+      /*Cb  qi=31  OC_MDOE_INTER_MV_LAST*/
+      {
+          508, 2731, 8162,11409,15073,18614,20576,21665,
+        22523,23016,23205,22822,21761,21927,21581,22295
+      },
+      /*Cb  qi=31  OC_MODE_INTER_MV_LAST2*/
+      {
+          660, 3137, 8289,11192,14635,18103,21061,22876,
+        24301,24757,27361,27336,31414,30016,30911,32270
+      },
+      /*Cb  qi=31  OC_MODE_INTER_MV_FOUR*/
+      {
+          539, 2731, 7697,11175,14555,17841,20452,22510,
+        24147,25889,26820,28375,29408,29754,33360,33947
+      },
+      /*Cb  qi=31  OC_MODE_GOLDEN_NOMV*/
+      {
+          663, 2476, 6402, 8876,11968,13731,15010,14956,
+        16059,17666,18408,19343,18603,19280,19207,22022
+      },
+      /*Cb  qi=31  OC_MODE_GOLDEN_MV*/
+      {
+          573, 3111, 8240,11368,14296,16861,17216,17749,
+        18049,18399,18607,19040,18882,19688,19846,22212
+      }
+    },
+    {
+      /*Cr  qi=31  OC_MODE_INTRA*/
+      {
+         1108, 4103, 6800, 8879,10678,12264,13846,15439,
+        16977,17857,18614,20067,21196,21983,23088,27038
+      },
+      /*Cr  qi=31  OC_MODE_INTER_NOMV*/
+      {
+          243, 1003, 3375, 7242, 9869,11357,12106,14703,
+        13969,20480, 8767, 7802, 9165,11152,10780, 6695
+      },
+      /*Cr  qi=31  OC_MODE_INTER_MV*/
+      {
+          352, 1530, 4451, 8153,10953,13177,14946,16189,
+        16547,18487,19933,19120,21227,24127,18871,23373
+      },
+      /*Cr  qi=31  OC_MDOE_INTER_MV_LAST*/
+      {
+          249, 1375, 4295, 8365,11355,13442,15091,15530,
+        15322,14050,13455,12627,12100,12248,12862,11273
+      },
+      /*Cr  qi=31  OC_MODE_INTER_MV_LAST2*/
+      {
+          327, 1527, 4108, 7880,10890,13359,15189,15926,
+        15917,14872,14336,16691,16635,17637,18716,21662
+      },
+      /*Cr  qi=31  OC_MODE_INTER_MV_FOUR*/
+      {
+          269, 1456, 4455, 8067,10825,13034,14693,16347,
+        17604,19051,20466,21353,21585,23218,20589,26015
+      },
+      /*Cr  qi=31  OC_MODE_GOLDEN_NOMV*/
+      {
+          269, 1423, 3466, 6634, 7720, 8445, 9583, 9507,
+         9585, 9909,10494,10916,10905,11299,11459,12268
+      },
+      /*Cr  qi=31  OC_MODE_GOLDEN_MV*/
+      {
+          301, 1616, 4294, 7896, 9823,11306,11791,11780,
+        11534,11432,11176,11540,11405,12087,11509,11815
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=32  OC_MODE_INTRA*/
+      {
+         1271, 3298, 6329, 8850,10899,12559,14026,15256,
+        16702,18088,19164,19920,20920,21979,22859,28955
+      },
+      /*Y'  qi=32  OC_MODE_INTER_NOMV*/
+      {
+          267, 1525, 4671, 8723,11973,14143,16405,17968,
+        19245,20675,21989,23148,24337,25365,26320,33830
+      },
+      /*Y'  qi=32  OC_MODE_INTER_MV*/
+      {
+          707, 1899, 5099, 8501,11504,13616,15266,16833,
+        18363,19875,21252,22536,23698,24786,25767,30302
+      },
+      /*Y'  qi=32  OC_MDOE_INTER_MV_LAST*/
+      {
+          342, 1676, 4968, 8685,11449,13535,15398,17073,
+        18605,20040,21370,22636,23795,24917,25903,30209
+      },
+      /*Y'  qi=32  OC_MODE_INTER_MV_LAST2*/
+      {
+          346, 1725, 4957, 8657,11660,13788,15517,17077,
+        18514,19935,21238,22447,23559,24625,25470,30262
+      },
+      /*Y'  qi=32  OC_MODE_INTER_MV_FOUR*/
+      {
+          396, 1787, 5006, 8549,11358,13577,15489,17145,
+        18697,20145,21480,22695,23813,24891,25856,29355
+      },
+      /*Y'  qi=32  OC_MODE_GOLDEN_NOMV*/
+      {
+          250, 1375, 4893, 8834,11321,12960,14467,15712,
+        16599,18479,19754,20640,21218,21921,22923,30610
+      },
+      /*Y'  qi=32  OC_MODE_GOLDEN_MV*/
+      {
+          452, 1878, 5054, 8555,11522,13840,15809,17570,
+        19146,20601,21791,22976,24039,24958,25772,29921
+      }
+    },
+    {
+      /*Cb  qi=32  OC_MODE_INTRA*/
+      {
+         2047, 6510, 9723,12559,14845,16217,17606,19077,
+        21033,22790,24396,26315,27318,28472,29468,34646
+      },
+      /*Cb  qi=32  OC_MODE_INTER_NOMV*/
+      {
+          632, 2336, 7255,11079,12978,16747,33804,21393,
+        26808,27554,24382,23564,26545,36253,34739,31423
+      },
+      /*Cb  qi=32  OC_MODE_INTER_MV*/
+      {
+          840, 3859, 8589,11536,14964,18409,20980,22632,
+        24036,25768,26899,27728,29379,30349,33557,34888
+      },
+      /*Cb  qi=32  OC_MDOE_INTER_MV_LAST*/
+      {
+          533, 2916, 8513,11749,15432,18920,20974,22041,
+        22928,23333,23639,23540,22399,22108,22247,22730
+      },
+      /*Cb  qi=32  OC_MODE_INTER_MV_LAST2*/
+      {
+          690, 3247, 8620,11571,14966,18426,21065,23404,
+        24679,25341,26715,25738,28769,29059,30455,34549
+      },
+      /*Cb  qi=32  OC_MODE_INTER_MV_FOUR*/
+      {
+          566, 2901, 8010,11543,14945,18245,20861,23043,
+        24688,26788,27286,28525,30162,29595,33294,35082
+      },
+      /*Cb  qi=32  OC_MODE_GOLDEN_NOMV*/
+      {
+          678, 2610, 6565, 9338,12222,13971,15278,15470,
+        16770,17961,18876,19909,18754,19819,19685,22435
+      },
+      /*Cb  qi=32  OC_MODE_GOLDEN_MV*/
+      {
+          613, 3278, 8564,11721,14710,17208,17628,18242,
+        18491,18941,19013,19211,19229,20124,20427,22622
+      }
+    },
+    {
+      /*Cr  qi=32  OC_MODE_INTRA*/
+      {
+         1155, 4279, 7062, 9177,11005,12602,14186,15784,
+        17336,18205,19011,20476,21562,22217,23443,27368
+      },
+      /*Cr  qi=32  OC_MODE_INTER_NOMV*/
+      {
+          285, 1091, 3616, 7578,10223,11660,25728,13838,
+        13575,10429, 7561, 8383, 9048,10260, 7922, 6986
+      },
+      /*Cr  qi=32  OC_MODE_INTER_MV*/
+      {
+          416, 1659, 4618, 8477,11347,13604,15135,16871,
+        17411,18826,20225,19769,21601,22810,23433,16131
+      },
+      /*Cr  qi=32  OC_MDOE_INTER_MV_LAST*/
+      {
+          279, 1486, 4564, 8673,11667,13699,15345,15804,
+        15683,14358,13769,12840,12095,12500,12988,11537
+      },
+      /*Cr  qi=32  OC_MODE_INTER_MV_LAST2*/
+      {
+          357, 1632, 4354, 8110,11090,13644,15348,16196,
+        16731,15376,15037,16882,15450,19400,18238,18981
+      },
+      /*Cr  qi=32  OC_MODE_INTER_MV_FOUR*/
+      {
+          302, 1566, 4728, 8365,11147,13357,15114,16647,
+        18197,19566,21128,21647,22364,24033,25056,25930
+      },
+      /*Cr  qi=32  OC_MODE_GOLDEN_NOMV*/
+      {
+          314, 1527, 3662, 6743, 7985, 8636, 9778, 9814,
+         9881,10192,10618,10920,11088,11512,11691,12385
+      },
+      /*Cr  qi=32  OC_MODE_GOLDEN_MV*/
+      {
+          336, 1734, 4541, 8192,10056,11657,12109,11901,
+        11894,11589,11247,11796,11629,12519,11988,11980
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=33  OC_MODE_INTRA*/
+      {
+         1418, 3828, 7054, 9524,11597,13299,14788,15961,
+        17474,18957,20099,20875,21885,22963,23860,30051
+      },
+      /*Y'  qi=33  OC_MODE_INTER_NOMV*/
+      {
+          278, 1826, 5471, 9738,12918,15177,17315,18761,
+        20231,21725,23134,24168,25427,26617,27403,35824
+      },
+      /*Y'  qi=33  OC_MODE_INTER_MV*/
+      {
+          664, 2232, 5741, 9451,12182,14295,16115,17782,
+        19360,20874,22243,23522,24710,25868,26880,31212
+      },
+      /*Y'  qi=33  OC_MDOE_INTER_MV_LAST*/
+      {
+          375, 2103, 5697, 9566,12371,14481,16299,17970,
+        19505,20962,22317,23568,24760,25869,26870,31419
+      },
+      /*Y'  qi=33  OC_MODE_INTER_MV_LAST2*/
+      {
+          357, 2109, 5680, 9575,12680,14837,16534,18045,
+        19530,21002,22416,23681,24932,26102,27000,32635
+      },
+      /*Y'  qi=33  OC_MODE_INTER_MV_FOUR*/
+      {
+          408, 2284, 5878, 9497,12356,14583,16542,18238,
+        19840,21330,22757,24003,25189,26255,27255,30874
+      },
+      /*Y'  qi=33  OC_MODE_GOLDEN_NOMV*/
+      {
+          288, 1704, 5633, 9650,12068,13713,15231,16528,
+        17584,19936,21120,21817,22483,23045,24014,31873
+      },
+      /*Y'  qi=33  OC_MODE_GOLDEN_MV*/
+      {
+          504, 2254, 5781, 9466,12421,14694,16720,18511,
+        20111,21635,22924,24084,25249,26132,27074,31199
+      }
+    },
+    {
+      /*Cb  qi=33  OC_MODE_INTRA*/
+      {
+         2179, 7027,10362,13241,15611,17014,18414,19968,
+        21969,23829,25448,27401,28425,29627,30588,35605
+      },
+      /*Cb  qi=33  OC_MODE_INTER_NOMV*/
+      {
+          725, 2616, 7939,11742,14083,17691,33989,21492,
+        27686,34551,27995,38656,26829,32971,31099,37794
+      },
+      /*Cb  qi=33  OC_MODE_INTER_MV*/
+      {
+          625, 3297, 9147,12672,16556,20170,22678,24658,
+        26370,27301,29015,28921,29486,33331,34455,36091
+      },
+      /*Cb  qi=33  OC_MDOE_INTER_MV_LAST*/
+      {
+          657, 3305, 9184,12450,16145,19663,21826,23061,
+        24026,24601,24659,24477,23245,23577,23648,23862
+      },
+      /*Cb  qi=33  OC_MODE_INTER_MV_LAST2*/
+      {
+          830, 3295, 9327,12377,15735,19190,21898,24660,
+        25058,28442,26437,27039,32469,31320,27184,34665
+      },
+      /*Cb  qi=33  OC_MODE_INTER_MV_FOUR*/
+      {
+          662, 3279, 8783,12286,15622,18878,21774,23923,
+        25664,27526,28749,29728,31653,31409,35557,36790
+      },
+      /*Cb  qi=33  OC_MODE_GOLDEN_NOMV*/
+      {
+          791, 2910, 7064, 9566,12641,14893,15589,16251,
+        17729,18891,19660,20748,19798,20840,20383,23473
+      },
+      /*Cb  qi=33  OC_MODE_GOLDEN_MV*/
+      {
+          716, 3594, 9307,12547,15589,18031,18516,19257,
+        19322,19489,19964,20603,20390,20841,21110,23830
+      }
+    },
+    {
+      /*Cr  qi=33  OC_MODE_INTRA*/
+      {
+         1205, 4556, 7452, 9629,11548,13208,14832,16474,
+        18107,19028,19829,21384,22570,23113,24301,28136
+      },
+      /*Cr  qi=33  OC_MODE_INTER_NOMV*/
+      {
+          338, 1237, 4135, 8187,10913,11982,13533,13968,
+        15471,10483, 7468, 6335, 9869, 9886, 8679, 5688
+      },
+      /*Cr  qi=33  OC_MODE_INTER_MV*/
+      {
+          319, 1693, 5231, 9375,12372,14552,16124,17323,
+        18579,20356,21617,22091,23149,24689,22919,26209
+      },
+      /*Cr  qi=33  OC_MDOE_INTER_MV_LAST*/
+      {
+          344, 1718, 5145, 9210,12254,14419,16053,16667,
+        16394,15244,14488,13691,12585,13158,13711,12341
+      },
+      /*Cr  qi=33  OC_MODE_INTER_MV_LAST2*/
+      {
+          398, 1804, 4772, 8885,11975,14031,15750,16290,
+        17374,15497,13530,14946,17620,22459,15097,21146
+      },
+      /*Cr  qi=33  OC_MODE_INTER_MV_FOUR*/
+      {
+          356, 1776, 5208, 8994,11811,14110,15986,17504,
+        19186,20523,22404,22816,23480,25386,21741,27279
+      },
+      /*Cr  qi=33  OC_MODE_GOLDEN_NOMV*/
+      {
+          376, 1690, 4133, 7208, 8328, 9164,10403,10240,
+        10264,10736,11141,11516,11580,11996,12238,13040
+      },
+      /*Cr  qi=33  OC_MODE_GOLDEN_MV*/
+      {
+          381, 1920, 5008, 8864,10777,12249,13101,12287,
+        12695,12092,11815,12054,12258,12725,12561,12706
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=34  OC_MODE_INTRA*/
+      {
+         1423, 3846, 7059, 9532,11589,13298,14784,15947,
+        17469,18968,20105,20883,21893,22971,23876,30061
+      },
+      /*Y'  qi=34  OC_MODE_INTER_NOMV*/
+      {
+          278, 1841, 5485, 9744,12915,15112,17294,18677,
+        20282,21849,23117,24276,25306,26524,27515,35779
+      },
+      /*Y'  qi=34  OC_MODE_INTER_MV*/
+      {
+          814, 2314, 5691, 9364,12196,14334,16160,17749,
+        19326,20831,22157,23423,24608,25801,26838,31287
+      },
+      /*Y'  qi=34  OC_MDOE_INTER_MV_LAST*/
+      {
+          375, 2114, 5773, 9625,12305,14384,16218,17936,
+        19504,20997,22364,23678,24863,26011,26987,31486
+      },
+      /*Y'  qi=34  OC_MODE_INTER_MV_LAST2*/
+      {
+          359, 2158, 5674, 9561,12662,14801,16506,18025,
+        19481,20950,22282,23533,24670,25878,26762,32662
+      },
+      /*Y'  qi=34  OC_MODE_INTER_MV_FOUR*/
+      {
+          404, 2216, 5823, 9463,12305,14535,16498,18182,
+        19782,21263,22679,23910,25116,26185,27217,30861
+      },
+      /*Y'  qi=34  OC_MODE_GOLDEN_NOMV*/
+      {
+          278, 1681, 5643, 9653,12082,13759,15240,16453,
+        17644,20319,21042,21763,22409,23103,23933,31904
+      },
+      /*Y'  qi=34  OC_MODE_GOLDEN_MV*/
+      {
+          516, 2280, 5798, 9462,12438,14705,16711,18510,
+        20094,21584,22899,24069,25228,26109,27082,31215
+      }
+    },
+    {
+      /*Cb  qi=34  OC_MODE_INTRA*/
+      {
+         2191, 7043,10370,13253,15632,17042,18428,19967,
+        22011,23843,25468,27365,28431,29621,30520,35659
+      },
+      /*Cb  qi=34  OC_MODE_INTER_NOMV*/
+      {
+          729, 2638, 8026,11949,13972,17625,36800,21164,
+        27520,22243,30549,24021,26624,35520,34445,33363
+      },
+      /*Cb  qi=34  OC_MODE_INTER_MV*/
+      {
+          741, 3684, 9210,12483,16258,19972,22679,24451,
+        26747,27593,28306,29759,31089,30608,33624,35439
+      },
+      /*Cb  qi=34  OC_MDOE_INTER_MV_LAST*/
+      {
+          614, 3259, 9215,12597,16384,19811,21945,23092,
+        23969,24418,24689,24592,23498,23169,23547,23897
+      },
+      /*Cb  qi=34  OC_MODE_INTER_MV_LAST2*/
+      {
+          808, 3287, 9321,12359,15793,19274,22096,24454,
+        25524,26912,29152,35085,31687,31813,33216,35580
+      },
+      /*Cb  qi=34  OC_MODE_INTER_MV_FOUR*/
+      {
+          673, 3230, 8731,12294,15650,19011,21739,23966,
+        25741,27695,28698,30185,32731,30735,35696,36688
+      },
+      /*Cb  qi=34  OC_MODE_GOLDEN_NOMV*/
+      {
+          790, 2901, 7112, 9517,12631,15040,15684,16315,
+        17687,19094,19546,20991,19857,20779,20454,23605
+      },
+      /*Cb  qi=34  OC_MODE_GOLDEN_MV*/
+      {
+          715, 3622, 9303,12551,15503,18156,18551,19205,
+        19139,19612,20176,20327,20470,20844,21176,23891
+      }
+    },
+    {
+      /*Cr  qi=34  OC_MODE_INTRA*/
+      {
+         1218, 4570, 7463, 9644,11556,13217,14839,16527,
+        18116,19027,19848,21382,22573,23192,24311,28288
+      },
+      /*Cr  qi=34  OC_MODE_INTER_NOMV*/
+      {
+          357, 1256, 4135, 8224,10899,11941,13213,19623,
+        15609,10466, 6997, 6756, 7667, 9547, 9647, 5621
+      },
+      /*Cr  qi=34  OC_MODE_INTER_MV*/
+      {
+          394, 1822, 5197, 9265,12177,14549,16146,17544,
+        18645,20551,21920,22364,22892,22864,25710,26017
+      },
+      /*Cr  qi=34  OC_MDOE_INTER_MV_LAST*/
+      {
+          322, 1659, 5202, 9351,12355,14455,16071,16553,
+        16478,15320,14215,13474,13065,12824,13673,12301
+      },
+      /*Cr  qi=34  OC_MODE_INTER_MV_LAST2*/
+      {
+          399, 1826, 4806, 8858,11735,14137,15857,16566,
+        16713,15566,14334,17076,15440,19211,17441,19567
+      },
+      /*Cr  qi=34  OC_MODE_INTER_MV_FOUR*/
+      {
+          366, 1777, 5226, 9010,11835,14085,16100,17517,
+        19082,20470,22151,22885,23798,24502,25534,27018
+      },
+      /*Cr  qi=34  OC_MODE_GOLDEN_NOMV*/
+      {
+          407, 1697, 4156, 7201, 8277, 9250,10410,10243,
+        10438,10795,11290,11264,11511,11699,12333,12945
+      },
+      /*Cr  qi=34  OC_MODE_GOLDEN_MV*/
+      {
+          389, 1927, 5024, 8880,10744,12232,13213,12541,
+        12834,12250,11880,12238,12035,12511,12324,12697
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=35  OC_MODE_INTRA*/
+      {
+         1458, 3977, 7249, 9717,11790,13509,15011,16170,
+        17719,19253,20394,21181,22217,23296,24211,30497
+      },
+      /*Y'  qi=35  OC_MODE_INTER_NOMV*/
+      {
+          283, 1950, 5762,10117,13224,15451,17646,19100,
+        20727,22145,23453,24656,25754,27193,28353,35975
+      },
+      /*Y'  qi=35  OC_MODE_INTER_MV*/
+      {
+          844, 2451, 5913, 9626,12510,14660,16515,18123,
+        19701,21247,22674,23967,25226,26414,27262,31919
+      },
+      /*Y'  qi=35  OC_MDOE_INTER_MV_LAST*/
+      {
+          382, 2231, 6009, 9917,12635,14735,16578,18278,
+        19878,21353,22739,24028,25283,26404,27470,31982
+      },
+      /*Y'  qi=35  OC_MODE_INTER_MV_LAST2*/
+      {
+          365, 2255, 5874, 9717,12987,15226,16938,18467,
+        19950,21410,22718,23931,24960,26059,26843,33397
+      },
+      /*Y'  qi=35  OC_MODE_INTER_MV_FOUR*/
+      {
+          409, 2309, 6040, 9758,12612,14845,16808,18496,
+        20104,21616,23017,24278,25453,26583,27627,31322
+      },
+      /*Y'  qi=35  OC_MODE_GOLDEN_NOMV*/
+      {
+          282, 1747, 5859, 9967,12329,13991,15483,16737,
+        18066,20613,21428,22237,22735,23543,24263,32395
+      },
+      /*Y'  qi=35  OC_MODE_GOLDEN_MV*/
+      {
+          515, 2368, 6005, 9803,12783,15051,17053,18894,
+        20482,21949,23337,24498,25657,26544,27593,31713
+      }
+    },
+    {
+      /*Cb  qi=35  OC_MODE_INTRA*/
+      {
+         2345, 7462,10863,13760,16182,17613,19023,20555,
+        22601,24482,26091,28037,29166,30336,31144,36295
+      },
+      /*Cb  qi=35  OC_MODE_INTER_NOMV*/
+      {
+          818, 2904, 8494,12298,14666,18428,37824,22192,
+        27782,25110,28008,28675,26830,33600,30790,37299
+      },
+      /*Cb  qi=35  OC_MODE_INTER_MV*/
+      {
+          893, 3985, 9830,13099,16901,20491,23119,25254,
+        27072,28097,29753,29447,31341,31784,34688,36574
+      },
+      /*Cb  qi=35  OC_MDOE_INTER_MV_LAST*/
+      {
+          691, 3622, 9810,13162,16937,20444,22547,23833,
+        24759,25378,25514,24989,24253,23974,24357,24725
+      },
+      /*Cb  qi=35  OC_MODE_INTER_MV_LAST2*/
+      {
+          906, 3399, 9752,12982,16154,19491,22183,25080,
+        26210,28690,31232,28511,30502,34784,36320,36584
+      },
+      /*Cb  qi=35  OC_MODE_INTER_MV_FOUR*/
+      {
+          750, 3524, 9265,12894,16342,19856,22639,25009,
+        26602,28513,28861,30193,32526,31565,35258,37068
+      },
+      /*Cb  qi=35  OC_MODE_GOLDEN_NOMV*/
+      {
+          873, 3149, 7497,10299,13388,15372,16155,16924,
+        18319,19959,20312,21663,20852,21771,21359,24477
+      },
+      /*Cb  qi=35  OC_MODE_GOLDEN_MV*/
+      {
+          808, 3931, 9892,13169,16205,18694,19170,19868,
+        19910,20369,20558,21148,21062,21655,21929,24773
+      }
+    },
+    {
+      /*Cr  qi=35  OC_MODE_INTRA*/
+      {
+         1270, 4720, 7683, 9903,11862,13564,15216,16896,
+        18577,19468,20308,21844,23147,23715,24872,28708
+      },
+      /*Cr  qi=35  OC_MODE_INTER_NOMV*/
+      {
+          393, 1352, 4497, 8673,11667,12576,23656,14957,
+        17280,11736, 7134,16939,10338, 8763, 9114, 5273
+      },
+      /*Cr  qi=35  OC_MODE_INTER_MV*/
+      {
+          450, 1926, 5501, 9780,12713,15004,16595,18209,
+        19201,20418,22188,21924,23574,23374,25170,25270
+      },
+      /*Cr  qi=35  OC_MDOE_INTER_MV_LAST*/
+      {
+          350, 1796, 5561, 9846,12848,14943,16628,16992,
+        16853,15353,14647,13609,13261,13588,14032,12704
+      },
+      /*Cr  qi=35  OC_MODE_INTER_MV_LAST2*/
+      {
+          428, 1902, 5128, 9101,11887,14311,15810,16457,
+        16755,15651,13750,13108,17206,22560,13067,18696
+      },
+      /*Cr  qi=35  OC_MODE_INTER_MV_FOUR*/
+      {
+          394, 1893, 5557, 9455,12337,14587,16561,18036,
+        19596,21233,22420,23050,24136,23837,27248,27160
+      },
+      /*Cr  qi=35  OC_MODE_GOLDEN_NOMV*/
+      {
+          453, 1774, 4420, 7725, 8626, 9449,10738,10604,
+        10652,11073,11578,11727,11891,12109,12618,13282
+      },
+      /*Cr  qi=35  OC_MODE_GOLDEN_MV*/
+      {
+          418, 2045, 5327, 9335,11088,12506,13472,12900,
+        13113,12528,12228,12573,12562,12778,12786,13110
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=36  OC_MODE_INTRA*/
+      {
+         1702, 4611, 8057,10498,12610,14355,15881,17070,
+        18657,20230,21398,22200,23251,24368,25298,31760
+      },
+      /*Y'  qi=36  OC_MODE_INTER_NOMV*/
+      {
+          320, 2413, 6692,11165,14215,16483,18594,20095,
+        21743,23257,24681,26075,27256,28351,29699,37722
+      },
+      /*Y'  qi=36  OC_MODE_INTER_MV*/
+      {
+          936, 3057, 6779,10630,13447,15609,17510,19220,
+        20881,22432,23890,25183,26459,27545,28629,33321
+      },
+      /*Y'  qi=36  OC_MDOE_INTER_MV_LAST*/
+      {
+          434, 2839, 6867,10853,13587,15707,17586,19340,
+        20961,22520,23934,25265,26544,27684,28770,33416
+      },
+      /*Y'  qi=36  OC_MODE_INTER_MV_LAST2*/
+      {
+          409, 2645, 6973,10888,13910,16103,17819,19426,
+        21024,22535,23957,25354,26345,27663,28583,34820
+      },
+      /*Y'  qi=36  OC_MODE_INTER_MV_FOUR*/
+      {
+          442, 2857, 6939,10719,13573,15818,17824,19573,
+        21230,22796,24253,25586,26828,27934,29025,32846
+      },
+      /*Y'  qi=36  OC_MODE_GOLDEN_NOMV*/
+      {
+          346, 2214, 6705,10866,13196,14903,16406,17651,
+        19258,21824,22560,23443,24053,24770,25836,33772
+      },
+      /*Y'  qi=36  OC_MODE_GOLDEN_MV*/
+      {
+          515, 2942, 6860,10758,13737,16020,18053,19937,
+        21566,23118,24515,25731,26977,27852,28847,33085
+      }
+    },
+    {
+      /*Cb  qi=36  OC_MODE_INTRA*/
+      {
+         2490, 7968,11475,14383,16826,18333,19705,21248,
+        23362,25250,26831,28753,29837,31069,31748,36691
+      },
+      /*Cb  qi=36  OC_MODE_INTER_NOMV*/
+      {
+          914, 3212, 9254,13193,15695,19072,38681,24362,
+        24781,28381,26732,24921,38048,33266,31820,38249
+      },
+      /*Cb  qi=36  OC_MODE_INTER_MV*/
+      {
+          915, 3954,10307,13875,17919,21550,24191,26187,
+        28066,29345,30558,31050,31588,33798,37904,35969
+      },
+      /*Cb  qi=36  OC_MDOE_INTER_MV_LAST*/
+      {
+          783, 4026,10500,13889,17680,21245,23410,24766,
+        25638,26132,26414,26378,24850,25092,25080,25349
+      },
+      /*Cb  qi=36  OC_MODE_INTER_MV_LAST2*/
+      {
+         1056, 4627,10563,13647,17028,20416,23252,25441,
+        26259,31854,30829,26947,31940,38632,29080,36458
+      },
+      /*Cb  qi=36  OC_MODE_INTER_MV_FOUR*/
+      {
+          847, 3919, 9956,13632,17085,20546,23465,25801,
+        27516,29565,31044,32328,33150,34350,37366,37726
+      },
+      /*Cb  qi=36  OC_MODE_GOLDEN_NOMV*/
+      {
+          977, 3488, 7952,10660,13708,16254,17146,17710,
+        19011,20908,21231,22156,21643,22437,22252,25296
+      },
+      /*Cb  qi=36  OC_MODE_GOLDEN_MV*/
+      {
+          920, 4337,10578,13865,16859,19309,19847,20511,
+        20451,21144,21599,21774,21879,22176,22801,25468
+      }
+    },
+    {
+      /*Cr  qi=36  OC_MODE_INTRA*/
+      {
+         1362, 5078, 8146,10426,12449,14199,15912,17627,
+        19342,20168,21098,22579,23837,24515,25705,29652
+      },
+      /*Cr  qi=36  OC_MODE_INTER_NOMV*/
+      {
+          456, 1550, 5028, 9427,12288,27456,13974,20724,
+        19887,10460, 6570,19904, 8339, 9050, 8451, 4815
+      },
+      /*Cr  qi=36  OC_MODE_INTER_MV*/
+      {
+          481, 2118, 6073,10425,13334,15531,17425,19006,
+        20457,21433,23840,23801,24102,24284,25173,28673
+      },
+      /*Cr  qi=36  OC_MDOE_INTER_MV_LAST*/
+      {
+          418, 2057, 6179,10504,13467,15645,17326,17639,
+        17500,16169,14816,14489,13673,14268,14300,13171
+      },
+      /*Cr  qi=36  OC_MODE_INTER_MV_LAST2*/
+      {
+          525, 2148, 5624, 9855,12736,14935,16764,17196,
+        18050,15446,13619,13409,18035,23367,16698,20958
+      },
+      /*Cr  qi=36  OC_MODE_INTER_MV_FOUR*/
+      {
+          466, 2150, 6127,10080,12966,15267,17227,18852,
+        20353,22243,23709,23733,24629,26269,24783,28448
+      },
+      /*Cr  qi=36  OC_MODE_GOLDEN_NOMV*/
+      {
+          522, 1979, 4863, 7994, 9073, 9912,11102,11206,
+        11325,11684,12092,12139,12558,12698,13676,14009
+      },
+      /*Cr  qi=36  OC_MODE_GOLDEN_MV*/
+      {
+          497, 2297, 5932, 9919,11696,13199,13998,13671,
+        13402,13416,12800,13293,13020,13286,13004,13686
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=37  OC_MODE_INTRA*/
+      {
+         1773, 4793, 8348,10782,12907,14693,16240,17459,
+        19060,20655,21844,22647,23698,24833,25778,32371
+      },
+      /*Y'  qi=37  OC_MODE_INTER_NOMV*/
+      {
+          332, 2591, 7102,11643,14633,16952,19029,20643,
+        22356,23868,25168,26574,27742,28990,30392,38749
+      },
+      /*Y'  qi=37  OC_MODE_INTER_MV*/
+      {
+          981, 3307, 7131,11019,13877,16046,17967,19689,
+        21371,22964,24470,25753,27023,28229,29349,33999
+      },
+      /*Y'  qi=37  OC_MDOE_INTER_MV_LAST*/
+      {
+          434, 3022, 7222,11273,14023,16169,18062,19835,
+        21493,23055,24509,25867,27143,28341,29417,34118
+      },
+      /*Y'  qi=37  OC_MODE_INTER_MV_LAST2*/
+      {
+          436, 3099, 7189,11329,14443,16617,18359,19912,
+        21489,23030,24530,25895,27121,28629,28935,35662
+      },
+      /*Y'  qi=37  OC_MODE_INTER_MV_FOUR*/
+      {
+          450, 2985, 7240,11091,13991,16269,18291,20057,
+        21742,23332,24825,26171,27431,28562,29669,33520
+      },
+      /*Y'  qi=37  OC_MODE_GOLDEN_NOMV*/
+      {
+          358, 2348, 7010,11218,13557,15315,16704,18026,
+        19881,22355,23135,24054,24572,25413,26583,34456
+      },
+      /*Y'  qi=37  OC_MODE_GOLDEN_MV*/
+      {
+          521, 3112, 7194,11182,14208,16493,18553,20447,
+        22129,23671,25163,26336,27629,28443,29589,33805
+      }
+    },
+    {
+      /*Cb  qi=37  OC_MODE_INTRA*/
+      {
+         2659, 8440,12038,14942,17406,18924,20344,21923,
+        23959,25928,27582,29513,30605,31906,32528,37697
+      },
+      /*Cb  qi=37  OC_MODE_INTER_NOMV*/
+      {
+         1009, 3538, 9812,13792,16205,19915,40064,24199,
+        23807,26456,26257,28297,32510,38357,31614,41967
+      },
+      /*Cb  qi=37  OC_MODE_INTER_MV*/
+      {
+         1044, 4398,11032,14515,18618,22199,24927,27037,
+        28765,30031,30921,32370,32313,34698,35887,38480
+      },
+      /*Cb  qi=37  OC_MDOE_INTER_MV_LAST*/
+      {
+          869, 4359,11138,14563,18353,21922,24113,25512,
+        26406,27018,27228,26883,26161,25696,26038,26168
+      },
+      /*Cb  qi=37  OC_MODE_INTER_MV_LAST2*/
+      {
+         1282, 4577,11219,14404,17663,20877,24029,27649,
+        29896,29600,32588,28234,31853,35712,35205,36756
+      },
+      /*Cb  qi=37  OC_MODE_INTER_MV_FOUR*/
+      {
+          937, 4262,10543,14284,17738,21275,24290,26534,
+        28474,30672,31537,33390,35441,34814,37823,39286
+      },
+      /*Cb  qi=37  OC_MODE_GOLDEN_NOMV*/
+      {
+         1075, 3762, 8373,11099,14114,17044,17644,18435,
+        19879,21520,22194,22964,22662,23255,23118,26197
+      },
+      /*Cb  qi=37  OC_MODE_GOLDEN_MV*/
+      {
+         1026, 4706,11205,14538,17525,20036,20503,21135,
+        21215,21993,21842,22474,22910,23312,23452,26374
+      }
+    },
+    {
+      /*Cr  qi=37  OC_MODE_INTRA*/
+      {
+         1432, 5371, 8566,10917,12994,14787,16530,18303,
+        20033,20893,21837,23432,24622,25225,26572,30616
+      },
+      /*Cr  qi=37  OC_MODE_INTER_NOMV*/
+      {
+          500, 1749, 5597, 9930,12678,13568,17523,16407,
+        20168,10593, 6083, 5331, 9274,11442, 7366, 5114
+      },
+      /*Cr  qi=37  OC_MODE_INTER_MV*/
+      {
+          551, 2384, 6662,11070,13972,16278,18142,19617,
+        21157,22068,23878,22642,24641,24970,25715,28421
+      },
+      /*Cr  qi=37  OC_MDOE_INTER_MV_LAST*/
+      {
+          467, 2280, 6832,11183,14131,16310,18030,18298,
+        18103,16599,15900,14960,14516,14745,15392,13989
+      },
+      /*Cr  qi=37  OC_MODE_INTER_MV_LAST2*/
+      {
+          574, 2433, 6157,10507,13344,15426,17230,17962,
+        18454,15943,16044,18763,20106,23248,21261,22400
+      },
+      /*Cr  qi=37  OC_MODE_INTER_MV_FOUR*/
+      {
+          518, 2375, 6672,10730,13646,15962,17766,19530,
+        21122,22952,24138,24743,25315,27140,27714,29582
+      },
+      /*Cr  qi=37  OC_MODE_GOLDEN_NOMV*/
+      {
+          569, 2140, 5242, 8578, 9574,10373,11763,11754,
+        12039,12084,12665,12853,13143,13320,14246,14533
+      },
+      /*Cr  qi=37  OC_MODE_GOLDEN_MV*/
+      {
+          551, 2517, 6475,10536,12300,13678,14539,14175,
+        13858,13973,13159,13819,13865,13993,13919,14094
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=38  OC_MODE_INTRA*/
+      {
+         1780, 4787, 8358,10794,12920,14714,16268,17499,
+        19104,20688,21860,22682,23727,24862,25815,32553
+      },
+      /*Y'  qi=38  OC_MODE_INTER_NOMV*/
+      {
+          342, 2609, 7140,11667,14642,17052,19036,20740,
+        22348,23839,25144,26372,27581,28719,29624,35794
+      },
+      /*Y'  qi=38  OC_MODE_INTER_MV*/
+      {
+          939, 3319, 7312,11158,13892,16047,17913,19673,
+        21326,22908,24383,25754,27033,28250,29349,34167
+      },
+      /*Y'  qi=38  OC_MDOE_INTER_MV_LAST*/
+      {
+          456, 3027, 7161,11272,14139,16268,18125,19866,
+        21454,22992,24399,25721,26949,28066,29056,33460
+      },
+      /*Y'  qi=38  OC_MODE_INTER_MV_LAST2*/
+      {
+          434, 2879, 7058,11250,14451,16605,18371,20003,
+        21623,23289,24809,26324,27671,28764,29772,35577
+      },
+      /*Y'  qi=38  OC_MODE_INTER_MV_FOUR*/
+      {
+          462, 3025, 7258,11097,14027,16354,18380,20184,
+        21873,23494,25003,26306,27594,28761,29790,33817
+      },
+      /*Y'  qi=38  OC_MODE_GOLDEN_NOMV*/
+      {
+          367, 2362, 7048,11210,13553,15325,16824,18346,
+        20279,22469,23175,24149,24750,25560,26500,34695
+      },
+      /*Y'  qi=38  OC_MODE_GOLDEN_MV*/
+      {
+          555, 3121, 7188,11197,14207,16524,18585,20482,
+        22156,23720,25154,26354,27661,28449,29593,34097
+      }
+    },
+    {
+      /*Cb  qi=38  OC_MODE_INTRA*/
+      {
+         2666, 8449,12054,14964,17429,18983,20381,22022,
+        24036,25951,27588,29657,30790,32078,32745,37862
+      },
+      /*Cb  qi=38  OC_MODE_INTER_NOMV*/
+      {
+         1013, 3554,10046,14169,17179,20775,22118,22709,
+        23700,24324,24802,24798,25513,25419,25415,27056
+      },
+      /*Cb  qi=38  OC_MODE_INTER_MV*/
+      {
+          867, 4420,11094,14679,18684,22431,25018,27300,
+        29071,30664,31949,32791,34233,37183,37472,40515
+      },
+      /*Cb  qi=38  OC_MDOE_INTER_MV_LAST*/
+      {
+          940, 4359,11066,14404,18148,21853,24363,26499,
+        28365,29695,30986,32363,32948,34688,33750,34766
+      },
+      /*Cb  qi=38  OC_MODE_INTER_MV_LAST2*/
+      {
+         1174, 4106,11234,14391,17575,21028,23729,25745,
+        27456,30292,30826,30816,32680,37485,38400,38747
+      },
+      /*Cb  qi=38  OC_MODE_INTER_MV_FOUR*/
+      {
+          947, 4246,10536,14286,17746,21208,24110,26399,
+        28481,30643,31948,33409,34971,36921,35573,40561
+      },
+      /*Cb  qi=38  OC_MODE_GOLDEN_NOMV*/
+      {
+         1078, 3767, 8290,11083,14016,16904,17482,18364,
+        19862,21172,22382,23252,22819,23459,23545,27513
+      },
+      /*Cb  qi=38  OC_MODE_GOLDEN_MV*/
+      {
+         1024, 4693,11191,14533,17553,20053,20623,21346,
+        21424,22175,22267,22520,23166,23562,24059,28088
+      }
+    },
+    {
+      /*Cr  qi=38  OC_MODE_INTRA*/
+      {
+         1434, 5382, 8585,10944,13026,14826,16571,18337,
+        20098,20999,21924,23497,24663,25287,26709,30626
+      },
+      /*Cr  qi=38  OC_MODE_INTER_NOMV*/
+      {
+          510, 1769, 5661,10404,12676,14317,15186,15319,
+        14562,14187,14056,13703,14226,14489,14606,11470
+      },
+      /*Cr  qi=38  OC_MODE_INTER_MV*/
+      {
+          467, 2273, 6875,11323,14359,16820,17105,20802,
+        22009,22808,23671,23620,24123,26468,26129,28914
+      },
+      /*Cr  qi=38  OC_MDOE_INTER_MV_LAST*/
+      {
+          507, 2362, 6656,10824,14032,16657,19213,20866,
+        21477,22286,21873,24563,26229,24029,22848,27272
+      },
+      /*Cr  qi=38  OC_MODE_INTER_MV_LAST2*/
+      {
+          577, 2339, 6328,10706,13570,15634,18054,19472,
+        20027,19226,14586,21056,21841,23237,25527,19373
+      },
+      /*Cr  qi=38  OC_MODE_INTER_MV_FOUR*/
+      {
+          528, 2377, 6675,10769,13704,16014,17908,19643,
+        21269,22785,23695,24873,26008,26659,27755,30604
+      },
+      /*Cr  qi=38  OC_MODE_GOLDEN_NOMV*/
+      {
+          576, 2137, 5248, 8493, 9344,10127,11612,11551,
+        12070,12507,13051,13345,13793,13835,14850,14813
+      },
+      /*Cr  qi=38  OC_MODE_GOLDEN_MV*/
+      {
+          554, 2521, 6463,10561,12244,13758,14626,14545,
+        14174,14362,13644,14244,14300,14563,14791,14924
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=39  OC_MODE_INTRA*/
+      {
+         2040, 5409, 9045,11481,13665,15488,17061,18308,
+        19940,21534,22732,23541,24609,25730,26706,33653
+      },
+      /*Y'  qi=39  OC_MODE_INTER_NOMV*/
+      {
+          424, 3075, 7962,12505,15545,17948,19988,21765,
+        23465,24855,26305,27499,28821,29855,30730,36949
+      },
+      /*Y'  qi=39  OC_MODE_INTER_MV*/
+      {
+         1030, 3576, 8075,11879,14752,16947,18851,20636,
+        22287,23812,25247,26554,27820,28949,30005,34637
+      },
+      /*Y'  qi=39  OC_MDOE_INTER_MV_LAST*/
+      {
+          648, 3826, 8009,12039,14832,17046,19011,20830,
+        22542,24152,25690,27100,28439,29747,30846,35948
+      },
+      /*Y'  qi=39  OC_MODE_INTER_MV_LAST2*/
+      {
+          474, 3682, 8195,12161,15254,17426,19174,20862,
+        22644,24317,25936,27276,28797,29943,30982,37328
+      },
+      /*Y'  qi=39  OC_MODE_INTER_MV_FOUR*/
+      {
+          490, 3394, 7907,11916,14792,17071,19081,20911,
+        22665,24339,25897,27299,28587,29751,30831,35080
+      },
+      /*Y'  qi=39  OC_MODE_GOLDEN_NOMV*/
+      {
+          434, 2838, 7848,11973,14309,16029,17741,19707,
+        21746,23362,24191,25223,25575,26558,27084,35875
+      },
+      /*Y'  qi=39  OC_MODE_GOLDEN_MV*/
+      {
+          596, 3647, 7968,12008,15039,17372,19448,21378,
+        23124,24728,26167,27461,28701,29526,30676,35244
+      }
+    },
+    {
+      /*Cb  qi=39  OC_MODE_INTRA*/
+      {
+         2895, 9021,12711,15632,18165,19750,21157,22822,
+        24894,26818,28610,30619,31742,33119,33922,38896
+      },
+      /*Cb  qi=39  OC_MODE_INTER_NOMV*/
+      {
+         1161, 3947,10709,14904,17739,21606,22695,23431,
+        24346,25125,25646,26059,26171,26802,26659,28101
+      },
+      /*Cb  qi=39  OC_MODE_INTER_MV*/
+      {
+          824, 5699,11598,15619,19439,23267,26217,28322,
+        30048,31842,33247,33628,35743,37755,40397,41728
+      },
+      /*Cb  qi=39  OC_MDOE_INTER_MV_LAST*/
+      {
+         1199, 5248,11993,15269,19061,22851,25388,27113,
+        29063,29267,30172,32132,30855,31186,31736,36850
+      },
+      /*Cb  qi=39  OC_MODE_INTER_MV_LAST2*/
+      {
+         1642, 6008,12049,15169,18533,21925,24632,26863,
+        28245,29947,31311,30986,37035,37490,34728,36826
+      },
+      /*Cb  qi=39  OC_MODE_INTER_MV_FOUR*/
+      {
+         1062, 4578,11252,15058,18676,22272,25211,27447,
+        29643,31945,33535,34562,36212,37567,39779,41733
+      },
+      /*Cb  qi=39  OC_MODE_GOLDEN_NOMV*/
+      {
+         1206, 4124, 8845,11727,14661,17338,18275,19049,
+        20763,22258,23314,24051,23687,24019,24501,28684
+      },
+      /*Cb  qi=39  OC_MODE_GOLDEN_MV*/
+      {
+         1143, 5233,11913,15297,18415,20768,21547,22170,
+        22160,23156,23593,23687,23735,24514,24906,29422
+      }
+    },
+    {
+      /*Cr  qi=39  OC_MODE_INTRA*/
+      {
+         1535, 5715, 9029,11467,13608,15435,17196,19030,
+        20816,21665,22642,24243,25528,25960,27597,31649
+      },
+      /*Cr  qi=39  OC_MODE_INTER_NOMV*/
+      {
+          570, 1980, 6288,10894,13144,14779,15734,15795,
+        15429,14610,13874,13794,14890,15205,14360,12310
+      },
+      /*Cr  qi=39  OC_MODE_INTER_MV*/
+      {
+          382, 2857, 7633,11397,14037,16661,18251,20920,
+        22186,24017,25123,25437,26311,27558,26652,27651
+      },
+      /*Cr  qi=39  OC_MDOE_INTER_MV_LAST*/
+      {
+          618, 2579, 7266,11938,15030,17355,19288,21044,
+        22112,22919,22417,24682,24441,26109,23595,22893
+      },
+      /*Cr  qi=39  OC_MODE_INTER_MV_LAST2*/
+      {
+          749, 2671, 6790,11528,14599,16887,18734,20240,
+        21047,18794,17830,20189,16552,13545,13577, 7731
+      },
+      /*Cr  qi=39  OC_MODE_INTER_MV_FOUR*/
+      {
+          560, 2577, 7241,11512,14495,16777,18730,20453,
+        21955,23438,25158,25914,25885,27454,28770,30897
+      },
+      /*Cr  qi=39  OC_MODE_GOLDEN_NOMV*/
+      {
+          627, 2344, 5711, 9022, 9790,10406,12218,12259,
+        12644,12963,13541,14098,14394,14547,15539,15486
+      },
+      /*Cr  qi=39  OC_MODE_GOLDEN_MV*/
+      {
+          598, 2804, 7070,11127,12870,14222,15418,14768,
+        15145,14787,14233,14690,14863,15279,15563,15533
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=40  OC_MODE_INTRA*/
+      {
+         2342, 5977, 9711,12109,14324,16168,17795,19071,
+        20719,22345,23553,24359,25464,26617,27626,34620
+      },
+      /*Y'  qi=40  OC_MODE_INTER_NOMV*/
+      {
+          519, 3574, 8803,13354,16341,18804,20780,22654,
+        24411,25958,27471,28780,30162,31481,32916,41493
+      },
+      /*Y'  qi=40  OC_MODE_INTER_MV*/
+      {
+         1367, 4344, 8889,12678,15705,17849,19649,21428,
+        23242,24984,26569,28073,29382,30566,31630,36393
+      },
+      /*Y'  qi=40  OC_MDOE_INTER_MV_LAST*/
+      {
+          734, 4406, 8792,12823,15607,17836,19853,21731,
+        23490,25126,26648,28068,29399,30579,31661,36372
+      },
+      /*Y'  qi=40  OC_MODE_INTER_MV_LAST2*/
+      {
+          636, 4483, 8878,12973,15960,18107,19967,21739,
+        23424,25056,26520,27887,29103,30290,31026,37164
+      },
+      /*Y'  qi=40  OC_MODE_INTER_MV_FOUR*/
+      {
+          540, 3861, 8618,12693,15594,17928,19980,21855,
+        23623,25291,26833,28229,29525,30712,31804,35862
+      },
+      /*Y'  qi=40  OC_MODE_GOLDEN_NOMV*/
+      {
+          481, 3258, 8642,12666,15081,16694,18737,20830,
+        22774,24223,25420,26055,26738,27476,28189,36767
+      },
+      /*Y'  qi=40  OC_MODE_GOLDEN_MV*/
+      {
+          647, 4106, 8693,12785,15872,18212,20329,22321,
+        24111,25726,27267,28514,29880,30676,31809,36072
+      }
+    },
+    {
+      /*Cb  qi=40  OC_MODE_INTRA*/
+      {
+         3256, 9823,13541,16511,19100,20670,22078,23745,
+        25879,27898,29715,31600,32809,34363,35093,40240
+      },
+      /*Cb  qi=40  OC_MODE_INTER_NOMV*/
+      {
+         1404, 4535,11191,14847,17779,21889,46198,42837,
+        31627,36224,27226,32523,34227,39467,35533,42171
+      },
+      /*Cb  qi=40  OC_MODE_INTER_MV*/
+      {
+         1941, 7008,12828,15885,19800,23664,26443,28705,
+        31799,32440,34658,36059,33980,39025,40661,41043
+      },
+      /*Cb  qi=40  OC_MDOE_INTER_MV_LAST*/
+      {
+         1196, 6039,12961,16227,20080,23894,26241,27612,
+        28647,29320,29375,29227,28008,28378,28144,28532
+      },
+      /*Cb  qi=40  OC_MODE_INTER_MV_LAST2*/
+      {
+         1866, 7063,12939,15825,19335,23397,26214,28577,
+        30055,30885,32518,34647,34015,39790,41742,44557
+      },
+      /*Cb  qi=40  OC_MODE_INTER_MV_FOUR*/
+      {
+         1265, 5166,12171,15951,19671,23461,26512,28904,
+        31169,33416,34605,35550,37627,38229,40115,42375
+      },
+      /*Cb  qi=40  OC_MODE_GOLDEN_NOMV*/
+      {
+         1403, 4628, 9511,12637,15437,18384,19542,19958,
+        21642,22969,24320,24537,24888,24758,24785,28312
+      },
+      /*Cb  qi=40  OC_MODE_GOLDEN_MV*/
+      {
+         1412, 5912,12872,16034,19063,21539,22443,22915,
+        23169,23954,24073,24297,24757,25573,25288,28562
+      }
+    },
+    {
+      /*Cr  qi=40  OC_MODE_INTRA*/
+      {
+         1690, 6153, 9563,12070,14269,16140,17969,19855,
+        21592,22490,23518,25137,26324,26930,28478,32738
+      },
+      /*Cr  qi=40  OC_MODE_INTER_NOMV*/
+      {
+          661, 2308, 6980,11382,14192,31265,34645,19090,
+        16926, 9416, 6264, 6193,12105,13241, 9378, 5669
+      },
+      /*Cr  qi=40  OC_MODE_INTER_MV*/
+      {
+          851, 3289, 8153,12568,15503,17939,19900,21913,
+        23866,25018,25727,26359,26499,27061,29078,30341
+      },
+      /*Cr  qi=40  OC_MDOE_INTER_MV_LAST*/
+      {
+          628, 2965, 8111,12625,15563,17804,19531,19701,
+        19343,18022,16895,16131,15829,16270,16634,15220
+      },
+      /*Cr  qi=40  OC_MODE_INTER_MV_LAST2*/
+      {
+          895, 3289, 7713,11529,15158,17760,19844,19920,
+        20837,17224,17246,18736,24057,26528,24432,23040
+      },
+      /*Cr  qi=40  OC_MODE_INTER_MV_FOUR*/
+      {
+          643, 2956, 8016,12245,15206,17547,19437,21151,
+        22734,24642,25752,26768,26977,29984,29090,32541
+      },
+      /*Cr  qi=40  OC_MODE_GOLDEN_NOMV*/
+      {
+          714, 2628, 6305, 9566,10721,11382,12923,12865,
+        12917,13444,13707,13830,14351,14547,15373,15925
+      },
+      /*Cr  qi=40  OC_MODE_GOLDEN_MV*/
+      {
+          703, 3234, 7831,11886,13543,14956,15779,15109,
+        15616,14980,14432,14689,14823,15136,15172,15408
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=41  OC_MODE_INTRA*/
+      {
+         2358, 6008, 9721,12128,14342,16190,17808,19086,
+        20738,22357,23553,24372,25476,26625,27634,34626
+      },
+      /*Y'  qi=41  OC_MODE_INTER_NOMV*/
+      {
+          521, 3603, 8830,13360,16355,18843,20791,22690,
+        24437,25885,27450,28706,30286,31491,32638,39675
+      },
+      /*Y'  qi=41  OC_MODE_INTER_MV*/
+      {
+         1434, 4383, 8862,12754,15809,17906,19709,21487,
+        23246,24973,26549,27990,29335,30483,31695,36372
+      },
+      /*Y'  qi=41  OC_MDOE_INTER_MV_LAST*/
+      {
+          664, 4424, 8808,12838,15631,17866,19871,21752,
+        23500,25114,26647,28068,29376,30597,31658,36410
+      },
+      /*Y'  qi=41  OC_MODE_INTER_MV_LAST2*/
+      {
+          685, 4276, 8939,12994,15981,18122,19962,21716,
+        23438,25033,26568,27913,29224,30479,31405,38314
+      },
+      /*Y'  qi=41  OC_MODE_INTER_MV_FOUR*/
+      {
+          556, 3890, 8643,12709,15604,17941,19992,21866,
+        23643,25300,26851,28254,29542,30738,31839,35913
+      },
+      /*Y'  qi=41  OC_MODE_GOLDEN_NOMV*/
+      {
+          501, 3227, 8667,12650,15062,16677,19010,21061,
+        22469,24046,25273,25838,26570,27455,28205,36788
+      },
+      /*Y'  qi=41  OC_MODE_GOLDEN_MV*/
+      {
+          658, 4127, 8695,12832,15905,18239,20360,22344,
+        24128,25780,27290,28558,29887,30688,31841,36096
+      }
+    },
+    {
+      /*Cb  qi=41  OC_MODE_INTRA*/
+      {
+         3255, 9838,13547,16532,19103,20683,22104,23761,
+        25868,27936,29686,31656,32837,34355,35046,40326
+      },
+      /*Cb  qi=41  OC_MODE_INTER_NOMV*/
+      {
+         1406, 4542,11200,14870,18056,22235,25921,42197,
+        29939,31322,30853,31666,29306,32985,34389,36448
+      },
+      /*Cb  qi=41  OC_MODE_INTER_MV*/
+      {
+         2099, 6965,12894,15821,19499,23392,26542,28581,
+        30933,32632,34378,36295,34347,37589,40389,41283
+      },
+      /*Cb  qi=41  OC_MDOE_INTER_MV_LAST*/
+      {
+         1220, 5965,12958,16269,20140,23903,26244,27587,
+        28749,29184,29564,29250,28078,28130,28362,28658
+      },
+      /*Cb  qi=41  OC_MODE_INTER_MV_LAST2*/
+      {
+         1833, 6945,12944,15848,19480,23356,26169,28784,
+        30395,31125,32407,32960,32937,37927,41960,42604
+      },
+      /*Cb  qi=41  OC_MODE_INTER_MV_FOUR*/
+      {
+         1271, 5160,12172,15966,19661,23438,26514,29078,
+        31015,33158,35136,35464,36675,38457,41130,43101
+      },
+      /*Cb  qi=41  OC_MODE_GOLDEN_NOMV*/
+      {
+         1404, 4636, 9492,12552,15372,18466,19364,19940,
+        21649,23104,24388,24609,24679,24806,24793,28303
+      },
+      /*Cb  qi=41  OC_MODE_GOLDEN_MV*/
+      {
+         1436, 5925,12890,16053,19039,21621,22369,22910,
+        23179,24020,24137,23954,24770,25544,25352,28491
+      }
+    },
+    {
+      /*Cr  qi=41  OC_MODE_INTRA*/
+      {
+         1692, 6159, 9566,12069,14275,16147,17972,19868,
+        21594,22503,23519,25148,26339,26892,28541,32725
+      },
+      /*Cr  qi=41  OC_MODE_INTER_NOMV*/
+      {
+          667, 2310, 7004,11719,14203,15678,34133,21660,
+        23152,19744,27520,20718,22343,13273,24704,29632
+      },
+      /*Cr  qi=41  OC_MODE_INTER_MV*/
+      {
+          891, 3340, 8048,12251,15370,17950,19889,20924,
+        23493,25438,25919,25142,26974,27360,28713,30505
+      },
+      /*Cr  qi=41  OC_MDOE_INTER_MV_LAST*/
+      {
+          633, 2950, 8155,12640,15585,17833,19522,19711,
+        19422,17589,16333,15469,15297,16050,16467,15119
+      },
+      /*Cr  qi=41  OC_MODE_INTER_MV_LAST2*/
+      {
+          895, 3269, 7721,11915,15309,17932,19744,19732,
+        20625,16588,13248,12098,29816,16070,12425, 6903
+      },
+      /*Cr  qi=41  OC_MODE_INTER_MV_FOUR*/
+      {
+          649, 2963, 8016,12261,15228,17531,19495,21120,
+        22915,25016,26001,26396,26625,29002,28904,31729
+      },
+      /*Cr  qi=41  OC_MODE_GOLDEN_NOMV*/
+      {
+          718, 2630, 6300, 9588,10684,11451,13023,12811,
+        13131,13355,13686,13821,14336,14517,15427,15792
+      },
+      /*Cr  qi=41  OC_MODE_GOLDEN_MV*/
+      {
+          701, 3240, 7857,11882,13586,14997,15665,15093,
+        15685,14894,14592,14811,14861,15211,15191,15360
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=42  OC_MODE_INTRA*/
+      {
+         2806, 6525,10485,12867,15118,17010,18698,20006,
+        21689,23322,24553,25357,26478,27627,28642,36098
+      },
+      /*Y'  qi=42  OC_MODE_INTER_NOMV*/
+      {
+          703, 4197, 9738,14276,17287,19785,21780,23689,
+        25480,27102,28640,30060,31484,32881,34176,42571
+      },
+      /*Y'  qi=42  OC_MODE_INTER_MV*/
+      {
+         1269, 4860, 9725,13600,16540,18793,20819,22663,
+        24386,25978,27453,28763,30039,31181,32211,36260
+      },
+      /*Y'  qi=42  OC_MDOE_INTER_MV_LAST*/
+      {
+          994, 5296, 9634,13687,16495,18772,20821,22746,
+        24539,26264,27878,29424,30846,31970,33088,37818
+      },
+      /*Y'  qi=42  OC_MODE_INTER_MV_LAST2*/
+      {
+          669, 5332, 9882,13990,16996,19204,21118,22875,
+        24595,26238,27775,29121,30369,32080,32939,39043
+      },
+      /*Y'  qi=42  OC_MODE_INTER_MV_FOUR*/
+      {
+          532, 4443, 9521,13594,16527,18914,21038,22968,
+        24824,26561,28132,29516,30827,31998,33065,37286
+      },
+      /*Y'  qi=42  OC_MODE_GOLDEN_NOMV*/
+      {
+          719, 3923, 9612,13507,15901,17442,19883,22061,
+        23593,24935,26106,26891,27542,28521,29223,38236
+      },
+      /*Y'  qi=42  OC_MODE_GOLDEN_MV*/
+      {
+          795, 4748, 9561,13751,16824,19187,21340,23343,
+        25221,26887,28397,29754,31098,32038,33474,37633
+      }
+    },
+    {
+      /*Cb  qi=42  OC_MODE_INTRA*/
+      {
+         3721,10681,14557,17677,20357,21933,23358,25054,
+        27265,29385,31188,33213,34498,36041,37026,42516
+      },
+      /*Cb  qi=42  OC_MODE_INTER_NOMV*/
+      {
+         1682, 5274,12603,16125,18965,22689,49664,39296,
+        33237,29529,31915,31760,36318,40304,36296,45239
+      },
+      /*Cb  qi=42  OC_MODE_INTER_MV*/
+      {
+         1056, 7345,13853,17711,21564,25614,28764,31146,
+        33377,35114,36673,37350,39041,41533,41871,44977
+      },
+      /*Cb  qi=42  OC_MDOE_INTER_MV_LAST*/
+      {
+         2316, 6853,14024,17273,21343,25353,27722,29400,
+        30505,31099,31053,31164,30464,30433,29806,30618
+      },
+      /*Cb  qi=42  OC_MODE_INTER_MV_LAST2*/
+      {
+         2413, 8215,14039,16931,20467,24379,27489,29589,
+        32602,32806,32368,33133,36089,43232,39334,40921
+      },
+      /*Cb  qi=42  OC_MODE_INTER_MV_FOUR*/
+      {
+         1453, 5889,13236,16958,20795,24702,28085,30440,
+        32845,35205,36611,37657,39740,39846,44547,44641
+      },
+      /*Cb  qi=42  OC_MODE_GOLDEN_NOMV*/
+      {
+         1765, 5358,10489,13487,16487,20068,20874,21438,
+        23180,24745,25849,26805,26138,27015,26655,30344
+      },
+      /*Cb  qi=42  OC_MODE_GOLDEN_MV*/
+      {
+         1707, 6730,13959,17098,20134,23087,25304,25888,
+        26532,26118,28409,26615,27337,28471,29994,30417
+      }
+    },
+    {
+      /*Cr  qi=42  OC_MODE_INTRA*/
+      {
+         1783, 6652,10214,12804,15080,17008,18885,20849,
+        22588,23582,24559,26226,27579,28137,29779,34190
+      },
+      /*Cr  qi=42  OC_MODE_INTER_NOMV*/
+      {
+          786, 2687, 7745,12064,14811,33231,32068,18275,
+        18297,12672, 7174, 6558,12558,11687,10283, 6356
+      },
+      /*Cr  qi=42  OC_MODE_INTER_MV*/
+      {
+          507, 3606, 9278,12984,15313,17857,20335,22273,
+        25646,26739,25877,27635,26516,29914,28594,30124
+      },
+      /*Cr  qi=42  OC_MDOE_INTER_MV_LAST*/
+      {
+          978, 3457, 8960,13774,16794,18966,20693,20880,
+        20640,19003,17924,17064,16934,17737,18049,16160
+      },
+      /*Cr  qi=42  OC_MODE_INTER_MV_LAST2*/
+      {
+         1095, 3753, 8358,12912,16423,19013,20558,21167,
+        21698,18408,17924,19372,25792,28896,23947,27675
+      },
+      /*Cr  qi=42  OC_MODE_INTER_MV_FOUR*/
+      {
+          746, 3378, 8757,13083,16157,18559,20512,22288,
+        24157,26012,26540,27849,27933,30219,30296,33172
+      },
+      /*Cr  qi=42  OC_MODE_GOLDEN_NOMV*/
+      {
+          913, 3044, 7018,10221,11253,12283,13750,13744,
+        14001,13822,14863,15038,15396,16272,16736,17450
+      },
+      /*Cr  qi=42  OC_MODE_GOLDEN_MV*/
+      {
+          839, 3717, 8666,12972,15255,16522,18611,18345,
+        18375,16574,15247,15977,16319,18232,17594,20370
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=43  OC_MODE_INTRA*/
+      {
+         3289, 7190,11308,13678,15948,17875,19595,20968,
+        22674,24337,25596,26402,27552,28744,29761,37437
+      },
+      /*Y'  qi=43  OC_MODE_INTER_NOMV*/
+      {
+          920, 4885,10742,15198,18260,20802,22898,24823,
+        26750,28425,29898,31528,32807,34000,35441,43432
+      },
+      /*Y'  qi=43  OC_MODE_INTER_MV*/
+      {
+         1444, 5464,10577,14543,17567,19922,22016,23917,
+        25650,27229,28692,30015,31227,32344,33358,37112
+      },
+      /*Y'  qi=43  OC_MDOE_INTER_MV_LAST*/
+      {
+         1596, 6088,10589,14660,17474,19763,21888,23870,
+        25745,27474,29134,30643,32055,33255,34450,39096
+      },
+      /*Y'  qi=43  OC_MODE_INTER_MV_LAST2*/
+      {
+          889, 6113,10805,14945,17973,20236,22221,24090,
+        25927,27645,29263,30714,32042,33505,34374,40119
+      },
+      /*Y'  qi=43  OC_MODE_INTER_MV_FOUR*/
+      {
+          610, 5018,10423,14524,17556,20010,22163,24125,
+        25975,27714,29305,30718,32030,33224,34310,38588
+      },
+      /*Y'  qi=43  OC_MODE_GOLDEN_NOMV*/
+      {
+          989, 4622,10601,14290,16652,18176,20942,23072,
+        24598,26249,27263,28263,28790,30047,30751,39354
+      },
+      /*Y'  qi=43  OC_MODE_GOLDEN_MV*/
+      {
+          936, 5259,10456,14775,17863,20307,22546,24590,
+        26475,28205,29665,30865,32128,32991,33963,38590
+      }
+    },
+    {
+      /*Cb  qi=43  OC_MODE_INTRA*/
+      {
+         3964,11162,15101,18273,20994,22585,23965,25683,
+        27901,30083,31877,33987,35176,36670,37782,43478
+      },
+      /*Cb  qi=43  OC_MODE_INTER_NOMV*/
+      {
+         1857, 5699,13165,16796,20112,23867,42634,27893,
+        31641,29870,32895,33651,34475,38438,38218,45563
+      },
+      /*Cb  qi=43  OC_MODE_INTER_MV*/
+      {
+         1173, 7972,14315,18055,21768,25955,29360,31582,
+        33297,35717,37523,38787,38302,42543,46508,46181
+      },
+      /*Cb  qi=43  OC_MDOE_INTER_MV_LAST*/
+      {
+         2514, 7581,14648,17897,22094,26197,28700,30278,
+        31283,31683,31803,31740,31196,30213,30693,31046
+      },
+      /*Cb  qi=43  OC_MODE_INTER_MV_LAST2*/
+      {
+         2608, 8727,14634,17555,21147,25209,28124,30664,
+        32413,32722,32947,33898,35312,40505,44275,40899
+      },
+      /*Cb  qi=43  OC_MODE_INTER_MV_FOUR*/
+      {
+         1552, 6326,13866,17635,21637,25633,28931,31619,
+        34457,36461,38180,39796,40973,42336,45427,45612
+      },
+      /*Cb  qi=43  OC_MODE_GOLDEN_NOMV*/
+      {
+         2018, 5733,10777,13637,16966,20475,21357,22113,
+        23806,25481,26490,27254,26495,27089,27029,30628
+      },
+      /*Cb  qi=43  OC_MODE_GOLDEN_MV*/
+      {
+         1868, 7105,14550,17761,21025,23730,24499,25264,
+        25322,26031,26400,26435,26861,27862,27689,31132
+      }
+    },
+    {
+      /*Cr  qi=43  OC_MODE_INTRA*/
+      {
+         1845, 7034,10741,13411,15740,17682,19602,21548,
+        23424,24322,25379,27031,28433,29061,30595,35063
+      },
+      /*Cr  qi=43  OC_MODE_INTER_NOMV*/
+      {
+          888, 3037, 8551,12928,16075,30592,18798,20979,
+        17966,14385, 8278, 8530,13270,13928,11067, 7091
+      },
+      /*Cr  qi=43  OC_MODE_INTER_MV*/
+      {
+          577, 4124, 9828,13266,15601,18148,21124,22739,
+        25448,27437,28391,29280,28867,31830,29954,32198
+      },
+      /*Cr  qi=43  OC_MDOE_INTER_MV_LAST*/
+      {
+         1141, 3842, 9622,14553,17590,19762,21532,21787,
+        21413,19304,18654,17188,16830,17196,17124,16638
+      },
+      /*Cr  qi=43  OC_MODE_INTER_MV_LAST2*/
+      {
+         1259, 4112, 8979,13874,17159,19481,21220,21440,
+        23092,19620,18345,19040,27648,31098,23883,29664
+      },
+      /*Cr  qi=43  OC_MODE_INTER_MV_FOUR*/
+      {
+          826, 3726, 9451,13888,17019,19451,21325,23373,
+        24943,27373,28554,28820,31212,31274,31500,35704
+      },
+      /*Cr  qi=43  OC_MODE_GOLDEN_NOMV*/
+      {
+         1067, 3368, 7355,10756,11713,12924,14326,14266,
+        14471,14726,15227,15529,15560,16123,16747,17327
+      },
+      /*Cr  qi=43  OC_MODE_GOLDEN_MV*/
+      {
+          940, 4114, 9319,13377,15041,16427,17419,16698,
+        17080,16448,16265,16277,16542,17003,16596,17213
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=44  OC_MODE_INTRA*/
+      {
+         3302, 7203,11316,13689,15961,17895,19619,20993,
+        22718,24366,25609,26426,27580,28772,29797,37464
+      },
+      /*Y'  qi=44  OC_MODE_INTER_NOMV*/
+      {
+          934, 4914,10792,15208,18307,20821,22898,24855,
+        26752,28406,30002,31464,32948,34225,35402,43846
+      },
+      /*Y'  qi=44  OC_MODE_INTER_MV*/
+      {
+         1443, 5500,10592,14642,17592,19897,21969,23852,
+        25586,27224,28701,29994,31281,32390,33448,37361
+      },
+      /*Y'  qi=44  OC_MDOE_INTER_MV_LAST*/
+      {
+         1542, 6108,10566,14639,17484,19813,21917,23894,
+        25754,27492,29128,30705,32029,33337,34419,39153
+      },
+      /*Y'  qi=44  OC_MODE_INTER_MV_LAST2*/
+      {
+          847, 6090,10805,15017,18004,20278,22259,24079,
+        25862,27574,29161,30559,31781,33252,34275,39992
+      },
+      /*Y'  qi=44  OC_MODE_INTER_MV_FOUR*/
+      {
+          621, 5022,10452,14537,17580,20025,22169,24146,
+        26031,27771,29381,30763,32094,33265,34382,38594
+      },
+      /*Y'  qi=44  OC_MODE_GOLDEN_NOMV*/
+      {
+          999, 4636,10592,14245,16639,18351,21000,22927,
+        24572,26163,27223,28249,28793,29997,30788,39374
+      },
+      /*Y'  qi=44  OC_MODE_GOLDEN_MV*/
+      {
+          959, 5279,10449,14792,17869,20306,22549,24611,
+        26489,28214,29665,30877,32182,32964,33986,38590
+      }
+    },
+    {
+      /*Cb  qi=44  OC_MODE_INTRA*/
+      {
+         3967,11162,15103,18268,21002,22572,23964,25678,
+        27911,30086,31906,33978,35198,36703,37860,43555
+      },
+      /*Cb  qi=44  OC_MODE_INTER_NOMV*/
+      {
+         1862, 5690,13111,16642,19690,23069,43156,26780,
+        30887,33322,32225,41792,38505,40732,45312,41531
+      },
+      /*Cb  qi=44  OC_MODE_INTER_MV*/
+      {
+         1144, 7847,14476,18440,22162,26319,29548,31638,
+        33454,36166,37629,38729,39270,40684,45352,47358
+      },
+      /*Cb  qi=44  OC_MDOE_INTER_MV_LAST*/
+      {
+         2610, 7422,14595,17880,22048,26121,28583,30238,
+        31296,31803,31887,31716,30673,30824,30165,31046
+      },
+      /*Cb  qi=44  OC_MODE_INTER_MV_LAST2*/
+      {
+         2614, 8796,14670,17573,21242,25360,28258,30781,
+        32710,33629,33595,35158,33264,38495,42782,41029
+      },
+      /*Cb  qi=44  OC_MODE_INTER_MV_FOUR*/
+      {
+         1555, 6302,13841,17582,21558,25600,28896,31648,
+        33817,36520,38013,38770,41130,40770,44940,47200
+      },
+      /*Cb  qi=44  OC_MODE_GOLDEN_NOMV*/
+      {
+         2010, 5771,10766,13440,16909,20345,21304,22065,
+        23899,25434,26388,27407,26477,27298,27086,30781
+      },
+      /*Cb  qi=44  OC_MODE_GOLDEN_MV*/
+      {
+         1871, 7093,14548,17749,20974,23730,24530,25188,
+        25408,25934,26330,26609,26806,27960,27596,31056
+      }
+    },
+    {
+      /*Cr  qi=44  OC_MODE_INTRA*/
+      {
+         1860, 7044,10761,13428,15760,17706,19624,21539,
+        23456,24346,25400,27086,28498,29087,30725,35136
+      },
+      /*Cr  qi=44  OC_MODE_INTER_NOMV*/
+      {
+          895, 3040, 8557,12905,15752,29405,24992,18027,
+        19781,14480, 8067,22613,25163,14079,11615, 6957
+      },
+      /*Cr  qi=44  OC_MODE_INTER_MV*/
+      {
+          569, 3981, 9948,13596,15800,18084,21082,23134,
+        25271,27538,29416,29548,28698,30269,31990,32680
+      },
+      /*Cr  qi=44  OC_MDOE_INTER_MV_LAST*/
+      {
+         1143, 3832, 9633,14498,17621,19758,21602,21783,
+        21382,19396,18273,16667,16719,17220,18122,16418
+      },
+      /*Cr  qi=44  OC_MODE_INTER_MV_LAST2*/
+      {
+         1260, 4139, 9015,13907,17055,19584,21531,21667,
+        23490,19429,18529,18426,27978,29728,25291,22384
+      },
+      /*Cr  qi=44  OC_MODE_INTER_MV_FOUR*/
+      {
+          834, 3723, 9441,13849,16975,19443,21344,23332,
+        25057,27589,28110,28412,30744,31605,31065,36196
+      },
+      /*Cr  qi=44  OC_MODE_GOLDEN_NOMV*/
+      {
+         1066, 3372, 7323,10743,11909,12994,14361,14211,
+        14637,14674,15316,15618,15699,16062,16940,17378
+      },
+      /*Cr  qi=44  OC_MODE_GOLDEN_MV*/
+      {
+          941, 4111, 9307,13348,15075,16470,17369,16644,
+        16987,16287,16196,16268,16524,17029,16407,17212
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=45  OC_MODE_INTRA*/
+      {
+         3618, 7694,11878,14214,16525,18473,20225,21623,
+        23360,25043,26330,27149,28332,29559,30626,38568
+      },
+      /*Y'  qi=45  OC_MODE_INTER_NOMV*/
+      {
+         1035, 5357,11465,15854,19003,21501,23656,25639,
+        27594,29297,30938,32424,33842,34941,36518,45179
+      },
+      /*Y'  qi=45  OC_MODE_INTER_MV*/
+      {
+         1428, 5941,11236,15286,18292,20706,22842,24765,
+        26509,28122,29564,30863,32170,33285,34312,38171
+      },
+      /*Y'  qi=45  OC_MDOE_INTER_MV_LAST*/
+      {
+         1624, 6652,11232,15339,18176,20480,22609,24625,
+        26533,28369,30107,31669,33125,34384,35544,40341
+      },
+      /*Y'  qi=45  OC_MODE_INTER_MV_LAST2*/
+      {
+          908, 6551,11469,15680,18721,21034,23030,24932,
+        26783,28579,30212,31649,33073,34452,35440,41410
+      },
+      /*Y'  qi=45  OC_MODE_INTER_MV_FOUR*/
+      {
+          663, 5408,11070,15184,18276,20762,22942,24941,
+        26842,28604,30212,31658,33005,34246,35372,39776
+      },
+      /*Y'  qi=45  OC_MODE_GOLDEN_NOMV*/
+      {
+         1036, 4985,11105,14745,17242,19084,21728,23656,
+        25679,26865,28122,29203,29706,30722,31658,40624
+      },
+      /*Y'  qi=45  OC_MODE_GOLDEN_MV*/
+      {
+         1017, 5638,11042,15498,18590,21076,23379,25440,
+        27365,29100,30592,31861,33171,33988,34994,39750
+      }
+    },
+    {
+      /*Cb  qi=45  OC_MODE_INTRA*/
+      {
+         4777,12393,16449,19624,22470,24160,25583,27369,
+        29829,32002,33813,36099,37426,38730,39917,46172
+      },
+      /*Cb  qi=45  OC_MODE_INTER_NOMV*/
+      {
+         2363, 6803,14595,18020,21590,24285,45978,42368,
+        38502,34553,33116,36069,39930,45142,40395,47738
+      },
+      /*Cb  qi=45  OC_MODE_INTER_MV*/
+      {
+         1470, 9351,15587,19387,23205,27617,31304,33825,
+        35985,38250,40048,41204,41553,45963,48442,49882
+      },
+      /*Cb  qi=45  OC_MDOE_INTER_MV_LAST*/
+      {
+         3373, 8778,16070,19322,23709,28094,30775,32440,
+        33647,33849,34067,34075,32594,33100,32775,33239
+      },
+      /*Cb  qi=45  OC_MODE_INTER_MV_LAST2*/
+      {
+         3291, 9969,16065,19074,22833,27088,30137,32659,
+        35108,36255,37279,36357,39942,44854,45931,48298
+      },
+      /*Cb  qi=45  OC_MODE_INTER_MV_FOUR*/
+      {
+         1945, 7431,15253,19094,23353,27683,31043,33877,
+        36675,38613,40273,41306,42988,44300,49010,49087
+      },
+      /*Cb  qi=45  OC_MODE_GOLDEN_NOMV*/
+      {
+         2446, 6805,11895,14139,17923,21575,22614,23828,
+        25500,27463,28004,28752,28249,28994,28962,32895
+      },
+      /*Cb  qi=45  OC_MODE_GOLDEN_MV*/
+      {
+         2315, 8198,15952,19288,22642,25724,26423,27237,
+        27396,27962,28103,28795,28314,29636,29410,33471
+      }
+    },
+    {
+      /*Cr  qi=45  OC_MODE_INTRA*/
+      {
+         2161, 7808,11646,14401,16807,18802,20807,22842,
+        24743,25664,26733,28437,29974,30465,32026,36670
+      },
+      /*Cr  qi=45  OC_MODE_INTER_NOMV*/
+      {
+         1116, 3670, 9743,13835,16525,30454,36404,23131,
+        21962,13590, 8567, 9727,17055,15453,14277, 8225
+      },
+      /*Cr  qi=45  OC_MODE_INTER_MV*/
+      {
+          750, 4917,10839,14292,16804,19625,22367,24326,
+        27406,28054,29071,31502,31134,32962,33327,34408
+      },
+      /*Cr  qi=45  OC_MDOE_INTER_MV_LAST*/
+      {
+         1490, 4481,10620,15611,18782,21105,22864,23232,
+        22722,20518,19609,18577,18072,18370,19646,17753
+      },
+      /*Cr  qi=45  OC_MODE_INTER_MV_LAST2*/
+      {
+         1568, 4762, 9913,14918,18203,20993,22586,23226,
+        24760,20496,19420,21934,22816,30592,32409,29056
+      },
+      /*Cr  qi=45  OC_MODE_INTER_MV_FOUR*/
+      {
+         1048, 4382,10503,15046,18249,20759,22854,24706,
+        26508,28048,29254,30771,31422,32113,33912,36501
+      },
+      /*Cr  qi=45  OC_MODE_GOLDEN_NOMV*/
+      {
+         1292, 4017, 8109,11521,12827,13902,15247,15512,
+        15588,15916,16054,16244,16821,17101,17696,18495
+      },
+      /*Cr  qi=45  OC_MODE_GOLDEN_MV*/
+      {
+         1173, 4794,10313,14434,16063,17568,18828,18155,
+        18191,17488,17168,17656,17596,17853,17665,18369
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=46  OC_MODE_INTRA*/
+      {
+         3629, 7709,11892,14231,16547,18502,20258,21647,
+        23386,25058,26345,27170,28351,29576,30628,38557
+      },
+      /*Y'  qi=46  OC_MODE_INTER_NOMV*/
+      {
+         1049, 5374,11480,15853,19030,21503,23647,25653,
+        27602,29297,30879,32418,33862,35157,36397,45512
+      },
+      /*Y'  qi=46  OC_MODE_INTER_MV*/
+      {
+         1419, 5913,11225,15288,18282,20684,22801,24738,
+        26500,28125,29573,30873,32187,33302,34330,38150
+      },
+      /*Y'  qi=46  OC_MDOE_INTER_MV_LAST*/
+      {
+         1815, 6696,11313,15399,18199,20444,22566,24594,
+        26502,28320,30083,31671,33091,34326,35518,40362
+      },
+      /*Y'  qi=46  OC_MODE_INTER_MV_LAST2*/
+      {
+          926, 6415,11480,15691,18710,21030,23039,24989,
+        26808,28609,30329,31743,33127,34335,35429,41199
+      },
+      /*Y'  qi=46  OC_MODE_INTER_MV_FOUR*/
+      {
+          675, 5447,11076,15190,18293,20787,22957,24955,
+        26842,28617,30248,31655,33048,34237,35403,39808
+      },
+      /*Y'  qi=46  OC_MODE_GOLDEN_NOMV*/
+      {
+         1045, 5001,11126,14736,17229,19445,21829,23707,
+        25770,27020,28229,29430,29869,30763,31781,40598
+      },
+      /*Y'  qi=46  OC_MODE_GOLDEN_MV*/
+      {
+         1032, 5609,11073,15522,18620,21092,23404,25463,
+        27371,29112,30599,31877,33172,33995,35025,39799
+      }
+    },
+    {
+      /*Cb  qi=46  OC_MODE_INTRA*/
+      {
+         4770,12386,16447,19621,22463,24154,25567,27365,
+        29811,32009,33803,36062,37426,38810,39879,46087
+      },
+      /*Cb  qi=46  OC_MODE_INTER_NOMV*/
+      {
+         2357, 6807,14668,18271,21361,24442,45964,29751,
+        36203,44279,33683,34801,38994,42228,46406,46182
+      },
+      /*Cb  qi=46  OC_MODE_INTER_MV*/
+      {
+         1524, 9216,15698,19435,23186,27752,31351,31669,
+        35141,37486,39578,42469,43135,45545,49579,50148
+      },
+      /*Cb  qi=46  OC_MDOE_INTER_MV_LAST*/
+      {
+         3426, 9238,16030,19298,23696,27985,30693,32375,
+        33374,34001,33831,33837,32684,33152,32364,33198
+      },
+      /*Cb  qi=46  OC_MODE_INTER_MV_LAST2*/
+      {
+         3289,10029,16057,19090,22989,26953,30095,32959,
+        34810,35331,35401,37250,37604,40471,41172,46153
+      },
+      /*Cb  qi=46  OC_MODE_INTER_MV_FOUR*/
+      {
+         1951, 7441,15281,19099,23335,27573,31107,33918,
+        36503,38591,40391,41614,43099,43183,48565,49169
+      },
+      /*Cb  qi=46  OC_MODE_GOLDEN_NOMV*/
+      {
+         2439, 6826,11940,14027,17834,21519,22512,23690,
+        25494,27199,28051,28812,28202,28991,29035,32794
+      },
+      /*Cb  qi=46  OC_MODE_GOLDEN_MV*/
+      {
+         2297, 8214,15959,19296,22651,25721,26336,27232,
+        27224,27638,28036,28654,28427,29547,28919,33329
+      }
+    },
+    {
+      /*Cr  qi=46  OC_MODE_INTRA*/
+      {
+         2196, 7820,11650,14400,16806,18811,20813,22845,
+        24780,25657,26726,28429,29995,30496,31982,36695
+      },
+      /*Cr  qi=46  OC_MODE_INTER_NOMV*/
+      {
+         1122, 3681, 9781,13876,16609,30310,22373,22233,
+        19349,12108, 8165,13057,15518,13802, 9205, 8244
+      },
+      /*Cr  qi=46  OC_MODE_INTER_MV*/
+      {
+          774, 4843,10839,14300,16721,19561,22035,24232,
+        28025,29490,31490,31310,30890,33592,34190,33714
+      },
+      /*Cr  qi=46  OC_MDOE_INTER_MV_LAST*/
+      {
+         1588, 4521,10637,15640,18757,21139,22870,23091,
+        22671,20567,19623,18745,17770,18267,19153,17704
+      },
+      /*Cr  qi=46  OC_MODE_INTER_MV_LAST2*/
+      {
+         1548, 4798, 9932,15073,18146,20615,22667,23138,
+        24712,20925,19784,22758,28769,29476,36005,28816
+      },
+      /*Cr  qi=46  OC_MODE_INTER_MV_FOUR*/
+      {
+         1059, 4375,10512,15057,18277,20767,22812,24710,
+        26458,28366,29067,30329,32154,32929,31290,38090
+      },
+      /*Cr  qi=46  OC_MODE_GOLDEN_NOMV*/
+      {
+         1289, 4023, 8162,11280,12776,13848,15320,15469,
+        15691,15998,16041,16235,16806,17089,17531,18554
+      },
+      /*Cr  qi=46  OC_MODE_GOLDEN_MV*/
+      {
+         1174, 4796,10334,14439,16053,17571,18668,18085,
+        18158,17572,17048,17341,17764,18175,17400,18377
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=47  OC_MODE_INTRA*/
+      {
+         4730, 9169,13387,15726,18119,20164,21984,23445,
+        25245,26940,28240,29092,30317,31577,32703,41087
+      },
+      /*Y'  qi=47  OC_MODE_INTER_NOMV*/
+      {
+         1637, 6754,13086,17449,20720,23291,25565,27679,
+        29734,31474,33221,34598,36295,37292,38794,47292
+      },
+      /*Y'  qi=47  OC_MODE_INTER_MV*/
+      {
+         1887, 7379,12801,16928,20013,22466,24619,26588,
+        28368,30037,31497,32867,34174,35312,36366,40413
+      },
+      /*Y'  qi=47  OC_MDOE_INTER_MV_LAST*/
+      {
+         2325, 8258,12863,16948,19873,22310,24559,26643,
+        28579,30373,32117,33710,35154,36455,37687,42883
+      },
+      /*Y'  qi=47  OC_MODE_INTER_MV_LAST2*/
+      {
+         1508, 8285,13060,17322,20413,22865,25036,27006,
+        28825,30524,32076,33442,34799,36226,37474,43806
+      },
+      /*Y'  qi=47  OC_MODE_INTER_MV_FOUR*/
+      {
+         1038, 6684,12664,16810,20019,22639,24913,27002,
+        28964,30739,32366,33791,35177,36427,37589,42215
+      },
+      /*Y'  qi=47  OC_MODE_GOLDEN_NOMV*/
+      {
+         1547, 6321,12645,16274,18837,21201,23682,25754,
+        27800,29272,30511,31368,32191,33319,33924,43252
+      },
+      /*Y'  qi=47  OC_MODE_GOLDEN_MV*/
+      {
+         1523, 6913,12670,17190,20345,22931,25301,27470,
+        29416,31172,32571,33906,35171,36075,37226,42175
+      }
+    },
+    {
+      /*Cb  qi=47  OC_MODE_INTRA*/
+      {
+         5200,13068,17255,20518,23455,25164,26598,28508,
+        30888,33185,35074,37320,38772,40057,41260,47457
+      },
+      /*Cb  qi=47  OC_MODE_INTER_NOMV*/
+      {
+         2677, 7474,15617,19199,23189,27234,44183,45184,
+        35324,38324,35110,36973,39301,43984,44397,51349
+      },
+      /*Cb  qi=47  OC_MODE_INTER_MV*/
+      {
+         1731, 9719,16481,20376,24216,28992,32626,35409,
+        36887,39352,41655,42609,43601,46408,49854,53638
+      },
+      /*Cb  qi=47  OC_MDOE_INTER_MV_LAST*/
+      {
+         3881, 9507,16800,20128,24733,29206,31961,33691,
+        34839,35289,35279,35328,33971,34397,33776,34447
+      },
+      /*Cb  qi=47  OC_MODE_INTER_MV_LAST2*/
+      {
+         3607,10756,16906,20049,24018,28440,31811,33930,
+        36275,37793,38112,38799,38238,45909,44646,52001
+      },
+      /*Cb  qi=47  OC_MODE_INTER_MV_FOUR*/
+      {
+         2181, 7976,16001,19912,24284,28627,32274,35179,
+        37841,40179,42294,43503,45145,44897,50907,51379
+      },
+      /*Cb  qi=47  OC_MODE_GOLDEN_NOMV*/
+      {
+         2783, 7433,12476,14577,18464,22064,23360,24597,
+        26681,27951,29187,29832,29240,29957,29632,33888
+      },
+      /*Cb  qi=47  OC_MODE_GOLDEN_MV*/
+      {
+         2575, 8801,16712,20121,23652,26795,27403,28257,
+        28141,28726,29195,29641,29626,30999,30721,34542
+      }
+    },
+    {
+      /*Cr  qi=47  OC_MODE_INTRA*/
+      {
+         2407, 8398,12393,15229,17711,19704,21795,23916,
+        25887,26813,27913,29720,31073,31733,33403,38050
+      },
+      /*Cr  qi=47  OC_MODE_INTER_NOMV*/
+      {
+         1297, 4218,10634,15021,17893,34880,38592,26482,
+        22476,12298, 9860,14926,17042,15898,10228, 8690
+      },
+      /*Cr  qi=47  OC_MODE_INTER_MV*/
+      {
+          923, 5330,11718,15299,17706,20435,23648,25455,
+        28634,31893,33078,33426,32688,34856,33960,35533
+      },
+      /*Cr  qi=47  OC_MDOE_INTER_MV_LAST*/
+      {
+         1815, 5023,11582,16674,19812,22284,24034,24276,
+        23770,21451,20359,19564,18661,19471,20062,18508
+      },
+      /*Cr  qi=47  OC_MODE_INTER_MV_LAST2*/
+      {
+         1887, 5423,10774,16361,19540,22346,24257,24245,
+        26270,22601,22188,24354,31443,31616,34432,33011
+      },
+      /*Cr  qi=47  OC_MODE_INTER_MV_FOUR*/
+      {
+         1200, 4902,11362,15998,19329,21885,24020,26038,
+        27911,29644,31069,32488,32706,34163,33736,38724
+      },
+      /*Cr  qi=47  OC_MODE_GOLDEN_NOMV*/
+      {
+         1493, 4532, 8580,11789,13337,14681,15964,16289,
+        16359,16452,17025,16886,17725,18041,18338,19060
+      },
+      /*Cr  qi=47  OC_MODE_GOLDEN_MV*/
+      {
+         1346, 5358,11205,15312,16956,18676,19561,18900,
+        18961,18586,18118,18545,18730,18984,18611,19708
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=48  OC_MODE_INTRA*/
+      {
+         4879, 9394,13622,15956,18359,20397,22239,23727,
+        25525,27234,28553,29421,30657,31944,33064,41578
+      },
+      /*Y'  qi=48  OC_MODE_INTER_NOMV*/
+      {
+         1664, 6952,13322,17680,20964,23583,25889,28065,
+        30152,31986,33582,35354,36565,38026,39299,47964
+      },
+      /*Y'  qi=48  OC_MODE_INTER_MV*/
+      {
+         1936, 7615,12986,17128,20178,22632,24867,26915,
+        28764,30437,31942,33318,34662,35788,36914,40982
+      },
+      /*Y'  qi=48  OC_MDOE_INTER_MV_LAST*/
+      {
+         2538, 8636,13261,17341,20281,22716,24986,27078,
+        28983,30838,32537,34097,35502,36906,38187,43390
+      },
+      /*Y'  qi=48  OC_MODE_INTER_MV_LAST2*/
+      {
+         1437, 8113,13306,17540,20699,23188,25334,27388,
+        29320,31161,32742,34095,35283,36732,38159,44466
+      },
+      /*Y'  qi=48  OC_MODE_INTER_MV_FOUR*/
+      {
+         1055, 6908,12891,17040,20258,22917,25237,27347,
+        29318,31143,32775,34231,35606,36899,38075,42762
+      },
+      /*Y'  qi=48  OC_MODE_GOLDEN_NOMV*/
+      {
+         1582, 6494,12877,16505,19074,21439,23890,26036,
+        28222,29561,30848,31764,32589,33483,34491,43788
+      },
+      /*Y'  qi=48  OC_MODE_GOLDEN_MV*/
+      {
+         1563, 7057,12942,17445,20618,23215,25664,27822,
+        29771,31566,33030,34365,35584,36516,37647,42770
+      }
+    },
+    {
+      /*Cb  qi=48  OC_MODE_INTRA*/
+      {
+         5287,13251,17483,20726,23685,25428,26836,28748,
+        31163,33470,35409,37691,39151,40522,41661,47824
+      },
+      /*Cb  qi=48  OC_MODE_INTER_NOMV*/
+      {
+         2733, 7649,15790,19547,23393,26745,44687,33429,
+        34634,35233,38946,36687,39940,48864,44800,55222
+      },
+      /*Cb  qi=48  OC_MODE_INTER_MV*/
+      {
+         1902, 9923,16822,20658,24554,29361,33095,35766,
+        37385,39565,42311,42371,44481,46737,51108,55424
+      },
+      /*Cb  qi=48  OC_MDOE_INTER_MV_LAST*/
+      {
+         3957,10394,17062,20370,25123,29736,32418,34070,
+        35372,35543,35424,35631,34588,34968,33869,34804
+      },
+      /*Cb  qi=48  OC_MODE_INTER_MV_LAST2*/
+      {
+         3657,10905,17160,20309,24026,28241,32017,37442,
+        37405,41344,37864,38926,41875,46621,43949,52480
+      },
+      /*Cb  qi=48  OC_MODE_INTER_MV_FOUR*/
+      {
+         2216, 8204,16322,20220,24624,29040,32654,35557,
+        38477,40434,41705,43662,46704,45342,51120,52149
+      },
+      /*Cb  qi=48  OC_MODE_GOLDEN_NOMV*/
+      {
+         2820, 7587,12603,14782,18757,22390,23905,24854,
+        26748,28208,29640,30002,29438,30067,30077,34131
+      },
+      /*Cb  qi=48  OC_MODE_GOLDEN_MV*/
+      {
+         2599, 8991,16990,20415,23887,26983,27947,28621,
+        28766,29207,29403,29960,30171,31153,30549,34897
+      }
+    },
+    {
+      /*Cr  qi=48  OC_MODE_INTRA*/
+      {
+         2412, 8407,12392,15232,17703,19703,21798,23936,
+        25904,26868,27799,29676,31093,31630,33413,38129
+      },
+      /*Cr  qi=48  OC_MODE_INTER_NOMV*/
+      {
+         1300, 4219,10686,15171,18067,20458,34720,23178,
+        23074,13556,10108,13796,19395,16425,12114, 8993
+      },
+      /*Cr  qi=48  OC_MODE_INTER_MV*/
+      {
+          985, 5299,11672,15333,18104,20968,23798,25722,
+        27979,30311,31122,32800,32918,34221,33294,35616
+      },
+      /*Cr  qi=48  OC_MDOE_INTER_MV_LAST*/
+      {
+         1984, 5132,11475,16856,19802,22229,24024,24370,
+        23619,21436,20360,19365,19242,19227,20418,18369
+      },
+      /*Cr  qi=48  OC_MODE_INTER_MV_LAST2*/
+      {
+         1815, 5356,10766,16075,19527,22055,23832,23954,
+        26195,21376,20645,22591,32992,34279,26112,32256
+      },
+      /*Cr  qi=48  OC_MODE_INTER_MV_FOUR*/
+      {
+         1209, 4891,11379,16057,19358,21842,24087,25855,
+        27800,30102,30844,31684,32802,34478,35500,38822
+      },
+      /*Cr  qi=48  OC_MODE_GOLDEN_NOMV*/
+      {
+         1494, 4538, 8583,11745,13335,14731,15962,16339,
+        16273,16525,16967,16829,17490,17967,18397,18917
+      },
+      /*Cr  qi=48  OC_MODE_GOLDEN_MV*/
+      {
+         1341, 5361,11196,15273,16980,18660,19505,19003,
+        18926,18336,18016,18279,18758,18884,18784,19326
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=49  OC_MODE_INTRA*/
+      {
+         4881, 9394,13621,15953,18353,20399,22238,23725,
+        25530,27238,28555,29425,30656,31944,33076,41598
+      },
+      /*Y'  qi=49  OC_MODE_INTER_NOMV*/
+      {
+         1664, 6952,13325,17678,20958,23581,25883,28060,
+        30119,31921,33617,35146,36518,38117,39204,48627
+      },
+      /*Y'  qi=49  OC_MODE_INTER_MV*/
+      {
+         1923, 7628,12984,17132,20182,22636,24866,26915,
+        28773,30440,31948,33327,34645,35791,36914,41014
+      },
+      /*Y'  qi=49  OC_MDOE_INTER_MV_LAST*/
+      {
+         2511, 8639,13263,17342,20282,22718,24986,27083,
+        28986,30842,32527,34097,35522,36932,38168,43403
+      },
+      /*Y'  qi=49  OC_MODE_INTER_MV_LAST2*/
+      {
+         1434, 8104,13303,17539,20702,23186,25336,27375,
+        29335,31133,32711,34205,35300,36727,37960,44375
+      },
+      /*Y'  qi=49  OC_MODE_INTER_MV_FOUR*/
+      {
+         1055, 6908,12893,17041,20258,22915,25237,27347,
+        29319,31148,32766,34239,35606,36908,38092,42769
+      },
+      /*Y'  qi=49  OC_MODE_GOLDEN_NOMV*/
+      {
+         1583, 6495,12878,16506,19072,21441,23880,26017,
+        28273,29554,30832,31860,32586,33531,34520,43815
+      },
+      /*Y'  qi=49  OC_MODE_GOLDEN_MV*/
+      {
+         1565, 7059,12938,17446,20615,23221,25664,27826,
+        29772,31583,33034,34369,35605,36532,37657,42771
+      }
+    },
+    {
+      /*Cb  qi=49  OC_MODE_INTRA*/
+      {
+         5288,13256,17482,20726,23691,25434,26862,28770,
+        31165,33422,35384,37687,39069,40504,41614,47887
+      },
+      /*Cb  qi=49  OC_MODE_INTER_NOMV*/
+      {
+         2733, 7647,15794,19550,23432,26831,44687,36584,
+        37631,35409,37609,36976,37783,47403,42347,56087
+      },
+      /*Cb  qi=49  OC_MODE_INTER_MV*/
+      {
+         1903, 9931,16816,20661,24585,29349,33030,35485,
+        37467,39441,42259,42727,43914,47935,51269,55437
+      },
+      /*Cb  qi=49  OC_MDOE_INTER_MV_LAST*/
+      {
+         3960,10390,17063,20366,25144,29640,32413,34090,
+        35423,35640,35281,35957,34448,35047,34009,34820
+      },
+      /*Cb  qi=49  OC_MODE_INTER_MV_LAST2*/
+      {
+         3644,10901,17155,20309,24111,28343,31979,35084,
+        37792,40149,38167,39346,41952,47019,44453,53363
+      },
+      /*Cb  qi=49  OC_MODE_INTER_MV_FOUR*/
+      {
+         2215, 8203,16322,20222,24637,29031,32599,35511,
+        38536,40779,42099,43932,45720,44593,51653,52058
+      },
+      /*Cb  qi=49  OC_MODE_GOLDEN_NOMV*/
+      {
+         2819, 7583,12604,14786,18747,22260,23819,24763,
+        26634,28156,29624,29914,29406,29984,30079,34169
+      },
+      /*Cb  qi=49  OC_MODE_GOLDEN_MV*/
+      {
+         2599, 8990,16991,20415,23924,26969,27980,28590,
+        28739,29289,29443,29912,30383,31185,30685,34921
+      }
+    },
+    {
+      /*Cr  qi=49  OC_MODE_INTRA*/
+      {
+         2413, 8408,12397,15238,17709,19713,21800,23931,
+        25890,26850,27775,29671,31112,31721,33416,38152
+      },
+      /*Cr  qi=49  OC_MODE_INTER_NOMV*/
+      {
+         1299, 4222,10695,15007,17734,20428,34720,22770,
+        22189,12874, 9584,13159,17965,14891,11490, 8920
+      },
+      /*Cr  qi=49  OC_MODE_INTER_MV*/
+      {
+          983, 5306,11678,15341,18038,20981,23653,25531,
+        28434,30209,32888,33479,32522,35173,33019,36252
+      },
+      /*Cr  qi=49  OC_MDOE_INTER_MV_LAST*/
+      {
+         1986, 5134,11491,16851,19804,22270,24032,24366,
+        23608,21302,20330,19614,18926,19106,20048,18341
+      },
+      /*Cr  qi=49  OC_MODE_INTER_MV_LAST2*/
+      {
+         1819, 5355,10735,16143,19463,22134,24253,24031,
+        25946,21850,20617,23022,33344,30144,25984,32256
+      },
+      /*Cr  qi=49  OC_MODE_INTER_MV_FOUR*/
+      {
+         1209, 4891,11382,16046,19387,21863,24051,25942,
+        27814,29879,31268,31786,33486,34532,34788,38546
+      },
+      /*Cr  qi=49  OC_MODE_GOLDEN_NOMV*/
+      {
+         1494, 4537, 8586,11738,13265,14710,15869,16211,
+        16291,16433,16939,16921,17536,17974,18516,19126
+      },
+      /*Cr  qi=49  OC_MODE_GOLDEN_MV*/
+      {
+         1343, 5362,11194,15285,17012,18702,19490,18977,
+        18917,18377,17984,18180,18763,18949,18767,19495
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=50  OC_MODE_INTRA*/
+      {
+         5361,10126,14415,16733,19177,21252,23133,24652,
+        26492,28207,29568,30476,31754,33088,34269,43215
+      },
+      /*Y'  qi=50  OC_MODE_INTER_NOMV*/
+      {
+         1830, 7669,14137,18486,21857,24539,26945,29192,
+        31319,33139,34792,36547,37950,39746,40984,49289
+      },
+      /*Y'  qi=50  OC_MODE_INTER_MV*/
+      {
+         2588, 8854,14019,18093,21365,23911,26080,28129,
+        30117,32045,33856,35359,36859,38147,39388,45274
+      },
+      /*Y'  qi=50  OC_MDOE_INTER_MV_LAST*/
+      {
+         2354, 9213,14138,18207,21174,23629,25948,28111,
+        30084,31987,33765,35395,36929,38356,39672,45171
+      },
+      /*Y'  qi=50  OC_MODE_INTER_MV_LAST2*/
+      {
+         1781, 9086,14067,18281,21464,23997,26227,28292,
+        30210,31916,33487,34864,36238,37282,38348,43573
+      },
+      /*Y'  qi=50  OC_MODE_INTER_MV_FOUR*/
+      {
+         1148, 7446,13731,17944,21224,23925,26295,28463,
+        30450,32273,33949,35454,36935,38280,39519,43944
+      },
+      /*Y'  qi=50  OC_MODE_GOLDEN_NOMV*/
+      {
+         1680, 7032,13567,17265,19843,22271,24900,27135,
+        29197,30719,32131,32949,33760,34819,35798,45647
+      },
+      /*Y'  qi=50  OC_MODE_GOLDEN_MV*/
+      {
+         1684, 7654,13760,18383,21586,24276,26771,29027,
+        31094,32836,34481,35825,37178,38090,39337,44599
+      }
+    },
+    {
+      /*Cb  qi=50  OC_MODE_INTRA*/
+      {
+         6275,14635,19082,22443,25609,27411,28891,30882,
+        33423,35766,37844,40263,41724,43266,44505,50809
+      },
+      /*Cb  qi=50  OC_MODE_INTER_NOMV*/
+      {
+         3502, 9124,17309,21126,25603,28700,51217,35675,
+        37791,39051,42442,43576,44020,49689,47979,46874
+      },
+      /*Cb  qi=50  OC_MODE_INTER_MV*/
+      {
+         5092,11943,18624,22043,26497,31495,35220,37695,
+        39478,45589,44037,45666,50413,51230,53471,52168
+      },
+      /*Cb  qi=50  OC_MDOE_INTER_MV_LAST*/
+      {
+         4512,11765,18693,22310,27439,32367,35301,37144,
+        38407,38635,38639,38223,37687,37423,36570,37475
+      },
+      /*Cb  qi=50  OC_MODE_INTER_MV_LAST2*/
+      {
+         4664,12154,18649,22073,26062,30622,34443,38591,
+        39906,41062,40690,43313,44522,54357,45872,55895
+      },
+      /*Cb  qi=50  OC_MODE_INTER_MV_FOUR*/
+      {
+         2794, 9527,18000,22218,26936,31815,35675,38821,
+        41868,43774,46081,46738,50080,52904,55980,56297
+      },
+      /*Cb  qi=50  OC_MODE_GOLDEN_NOMV*/
+      {
+         3487, 8883,13741,16033,20425,24003,25929,27256,
+        28972,30839,32135,32360,32126,32681,32536,36978
+      },
+      /*Cb  qi=50  OC_MODE_GOLDEN_MV*/
+      {
+         3290,10312,18697,22346,26157,29546,30344,30914,
+        31400,32074,31842,32387,32868,33523,33661,37513
+      }
+    },
+    {
+      /*Cr  qi=50  OC_MODE_INTRA*/
+      {
+         2796, 9244,13427,16332,18882,20971,23170,25317,
+        27400,28462,29454,31405,32992,33648,35347,40251
+      },
+      /*Cr  qi=50  OC_MODE_INTER_NOMV*/
+      {
+         1615, 5075,12012,16517,19867,22255,31296,23824,
+        25402,16120,12403,33621,29159,32249,31514,28448
+      },
+      /*Cr  qi=50  OC_MODE_INTER_MV*/
+      {
+         2221, 6192,12505,17561,21045,24040,26036,27808,
+        30539,30854,32352,34101,33029,34248,37564,33992
+      },
+      /*Cr  qi=50  OC_MDOE_INTER_MV_LAST*/
+      {
+         2364, 5897,12788,17999,21266,24020,25865,26100,
+        25537,23189,21625,20983,20747,20601,21546,19153
+      },
+      /*Cr  qi=50  OC_MODE_INTER_MV_LAST2*/
+      {
+         2329, 6199,12066,15423,19308,22974,25247,26117,
+        27830,25277,24568,23862,31606,32832,19173,31544
+      },
+      /*Cr  qi=50  OC_MODE_INTER_MV_FOUR*/
+      {
+         1446, 5686,12632,17328,20690,23398,25618,27783,
+        29987,31675,33484,34389,36527,37395,37820,30062
+      },
+      /*Cr  qi=50  OC_MODE_GOLDEN_NOMV*/
+      {
+         1806, 5306, 9443,12574,14453,15988,17155,17452,
+        17527,17914,18244,18407,18877,19416,19935,20595
+      },
+      /*Cr  qi=50  OC_MODE_GOLDEN_MV*/
+      {
+         1631, 6164,12385,16675,18321,20231,20798,20495,
+        20418,19738,19277,19499,19958,20434,19564,20920
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=51  OC_MODE_INTRA*/
+      {
+         5361,10126,14415,16733,19177,21252,23133,24652,
+        26492,28207,29568,30476,31754,33088,34269,43215
+      },
+      /*Y'  qi=51  OC_MODE_INTER_NOMV*/
+      {
+         1830, 7669,14137,18486,21857,24539,26945,29192,
+        31319,33139,34792,36547,37950,39746,40984,49289
+      },
+      /*Y'  qi=51  OC_MODE_INTER_MV*/
+      {
+         2588, 8854,14019,18093,21365,23911,26080,28129,
+        30117,32045,33856,35359,36859,38147,39388,45274
+      },
+      /*Y'  qi=51  OC_MDOE_INTER_MV_LAST*/
+      {
+         2354, 9213,14138,18207,21174,23629,25948,28111,
+        30084,31987,33765,35395,36929,38356,39672,45171
+      },
+      /*Y'  qi=51  OC_MODE_INTER_MV_LAST2*/
+      {
+         1781, 9086,14067,18281,21464,23997,26227,28292,
+        30210,31916,33487,34864,36238,37282,38348,43573
+      },
+      /*Y'  qi=51  OC_MODE_INTER_MV_FOUR*/
+      {
+         1148, 7446,13731,17944,21224,23925,26295,28463,
+        30450,32273,33949,35454,36935,38280,39519,43944
+      },
+      /*Y'  qi=51  OC_MODE_GOLDEN_NOMV*/
+      {
+         1680, 7032,13567,17265,19843,22271,24900,27135,
+        29197,30719,32131,32949,33760,34819,35798,45647
+      },
+      /*Y'  qi=51  OC_MODE_GOLDEN_MV*/
+      {
+         1684, 7654,13760,18383,21586,24276,26771,29027,
+        31094,32836,34481,35825,37178,38090,39337,44599
+      }
+    },
+    {
+      /*Cb  qi=51  OC_MODE_INTRA*/
+      {
+         6275,14635,19082,22443,25609,27411,28891,30882,
+        33423,35766,37844,40263,41724,43266,44505,50809
+      },
+      /*Cb  qi=51  OC_MODE_INTER_NOMV*/
+      {
+         3502, 9124,17309,21126,25603,28700,51217,35675,
+        37791,39051,42442,43576,44020,49689,47979,46874
+      },
+      /*Cb  qi=51  OC_MODE_INTER_MV*/
+      {
+         5092,11943,18624,22043,26497,31495,35220,37695,
+        39478,45589,44037,45666,50413,51230,53471,52168
+      },
+      /*Cb  qi=51  OC_MDOE_INTER_MV_LAST*/
+      {
+         4512,11765,18693,22310,27439,32367,35301,37144,
+        38407,38635,38639,38223,37687,37423,36570,37475
+      },
+      /*Cb  qi=51  OC_MODE_INTER_MV_LAST2*/
+      {
+         4664,12154,18649,22073,26062,30622,34443,38591,
+        39906,41062,40690,43313,44522,54357,45872,55895
+      },
+      /*Cb  qi=51  OC_MODE_INTER_MV_FOUR*/
+      {
+         2794, 9527,18000,22218,26936,31815,35675,38821,
+        41868,43774,46081,46738,50080,52904,55980,56297
+      },
+      /*Cb  qi=51  OC_MODE_GOLDEN_NOMV*/
+      {
+         3487, 8883,13741,16033,20425,24003,25929,27256,
+        28972,30839,32135,32360,32126,32681,32536,36978
+      },
+      /*Cb  qi=51  OC_MODE_GOLDEN_MV*/
+      {
+         3290,10312,18697,22346,26157,29546,30344,30914,
+        31400,32074,31842,32387,32868,33523,33661,37513
+      }
+    },
+    {
+      /*Cr  qi=51  OC_MODE_INTRA*/
+      {
+         2796, 9244,13427,16332,18882,20971,23170,25317,
+        27400,28462,29454,31405,32992,33648,35347,40251
+      },
+      /*Cr  qi=51  OC_MODE_INTER_NOMV*/
+      {
+         1615, 5075,12012,16517,19867,22255,31296,23824,
+        25402,16120,12403,33621,29159,32249,31514,28448
+      },
+      /*Cr  qi=51  OC_MODE_INTER_MV*/
+      {
+         2221, 6192,12505,17561,21045,24040,26036,27808,
+        30539,30854,32352,34101,33029,34248,37564,33992
+      },
+      /*Cr  qi=51  OC_MDOE_INTER_MV_LAST*/
+      {
+         2364, 5897,12788,17999,21266,24020,25865,26100,
+        25537,23189,21625,20983,20747,20601,21546,19153
+      },
+      /*Cr  qi=51  OC_MODE_INTER_MV_LAST2*/
+      {
+         2329, 6199,12066,15423,19308,22974,25247,26117,
+        27830,25277,24568,23862,31606,32832,19173,31544
+      },
+      /*Cr  qi=51  OC_MODE_INTER_MV_FOUR*/
+      {
+         1446, 5686,12632,17328,20690,23398,25618,27783,
+        29987,31675,33484,34389,36527,37395,37820,30062
+      },
+      /*Cr  qi=51  OC_MODE_GOLDEN_NOMV*/
+      {
+         1806, 5306, 9443,12574,14453,15988,17155,17452,
+        17527,17914,18244,18407,18877,19416,19935,20595
+      },
+      /*Cr  qi=51  OC_MODE_GOLDEN_MV*/
+      {
+         1631, 6164,12385,16675,18321,20231,20798,20495,
+        20418,19738,19277,19499,19958,20434,19564,20920
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=52  OC_MODE_INTRA*/
+      {
+         6942,11991,16457,18879,21454,23664,25677,27337,
+        29250,31064,32508,33477,34840,36279,37573,47403
+      },
+      /*Y'  qi=52  OC_MODE_INTER_NOMV*/
+      {
+         2713, 9544,16191,20730,24399,27375,29921,32262,
+        34455,36337,38148,39941,41531,43352,44834,54542
+      },
+      /*Y'  qi=52  OC_MODE_INTER_MV*/
+      {
+         3061,10561,16064,20393,23669,26399,28758,30909,
+        32895,34700,36347,37845,39331,40676,41895,46387
+      },
+      /*Y'  qi=52  OC_MDOE_INTER_MV_LAST*/
+      {
+         3278,11234,16022,20347,23665,26432,28937,31226,
+        33286,35232,37083,38765,40481,42106,43510,49512
+      },
+      /*Y'  qi=52  OC_MODE_INTER_MV_LAST2*/
+      {
+         2586, 9404,16178,20793,24360,27064,29302,31472,
+        33529,35459,37086,38711,40332,41669,43198,50442
+      },
+      /*Y'  qi=52  OC_MODE_INTER_MV_FOUR*/
+      {
+         1971, 9159,15917,20316,23874,26807,29344,31625,
+        33772,35718,37550,39173,40825,42288,43606,48797
+      },
+      /*Y'  qi=52  OC_MODE_GOLDEN_NOMV*/
+      {
+         2728, 9078,15694,19512,22320,24977,27753,29999,
+        32323,34135,35512,36730,37973,39379,40963,51162
+      },
+      /*Y'  qi=52  OC_MODE_GOLDEN_MV*/
+      {
+         2811, 9650,15823,20601,24155,27078,29706,32086,
+        34196,36070,37745,39181,40696,41610,42919,48703
+      }
+    },
+    {
+      /*Cb  qi=52  OC_MODE_INTRA*/
+      {
+         7001,15640,20268,23732,27068,28932,30519,32606,
+        35300,37860,39882,42553,44256,45890,47586,54469
+      },
+      /*Cb  qi=52  OC_MODE_INTER_NOMV*/
+      {
+         3910,10326,18763,22755,27011,30647,38929,54016,
+        42381,42552,41727,44979,45195,47768,48092,54950
+      },
+      /*Cb  qi=52  OC_MODE_INTER_MV*/
+      {
+         2839,12332,19556,23811,28188,33842,38441,41529,
+        44077,47215,47995,50845,51287,56572,59388,61119
+      },
+      /*Cb  qi=52  OC_MDOE_INTER_MV_LAST*/
+      {
+         5697,11898,20027,23846,29489,34637,37962,39702,
+        41208,41526,41673,41743,40312,40658,39562,40304
+      },
+      /*Cb  qi=52  OC_MODE_INTER_MV_LAST2*/
+      {
+         4898,12851,20173,23885,28565,33455,37149,42363,
+        43435,46882,45839,50182,47159,57128,54509,56084
+      },
+      /*Cb  qi=52  OC_MODE_INTER_MV_FOUR*/
+      {
+         3253,10302,19227,23580,28576,33668,37929,41368,
+        44320,47160,48781,51051,52705,55093,58639,58079
+      },
+      /*Cb  qi=52  OC_MODE_GOLDEN_NOMV*/
+      {
+         4100, 9860,14696,16871,21243,25206,27593,29623,
+        31052,33781,35864,37355,36537,36954,36080,39582
+      },
+      /*Cb  qi=52  OC_MODE_GOLDEN_MV*/
+      {
+         3562,11291,19980,23810,27891,31821,32188,33053,
+        33608,34336,34483,35035,35639,36026,35956,40604
+      }
+    },
+    {
+      /*Cr  qi=52  OC_MODE_INTRA*/
+      {
+         3090,10208,14576,17637,20323,22521,24817,27029,
+        29238,30266,31426,33247,35152,35685,37319,42759
+      },
+      /*Cr  qi=52  OC_MODE_INTER_NOMV*/
+      {
+         1913, 6017,13114,17763,20962,23199,37623,28783,
+        25681,16197,27776,34368,31840,22199,17085,30112
+      },
+      /*Cr  qi=52  OC_MODE_INTER_MV*/
+      {
+         1640, 7068,13902,18090,20975,24542,27264,30163,
+        33166,34515,38615,36838,37795,40035,39768,39071
+      },
+      /*Cr  qi=52  OC_MDOE_INTER_MV_LAST*/
+      {
+         2635, 6712,14395,19858,23101,25867,27705,27713,
+        27415,24943,22739,22318,22147,22455,23541,19607
+      },
+      /*Cr  qi=52  OC_MODE_INTER_MV_LAST2*/
+      {
+         2431, 7250,13547,19061,23102,25840,27660,28193,
+        29441,24942,18720,30388,32843,40704,32960,26487
+      },
+      /*Cr  qi=52  OC_MODE_INTER_MV_FOUR*/
+      {
+         1728, 6590,13857,18883,22513,25372,27725,29862,
+        31584,35000,35402,36247,37820,40576,39450,34776
+      },
+      /*Cr  qi=52  OC_MODE_GOLDEN_NOMV*/
+      {
+         2241, 6300,10332,13768,15832,17725,20399,20062,
+        19519,19881,19100,19828,20381,20863,24843,24792
+      },
+      /*Cr  qi=52  OC_MODE_GOLDEN_MV*/
+      {
+         1949, 7029,13637,17827,19809,21670,22736,22379,
+        22373,21740,21140,21895,22367,22341,22664,23133
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=53  OC_MODE_INTRA*/
+      {
+         6942,11991,16457,18879,21454,23664,25677,27337,
+        29250,31064,32508,33477,34840,36279,37573,47403
+      },
+      /*Y'  qi=53  OC_MODE_INTER_NOMV*/
+      {
+         2713, 9544,16191,20730,24399,27375,29921,32262,
+        34455,36337,38148,39941,41531,43352,44834,54542
+      },
+      /*Y'  qi=53  OC_MODE_INTER_MV*/
+      {
+         3061,10561,16064,20393,23669,26399,28758,30909,
+        32895,34700,36347,37845,39331,40676,41895,46387
+      },
+      /*Y'  qi=53  OC_MDOE_INTER_MV_LAST*/
+      {
+         3278,11234,16022,20347,23665,26432,28937,31226,
+        33286,35232,37083,38765,40481,42106,43510,49512
+      },
+      /*Y'  qi=53  OC_MODE_INTER_MV_LAST2*/
+      {
+         2586, 9404,16178,20793,24360,27064,29302,31472,
+        33529,35459,37086,38711,40332,41669,43198,50442
+      },
+      /*Y'  qi=53  OC_MODE_INTER_MV_FOUR*/
+      {
+         1971, 9159,15917,20316,23874,26807,29344,31625,
+        33772,35718,37550,39173,40825,42288,43606,48797
+      },
+      /*Y'  qi=53  OC_MODE_GOLDEN_NOMV*/
+      {
+         2728, 9078,15694,19512,22320,24977,27753,29999,
+        32323,34135,35512,36730,37973,39379,40963,51162
+      },
+      /*Y'  qi=53  OC_MODE_GOLDEN_MV*/
+      {
+         2811, 9650,15823,20601,24155,27078,29706,32086,
+        34196,36070,37745,39181,40696,41610,42919,48703
+      }
+    },
+    {
+      /*Cb  qi=53  OC_MODE_INTRA*/
+      {
+         7001,15640,20268,23732,27068,28932,30519,32606,
+        35300,37860,39882,42553,44256,45890,47586,54469
+      },
+      /*Cb  qi=53  OC_MODE_INTER_NOMV*/
+      {
+         3910,10326,18763,22755,27011,30647,38929,54016,
+        42381,42552,41727,44979,45195,47768,48092,54950
+      },
+      /*Cb  qi=53  OC_MODE_INTER_MV*/
+      {
+         2839,12332,19556,23811,28188,33842,38441,41529,
+        44077,47215,47995,50845,51287,56572,59388,61119
+      },
+      /*Cb  qi=53  OC_MDOE_INTER_MV_LAST*/
+      {
+         5697,11898,20027,23846,29489,34637,37962,39702,
+        41208,41526,41673,41743,40312,40658,39562,40304
+      },
+      /*Cb  qi=53  OC_MODE_INTER_MV_LAST2*/
+      {
+         4898,12851,20173,23885,28565,33455,37149,42363,
+        43435,46882,45839,50182,47159,57128,54509,56084
+      },
+      /*Cb  qi=53  OC_MODE_INTER_MV_FOUR*/
+      {
+         3253,10302,19227,23580,28576,33668,37929,41368,
+        44320,47160,48781,51051,52705,55093,58639,58079
+      },
+      /*Cb  qi=53  OC_MODE_GOLDEN_NOMV*/
+      {
+         4100, 9860,14696,16871,21243,25206,27593,29623,
+        31052,33781,35864,37355,36537,36954,36080,39582
+      },
+      /*Cb  qi=53  OC_MODE_GOLDEN_MV*/
+      {
+         3562,11291,19980,23810,27891,31821,32188,33053,
+        33608,34336,34483,35035,35639,36026,35956,40604
+      }
+    },
+    {
+      /*Cr  qi=53  OC_MODE_INTRA*/
+      {
+         3090,10208,14576,17637,20323,22521,24817,27029,
+        29238,30266,31426,33247,35152,35685,37319,42759
+      },
+      /*Cr  qi=53  OC_MODE_INTER_NOMV*/
+      {
+         1913, 6017,13114,17763,20962,23199,37623,28783,
+        25681,16197,27776,34368,31840,22199,17085,30112
+      },
+      /*Cr  qi=53  OC_MODE_INTER_MV*/
+      {
+         1640, 7068,13902,18090,20975,24542,27264,30163,
+        33166,34515,38615,36838,37795,40035,39768,39071
+      },
+      /*Cr  qi=53  OC_MDOE_INTER_MV_LAST*/
+      {
+         2635, 6712,14395,19858,23101,25867,27705,27713,
+        27415,24943,22739,22318,22147,22455,23541,19607
+      },
+      /*Cr  qi=53  OC_MODE_INTER_MV_LAST2*/
+      {
+         2431, 7250,13547,19061,23102,25840,27660,28193,
+        29441,24942,18720,30388,32843,40704,32960,26487
+      },
+      /*Cr  qi=53  OC_MODE_INTER_MV_FOUR*/
+      {
+         1728, 6590,13857,18883,22513,25372,27725,29862,
+        31584,35000,35402,36247,37820,40576,39450,34776
+      },
+      /*Cr  qi=53  OC_MODE_GOLDEN_NOMV*/
+      {
+         2241, 6300,10332,13768,15832,17725,20399,20062,
+        19519,19881,19100,19828,20381,20863,24843,24792
+      },
+      /*Cr  qi=53  OC_MODE_GOLDEN_MV*/
+      {
+         1949, 7029,13637,17827,19809,21670,22736,22379,
+        22373,21740,21140,21895,22367,22341,22664,23133
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=54  OC_MODE_INTRA*/
+      {
+         6939,11990,16457,18878,21450,23659,25678,27336,
+        29251,31065,32507,33479,34845,36274,37577,47400
+      },
+      /*Y'  qi=54  OC_MODE_INTER_NOMV*/
+      {
+         2714, 9542,16185,20720,24387,27359,29909,32274,
+        34436,36342,38197,39982,41647,43476,44928,54250
+      },
+      /*Y'  qi=54  OC_MODE_INTER_MV*/
+      {
+         3074,10564,16064,20386,23675,26400,28754,30908,
+        32893,34703,36346,37850,39332,40684,41898,46358
+      },
+      /*Y'  qi=54  OC_MDOE_INTER_MV_LAST*/
+      {
+         3269,11234,16023,20348,23666,26432,28939,31218,
+        33282,35230,37084,38756,40494,42097,43535,49507
+      },
+      /*Y'  qi=54  OC_MODE_INTER_MV_LAST2*/
+      {
+         2575, 9412,16189,20801,24356,27057,29317,31482,
+        33498,35456,37086,38697,40176,41632,43225,50519
+      },
+      /*Y'  qi=54  OC_MODE_INTER_MV_FOUR*/
+      {
+         1971, 9160,15916,20315,23876,26807,29343,31631,
+        33772,35714,37551,39181,40814,42286,43618,48781
+      },
+      /*Y'  qi=54  OC_MODE_GOLDEN_NOMV*/
+      {
+         2725, 9089,15716,19548,22368,24993,27748,30002,
+        32304,34062,35559,36764,37966,39313,40934,51150
+      },
+      /*Y'  qi=54  OC_MODE_GOLDEN_MV*/
+      {
+         2813, 9646,15829,20606,24154,27079,29708,32082,
+        34194,36087,37751,39172,40708,41616,42938,48690
+      }
+    },
+    {
+      /*Cb  qi=54  OC_MODE_INTRA*/
+      {
+         7000,15639,20267,23731,27079,28935,30496,32612,
+        35348,37832,39874,42628,44225,45853,47624,54619
+      },
+      /*Cb  qi=54  OC_MODE_INTER_NOMV*/
+      {
+         3915,10331,18770,22716,26688,31032,39280,54016,
+        43067,44141,44586,46656,48242,48233,48662,52872
+      },
+      /*Cb  qi=54  OC_MODE_INTER_MV*/
+      {
+         2835,12328,19552,23794,28180,33859,38359,41700,
+        43980,47825,47205,51052,53495,54940,58546,62077
+      },
+      /*Cb  qi=54  OC_MDOE_INTER_MV_LAST*/
+      {
+         5693,11900,20026,23847,29503,34609,37953,39765,
+        41155,41539,41989,41578,40179,40732,39851,40295
+      },
+      /*Cb  qi=54  OC_MODE_INTER_MV_LAST2*/
+      {
+         4903,12896,20178,23879,28654,33442,36822,41682,
+        44267,45093,45580,48273,48344,51596,56965,53573
+      },
+      /*Cb  qi=54  OC_MODE_INTER_MV_FOUR*/
+      {
+         3251,10299,19221,23581,28570,33719,37991,41428,
+        44370,47240,48805,50934,51936,54540,59269,58003
+      },
+      /*Cb  qi=54  OC_MODE_GOLDEN_NOMV*/
+      {
+         4106, 9870,14715,16873,21676,25221,27562,29680,
+        31095,33664,35938,37511,36796,36684,36510,39624
+      },
+      /*Cb  qi=54  OC_MODE_GOLDEN_MV*/
+      {
+         3568,11287,19977,23806,27891,31789,32200,33087,
+        33661,34285,34478,34806,35537,36018,35758,40676
+      }
+    },
+    {
+      /*Cr  qi=54  OC_MODE_INTRA*/
+      {
+         3089,10206,14573,17636,20324,22528,24827,27012,
+        29227,30299,31497,33252,35183,35703,37458,42839
+      },
+      /*Cr  qi=54  OC_MODE_INTER_NOMV*/
+      {
+         1915, 6014,13097,17803,21132,22981,37623,29168,
+        26427,17279,27776,35296,32160,20701,16395,30112
+      },
+      /*Cr  qi=54  OC_MODE_INTER_MV*/
+      {
+         1643, 7071,13899,18069,21037,24370,27377,29606,
+        33654,34600,38237,37134,36995,40729,39803,39966
+      },
+      /*Cr  qi=54  OC_MDOE_INTER_MV_LAST*/
+      {
+         2635, 6711,14398,19825,23117,25902,27668,27671,
+        27408,25053,22765,22355,21909,22539,24022,19497
+      },
+      /*Cr  qi=54  OC_MODE_INTER_MV_LAST2*/
+      {
+         2433, 7248,13472,19130,23128,25802,27590,28323,
+        29628,25838,18991,30792,32605,40704,32720,25655
+      },
+      /*Cr  qi=54  OC_MODE_INTER_MV_FOUR*/
+      {
+         1728, 6588,13854,18893,22505,25340,27735,29968,
+        31700,34893,35627,36436,38711,40614,37385,34772
+      },
+      /*Cr  qi=54  OC_MODE_GOLDEN_NOMV*/
+      {
+         2243, 6319,10398,13773,15874,17831,20498,20199,
+        19730,20041,19071,19875,20495,21167,24878,24920
+      },
+      /*Cr  qi=54  OC_MODE_GOLDEN_MV*/
+      {
+         1950, 7028,13617,17823,19815,21669,22761,22381,
+        22366,21860,21100,21856,22408,22441,22429,23113
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=55  OC_MODE_INTRA*/
+      {
+         7585,12859,17340,19754,22352,24594,26651,28354,
+        30320,32169,33644,34653,36101,37580,38931,49238
+      },
+      /*Y'  qi=55  OC_MODE_INTER_NOMV*/
+      {
+         3105,10351,16966,21522,25295,28435,31088,33482,
+        35618,37695,39549,41565,43324,45349,46520,56481
+      },
+      /*Y'  qi=55  OC_MODE_INTER_MV*/
+      {
+         3284,11146,16951,21383,24779,27567,29980,32168,
+        34211,36078,37807,39385,40925,42302,43603,48003
+      },
+      /*Y'  qi=55  OC_MDOE_INTER_MV_LAST*/
+      {
+         3538,12132,16985,21382,24751,27551,30132,32514,
+        34675,36760,38747,40499,42257,44002,45477,51573
+      },
+      /*Y'  qi=55  OC_MODE_INTER_MV_LAST2*/
+      {
+         2702,11774,17584,22060,25538,28260,30554,32757,
+        34893,36812,38666,40431,42064,43617,45302,52231
+      },
+      /*Y'  qi=55  OC_MODE_INTER_MV_FOUR*/
+      {
+         2188, 9916,16802,21261,24912,27930,30562,32936,
+        35166,37222,39180,40866,42607,44166,45563,50923
+      },
+      /*Y'  qi=55  OC_MODE_GOLDEN_NOMV*/
+      {
+         2933, 9597,16328,20313,23215,25961,28848,31210,
+        33585,35498,36962,38124,39194,40411,41845,53158
+      },
+      /*Y'  qi=55  OC_MODE_GOLDEN_MV*/
+      {
+         3063,10372,16822,21658,25252,28244,30988,33452,
+        35634,37588,39373,40874,42472,43583,44796,50811
+      }
+    },
+    {
+      /*Cb  qi=55  OC_MODE_INTRA*/
+      {
+         7416,16297,21039,24504,27870,29777,31345,33558,
+        36278,38899,41080,43724,45586,47217,49085,56651
+      },
+      /*Cb  qi=55  OC_MODE_INTER_NOMV*/
+      {
+         4217,11174,19493,23702,28146,32313,38831,38804,
+        42737,42272,44050,50053,49242,52475,48444,55586
+      },
+      /*Cb  qi=55  OC_MODE_INTER_MV*/
+      {
+         3126,13212,20271,24583,28998,35094,39781,43271,
+        45360,49496,50351,52691,53234,59560,61704,61128
+      },
+      /*Cb  qi=55  OC_MDOE_INTER_MV_LAST*/
+      {
+         6190,12780,20942,24785,30629,35826,39366,41367,
+        42680,43065,43422,42682,41616,41920,41311,41791
+      },
+      /*Cb  qi=55  OC_MODE_INTER_MV_LAST2*/
+      {
+         5413,14398,21074,24820,29903,35286,39037,43983,
+        45659,46868,44402,47100,47702,54990,56656,56413
+      },
+      /*Cb  qi=55  OC_MODE_INTER_MV_FOUR*/
+      {
+         3496,10924,20086,24578,29799,35015,39448,42932,
+        46074,48597,50950,50467,55799,54860,62281,61182
+      },
+      /*Cb  qi=55  OC_MODE_GOLDEN_NOMV*/
+      {
+         4228,10369,15068,17132,21717,25401,28176,30286,
+        32341,34567,37443,38820,37404,37780,36951,41108
+      },
+      /*Cb  qi=55  OC_MODE_GOLDEN_MV*/
+      {
+         3682,11981,20881,24812,29116,32852,33284,34239,
+        34720,34839,36051,35597,36435,37083,37247,41844
+      }
+    },
+    {
+      /*Cr  qi=55  OC_MODE_INTRA*/
+      {
+         3575,11455,16124,19346,22204,24571,27013,29342,
+        31740,32916,34184,36135,37848,38617,40319,46117
+      },
+      /*Cr  qi=55  OC_MODE_INTER_NOMV*/
+      {
+         2422, 7403,15067,20396,23597,28400,27352,29243,
+        31348,19303,15051,35360,36689,30081,36568,28259
+      },
+      /*Cr  qi=55  OC_MODE_INTER_MV*/
+      {
+         2053, 8481,15452,19927,23193,26884,29707,33217,
+        37089,38607,42357,40236,41840,43810,43112,43514
+      },
+      /*Cr  qi=55  OC_MDOE_INTER_MV_LAST*/
+      {
+         3370, 7873,16195,22017,25435,28319,30041,30460,
+        29632,27090,25774,24567,24113,24757,23945,21423
+      },
+      /*Cr  qi=55  OC_MODE_INTER_MV_LAST2*/
+      {
+         3306, 8435,15231,21116,25011,28261,30169,30911,
+        32197,28294,28318,25999,32496,40277,37973,30352
+      },
+      /*Cr  qi=55  OC_MODE_INTER_MV_FOUR*/
+      {
+         2167, 7840,15704,21039,24888,27850,30421,32616,
+        34906,37697,38563,39848,42179,43795,43041,33918
+      },
+      /*Cr  qi=55  OC_MODE_GOLDEN_NOMV*/
+      {
+         2680, 7436,11333,15200,17644,19595,22134,22281,
+        21595,21810,21651,22292,23404,23402,25650,27281
+      },
+      /*Cr  qi=55  OC_MODE_GOLDEN_MV*/
+      {
+         2398, 8253,15611,20188,22074,24116,25295,24498,
+        24616,24259,23507,24188,24720,24464,25070,25328
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=56  OC_MODE_INTRA*/
+      {
+         7585,12871,17341,19762,22365,24609,26666,28356,
+        30322,32178,33644,34656,36112,37592,38942,49248
+      },
+      /*Y'  qi=56  OC_MODE_INTER_NOMV*/
+      {
+         3121,10358,16966,21526,25334,28436,31069,33529,
+        35690,37771,39683,41528,43362,45109,47107,57055
+      },
+      /*Y'  qi=56  OC_MODE_INTER_MV*/
+      {
+         3268,11129,16954,21392,24792,27588,30009,32182,
+        34219,36117,37871,39476,41006,42465,43735,48208
+      },
+      /*Y'  qi=56  OC_MDOE_INTER_MV_LAST*/
+      {
+         3564,12171,16992,21380,24753,27554,30144,32560,
+        34769,36829,38755,40542,42318,44082,45553,51566
+      },
+      /*Y'  qi=56  OC_MODE_INTER_MV_LAST2*/
+      {
+         2690,11759,17505,21957,25491,28249,30577,32787,
+        34853,36837,38708,40500,42108,43688,45325,52288
+      },
+      /*Y'  qi=56  OC_MODE_INTER_MV_FOUR*/
+      {
+         2192, 9938,16778,21252,24908,27924,30555,32946,
+        35186,37237,39188,40898,42617,44168,45536,50910
+      },
+      /*Y'  qi=56  OC_MODE_GOLDEN_NOMV*/
+      {
+         2926, 9654,16330,20260,23144,25931,28960,31157,
+        33637,35476,37077,38276,39201,40397,42148,53164
+      },
+      /*Y'  qi=56  OC_MODE_GOLDEN_MV*/
+      {
+         3072,10306,16797,21655,25247,28252,31000,33464,
+        35623,37587,39371,40874,42470,43532,44777,50830
+      }
+    },
+    {
+      /*Cb  qi=56  OC_MODE_INTRA*/
+      {
+         7384,16297,21041,24492,27858,29762,31381,33577,
+        36301,38884,41052,43782,45687,47311,49165,56729
+      },
+      /*Cb  qi=56  OC_MODE_INTER_NOMV*/
+      {
+         4223,11150,19540,23732,27696,31896,40399,54400,
+        50339,42353,42818,46207,43150,50352,50234,62960
+      },
+      /*Cb  qi=56  OC_MODE_INTER_MV*/
+      {
+         3021,13192,20359,24749,29312,35323,40121,43538,
+        45848,48121,51429,53594,53762,57173,63242,64059
+      },
+      /*Cb  qi=56  OC_MDOE_INTER_MV_LAST*/
+      {
+         6264,12799,20919,24744,30556,35734,39322,41250,
+        42683,42894,43396,42804,41778,42385,41013,41546
+      },
+      /*Cb  qi=56  OC_MODE_INTER_MV_LAST2*/
+      {
+         5338,14356,21063,24855,30098,34982,38422,45065,
+        45664,49718,47681,51025,51086,58656,56594,62306
+      },
+      /*Cb  qi=56  OC_MODE_INTER_MV_FOUR*/
+      {
+         3498,10926,20081,24560,29744,35008,39490,43082,
+        46331,48458,50790,53181,55030,55308,63275,65277
+      },
+      /*Cb  qi=56  OC_MODE_GOLDEN_NOMV*/
+      {
+         4232,10278,14962,17178,21532,25310,28372,30519,
+        32394,34840,37637,39115,38061,38234,37777,41266
+      },
+      /*Cb  qi=56  OC_MODE_GOLDEN_MV*/
+      {
+         3698,11978,20885,24812,29131,32844,33268,34137,
+        34757,34844,35813,35865,36478,36963,37343,42009
+      }
+    },
+    {
+      /*Cr  qi=56  OC_MODE_INTRA*/
+      {
+         3595,11453,16130,19349,22206,24589,27043,29340,
+        31752,32985,34194,36177,37945,38793,40537,46143
+      },
+      /*Cr  qi=56  OC_MODE_INTER_NOMV*/
+      {
+         2424, 7381,15014,20073,23315,26847,41872,27792,
+        28959,18367,14623,19797,25436,22354,17966,12709
+      },
+      /*Cr  qi=56  OC_MODE_INTER_MV*/
+      {
+         2018, 8424,15590,20045,23493,27155,29904,33587,
+        36718,38442,41587,40860,42112,44183,42955,45661
+      },
+      /*Cr  qi=56  OC_MDOE_INTER_MV_LAST*/
+      {
+         3394, 7865,16102,21999,25449,28282,30023,30411,
+        29506,27349,25705,25074,24243,25718,26203,23613
+      },
+      /*Cr  qi=56  OC_MODE_INTER_MV_LAST2*/
+      {
+         3295, 8490,15246,21248,25320,28358,30311,32545,
+        32226,28425,27738,32309,38061,34880,35728,42547
+      },
+      /*Cr  qi=56  OC_MODE_INTER_MV_FOUR*/
+      {
+         2167, 7849,15688,21025,24893,27870,30426,32651,
+        34917,37723,39130,39769,41273,44617,43303,47247
+      },
+      /*Cr  qi=56  OC_MODE_GOLDEN_NOMV*/
+      {
+         2685, 7397,11313,15310,17675,19678,22323,22299,
+        21613,22043,21820,22601,23258,23773,26846,27682
+      },
+      /*Cr  qi=56  OC_MODE_GOLDEN_MV*/
+      {
+         2402, 8253,15590,20113,22107,24125,25160,24464,
+        24541,24316,23503,24236,24757,24559,24980,25583
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=57  OC_MODE_INTRA*/
+      {
+         7586,12855,17352,19773,22374,24626,26680,28373,
+        30345,32210,33673,34677,36132,37624,38970,49274
+      },
+      /*Y'  qi=57  OC_MODE_INTER_NOMV*/
+      {
+         3121,10402,16880,21450,25354,28477,31076,33416,
+        35529,37699,39490,41251,43209,45324,46774,57834
+      },
+      /*Y'  qi=57  OC_MODE_INTER_MV*/
+      {
+         3294,11185,16991,21364,24762,27506,29955,32150,
+        34228,36092,37833,39415,40978,42342,43678,48175
+      },
+      /*Y'  qi=57  OC_MDOE_INTER_MV_LAST*/
+      {
+         3586,12162,16976,21367,24746,27557,30137,32542,
+        34691,36722,38715,40502,42320,43970,45524,51590
+      },
+      /*Y'  qi=57  OC_MODE_INTER_MV_LAST2*/
+      {
+         2656,11583,17454,21988,25511,28238,30524,32695,
+        34816,36787,38537,40314,41963,43523,45134,52245
+      },
+      /*Y'  qi=57  OC_MODE_INTER_MV_FOUR*/
+      {
+         2209, 9948,16743,21280,24932,27938,30562,32947,
+        35187,37230,39169,40885,42620,44167,45587,50900
+      },
+      /*Y'  qi=57  OC_MODE_GOLDEN_NOMV*/
+      {
+         2928, 9834,16255,20101,23088,26009,28802,31163,
+        33702,35361,37149,38340,39222,40450,41953,53207
+      },
+      /*Y'  qi=57  OC_MODE_GOLDEN_MV*/
+      {
+         3100,10292,16821,21663,25244,28233,30998,33463,
+        35621,37594,39368,40869,42456,43536,44778,50849
+      }
+    },
+    {
+      /*Cb  qi=57  OC_MODE_INTRA*/
+      {
+         7423,16292,21043,24501,27863,29784,31384,33604,
+        36261,38926,41043,43769,45708,47330,49174,56573
+      },
+      /*Cb  qi=57  OC_MODE_INTER_NOMV*/
+      {
+         4177,11235,19594,23757,27222,31517,39359,54656,
+        43467,50889,41737,42532,49158,52144,47945,56449
+      },
+      /*Cb  qi=57  OC_MODE_INTER_MV*/
+      {
+         2973,13176,20352,24693,29228,35174,39978,43546,
+        45192,48203,51132,52948,53287,58653,64472,65138
+      },
+      /*Cb  qi=57  OC_MDOE_INTER_MV_LAST*/
+      {
+         6237,12731,20914,24767,30636,35872,39337,41328,
+        42751,43011,43264,42554,41819,42063,42195,41683
+      },
+      /*Cb  qi=57  OC_MODE_INTER_MV_LAST2*/
+      {
+         5262,14258,21053,24859,30101,35355,39030,43759,
+        45385,50760,48525,48502,51213,56576,56753,63022
+      },
+      /*Cb  qi=57  OC_MODE_INTER_MV_FOUR*/
+      {
+         3501,10892,20085,24557,29730,35021,39449,43086,
+        45774,48760,50899,53835,54580,57073,64425,61761
+      },
+      /*Cb  qi=57  OC_MODE_GOLDEN_NOMV*/
+      {
+         4277,10237,14889,17099,21219,24892,27698,30154,
+        32181,34756,37616,38767,37628,38391,38034,40967
+      },
+      /*Cb  qi=57  OC_MODE_GOLDEN_MV*/
+      {
+         3691,11971,20888,24806,29092,32818,33207,34163,
+        34811,34959,36092,35901,36805,37152,37381,42040
+      }
+    },
+    {
+      /*Cr  qi=57  OC_MODE_INTRA*/
+      {
+         3581,11456,16128,19350,22200,24575,27000,29315,
+        31757,32960,34233,36195,38006,38690,40432,46117
+      },
+      /*Cr  qi=57  OC_MODE_INTER_NOMV*/
+      {
+         2390, 7475,15027,20114,23606,26567,47488,29806,
+        27168,16763,13333,20055,24279,18928,15239,11996
+      },
+      /*Cr  qi=57  OC_MODE_INTER_MV*/
+      {
+         2057, 8403,15491,19986,23442,27101,29997,33075,
+        36533,38268,40159,41724,41447,43596,42287,45303
+      },
+      /*Cr  qi=57  OC_MDOE_INTER_MV_LAST*/
+      {
+         3358, 7868,16179,22001,25462,28262,30015,30294,
+        29770,27661,25554,25621,24831,26117,25522,23901
+      },
+      /*Cr  qi=57  OC_MODE_INTER_MV_LAST2*/
+      {
+         3203, 8472,15289,21221,25366,28243,30157,32358,
+        32142,28049,27928,33351,35872,39738,37472,40934
+      },
+      /*Cr  qi=57  OC_MODE_INTER_MV_FOUR*/
+      {
+         2166, 7807,15692,21023,24874,27880,30443,32707,
+        35103,37921,38523,40494,41108,44124,42001,45736
+      },
+      /*Cr  qi=57  OC_MODE_GOLDEN_NOMV*/
+      {
+         2731, 7355,11248,14946,17637,19683,22173,22182,
+        21510,21880,21610,22377,22977,23626,25965,27288
+      },
+      /*Cr  qi=57  OC_MODE_GOLDEN_MV*/
+      {
+         2401, 8251,15608,20189,22068,24140,25231,24577,
+        24702,24374,23531,24371,24815,24890,24857,25540
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=58  OC_MODE_INTRA*/
+      {
+         9977,15841,20720,23042,25852,28204,30557,32457,
+        34628,36710,38352,39461,41099,42803,44300,55700
+      },
+      /*Y'  qi=58  OC_MODE_INTER_NOMV*/
+      {
+         4708,13186,20448,25800,29419,32290,34647,36938,
+        39477,41690,43829,46363,48217,50592,53434,63064
+      },
+      /*Y'  qi=58  OC_MODE_INTER_MV*/
+      {
+         4894,15280,20870,25222,28735,31424,33789,36195,
+        38579,40922,43217,45211,47184,48886,50606,57540
+      },
+      /*Y'  qi=58  OC_MDOE_INTER_MV_LAST*/
+      {
+         4848,15713,21053,25430,28691,31396,33894,36274,
+        38538,40745,42900,44859,46713,48264,49942,57074
+      },
+      /*Y'  qi=58  OC_MODE_INTER_MV_LAST2*/
+      {
+         4913,14273,20156,25100,28730,31533,34022,36471,
+        38780,41181,43404,45378,47248,48962,50814,58654
+      },
+      /*Y'  qi=58  OC_MODE_INTER_MV_FOUR*/
+      {
+         3622,12798,19914,24876,28723,31824,34542,37063,
+        39435,41710,43831,45778,47696,49470,51079,56822
+      },
+      /*Y'  qi=58  OC_MODE_GOLDEN_NOMV*/
+      {
+         4462,12361,19266,23612,27041,30258,33292,35731,
+        38178,39897,41795,43235,44181,45479,47075,59417
+      },
+      /*Y'  qi=58  OC_MODE_GOLDEN_MV*/
+      {
+         4734,12917,20352,25419,29036,31970,34747,37263,
+        39721,41967,43987,45821,47597,48948,50446,56684
+      }
+    },
+    {
+      /*Cb  qi=58  OC_MODE_INTRA*/
+      {
+         7382,16784,21595,24852,28243,30090,31591,33827,
+        36626,39224,41482,44298,46191,47634,49552,57567
+      },
+      /*Cb  qi=58  OC_MODE_INTER_NOMV*/
+      {
+         5258,12657,21444,25131,29236,34301,38339,37906,
+        47915,43269,46811,42285,47324,47125,58518,62304
+      },
+      /*Cb  qi=58  OC_MODE_INTER_MV*/
+      {
+         5495,14061,21342,25271,30612,35804,39867,43376,
+        43196,50963,51748,52862,55003,56510,64768,59848
+      },
+      /*Cb  qi=58  OC_MDOE_INTER_MV_LAST*/
+      {
+         2959,14209,21425,25415,30837,36301,39780,41995,
+        43185,43428,43764,43605,42625,42408,42350,42341
+      },
+      /*Cb  qi=58  OC_MODE_INTER_MV_LAST2*/
+      {
+         5645,13461,21411,25385,30369,35320,39253,44419,
+        46993,48328,45686,50755,48981,58627,50523,57217
+      },
+      /*Cb  qi=58  OC_MODE_INTER_MV_FOUR*/
+      {
+         3619,11280,20558,25194,30269,35629,40322,44038,
+        46971,49765,51025,52656,56950,55936,60694,60055
+      },
+      /*Cb  qi=58  OC_MODE_GOLDEN_NOMV*/
+      {
+         4337,10335,14813,17017,21075,24441,27550,30311,
+        32556,35667,37076,39095,37896,38037,38469,41921
+      },
+      /*Cb  qi=58  OC_MODE_GOLDEN_MV*/
+      {
+         3480,12298,21550,25498,29605,33271,34051,34843,
+        34776,35514,36624,36715,36887,37594,38124,42711
+      }
+    },
+    {
+      /*Cr  qi=58  OC_MODE_INTRA*/
+      {
+         4165,12467,17381,20765,23798,26284,28820,31413,
+        33880,35298,36489,38562,40133,40865,42859,48961
+      },
+      /*Cr  qi=58  OC_MODE_INTER_NOMV*/
+      {
+         3462, 8884,17548,22970,25569,31411,31220,33168,
+        30952,36032,14234,39694,34436,32896,39211,35212
+      },
+      /*Cr  qi=58  OC_MODE_INTER_MV*/
+      {
+         4127, 9528,17455,22786,26788,30685,33320,34808,
+        37309,39336,42532,40669,42004,40812,42220,41171
+      },
+      /*Cr  qi=58  OC_MDOE_INTER_MV_LAST*/
+      {
+         3324, 9372,17248,22657,26761,30077,31901,32302,
+        31793,29032,27803,26443,26064,27230,28172,24536
+      },
+      /*Cr  qi=58  OC_MODE_INTER_MV_LAST2*/
+      {
+         3495, 9698,17298,23143,26985,30248,32325,33497,
+        34459,26332,30242,26226,32413,36294,34474,30592
+      },
+      /*Cr  qi=58  OC_MODE_INTER_MV_FOUR*/
+      {
+         2623, 8879,17180,22756,26776,29873,32491,35108,
+        37423,40548,41935,41627,42581,40586,36359,27151
+      },
+      /*Cr  qi=58  OC_MODE_GOLDEN_NOMV*/
+      {
+         3196, 8291,11952,15640,18778,21048,23723,23803,
+        23872,24238,23392,24236,24499,25635,26774,28810
+      },
+      /*Cr  qi=58  OC_MODE_GOLDEN_MV*/
+      {
+         2693, 9483,17195,21918,23982,25880,27041,26600,
+        26539,26189,25242,26242,26972,26806,26422,27101
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=59  OC_MODE_INTRA*/
+      {
+         9985,15837,20723,23049,25866,28216,30588,32484,
+        34636,36716,38357,39473,41116,42811,44317,55694
+      },
+      /*Y'  qi=59  OC_MODE_INTER_NOMV*/
+      {
+         4760,13189,20360,25766,29387,32264,34563,36913,
+        39342,41838,44369,46832,49157,51466,52925,63586
+      },
+      /*Y'  qi=59  OC_MODE_INTER_MV*/
+      {
+         4870,15122,20915,25414,28852,31499,33926,36246,
+        38641,40986,43278,45329,47221,49064,50568,57919
+      },
+      /*Y'  qi=59  OC_MDOE_INTER_MV_LAST*/
+      {
+         4904,15769,21069,25435,28679,31375,33873,36267,
+        38546,40733,42868,44878,46663,48356,49938,56975
+      },
+      /*Y'  qi=59  OC_MODE_INTER_MV_LAST2*/
+      {
+         4951,14635,20578,25106,28631,31399,33869,36293,
+        38660,40918,43140,45154,47035,48824,50464,57905
+      },
+      /*Y'  qi=59  OC_MODE_INTER_MV_FOUR*/
+      {
+         3628,12842,19882,24858,28724,31836,34548,37071,
+        39463,41715,43883,45786,47741,49508,51075,56876
+      },
+      /*Y'  qi=59  OC_MODE_GOLDEN_NOMV*/
+      {
+         4475,12377,19169,23626,27127,30316,33371,35814,
+        38391,40046,41951,43367,44225,45622,47291,59594
+      },
+      /*Y'  qi=59  OC_MODE_GOLDEN_MV*/
+      {
+         4693,12913,20378,25404,29008,31964,34691,37233,
+        39686,41861,43995,45732,47576,48785,50318,56845
+      }
+    },
+    {
+      /*Cb  qi=59  OC_MODE_INTRA*/
+      {
+         7372,16773,21590,24851,28227,30074,31599,33816,
+        36598,39231,41472,44353,46161,47732,49501,57493
+      },
+      /*Cb  qi=59  OC_MODE_INTER_NOMV*/
+      {
+         5285,12649,21403,25113,28231,32964,38449,55552,
+        40714,44559,44432,44261,46268,61382,53840,51049
+      },
+      /*Cb  qi=59  OC_MODE_INTER_MV*/
+      {
+         6214,14101,21416,25129,30183,35110,39374,42010,
+        43449,49577,51859,51481,54555,54482,63349,58561
+      },
+      /*Cb  qi=59  OC_MDOE_INTER_MV_LAST*/
+      {
+         2823,14174,21423,25414,30830,36378,39773,41911,
+        43133,43754,43483,44253,42823,42260,42302,42528
+      },
+      /*Cb  qi=59  OC_MODE_INTER_MV_LAST2*/
+      {
+         4982,13884,21450,25550,30930,36777,40630,45982,
+        47414,47950,47692,49047,50714,56896,50295,62940
+      },
+      /*Cb  qi=59  OC_MODE_INTER_MV_FOUR*/
+      {
+         3620,11265,20531,25185,30270,35657,40215,43857,
+        46736,49790,51312,52904,56487,57927,65535,60459
+      },
+      /*Cb  qi=59  OC_MODE_GOLDEN_NOMV*/
+      {
+         4340,10437,14872,17001,20800,24414,28027,29983,
+        31894,35314,36802,38744,37641,37854,38115,41611
+      },
+      /*Cb  qi=59  OC_MODE_GOLDEN_MV*/
+      {
+         3685,12280,21529,25489,29625,33216,34128,34571,
+        35070,35505,36335,36675,37687,37797,38441,42841
+      }
+    },
+    {
+      /*Cr  qi=59  OC_MODE_INTRA*/
+      {
+         4161,12472,17378,20766,23802,26274,28811,31393,
+        33901,35286,36520,38509,40228,40873,42717,49068
+      },
+      /*Cr  qi=59  OC_MODE_INTER_NOMV*/
+      {
+         3490, 8947,17508,22319,26083,27291,52096,34546,
+        29664,33104,14177,38873,35328,34213,37863,35712
+      },
+      /*Cr  qi=59  OC_MODE_INTER_MV*/
+      {
+         4175, 9443,17203,22852,27037,30814,33252,34575,
+        37849,39027,42681,41848,41944,42120,35733,43603
+      },
+      /*Cr  qi=59  OC_MDOE_INTER_MV_LAST*/
+      {
+         3265, 9360,17245,22628,26777,30081,31880,32343,
+        31555,28979,27596,26933,26312,27081,28294,24931
+      },
+      /*Cr  qi=59  OC_MODE_INTER_MV_LAST2*/
+      {
+         3651, 9475,17388,23120,26883,30049,32269,33432,
+        34798,26300,29855,25327,35831,35846,33472,29216
+      },
+      /*Cr  qi=59  OC_MODE_INTER_MV_FOUR*/
+      {
+         2624, 8879,17183,22745,26765,29843,32481,35029,
+        36856,40486,41191,42268,40367,40227,33864,27617
+      },
+      /*Cr  qi=59  OC_MODE_GOLDEN_NOMV*/
+      {
+         3198, 8348,11831,15653,18693,20958,23656,23823,
+        23560,23963,23177,24460,24322,25948,26493,28168
+      },
+      /*Cr  qi=59  OC_MODE_GOLDEN_MV*/
+      {
+         2789, 9470,17106,21552,23982,26037,27088,26555,
+        26459,26370,25559,26401,26724,26827,26588,27047
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=60  OC_MODE_INTRA*/
+      {
+         9989,15795,20725,23040,25874,28230,30597,32510,
+        34649,36723,38362,39464,41116,42829,44309,55704
+      },
+      /*Y'  qi=60  OC_MODE_INTER_NOMV*/
+      {
+         4803,14017,20706,25852,29388,32199,34519,36666,
+        38879,41285,43645,46439,47627,50542,52023,65205
+      },
+      /*Y'  qi=60  OC_MODE_INTER_MV*/
+      {
+         4895,15459,20922,25347,28791,31460,33848,36179,
+        38483,40891,43140,45143,47109,48779,50585,57423
+      },
+      /*Y'  qi=60  OC_MDOE_INTER_MV_LAST*/
+      {
+         4777,15688,21071,25437,28676,31373,33883,36244,
+        38517,40709,42845,44795,46626,48314,49921,57076
+      },
+      /*Y'  qi=60  OC_MODE_INTER_MV_LAST2*/
+      {
+         4801,14129,19902,24898,28727,31721,34320,36793,
+        39218,41597,43832,45809,47670,49545,51306,58720
+      },
+      /*Y'  qi=60  OC_MODE_INTER_MV_FOUR*/
+      {
+         3632,12802,19870,24875,28731,31832,34543,37060,
+        39458,41699,43852,45789,47693,49493,51044,56866
+      },
+      /*Y'  qi=60  OC_MODE_GOLDEN_NOMV*/
+      {
+         4487,12402,19121,23622,27352,30307,33232,35604,
+        37952,39918,41718,43273,44100,45523,47105,59585
+      },
+      /*Y'  qi=60  OC_MODE_GOLDEN_MV*/
+      {
+         4702,12961,20428,25430,29021,31961,34681,37212,
+        39639,41833,43985,45739,47496,48756,50348,56609
+      }
+    },
+    {
+      /*Cb  qi=60  OC_MODE_INTRA*/
+      {
+         7465,16759,21595,24851,28229,30062,31566,33820,
+        36589,39236,41478,44300,46086,47793,49491,57505
+      },
+      /*Cb  qi=60  OC_MODE_INTER_NOMV*/
+      {
+         5662,13349,21455,25128,29002,35389,38071,39104,
+        42424,44037,44532,49867,47728,55221,60384,53546
+      },
+      /*Cb  qi=60  OC_MODE_INTER_MV*/
+      {
+         5830,14191,21372,25199,30247,35302,38538,42341,
+        45315,47771,51055,52060,53609,56354,60436,61795
+      },
+      /*Cb  qi=60  OC_MDOE_INTER_MV_LAST*/
+      {
+         2916,14139,21415,25405,30803,36262,39888,41756,
+        42655,43611,43373,43843,42542,42523,42389,42302
+      },
+      /*Cb  qi=60  OC_MODE_INTER_MV_LAST2*/
+      {
+         5484,11924,21179,25418,30580,35539,40376,45080,
+        46764,50926,47082,50634,51376,65535,59046,62132
+      },
+      /*Cb  qi=60  OC_MODE_INTER_MV_FOUR*/
+      {
+         3612,11249,20535,25190,30182,35655,40281,43722,
+        46394,50113,50920,52757,55478,56901,63591,60000
+      },
+      /*Cb  qi=60  OC_MODE_GOLDEN_NOMV*/
+      {
+         4363,10484,14910,17054,20776,24952,28021,30266,
+        32285,34798,37065,39207,37763,37864,37924,41679
+      },
+      /*Cb  qi=60  OC_MODE_GOLDEN_MV*/
+      {
+         3475,12359,21533,25495,29579,33236,33902,34378,
+        34900,35435,36299,36672,37446,37491,38209,42652
+      }
+    },
+    {
+      /*Cr  qi=60  OC_MODE_INTRA*/
+      {
+         4111,12466,17381,20757,23793,26257,28818,31390,
+        33906,35238,36438,38526,40218,40834,42918,48997
+      },
+      /*Cr  qi=60  OC_MODE_INTER_NOMV*/
+      {
+         3443, 8872,17662,23237,25625,31398,32068,33079,
+        28191,18193,12811,29696,22918,38089,37056,36352
+      },
+      /*Cr  qi=60  OC_MODE_INTER_MV*/
+      {
+         4228, 9493,17340,22629,26924,30470,31941,34882,
+        37498,39027,40754,41215,40290,40303,44942,40944
+      },
+      /*Cr  qi=60  OC_MDOE_INTER_MV_LAST*/
+      {
+         3294, 9337,17197,22570,26680,30022,31849,32159,
+        31477,29347,27996,26718,26604,27397,26411,24694
+      },
+      /*Cr  qi=60  OC_MODE_INTER_MV_LAST2*/
+      {
+         3339, 9305,17390,23307,27242,30424,32236,32735,
+        34811,29880,29567,25640,44768,37568,37200,30528
+      },
+      /*Cr  qi=60  OC_MODE_INTER_MV_FOUR*/
+      {
+         2615, 8873,17167,22697,26759,29826,32478,35146,
+        36988,40718,41498,40447,44015,39468,38076,27337
+      },
+      /*Cr  qi=60  OC_MODE_GOLDEN_NOMV*/
+      {
+         3211, 8380,11715,15760,18683,20890,23493,23653,
+        23497,23705,23170,24503,24123,26067,26602,28112
+      },
+      /*Cr  qi=60  OC_MODE_GOLDEN_MV*/
+      {
+         2697, 9478,17120,21480,23913,25934,27245,26386,
+        26332,26279,25478,26393,26603,26898,26850,27019
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=61  OC_MODE_INTRA*/
+      {
+         9983,15827,20737,23064,25890,28250,30622,32541,
+        34679,36732,38370,39468,41114,42825,44320,55702
+      },
+      /*Y'  qi=61  OC_MODE_INTER_NOMV*/
+      {
+         4811,14103,20721,25851,29381,32184,34474,36605,
+        38885,41228,43527,46218,47613,50721,51832,63429
+      },
+      /*Y'  qi=61  OC_MODE_INTER_MV*/
+      {
+         4887,15381,20937,25380,28798,31459,33864,36236,
+        38554,40944,43212,45181,47157,48824,50535,57596
+      },
+      /*Y'  qi=61  OC_MDOE_INTER_MV_LAST*/
+      {
+         4856,15738,21082,25443,28711,31393,33901,36249,
+        38518,40707,42833,44834,46672,48263,49881,57188
+      },
+      /*Y'  qi=61  OC_MODE_INTER_MV_LAST2*/
+      {
+         4741,13976,19919,24909,28730,31759,34391,36839,
+        39301,41620,43840,45876,47740,49495,51328,58790
+      },
+      /*Y'  qi=61  OC_MODE_INTER_MV_FOUR*/
+      {
+         3629,12837,19864,24871,28743,31851,34572,37092,
+        39478,41719,43862,45805,47732,49496,51054,56816
+      },
+      /*Y'  qi=61  OC_MODE_GOLDEN_NOMV*/
+      {
+         4495,12401,19103,23606,27290,30266,33189,35582,
+        37945,39717,41615,43236,44036,45385,47125,59643
+      },
+      /*Y'  qi=61  OC_MODE_GOLDEN_MV*/
+      {
+         4693,12930,20409,25428,29031,31977,34683,37214,
+        39627,41823,43962,45703,47570,48660,50261,56526
+      }
+    },
+    {
+      /*Cb  qi=61  OC_MODE_INTRA*/
+      {
+         7405,16765,21589,24852,28230,30064,31544,33785,
+        36553,39188,41457,44308,46190,47529,49455,57486
+      },
+      /*Cb  qi=61  OC_MODE_INTER_NOMV*/
+      {
+         5681,13362,21458,25118,28486,35183,38314,45978,
+        40914,43822,43208,41307,48260,47036,52749,55641
+      },
+      /*Cb  qi=61  OC_MODE_INTER_MV*/
+      {
+         5115,14267,21370,25243,30302,35264,38561,42119,
+        44416,47098,49259,54928,52825,55191,59258,61690
+      },
+      /*Cb  qi=61  OC_MDOE_INTER_MV_LAST*/
+      {
+         3022,14154,21415,25394,30698,36199,39937,41625,
+        42699,43295,43516,43798,43046,42494,41823,42324
+      },
+      /*Cb  qi=61  OC_MODE_INTER_MV_LAST2*/
+      {
+         5385,11885,21152,25496,30508,35431,40588,45604,
+        46888,50844,47119,48062,50234,63936,56316,61708
+      },
+      /*Cb  qi=61  OC_MODE_INTER_MV_FOUR*/
+      {
+         3614,11263,20556,25179,30197,35540,40210,43859,
+        46541,49712,50696,53132,57093,56213,61448,59422
+      },
+      /*Cb  qi=61  OC_MODE_GOLDEN_NOMV*/
+      {
+         4378,10474,14895,17089,20741,24939,27994,30126,
+        32203,34738,36752,39014,37508,37694,37560,41476
+      },
+      /*Cb  qi=61  OC_MODE_GOLDEN_MV*/
+      {
+         3501,12297,21537,25493,29517,33267,33735,34383,
+        34998,35417,36396,36485,37423,37386,38173,42790
+      }
+    },
+    {
+      /*Cr  qi=61  OC_MODE_INTRA*/
+      {
+         4144,12471,17388,20758,23786,26258,28804,31378,
+        33896,35240,36442,38423,40216,40843,42852,49074
+      },
+      /*Cr  qi=61  OC_MODE_INTER_NOMV*/
+      {
+         3430, 8893,17358,22812,26482,27239,38656,32364,
+        28199,35296,13753,33383,34664,27328,39040,35648
+      },
+      /*Cr  qi=61  OC_MODE_INTER_MV*/
+      {
+         4034, 9500,17380,22684,26997,30365,32415,34385,
+        36832,38251,39807,44565,42925,41803,36868,38131
+      },
+      /*Cr  qi=61  OC_MDOE_INTER_MV_LAST*/
+      {
+         3396, 9349,17190,22579,26655,29993,31776,32075,
+        31307,28978,27950,26731,26357,26876,27313,24595
+      },
+      /*Cr  qi=61  OC_MODE_INTER_MV_LAST2*/
+      {
+         3323, 9431,17361,23241,27215,30229,32266,32313,
+        33883,26348,29338,25467,36192,38944,32624,29664
+      },
+      /*Cr  qi=61  OC_MODE_INTER_MV_FOUR*/
+      {
+         2615, 8870,17164,22709,26742,29849,32447,35236,
+        37025,40547,41884,43228,41193,39505,35281,27504
+      },
+      /*Cr  qi=61  OC_MODE_GOLDEN_NOMV*/
+      {
+         3216, 8379,11650,15792,18756,20805,23623,23360,
+        23343,23693,23148,24074,24013,25617,27006,28736
+      },
+      /*Cr  qi=61  OC_MODE_GOLDEN_MV*/
+      {
+         2682, 9478,17118,21448,23984,25942,27208,26280,
+        26430,26322,25570,25998,26718,26996,26861,26951
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=62  OC_MODE_INTRA*/
+      {
+        11018,17178,22038,24368,27273,29713,32178,34197,
+        36401,38583,40323,41540,43292,45091,46665,58787
+      },
+      /*Y'  qi=62  OC_MODE_INTER_NOMV*/
+      {
+         5286,15155,22186,27460,30988,33858,36403,38804,
+        41287,43880,46356,48822,50694,54408,55514,65535
+      },
+      /*Y'  qi=62  OC_MODE_INTER_MV*/
+      {
+         5367,16633,22175,26652,30322,33190,35827,38393,
+        40959,43523,45863,48113,50190,52097,53822,60966
+      },
+      /*Y'  qi=62  OC_MDOE_INTER_MV_LAST*/
+      {
+         4888,17024,22407,26913,30357,33242,35951,38532,
+        40993,43409,45684,47823,49795,51335,53162,60633
+      },
+      /*Y'  qi=62  OC_MODE_INTER_MV_LAST2*/
+      {
+         5372,14075,21491,26761,30539,33615,36450,39162,
+        41801,44363,46647,48883,50783,52593,54468,62380
+      },
+      /*Y'  qi=62  OC_MODE_INTER_MV_FOUR*/
+      {
+         4846,14082,21164,26387,30456,33759,36682,39405,
+        41977,44421,46704,48793,50841,52734,54400,60296
+      },
+      /*Y'  qi=62  OC_MODE_GOLDEN_NOMV*/
+      {
+         3685,13164,20179,24874,28828,32215,35186,37760,
+        40368,42298,44232,45577,46556,47619,50034,62971
+      },
+      /*Y'  qi=62  OC_MODE_GOLDEN_MV*/
+      {
+         5333,14474,21825,26971,30764,33909,36865,39646,
+        42273,44714,47006,48863,50734,52041,53690,59811
+      }
+    },
+    {
+      /*Cb  qi=62  OC_MODE_INTRA*/
+      {
+         7337,16810,21625,24876,28257,30082,31527,33742,
+        36564,39185,41399,44283,46019,47440,49325,57568
+      },
+      /*Cb  qi=62  OC_MODE_INTER_NOMV*/
+      {
+         5378,13726,21489,25132,29673,33311,41502,56448,
+        50320,44824,50439,48279,51128,55841,48480,57757
+      },
+      /*Cb  qi=62  OC_MODE_INTER_MV*/
+      {
+         5144,14062,21411,25415,30512,35868,39404,41985,
+        44284,48052,51784,53453,52167,56340,58552,60869
+      },
+      /*Cb  qi=62  OC_MDOE_INTER_MV_LAST*/
+      {
+         2885,14056,21466,25443,30674,36009,39656,41545,
+        42356,43329,43065,43321,42358,42030,41688,41967
+      },
+      /*Cb  qi=62  OC_MODE_INTER_MV_LAST2*/
+      {
+         5139,12562,21441,25364,30396,35304,39595,44650,
+        46141,48736,45932,47478,47534,59975,58432,62510
+      },
+      /*Cb  qi=62  OC_MODE_INTER_MV_FOUR*/
+      {
+         3779,11325,20578,25216,30210,35513,40210,43889,
+        46266,49365,51051,53438,54664,56114,62846,60338
+      },
+      /*Cb  qi=62  OC_MODE_GOLDEN_NOMV*/
+      {
+         3433, 9865,14779,16892,20249,24336,28108,30079,
+        32351,35133,37843,38935,37118,37969,38528,41402
+      },
+      /*Cb  qi=62  OC_MODE_GOLDEN_MV*/
+      {
+         3447,12505,21556,25523,29502,33333,33671,34174,
+        34557,35350,35813,36809,36831,37765,37790,42547
+      }
+    },
+    {
+      /*Cr  qi=62  OC_MODE_INTRA*/
+      {
+         4504,13374,18493,21970,25144,27738,30516,33273,
+        35926,37393,38671,40835,42604,43726,45949,52439
+      },
+      /*Cr  qi=62  OC_MODE_INTER_NOMV*/
+      {
+         3889, 9831,18689,23797,28291,33033,57344,29186,
+        30473,40010,16136,41104,36443,20952,42048,38502
+      },
+      /*Cr  qi=62  OC_MODE_INTER_MV*/
+      {
+         4591,10528,18803,24268,28556,32637,34346,37536,
+        40198,41989,45421,43745,48797,48139,44224,39491
+      },
+      /*Cr  qi=62  OC_MDOE_INTER_MV_LAST*/
+      {
+         3704,10255,18516,24224,28650,32124,34011,34265,
+        33644,30560,29563,29050,27798,28884,29648,26379
+      },
+      /*Cr  qi=62  OC_MODE_INTER_MV_LAST2*/
+      {
+         3997,10408,18610,24726,28794,32108,34519,35308,
+        36674,27699,31603,27547,36475,43285,39307,40192
+      },
+      /*Cr  qi=62  OC_MODE_INTER_MV_FOUR*/
+      {
+         3066, 9886,18515,24367,28635,31972,34783,37316,
+        39659,42795,44154,45479,43653,53192,39624,29015
+      },
+      /*Cr  qi=62  OC_MODE_GOLDEN_NOMV*/
+      {
+         2788, 8873,12400,16679,19909,22191,25460,24946,
+        24748,25269,24967,26102,26496,27615,28677,30437
+      },
+      /*Cr  qi=62  OC_MODE_GOLDEN_MV*/
+      {
+         2958,10483,18422,23048,25590,27821,29005,28341,
+        28241,28060,27219,27610,28279,28657,28210,29042
+      }
+    }
+  },
+  {
+    {
+      /*Y'  qi=63  OC_MODE_INTRA*/
+      {
+        11558,17955,22921,25284,28269,30774,33291,35373,
+        37646,39911,41732,43011,44834,46687,48369,61056
+      },
+      /*Y'  qi=63  OC_MODE_INTER_NOMV*/
+      {
+         5704,16338,23392,28558,32177,35129,37786,40327,
+        43088,45889,48684,51353,53472,56645,57877,65535
+      },
+      /*Y'  qi=63  OC_MODE_INTER_MV*/
+      {
+         5608,17430,23193,27851,31629,34601,37344,40081,
+        42921,45718,48290,50641,52734,54872,56634,63699
+      },
+      /*Y'  qi=63  OC_MDOE_INTER_MV_LAST*/
+      {
+         5507,17905,23395,27970,31505,34491,37346,40088,
+        42757,45372,47836,50136,52160,53994,55751,63144
+      },
+      /*Y'  qi=63  OC_MODE_INTER_MV_LAST2*/
+      {
+         5656,14910,22171,27549,31627,34942,37918,40634,
+        43194,45760,48338,50591,52958,54882,57023,64999
+      },
+      /*Y'  qi=63  OC_MODE_INTER_MV_FOUR*/
+      {
+         5189,14819,22100,27479,31678,35114,38168,41027,
+        43716,46309,48696,50885,53024,55000,56708,62715
+      },
+      /*Y'  qi=63  OC_MODE_GOLDEN_NOMV*/
+      {
+         3863,13809,20993,25730,29805,33316,36484,39105,
+        41746,43824,45969,47273,48882,49880,51888,65431
+      },
+      /*Y'  qi=63  OC_MODE_GOLDEN_MV*/
+      {
+         5618,14999,22838,28117,32036,35354,38465,41431,
+        44224,46853,49142,51269,53225,54451,56158,62225
+      }
+    },
+    {
+      /*Cb  qi=63  OC_MODE_INTRA*/
+      {
+         7335,16805,21644,24903,28332,30135,31627,33856,
+        36612,39157,41402,44354,46124,47578,49435,57762
+      },
+      /*Cb  qi=63  OC_MODE_INTER_NOMV*/
+      {
+         5570,14249,21497,25176,30004,36027,38748,41937,
+        48640,46098,47623,48411,52140,50397,53303,62859
+      },
+      /*Cb  qi=63  OC_MODE_INTER_MV*/
+      {
+         5103,14047,21414,25245,30286,35396,38446,42150,
+        42730,46850,48970,51030,53658,55834,59934,62206
+      },
+      /*Cb  qi=63  OC_MDOE_INTER_MV_LAST*/
+      {
+         3135,14085,21472,25438,30643,35934,39704,41482,
+        42565,43119,42766,43219,42671,41921,41429,41668
+      },
+      /*Cb  qi=63  OC_MODE_INTER_MV_LAST2*/
+      {
+         5045,12541,21374,25850,30909,36393,41013,45814,
+        47198,50085,45739,49842,51627,60091,62336,64899
+      },
+      /*Cb  qi=63  OC_MODE_INTER_MV_FOUR*/
+      {
+         3764,11331,20599,25235,30201,35556,40046,43664,
+        46298,49688,50541,52289,54587,55953,62024,61965
+      },
+      /*Cb  qi=63  OC_MODE_GOLDEN_NOMV*/
+      {
+         3448, 9737,14801,16948,20288,24726,28083,30080,
+        32603,34916,37185,38691,37611,38978,38254,41762
+      },
+      /*Cb  qi=63  OC_MODE_GOLDEN_MV*/
+      {
+         3384,12465,21541,25511,29472,33169,33776,34310,
+        34919,34996,35791,36164,36665,37309,37453,42492
+      }
+    },
+    {
+      /*Cr  qi=63  OC_MODE_INTRA*/
+      {
+         4731,14048,19421,23021,26358,29096,31971,34869,
+        37665,39194,40570,42899,44920,45586,48385,55323
+      },
+      /*Cr  qi=63  OC_MODE_INTER_NOMV*/
+      {
+         4672,10842,20473,26017,30252,34195,42240,36258,
+        40438,26514,19893,42624,42191,44576,23717,35456
+      },
+      /*Cr  qi=63  OC_MODE_INTER_MV*/
+      {
+         5013,11465,19912,26015,30548,34611,37458,38948,
+        42717,45724,49301,44595,45208,44149,48865,45369
+      },
+      /*Cr  qi=63  OC_MDOE_INTER_MV_LAST*/
+      {
+         4383,11291,19830,25779,30402,34283,36263,36423,
+        35857,33041,31324,30471,28939,29927,31898,27794
+      },
+      /*Cr  qi=63  OC_MODE_INTER_MV_LAST2*/
+      {
+         4233,11664,20034,26638,30913,34172,36486,38263,
+        39196,32849,32392,34608,37843,41750,42240,33403
+      },
+      /*Cr  qi=63  OC_MODE_INTER_MV_FOUR*/
+      {
+         3324,10804,19858,25938,30354,33911,36693,39624,
+        41989,45559,46904,41902,49312,43578,51593,30360
+      },
+      /*Cr  qi=63  OC_MODE_GOLDEN_NOMV*/
+      {
+         2957, 9412,12794,17537,21090,23556,26774,26498,
+        26616,27479,26969,27537,28664,29173,30867,31724
+      },
+      /*Cr  qi=63  OC_MODE_GOLDEN_MV*/
+      {
+         3141,11491,19876,24885,27337,29503,30714,29953,
+        30092,29909,28929,29603,29853,30442,30411,30485
+      }
+    }
+  }
+};
+
+ogg_uint16_t OC_RES_DISTORTS[64][3][OC_NMODES][16];
+
+#if defined(OC_BITRATE_STATS)
+static ogg_int64_t OC_RES_BITRATE_ACCUM[64][3][OC_NMODES][16];
+static int         OC_RES_BITRATE_SAMPLES[64][3][OC_NMODES][16];
+static ogg_int64_t OC_RES_DISTORT_ACCUM[64][3][OC_NMODES][16];
+static ogg_int64_t OC_RES_DISTORT_SAMPLES[64][3][OC_NMODES][16];
+
+#include <stdio.h>
+
+void oc_bitrate_stats_read(void){
+  FILE *in;
+  in=fopen("modedec.stats","rb");
+  if(in==NULL)return;
+  fread(OC_RES_BITRATE_ACCUM,sizeof(OC_RES_BITRATE_ACCUM),1,in);
+  fread(OC_RES_BITRATE_SAMPLES,sizeof(OC_RES_BITRATE_SAMPLES),1,in);
+  fread(OC_RES_DISTORT_ACCUM,sizeof(OC_RES_DISTORT_ACCUM),1,in);
+  fread(OC_RES_DISTORT_SAMPLES,sizeof(OC_RES_DISTORT_SAMPLES),1,in);
+  /*Update the current bitrate statistics in use.*/
+  {
+    int qi;
+    for(qi=0;qi<64;qi++){
+      int pli;
+      for(pli=0;pli<3;pli++){
+        int modei;
+        for(modei=0;modei<OC_NMODES;modei++){
+          int erri;
+          for(erri=0;erri<16;erri++){
+            int n;
+            n=OC_RES_BITRATE_SAMPLES[qi][pli][modei][erri];
+            if(n!=0){
+              OC_RES_BITRATES[qi][pli][modei][erri]=(ogg_uint16_t)OC_MINI(65535,
+               ((OC_RES_BITRATE_ACCUM[qi][pli][modei][erri]<<1)+n)/(n<<1));
+            }
+            n=OC_RES_DISTORT_SAMPLES[qi][pli][modei][erri];
+            if(n!=0){
+              OC_RES_DISTORTS[qi][pli][modei][erri]=(ogg_uint16_t)OC_MINI(65535,
+               ((OC_RES_DISTORT_ACCUM[qi][pli][modei][erri]<<OC_DIS_SCALE+1)+n)/
+               (n<<1));
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+void oc_bitrate_stats_write(void){
+  FILE *out;
+  out=fopen("modedec.stats","wb");
+  fwrite(OC_RES_BITRATE_ACCUM,sizeof(OC_RES_BITRATE_ACCUM),1,out);
+  fwrite(OC_RES_BITRATE_SAMPLES,sizeof(OC_RES_BITRATE_SAMPLES),1,out);
+  fwrite(OC_RES_DISTORT_ACCUM,sizeof(OC_RES_DISTORT_ACCUM),1,out);
+  fwrite(OC_RES_DISTORT_SAMPLES,sizeof(OC_RES_DISTORT_SAMPLES),1,out);
+}
+
+void oc_bitrate_update_stats(oc_enc_ctx *_enc,int _huff_idxs[5][3]){
+  static OC_HUFF_GROUP_IDXS[64]={
+    0,1,1,1,1,1,2,2,
+    2,2,2,2,2,2,2,3,
+    3,3,3,3,3,3,3,3,
+    3,3,3,3,4,4,4,4,
+    4,4,4,4,4,4,4,4,
+    4,4,4,4,4,4,4,4,
+    4,4,4,4,4,4,4,4,
+    4,4,4,4,4,4,4,4
+  };
+  ogg_uint32_t  eob_bits[64];
+  int           eob_runs[64];
+  int           ref_idx;
+  int           pli;
+  int          *coded_fragi;
+  int          *coded_fragi_end;
+  int           ti[64];
+  int           ebi[64];
+  int           zzi;
+  int           hgi;
+  int           token;
+  int           eb;
+  int           skip;
+  memset(eob_runs,0,sizeof(eob_runs));
+  memcpy(ti,_enc->dct_token_offs[0],sizeof(ti));
+  memcpy(ebi,_enc->extra_bits_offs,sizeof(ebi));
+  /*Set up for EOB runs that span coefficient boundaries.*/
+  for(zzi=1;zzi<64;zzi++){
+    /*If we've found the last coefficient spanned by a multi-coefficient EOB
+       run...*/
+    if(ti[zzi]&&(ti[zzi]<_enc->ndct_tokens[zzi]||zzi>=63||!ti[zzi+1])){
+      int zzj;
+      int zzk;
+      /*Find the portion of the EOB run that used to be in this coefficient
+         and in any other coefficients after the first one spanned by the
+         run.*/
+      token=_enc->dct_tokens[zzi][0];
+      eb=OC_DCT_TOKEN_EXTRA_BITS[token]?_enc->extra_bits[zzi][0]:0;
+      skip=-oc_dct_token_skip(token,eb);
+      for(zzj=zzi-1;ti[zzj]>=_enc->ndct_tokens[zzj];zzj--){
+        if(ti[zzj]){
+          token=_enc->dct_tokens[zzj][0];
+          eb=OC_DCT_TOKEN_EXTRA_BITS[token]?_enc->extra_bits[zzj][0]:0;
+          skip-=oc_dct_token_skip(token,eb);
+        }
+      }
+      /*Find the first non-trivial coefficient in the EOB run.*/
+      for(zzk=zzj+1;!ti[zzk];zzk++);
+      /*Find the total length of the EOB run.*/
+      token=_enc->dct_tokens[zzj][_enc->ndct_tokens[zzj]-1];
+      eb=OC_DCT_TOKEN_EXTRA_BITS[token]?
+       _enc->extra_bits[zzj][_enc->nextra_bits[zzj]-1]:0;
+      eob_runs[zzk]=-oc_dct_token_skip(token,eb);
+      /*Find the Huffman group index and the color plane index where the EOB
+         run was actually coded.*/
+      hgi=OC_HUFF_GROUP_IDXS[zzj];
+      for(pli=0;pli<2;pli++){
+        if(_enc->dct_token_offs[pli+1][zzj]>=_enc->ndct_tokens[zzj])break;
+      }
+      eob_bits[zzk]=OC_DCT_TOKEN_EXTRA_BITS[token]+
+       _enc->huff_codes[_huff_idxs[hgi][pli]][token].nbits<<OC_BIT_SCALE;
+      /*Compute the bits that will be left to be distributed when we start
+         each non-trivial coefficient spanned by the run after the one the run
+         is started in.*/
+      for(;;){
+        while(eob_runs[zzk]>skip){
+          eob_bits[zzk]-=
+           ((eob_bits[zzk]<<1)+eob_runs[zzi])/(eob_runs[zzk]<<1);
+          eob_runs[zzk]--;
+        }
+        if(zzk>=zzi)break;
+        zzj=zzk;
+        /*Skip to the next non-trivial coefficient.*/
+        for(zzk++;!ti[zzk];zzk++);
+        eob_bits[zzk]=eob_bits[zzj];
+        eob_runs[zzk]=eob_runs[zzj];
+        /*And remove the EOB tokens that belonged to this coefficient.*/
+        token=_enc->dct_tokens[zzj][0];
+        eb=OC_DCT_TOKEN_EXTRA_BITS[token]?_enc->extra_bits[zzj][0]:0;
+        skip+=oc_dct_token_skip(token,eb);
+      }
+    }
+  }
+  /*Now, eob_bits and eob_runs are initialized exactly as they would be if we
+     were going through a coefficient at a time (as things are ordered in the
+     bitstream) instead of a block at a time.
+    That setup was a little complicated, but it lets us now go through in
+     block order, maintaining a counter for each coefficient, instead of
+     traversing each block for each coefficient and maintaining a counter and
+     bit count per block.*/
+  /*Go through the actual encoded tokens and assign the bits used by each to
+     the fragment(s) they came from.*/
+  ref_idx=_enc->state.ref_frame_idx[OC_FRAME_SELF];
+  coded_fragi_end=coded_fragi=_enc->state.coded_fragis;
+  for(pli=0;pli<3;pli++){
+    int ref_ystride;
+    int cur_ystride;
+    cur_ystride=_enc->state.input[pli].ystride;
+    ref_ystride=_enc->state.ref_frame_bufs[ref_idx][pli].ystride;
+    coded_fragi_end+=_enc->state.ncoded_fragis[pli];
+    for(;coded_fragi<coded_fragi_end;coded_fragi++){
+      oc_fragment *frag;
+      int          fragi;
+      fragi=*coded_fragi;
+      frag=_enc->state.frags+fragi;
+      if(frag->coded){
+        oc_fragment_enc_info *efrag;
+        ogg_uint32_t          frag_bits;
+        int                   err_bin;
+        efrag=_enc->frinfo+fragi;
+        frag_bits=0;
+        for(zzi=0;zzi<64;){
+          if(eob_runs[zzi]){
+            ogg_uint32_t bits;
+            /*Evenly divide the bits for an EOB run among the fragments
+               that it ends.
+              This incremental formulation ensures that the exact
+               correct number of bits gets distributed.*/
+            bits=((eob_bits[zzi]<<1)+eob_runs[zzi])/(eob_runs[zzi]<<1);
+            eob_bits[zzi]-=bits;
+            eob_runs[zzi]--;
+            frag_bits+=bits;
+            break;
+          }
+          token=_enc->dct_tokens[zzi][ti[zzi]++];
+          eb=OC_DCT_TOKEN_EXTRA_BITS[token]?
+           _enc->extra_bits[zzi][ebi[zzi]++]:0;
+          skip=oc_dct_token_skip(token,eb);
+          hgi=OC_HUFF_GROUP_IDXS[zzi];
+          if(skip<0){
+            eob_runs[zzi]=-skip;
+            eob_bits[zzi]=OC_DCT_TOKEN_EXTRA_BITS[token]+
+             _enc->huff_codes[_huff_idxs[hgi][pli]][token].nbits<<OC_BIT_SCALE;
+          }
+          else{
+            frag_bits+=OC_DCT_TOKEN_EXTRA_BITS[token]+
+             _enc->huff_codes[_huff_idxs[hgi][pli]][token].nbits<<OC_BIT_SCALE;
+            zzi+=skip;
+          }
+        }
+        err_bin=efrag->eerror>>(frag->mbmode==OC_MODE_INTRA?8:6);
+        err_bin=OC_MINI(15,err_bin);
+        if(!frag->invalid){
+          unsigned char *cur;
+          unsigned char *ref;
+          int            err;
+          int            i;
+          int            j;
+          OC_RES_BITRATE_ACCUM[frag->qi][pli][frag->mbmode][err_bin]+=frag_bits;
+          OC_RES_BITRATE_SAMPLES[frag->qi][pli][frag->mbmode][err_bin]++;
+          err=0;
+          cur=frag->buffer[OC_FRAME_IO];
+          ref=frag->buffer[ref_idx];
+          if(frag->border!=NULL){
+            ogg_int64_t mask;
+            mask=frag->border->mask;
+            for(i=0;i<8;i++){
+              for(j=0;j<8;j++){
+                if(mask&1){
+                  err+=abs(cur[j]-ref[j]);
+                }
+                mask>>=1;
+              }
+              cur+=cur_ystride;
+              ref+=ref_ystride;
+            }
+            OC_RES_DISTORT_SAMPLES[frag->qi][pli][frag->mbmode][err_bin]+=
+             frag->border->npixels;
+          }
+          else{
+            for(i=0;i<8;i++){
+              for(j=0;j<8;j++)err+=abs(cur[j]-ref[j]);
+              cur+=cur_ystride;
+              ref+=ref_ystride;
+            }
+            OC_RES_DISTORT_SAMPLES[frag->qi][pli][frag->mbmode][err_bin]+=64;
+          }
+          OC_RES_DISTORT_ACCUM[frag->qi][pli][frag->mbmode][err_bin]+=err;
+        }
+      }
+    }
+  }
+  /*Update the current bitrate statistics in use.*/
+  {
+    int qi;
+    for(qi=0;qi<64;qi++){
+      for(pli=0;pli<3;pli++){
+        int modei;
+        for(modei=0;modei<OC_NMODES;modei++){
+          int erri;
+          for(erri=0;erri<16;erri++){
+            int n;
+            n=OC_RES_BITRATE_SAMPLES[qi][pli][modei][erri];
+            if(n!=0){
+              OC_RES_BITRATES[qi][pli][modei][erri]=(ogg_uint16_t)OC_MINI(65535,
+               ((OC_RES_BITRATE_ACCUM[qi][pli][modei][erri]<<1)+n)/(n<<1));
+            }
+            n=OC_RES_DISTORT_SAMPLES[qi][pli][modei][erri];
+            if(n!=0){
+              OC_RES_DISTORTS[qi][pli][modei][erri]=(ogg_uint16_t)OC_MINI(65535,
+               ((OC_RES_DISTORT_ACCUM[qi][pli][modei][erri]<<OC_DIS_SCALE+1)+n)/
+               (n<<1));
+            }
+          }
+        }
+      }
+    }
+  }
+}
+#endif
+
+
+
+
+
+
+
+
+
+
+
+#if 0
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+
+/*\rho domain rate-distortion analysis, after He \cite{He2001}
+  TODO: Is this worth the speed hit?
+
+  @PHDTHESIS{He2001,
+    author="Zhihai He",
+    title="\rho-Domain Rate-Distortion Analysis and Rate-Control for Visual
+     Coding and Communication",
+    school="University of California at Santa Barbara",
+    year=2001
+  }*/
+
+
+/*256*(A(\rho), B(\rho) and C(\rho)) for \rho=0/64..64/64, where
+   the bitrate for a macro block is approximated as
+   Q_{nz}(\rho)*A(\rho)+Q_z(\rho)*B(\rho)+C(\rho).
+  TODO: These numbers were extrapolated from numbers derived from JPEG.
+  We should derive our own numbers at some point.*/
+static const int OC_INTRA_RATE_PARAMS[65][3]={
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{311,-114,231},{311,-114,231},{311,-114,231},
+  {311,-114,231},{305,-115,231},{272,-119,232},{240,-124,234},
+  {207,-129,236},{194,-119,230},{181,-110,224},{168,-100,217},
+  {161, -96,212},{156, -93,208},{150, -90,203},{146, -82,196},
+  {145, -73,188},{143, -63,179},{137, -55,171},{125, -49,163},
+  {113, -43,156},{104, -38,150},{104, -38,150},{104, -38,150},
+  {104, -38,150}
+};
+
+/*Estimates the number of bits required to code this macro block in intra
+   mode.
+  _enc:     The encoding context.
+  _mbi:     The macro block index.
+  _nc_bits: Returns the number of bits required for the not-coded fragments.
+            This is used for key frame decisions.
+  Return: The number of bits required for the coded fragments.*/
+int oc_enc_intra_bits_est(oc_enc_ctx *_enc,int _mbi,int *_nc_bits){
+  oc_mb          *mb;
+  oc_mb_enc_info *emb;
+  ogg_uint16_t   *fquant;
+  ogg_uint16_t   *iquant;
+  ogg_int32_t     bits;
+  ogg_int32_t     nc_bits;
+  int             q_nz;
+  int             q_z;
+  int             rho;
+  int             bi;
+  emb=_enc->mbinfo+_mbi;
+  mb=_enc->state.mbs+_mbi;
+  fquant=_enc->enquant_tables[_enc->state.qi].intra_y;
+  iquant=_enc->state.dequant_tables[_enc->state.qi].intra_y;
+  bits=nc_bits=0;
+  for(bi=0;bi<4;bi++){
+    oc_fragment_enc_info *efrag;
+    ogg_int32_t           frag_bits;
+    int                   zzi;
+    int                   zrun;
+    efrag=_enc->frinfo+mb->map[0][bi];
+    q_nz=q_z=rho=zrun=0;
+    for(zzi=0;zzi<64;zzi++){
+      int c_abs;
+      int ci;
+      ci=OC_FZIG_ZAG[zzi];
+      c_abs=abs(efrag->dct_coeffs[ci]);
+      if(c_abs<=OC_MAXI(efrag->tols[ci],iquant[ci]>>1)){
+        zrun++;
+        rho++;
+      }
+      else{
+        if(zrun){
+          q_z+=1+oc_ilog(zrun);
+          zrun=0;
+        }
+        q_nz+=1+oc_ilog((ogg_int32_t)c_abs*fquant[ci]+OC_FQUANT_ROUND>>
+         OC_FQUANT_SHIFT);
+      }
+    }
+    if(zrun)q_z+=1+oc_ilog(zrun);
+    frag_bits=OC_INTRA_RATE_PARAMS[rho][0]*(ogg_int32_t)q_nz+
+     OC_INTRA_RATE_PARAMS[rho][1]*(ogg_int32_t)q_z+
+     OC_INTRA_RATE_PARAMS[rho][2];
+    if(_enc->state.frags[mb->map[0][bi]].coded)bits+=frag_bits;
+    else nc_bits=frag_bits;
+  }
+  /*TODO: Chroma fragments.*/
+  *_nc_bits=(int)(nc_bits+128>>8);
+  return (int)(bits+128>>8);
+}
+#endif

Added: trunk/theora-exp/lib/dct.h
===================================================================
--- trunk/theora-exp/lib/dct.h	                        (rev 0)
+++ trunk/theora-exp/lib/dct.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,14 @@
+/*Definitions shared by the forward and inverse DCT transforms.*/
+#if !defined(_dct_H)
+# define _dct_H (1)
+
+/*cos(n*pi/16) (resp. sin(m*pi/16)) scaled by 65536.*/
+#define OC_C1S7 ((ogg_int32_t)64277)
+#define OC_C2S6 ((ogg_int32_t)60547)
+#define OC_C3S5 ((ogg_int32_t)54491)
+#define OC_C4S4 ((ogg_int32_t)46341)
+#define OC_C5S3 ((ogg_int32_t)36410)
+#define OC_C6S2 ((ogg_int32_t)25080)
+#define OC_C7S1 ((ogg_int32_t)12785)
+
+#endif

Added: trunk/theora-exp/lib/decapiwrapper.c
===================================================================
--- trunk/theora-exp/lib/decapiwrapper.c	                        (rev 0)
+++ trunk/theora-exp/lib/decapiwrapper.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,170 @@
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "apiwrapper.h"
+#include "theora/theoradec.h"
+
+
+
+static void th_dec_api_clear(th_api_wrapper *_api){
+  if(_api->setup)th_setup_free(_api->setup);
+  if(_api->decode)th_decode_free(_api->decode);
+  memset(_api,0,sizeof(*_api));
+}
+
+static void theora_decode_clear(theora_state *_td){
+  if(_td->i!=NULL)theora_info_clear(_td->i);
+  memset(_td,0,sizeof(*_td));
+}
+
+static int theora_decode_control(theora_state *_td,int _req,
+ void *_buf,size_t _buf_sz){
+  return th_decode_ctl(((th_api_wrapper *)_td->i->codec_setup)->decode,
+   _req,_buf,_buf_sz);
+}
+
+static ogg_int64_t theora_decode_granule_frame(theora_state *_td,
+ ogg_int64_t _gp){
+  return th_granule_frame(((th_api_wrapper *)_td->i->codec_setup)->decode,_gp);
+}
+
+static double theora_decode_granule_time(theora_state *_td,ogg_int64_t _gp){
+  return th_granule_time(((th_api_wrapper *)_td->i->codec_setup)->decode,_gp);
+}
+
+static const oc_state_dispatch_vtbl OC_DEC_DISPATCH_VTBL={
+  (oc_state_clear_func)theora_decode_clear,
+  (oc_state_control_func)theora_decode_control,
+  (oc_state_granule_frame_func)theora_decode_granule_frame,
+  (oc_state_granule_time_func)theora_decode_granule_time,
+};
+
+static void th_info2theora_info(theora_info *_ci,const th_info *_info){
+  _ci->version_major=_info->version_major;
+  _ci->version_minor=_info->version_minor;
+  _ci->version_subminor=_info->version_subminor;
+  _ci->width=_info->frame_width;
+  _ci->height=_info->frame_height;
+  _ci->frame_width=_info->pic_width;
+  _ci->frame_height=_info->pic_height;
+  _ci->offset_x=_info->pic_x;
+  _ci->offset_y=_info->pic_y;
+  _ci->fps_numerator=_info->fps_numerator;
+  _ci->fps_denominator=_info->fps_denominator;
+  _ci->aspect_numerator=_info->aspect_numerator;
+  _ci->aspect_denominator=_info->aspect_denominator;
+  switch(_info->colorspace){
+    case TH_CS_ITU_REC_470M:_ci->colorspace=OC_CS_ITU_REC_470M;break;
+    case TH_CS_ITU_REC_470BG:_ci->colorspace=OC_CS_ITU_REC_470BG;break;
+    default:_ci->colorspace=OC_CS_UNSPECIFIED;break;
+  }
+  switch(_info->pixel_fmt){
+    case TH_PF_420:_ci->pixelformat=OC_PF_420;break;
+    case TH_PF_422:_ci->pixelformat=OC_PF_422;break;
+    case TH_PF_444:_ci->pixelformat=OC_PF_444;break;
+    default:_ci->pixelformat=OC_PF_RSVD;
+  }
+  _ci->target_bitrate=_info->target_bitrate;
+  _ci->quality=_info->quality;
+  _ci->keyframe_frequency_force=1<<_info->keyframe_granule_shift;
+}
+
+int theora_decode_init(theora_state *_td,theora_info *_ci){
+  th_api_info    *apiinfo;
+  th_api_wrapper *api;
+  th_info         info;
+  api=(th_api_wrapper *)_ci->codec_setup;
+  /*Allocate our own combined API wrapper/theora_info struct.
+    We put them both in one malloc'd block so that when the API wrapper is
+     freed, the info struct goes with it.
+    This avoids having to figure out whether or not we need to free the info
+     struct in either theora_info_clear() or theora_clear().*/
+  apiinfo=(th_api_info *)_ogg_calloc(1,sizeof(*apiinfo));
+  /*Make our own copy of the info struct, since its lifetime should be
+     independent of the one we were passed in.*/
+  *&apiinfo->info=*_ci;
+  /*Convert the info struct now instead of saving the the one we decoded with
+     theora_decode_header(), since the user might have modified values (i.e.,
+     color space, aspect ratio, etc. can be specified from a higher level).
+    The user also might be doing something "clever" with the header packets if
+     they are not using an Ogg encapsulation.*/
+  oc_theora_info2th_info(&info,_ci);
+  /*Don't bother to copy the setup info; th_decode_alloc() makes its own copy
+     of the stuff it needs.*/
+  apiinfo->api.decode=th_decode_alloc(&info,api->setup);
+  if(apiinfo->api.decode==NULL){
+    _ogg_free(apiinfo);
+    return OC_EINVAL;
+  }
+  apiinfo->api.clear=(oc_setup_clear_func)th_dec_api_clear;
+  _td->internal_encode=NULL;
+  /*Provide entry points for ABI compatibility with old decoder shared libs.*/
+  _td->internal_decode=(void *)&OC_DEC_DISPATCH_VTBL;
+  _td->granulepos=0;
+  _td->i=&apiinfo->info;
+  _td->i->codec_setup=&apiinfo->api;
+  return 0;
+}
+
+int theora_decode_header(theora_info *_ci,theora_comment *_cc,ogg_packet *_op){
+  th_api_wrapper *api;
+  th_info         info;
+  int             ret;
+  api=(th_api_wrapper *)_ci->codec_setup;
+  /*Allocate an API wrapper struct on demand, since it will not also include a
+     theora_info struct like the ones that are used in a theora_state struct.*/
+  if(api==NULL){
+    _ci->codec_setup=_ogg_calloc(1,sizeof(*api));
+    api=(th_api_wrapper *)_ci->codec_setup;
+    api->clear=(oc_setup_clear_func)th_dec_api_clear;
+  }
+  /*Convert from the theora_info struct instead of saving our own th_info
+     struct between calls.
+    The user might be doing something "clever" with the header packets if they
+     are not using an Ogg encapsulation, and we don't want to break this.*/
+  oc_theora_info2th_info(&info,_ci);
+  /*We rely on the fact that theora_comment and th_comment structures are
+     actually identical.
+    Take care not to change this fact unless you change the code here as
+     well!*/
+  ret=th_decode_headerin(&info,(th_comment *)_cc,&api->setup,_op);
+  /*We also rely on the fact that the error return code values are the same,
+    and that the implementations of these two functions return the same set of
+    them.
+   Note that theora_decode_header() really can return OC_NOTFORMAT, even
+    though it is not currently documented to do so.*/
+  if(ret<0)return ret;
+  th_info2theora_info(_ci,&info);
+  return 0;
+}
+
+int theora_decode_packetin(theora_state *_td,ogg_packet *_op){
+  th_api_wrapper *api;
+  ogg_int64_t     gp;
+  int             ret;
+  api=(th_api_wrapper *)_td->i->codec_setup;
+  ret=th_decode_packetin(api->decode,_op,&gp);
+  if(ret<0)return OC_BADPACKET;
+  _td->granulepos=gp;
+  return 0;
+}
+
+int theora_decode_YUVout(theora_state *_td,yuv_buffer *_yuv){
+  th_api_wrapper  *api;
+  th_ycbcr_buffer  buf;
+  int              ret;
+  api=(th_api_wrapper *)_td->i->codec_setup;
+  ret=th_decode_ycbcr_out(api->decode,buf);
+  if(ret>=0){
+    _yuv->y_width=buf[0].width;
+    _yuv->y_height=buf[0].height;
+    _yuv->y_stride=buf[0].ystride;
+    _yuv->uv_width=buf[1].width;
+    _yuv->uv_height=buf[1].height;
+    _yuv->uv_stride=buf[1].ystride;
+    _yuv->y=buf[0].data;
+    _yuv->u=buf[1].data;
+    _yuv->v=buf[2].data;
+  }
+  return ret;
+}

Added: trunk/theora-exp/lib/decinfo.c
===================================================================
--- trunk/theora-exp/lib/decinfo.c	                        (rev 0)
+++ trunk/theora-exp/lib/decinfo.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,215 @@
+#include <stdlib.h>
+#include <string.h>
+#include "decint.h"
+
+
+
+/*Unpacks a series of octets from a given byte array into the pack buffer.
+  No checking is done to ensure the buffer contains enough data.
+  _opb: The pack buffer to read the octets from.
+  _buf: The byte array to store the unpacked bytes in.
+  _len: The number of octets to unpack.*/
+static void oc_unpack_octets(oggpack_buffer *_opb,char *_buf,size_t _len){
+  while(_len-->0){
+    long val;
+    theora_read(_opb,8,&val);
+    *_buf++=(char)val;
+  }
+}
+
+/*Unpacks a 32-bit integer encoded by octets in little-endian form.*/
+static long oc_unpack_length(oggpack_buffer *_opb){
+  long ret[4];
+  int  i;
+  for(i=0;i<4;i++)theora_read(_opb,8,ret+i);
+  return ret[0]|ret[1]<<8|ret[2]<<16|ret[3]<<24;
+}
+
+static int oc_info_unpack(oggpack_buffer *_opb,th_info *_info){
+  long val;
+  /*Check the codec bitstream version.*/
+  theora_read(_opb,8,&val);
+  _info->version_major=(unsigned char)val;
+  theora_read(_opb,8,&val);
+  _info->version_minor=(unsigned char)val;
+  theora_read(_opb,8,&val);
+  _info->version_subminor=(unsigned char)val;
+  if(_info->version_major>TH_VERSION_MAJOR||
+   _info->version_major==TH_VERSION_MAJOR&&
+   _info->version_minor>TH_VERSION_MINOR){
+    return TH_EVERSION;
+  }
+  /*Read the encoded frame description.*/
+  theora_read(_opb,16,&val);
+  _info->frame_width=(ogg_uint32_t)val<<4;
+  theora_read(_opb,16,&val);
+  _info->frame_height=(ogg_uint32_t)val<<4;
+  theora_read(_opb,24,&val);
+  _info->pic_width=(ogg_uint32_t)val;
+  theora_read(_opb,24,&val);
+  _info->pic_height=(ogg_uint32_t)val;
+  theora_read(_opb,8,&val);
+  _info->pic_x=(ogg_uint32_t)val;
+  /*Note: The sense of pic_y is inverted in what we pass back to the
+     application compared to how it is stored in the bitstream.
+    This is because the bitstream uses a right-handed coordinate system, while
+     applications expect a left-handed one.*/
+  theora_read(_opb,8,&val);
+  _info->pic_y=_info->frame_height-_info->pic_height-(ogg_uint32_t)val;
+  theora_read32(_opb,&val);
+  _info->fps_numerator=(ogg_uint32_t)val;
+  theora_read32(_opb,&val);
+  _info->fps_denominator=(ogg_uint32_t)val;
+  if(_info->frame_width<=0||_info->frame_height<=0||
+   _info->pic_width+_info->pic_x>_info->frame_width||
+   _info->pic_height+_info->pic_y>_info->frame_height||
+   _info->fps_numerator<=0||_info->fps_denominator<=0){
+    return TH_EBADHEADER;
+  }
+  theora_read(_opb,24,&val);
+  _info->aspect_numerator=(ogg_uint32_t)val;
+  theora_read(_opb,24,&val);
+  _info->aspect_denominator=(ogg_uint32_t)val;
+  theora_read(_opb,8,&val);
+  _info->colorspace=(th_colorspace)val;
+  theora_read(_opb,24,&val);
+  _info->target_bitrate=(int)val;
+  theora_read(_opb,6,&val);
+  _info->quality=(int)val;
+  theora_read(_opb,5,&val);
+  _info->keyframe_granule_shift=(int)val;
+  theora_read(_opb,2,&val);
+  _info->pixel_fmt=(th_pixel_fmt)val;
+  if(_info->pixel_fmt==TH_PF_RSVD)return TH_EBADHEADER;
+  if(theora_read(_opb,3,&val)<0||val!=0)return TH_EBADHEADER;
+  return 0;
+}
+
+static int oc_comment_unpack(oggpack_buffer *_opb,th_comment *_tc){
+  long len;
+  /*Read the vendor string.*/
+  len=oc_unpack_length(_opb);
+  if(len<0)return TH_EBADHEADER;
+  _tc->vendor=_ogg_malloc((size_t)len+1);
+  oc_unpack_octets(_opb,_tc->vendor,len);
+  _tc->vendor[len]='\0';
+  /*Read the user comments.*/
+  _tc->comments=oc_unpack_length(_opb);
+  if(_tc->comments>=0){
+    int i;
+    _tc->comment_lengths=(int *)_ogg_malloc(
+     _tc->comments*sizeof(_tc->comment_lengths[0]));
+    _tc->user_comments=(char **)_ogg_malloc(
+     _tc->comments*sizeof(_tc->user_comments[0]));
+    for(i=0;i<_tc->comments;i++){
+      len=oc_unpack_length(_opb);
+      if(len<0)return TH_EBADHEADER;
+      _tc->comment_lengths[i]=len;
+      _tc->user_comments[i]=_ogg_malloc((size_t)len+1);
+      oc_unpack_octets(_opb,_tc->user_comments[i],len);
+      _tc->user_comments[i][len]='\0';
+    }
+  }
+  return theora_read(_opb,0,&len)<0?TH_EBADHEADER:0;
+}
+
+static int oc_setup_unpack(oggpack_buffer *_opb,th_setup_info *_setup){
+  int ret;
+  /*Read the quantizer tables.*/
+  ret=oc_quant_params_unpack(_opb,&_setup->qinfo);
+  if(ret<0)return ret;
+  /*Read the Huffman trees.*/
+  return oc_huff_trees_unpack(_opb,_setup->huff_tables);
+}
+
+static void oc_setup_clear(th_setup_info *_setup){
+  oc_quant_params_clear(&_setup->qinfo);
+  oc_huff_trees_clear(_setup->huff_tables);
+}
+
+static int oc_dec_headerin(oggpack_buffer *_opb,th_info *_info,
+ th_comment *_tc,th_setup_info **_setup,ogg_packet *_op){
+  char buffer[6];
+  long val;
+  int  packtype;
+  int  ret;
+  theora_read(_opb,8,&val);
+  packtype=(int)val;
+  /*If we're at a data packet and we have received all three headers, we're
+     done.*/
+  if(!(packtype&0x80)&&_info->frame_width>0&&_tc->vendor!=NULL&&*_setup!=NULL){
+    return 0;
+  }
+  /*Check the codec string.*/
+  oc_unpack_octets(_opb,buffer,6);
+  if(memcmp(buffer,"theora",6)!=0)return TH_ENOTFORMAT;
+  switch(packtype){
+    /*Codec info header.*/
+    case 0x80:{
+      /*This should be the first packet, and we should not already be
+         initialized.*/
+      if(!_op->b_o_s||_info->frame_width>0)return TH_EBADHEADER;
+      ret=oc_info_unpack(_opb,_info);
+      if(ret<0)th_info_clear(_info);
+      else ret=3;
+    }break;
+    /*Comment header.*/
+    case 0x81:{
+      if(_tc==NULL)return TH_EFAULT;
+      /*We shoud have already decoded the info header, and should not yet have
+         decoded the comment header.*/
+      if(_info->frame_width<=0||_tc->vendor!=NULL)return TH_EBADHEADER;
+      ret=oc_comment_unpack(_opb,_tc);
+      if(ret<0)th_comment_clear(_tc);
+      else ret=2;
+    }break;
+    /*Codec setup header.*/
+    case 0x82:{
+      oc_setup_info *setup;
+      if(_tc==NULL||_setup==NULL)return TH_EFAULT;
+      /*We should have already decoded the info header and the comment header,
+         and should not yet have decoded the setup header.*/
+      if(_info->frame_width<=0||_tc->vendor==NULL||*_setup!=NULL){
+        return TH_EBADHEADER;
+      }
+      setup=(oc_setup_info *)_ogg_calloc(1,sizeof(*setup));
+      ret=oc_setup_unpack(_opb,setup);
+      if(ret<0){
+        oc_setup_clear(setup);
+        _ogg_free(setup);
+      }
+      else{
+        *_setup=setup;
+        ret=1;
+      }
+    }break;
+    default:{
+      /*We don't know what this header is.*/
+      return TH_EBADHEADER;
+    }break;
+  }
+  return ret;
+}
+
+
+/*Decodes one header packet.
+  This should be called repeatedly with the packets at the beginning of the
+   stream until it returns 0.*/
+int th_decode_headerin(th_info *_info,th_comment *_tc,
+ th_setup_info **_setup,ogg_packet *_op){
+  oggpack_buffer opb;
+  int            ret;
+  if(_op==NULL)return TH_EBADHEADER;
+  if(_info==NULL)return TH_EFAULT;
+  oggpackB_readinit(&opb,_op->packet,_op->bytes);
+  ret=oc_dec_headerin(&opb,_info,_tc,_setup,_op);
+  /*TODO: Clear opb in libogg2.*/
+  return ret;
+}
+
+void th_setup_free(th_setup_info *_setup){
+  if(_setup!=NULL){
+    oc_setup_clear(_setup);
+    _ogg_free(_setup);
+  }
+}

Added: trunk/theora-exp/lib/decint.h
===================================================================
--- trunk/theora-exp/lib/decint.h	                        (rev 0)
+++ trunk/theora-exp/lib/decint.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,121 @@
+#include <limits.h>
+#if !defined(_decint_H)
+# define _decint_H (1)
+# include "theora/theoradec.h"
+# include "internal.h"
+
+typedef struct th_setup_info oc_setup_info;
+typedef struct th_dec_ctx    oc_dec_ctx;
+
+# include "idct.h"
+# include "huffdec.h"
+# include "dequant.h"
+
+/*Constants for the packet-in state machine specific to the decoder.*/
+
+/*Next packet to read: Data packet.*/
+#define OC_PACKET_DATA (0)
+
+
+
+struct th_setup_info{
+  /*The Huffman codes.*/
+  oc_huff_node  *huff_tables[TH_NHUFFMAN_TABLES];
+  /*The quantization parameters.*/
+  th_quant_info  qinfo;
+};
+
+
+
+struct th_dec_ctx{
+  /*Shared encoder/decoder state.*/
+  oc_theora_state      state;
+  /*Whether or not packets are ready to be emitted.
+    This takes on negative values while there are remaining header packets to
+     be emitted, reaches 0 when the codec is ready for input, and goes to 1
+     when a frame has been processed and a data packet is ready.*/
+  int                  packet_state;
+  /*Buffer in which to assemble packets.*/
+  oggpack_buffer       opb;
+  /*Huffman decode trees.*/
+  oc_huff_node        *huff_tables[TH_NHUFFMAN_TABLES];
+  /*The index of one past the last token in each plane for each coefficient.
+    The final entries are the total number of tokens for each coefficient.*/
+  int                  ti0[3][64];
+  /*The index of one past the last extra bits entry in each plane for each
+     coefficient.
+    The final entries are the total number of extra bits entries for each
+     coefficient.*/
+  int                  ebi0[3][64];
+  /*The number of outstanding EOB runs at the start of each coefficient in each
+     plane.*/
+  int                  eob_runs[3][64];
+  /*The DCT token lists.*/
+  unsigned char      **dct_tokens;
+  /*The extra bits associated with DCT tokens.*/
+  ogg_uint16_t       **extra_bits;
+  /*The out-of-loop post-processing level.*/
+  int                  pp_level;
+  /*The DC scale used for out-of-loop deblocking.*/
+  int                  pp_dc_scale[64];
+  /*The sharpen modifier used for out-of-loop deringing.*/
+  int                  pp_sharp_mod[64];
+  /*The DC quantization index of each block.*/
+  unsigned char       *dc_qis;
+  /*The variance of each block.*/
+  int                 *variances;
+  /*The storage for the post-processed frame buffer.*/
+  unsigned char       *pp_frame_data;
+  /*Whether or not the post-processsed frame buffer has space for chroma.*/
+  int                  pp_frame_has_chroma;
+  /*The buffer used for the post-processed frame.*/
+  th_ycbcr_buffer      pp_frame_buf;
+  /*The striped decode callback function.*/
+  th_stripe_callback   stripe_cb;
+};
+
+/*Fix-ups for the libogg1 API, which returns -1 when there are insufficient
+   bits left in the packet as the value read.
+  This has two problems:
+  a) Cannot distinguish between reading 32 1 bits and failing to have
+   sufficient bits left in the packet.
+  b) Returns values that are outside the range [0..(1<<nbits)-1], which can
+   crash code that uses such values as indexes into arrays, etc.
+
+  We solve the first problem by doing two reads and combining the results.
+  We solve the second problem by masking out the result based on the sign bit
+   of the return value.
+  It's a little more work, but branchless, so it should not slow us down much.
+
+  The libogg2 API does not have these problems, and the definitions of the
+   functions below can be replaced by direct libogg2 calls.
+
+  One issue remaining is that in libogg2, the return value and the number of
+   bits parameters are swapped between the read and write functions.
+  This can cause some confusion.
+  We could fix that in our wrapper here, but then we would be swapped from the
+   normal libogg2 calls, which could also cause confusion.
+  For the moment we keep the libogg2 parameter ordering.*/
+
+/*Read 32 bits.
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+extern int theora_read32(oggpack_buffer *_opb,long *_ret);
+/*Read n bits, where n <= 31 for libogg1.
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+extern int theora_read(oggpack_buffer *_opb,int _nbits,long *_ret);
+/*Read 1 bit,
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+extern int theora_read1(oggpack_buffer *_opb,long *_ret);
+/*Look ahead n bits, where n <= 31 for libogg1.
+  In the event that there are some bits remaining, but fewer than n, then the
+   remaining bits are returned, with the missing bits set to 0, and the
+   function succeeds.
+  The stream can be advanced afterwards with oggpackB_adv().
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+extern int theora_look(oggpack_buffer *_opb,int _nbits,long *_ret);
+
+#endif

Added: trunk/theora-exp/lib/decode.c
===================================================================
--- trunk/theora-exp/lib/decode.c	                        (rev 0)
+++ trunk/theora-exp/lib/decode.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,2114 @@
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+#include "decint.h"
+#if defined(OC_DUMP_IMAGES)
+# include <stdio.h>
+# include "png.h"
+#endif
+
+
+
+/*No post-processing.*/
+#define OC_PP_LEVEL_DISABLED  (0)
+/*Keep track of DC qi for each block only.*/
+#define OC_PP_LEVEL_TRACKDCQI (1)
+/*Deblock the luma plane.*/
+#define OC_PP_LEVEL_DEBLOCKY  (2)
+/*Dering the luma plane.*/
+#define OC_PP_LEVEL_DERINGY   (3)
+/*Stronger luma plane deringing.*/
+#define OC_PP_LEVEL_SDERINGY  (4)
+/*Deblock the chroma planes.*/
+#define OC_PP_LEVEL_DEBLOCKC  (5)
+/*Dering the chroma planes.*/
+#define OC_PP_LEVEL_DERINGC   (6)
+/*Stronger chroma plane deringing.*/
+#define OC_PP_LEVEL_SDERINGC  (7)
+/*Maximum valid post-processing level.*/
+#define OC_PP_LEVEL_MAX       (7)
+
+/*Read 32 bits.
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+int theora_read32(oggpack_buffer *_opb,long *_ret){
+  long ret1;
+  long ret2;
+  long mask;
+  ret1=oggpackB_read(_opb,16);
+  ret2=oggpackB_read(_opb,16);
+  mask=ret2>>31;
+  *_ret=((ret1<<16)|ret2)&~mask;
+  return (int)mask;
+}
+
+/*Read n bits, where n <= 31 for libogg1.
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+int theora_read(oggpack_buffer *_opb,int _nbits,long *_ret){
+  long mask;
+  *_ret=oggpackB_read(_opb,_nbits);
+  mask=*_ret>>31;
+  *_ret&=~mask;
+  return (int)mask;
+}
+
+/*Read 1 bit,
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+int theora_read1(oggpack_buffer *_opb,long *_ret){
+  int mask;
+  *_ret=oggpackB_read1(_opb);
+  mask=(int)*_ret>>31;
+  *_ret&=~mask;
+  return mask;
+}
+
+/*Look ahead n bits, where n <= 31 for libogg1.
+  In the event that there are some bits remaining, but fewer than n, then the
+   remaining bits are returned, with the missing bits set to 0, and the
+   function succeeds.
+  The stream can be advanced afterwards with oggpackB_adv().
+  *_ret is set to 0 on failure.
+  Return: 0 on success, or a negative value on failure.*/
+int theora_look(oggpack_buffer *_opb,int _nbits,long *_ret){
+  int nbits;
+  *_ret=oggpackB_look(_opb,_nbits);
+  if(*_ret>=0)return 0;
+  /*libogg1 fails if we try to look past the end of the stream.
+    We might be looking ahead more bits than we actually need, however, and so
+     we must return the ones that are actually there.*/
+  /*There's no accessor for the storage field, which we need to figure out
+     how many bits _are_ left in the buffer (without resorting to trial and
+     error, which would be silly).*/
+  nbits=(_opb->storage<<3)-oggpackB_bits(_opb);
+  if(nbits>0){
+    /*If there are some bits left, return them.*/
+    *_ret=oggpackB_look(_opb,nbits)<<_nbits-nbits;
+    /*Success should be guaranteed.*/
+    return 0;
+  }
+  /*If there are no bits left, then we truly should fail.*/
+  *_ret=0;
+  return -1;
+}
+
+
+/*The mode alphabets for the various mode coding schemes.
+  Scheme 0 uses a custom alphabet, which is not stored in this table.*/
+static const int OC_MODE_ALPHABETS[7][OC_NMODES]={
+  /*Last MV dominates */
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV_LAST2,OC_MODE_INTER_MV,
+    OC_MODE_INTER_NOMV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV_LAST2,OC_MODE_INTER_NOMV,
+    OC_MODE_INTER_MV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV,OC_MODE_INTER_MV_LAST2,
+    OC_MODE_INTER_NOMV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV,OC_MODE_INTER_NOMV,
+    OC_MODE_INTER_MV_LAST2,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,
+    OC_MODE_GOLDEN_MV,OC_MODE_INTER_MV_FOUR
+  },
+  /*No MV dominates.*/
+  {
+    OC_MODE_INTER_NOMV,OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV_LAST2,
+    OC_MODE_INTER_MV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_NOMV,OC_MODE_GOLDEN_NOMV,OC_MODE_INTER_MV_LAST,
+    OC_MODE_INTER_MV_LAST2,OC_MODE_INTER_MV,OC_MODE_INTRA,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  /*Default ordering.*/
+  {
+    OC_MODE_INTER_NOMV,OC_MODE_INTRA,OC_MODE_INTER_MV,OC_MODE_INTER_MV_LAST,
+    OC_MODE_INTER_MV_LAST2,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  }
+};
+
+
+
+static int oc_sb_run_unpack(oggpack_buffer *_opb){
+  long bits;
+  int ret;
+  /*Coding scheme:
+       Codeword            Run Length
+     0                       1
+     10x                     2-3
+     110x                    4-5
+     1110xx                  6-9
+     11110xxx                10-17
+     111110xxxx              18-33
+     111111xxxxxxxxxxxx      34-4129*/
+  theora_read1(_opb,&bits);
+  if(bits==0)return 1;
+  theora_read(_opb,2,&bits);
+  if((bits&2)==0)return 2+(int)bits;
+  else if((bits&1)==0){
+    theora_read1(_opb,&bits);
+    return 4+(int)bits;
+  }
+  theora_read(_opb,3,&bits);
+  if((bits&4)==0)return 6+(int)bits;
+  else if((bits&2)==0){
+    ret=10+((bits&1)<<2);
+    theora_read(_opb,2,&bits);
+    return ret+(int)bits;
+  }
+  else if((bits&1)==0){
+    theora_read(_opb,4,&bits);
+    return 18+(int)bits;
+  }
+  theora_read(_opb,12,&bits);
+  return 34+(int)bits;
+}
+
+static int oc_block_run_unpack(oggpack_buffer *_opb){
+  long bits;
+  long bits2;
+  /*Coding scheme:
+     Codeword             Run Length
+     0x                      1-2
+     10x                     3-4
+     110x                    5-6
+     1110xx                  7-10
+     11110xx                 11-14
+     11111xxxx               15-30*/
+  theora_read(_opb,2,&bits);
+  if((bits&2)==0)return 1+(int)bits;
+  else if((bits&1)==0){
+    theora_read1(_opb,&bits);
+    return 3+(int)bits;
+  }
+  theora_read(_opb,2,&bits);
+  if((bits&2)==0)return 5+(int)bits;
+  else if((bits&1)==0){
+    theora_read(_opb,2,&bits);
+    return 7+(int)bits;
+  }
+  theora_read(_opb,3,&bits);
+  if((bits&4)==0)return 11+bits;
+  theora_read(_opb,2,&bits2);
+  return 15+((bits&3)<<2)+bits2;
+}
+
+
+
+static int oc_dec_init(oc_dec_ctx *_dec,const th_info *_info,
+ const th_setup_info *_setup){
+  int qti;
+  int pli;
+  int qi;
+  int ret;
+  ret=oc_state_init(&_dec->state,_info);
+  if(ret<0)return ret;
+  oc_huff_trees_copy(_dec->huff_tables,
+   (const oc_huff_node *const *)_setup->huff_tables);
+  for(qti=0;qti<2;qti++)for(pli=0;pli<3;pli++){
+    _dec->state.dequant_tables[qti][pli]=
+     _dec->state.dequant_table_data[qti][pli];
+  }
+  oc_dequant_tables_init(_dec->state.dequant_tables,_dec->pp_dc_scale,
+   &_setup->qinfo);
+  for(qi=0;qi<64;qi++){
+    int qsum;
+    qsum=0;
+    for(qti=0;qti<2;qti++)for(pli=0;pli<3;pli++){
+      qsum+=_dec->state.dequant_tables[qti][pli][qi][18]+
+       _dec->state.dequant_tables[qti][pli][qi][19]+
+       _dec->state.dequant_tables[qti][pli][qi][26]+
+       _dec->state.dequant_tables[qti][pli][qi][27]<<(pli==0);
+    }
+    _dec->pp_sharp_mod[qi]=-(qsum>>11);
+  }
+  _dec->dct_tokens=(unsigned char **)oc_calloc_2d(64,
+   _dec->state.nfrags,sizeof(_dec->dct_tokens[0][0]));
+  _dec->extra_bits=(ogg_uint16_t **)oc_calloc_2d(64,
+   _dec->state.nfrags,sizeof(_dec->extra_bits[0][0]));
+  memcpy(_dec->state.loop_filter_limits,_setup->qinfo.loop_filter_limits,
+   sizeof(_dec->state.loop_filter_limits));
+  _dec->pp_level=OC_PP_LEVEL_DISABLED;
+  _dec->dc_qis=NULL;
+  _dec->variances=NULL;
+  _dec->pp_frame_data=NULL;
+  _dec->stripe_cb.ctx=NULL;
+  _dec->stripe_cb.stripe_decoded=NULL;
+  return 0;
+}
+
+static void oc_dec_clear(oc_dec_ctx *_dec){
+  _ogg_free(_dec->pp_frame_data);
+  _ogg_free(_dec->variances);
+  _ogg_free(_dec->dc_qis);
+  oc_free_2d(_dec->extra_bits);
+  oc_free_2d(_dec->dct_tokens);
+  oc_huff_trees_clear(_dec->huff_tables);
+  oc_state_clear(&_dec->state);
+}
+
+
+static int oc_dec_frame_header_unpack(oc_dec_ctx *_dec){
+  long val;
+  /*Check to make sure this is a data packet.*/
+  theora_read1(&_dec->opb,&val);
+  if(val!=0)return TH_EBADPACKET;
+  /*Read in the frame type (I or P).*/
+  theora_read1(&_dec->opb,&val);
+  _dec->state.frame_type=(int)val;
+  /*Read in the current qi.*/
+  theora_read(&_dec->opb,6,&val);
+  _dec->state.qis[0]=(int)val;
+  theora_read1(&_dec->opb,&val);
+  if(!val)_dec->state.nqis=1;
+  else{
+    theora_read(&_dec->opb,6,&val);
+    _dec->state.qis[1]=(int)val;
+    theora_read1(&_dec->opb,&val);
+    if(!val)_dec->state.nqis=2;
+    else{
+      theora_read(&_dec->opb,6,&val);
+      _dec->state.qis[2]=(int)val;
+      _dec->state.nqis=3;
+    }
+  }
+  if(_dec->state.frame_type==OC_INTRA_FRAME){
+    /*Keyframes have 3 unused configuration bits, holdovers from VP3 days.
+      Most of the other unused bits in the VP3 headers were eliminated.
+      I don't know why these remain.*/
+    theora_read(&_dec->opb,3,&val);
+    if(val!=0)return TH_EIMPL;
+  }
+  return 0;
+}
+
+/*Mark all fragments as coded and in OC_MODE_INTRA.
+  This also builds up the coded fragment list (in coded order), and clears the
+   uncoded fragment list.
+  It does not update the coded macro block list, as that is not used when
+   decoding INTRA frames.*/
+static void oc_dec_mark_all_intra(oc_dec_ctx *_dec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  int    pli;
+  int    ncoded_fragis;
+  int    prev_ncoded_fragis;
+  prev_ncoded_fragis=ncoded_fragis=0;
+  sb=sb_end=_dec->state.sbs;
+  for(pli=0;pli<3;pli++){
+    const oc_fragment_plane *fplane;
+    fplane=_dec->state.fplanes+pli;
+    sb_end+=fplane->nsbs;
+    for(;sb<sb_end;sb++){
+      int quadi;
+      for(quadi=0;quadi<4;quadi++)if(sb->quad_valid&1<<quadi){
+        int bi;
+        for(bi=0;bi<4;bi++){
+          int fragi;
+          fragi=sb->map[quadi][bi];
+          if(fragi>=0){
+            oc_fragment *frag;
+            frag=_dec->state.frags+fragi;
+            frag->coded=1;
+            frag->mbmode=OC_MODE_INTRA;
+            _dec->state.coded_fragis[ncoded_fragis++]=fragi;
+          }
+        }
+      }
+    }
+    _dec->state.ncoded_fragis[pli]=ncoded_fragis-prev_ncoded_fragis;
+    prev_ncoded_fragis=ncoded_fragis;
+    _dec->state.nuncoded_fragis[pli]=0;
+  }
+}
+
+/*Decodes the bit flags for whether or not each super block is partially coded
+   or not.
+  Return: The number of partially coded super blocks.*/
+static int oc_dec_partial_sb_flags_unpack(oc_dec_ctx *_dec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  long   val;
+  int    flag;
+  int    npartial;
+  int    run_count;
+  theora_read1(&_dec->opb,&val);
+  flag=(int)val;
+  sb=_dec->state.sbs;
+  sb_end=sb+_dec->state.nsbs;
+  run_count=npartial=0;
+  while(sb<sb_end){
+    int full_run;
+    run_count=oc_sb_run_unpack(&_dec->opb);
+    full_run=run_count>=4129;
+    do{
+      sb->coded_partially=flag;
+      sb->coded_fully=0;
+      npartial+=flag;
+      sb++;
+    }
+    while(--run_count>0&&sb<sb_end);
+    if(full_run&&sb<sb_end){
+      theora_read1(&_dec->opb,&val);
+      flag=(int)val;
+    }
+    else flag=!flag;
+  }
+  /*TODO: run_count should be 0 here.
+    If it's not, we should issue a warning of some kind.*/
+  return npartial;
+}
+
+/*Decodes the bit flags for whether or not each non-partially-coded super
+   block is fully coded or not.
+  This function should only be called if there is at least one
+   non-partially-coded super block.
+  Return: The number of partially coded super blocks.*/
+static void oc_dec_coded_sb_flags_unpack(oc_dec_ctx *_dec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  long   val;
+  int    flag;
+  int    run_count;
+  sb=_dec->state.sbs;
+  sb_end=sb+_dec->state.nsbs;
+  /*Skip partially coded super blocks.*/
+  for(;sb->coded_partially;sb++);
+  theora_read1(&_dec->opb,&val);
+  flag=(int)val;
+  while(sb<sb_end){
+    int full_run;
+    run_count=oc_sb_run_unpack(&_dec->opb);
+    full_run=run_count>=4129;
+    for(;sb<sb_end;sb++){
+      if(sb->coded_partially)continue;
+      if(run_count--<=0)break;
+      sb->coded_fully=flag;
+    }
+    if(full_run&&sb<sb_end){
+      theora_read1(&_dec->opb,&val);
+      flag=(int)val;
+    }
+    else flag=!flag;
+  }
+  /*TODO: run_count should be 0 here.
+    If it's not, we should issue a warning of some kind.*/
+}
+
+static void oc_dec_coded_flags_unpack(oc_dec_ctx *_dec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  long   val;
+  int    npartial;
+  int    pli;
+  int    flag;
+  int    run_count;
+  int    ncoded_fragis;
+  int    prev_ncoded_fragis;
+  int    nuncoded_fragis;
+  int    prev_nuncoded_fragis;
+  npartial=oc_dec_partial_sb_flags_unpack(_dec);
+  if(npartial<_dec->state.nsbs)oc_dec_coded_sb_flags_unpack(_dec);
+  if(npartial>0){
+    theora_read1(&_dec->opb,&val);
+    flag=!(int)val;
+  }
+  else flag=0;
+  run_count=0;
+  prev_ncoded_fragis=ncoded_fragis=prev_nuncoded_fragis=nuncoded_fragis=0;
+  sb=sb_end=_dec->state.sbs;
+  for(pli=0;pli<3;pli++){
+    const oc_fragment_plane *fplane;
+    fplane=_dec->state.fplanes+pli;
+    sb_end+=fplane->nsbs;
+    for(;sb<sb_end;sb++){
+      int quadi;
+      for(quadi=0;quadi<4;quadi++)if(sb->quad_valid&1<<quadi){
+        int bi;
+        for(bi=0;bi<4;bi++){
+          int fragi;
+          fragi=sb->map[quadi][bi];
+          if(fragi>=0){
+            oc_fragment *frag;
+            frag=_dec->state.frags+fragi;
+            if(sb->coded_fully)frag->coded=1;
+            else if(!sb->coded_partially)frag->coded=0;
+            else{
+              if(run_count<=0){
+                run_count=oc_block_run_unpack(&_dec->opb);
+                flag=!flag;
+              }
+              run_count--;
+              frag->coded=flag;
+            }
+            if(frag->coded)_dec->state.coded_fragis[ncoded_fragis++]=fragi;
+            else *(_dec->state.uncoded_fragis-++nuncoded_fragis)=fragi;
+          }
+        }
+      }
+    }
+    _dec->state.ncoded_fragis[pli]=ncoded_fragis-prev_ncoded_fragis;
+    prev_ncoded_fragis=ncoded_fragis;
+    _dec->state.nuncoded_fragis[pli]=nuncoded_fragis-prev_nuncoded_fragis;
+    prev_nuncoded_fragis=nuncoded_fragis;
+  }
+  /*TODO: run_count should be 0 here.
+    If it's not, we should issue a warning of some kind.*/
+}
+
+
+
+typedef int (*oc_mode_unpack_func)(oggpack_buffer *_opb);
+
+static int oc_vlc_mode_unpack(oggpack_buffer *_opb){
+  long val;
+  int  i;
+  for(i=0;i<7;i++){
+    theora_read1(_opb,&val);
+    if(!val)break;
+  }
+  return i;
+}
+
+static int oc_clc_mode_unpack(oggpack_buffer *_opb){
+  long val;
+  theora_read(_opb,3,&val);
+  return (int)val;
+}
+
+/*Unpacks the list of macro block modes for INTER frames.*/
+void oc_dec_mb_modes_unpack(oc_dec_ctx *_dec){
+  oc_mode_unpack_func  mode_unpack;
+  oc_mb               *mb;
+  oc_mb               *mb_end;
+  const int           *alphabet;
+  long                 val;
+  int                  scheme0_alphabet[8];
+  int                  mode_scheme;
+  theora_read(&_dec->opb,3,&val);
+  mode_scheme=(int)val;
+  if(mode_scheme==0){
+    int mi;
+    /*Just in case, initialize the modes to something.
+      If the bitstream doesn't contain each index exactly once, it's likely
+       corrupt and the rest of the packet is garbage anyway, but this way we
+       won't crash, and we'll decode SOMETHING.*/
+    /*LOOP VECTORIZES.*/
+    for(mi=0;mi<OC_NMODES;mi++)scheme0_alphabet[mi]=OC_MODE_INTER_NOMV;
+    for(mi=0;mi<OC_NMODES;mi++){
+      theora_read(&_dec->opb,3,&val);
+      scheme0_alphabet[val]=OC_MODE_ALPHABETS[6][mi];
+    }
+    alphabet=scheme0_alphabet;
+  }
+  else alphabet=OC_MODE_ALPHABETS[mode_scheme-1];
+  if(mode_scheme==7)mode_unpack=oc_clc_mode_unpack;
+  else mode_unpack=oc_vlc_mode_unpack;
+  mb=_dec->state.mbs;
+  mb_end=mb+_dec->state.nmbs;
+  for(;mb<mb_end;mb++)if(mb->mode!=OC_MODE_INVALID){
+    int bi;
+    for(bi=0;bi<4;bi++){
+      int fragi;
+      fragi=mb->map[0][bi];
+      if(fragi>=0&&_dec->state.frags[fragi].coded)break;
+    }
+    if(bi<4)mb->mode=alphabet[(*mode_unpack)(&_dec->opb)];
+    else mb->mode=OC_MODE_INTER_NOMV;
+  }
+}
+
+
+
+typedef int (*oc_mv_comp_unpack_func)(oggpack_buffer *_opb);
+
+static int oc_vlc_mv_comp_unpack(oggpack_buffer *_opb){
+  long bits;
+  int  mvsigned[2];
+  theora_read(_opb,3,&bits);
+  switch(bits){
+    case  0:return 0;
+    case  1:return 1;
+    case  2:return -1;
+    case  3:
+    case  4:{
+      mvsigned[0]=(int)(bits-1);
+      theora_read1(_opb,&bits);
+    }break;
+    /*case  5:
+    case  6:
+    case  7:*/
+    default:{
+      mvsigned[0]=1<<bits-3;
+      theora_read(_opb,bits-2,&bits);
+      mvsigned[0]+=(int)(bits>>1);
+      bits&=1;
+    }break;
+  }
+  mvsigned[1]=-mvsigned[0];
+  return mvsigned[bits];
+}
+
+static int oc_clc_mv_comp_unpack(oggpack_buffer *_opb){
+  long bits;
+  int  mvsigned[2];
+  theora_read(_opb,6,&bits);
+  mvsigned[0]=bits>>1;
+  mvsigned[1]=-mvsigned[0];
+  return mvsigned[bits&1];
+}
+
+/*Unpacks the list of motion vectors for INTER frames, and propagtes the macro
+   block modes and motion vectors to the individual fragments.*/
+static void oc_dec_mv_unpack_and_frag_modes_fill(oc_dec_ctx *_dec){
+  oc_set_chroma_mvs_func  set_chroma_mvs;
+  oc_mv_comp_unpack_func  mv_comp_unpack;
+  oc_mv                   last_mv[2];
+  oc_mv                   cbmvs[4];
+  oc_mb                  *mb;
+  oc_mb                  *mb_end;
+  const int              *map_idxs;
+  long                    val;
+  int                     map_nidxs;
+  set_chroma_mvs=OC_SET_CHROMA_MVS_TABLE[_dec->state.info.pixel_fmt];
+  theora_read1(&_dec->opb,&val);
+  mv_comp_unpack=val?oc_clc_mv_comp_unpack:oc_vlc_mv_comp_unpack;
+  map_idxs=OC_MB_MAP_IDXS[_dec->state.info.pixel_fmt];
+  map_nidxs=OC_MB_MAP_NIDXS[_dec->state.info.pixel_fmt];
+  memset(last_mv,0,sizeof(last_mv));
+  mb=_dec->state.mbs;
+  mb_end=mb+_dec->state.nmbs;
+  for(;mb<mb_end;mb++)if(mb->mode!=OC_MODE_INVALID){
+    oc_fragment *frag;
+    oc_mv        mbmv;
+    int          coded[13];
+    int          codedi;
+    int          ncoded;
+    int          mapi;
+    int          mapii;
+    int          fragi;
+    int          mode;
+    /*Search for at least one coded fragment.*/
+    ncoded=mapii=0;
+    do{
+      mapi=map_idxs[mapii];
+      fragi=mb->map[mapi>>2][mapi&3];
+      if(fragi>=0&&_dec->state.frags[fragi].coded)coded[ncoded++]=mapi;
+    }
+    while(++mapii<map_nidxs);
+    if(ncoded<=0)continue;
+    mode=mb->mode;
+    switch(mode){
+      case OC_MODE_INTER_MV_FOUR:{
+        oc_mv lbmvs[4];
+        int   bi;
+        /*Mark the tail of the list, so we don't accidentally go past it.*/
+        coded[ncoded]=-1;
+        for(bi=codedi=0;bi<4;bi++){
+          if(coded[codedi]==bi){
+            codedi++;
+            frag=_dec->state.frags+mb->map[0][bi];
+            frag->mbmode=mode;
+            frag->mv[0]=lbmvs[bi][0]=(signed char)(*mv_comp_unpack)(&_dec->opb);
+            frag->mv[1]=lbmvs[bi][1]=(signed char)(*mv_comp_unpack)(&_dec->opb);
+          }
+          else lbmvs[bi][0]=lbmvs[bi][1]=0;
+        }
+        if(codedi>0){
+          last_mv[1][0]=last_mv[0][0];
+          last_mv[1][1]=last_mv[0][1];
+          last_mv[0][0]=lbmvs[coded[codedi-1]][0];
+          last_mv[0][1]=lbmvs[coded[codedi-1]][1];
+        }
+        if(codedi<ncoded){
+          (*set_chroma_mvs)(cbmvs,(const oc_mv *)lbmvs);
+          for(;codedi<ncoded;codedi++){
+            mapi=coded[codedi];
+            bi=mapi&3;
+            frag=_dec->state.frags+mb->map[mapi>>2][bi];
+            frag->mbmode=mode;
+            frag->mv[0]=cbmvs[bi][0];
+            frag->mv[1]=cbmvs[bi][1];
+          }
+        }
+      }break;
+      case OC_MODE_INTER_MV:{
+        last_mv[1][0]=last_mv[0][0];
+        last_mv[1][1]=last_mv[0][1];
+        mbmv[0]=last_mv[0][0]=(signed char)(*mv_comp_unpack)(&_dec->opb);
+        mbmv[1]=last_mv[0][1]=(signed char)(*mv_comp_unpack)(&_dec->opb);
+      }break;
+      case OC_MODE_INTER_MV_LAST:{
+        mbmv[0]=last_mv[0][0];
+        mbmv[1]=last_mv[0][1];
+      }break;
+      case OC_MODE_INTER_MV_LAST2:{
+        mbmv[0]=last_mv[1][0];
+        mbmv[1]=last_mv[1][1];
+        last_mv[1][0]=last_mv[0][0];
+        last_mv[1][1]=last_mv[0][1];
+        last_mv[0][0]=mbmv[0];
+        last_mv[0][1]=mbmv[1];
+      }break;
+      case OC_MODE_GOLDEN_MV:{
+        mbmv[0]=(signed char)(*mv_comp_unpack)(&_dec->opb);
+        mbmv[1]=(signed char)(*mv_comp_unpack)(&_dec->opb);
+      }break;
+      default:mbmv[0]=mbmv[1]=0;break;
+    }
+    /*4MV mode fills in the fragments itself.
+      For all other modes we can use this common code.*/
+    if(mode!=OC_MODE_INTER_MV_FOUR){
+      for(codedi=0;codedi<ncoded;codedi++){
+        mapi=coded[codedi];
+        fragi=mb->map[mapi>>2][mapi&3];
+        frag=_dec->state.frags+fragi;
+        frag->mbmode=mode;
+        frag->mv[0]=mbmv[0];
+        frag->mv[1]=mbmv[1];
+      }
+    }
+  }
+}
+
+static void oc_dec_block_qis_unpack(oc_dec_ctx *_dec){
+  oc_fragment *frag;
+  int         *coded_fragi;
+  int         *coded_fragi_end;
+  int          ncoded_fragis;
+  ncoded_fragis=_dec->state.ncoded_fragis[0]+
+   _dec->state.ncoded_fragis[1]+_dec->state.ncoded_fragis[2];
+  if(ncoded_fragis<=0)return;
+  coded_fragi=_dec->state.coded_fragis;
+  coded_fragi_end=coded_fragi+ncoded_fragis;
+  if(_dec->state.nqis==1){
+    /*If this frame has only a single qi value, then just set it in all coded
+       fragments.*/
+    while(coded_fragi<coded_fragi_end){
+      _dec->state.frags[*coded_fragi++].qi=_dec->state.qis[0];
+    }
+  }
+  else{
+    long val;
+    int  flag;
+    int  nqi0;
+    int  run_count;
+    /*Otherwise, we decode a qi index for each fragment, using two passes of
+      the same binary RLE scheme used for super-block coded bits.
+     The first pass marks each fragment as having a qii of 0 or greater than
+      0, and the second pass (if necessary), distinguishes between a qii of
+      1 and 2.
+     At first we just store the qii in the fragment.
+     After all the qii's are decoded, we make a final pass to replace them
+      with the corresponding qi's for this frame.*/
+    theora_read1(&_dec->opb,&val);
+    flag=(int)val;
+    run_count=nqi0=0;
+    while(coded_fragi<coded_fragi_end){
+      int full_run;
+      run_count=oc_sb_run_unpack(&_dec->opb);
+      full_run=run_count>=4129;
+      do{
+        _dec->state.frags[*coded_fragi++].qi=flag;
+        nqi0+=!flag;
+      }
+      while(--run_count>0&&coded_fragi<coded_fragi_end);
+      if(full_run&&coded_fragi<coded_fragi_end){
+        theora_read1(&_dec->opb,&val);
+        flag=(int)val;
+      }
+      else flag=!flag;
+    }
+    /*TODO: run_count should be 0 here.
+      If it's not, we should issue a warning of some kind.*/
+    /*If we have 3 different qi's for this frame, and there was at least one
+       fragment with a non-zero qi, make the second pass.*/
+    if(_dec->state.nqis==3&&nqi0<ncoded_fragis){
+      /*Skip qii==0 fragments.*/
+      for(coded_fragi=_dec->state.coded_fragis;
+       _dec->state.frags[*coded_fragi].qi==0;coded_fragi++);
+      theora_read1(&_dec->opb,&val);
+      flag=(int)val;
+      while(coded_fragi<coded_fragi_end){
+        int full_run;
+        run_count=oc_sb_run_unpack(&_dec->opb);
+        full_run=run_count>=4129;
+        for(;coded_fragi<coded_fragi_end;coded_fragi++){
+          oc_fragment *frag;
+          frag=_dec->state.frags+*coded_fragi;
+          if(frag->qi==0)continue;
+          if(run_count--<=0)break;
+          frag->qi+=flag;
+        }
+        if(full_run&&coded_fragi<coded_fragi_end){
+          theora_read1(&_dec->opb,&val);
+          flag=(int)val;
+        }
+        else flag=!flag;
+      }
+      /*TODO: run_count should be 0 here.
+        If it's not, we should issue a warning of some kind.*/
+    }
+    /*Finally, translate qii's to qi's.*/
+    for(coded_fragi=_dec->state.coded_fragis;coded_fragi<coded_fragi_end;
+     coded_fragi++){
+      frag=_dec->state.frags+*coded_fragi;
+      frag->qi=_dec->state.qis[frag->qi];
+    }
+  }
+}
+
+
+
+/*Returns the decoded value of the given token.
+  It CANNOT be called for any of the EOB tokens.
+  _token:      The token value to skip.
+  _extra_bits: The extra bits attached to this token.
+  Return: The decoded coefficient value.*/
+typedef int (*oc_token_dec1val_func)(int _token,int _extra_bits);
+
+/*Handles zero run tokens.*/
+static int oc_token_dec1val_zrl(void){
+  return 0;
+}
+
+/*Handles 1, -1, 2 and -2 tokens.*/
+static int oc_token_dec1val_const(int _token){
+  static const int CONST_VALS[4]={1,-1,2,-2};
+  return CONST_VALS[_token-OC_NDCT_ZRL_TOKEN_MAX];
+}
+
+/*Handles DCT value tokens category 2.*/
+static int oc_token_dec1val_cat2(int _token,int _extra_bits){
+  int valsigned[2];
+  valsigned[0]=_token-OC_DCT_VAL_CAT2+3;
+  valsigned[1]=-valsigned[0];
+  return valsigned[_extra_bits];
+}
+
+/*Handles DCT value tokens categories 3 through 8.*/
+static int oc_token_dec1val_cati(int _token,int _extra_bits){
+  static const int VAL_CAT_OFFS[6]={
+    OC_NDCT_VAL_CAT2_SIZE+3,
+    OC_NDCT_VAL_CAT2_SIZE+5,
+    OC_NDCT_VAL_CAT2_SIZE+9,
+    OC_NDCT_VAL_CAT2_SIZE+17,
+    OC_NDCT_VAL_CAT2_SIZE+33,
+    OC_NDCT_VAL_CAT2_SIZE+65
+  };
+  static const int VAL_CAT_MASKS[6]={
+    0x001,0x003,0x007,0x00F,0x01F,0x1FF
+  };
+  static const int VAL_CAT_SHIFTS[6]={1,2,3,4,5,9};
+  int valsigned[2];
+  int cati;
+  cati=_token-OC_NDCT_VAL_CAT2_MAX;
+  valsigned[0]=VAL_CAT_OFFS[cati]+(_extra_bits&VAL_CAT_MASKS[cati]);
+  valsigned[1]=-valsigned[0];
+  return valsigned[_extra_bits>>VAL_CAT_SHIFTS[cati]&1];
+}
+
+/*A jump table for compute the first coefficient value the given token value
+   represents.*/
+static const oc_token_dec1val_func OC_TOKEN_DEC1VAL_TABLE[TH_NDCT_TOKENS-
+ OC_NDCT_EOB_TOKEN_MAX]={
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_const,
+  (oc_token_dec1val_func)oc_token_dec1val_const,
+  (oc_token_dec1val_func)oc_token_dec1val_const,
+  (oc_token_dec1val_func)oc_token_dec1val_const,
+  oc_token_dec1val_cat2,
+  oc_token_dec1val_cat2,
+  oc_token_dec1val_cat2,
+  oc_token_dec1val_cat2,
+  oc_token_dec1val_cati,
+  oc_token_dec1val_cati,
+  oc_token_dec1val_cati,
+  oc_token_dec1val_cati,
+  oc_token_dec1val_cati,
+  oc_token_dec1val_cati,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl,
+  (oc_token_dec1val_func)oc_token_dec1val_zrl
+};
+
+/*Returns the decoded value of the given token.
+  It CANNOT be called for any of the EOB tokens.
+  _token:      The token value to skip.
+  _extra_bits: The extra bits attached to this token.
+  Return: The decoded coefficient value.*/
+int oc_dct_token_dec1val(int _token,int _extra_bits){
+  return (*OC_TOKEN_DEC1VAL_TABLE[_token-OC_NDCT_EOB_TOKEN_MAX])(_token,
+   _extra_bits);
+}
+
+/*Unpacks the DC coefficient tokens.
+  Unlike when unpacking the AC coefficient tokens, we actually need to decode
+   the DC coefficient values now so that we can do DC prediction.
+  _huff_idx:   The index of the Huffman table to use for each color plane.
+  _ntoks_left: The number of tokens left to be decoded in each color plane for
+                each coefficient.
+               This is updated as EOB tokens and zero run tokens are decoded.
+  Return: The length of any outstanding EOB run.*/
+static int oc_dec_dc_coeff_unpack(oc_dec_ctx *_dec,int _huff_idxs[3],
+ int _ntoks_left[3][64]){
+  long  val;
+  int  *coded_fragi;
+  int  *coded_fragi_end;
+  int   run_counts[64];
+  int   cfi;
+  int   eobi;
+  int   eobs;
+  int   ti;
+  int   ebi;
+  int   pli;
+  int   rli;
+  eobs=0;
+  ti=ebi=0;
+  coded_fragi_end=coded_fragi=_dec->state.coded_fragis;
+  for(pli=0;pli<3;pli++){
+    coded_fragi_end+=_dec->state.ncoded_fragis[pli];
+    memset(run_counts,0,sizeof(run_counts));
+    _dec->eob_runs[pli][0]=eobs;
+    /*Continue any previous EOB run, if there was one.*/
+    for(eobi=eobs;eobi-->0&&coded_fragi<coded_fragi_end;){
+      _dec->state.frags[*coded_fragi++].dc=0;
+    }
+    cfi=0;
+    while(eobs<_ntoks_left[pli][0]-cfi){
+      int token;
+      int neb;
+      int eb;
+      int skip;
+      cfi+=eobs;
+      run_counts[63]+=eobs;
+      token=oc_huff_token_decode(&_dec->opb,
+       _dec->huff_tables[_huff_idxs[pli]]);
+      _dec->dct_tokens[0][ti++]=(unsigned char)token;
+      neb=OC_DCT_TOKEN_EXTRA_BITS[token];
+      if(neb){
+        theora_read(&_dec->opb,neb,&val);
+        eb=(int)val;
+        _dec->extra_bits[0][ebi++]=(ogg_uint16_t)eb;
+      }
+      else eb=0;
+      skip=oc_dct_token_skip(token,eb);
+      if(skip<0){
+        eobs=eobi=-skip;
+        while(eobi-->0&&coded_fragi<coded_fragi_end){
+          _dec->state.frags[*coded_fragi++].dc=0;
+        }
+      }
+      else{
+        run_counts[skip-1]++;
+        cfi++;
+        eobs=0;
+        _dec->state.frags[*coded_fragi++].dc=oc_dct_token_dec1val(token,eb);
+      }
+    }
+    _dec->ti0[pli][0]=ti;
+    _dec->ebi0[pli][0]=ebi;
+    /*Set the EOB count to the portion of the last EOB run which extends past
+       this coefficient.*/
+    eobs=eobs+cfi-_ntoks_left[pli][0];
+    /*Add the portion of the last EOB which was included in this coefficient to
+       to the longest run length.*/
+    run_counts[63]+=_ntoks_left[pli][0]-cfi;
+    /*And convert the run_counts array to a moment table.*/
+    for(rli=63;rli-->0;)run_counts[rli]+=run_counts[rli+1];
+    /*Finally, subtract off the number of coefficients that have been
+       accounted for by runs started in this coefficient.*/
+    for(rli=64;rli-->0;)_ntoks_left[pli][rli]-=run_counts[rli];
+  }
+  return eobs;
+}
+
+/*Unpacks the AC coefficient tokens.
+  This can completely discard coefficient values while unpacking, and so is
+   somewhat simpler than unpacking the DC coefficient tokens.
+  _huff_idx:   The index of the Huffman table to use for each color plane.
+  _ntoks_left: The number of tokens left to be decoded in each color plane for
+                each coefficient.
+               This is updated as EOB tokens and zero run tokens are decoded.
+  _eobs:       The length of any outstanding EOB run from previous
+                coefficients.
+  Return: The length of any outstanding EOB run.*/
+static int oc_dec_ac_coeff_unpack(oc_dec_ctx *_dec,int _zzi,int _huff_idxs[3],
+ int _ntoks_left[3][64],int _eobs){
+  long val;
+  int  run_counts[64];
+  int  cfi;
+  int  ti;
+  int  ebi;
+  int  pli;
+  int  rli;
+  ti=ebi=0;
+  for(pli=0;pli<3;pli++){
+    memset(run_counts,0,sizeof(run_counts));
+    _dec->eob_runs[pli][_zzi]=_eobs;
+    cfi=0;
+    while(_eobs<_ntoks_left[pli][_zzi]-cfi){
+      int token;
+      int neb;
+      int eb;
+      int skip;
+      cfi+=_eobs;
+      run_counts[63]+=_eobs;
+      token=oc_huff_token_decode(&_dec->opb,
+       _dec->huff_tables[_huff_idxs[pli]]);
+      _dec->dct_tokens[_zzi][ti++]=(unsigned char)token;
+      neb=OC_DCT_TOKEN_EXTRA_BITS[token];
+      if(neb){
+        theora_read(&_dec->opb,neb,&val);
+        eb=(int)val;
+        _dec->extra_bits[_zzi][ebi++]=(ogg_uint16_t)eb;
+      }
+      else eb=0;
+      skip=oc_dct_token_skip(token,eb);
+      if(skip<0)_eobs=-skip;
+      else{
+        run_counts[skip-1]++;
+        cfi++;
+        _eobs=0;
+      }
+    }
+    _dec->ti0[pli][_zzi]=ti;
+    _dec->ebi0[pli][_zzi]=ebi;
+    /*Set the EOB count to the portion of the last EOB run which extends past
+       this coefficient.*/
+    _eobs=_eobs+cfi-_ntoks_left[pli][_zzi];
+    /*Add the portion of the last EOB which was included in this coefficient to
+       to the longest run length.*/
+    run_counts[63]+=_ntoks_left[pli][_zzi]-cfi;
+    /*And convert the run_counts array to a moment table.*/
+    for(rli=63;rli-->0;)run_counts[rli]+=run_counts[rli+1];
+    /*Finally, subtract off the number of coefficients that have been
+       accounted for by runs started in this coefficient.*/
+    for(rli=64-_zzi;rli-->0;)_ntoks_left[pli][_zzi+rli]-=run_counts[rli];
+  }
+  return _eobs;
+}
+
+/*Tokens describing the DCT coefficients that belong to each fragment are
+   stored in the bitstream grouped by coefficient, not by fragment.
+  This means that we either decode all the tokens in order, building up a
+   separate coefficient list for each fragment as we go, and then go back and
+   do the iDCT on each fragment, or we have to create separate lists of tokens
+   for each coefficient, so that we can pull the next token required off the
+   head of the appropriate list when decoding a specific fragment.
+  The former was VP3's choice, and it meant 2*w*h extra storage for all the
+   decoded coefficient values.
+  We take the second option, which lets us store just one or three bytes per
+   token (generally far fewer than the number of coefficients, due to EOB
+   tokens and zero runs), and which requires us to only maintain a counter for
+   each of the 64 coefficients, instead of a counter for every fragment to
+   determine where the next token goes.
+  Actually, we use 3 counters per coefficient, one for each color plane, so we
+   can decode all color planes simultaneously.
+  This lets us color conversion, etc., be done as soon as a full MCU (one or
+   two super block rows) is decoded, while the image data is still in cache.*/
+static void oc_dec_residual_tokens_unpack(oc_dec_ctx *_dec){
+  static const int OC_HUFF_LIST_MAX[5]={1,6,15,28,64};
+  long val;
+  int  ntoks_left[3][64];
+  int  huff_idxs[3];
+  int  pli;
+  int  zzi;
+  int  hgi;
+  int  huffi_y;
+  int  huffi_c;
+  int  eobs;
+  for(pli=0;pli<3;pli++)for(zzi=0;zzi<64;zzi++){
+    ntoks_left[pli][zzi]=_dec->state.ncoded_fragis[pli];
+  }
+  theora_read(&_dec->opb,4,&val);
+  huffi_y=(int)val;
+  theora_read(&_dec->opb,4,&val);
+  huffi_c=(int)val;
+  huff_idxs[0]=huffi_y;
+  huff_idxs[1]=huff_idxs[2]=huffi_c;
+  _dec->eob_runs[0][0]=0;
+  eobs=oc_dec_dc_coeff_unpack(_dec,huff_idxs,ntoks_left);
+  theora_read(&_dec->opb,4,&val);
+  huffi_y=(int)val;
+  theora_read(&_dec->opb,4,&val);
+  huffi_c=(int)val;
+  zzi=1;
+  for(hgi=1;hgi<5;hgi++){
+    huff_idxs[0]=huffi_y+(hgi<<4);
+    huff_idxs[1]=huff_idxs[2]=huffi_c+(hgi<<4);
+    for(;zzi<OC_HUFF_LIST_MAX[hgi];zzi++){
+      eobs=oc_dec_ac_coeff_unpack(_dec,zzi,huff_idxs,ntoks_left,eobs);
+    }
+  }
+  /*TODO: eobs should be exactly zero, or 4096 or greater.
+    The second case occurs when an EOB run of size zero is encountered, which
+     gets treated as an infinite EOB run (where infinity is INT_MAX).
+    If neither of these conditions holds, then a warning should be issued.*/
+}
+
+
+
+/*Expands a single token into the given coefficient list.
+  This fills in the zeros for zero runs as well as coefficient values, and
+   updates the index of the current coefficient.
+  It CANNOT be called for any of the EOB tokens.
+  _token:      The token value to expand.
+  _extra_bits: The extra bits associated with the token.
+  _dct_coeffs: The current list of coefficients, in zig-zag order.
+  _zzi:        A pointer to the zig-zag index of the next coefficient to write
+                to.
+               This is updated before the function returns.*/
+typedef void (*oc_token_expand_func)(int _token,int _extra_bits,
+ ogg_int16_t _dct_coeffs[128],int *_zzi);
+
+/*Expands a zero run token.*/
+void oc_token_expand_zrl(int _token,int _extra_bits,
+ ogg_int16_t _dct_coeffs[128],int *_zzi){
+  int zzi;
+  zzi=*_zzi;
+  do _dct_coeffs[zzi++]=0;
+  while(_extra_bits-->0);
+  *_zzi=zzi;
+}
+
+/*Expands a constant, single-value token.*/
+void oc_token_expand_const(int _token,int _extra_bits,
+ ogg_int16_t _dct_coeffs[128],int *_zzi){
+  _dct_coeffs[(*_zzi)++]=(ogg_int16_t)oc_token_dec1val_const(_token);
+}
+
+/*Expands category 2 single-valued tokens.*/
+void oc_token_expand_cat2(int _token,int _extra_bits,
+ ogg_int16_t _dct_coeffs[128],int *_zzi){
+  _dct_coeffs[(*_zzi)++]=
+   (ogg_int16_t)oc_token_dec1val_cat2(_token,_extra_bits);
+}
+
+/*Expands category 3 through 8 single-valued tokens.*/
+void oc_token_expand_cati(int _token,int _extra_bits,
+ ogg_int16_t _dct_coeffs[128],int *_zzi){
+  _dct_coeffs[(*_zzi)++]=
+   (ogg_int16_t)oc_token_dec1val_cati(_token,_extra_bits);
+}
+
+/*Expands a category 1a zero run/value combo token.*/
+void oc_token_expand_run_cat1a(int _token,int _extra_bits,
+ ogg_int16_t _dct_coeffs[128],int *_zzi){
+  int zzi;
+  int rl;
+  zzi=*_zzi;
+  /*LOOP VECTORIZES.*/
+  for(rl=_token-OC_DCT_RUN_CAT1A+1;rl-->0;)_dct_coeffs[zzi++]=0;
+  _dct_coeffs[zzi++]=(ogg_int16_t)(1-(_extra_bits<<1));
+  *_zzi=zzi;
+}
+
+/*Expands all other zero run/value combo tokens.*/
+void oc_token_expand_run(int _token,int _extra_bits,
+ ogg_int16_t _dct_coeffs[128],int *_zzi){
+  static const int NZEROS_ADJUST[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    6,10,1,2
+  };
+  static const int NZEROS_MASK[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    3,7,0,1
+  };
+  static const int VALUE_SHIFT[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    0,0,0,1
+  };
+  static const int VALUE_MASK[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    0,0,1,1
+  };
+  static const int VALUE_ADJUST[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    1,1,2,2
+  };
+  static const int SIGN_SHIFT[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    2,3,1,2
+  };
+  int valsigned[2];
+  int zzi;
+  int rl;
+  _token-=OC_DCT_RUN_CAT1B;
+  rl=(_extra_bits&NZEROS_MASK[_token])+NZEROS_ADJUST[_token];
+  zzi=*_zzi;
+  /*LOOP VECTORIZES.*/
+  while(rl-->0)_dct_coeffs[zzi++]=0;
+  valsigned[0]=VALUE_ADJUST[_token]+
+   (_extra_bits>>VALUE_SHIFT[_token]&VALUE_MASK[_token]);
+  valsigned[1]=-valsigned[0];
+  _dct_coeffs[zzi++]=(ogg_int16_t)valsigned[
+   _extra_bits>>SIGN_SHIFT[_token]];
+  *_zzi=zzi;
+}
+
+/*A jump table for expanding token values into coefficient values.
+  This reduces all the conditional branches, etc., needed to parse these token
+   values down to one indirect jump.*/
+static const oc_token_expand_func OC_TOKEN_EXPAND_TABLE[TH_NDCT_TOKENS-
+ OC_NDCT_EOB_TOKEN_MAX]={
+  oc_token_expand_zrl,
+  oc_token_expand_zrl,
+  oc_token_expand_const,
+  oc_token_expand_const,
+  oc_token_expand_const,
+  oc_token_expand_const,
+  oc_token_expand_cat2,
+  oc_token_expand_cat2,
+  oc_token_expand_cat2,
+  oc_token_expand_cat2,
+  oc_token_expand_cati,
+  oc_token_expand_cati,
+  oc_token_expand_cati,
+  oc_token_expand_cati,
+  oc_token_expand_cati,
+  oc_token_expand_cati,
+  oc_token_expand_run_cat1a,
+  oc_token_expand_run_cat1a,
+  oc_token_expand_run_cat1a,
+  oc_token_expand_run_cat1a,
+  oc_token_expand_run_cat1a,
+  oc_token_expand_run,
+  oc_token_expand_run,
+  oc_token_expand_run,
+  oc_token_expand_run
+};
+
+/*Expands a single token into the given coefficient list.
+  This fills in the zeros for zero runs as well as coefficient values, and
+   updates the index of the current coefficient.
+  It CANNOT be called for any of the EOB tokens.
+  _token:      The token value to expand.
+  _extra_bits: The extra bits associated with the token.
+  _dct_coeffs: The current list of coefficients, in zig-zag order.
+  _zzi:        A pointer to the zig-zag index of the next coefficient to write
+                to.
+               This is updated before the function returns.*/
+static void oc_dct_token_expand(int _token,int _extra_bits,
+ ogg_int16_t *_dct_coeffs,int *_zzi){
+  (*OC_TOKEN_EXPAND_TABLE[_token-OC_NDCT_EOB_TOKEN_MAX])(_token,
+   _extra_bits,_dct_coeffs,_zzi);
+}
+
+
+
+static int oc_dec_postprocess_init(oc_dec_ctx *_dec){
+  /*pp_level 0: disabled; free any memory used and return*/
+  if(_dec->pp_level<=OC_PP_LEVEL_DISABLED){
+    if(_dec->dc_qis!=NULL){
+      _ogg_free(_dec->dc_qis);
+      _dec->dc_qis=NULL;
+      _ogg_free(_dec->variances);
+      _dec->variances=NULL;
+      _ogg_free(_dec->pp_frame_data);
+      _dec->pp_frame_data=NULL;
+    }
+    return 1;
+  }
+  if(_dec->dc_qis==NULL){
+    /*If we haven't been tracking DC quantization indices, there's no point in
+       starting now.*/
+    if(_dec->state.frame_type!=OC_INTRA_FRAME)return 1;
+    _dec->dc_qis=(unsigned char *)_ogg_malloc(
+     _dec->state.nfrags*sizeof(_dec->dc_qis[0]));
+    memset(_dec->dc_qis,_dec->state.qis[0],_dec->state.nfrags);
+  }
+  else{
+    int           *coded_fragi;
+    int           *coded_fragi_end;
+    unsigned char  qi0;
+    /*Update the DC quantization index of each coded block.*/
+    qi0=(unsigned char)_dec->state.qis[0];
+    coded_fragi_end=_dec->state.coded_fragis+_dec->state.ncoded_fragis[0]+
+     _dec->state.ncoded_fragis[1]+_dec->state.ncoded_fragis[2];
+    for(coded_fragi=_dec->state.coded_fragis;coded_fragi<coded_fragi_end;
+     coded_fragi++){
+      _dec->dc_qis[*coded_fragi]=qi0;
+    }
+  }
+  /*pp_level 1: Stop after updating DC quantization indices.*/
+  if(_dec->pp_level<=OC_PP_LEVEL_TRACKDCQI){
+    if(_dec->variances!=NULL){
+      _ogg_free(_dec->variances);
+      _dec->variances=NULL;
+      _ogg_free(_dec->pp_frame_data);
+      _dec->pp_frame_data=NULL;
+    }
+    return 1;
+  }
+  if(_dec->variances==NULL||
+   _dec->pp_frame_has_chroma!=(_dec->pp_level>=OC_PP_LEVEL_DEBLOCKC)){
+    size_t frame_sz;
+    frame_sz=_dec->state.info.frame_width*_dec->state.info.frame_height;
+    if(_dec->pp_level<OC_PP_LEVEL_DEBLOCKC){
+      _dec->variances=(int *)_ogg_realloc(_dec->variances,
+       _dec->state.fplanes[0].nfrags*sizeof(_dec->variances[0]));
+      _dec->pp_frame_data=(unsigned char *)_ogg_realloc( 
+       _dec->pp_frame_data,frame_sz*sizeof(_dec->pp_frame_data[0]));
+      _dec->pp_frame_buf[0].width=_dec->state.info.frame_width;
+      _dec->pp_frame_buf[0].height=_dec->state.info.frame_height;
+      _dec->pp_frame_buf[0].ystride=-_dec->pp_frame_buf[0].width;
+      _dec->pp_frame_buf[0].data=_dec->pp_frame_data+
+       (1-_dec->pp_frame_buf[0].height)*_dec->pp_frame_buf[0].ystride;
+    }
+    else{
+      size_t y_sz;
+      size_t c_sz;
+      int    c_w;
+      int    c_h;
+      _dec->variances=(int *)_ogg_realloc(_dec->variances,
+       _dec->state.nfrags*sizeof(_dec->variances[0]));
+      y_sz=frame_sz;
+      c_w=_dec->state.info.frame_width>>!(_dec->state.info.pixel_fmt&1);
+      c_h=_dec->state.info.frame_height>>!(_dec->state.info.pixel_fmt&2);
+      c_sz=c_w*c_h;
+      frame_sz+=c_sz<<1;
+      _dec->pp_frame_data=(unsigned char *)_ogg_realloc( 
+       _dec->pp_frame_data,frame_sz*sizeof(_dec->pp_frame_data[0]));
+      _dec->pp_frame_buf[0].width=_dec->state.info.frame_width;
+      _dec->pp_frame_buf[0].height=_dec->state.info.frame_height;
+      _dec->pp_frame_buf[0].ystride=_dec->pp_frame_buf[0].width;
+      _dec->pp_frame_buf[0].data=_dec->pp_frame_data;
+      _dec->pp_frame_buf[1].width=c_w;
+      _dec->pp_frame_buf[1].height=c_h;
+      _dec->pp_frame_buf[1].ystride=_dec->pp_frame_buf[1].width;
+      _dec->pp_frame_buf[1].data=_dec->pp_frame_buf[0].data+y_sz;
+      _dec->pp_frame_buf[2].width=c_w;
+      _dec->pp_frame_buf[2].height=c_h;
+      _dec->pp_frame_buf[2].ystride=_dec->pp_frame_buf[2].width;
+      _dec->pp_frame_buf[2].data=_dec->pp_frame_buf[1].data+c_sz;
+      oc_ycbcr_buffer_flip(_dec->pp_frame_buf,_dec->pp_frame_buf);
+    }
+    _dec->pp_frame_has_chroma=(_dec->pp_level>=OC_PP_LEVEL_DEBLOCKC);
+  }
+  /*If we're not processing chroma, copy the reference frame's chroma planes.*/
+  if(_dec->pp_level<OC_PP_LEVEL_DEBLOCKC){
+    memcpy(_dec->pp_frame_buf+1,
+     _dec->state.ref_frame_bufs[_dec->state.ref_frame_idx[OC_FRAME_SELF]]+1,
+     sizeof(_dec->pp_frame_buf[1])*2);
+  }
+  return 0;
+}
+
+
+
+typedef struct{
+  int  ti[3][64];
+  int  ebi[3][64];
+  int  eob_runs[3][64];
+  int  bounding_values[256];
+  int *coded_fragis[3];
+  int *uncoded_fragis[3];
+  int  fragy0[3];
+  int  fragy_end[3];
+  int  ncoded_fragis[3];
+  int  nuncoded_fragis[3];
+  int  pred_last[3][3];
+  int  mcu_nvfrags;
+  int  loop_filter;
+  int  pp_level;
+}oc_dec_pipeline_state;
+
+
+
+/*Initialize the main decoding pipeline.*/
+static void oc_dec_pipeline_init(oc_dec_ctx *_dec,
+ oc_dec_pipeline_state *_pipe){
+  int *coded_fragi_end;
+  int *uncoded_fragi_end;
+  int  pli;
+  /*If chroma is sub-sampled in the vertical direction, we have to decode two
+     super block rows of Y' for each super block row of Cb and Cr.*/
+  _pipe->mcu_nvfrags=4<<!(_dec->state.info.pixel_fmt&2);
+  /*Initialize the token and extra bits indices for each plane and
+     coefficient.*/
+  memset(_pipe->ti[0],0,sizeof(_pipe->ti[0]));
+  memset(_pipe->ebi[0],0,sizeof(_pipe->ebi[0]));
+  for(pli=1;pli<3;pli++){
+    memcpy(_pipe->ti[pli],_dec->ti0[pli-1],sizeof(_pipe->ti[0]));
+    memcpy(_pipe->ebi[pli],_dec->ebi0[pli-1],sizeof(_pipe->ebi[0]));
+  }
+  /*Also copy over the initial the EOB run counts.*/
+  memcpy(_pipe->eob_runs,_dec->eob_runs,sizeof(_pipe->eob_runs));
+  /*Set up per-plane pointers to the coded and uncoded fragments lists.*/
+  coded_fragi_end=_dec->state.coded_fragis;
+  uncoded_fragi_end=_dec->state.uncoded_fragis;
+  for(pli=0;pli<3;pli++){
+    _pipe->coded_fragis[pli]=coded_fragi_end;
+    _pipe->uncoded_fragis[pli]=uncoded_fragi_end;
+    coded_fragi_end+=_dec->state.ncoded_fragis[pli];
+    uncoded_fragi_end-=_dec->state.nuncoded_fragis[pli];
+  }
+  /*Set the previous DC predictor to 0 for all color planes and frame types.*/
+  memset(_pipe->pred_last,0,sizeof(_pipe->pred_last));
+  /*Initialize the bounding value array for the loop filter.*/
+  _pipe->loop_filter=!oc_state_loop_filter_init(&_dec->state,
+   _pipe->bounding_values);
+  /*Initialize any buffers needed for post-processing.
+    We also save the current post-processing level, to guard against the user
+     changing it from a callback.*/
+  if(!oc_dec_postprocess_init(_dec))_pipe->pp_level=_dec->pp_level;
+  /*If we don't have enough information to post-process, disable it, regardless
+     of the user-requested level.*/
+  else{
+    _pipe->pp_level=OC_PP_LEVEL_DISABLED;
+    memcpy(_dec->pp_frame_buf,
+     _dec->state.ref_frame_bufs[_dec->state.ref_frame_idx[OC_FRAME_SELF]],
+     sizeof(_dec->pp_frame_buf[0])*3);
+  }
+}
+
+/*Undo the DC prediction in a single plane of an MCU (one or two super block
+   rows).
+  As a side effect, the number of coded and uncoded fragments in this plane of
+   the MCU is also computed.*/
+static void oc_dec_dc_unpredict_mcu_plane(oc_dec_ctx *_dec,
+ oc_dec_pipeline_state *_pipe,int _pli){
+  /*Undo the DC prediction.*/
+  oc_fragment_plane *fplane;
+  oc_fragment       *frag;
+  int               *pred_last;
+  int                ncoded_fragis;
+  int                fragx;
+  int                fragy;
+  int                fragy0;
+  int                fragy_end;
+  /*Compute the first and last fragment row of the current MCU for this
+     plane.*/
+  fplane=_dec->state.fplanes+_pli;
+  fragy0=_pipe->fragy0[_pli];
+  fragy_end=_pipe->fragy_end[_pli];
+  frag=_dec->state.frags+fplane->froffset+(fragy0*fplane->nhfrags);
+  ncoded_fragis=0;
+  pred_last=_pipe->pred_last[_pli];
+  for(fragy=fragy0;fragy<fragy_end;fragy++){
+    for(fragx=0;fragx<fplane->nhfrags;fragx++,frag++){
+      if(!frag->coded)continue;
+      pred_last[OC_FRAME_FOR_MODE[frag->mbmode]]=frag->dc+=
+       oc_frag_pred_dc(frag,fplane,fragx,fragy,pred_last);
+      ncoded_fragis++;
+    }
+  }
+  _pipe->ncoded_fragis[_pli]=ncoded_fragis;
+  /*Also save the number of uncoded fragments so we know how many to copy.*/
+  _pipe->nuncoded_fragis[_pli]=
+   (fragy_end-fragy0)*fplane->nhfrags-ncoded_fragis;
+}
+
+/*Reconstructs all coded fragments in a single MCU (one or two super block
+   rows).
+  This requires that each coded fragment have a proper macro block mode and
+   motion vector (if not in INTRA mode), and have it's DC value decoded, with
+   the DC prediction process reversed, and the number of coded and uncoded
+   fragments in this plane of the MCU be counted.
+  The token lists for each color plane and coefficient should also be filled
+   in, along with initial token offsets, extra bits offsets, and EOB run
+   counts.*/
+static void oc_dec_frags_recon_mcu_plane(oc_dec_ctx *_dec,
+ oc_dec_pipeline_state *_pipe,int _pli){
+  /*Decode the AC coefficients.*/
+  int *ti;
+  int *ebi;
+  int *eob_runs;
+  int *coded_fragi;
+  int *coded_fragi_end;
+  ti=_pipe->ti[_pli];
+  ebi=_pipe->ebi[_pli];
+  eob_runs=_pipe->eob_runs[_pli];
+  coded_fragi_end=coded_fragi=_pipe->coded_fragis[_pli];
+  coded_fragi_end+=_pipe->ncoded_fragis[_pli];
+  for(;coded_fragi<coded_fragi_end;coded_fragi++){
+    oc_fragment    *frag;
+    oc_quant_table *iquants;
+    /*This array is made one bigger than necessary so that an invalid zero
+       run cannot cause a buffer overflow.
+      The inverse zig-zag mapping sends all out of range indices to the last
+       entry of this array, where they are ignored.*/
+    ogg_int16_t    dct_coeffs[128];
+    int            fragi;
+    int            zzi;
+    int            last_zzi;
+    fragi=*coded_fragi;
+    frag=_dec->state.frags+fragi;
+    for(zzi=0;zzi<64;){
+      int token;
+      int eb;
+      last_zzi=zzi;
+      if(eob_runs[zzi]){
+        eob_runs[zzi]--;
+        break;
+      }
+      else{
+        int ebflag;
+        token=_dec->dct_tokens[zzi][ti[zzi]++];
+        ebflag=OC_DCT_TOKEN_EXTRA_BITS[token]!=0;
+        eb=_dec->extra_bits[zzi][ebi[zzi]]&-ebflag;
+        ebi[zzi]+=ebflag;
+        if(token<OC_NDCT_EOB_TOKEN_MAX){
+          eob_runs[zzi]=-oc_dct_token_skip(token,eb);
+        }
+        else oc_dct_token_expand(token,eb,dct_coeffs,&zzi);
+      }
+    }
+    /*TODO: zzi should be exactly 64 here.
+      If it's not, we should report some kind of warning.*/
+    zzi=OC_MINI(zzi,64);
+    dct_coeffs[0]=(ogg_int16_t)frag->dc;
+    iquants=_dec->state.dequant_tables[frag->mbmode!=OC_MODE_INTRA][_pli];
+    /*last_zzi is always initialized.
+      If your compiler thinks otherwise, it is dumb.*/
+    oc_state_frag_recon(&_dec->state,frag,_pli,dct_coeffs,last_zzi,zzi,
+     iquants[_dec->state.qis[0]][0],iquants[frag->qi]);
+  }
+  _pipe->coded_fragis[_pli]=coded_fragi;
+  /*Right now the reconstructed MCU has only the coded blocks in it.*/
+  /*TODO: We make the decision here to always copy the uncoded blocks into it
+     from the reference frame.
+    We could also copy the coded blocks back over the reference frame, if we
+     wait for an additional MCU to be decoded, which might be faster if only a
+     small number of blocks are coded.
+    However, this introduces more latency, creating a larger cache footprint.
+    It's unknown which decision is better, but this one results in simpler
+     code, and the hard case (high bitrate, high resolution) is handled
+     correctly.*/
+  /*Copy the uncoded blocks from the previous reference frame.*/
+  _pipe->uncoded_fragis[_pli]-=_pipe->nuncoded_fragis[_pli];
+  oc_state_frag_copy(&_dec->state,_pipe->uncoded_fragis[_pli],
+   _pipe->nuncoded_fragis[_pli],OC_FRAME_SELF,OC_FRAME_PREV,_pli);
+}
+
+/*Filter a horizontal block edge.*/
+static void oc_filter_hedge(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src,int _src_ystride,int _qstep,int _flimit,
+ int *_variance0,int *_variance1){
+  unsigned char       *rdst;
+  const unsigned char *rsrc;
+  unsigned char       *cdst;
+  const unsigned char *csrc;
+  int                  r[10];
+  int                  sum0;
+  int                  sum1;
+  int                  bx;
+  int                  by;
+  rdst=_dst;
+  rsrc=_src;
+  for(bx=0;bx<8;bx++){
+    cdst=rdst;
+    csrc=rsrc;
+    for(by=0;by<10;by++){
+      r[by]=*csrc;
+      csrc+=_src_ystride;
+    }
+    sum0=sum1=0;
+    for(by=0;by<4;by++){
+      sum0+=abs(r[by+1]-r[by]);
+      sum1+=abs(r[by+5]-r[by+6]);
+    }
+    *_variance0+=OC_MINI(255,sum0);
+    *_variance1+=OC_MINI(255,sum1);
+    if(sum0<_flimit&&sum1<_flimit&&r[5]-r[4]<_qstep&&r[4]-r[5]<_qstep){
+      *cdst=(unsigned char)(r[0]*3+r[1]*2+r[2]+r[3]+r[4]+4>>3);
+      cdst+=_dst_ystride;
+      *cdst=(unsigned char)(r[0]*2+r[1]+r[2]*2+r[3]+r[4]+r[5]+4>>3);
+      cdst+=_dst_ystride;
+      for(by=0;by<4;by++){
+        *cdst=(unsigned char)(r[by]+r[by+1]+r[by+2]+r[by+3]*2+
+         r[by+4]+r[by+5]+r[by+6]+4>>3);
+        cdst+=_dst_ystride;
+      }
+      *cdst=(unsigned char)(r[4]+r[5]+r[6]+r[7]*2+r[8]+r[9]*2+4>>3);
+      cdst+=_dst_ystride;
+      *cdst=(unsigned char)(r[5]+r[6]+r[7]+r[8]*2+r[9]*3+4>>3);
+    }
+    else{
+      for(by=1;by<=8;by++){
+        *cdst=(unsigned char)r[by];
+        cdst+=_dst_ystride;
+      }
+    }
+    rdst++;
+    rsrc++;
+  }
+}
+
+/*Filter a vertical block edge.*/
+static void oc_filter_vedge(unsigned char *_dst,int _dst_ystride,
+ int _qstep,int _flimit,int *_variances){
+  unsigned char       *rdst;
+  const unsigned char *rsrc;
+  unsigned char       *cdst;
+  int                  r[10];
+  int                  sum0;
+  int                  sum1;
+  int                  bx;
+  int                  by;
+  cdst=_dst;
+  for(by=0;by<8;by++){
+    rsrc=cdst-1;
+    rdst=cdst;
+    for(bx=0;bx<10;bx++)r[bx]=*rsrc++;
+    sum0=sum1=0;
+    for(bx=0;bx<4;bx++){
+      sum0+=abs(r[bx+1]-r[bx]);
+      sum1+=abs(r[bx+5]-r[bx+6]);
+    }
+    _variances[0]+=OC_MINI(255,sum0);
+    _variances[1]+=OC_MINI(255,sum1);
+    if(sum0<_flimit&&sum1<_flimit&&r[5]-r[4]<_qstep&&r[4]-r[5]<_qstep){
+      *rdst++=(unsigned char)(r[0]*3+r[1]*2+r[2]+r[3]+r[4]+4>>3);
+      *rdst++=(unsigned char)(r[0]*2+r[1]+r[2]*2+r[3]+r[4]+r[5]+4>>3);
+      for(bx=0;bx<4;bx++){
+        *rdst++=(unsigned char)(r[bx]+r[bx+1]+r[bx+2]+r[bx+3]*2+
+         r[bx+4]+r[bx+5]+r[bx+6]+4>>3);
+      }
+      *rdst++=(unsigned char)(r[4]+r[5]+r[6]+r[7]*2+r[8]+r[9]*2+4>>3);
+      *rdst=(unsigned char)(r[5]+r[6]+r[7]+r[8]*2+r[9]*3+4>>3);
+    }
+    else for(bx=1;bx<=8;bx++)*rdst++=(unsigned char)r[bx];
+    cdst+=_dst_ystride;
+  }
+}
+
+static void oc_dec_deblock_frag_rows(oc_dec_ctx *_dec,th_img_plane *_dst,
+ th_img_plane *_src,int _pli,int _fragy0,int _fragy_end){
+  oc_fragment_plane   *fplane;
+  int                 *variance;
+  unsigned char       *dc_qi;
+  unsigned char       *dst;
+  const unsigned char *src;
+  int                  notstart;
+  int                  notdone;
+  int                  froffset;
+  int                  flimit;
+  int                  qstep;
+  int                  y_end;
+  int                  y;
+  int                  x;
+  _dst+=_pli;
+  _src+=_pli;
+  fplane=_dec->state.fplanes+_pli;
+  froffset=fplane->froffset+_fragy0*fplane->nhfrags;
+  variance=_dec->variances+froffset;
+  dc_qi=_dec->dc_qis+froffset;
+  notstart=_fragy0>0;
+  notdone=_fragy_end<fplane->nvfrags;
+  /*We want to clear an extra row of variances, except at the end.*/
+  memset(variance+(fplane->nhfrags&-notstart),0,
+   (_fragy_end+notdone-_fragy0-notstart)*fplane->nhfrags*sizeof(variance[0]));
+  /*Except for the first time, we want to point to the middle of the row.*/
+  y=(_fragy0<<3)+(notstart<<2);
+  dst=_dst->data+y*_dst->ystride;
+  src=_src->data+y*_src->ystride;
+  for(;y<4;y++){
+    memcpy(dst,src,_dst->width*sizeof(dst[0]));
+    dst+=_dst->ystride;
+    src+=_src->ystride;
+  }
+  /*We also want to skip the last row in the frame for this loop.*/
+  y_end=_fragy_end-!notdone<<3;
+  for(;y<y_end;y+=8){
+    qstep=_dec->pp_dc_scale[*dc_qi];
+    flimit=(qstep*3)>>2;
+    oc_filter_hedge(dst,_dst->ystride,src-_src->ystride,_src->ystride,
+     qstep,flimit,variance,variance+fplane->nhfrags);
+    variance++;
+    dc_qi++;
+    for(x=8;x<_dst->width;x+=8){
+      qstep=_dec->pp_dc_scale[*dc_qi];
+      flimit=(qstep*3)>>2;
+      oc_filter_hedge(dst+x,_dst->ystride,src+x-_src->ystride,_src->ystride,
+       qstep,flimit,variance,variance+fplane->nhfrags);
+      oc_filter_vedge(dst+x-(_dst->ystride<<2)-4,_dst->ystride,
+       qstep,flimit,variance-1);
+      variance++;
+      dc_qi++;
+    }
+    dst+=_dst->ystride<<3;
+    src+=_src->ystride<<3;
+  }
+  /*And finally, handle the last row in the frame, if it's in the range.*/
+  if(!notdone){
+    for(;y<_dst->height;y++){
+      memcpy(dst,src,_dst->width*sizeof(dst[0]));
+      dst+=_dst->ystride;
+      src+=_src->ystride;
+    }
+    /*Filter the last row of vertical block edges.*/
+    dc_qi++;
+    for(x=8;x<_dst->width;x+=8){
+      qstep=_dec->pp_dc_scale[*dc_qi++];
+      flimit=(qstep*3)>>2;
+      oc_filter_vedge(dst+x-(_dst->ystride<<3)-4,_dst->ystride,
+       qstep,flimit,variance++);
+    }
+  }
+}
+
+static void oc_dering_block(unsigned char *_idata,int _ystride,int _b,
+ int _dc_scale,int _sharp_mod,int _strong){
+  static const int     MOD_MAX[2]={24,32};
+  static const int     MOD_SHIFT[2]={1,0};
+  const unsigned char *psrc;
+  const unsigned char *src;
+  const unsigned char *nsrc;
+  unsigned char       *dst;
+  int                  vmod[72];
+  int                  hmod[72];
+  int                  mod_hi;
+  int                  by;
+  int                  bx;
+  mod_hi=OC_MINI(3*_dc_scale,MOD_MAX[_strong]);
+  dst=_idata;
+  src=dst;
+  psrc=src-(_ystride&-!(_b&4));
+  for(by=0;by<9;by++){
+    for(bx=0;bx<8;bx++){
+      int mod;
+      mod=32+_dc_scale-(abs(src[bx]-psrc[bx])<<MOD_SHIFT[_strong]);
+      vmod[(by<<3)+bx]=mod<-64?_sharp_mod:OC_CLAMPI(0,mod,mod_hi);
+    }
+    psrc=src;
+    src+=_ystride&-(!(_b&8)|by<7);
+  }
+  nsrc=dst;
+  psrc=dst-!(_b&1);
+  for(bx=0;bx<9;bx++){
+    src=nsrc;
+    for(by=0;by<8;by++){
+      int mod;
+      mod=32+_dc_scale-(abs(*src-*psrc)<<MOD_SHIFT[_strong]);
+      hmod[(bx<<3)+by]=mod<-64?_sharp_mod:OC_CLAMPI(0,mod,mod_hi);
+      psrc+=_ystride;
+      src+=_ystride;
+    }
+    psrc=nsrc;
+    nsrc+=!(_b&2)|bx<7;
+  }
+  src=dst;
+  psrc=src-(_ystride&-!(_b&4));
+  nsrc=src+_ystride;
+  for(by=0;by<8;by++){
+    int a;
+    int b;
+    int p;
+    int p1;
+    int a1;
+    a=128;
+    b=64;
+    p=src[0];
+    p1=*(src-!(_b&1));
+    a1=hmod[(bx<<3)+by];
+    a-=a1;
+    b+=a1*p1;
+    p1=psrc[0];
+    a1=vmod[(by<<3)+bx];
+    a-=a1;
+    b+=a1*p1;
+    p1=nsrc[0];
+    a1=vmod[(by+1<<3)+bx];
+    a-=a1;
+    b+=a1*p1;
+    p1=src[1];
+    a1=hmod[(bx+1<<3)+by];
+    a-=a1;
+    b+=a1*p1;
+    dst[0]=OC_CLAMP255(a*p+b>>7);
+    for(bx=1;bx<7;bx++){
+      a=128;
+      b=64;
+      p=src[bx];
+      p1=src[bx-1];
+      a1=hmod[(bx<<3)+by];
+      a-=a1;
+      b+=a1*p1;
+      p1=psrc[bx];
+      a1=vmod[(by<<3)+bx];
+      a-=a1;
+      b+=a1*p1;
+      p1=nsrc[bx];
+      a1=vmod[(by+1<<3)+bx];
+      a-=a1;
+      b+=a1*p1;
+      p1=src[bx+1];
+      a1=hmod[(bx+1<<3)+by];
+      a-=a1;
+      b+=a1*p1;
+      dst[bx]=OC_CLAMP255(a*p+b>>7);
+    }
+    a=128;
+    b=64;
+    p=src[7];
+    p1=src[6];
+    a1=hmod[(bx<<3)+by];
+    a-=a1;
+    b+=a1*p1;
+    p1=psrc[7];
+    a1=vmod[(by<<3)+bx];
+    a-=a1;
+    b+=a1*p1;
+    p1=nsrc[7];
+    a1=vmod[(by+1<<3)+bx];
+    a-=a1;
+    b+=a1*p1;
+    p1=src[7+!(_b&2)];
+    a1=hmod[(bx+1<<3)+by];
+    a-=a1;
+    b+=a1*p1;
+    dst[7]=OC_CLAMP255(a*p+b>>7);
+    dst+=_ystride;
+    psrc=src;
+    src=nsrc;
+    nsrc+=_ystride&-(!(_b&8)|by<6);
+  }
+}
+
+#define OC_DERING_THRESH1 (384)
+#define OC_DERING_THRESH2 (4*OC_DERING_THRESH1)
+#define OC_DERING_THRESH3 (5*OC_DERING_THRESH1)
+#define OC_DERING_THRESH4 (10*OC_DERING_THRESH1)
+
+static void oc_dec_dering_frag_rows(oc_dec_ctx *_dec,th_img_plane *_img,
+ int _pli,int _fragy0,int _fragy_end){
+  th_img_plane      *iplane;
+  oc_fragment_plane *fplane;
+  oc_fragment       *frag;
+  int               *variance;
+  unsigned char     *idata;
+  int                sthresh;
+  int                strong;
+  int                froffset;
+  int                y_end;
+  int                y;
+  int                x;
+  iplane=_img+_pli;
+  fplane=_dec->state.fplanes+_pli;
+  froffset=fplane->froffset+_fragy0*fplane->nhfrags;
+  variance=_dec->variances+froffset;
+  frag=_dec->state.frags+froffset;
+  strong=_dec->pp_level>=(_pli?OC_PP_LEVEL_SDERINGC:OC_PP_LEVEL_SDERINGY);
+  sthresh=_pli?OC_DERING_THRESH4:OC_DERING_THRESH3;
+  y=_fragy0<<3;
+  idata=iplane->data+y*iplane->ystride;
+  y_end=_fragy_end<<3;
+  for(;y<y_end;y+=8){
+    for(x=0;x<iplane->width;x+=8){
+      int b;
+      int qi;
+      int var;
+      qi=frag->qi;
+      var=*variance;
+      b=(x<=0)|(x+8>=iplane->width)<<1|(y<=0)<<2|(y+8>=iplane->height)<<3;
+      if(strong&&var>sthresh){
+        oc_dering_block(idata+x,iplane->ystride,b,
+         _dec->pp_dc_scale[qi],_dec->pp_sharp_mod[qi],1);
+        if(_pli||(b&1)&&*(variance-1)>OC_DERING_THRESH4||
+         (b&2)&&variance[1]>OC_DERING_THRESH4||
+         (b&4)&&*(variance-fplane->nvfrags)>OC_DERING_THRESH4||
+         (b&8)&&variance[fplane->nvfrags]>OC_DERING_THRESH4){
+          oc_dering_block(idata+x,iplane->ystride,b,
+           _dec->pp_dc_scale[qi],_dec->pp_sharp_mod[qi],1);
+          oc_dering_block(idata+x,iplane->ystride,b,
+           _dec->pp_dc_scale[qi],_dec->pp_sharp_mod[qi],1);
+        }
+      }
+      else if(var>OC_DERING_THRESH2){
+        oc_dering_block(idata+x,iplane->ystride,b,
+         _dec->pp_dc_scale[qi],_dec->pp_sharp_mod[qi],1);
+      }
+      else if(var>OC_DERING_THRESH1){
+        oc_dering_block(idata+x,iplane->ystride,b,
+         _dec->pp_dc_scale[qi],_dec->pp_sharp_mod[qi],0);
+      }
+      frag++;
+      variance++;
+    }
+    idata+=iplane->ystride<<3;
+  }
+}
+
+
+
+th_dec_ctx *th_decode_alloc(const th_info *_info,const th_setup_info *_setup){
+  oc_dec_ctx *dec;
+  if(_info==NULL||_setup==NULL)return NULL;
+  dec=_ogg_malloc(sizeof(*dec));
+  if(oc_dec_init(dec,_info,_setup)<0){
+    _ogg_free(dec);
+    return NULL;
+  }
+  dec->state.curframe_num=0;
+  return dec;
+}
+
+void th_decode_free(th_dec_ctx *_dec){
+  if(_dec!=NULL){
+    oc_dec_clear(_dec);
+    _ogg_free(_dec);
+  }
+}
+
+int th_decode_ctl(th_dec_ctx *_dec,int _req,void *_buf,
+ size_t _buf_sz){
+  switch(_req){
+    case TH_DECCTL_GET_PPLEVEL_MAX:{
+      if(_dec==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(int))return TH_EINVAL;
+      (*(int *)_buf)=OC_PP_LEVEL_MAX;
+      return 0;
+    }break;
+    case TH_DECCTL_SET_PPLEVEL:{
+      int pp_level;
+      if(_dec==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(int))return TH_EINVAL;
+      pp_level=*(int *)_buf;
+      if(pp_level<0||pp_level>OC_PP_LEVEL_MAX)return TH_EINVAL;
+      _dec->pp_level=pp_level;
+      return 0;
+    }break;
+    case TH_DECCTL_SET_GRANPOS:{
+      ogg_int64_t granpos;
+      if(_dec==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(ogg_int64_t))return TH_EINVAL;
+      granpos=*(ogg_int64_t *)_buf;
+      if(granpos<0)return TH_EINVAL;
+      _dec->state.granpos=granpos;
+      _dec->state.keyframe_num=
+       granpos>>_dec->state.info.keyframe_granule_shift;
+      _dec->state.curframe_num=_dec->state.keyframe_num+
+       (granpos&(1<<_dec->state.info.keyframe_granule_shift)-1);
+      return 0;
+    }break;
+    case TH_DECCTL_SET_STRIPE_CB:{
+      th_stripe_callback *cb;
+      if(_dec==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(th_stripe_callback))return TH_EINVAL;
+      cb=(th_stripe_callback *)_buf;
+      _dec->stripe_cb.ctx=cb->ctx;
+      _dec->stripe_cb.stripe_decoded=cb->stripe_decoded;
+      return 0;
+    }break;
+    default:return TH_EIMPL;
+  }
+}
+
+int th_decode_packetin(th_dec_ctx *_dec,const ogg_packet *_op,
+ ogg_int64_t *_granpos){
+  int ret;
+  if(_dec==NULL||_op==NULL)return TH_EFAULT;
+  /*A completely empty packet indicates a dropped frame and is treated exactly
+     like an inter frame with no coded blocks.
+    Only proceed if we have a non-empty packet.*/
+  if(_op->bytes!=0){
+    oc_dec_pipeline_state pipe;
+    th_ycbcr_buffer       stripe_buf;
+    int                   stripe_fragy;
+    int                   refi;
+    int                   pli;
+    int                   notstart;
+    int                   notdone;
+    oggpackB_readinit(&_dec->opb,_op->packet,_op->bytes);
+    ret=oc_dec_frame_header_unpack(_dec);
+    if(ret<0)return ret;
+    /*Select a free buffer to use for the reconstructed version of this
+       frame.*/
+    if(_dec->state.frame_type!=OC_INTRA_FRAME&&
+     (_dec->state.ref_frame_idx[OC_FRAME_GOLD]<0||
+     _dec->state.ref_frame_idx[OC_FRAME_PREV]<0)){
+      th_info *info;
+      size_t   yplane_sz;
+      size_t   cplane_sz;
+      int      yhstride;
+      int      yvstride;
+      int      chstride;
+      int      cvstride;
+      /*We're decoding an INTER frame, but have no initialized reference
+         buffers (i.e., decoding did not start on a key frame).
+        We initialize them to a solid gray here.*/
+      _dec->state.ref_frame_idx[OC_FRAME_GOLD]=0;
+      _dec->state.ref_frame_idx[OC_FRAME_PREV]=0;
+      _dec->state.ref_frame_idx[OC_FRAME_SELF]=refi=1;
+      info=&_dec->state.info;
+      yhstride=info->frame_width+2*OC_UMV_PADDING;
+      yvstride=info->frame_height+2*OC_UMV_PADDING;
+      chstride=yhstride>>!(info->pixel_fmt&1);
+      cvstride=yvstride>>!(info->pixel_fmt&2);
+      yplane_sz=(size_t)yhstride*yvstride;
+      cplane_sz=(size_t)chstride*cvstride;
+      memset(_dec->state.ref_frame_data,0x80,yplane_sz+2*cplane_sz);
+    }
+    else{
+      for(refi=0;refi==_dec->state.ref_frame_idx[OC_FRAME_GOLD]||
+       refi==_dec->state.ref_frame_idx[OC_FRAME_PREV];refi++);
+      _dec->state.ref_frame_idx[OC_FRAME_SELF]=refi;
+    }
+    if(_dec->state.frame_type==OC_INTRA_FRAME){
+      oc_dec_mark_all_intra(_dec);
+      _dec->state.keyframe_num=_dec->state.curframe_num;
+    }
+    else{
+      oc_dec_coded_flags_unpack(_dec);
+      oc_dec_mb_modes_unpack(_dec);
+      oc_dec_mv_unpack_and_frag_modes_fill(_dec);
+    }
+    oc_dec_block_qis_unpack(_dec);
+    oc_dec_residual_tokens_unpack(_dec);
+    /*Update granule position.
+      This must be done before the striped decode callbacks so that the
+       application knows what to do with the frame data.*/
+    _dec->state.granpos=
+     (_dec->state.keyframe_num<<_dec->state.info.keyframe_granule_shift)+
+     (_dec->state.curframe_num-_dec->state.keyframe_num);
+    _dec->state.curframe_num++;
+    if(_granpos!=NULL)*_granpos=_dec->state.granpos;
+    /*All of the rest of the operations -- DC prediction reversal,
+       reconstructing coded fragments, copying uncoded fragments, loop
+       filtering, extending borders, and out-of-loop post-processing -- should
+       be pipelined.
+      I.e., DC prediction reversal, reconstruction, and uncoded fragment
+       copying are done for one or two super block rows, then loop filtering is
+       run as far as it can, then bordering copying, then post-processing.
+      For 4:2:0 video a Minimum Codable Unit or MCU contains two luma super
+       block rows, and one chroma.
+      Otherwise, an MCU consists of one super block row from each plane.
+      Inside each MCU, we perform all of the steps on one color plane before
+       moving on to the next.
+      After reconstruction, the additional filtering stages introduce a delay
+       since they need some pixels from the next fragment row.
+      Thus the actual number of decoded rows available is slightly smaller for
+       the first MCU, and slightly larger for the last.
+
+      This entire process allows us to operate on the data while it is still in
+       cache, resulting in big performance improvements.
+      An application callback allows further application processing (blitting
+       to video memory, color conversion, etc.) to also use the data while it's
+       in cache.*/
+    oc_dec_pipeline_init(_dec,&pipe);
+    oc_ycbcr_buffer_flip(stripe_buf,_dec->pp_frame_buf);
+    notstart=0;
+    notdone=1;
+    for(stripe_fragy=notstart=0;notdone;stripe_fragy+=pipe.mcu_nvfrags){
+      int avail_fragy0;
+      int avail_fragy_end;
+      avail_fragy0=avail_fragy_end=_dec->state.fplanes[0].nvfrags;
+      notdone=stripe_fragy+pipe.mcu_nvfrags<avail_fragy_end;
+      for(pli=0;pli<3;pli++){
+        oc_fragment_plane *fplane;
+        int                frag_shift;
+        int                pp_offset;
+        int                sdelay;
+        int                edelay;
+        fplane=_dec->state.fplanes+pli;
+        /*Compute the first and last fragment row of the current MCU for this
+           plane.*/
+        frag_shift=pli!=0&&!(_dec->state.info.pixel_fmt&2);
+        pipe.fragy0[pli]=stripe_fragy>>frag_shift;
+        pipe.fragy_end[pli]=OC_MINI(fplane->nvfrags,
+         pipe.fragy0[pli]+(pipe.mcu_nvfrags>>frag_shift));
+        oc_dec_dc_unpredict_mcu_plane(_dec,&pipe,pli);
+        oc_dec_frags_recon_mcu_plane(_dec,&pipe,pli);
+        sdelay=edelay=0;
+        if(pipe.loop_filter){
+          sdelay+=notstart;
+          edelay+=notdone;
+          oc_state_loop_filter_frag_rows(&_dec->state,pipe.bounding_values,
+           refi,pli,pipe.fragy0[pli]-sdelay,pipe.fragy_end[pli]-edelay);
+        }
+        /*To fill the borders, we have an additional two pixel delay, since a
+           fragment in the next row could filter its top edge, using two pixels
+           from a fragment in this row.
+          But there's no reason to delay a full fragment between the two.*/
+        oc_state_borders_fill_rows(&_dec->state,refi,pli,
+         (pipe.fragy0[pli]-sdelay<<3)-(sdelay<<1),
+         (pipe.fragy_end[pli]-edelay<<3)-(edelay<<1));
+        /*Out-of-loop post-processing.*/
+        pp_offset=3*(pli!=0);
+        if(pipe.pp_level>=OC_PP_LEVEL_DEBLOCKY+pp_offset){
+          /*Perform de-blocking in one plane.*/
+          sdelay+=notstart;
+          edelay+=notdone;
+          oc_dec_deblock_frag_rows(_dec,_dec->pp_frame_buf,
+           _dec->state.ref_frame_bufs[refi],pli,
+           pipe.fragy0[pli]-sdelay,pipe.fragy_end[pli]-edelay);
+          if(pipe.pp_level>=OC_PP_LEVEL_DERINGY+pp_offset){
+            /*Perform de-ringing in one plane.*/
+            sdelay+=notstart;
+            edelay+=notdone;
+            oc_dec_dering_frag_rows(_dec,_dec->pp_frame_buf,pli,
+             pipe.fragy0[pli]-sdelay,pipe.fragy_end[pli]-edelay);
+          }
+        }
+        /*If no post-processing is done, we still need to delay a row for the
+           loop filter, thanks to the strange filtering order VP3 chose.*/
+        else if(pipe.loop_filter){
+          sdelay+=notstart;
+          edelay+=notdone;
+        }
+        /*Compute the intersection of the available rows in all planes.
+          If chroma is sub-sampled, the effect of each of its delays is
+           doubled, but luma might have more post-processing filters enabled
+           than chroma, so we don't know up front which one is the limiting
+           factor.*/
+        avail_fragy0=OC_MINI(avail_fragy0,pipe.fragy0[pli]-sdelay<<frag_shift);
+        avail_fragy_end=OC_MINI(avail_fragy_end,
+         pipe.fragy_end[pli]-edelay<<frag_shift);
+      }
+      if(_dec->stripe_cb.stripe_decoded!=NULL){
+        /*Make the callback, ensuring we flip the sense of the "start" and
+           "end" of the available region upside down.*/
+        (*_dec->stripe_cb.stripe_decoded)(_dec->stripe_cb.ctx,stripe_buf,
+         _dec->state.fplanes[0].nvfrags-avail_fragy_end,
+         _dec->state.fplanes[0].nvfrags-avail_fragy0);
+      }
+      notstart=1;
+    }
+    /*Finish filling in the reference frame borders.*/
+    for(pli=0;pli<3;pli++)oc_state_borders_fill_caps(&_dec->state,refi,pli);
+    /*Update the reference frame indices.*/
+    if(_dec->state.frame_type==OC_INTRA_FRAME){
+      /*The new frame becomes both the previous and gold reference frames.*/
+      _dec->state.ref_frame_idx[OC_FRAME_GOLD]=
+       _dec->state.ref_frame_idx[OC_FRAME_PREV]=
+       _dec->state.ref_frame_idx[OC_FRAME_SELF];
+    }
+    else{
+      /*Otherwise, just replace the previous reference frame.*/
+      _dec->state.ref_frame_idx[OC_FRAME_PREV]=
+       _dec->state.ref_frame_idx[OC_FRAME_SELF];
+    }
+#if defined(OC_DUMP_IMAGES)
+    /*Don't dump images for dropped frames.*/
+    oc_state_dump_frame(&_dec->state,OC_FRAME_SELF,"dec");
+#endif
+    return 0;
+  }
+  else{
+    /*Just update the granule position and return.*/
+    _dec->state.granpos=
+     (_dec->state.keyframe_num<<_dec->state.info.keyframe_granule_shift)+
+     (_dec->state.curframe_num-_dec->state.keyframe_num);
+    _dec->state.curframe_num++;
+    if(_granpos!=NULL)*_granpos=_dec->state.granpos;
+    return TH_DUPFRAME;
+  }
+}
+
+int th_decode_ycbcr_out(th_dec_ctx *_dec,th_ycbcr_buffer _ycbcr){
+  oc_ycbcr_buffer_flip(_ycbcr,_dec->pp_frame_buf);
+  return 0;
+}

Added: trunk/theora-exp/lib/dequant.c
===================================================================
--- trunk/theora-exp/lib/dequant.c	                        (rev 0)
+++ trunk/theora-exp/lib/dequant.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,155 @@
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+#include "dequant.h"
+#include "decint.h"
+
+
+
+int oc_quant_params_unpack(oggpack_buffer *_opb,th_quant_info *_qinfo){
+  th_quant_base *base_mats;
+  long           val;
+  int            nbase_mats;
+  int            sizes[64];
+  int            indices[64];
+  int            nbits;
+  int            bmi;
+  int            ci;
+  int            qti;
+  int            pli;
+  int            qri;
+  int            qi;
+  int            i;
+  theora_read(_opb,3,&val);
+  nbits=(int)val;
+  for(qi=0;qi<64;qi++){
+    theora_read(_opb,nbits,&val);
+    _qinfo->loop_filter_limits[qi]=(unsigned char)val;
+  }
+  theora_read(_opb,4,&val);
+  nbits=(int)val+1;
+  for(qi=0;qi<64;qi++){
+    theora_read(_opb,nbits,&val);
+    _qinfo->ac_scale[qi]=(ogg_uint16_t)val;
+  }
+  theora_read(_opb,4,&val);
+  nbits=(int)val+1;
+  for(qi=0;qi<64;qi++){
+    theora_read(_opb,nbits,&val);
+    _qinfo->dc_scale[qi]=(ogg_uint16_t)val;
+  }
+  theora_read(_opb,9,&val);
+  nbase_mats=(int)val+1;
+  base_mats=_ogg_malloc(nbase_mats*sizeof(base_mats[0]));
+  for(bmi=0;bmi<nbase_mats;bmi++){
+    for(ci=0;ci<64;ci++){
+      theora_read(_opb,8,&val);
+      base_mats[bmi][ci]=(unsigned char)val;
+    }
+  }
+  nbits=oc_ilog(nbase_mats-1);
+  for(i=0;i<6;i++){
+    th_quant_ranges *qranges;
+    th_quant_base   *qrbms;
+    int             *qrsizes;
+    qti=i/3;
+    pli=i%3;
+    qranges=_qinfo->qi_ranges[qti]+pli;
+    if(i>0){
+      theora_read1(_opb,&val);
+      if(!val){
+        int qtj;
+        int plj;
+        if(qti>0){
+          theora_read1(_opb,&val);
+          if(val){
+            qtj=qti-1;
+            plj=pli;
+          }
+          else{
+            qtj=(i-1)/3;
+            plj=(i-1)%3;
+          }
+        }
+        else{
+          qtj=(i-1)/3;
+          plj=(i-1)%3;
+        }
+        *qranges=*(_qinfo->qi_ranges[qtj]+plj);
+        continue;
+      }
+    }
+    theora_read(_opb,nbits,&val);
+    indices[0]=(int)val;
+    for(qi=qri=0;qi<63;){
+      theora_read(_opb,oc_ilog(62-qi),&val);
+      sizes[qri]=(int)val+1;
+      qi+=(int)val+1;
+      theora_read(_opb,nbits,&val);
+      indices[++qri]=(int)val;
+    }
+    /*Note: The caller is responsible for cleaning up any partially
+       constructed qinfo.*/
+    if(qi>63){
+      _ogg_free(base_mats);
+      return TH_EBADHEADER;
+    }
+    qranges->nranges=qri;
+    qranges->sizes=qrsizes=(int *)_ogg_malloc(qri*sizeof(qrsizes[0]));
+    memcpy(qrsizes,sizes,qri*sizeof(qrsizes[0]));
+    qrbms=(th_quant_base *)_ogg_malloc((qri+1)*sizeof(qrbms[0]));
+    qranges->base_matrices=(const th_quant_base *)qrbms;
+    do{
+      bmi=indices[qri];
+      /*Note: The caller is responsible for cleaning up any partially
+         constructed qinfo.*/
+      if(bmi>=nbase_mats){
+        _ogg_free(base_mats);
+        return TH_EBADHEADER;
+      }
+      memcpy(qrbms[qri],base_mats[bmi],sizeof(qrbms[qri]));
+    }
+    while(qri-->0);
+  }
+  _ogg_free(base_mats);
+  return 0;
+}
+
+void oc_quant_params_clear(th_quant_info *_qinfo){
+  int i;
+  for(i=6;i-->0;){
+    int qti;
+    int pli;
+    qti=i/3;
+    pli=i%3;
+    /*Clear any duplicate pointer references.*/
+    if(i>0){
+      int qtj;
+      int plj;
+      qtj=(i-1)/3;
+      plj=(i-1)%3;
+      if(_qinfo->qi_ranges[qti][pli].sizes==
+       _qinfo->qi_ranges[qtj][plj].sizes){
+        _qinfo->qi_ranges[qti][pli].sizes=NULL;
+      }
+      if(_qinfo->qi_ranges[qti][pli].base_matrices==
+       _qinfo->qi_ranges[qtj][plj].base_matrices){
+        _qinfo->qi_ranges[qti][pli].base_matrices=NULL;
+      }
+    }
+    if(qti>0){
+      if(_qinfo->qi_ranges[1][pli].sizes==
+       _qinfo->qi_ranges[0][pli].sizes){
+        _qinfo->qi_ranges[1][pli].sizes=NULL;
+      }
+      if(_qinfo->qi_ranges[1][pli].base_matrices==
+       _qinfo->qi_ranges[0][pli].base_matrices){
+        _qinfo->qi_ranges[1][pli].base_matrices=NULL;
+      }
+    }
+    /*Now free all the non-duplicate storage.*/
+    _ogg_free((void *)_qinfo->qi_ranges[qti][pli].sizes);
+    _ogg_free((void *)_qinfo->qi_ranges[qti][pli].base_matrices);
+  }
+}
+

Added: trunk/theora-exp/lib/dequant.h
===================================================================
--- trunk/theora-exp/lib/dequant.h	                        (rev 0)
+++ trunk/theora-exp/lib/dequant.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,8 @@
+#if !defined(_dequant_H)
+# define _dequant_H (1)
+# include "quant.h"
+
+int oc_quant_params_unpack(oggpack_buffer *_opb,th_quant_info *_qinfo);
+void oc_quant_params_clear(th_quant_info *_qinfo);
+
+#endif

Added: trunk/theora-exp/lib/encapiwrapper.c
===================================================================
--- trunk/theora-exp/lib/encapiwrapper.c	                        (rev 0)
+++ trunk/theora-exp/lib/encapiwrapper.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,154 @@
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "apiwrapper.h"
+#include "theora/theoraenc.h"
+#include "encint.h"
+
+
+
+static void th_enc_api_clear(th_api_wrapper *_api){
+  if(_api->encode)th_encode_free(_api->encode);
+  memset(_api,0,sizeof(*_api));
+}
+
+static void theora_encode_clear(theora_state *_te){
+  if(_te->i!=NULL)theora_info_clear(_te->i);
+  memset(_te,0,sizeof(*_te));
+}
+
+static int theora_encode_control(theora_state *_te,int _req,
+ void *_buf,size_t _buf_sz){
+  return th_encode_ctl(((th_api_wrapper *)_te->i->codec_setup)->encode,
+   _req,_buf,_buf_sz);
+}
+
+static ogg_int64_t theora_encode_granule_frame(theora_state *_te,
+ ogg_int64_t _gp){
+  return th_granule_frame(((th_api_wrapper *)_te->i->codec_setup)->encode,_gp);
+}
+
+static double theora_encode_granule_time(theora_state *_te,ogg_int64_t _gp){
+  return th_granule_time(((th_api_wrapper *)_te->i->codec_setup)->encode,_gp);
+}
+
+static const oc_state_dispatch_vtbl OC_ENC_DISPATCH_VTBL={
+  (oc_state_clear_func)theora_encode_clear,
+  (oc_state_control_func)theora_encode_control,
+  (oc_state_granule_frame_func)theora_encode_granule_frame,
+  (oc_state_granule_time_func)theora_encode_granule_time,
+};
+
+int theora_encode_init(theora_state *_te,theora_info *_ci){
+  th_api_info *apiinfo;
+  th_info      info;
+  /*Allocate our own combined API wrapper/theora_info struct.
+    We put them both in one malloc'd block so that when the API wrapper is
+     freed, the info struct goes with it.
+    This avoids having to figure out whether or not we need to free the info
+     struct in either theora_info_clear() or theora_clear().*/
+  apiinfo=(th_api_info *)_ogg_malloc(sizeof(*apiinfo));
+  /*Make our own copy of the info struct, since its lifetime should be
+     independent of the one we were passed in.*/
+  *&apiinfo->info=*_ci;
+  oc_theora_info2th_info(&info,_ci);
+  apiinfo->api.encode=th_encode_alloc(&info);
+  if(apiinfo->api.encode==NULL){
+    _ogg_free(apiinfo);
+    return OC_EINVAL;
+  }
+  apiinfo->api.clear=(oc_setup_clear_func)th_enc_api_clear;
+  /*Provide entry points for ABI compatibility with old decoder shared libs.*/
+  _te->internal_encode=(void *)&OC_ENC_DISPATCH_VTBL;
+  _te->internal_decode=NULL;
+  _te->granulepos=0;
+  _te->i=&apiinfo->info;
+  _te->i->codec_setup=&apiinfo->api;
+  /*TODO: Additional codec setup using the extra fields in theora_info.*/
+  return 0;
+}
+
+int theora_encode_YUVin(theora_state *_te,yuv_buffer *_yuv){
+  th_api_wrapper  *api;
+  th_ycbcr_buffer  buf;
+  int              ret;
+  api=(th_api_wrapper *)_te->i->codec_setup;
+  buf[0].width=_yuv->y_width;
+  buf[0].height=_yuv->y_height;
+  buf[0].ystride=_yuv->y_stride;
+  buf[0].data=_yuv->y;
+  buf[1].width=_yuv->uv_width;
+  buf[1].height=_yuv->uv_height;
+  buf[1].ystride=_yuv->uv_stride;
+  buf[1].data=_yuv->u;
+  buf[2].width=_yuv->uv_width;
+  buf[2].height=_yuv->uv_height;
+  buf[2].ystride=_yuv->uv_stride;
+  buf[2].data=_yuv->v;
+  ret=th_encode_ycbcr_in(api->encode,buf);
+  if(ret<0)return ret;
+  _te->granulepos=api->encode->state.granpos;
+  return ret;
+}
+
+int theora_encode_packetout(theora_state *_te,int _last_p,ogg_packet *_op){
+  th_api_wrapper *api;
+  api=(th_api_wrapper *)_te->i->codec_setup;
+  return th_encode_packetout(api->encode,_last_p,_op);
+}
+
+int theora_encode_header(theora_state *_te,ogg_packet *_op){
+  oc_enc_ctx     *enc;
+  th_api_wrapper *api;
+  int             ret;
+  api=(th_api_wrapper *)_te->i->codec_setup;
+  enc=api->encode;
+  /*If we've already started encoding, fail.*/
+  if(enc->packet_state>OC_PACKET_EMPTY||enc->state.granpos!=0){
+    return TH_EINVAL;
+  }
+  /*Reset the state to make sure we output an info packet.*/
+  enc->packet_state=OC_PACKET_INFO_HDR;
+  ret=th_encode_flushheader(api->encode,NULL,_op);
+  return ret>=0?0:ret;
+}
+
+int theora_encode_comment(theora_comment *_tc,ogg_packet *_op){
+  oggpack_buffer  opb;
+  void           *buf;
+  int             packet_state;
+  int             ret;
+  packet_state=OC_PACKET_COMMENT_HDR;
+  oggpackB_writeinit(&opb);
+  ret=oc_state_flushheader(NULL,&packet_state,&opb,NULL,NULL,NULL,
+   (th_comment *)_tc,_op);
+  if(ret>=0){
+    /*The oggpack_buffer's lifetime ends with this function, so we have to
+       copy out the packet contents.
+      Presumably the application knows it is supposed to free this.
+      This part works nothing like the Vorbis API, and the documentation on it
+       has been wrong for some time, claiming libtheora owned the memory.*/
+    buf=_ogg_malloc(_op->bytes);
+    memcpy(buf,_op->packet,_op->bytes);
+    _op->packet=buf;
+    ret=0;
+  }
+  oggpack_writeclear(&opb);
+  return ret;
+}
+
+int theora_encode_tables(theora_state *_te,ogg_packet *_op){
+  oc_enc_ctx     *enc;
+  th_api_wrapper *api;
+  int             ret;
+  api=(th_api_wrapper *)_te->i->codec_setup;
+  enc=api->encode;
+  /*If we've already started encoding, fail.*/
+  if(enc->packet_state>OC_PACKET_EMPTY||enc->state.granpos!=0){
+    return TH_EINVAL;
+  }
+  /*Reset the state to make sure we output a setup packet.*/
+  enc->packet_state=OC_PACKET_SETUP_HDR;
+  ret=th_encode_flushheader(api->encode,NULL,_op);
+  return ret>=0?0:ret;
+}

Added: trunk/theora-exp/lib/encinfo.c
===================================================================
--- trunk/theora-exp/lib/encinfo.c	                        (rev 0)
+++ trunk/theora-exp/lib/encinfo.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,118 @@
+#include <stdlib.h>
+#include <string.h>
+#include "internal.h"
+#include "enquant.h"
+#include "huffenc.h"
+
+
+
+/*Packs a series of octets from a given byte array into the pack buffer.
+  _opb: The pack buffer to store the octets in.
+  _buf: The byte array containing the bytes to pack.
+  _len: The number of octets to pack.*/
+static void oc_pack_octets(oggpack_buffer *_opb,const char *_buf,int _len){
+  int i;
+  for(i=0;i<_len;i++)oggpackB_write(_opb,*_buf++,8);
+}
+
+
+
+int oc_state_flushheader(oc_theora_state *_state,int *_packet_state,
+ oggpack_buffer *_opb,const th_quant_info *_qinfo,
+ const th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS],
+ const char *_vendor,th_comment *_tc,ogg_packet *_op){
+  if(_op==NULL)return TH_EFAULT;
+  switch(*_packet_state){
+    /*Codec info header.*/
+    case OC_PACKET_INFO_HDR:{
+      if(_state==NULL)return TH_EFAULT;
+      oggpackB_reset(_opb);
+      /*Mark this packet as the info header.*/
+      oggpackB_write(_opb,0x80,8);
+      /*Write the codec string.*/
+      oc_pack_octets(_opb,"theora",6);
+      /*Write the codec bitstream version.*/
+      oggpackB_write(_opb,TH_VERSION_MAJOR,8);
+      oggpackB_write(_opb,TH_VERSION_MINOR,8);
+      oggpackB_write(_opb,TH_VERSION_SUB,8);
+      /*Describe the encoded frame.*/
+      oggpackB_write(_opb,_state->info.frame_width>>4,16);
+      oggpackB_write(_opb,_state->info.frame_height>>4,16);
+      oggpackB_write(_opb,_state->info.pic_width,24);
+      oggpackB_write(_opb,_state->info.pic_height,24);
+      oggpackB_write(_opb,_state->info.pic_x,8);
+      oggpackB_write(_opb,_state->info.frame_height-
+       _state->info.pic_height-_state->info.pic_y,8);
+      oggpackB_write(_opb,_state->info.fps_numerator,32);
+      oggpackB_write(_opb,_state->info.fps_denominator,32);
+      oggpackB_write(_opb,_state->info.aspect_numerator,24);
+      oggpackB_write(_opb,_state->info.aspect_denominator,24);
+      oggpackB_write(_opb,_state->info.colorspace,8);
+      oggpackB_write(_opb,_state->info.target_bitrate,24);
+      oggpackB_write(_opb,_state->info.quality,6);
+      oggpackB_write(_opb,_state->info.keyframe_granule_shift,5);
+      oggpackB_write(_opb,_state->info.pixel_fmt,2);
+      /*Spare configuration bits.*/
+      oggpackB_write(_opb,0,3);
+      _op->b_o_s=1;
+    }break;
+    /*Comment header.*/
+    case OC_PACKET_COMMENT_HDR:{
+      int vendor_len;
+      int i;
+      if(_tc==NULL)return TH_EFAULT;
+      vendor_len=strlen(_vendor);
+      oggpackB_reset(_opb);
+      /*Mark this packet as the comment header.*/
+      oggpackB_write(_opb,0x81,8);
+      /*Write the codec string.*/
+      oc_pack_octets(_opb,"theora",6);
+      /*Write the vendor string.*/
+      oggpack_write(_opb,vendor_len,32);
+      oc_pack_octets(_opb,_vendor,vendor_len);
+      oggpack_write(_opb,_tc->comments,32);
+      for(i=0;i<_tc->comments;i++){
+        if(_tc->user_comments[i]!=NULL){
+          oggpack_write(_opb,_tc->comment_lengths[i],32);
+          oc_pack_octets(_opb,_tc->user_comments[i],
+           _tc->comment_lengths[i]);
+        }
+        else oggpack_write(_opb,0,32);
+      }
+      _op->b_o_s=0;
+    }break;
+    /*Codec setup header.*/
+    case OC_PACKET_SETUP_HDR:{
+      int ret;
+      oggpackB_reset(_opb);
+      /*Mark this packet as the setup header.*/
+      oggpackB_write(_opb,0x82,8);
+      /*Write the codec string.*/
+      oc_pack_octets(_opb,"theora",6);
+      /*Write the quantizer tables.*/
+      oc_quant_params_pack(_opb,_qinfo);
+      /*Write the huffman codes.*/
+      ret=oc_huff_codes_pack(_opb,_codes);
+      /*This should never happen, because we validate the tables when they
+         are set.
+        If you see, it's a good chance memory is being corrupted.*/
+      if(ret<0)return ret;
+      _op->b_o_s=0;
+    }break;
+    /*No more headers to emit.*/
+    default:return 0;
+  }
+  /*This is kind of fugly: we hand the user a buffer which they do not own.
+    We will overwrite it when the next packet is output, so the user better be
+     done with it by then.
+    Vorbis is little better: it hands back buffers that it will free the next
+     time the headers are requested, or when the encoder is cleared.
+    Hopefully libogg2 will make this much cleaner.*/
+  _op->packet=oggpackB_get_buffer(_opb);
+  _op->bytes=oggpackB_bytes(_opb);
+  _op->e_o_s=0;
+  _op->granulepos=0;
+  /*Is this smart? Vorbis does not even set this field.*/
+  _op->packetno=0;
+  return ++(*_packet_state)+3;
+}

Added: trunk/theora-exp/lib/encint.h
===================================================================
--- trunk/theora-exp/lib/encint.h	                        (rev 0)
+++ trunk/theora-exp/lib/encint.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,301 @@
+#include <limits.h>
+#if !defined(_encint_H)
+# define _encint_H (1)
+# include "theora/theoraenc.h"
+# include "internal.h"
+
+typedef th_huff_code                  th_huff_table[TH_NDCT_TOKENS];
+typedef struct oc_enc_pipe_stage      oc_enc_pipe_stage;
+typedef struct oc_fragment_enc_info   oc_fragment_enc_info;
+typedef struct oc_mb_enc_info         oc_mb_enc_info;
+typedef struct oc_mode_scheme_chooser oc_mode_scheme_chooser;
+typedef struct oc_enc_vbr_ctx         oc_enc_vbr_ctx;
+typedef struct oc_mcenc_ctx           oc_mcenc_ctx;
+typedef struct th_enc_ctx             oc_enc_ctx;
+
+# include "fdct.h"
+# include "huffenc.h"
+# include "enquant.h"
+
+#define OC_1_LN2 (1.4426950408889634073F)
+
+/*Encoding modes.*/
+#define OC_ENC_MODE_VBR (0)
+#define OC_ENC_MODE_CQI (1)
+/*
+Not yet implemented:
+#define OC_ENC_MODE_CBR (2)
+#define OC_ENC_MODE_RDO (3)
+*/
+
+/*The function used to set the speed for the current encoding mode.
+  _speed: The encoding speed to use.
+          Higher values should provide faster encoding, at reduced
+           rate-distortion performance.
+          This will always be in the range [0..._enc->speed_max].*/
+typedef void (*oc_enc_set_speed_func)(oc_enc_ctx *_enc,int _speed);
+
+/*Constants for the packet-out state machine specific to the encoder.*/
+
+/*Next packet to emit: Data packet, but none are ready yet.*/
+#define OC_PACKET_EMPTY (0)
+/*Next packet to emit: Data packet, and one is ready.*/
+#define OC_PACKET_READY (1)
+
+
+
+/*An encoder pipeline stage.*/
+struct oc_enc_pipe_stage{
+  /*The encoder this pipeline stage belongs to.*/
+  oc_enc_ctx        *enc;
+  /*The next stage in the pipeline.*/
+  oc_enc_pipe_stage *next;
+  /*The number of rows processed so far in each plane.*/
+  int                y_procd[3];
+  /*Called before processing the first stripe.
+    This does not need to call the next stage's start function.
+    Return: 0 on success, or a negative value on error.*/
+  int (*pipe_start)(oc_enc_pipe_stage *_stage);
+  /*Called for each stripe as it becomes available.
+    This function is responsible for calling the next function in the chain.
+    It may do so in smaller or larger stripes than are passed to it, at its
+     discretion.
+    _y_avail: Rows 0 through _y_avail[pli] in plane pli will be available for
+               processing.
+    Return: 0 on success, or a negative value on error.*/
+  int (*pipe_proc)(oc_enc_pipe_stage *_stage,int _y_avail[3]);
+  /*Called after processing the last stripe.
+    This does not need to call the next stage's end function.
+    Return: 0 on success, or a negative value on error.*/
+  int (*pipe_end)(oc_enc_pipe_stage *_stage);
+};
+
+/*Fragment information specific to encoding.*/
+struct oc_fragment_enc_info{
+  /*The DCT coefficients for coding the fragment in intra mode.
+    These are computed in advance by the psycho-visual model, and then reused
+     during mode decision.*/
+  ogg_int16_t     dct_coeffs[64];
+  /*The maximum allowed distortion allowed for this coefficient.
+    The quantizer is free to choose any quantized value that does not move the
+     reconstructed value more than this amount away from the true coefficient
+     value.*/
+  ogg_uint16_t    tols[64];
+  /*The weight derived from the importance of this fragment.*/
+  float           imp_weight;
+  /*The actual error encoded by the residual after mode selection.*/
+  int             eerror;
+  /*The minimum quantizer allowed for each quantizer type.*/
+  unsigned char   qi_min[2];
+  /*The qi index selected for this fragment.*/
+  unsigned char   qii;
+};
+
+/*Macro block information specific to encoding.*/
+struct oc_mb_enc_info{
+  /*The neighboring macro blocks with motion vectors available for the current
+     frame.*/
+  int           cneighbors[4];
+  /*The number of current neighbors available.*/
+  int           ncneighbors;
+  /*The neighboring macro blocks with motion vectors available for the
+     previous frame.*/
+  int           pneighbors[4];
+  /*The number of previous neighbors available.*/
+  int           npneighbors;
+  /*Motion vectors for a macro block for the current frame and the previous
+     two frames.
+    Each is a set of 2 vectors against the previous frame and against the
+     golden frame, which can be used to judge constant velocity and constant
+     acceleration.
+    Uninitialized MVs are (0,0).*/
+  oc_mv         mvs[3][2];
+  /*Per-block motion vectors for this frame against the previous frame.*/
+  oc_mv         bmvs[4];
+  /*Minimum motion estimation error from the analysis stage.*/
+  int           aerror;
+  /*Minimum 4V motion estimation error from the analysis stage.*/
+  int           aerror4mv;
+};
+
+/*A structure used to track the optimal mode coding scheme, for use in
+   estimating the cost of coding each mode label during the mode selection
+   process.*/
+struct oc_mode_scheme_chooser{
+  /*Pointers to the Huffman codes associated with each mode scheme.
+    The first 7 are always OC_MODE_CODESA, and the last is always
+     OC_MODE_CODESB.*/
+  const th_huff_code *mode_codes[8];
+  /*Pointers to the a list containing the index of each mode in the mode
+     alphabet used by each scheme.
+    The first entry points to the dynamic scheme0_ranks, while the remaining
+     7 point to the constant entries stored in OC_MODE_SCHEMES.*/
+  const int          *mode_ranks[8];
+  /*The ranks for each mode when coded with scheme 0.
+    These are optimized so that the more frequent modes have lower ranks.*/
+  int                 scheme0_ranks[OC_NMODES];
+  /*The list of modes, sorted in descending order of frequency, that
+     corresponds to the ranks above.*/
+  int                 scheme0_list[OC_NMODES];
+  /*The number of times each mode has been chosen so far.*/
+  int                 mode_counts[OC_NMODES];
+  /*The list of mode coding schemes, sorted in ascending order of bit cost.*/
+  int                 scheme_list[8];
+  /*The number of bits used by each mode coding scheme.*/
+  int                 scheme_bits[8];
+};
+
+
+
+struct th_enc_ctx{
+  /*Shared encoder/decoder state.*/
+  oc_theora_state          state;
+  /*The start of the encoder pipeline.*/
+  oc_enc_pipe_stage       *pipe;
+  /*The maximum speed setting for the current encoding mode.*/
+  int                      speed_max;
+  /*The function used to set the speed level for the current encoding mode.*/
+  oc_enc_set_speed_func    set_speed;
+  /*The INTRA fDCT pipe stage.*/
+  oc_enc_pipe_stage        fdct_pipe;
+  /*The uncoded fragment copying pipe stage.*/
+  oc_enc_pipe_stage        copy_pipe;
+  /*The loop filter pipe stage.*/
+  oc_enc_pipe_stage        loop_pipe;
+  /*The border filling pipe stage.*/
+  oc_enc_pipe_stage        fill_pipe;
+  /*The packet assembly pipe stage.*/
+  oc_enc_pipe_stage        pack_pipe;
+  /*Whether or not packets are ready to be emitted.
+    This takes on negative values while there are remaining header packets to
+     be emitted, reaches 0 when the codec is ready for input, and goes to 1
+     when a frame has been processed and a data packet is ready.*/
+  int                      packet_state;
+  /*Buffer in which to assemble packets.*/
+  oggpack_buffer           opb;
+  /*The list of flags indicating which blocks are coded in all partially coded
+     super blocks.*/
+  char                    *block_coded_flags;
+  /*The number of block coded flags in the list.
+    This is 16 times the number of super blocks with their partially coded
+     flag set.*/
+  int                      nblock_coded_flags;
+  /*Special buffer used for the coded fragment flags.*/
+  oggpack_buffer           opb_coded_flags;
+  /*Encoder-specific fragment information.*/
+  oc_fragment_enc_info    *frinfo;
+  /*Encoder-specific macro block information.*/
+  oc_mb_enc_info          *mbinfo;
+  /*Context information used to perform motion estimation.*/
+  oc_mcenc_ctx            *mcenc;
+  /*Context information used for VBR encoding.*/
+  oc_enc_vbr_ctx          *vbr;
+  /*The qi value lists selected for each potential frame type.*/
+  int                      qis[2][3];
+  /*The number of qi values in the list for each frame type.*/
+  int                      nqis[2];
+  /*The number of coded fragments.*/
+  int                      ncoded_frags;
+  /*The current uncoded_fragi index being copied to each plane.*/
+  int                      uncoded_fragii[3];
+  /*The macro-block mode scheme chooser.*/
+  oc_mode_scheme_chooser   mode_scheme_chooser;
+  /*The motion vector scheme chosen.*/
+  int                      mv_scheme;
+  /*The maximum distance between keyframes.*/
+  ogg_uint32_t             keyframe_frequency_force;
+  /*Whether or not VP3-compatibility is enabled.*/
+  int                      vp3_compatible;
+  /*Whether or not the loop filter is enabled.
+    This is determined each frame, based on the quantizer it is encoded with.*/
+  int                      loop_filter_enabled;
+  /*The bounding value array used for the loop filter.*/
+  int                      bounding_values[256];
+  /*The huffman tables in use.*/
+  th_huff_code             huff_codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS];
+  /*The quantization parameters in use.*/
+  th_quant_info            qinfo;
+  /*Pointers to the quantization tables in use.*/
+  oc_quant_table          *enquant_tables[2][3];
+  /*Storage for the actual quantization tables.*/
+  oc_quant_tables          enqaunt_table_data[2][3];
+  /*The offset of the first DCT token for each coefficient for each plane.*/
+  int                      dct_token_offs[3][64];
+  /*The number of DCT tokens for each coefficient.*/
+  int                      ndct_tokens[64];
+  /*The DCT token lists.*/
+  unsigned char          **dct_tokens;
+  /*The number of extra bits entries for each coefficient.*/
+  int                      nextra_bits[64];
+  /*The offset of the first extra bits entry for each coefficient.*/
+  int                      extra_bits_offs[64];
+  /*The extra bits associated with DCT tokens.*/
+  ogg_uint16_t           **extra_bits;
+};
+
+extern const int OC_MODE_SCHEMES[7][OC_NMODES];
+extern const int OC_DCT_VAL_CAT_SIZES[6];
+extern const int OC_DCT_VAL_CAT_SHIFTS[6];
+extern const th_huff_code OC_MV_CODES[2][63];
+
+/*The number of fractional bits in bitrate statistics.*/
+#define OC_BIT_SCALE (7)
+/*The number of fractional bits in distortion statistics.*/
+#define OC_DIS_SCALE (9)
+
+/*Estimated bits needed to code a residual given the: quality index, color
+   plane, macro-block mode, and a SAD bin.
+  SAD values for a block are divided by 256 for INTRA mode and 64 for INTER
+   modes to find the appropriate bin.*/
+extern ogg_uint16_t OC_RES_BITRATES[64][3][OC_NMODES][16];
+
+#if defined(OC_BITRATE_STATS)
+void oc_bitrate_update_stats(oc_enc_ctx *_enc,int _huff_idxs[5][3]);
+#endif
+
+
+int oc_sad8_fullpel(const unsigned char *_cur,int _cur_stride,
+ const unsigned char *_ref,int _ref_stride);
+int oc_sad8_fullpel_border(const unsigned char *_cur,int _cur_stride,
+ const unsigned char *_ref,int _ref_stride,ogg_int64_t _mask);
+int oc_sad8_halfpel(const unsigned char *_cur,int _cur_stride,
+ const unsigned char *_ref0,const unsigned char *_ref1,int _ref_stride);
+int oc_sad8_halfpel_border(const unsigned char *_cur,int _cur_stride,
+ const unsigned char *_ref0,const unsigned char *_ref1,int _ref_stride,
+ ogg_int64_t _mask);
+
+int oc_state_flushheader(oc_theora_state *_state,int *_packet_state,
+ oggpack_buffer *_opb,const th_quant_info *_qinfo,
+ const th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS],
+ const char *_vendor,th_comment *_tc,ogg_packet *_op);
+
+void oc_mode_scheme_chooser_init(oc_mode_scheme_chooser *_chooser);
+void oc_mode_scheme_chooser_reset(oc_mode_scheme_chooser *_chooser);
+int oc_mode_scheme_chooser_cost(oc_mode_scheme_chooser *_chooser,int _mode);
+void oc_mode_scheme_chooser_update(oc_mode_scheme_chooser *_chooser,
+ int _mode);
+void oc_mode_scheme_chooser_add(oc_mode_scheme_chooser *_chooser,
+ int _mode_counts[OC_NMODES]);
+
+oc_mcenc_ctx *oc_mcenc_alloc(oc_enc_ctx *_enc);
+void oc_mcenc_free(oc_mcenc_ctx *_mcenc);
+int oc_mcenc_search_1mv(oc_mcenc_ctx *_mcenc,int _mbi,int _frame);
+oc_enc_pipe_stage *oc_mcenc_prepend_to_pipe(oc_mcenc_ctx *_mcenc,
+ oc_enc_pipe_stage *_next);
+
+oc_enc_vbr_ctx *oc_enc_vbr_alloc(oc_enc_ctx *_enc);
+void oc_enc_vbr_free(oc_enc_vbr_ctx *_vbr);
+int oc_enc_vbr_enable(oc_enc_vbr_ctx *_vbr,th_vbr_cfg *_cfg);
+
+void oc_enc_set_speed_null(oc_enc_ctx *_enc,int _speed);
+void oc_enc_frag_intra_fdct(oc_enc_ctx *_enc,const oc_fragment *_frag,
+ ogg_int16_t _dct_vals[64],int _ystride,int _framei);
+int oc_enc_frag_sad(oc_enc_ctx *_enc,oc_fragment *_frag,int _dx,
+ int _dy,int _pli,int _frame);
+int oc_enc_partial_sb_flags_pack(oc_enc_ctx *_enc,oggpack_buffer *_opb);
+int oc_enc_coded_sb_flags_pack(oc_enc_ctx *_enc,oggpack_buffer *_opb);
+int oc_enc_coded_block_flags_pack(oc_enc_ctx *_enc,oggpack_buffer *_opb);
+void oc_enc_do_inter_dcts(oc_enc_ctx *_enc);
+void oc_enc_merge_eob_runs(oc_enc_ctx *_enc);
+
+#endif

Added: trunk/theora-exp/lib/encmsc.c
===================================================================
--- trunk/theora-exp/lib/encmsc.c	                        (rev 0)
+++ trunk/theora-exp/lib/encmsc.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,233 @@
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <ogg/ogg.h>
+#include "encint.h"
+
+
+
+/*The VLC code used for mode schemes 0-6.*/
+static const th_huff_code OC_MODE_CODESA[OC_NMODES]={
+  {0x00,1},{0x02,2},{0x06,3},{0x0E,4},{0x1E,5},{0x3E,6},{0x7E,7},{0x7F,7}
+};
+
+/*The CLC code used for mode scheme 7.*/
+static const th_huff_code OC_MODE_CODESB[OC_NMODES]={
+  {0x00,3},{0x01,3},{0x02,3},{0x03,3},{0x04,3},{0x05,3},{0x06,3},{0x07,3}
+};
+
+
+
+/*Initialize the mode scheme chooser.
+  This need only be called once per encoder.
+  This is probably the best place to describe the various schemes Theora uses
+   to encode macro block modes.
+  There are 8 possible schemes.
+  Schemes 0-6 use a highly unbalanced Huffman code to code each of the modes.
+  The same set of Huffman codes is used for each of these 7 schemes, but the
+   mode assigned to each code varies.
+  Schemes 1-6 have a fixed mapping from Huffman code to MB mode, while scheme
+   0 writes a custom mapping to the bitstream before all the modes.
+  Finally, scheme 7 just encodes each mode directly in 3 bits.
+  Be warned that the number assigned to each mode is slightly different in the
+   bitstream than in this implementation, so a translation needs to be done.
+
+  Mode name:                 Source-code index;  Bit-stream index:
+  OC_MODE_INTRA              0                   1
+  OC_MODE_INTER_NOMV         1                   0
+  OC_MODE_INTER_MV           2                   2
+  OC_MODE_INTER_MV_LAST      3                   3
+  OC_MODE_INTER_MV_LAST2     4                   4
+  OC_MODE_INTER_MV_FOUR      5                   6
+  OC_MODE_GOLDEN_NOMV        6                   7
+  OC_MODE_GOLDEN_MV          7                   5
+
+  The bit stream indices come from the constants assigned to each mode in the
+   original VP3 source.*/
+void oc_mode_scheme_chooser_init(oc_mode_scheme_chooser *_chooser){
+  int msi;
+  _chooser->mode_ranks[0]=_chooser->scheme0_ranks;
+  for(msi=0;msi<7;msi++){
+    _chooser->mode_codes[msi]=OC_MODE_CODESA;
+    _chooser->mode_ranks[msi+1]=OC_MODE_SCHEMES[msi];
+  }
+  _chooser->mode_codes[7]=OC_MODE_CODESB;
+}
+
+/*Reset the mode scheme chooser.
+  This needs to be called once for each frame, including the first.*/
+void oc_mode_scheme_chooser_reset(oc_mode_scheme_chooser *_chooser){
+  int i;
+  memset(_chooser->mode_counts,0,sizeof(_chooser->mode_counts));
+  /*Scheme 0 starts with 24 bits to store the mode list in.*/
+  _chooser->scheme_bits[0]=24;
+  memset(_chooser->scheme_bits+1,0,7*sizeof(_chooser->scheme_bits[1]));
+  for(i=0;i<8;i++){
+    /*Scheme 7 should always start first, and scheme 0 should always start
+       last.*/
+    _chooser->scheme_list[i]=7-i;
+    _chooser->scheme0_list[i]=_chooser->scheme0_ranks[i]=i;
+  }
+}
+
+/*This is the real purpose of this data structure: not actually selecting a
+   mode scheme, but estimating the cost of coding a given mode given all the
+   modes selected so far.
+  This is done via opportunity cost: the cost is defined as the number of bits
+   required to encode all the modes selected so far including the current one
+   using the best possible scheme, minus the number of bits required to encode
+   all the modes selected so far not including the current one using the best
+   possible scheme.
+  The computational expense of doing this probably makes it overkill.
+  Just be happy we take a greedy approach instead of trying to solve the
+   global mode-selection problem (which is NP-hard).
+  _mode: The mode to determine the cost of.
+  Return: The number of bits required to code this mode.*/
+int oc_mode_scheme_chooser_cost(oc_mode_scheme_chooser *_chooser,int _mode){
+  int scheme0;
+  int scheme1;
+  int si;
+  int scheme_bits;
+  int best_bits;
+  int mode_bits;
+  scheme0=_chooser->scheme_list[0];
+  scheme1=_chooser->scheme_list[1];
+  best_bits=_chooser->scheme_bits[scheme0];
+  mode_bits=_chooser->mode_codes[scheme0][
+   _chooser->mode_ranks[scheme0][_mode]].nbits;
+  /*Typical case: If the difference between the best scheme and the next best
+     is greater than 6 bits, then adding just one mode cannot change which
+     scheme we use.*/
+  if(_chooser->scheme_bits[scheme1]-best_bits>6)return mode_bits;
+  /*Otherwise, check to see if adding this mode selects a different scheme
+     as the best.*/
+  si=1;
+  best_bits+=mode_bits;
+  do{
+    /*For any scheme except 0, we can just use the bit cost of the mode's rank
+       in that scheme.*/
+    if(scheme1!=0){
+      scheme_bits=_chooser->scheme_bits[scheme1]+
+       _chooser->mode_codes[scheme1][
+       _chooser->mode_ranks[scheme1][_mode]].nbits;
+    }
+    else{
+      int ri;
+      /*For scheme 0, incrementing the mode count could potentially change the
+         mode's rank.
+        Find the index where the mode would be moved to in the optimal list,
+         and use its bit cost instead of the one for the mode's current
+         position in the list.*/
+      for(ri=_chooser->scheme0_ranks[_mode];ri>0&&
+       _chooser->mode_counts[_mode]>=
+       _chooser->mode_counts[_chooser->scheme0_list[ri-1]];ri--);
+      scheme_bits=_chooser->scheme_bits[0]+OC_MODE_CODESA[ri].nbits;
+    }
+    if(scheme_bits<best_bits)best_bits=scheme_bits;
+    if(++si>=8)break;
+    scheme1=_chooser->scheme_list[si];
+  }
+  while(_chooser->scheme_bits[scheme1]-_chooser->scheme_bits[scheme0]<=6);
+  return best_bits-_chooser->scheme_bits[scheme0];
+}
+
+/*Update the mode counts and per-scheme bit counts and re-order the scheme
+   lists once a mode has been selected.
+  _mode: The mode that was chosen.*/
+void oc_mode_scheme_chooser_update(oc_mode_scheme_chooser *_chooser,
+ int _mode){
+  int ri;
+  int si;
+  _chooser->mode_counts[_mode]++;
+  /*Re-order the scheme0 mode list if necessary.*/
+  for(ri=_chooser->scheme0_ranks[_mode];ri>0;ri--){
+    int pmode;
+    pmode=_chooser->scheme0_list[ri-1];
+    if(_chooser->mode_counts[pmode]>=_chooser->mode_counts[_mode])break;
+    _chooser->scheme0_ranks[pmode]++;
+    _chooser->scheme0_list[ri]=pmode;
+  }
+  _chooser->scheme0_ranks[_mode]=ri;
+  _chooser->scheme0_list[ri]=_mode;
+  /*Now add the bit cost for the mode to each scheme.*/
+  for(si=0;si<8;si++){
+    _chooser->scheme_bits[si]+=
+     _chooser->mode_codes[si][_chooser->mode_ranks[si][_mode]].nbits;
+  }
+  /*Finally, re-order the list of schemes.*/
+  for(si=1;si<8;si++){
+    int sj;
+    int scheme0;
+    int bits0;
+    scheme0=_chooser->scheme_list[si];
+    bits0=_chooser->scheme_bits[scheme0];
+    sj=si;
+    do{
+      int scheme1;
+      scheme1=_chooser->scheme_list[sj-1];
+      if(bits0>=_chooser->scheme_bits[scheme1])break;
+      _chooser->scheme_list[sj]=scheme1;
+    }
+    while(--sj>0);
+    _chooser->scheme_list[sj]=scheme0;
+  }
+}
+
+/*Update the count for each mode by the given amounts, and then re-rank the
+   schemes appropriately.
+  This allows fewer (e.g. 1) updates to be done, at the cost of a more
+   expensive update.
+  _mode_counts: The amount to add to each mode count.*/
+void oc_mode_scheme_chooser_add(oc_mode_scheme_chooser *_chooser,
+ int _mode_counts[OC_NMODES]){
+  int mi;
+  int mj;
+  int ri;
+  int rj;
+  int si;
+  for(mi=0;mi<OC_NMODES;mi++){
+    _chooser->mode_counts[mi]+=_mode_counts[mi];
+  }
+  /*Re-order the scheme0 mode list if necessary.*/
+  for(ri=1;ri<OC_NMODES;ri++){
+    mi=_chooser->scheme0_list[ri];
+    rj=ri;
+    do{
+      mj=_chooser->scheme0_list[rj-1];
+      if(_chooser->mode_counts[mj]>=_chooser->mode_counts[mi])break;
+      _chooser->scheme0_ranks[mj]++;
+      _chooser->scheme0_list[rj]=mj;
+    }
+    while(--rj>0);
+    _chooser->scheme0_ranks[mi]=rj;
+    _chooser->scheme0_list[rj]=mi;
+  }
+  /*Now recompute the bit cost for each scheme.*/
+  for(si=0;si<8;si++){
+    _chooser->scheme_bits[si]=0;
+    for(mi=0;mi<8;mi++){
+      _chooser->scheme_bits[si]+=
+       _chooser->mode_codes[si][_chooser->mode_ranks[si][mi]].nbits*
+        _chooser->mode_counts[mi];
+    }
+  }
+  /*Scheme 0 starts with 24 bits to store the mode list in.*/
+  _chooser->scheme_bits[0]+=24;
+  /*Finally, re-order the list of schemes.*/
+  for(si=1;si<8;si++){
+    int sj;
+    int scheme0;
+    int bits0;
+    scheme0=_chooser->scheme_list[si];
+    bits0=_chooser->scheme_bits[scheme0];
+    sj=si;
+    do{
+      int scheme1;
+      scheme1=_chooser->scheme_list[sj-1];
+      if(bits0>=_chooser->scheme_bits[scheme1])break;
+      _chooser->scheme_list[sj]=scheme1;
+    }
+    while(--sj>0);
+    _chooser->scheme_list[sj]=scheme0;
+  }
+}

Added: trunk/theora-exp/lib/encode.c
===================================================================
--- trunk/theora-exp/lib/encode.c	                        (rev 0)
+++ trunk/theora-exp/lib/encode.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,1529 @@
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <ogg/ogg.h>
+#include "encint.h"
+#include "fdct.h"
+
+
+
+/*The mode orderings for the various mode coding schemes.
+  Scheme 0 uses a custom alphabet, which is not stored in this table.*/
+const int OC_MODE_SCHEMES[7][OC_NMODES]={
+  /*Last MV dominates.*/
+  /*L P M N I G GM 4*/
+  {4,3,2,0,1,7,5,6},
+  /*L P N M I G GM 4*/
+  {4,2,3,0,1,7,5,6},
+  /*L M P N I G GM 4*/
+  {4,3,1,0,2,7,5,6},
+  /*L M N P I G GM 4*/
+  {4,2,1,0,3,7,5,6},
+  /* No MV dominates.*/
+  /*N L P M I G GM 4*/
+  {4,0,3,1,2,7,5,6},
+  /*N G L P M I GM 4*/
+  {5,0,4,2,3,7,1,6},
+  /*Default ordering.*/
+  /*N I M L P G GM 4*/
+  {1,0,2,3,4,7,5,6}
+};
+
+/*The number of different DCT coefficient values that can be stored by each
+   of the different DCT value category tokens.*/
+const int OC_DCT_VAL_CAT_SIZES[6]={2,4,8,16,32,512};
+
+/*The number of bits to shift the sign of the DCT coefficient over by for each
+   of the different DCT value category tokens.*/
+const int OC_DCT_VAL_CAT_SHIFTS[6]={1,2,3,4,5,9};
+
+/*The Huffman codes used for motion vectors.*/
+const th_huff_code OC_MV_CODES[2][63]={
+  /*Scheme 1: VLC code.*/
+  {
+             {0xFF,8},{0xFD,8},{0xFB,8},{0xF9,8},{0xF7,8},{0xF5,8},{0xF3,8},
+    {0xF1,8},{0xEF,8},{0xED,8},{0xEB,8},{0xE9,8},{0xE7,8},{0xE5,8},{0xE3,8},
+    {0xE1,8},{0x6F,7},{0x6D,7},{0x6B,7},{0x69,7},{0x67,7},{0x65,7},{0x63,7},
+    {0x61,7},{0x2F,6},{0x2D,6},{0x2B,6},{0x29,6},{0x09,4},{0x07,4},{0x02,3},
+    {0x00,3},
+    {0x01,3},{0x06,4},{0x08,4},{0x28,6},{0x2A,6},{0x2C,6},{0x2E,6},{0x60,7},
+    {0x62,7},{0x64,7},{0x66,7},{0x68,7},{0x6A,7},{0x6C,7},{0x6E,7},{0xE0,8},
+    {0xE2,8},{0xE4,8},{0xE6,8},{0xE8,8},{0xEA,8},{0xEC,8},{0xEE,8},{0xF0,8},
+    {0xF2,8},{0xF4,8},{0xF6,8},{0xF8,8},{0xFA,8},{0xFC,8},{0xFE,8}
+  },
+  /*Scheme 2: (5 bit magnitude),(1 bit sign).
+    This wastes a code word (0x01, negative zero), or a bit (0x00, positive
+     zero, requires only 5 bits to uniquely decode).*/
+  {
+             {0x3F,6},{0x3D,6},{0x3B,6},{0x39,6},{0x37,6},{0x35,6},{0x33,6},
+    {0x31,6},{0x2F,6},{0x2D,6},{0x2B,6},{0x29,6},{0x27,6},{0x25,6},{0x23,6},
+    {0x21,6},{0x1F,6},{0x1D,6},{0x1B,6},{0x19,6},{0x17,6},{0x15,6},{0x13,6},
+    {0x11,6},{0x0F,6},{0x0D,6},{0x0B,6},{0x09,6},{0x07,6},{0x05,6},{0x03,6},
+    {0x00,6},
+    {0x02,6},{0x04,6},{0x06,6},{0x08,6},{0x0A,6},{0x0C,6},{0x0E,6},{0x10,6},
+    {0x12,6},{0x14,6},{0x16,6},{0x18,6},{0x1A,6},{0x1C,6},{0x1E,6},{0x20,6},
+    {0x22,6},{0x24,6},{0x26,6},{0x28,6},{0x2A,6},{0x2C,6},{0x2E,6},{0x30,6},
+    {0x32,6},{0x34,6},{0x36,6},{0x38,6},{0x3A,6},{0x3C,6},{0x3E,6}
+  }
+};
+
+
+
+int oc_sad8_fullpel(const unsigned char *_cur,int _cur_ystride,
+ const unsigned char *_ref,int _ref_ystride){
+  int i;
+  int j;
+  int err;
+  err=0;
+  for(i=0;i<8;i++){
+    for(j=0;j<8;j++)err+=abs((int)_cur[j]-_ref[j]);
+    _cur+=_cur_ystride;
+    _ref+=_ref_ystride;
+  }
+  return err;
+}
+
+int oc_sad8_fullpel_border(const unsigned char *_cur,int _cur_ystride,
+ const unsigned char *_ref,int _ref_ystride,ogg_int64_t _mask){
+  int i;
+  int j;
+  int err;
+  err=0;
+  for(i=0;i<8;i++){
+    for(j=0;j<8;j++){
+      if(_mask&1)err+=abs((int)_cur[j]-_ref[j]);
+      _mask>>=1;
+    }
+    _cur+=_cur_ystride;
+    _ref+=_ref_ystride;
+  }
+  return err;
+}
+
+int oc_sad8_halfpel(const unsigned char *_cur,int _cur_ystride,
+ const unsigned char *_ref0,const unsigned char *_ref1,int _ref_ystride){
+  int i;
+  int j;
+  int err;
+  err=0;
+  for(i=0;i<8;i++){
+    for(j=0;j<8;j++)err+=abs(_cur[j]-((int)_ref0[j]+_ref1[j]>>1));
+    _cur+=_cur_ystride;
+    _ref0+=_ref_ystride;
+    _ref1+=_ref_ystride;
+  }
+  return err;
+}
+
+int oc_sad8_halfpel_border(const unsigned char *_cur,int _cur_ystride,
+ const unsigned char *_ref0,const unsigned char *_ref1,int _ref_ystride,
+ ogg_int64_t _mask){
+  int i;
+  int j;
+  int err;
+  err=0;
+  for(i=0;i<8;i++){
+    for(j=0;j<8;j++){
+      if(_mask&1)err+=abs(_cur[j]-((int)_ref0[j]+_ref1[j])>>1);
+      _mask>>=1;
+    }
+    _cur+=_cur_ystride;
+    _ref0+=_ref_ystride;
+    _ref1+=_ref_ystride;
+  }
+  return err;
+}
+
+
+/*Writes the bit pattern for the run length of a run to the given
+   oggpack_buffer.
+  _opb:         The buffer to write to.
+  _value:       The length of the run.
+                This must be positive, and no more than the maximum value of a
+                 run that can be stored with the given prefix code.
+  _val_min:     The minimum value that can be coded in each interval, plus an
+                 extra entry for one past the last interval.
+  _code_prefix: The prefix code that is prepended to the value for
+                 each interval.
+  _code_nbits:   The total number of bits in the bit pattern encoded for each
+                 interval.
+  Return: The number of bits written.*/
+static int oc_run_pack(oggpack_buffer *_opb,int _value,const int _val_min[],
+ const int _code_prefix[],const int _code_nbits[]){
+  int i;
+  for(i=0;_value>=_val_min[i+1];i++);
+  oggpackB_write(_opb,_code_prefix[i]+(_value-_val_min[i]),_code_nbits[i]);
+  return _code_nbits[i];
+}
+
+/*Writes the bit pattern for the run length of a super block run to the given
+   oggpack_buffer.
+  _opb:   The buffer to write to.
+  _value: The length of the run.
+          This must be positive, and no more than 4129.*/
+static int oc_sb_run_pack(oggpack_buffer *_opb,int _value){
+  /*Coding scheme:
+       Codeword            Run Length
+     0                       1
+     10x                     2-3
+     110x                    4-5
+     1110xx                  6-9
+     11110xxx                10-17
+     111110xxxx              18-33
+     111111xxxxxxxxxxxx      34-4129*/
+  static const int VAL_MIN[8]={1,2,4,6,10,18,34,4130};
+  static const int CODE_PREFIX[7]={0,4,0xC,0x38,0xF0,0x3E0,0x3F000};
+  static const int CODE_NBITS[7]={1,3,4,6,8,10,18};
+  return oc_run_pack(_opb,_value,VAL_MIN,CODE_PREFIX,CODE_NBITS);
+}
+
+/*Writes the bit pattern for the run length of a block run to the given
+   oggpack_buffer.
+  _opb:   The buffer to write to.
+  _value: The length of the run.
+          This must be positive, and no more than 30.*/
+static int oc_block_run_pack(oggpack_buffer *_opb,int _value){
+  /*Coding scheme:
+     Codeword             Run Length
+     0x                      1-2
+     10x                     3-4
+     110x                    5-6
+     1110xx                  7-10
+     11110xx                 11-14
+     11111xxxx               15-30*/
+  static const int VAL_MIN[7]={1,3,5,7,11,15,31};
+  static const int CODE_PREFIX[6]={0,4,0xC,0x38,0x78,0x1F0};
+  static const int CODE_NBITS[6]={2,3,4,6,7,9};
+  return oc_run_pack(_opb,_value,VAL_MIN,CODE_PREFIX,CODE_NBITS);
+}
+
+
+
+/*Initializes the macro block neighbor lists.
+  This assumes that the entire mbinfo memory region has been initialized with
+   zeros.
+  _enc: The encoding context.*/
+static void oc_enc_init_mbinfo(oc_enc_ctx *_enc){
+  oc_theora_state *state;
+  int              nmbs;
+  int              mbi;
+  state=&_enc->state;
+  /*Loop through the Y plane super blocks.*/
+  nmbs=state->nmbs;
+  for(mbi=0;mbi<nmbs;mbi++){
+    /*Because of the Hilbert curve ordering the macro blocks are
+       visited in, the available neighbors change depending on where in
+       a super block the macro block is located.
+      Only the first three vectors are used in the median calculation
+       for the optimal predictor, and so the most important should be
+       listed first.
+      Additional vectors are used, so there will always be at least 3, except
+       for in the upper-left most macro block.*/
+    /*The number of current neighbors for each macro block position.*/
+    static const int NCNEIGHBORS[4]={4,3,2,4};
+    /*The offset of each current neighbor in the X direction.*/
+    static const int CDX[4][4]={
+      {-1,0,1,-1},
+      {-1,0,-1,},
+      {-1,-1},
+      {-1,0,0,1}
+    };
+    /*The offset of each current neighbor in the Y direction.*/
+    static const int CDY[4][4]={
+      {0,-1,-1,-1},
+      {0,-1,-1},
+      {0,-1},
+      {0,-1,1,-1}
+    };
+    /*The offset of each previous neighbor in the X direction.*/
+    static const int PDX[4]={-1,0,1,0};
+    /*The offset of each previous neighbor in the Y direction.*/
+    static const int PDY[4]={0,-1,0,1};
+    oc_mb_enc_info *emb;
+    oc_mb          *mb;
+    int mbx;
+    int mby;
+    int mbn;
+    int nmbx;
+    int nmby;
+    int nmbi;
+    int i;
+    mb=state->mbs+mbi;
+    /*Make sure this macro block is within the encoded region.*/
+    if(mb->mode==OC_MODE_INVALID)continue;
+    emb=_enc->mbinfo+mbi;
+    mbn=mbi&3;
+    mbx=mb->x>>4;
+    mby=mb->y>>4;
+    /*Fill in the neighbors with current motion vectors available.*/
+    for(i=0;i<NCNEIGHBORS[mbn];i++){
+      nmbx=mbx+CDX[mbn][i];
+      nmby=mby+CDY[mbn][i];
+      if(nmbx<0||nmbx>=state->nhmbs||nmby<0||nmby>=state->nvmbs)continue;
+      nmbi=oc_state_mbi_for_pos(state,nmbx,nmby);
+      if(state->mbs[nmbi].mode==OC_MODE_INVALID)continue;
+      emb->cneighbors[emb->ncneighbors++]=nmbi;
+    }
+    /*Fill in the neighbors with previous motion vectors available.*/
+    for(i=0;i<4;i++){
+      nmbx=mbx+PDX[i];
+      nmby=mby+PDY[i];
+      if(nmbx<0||nmbx>=state->nhmbs||nmby<0||nmby>=state->nvmbs)continue;
+      nmbi=oc_state_mbi_for_pos(state,nmbx,nmby);
+      if(state->mbs[nmbi].mode==OC_MODE_INVALID)continue;
+      emb->pneighbors[emb->npneighbors++]=nmbi;
+    }
+  }
+}
+
+/*Sets the Huffman codes to use for the DCT tokens.
+  This may only be called before the setup header is written.
+  If it is called multiple times, only the last call has any effect.
+  _codes: An array of 80 Huffman tables with 32 elements each.
+          This may be NULL, in which case the default Huffman codes will be
+           used.
+  Return: 0 on success, or a negative value on error.
+          TH_EFAULT if _enc is NULL
+          TH_EINVAL if the setup header has already been written, the code is
+           not prefix free, or does not form a full binary tree.*/
+static int oc_enc_set_huffman_codes(oc_enc_ctx *_enc,
+ const th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]){
+  int ret;
+  if(_enc==NULL)return TH_EFAULT;
+  if(_enc->packet_state>OC_PACKET_SETUP_HDR)return TH_EINVAL;
+  if(_codes==NULL)_codes=TH_VP31_HUFF_CODES;
+  /*Validate the codes.*/
+  oggpackB_reset(&_enc->opb);
+  ret=oc_huff_codes_pack(&_enc->opb,_codes);
+  if(ret<0)return ret;
+  memcpy(_enc->huff_codes,_codes,sizeof(_enc->huff_codes));
+  return 0;
+}
+
+/*Sets the quantization parameters to use.
+  This may only be called before the setup header is written.
+  If it is called multiple times, only the last call has any effect.
+  _qinfo: The quantization parameters.
+          These are described in more detail in theoraenc.h.
+          This can be NULL, in which case the default quantization parameters
+           will be used.*
+  Return: 0 on success, or a negative value on error.
+          TH_EFAULT if _enc is NULL.
+          TH_EINVAL if the setup header has already been written, or it cannot
+           be verified that the quantization level of for a particular qti,
+           pli, and ci never increases as qi increases.*/
+static int oc_enc_set_quant_params(th_enc_ctx *_enc,
+ const th_quant_info *_qinfo){
+  int qti;
+  int pli;
+  int qri;
+  int qi;
+  int ci;
+  if(_enc==NULL)return TH_EFAULT;
+  if(_enc->packet_state>OC_PACKET_SETUP_HDR)return TH_EINVAL;
+  if(_qinfo==NULL)_qinfo=OC_DEF_QUANT_INFO+_enc->state.info.pixel_fmt;
+  /*Verify that, for a given qti, pli and ci, the actual quantizer will never
+     increase as qi increases.
+    This is required for efficient quantizer selection.*/
+  for(qi=64;qi-->1;){
+    if(_qinfo->ac_scale[qi]>_qinfo->ac_scale[qi-1])return TH_EINVAL;
+    if(_qinfo->dc_scale[qi]>_qinfo->dc_scale[qi-1])return TH_EINVAL;
+  }
+  for(qti=0;qti<2;qti++)for(pli=0;pli<3;pli++){
+    if(_qinfo->qi_ranges[qti][pli].nranges<=0)return TH_EINVAL;
+    for(qi=qri=0;qri<_qinfo->qi_ranges[qti][pli].nranges;qri++){
+      qi+=_qinfo->qi_ranges[qti][pli].sizes[qri];
+      for(ci=0;ci<64;ci++){
+        if(_qinfo->qi_ranges[qti][pli].base_matrices[qri+1][ci]>
+         _qinfo->qi_ranges[qti][pli].base_matrices[qri][ci]){
+          return TH_EINVAL;
+        }
+      }
+    }
+    if(qi!=63)return TH_EINVAL;
+  }
+  /*TODO: Analyze for packing purposes instead of just doing a shallow copy.*/
+  memcpy(&_enc->qinfo,_qinfo,sizeof(_enc->qinfo));
+  for(qti=0;qti<2;qti++)for(pli=0;pli<3;pli++){
+    _enc->state.dequant_tables[qti][pli]=
+     _enc->state.dequant_table_data[qti][pli];
+    _enc->enquant_tables[qti][pli]=_enc->enqaunt_table_data[qti][pli];
+  }
+  oc_enquant_tables_init(_enc->state.dequant_tables,_enc->enquant_tables,
+   _qinfo);
+  memcpy(_enc->state.loop_filter_limits,_qinfo->loop_filter_limits,
+   sizeof(_enc->state.loop_filter_limits));
+  return 0;
+}
+
+static void oc_enc_frame_header_pack(oc_enc_ctx *_enc){
+  /*Mark this packet as a data packet.*/
+  oggpackB_write(&_enc->opb,0,1);
+  /*Write out the frame type (I or P).*/
+  oggpackB_write(&_enc->opb,_enc->state.frame_type,1);
+  /*Write out the current qi list.*/
+  oggpackB_write(&_enc->opb,_enc->state.qis[0],6);
+  if(_enc->state.nqis>1){
+    oggpackB_write(&_enc->opb,1,1);
+    oggpackB_write(&_enc->opb,_enc->state.qis[1],6);
+    if(_enc->state.nqis>2){
+      oggpackB_write(&_enc->opb,1,1);
+      oggpackB_write(&_enc->opb,_enc->state.qis[2],6);
+    }
+    else oggpackB_write(&_enc->opb,0,1);
+  }
+  else oggpackB_write(&_enc->opb,0,1);
+  if(_enc->state.frame_type==OC_INTRA_FRAME){
+    /*Keyframes have 3 unused configuration bits, holdovers from VP3 days.
+      Most of the other unused bits in the VP3 headers were eliminated.
+      I don't know why these remain.*/
+    oggpackB_write(&_enc->opb,0,3);
+  }
+}
+
+static void oc_enc_block_qis_pack(oc_enc_ctx *_enc){
+  int *coded_fragi;
+  int *coded_fragi_end;
+  int  ncoded_fragis;
+  int  flag;
+  int  nqi0;
+  int  qii;
+  int  run_count;
+  ncoded_fragis=_enc->state.ncoded_fragis[0]+
+   _enc->state.ncoded_fragis[1]+_enc->state.ncoded_fragis[2];
+  if(_enc->state.nqis==1||ncoded_fragis<=0)return;
+  coded_fragi=_enc->state.coded_fragis;
+  coded_fragi_end=coded_fragi+ncoded_fragis;
+  flag=!!_enc->frinfo[*coded_fragi].qii;
+  oggpackB_write(&_enc->opb,flag,1);
+  nqi0=0;
+  while(coded_fragi<coded_fragi_end){
+    for(run_count=0;coded_fragi<coded_fragi_end;coded_fragi++){
+      if(!!_enc->frinfo[*coded_fragi].qii!=flag)break;
+      run_count++;
+      nqi0+=!flag;
+    }
+    while(run_count>4129){
+      oc_sb_run_pack(&_enc->opb,4129);
+      run_count-=4129;
+      oggpackB_write(&_enc->opb,flag,1);
+    }
+    oc_sb_run_pack(&_enc->opb,run_count);
+    flag=!flag;
+    if(run_count==4129&&coded_fragi<coded_fragi_end){
+      oggpackB_write(&_enc->opb,flag,1);
+    }
+  }
+  if(_enc->state.nqis!=3||nqi0>=ncoded_fragis)return;
+  coded_fragi=_enc->state.coded_fragis;
+  for(;!_enc->frinfo[*coded_fragi].qii;coded_fragi++);
+  flag=_enc->frinfo[*coded_fragi].qii-1;
+  oggpackB_write(&_enc->opb,flag,1);
+  while(coded_fragi<coded_fragi_end){
+    for(run_count=0;coded_fragi<coded_fragi_end;coded_fragi++){
+      qii=_enc->frinfo[*coded_fragi].qii;
+      if(!qii)continue;
+      if(qii-1!=flag)break;
+      run_count++;
+    }
+    while(run_count>4129){
+      oc_sb_run_pack(&_enc->opb,4129);
+      run_count-=4129;
+      oggpackB_write(&_enc->opb,flag,1);
+    }
+    oc_sb_run_pack(&_enc->opb,run_count);
+    flag=!flag;
+    if(run_count==4129&&coded_fragi<coded_fragi_end){
+      oggpackB_write(&_enc->opb,flag,1);
+    }
+  }
+}
+
+/*Performs an fDCT on a given fragment.
+  _frag:     The fragment to perform the 2D DCT on.
+  _dct_vals: The output buffer for the DCT coefficients.
+  _pli:      The color plane the fragment belongs to.*/
+static void oc_enc_frag_inter_fdct(oc_enc_ctx *_enc,const oc_fragment *_frag,
+ ogg_int16_t _dct_vals[64],int _pli){
+  ogg_int16_t    pix_buf[64];
+  unsigned char *src;
+  unsigned char *ref0;
+  unsigned char *ref1;
+  int            pixi;
+  int            src_ystride;
+  int            ref_ystride;
+  int            ref_framei;
+  int            mvoffsets[2];
+  int            y;
+  int            x;
+  src_ystride=_enc->state.input[_pli].ystride;
+  ref_framei=_enc->state.ref_frame_idx[OC_FRAME_FOR_MODE[_frag->mbmode]];
+  ref_ystride=_enc->state.ref_frame_bufs[ref_framei][_pli].ystride;
+  src=_frag->buffer[OC_FRAME_IO];
+  if(oc_state_get_mv_offsets(&_enc->state,mvoffsets,
+   _frag->mv[0],_frag->mv[1],ref_ystride,_pli)>1){
+    ref0=_frag->buffer[ref_framei]+mvoffsets[0];
+    ref1=_frag->buffer[ref_framei]+mvoffsets[1];
+    if(_frag->border!=NULL){
+      ogg_int64_t mask;
+      mask=_frag->border->mask;
+      for(pixi=y=0;y<8;y++){
+        for(x=0;x<8;x++,pixi++){
+          pix_buf[pixi]=(ogg_int16_t)(((int)mask&1)?
+           src[x]-((int)ref0[x]+ref1[x]>>1):0);
+          mask>>=1;
+        }
+        src+=src_ystride;
+        ref0+=ref_ystride;
+        ref1+=ref_ystride;
+      }
+      oc_fdct8x8_border(_frag->border,_dct_vals,pix_buf);
+    }
+    else{
+      for(pixi=y=0;y<8;y++){
+        for(x=0;x<8;x++,pixi++){
+          pix_buf[pixi]=(ogg_int16_t)(src[x]-((int)ref0[x]+ref1[x]>>1));
+        }
+        src+=src_ystride;
+        ref0+=ref_ystride;
+        ref1+=ref_ystride;
+      }
+      oc_fdct8x8(_dct_vals,pix_buf);
+    }
+  }
+  else{
+    ref0=_frag->buffer[ref_framei]+mvoffsets[0];
+    if(_frag->border!=NULL){
+      ogg_int64_t mask;
+      mask=_frag->border->mask;
+      for(pixi=y=0;y<8;y++){
+        for(x=0;x<8;x++,pixi++){
+          pix_buf[pixi]=(ogg_int16_t)(((int)mask&1)?src[x]-(int)ref0[x]:0);
+          mask>>=1;
+        }
+        src+=src_ystride;
+        ref0+=ref_ystride;
+      }
+      oc_fdct8x8_border(_frag->border,_dct_vals,pix_buf);
+    }
+    else{
+      for(pixi=y=0;y<8;y++){
+        for(x=0;x<8;x++,pixi++){
+          pix_buf[pixi]=(ogg_int16_t)(src[x]-(int)ref0[x]);
+        }
+        src+=src_ystride;
+        ref0+=ref_ystride;
+      }
+      oc_fdct8x8(_dct_vals,pix_buf);
+    }
+  }
+}
+
+/*Merge the final EOB run of each coefficient list with the start of the next,
+   if possible.
+  This assumes that dct_token_offs[0][zzi] is 0 for each zzi, and will
+   increase it as appropriate if an EOB run is merged with that of a previous
+   token index.*/
+void oc_enc_merge_eob_runs(oc_enc_ctx *_enc){
+  int    zzi;
+  for(zzi=1;zzi<64;zzi++){
+    static const int OC_EOB_RANGE[OC_NDCT_EOB_TOKEN_MAX]={1,1,1,4,8,16,4096};
+    static const int OC_EOB_OFFS[OC_NDCT_EOB_TOKEN_MAX]={1,2,3,4,8,16,0};
+    int old_tok1;
+    int old_tok2;
+    int old_eb1;
+    int old_eb2;
+    int new_tok;
+    int toki;
+    int zzj;
+    int ebi;
+    int runl;
+    /*Make sure this coefficient has tokens at all.*/
+    if(_enc->ndct_tokens[zzi]<=0)continue;
+    /*Ensure the first token is an EOB run.*/
+    old_tok2=_enc->dct_tokens[zzi][0];
+    if(old_tok2>=OC_NDCT_EOB_TOKEN_MAX)continue;
+    /*Search for a previous coefficient that has any tokens at all.*/
+    old_tok1=OC_NDCT_EOB_TOKEN_MAX;
+    zzj=zzi-1;
+    do{
+      toki=_enc->ndct_tokens[zzj]-1;
+      if(toki>=_enc->dct_token_offs[0][zzj]){
+        old_tok1=_enc->dct_tokens[zzj][toki];
+        break;
+      }
+    }
+    while(zzj-->0);
+    /*Ensure its last token was an EOB run.*/
+    if(old_tok1>=OC_NDCT_EOB_TOKEN_MAX)continue;
+    /*Pull off the associated extra bits, if any, and decode the runs.*/
+    ebi=_enc->nextra_bits[zzj];
+    old_eb1=OC_DCT_TOKEN_EXTRA_BITS[old_tok1]?_enc->extra_bits[zzj][--ebi]:0;
+    old_eb2=OC_DCT_TOKEN_EXTRA_BITS[old_tok2]?_enc->extra_bits[zzi][0]:0;
+    runl=OC_EOB_OFFS[old_tok1]+old_eb1+OC_EOB_OFFS[old_tok2]+old_eb2;
+    /*We can't possibly combine these into one run.
+      It might be possible to split them more optimally, but we'll just leave
+       them as is.*/
+    if(runl>=4096)continue;
+    /*We CAN combine them into one run.*/
+    for(new_tok=OC_DCT_EOB1_TOKEN;
+     runl-OC_EOB_OFFS[new_tok]>=OC_EOB_RANGE[new_tok];new_tok++);
+    /*toki is always initialized.
+      If your compiler thinks otherwise, it is dumb.*/
+    _enc->dct_tokens[zzj][toki]=(unsigned char)new_tok;
+    /*Update the two token lists.*/
+    if(OC_DCT_TOKEN_EXTRA_BITS[new_tok]){
+      _enc->extra_bits[zzj][ebi++]=(ogg_uint16_t)(
+       runl-OC_EOB_OFFS[new_tok]);
+    }
+    _enc->nextra_bits[zzj]=ebi;
+    _enc->dct_token_offs[0][zzi]++;
+    /*Note: We don't bother to update the offsets for planes 1 and 2 if
+       planes 0 or 1 don't have any tokens.
+      This turns out not to matter due to the way we use the offsets later.*/
+    if(OC_DCT_TOKEN_EXTRA_BITS[old_tok2])_enc->extra_bits_offs[zzi]++;
+  }
+}
+
+/*Counts the tokens of each type used for the given range of coefficient
+   indices in zig-zag order.
+  _enc: The encoding context.
+  _zzi_start:      The first zig-zag index to include.
+  _zzi_end:        The first zig-zag index to not include.
+  _token_counts_y: Returns the token counts for the Y' plane.
+  _token_counts_c: Returns the token counts for the Cb and Cr planes.*/
+static void oc_enc_count_tokens(oc_enc_ctx *_enc,int _zzi_start,int _zzi_end,
+ int _token_counts_y[TH_NDCT_TOKENS],int _token_counts_c[TH_NDCT_TOKENS]){
+  int zzi;
+  int ti;
+  memset(_token_counts_y,0,sizeof(_token_counts_y[0])*TH_NDCT_TOKENS);
+  memset(_token_counts_c,0,sizeof(_token_counts_c[0])*TH_NDCT_TOKENS);
+  for(zzi=_zzi_start;zzi<_zzi_end;zzi++){
+    for(ti=_enc->dct_token_offs[0][zzi];ti<_enc->dct_token_offs[1][zzi];ti++){
+      _token_counts_y[_enc->dct_tokens[zzi][ti]]++;
+    }
+    /*Note: don't reset ti; dct_token_offs might be non-monotonic.*/
+    for(;ti<_enc->ndct_tokens[zzi];ti++){
+      _token_counts_c[_enc->dct_tokens[zzi][ti]]++;
+    }
+  }
+}
+
+/*Computes the number of bits used for each of the potential Huffman codes for
+   the given list of token counts.
+  The bits are added to whatever the current bit counts are.*/
+static void oc_enc_count_bits(oc_enc_ctx *_enc,int _hgi,
+ const int _token_counts[TH_NDCT_TOKENS],int _bit_counts[16]){
+  int huffi;
+  int huff_base;
+  int token;
+  huff_base=_hgi<<4;
+  for(huffi=huff_base;huffi<huff_base+16;huffi++){
+    for(token=0;token<TH_NDCT_TOKENS;token++){
+      _bit_counts[huffi-huff_base]+=
+       _token_counts[token]*_enc->huff_codes[huffi][token].nbits;
+    }
+  }
+}
+
+/*Returns the Huffman index using the fewest number of bits.*/
+static int oc_enc_select_huffi(int _bit_counts[16]){
+  int best_huffi;
+  int huffi;
+  best_huffi=0;
+  for(huffi=1;huffi<16;huffi++)if(_bit_counts[huffi]<_bit_counts[best_huffi]){
+    best_huffi=huffi;
+  }
+  return best_huffi;
+}
+
+/*Packs the DCT tokens for the given range of coefficient indices in zig-zag
+   order using the given Huffman tables.*/
+static void oc_enc_huff_group_pack(oc_enc_ctx *_enc,int _zzi_start,
+ int _zzi_end,int _huff_idxs[3]){
+  int zzi;
+  for(zzi=_zzi_start;zzi<_zzi_end;zzi++){
+    int pli;
+    int ti;
+    int ebi;
+    ti=_enc->dct_token_offs[0][zzi];
+    ebi=_enc->extra_bits_offs[zzi];
+    for(pli=0;pli<3;pli++){
+      const th_huff_code *huff_codes;
+      int                 token;
+      int                 ti_end;
+      /*Step 2: Write the tokens using these tables.*/
+      huff_codes=_enc->huff_codes[_huff_idxs[pli]];
+      /*Note: dct_token_offs[3] is really the ndct_tokens table.
+        Yes, this seems like a horrible hack, yet it's strangely elegant.*/
+      ti_end=_enc->dct_token_offs[pli+1][zzi];
+      /*Note: don't reset ti; dct_token_offs might be non-monotonic.*/
+      for(;ti<ti_end;ti++){
+        token=_enc->dct_tokens[zzi][ti];
+        oggpackB_write(&_enc->opb,huff_codes[token].pattern,
+         huff_codes[token].nbits);
+        if(OC_DCT_TOKEN_EXTRA_BITS[token]){
+          oggpackB_write(&_enc->opb,_enc->extra_bits[zzi][ebi++],
+           OC_DCT_TOKEN_EXTRA_BITS[token]);
+        }
+      }
+    }
+  }
+}
+
+static void oc_enc_residual_tokens_pack(oc_enc_ctx *_enc){
+  static const int  OC_HUFF_LIST_MIN[6]={0,1,6,15,28,64};
+  static const int *OC_HUFF_LIST_MAX=OC_HUFF_LIST_MIN+1;
+  int bits_y[16];
+  int bits_c[16];
+  int token_counts_y[TH_NDCT_TOKENS];
+  int token_counts_c[TH_NDCT_TOKENS];
+  int huff_idxs[5][3];
+  int huffi_y;
+  int huffi_c;
+  int hgi;
+  /*Step 1a: Select Huffman tables for the DC token list.*/
+  memset(bits_y,0,sizeof(bits_y));
+  memset(bits_c,0,sizeof(bits_c));
+  oc_enc_count_tokens(_enc,0,1,token_counts_y,token_counts_c);
+  oc_enc_count_bits(_enc,0,token_counts_y,bits_y);
+  oc_enc_count_bits(_enc,0,token_counts_c,bits_c);
+  huffi_y=oc_enc_select_huffi(bits_y);
+  huffi_c=oc_enc_select_huffi(bits_c);
+  huff_idxs[0][0]=huffi_y;
+  huff_idxs[0][1]=huff_idxs[0][2]=huffi_c;
+  /*Step 1b: Write the DC token list with the chosen tables.*/
+  oggpackB_write(&_enc->opb,huffi_y,4);
+  oggpackB_write(&_enc->opb,huffi_c,4);
+  oc_enc_huff_group_pack(_enc,0,1,huff_idxs[0]);
+  /*Step 2a: Select Huffman tables for the AC token lists.*/
+  memset(bits_y,0,sizeof(bits_y));
+  memset(bits_y,0,sizeof(bits_c));
+  for(hgi=1;hgi<5;hgi++){
+    oc_enc_count_tokens(_enc,OC_HUFF_LIST_MIN[hgi],OC_HUFF_LIST_MAX[hgi],
+     token_counts_y,token_counts_c);
+    oc_enc_count_bits(_enc,hgi,token_counts_y,bits_y);
+    oc_enc_count_bits(_enc,hgi,token_counts_c,bits_c);
+  }
+  huffi_y=oc_enc_select_huffi(bits_y);
+  huffi_c=oc_enc_select_huffi(bits_c);
+  /*Step 2b: Write the AC token lists using the chosen tables.*/
+  oggpackB_write(&_enc->opb,huffi_y,4);
+  oggpackB_write(&_enc->opb,huffi_c,4);
+  for(hgi=1;hgi<5;hgi++){
+    huff_idxs[hgi][0]=huffi_y+(hgi<<4);
+    huff_idxs[hgi][1]=huff_idxs[hgi][2]=huffi_c+(hgi<<4);
+    oc_enc_huff_group_pack(_enc,OC_HUFF_LIST_MIN[hgi],OC_HUFF_LIST_MAX[hgi],
+     huff_idxs[hgi]);
+  }
+#if defined(OC_BITRATE_STATS)
+  oc_bitrate_update_stats(_enc,huff_idxs);
+#endif
+}
+
+
+static void oc_enc_mb_modes_pack(oc_enc_ctx *_enc){
+  const th_huff_code *codes;
+  const int          *mode_ranks;
+  int                *coded_mbi;
+  int                *coded_mbi_end;
+  int                 scheme;
+  scheme=_enc->mode_scheme_chooser.scheme_list[0];
+  oggpackB_write(&_enc->opb,scheme,3);
+  if(scheme==0){
+    int ranks[8];
+    int mi;
+    /*The numbers associated with each mode in the stream are slightly
+       different than what we use in the source.
+      The lookup here converts between the two.*/
+    for(mi=0;mi<OC_NMODES;mi++){
+      ranks[OC_MODE_SCHEMES[6][mi]]=
+       _enc->mode_scheme_chooser.scheme0_ranks[mi];
+    }
+    for(mi=0;mi<OC_NMODES;mi++)oggpackB_write(&_enc->opb,ranks[mi],3);
+  }
+  codes=_enc->mode_scheme_chooser.mode_codes[scheme];
+  mode_ranks=_enc->mode_scheme_chooser.mode_ranks[scheme];
+  coded_mbi=_enc->state.coded_mbis;
+  coded_mbi_end=coded_mbi+_enc->state.ncoded_mbis;
+  for(;coded_mbi<coded_mbi_end;coded_mbi++){
+    const th_huff_code *code;
+    oc_mb              *mb;
+    mb=_enc->state.mbs+*coded_mbi;
+    code=codes+mode_ranks[mb->mode];
+    oggpackB_write(&_enc->opb,code->pattern,code->nbits);
+  }
+}
+
+static void oc_enc_mv_pack(oc_enc_ctx *_enc,int _dx,int _dy){
+  const th_huff_code *code;
+  code=OC_MV_CODES[_enc->mv_scheme]+_dx+31;
+  oggpackB_write(&_enc->opb,code->pattern,code->nbits);
+  code=OC_MV_CODES[_enc->mv_scheme]+_dy+31;
+  oggpackB_write(&_enc->opb,code->pattern,code->nbits);
+}
+
+static void oc_enc_mvs_pack(oc_enc_ctx *_enc){
+  int *coded_mbi;
+  int *coded_mbi_end;
+  oggpackB_write(&_enc->opb,_enc->mv_scheme,1);
+  coded_mbi=_enc->state.coded_mbis;
+  coded_mbi_end=coded_mbi+_enc->state.ncoded_mbis;
+  for(;coded_mbi<coded_mbi_end;coded_mbi++){
+    oc_mb          *mb;
+    oc_mb_enc_info *mbinfo;
+    int             mbi;
+    mbi=*coded_mbi;
+    mb=_enc->state.mbs+mbi;
+    switch(mb->mode){
+      case OC_MODE_INTER_MV:
+      case OC_MODE_GOLDEN_MV:{
+        int which_frame;
+        which_frame=OC_FRAME_FOR_MODE[mb->mode];
+        mbinfo=_enc->mbinfo+mbi;
+        oc_enc_mv_pack(_enc,mbinfo->mvs[0][which_frame][0],
+         mbinfo->mvs[0][which_frame][1]);
+      }break;
+      case OC_MODE_INTER_MV_FOUR:{
+        int bi;
+        mbinfo=_enc->mbinfo+mbi;
+        for(bi=0;bi<4;bi++){
+          int fragi;
+          fragi=mb->map[0][bi];
+          if(fragi>=0&&_enc->state.frags[fragi].coded){
+            oc_enc_mv_pack(_enc,mbinfo->bmvs[bi][0],mbinfo->bmvs[bi][1]);
+          }
+        }
+      }break;
+    }
+  }
+}
+
+static void oc_enc_enable_default_mode(oc_enc_ctx *_enc){
+  /*TODO: Right now we always use VBR mode.
+    When a CBR mode is available, we should use that by default if the user
+     specifies a bitrate, but not a quality, in the th_info struct.*/
+  if(_enc->vbr==NULL)_enc->vbr=oc_enc_vbr_alloc(_enc);
+  oc_enc_vbr_enable(_enc->vbr,NULL);
+}
+
+/*A pipeline stage for copying uncoded fragments.*/
+
+static int oc_copy_pipe_start(oc_enc_pipe_stage *_stage){
+  int pli;
+  for(pli=0;pli<3;pli++){
+    _stage->y_procd[pli]=0;
+    _stage->enc->uncoded_fragii[pli]=0;
+  }
+  return _stage->next!=NULL?(*_stage->next->pipe_start)(_stage->next):0;
+}
+
+static int oc_copy_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  int        *uncoded_fragis;
+  oc_enc_ctx *enc;
+  int         pli;
+  enc=_stage->enc;
+  uncoded_fragis=enc->state.uncoded_fragis;
+  for(pli=0;pli<3;pli++){
+    int y_avail;
+    y_avail=_y_avail[pli];
+    /*Process in units of super block rows, with the possible exception of the
+       last, partial super block row.*/
+    if(y_avail<enc->state.input[pli].height)y_avail&=~31;
+    if(y_avail>_stage->y_procd[pli]){
+      if(enc->uncoded_fragii[pli]<enc->state.nuncoded_fragis[pli]){
+        oc_fragment_plane *fplane;
+        int                fragi_end;
+        int                fragii;
+        fplane=enc->state.fplanes+pli;
+        fragi_end=(y_avail>>3)*fplane->nhfrags+fplane->froffset;
+        /*Count the uncoded fragments that belong in these super block rows.*/
+        for(fragii=enc->uncoded_fragii[pli];
+         fragii<enc->state.nuncoded_fragis[pli]&&
+         *(uncoded_fragis-fragii)<fragi_end;fragii++);
+        /*And copy them.*/
+        oc_state_frag_copy(&enc->state,uncoded_fragis-fragii,
+         fragii-enc->uncoded_fragii[pli],OC_FRAME_SELF,OC_FRAME_PREV,pli);
+        enc->uncoded_fragii[pli]=fragii;
+      }
+      _stage->y_procd[pli]=y_avail;
+      if(_stage->next!=NULL){
+        int ret;
+        ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+        if(ret<0)return ret;
+      }
+    }
+    uncoded_fragis-=enc->state.nuncoded_fragis[pli];
+  }
+  return 0;
+}
+
+static int oc_copy_pipe_end(oc_enc_pipe_stage *_stage){
+  return _stage->next!=NULL?(*_stage->next->pipe_end)(_stage->next):0;
+}
+
+/*Initialize the uncoded fragment copying stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_copy_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_copy_pipe_start;
+  _stage->pipe_proc=oc_copy_pipe_process;
+  _stage->pipe_end=oc_copy_pipe_end;
+}
+
+/*A pipeline stage for applying the loop filter.*/
+
+static int oc_loop_pipe_start(oc_enc_pipe_stage *_stage){
+  oc_enc_ctx *enc;
+  int         pli;
+  enc=_stage->enc;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=0;
+  enc->loop_filter_enabled=enc->ncoded_frags>0&&
+   !oc_state_loop_filter_init(&enc->state,enc->bounding_values+256);
+  return _stage->next!=NULL?(*_stage->next->pipe_start)(_stage->next):0;
+}
+
+static int oc_loop_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  oc_enc_ctx *enc;
+  int         pli;
+  enc=_stage->enc;
+  if(enc->loop_filter_enabled){
+    int refi;
+    refi=enc->state.ref_frame_idx[OC_FRAME_SELF];
+    for(pli=0;pli<3;pli++){
+      int delay;
+      int fragy0;
+      int fragy_end;
+      fragy0=_stage->y_procd[pli]+1>>3;
+      /*Add a 2 pixel delay for the vertical filter, except in the last row.*/
+      delay=(_y_avail[pli]<enc->state.ref_frame_bufs[refi][pli].height);
+      fragy_end=_y_avail[pli]-(delay<<1)>>3;
+      if(fragy_end>fragy0){
+        oc_state_loop_filter_frag_rows(&enc->state,enc->bounding_values+256,
+         refi,pli,fragy0,fragy_end);
+        /*We also add a 1 pixel delay to the next stage, since the vertical
+           filter for the next fragment row can still change the last row of
+           pixels from this fragment row.*/
+        _stage->y_procd[pli]=(fragy_end<<3)-delay;
+        if(_stage->next!=NULL){
+          int ret;
+          ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+          if(ret<0)return ret;
+        }
+      }
+    }
+  }
+  else{
+    for(pli=0;pli<3;pli++)_stage->y_procd[pli]=_y_avail[pli];
+    if(_stage->next!=NULL){
+      return (*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+    }
+  }
+  return 0;
+}
+
+static int oc_loop_pipe_end(oc_enc_pipe_stage *_stage){
+  return _stage->next!=NULL?(*_stage->next->pipe_end)(_stage->next):0;
+}
+
+/*Initialize the loop filter stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_loop_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_loop_pipe_start;
+  _stage->pipe_proc=oc_loop_pipe_process;
+  _stage->pipe_end=oc_loop_pipe_end;
+}
+
+/*A pipeline stage for filling in the image border.*/
+
+static int oc_fill_pipe_start(oc_enc_pipe_stage *_stage){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=0;
+  return _stage->next!=NULL?(*_stage->next->pipe_start)(_stage->next):0;
+}
+
+static int oc_fill_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  int pli;
+  if(_stage->enc->ncoded_frags>0){
+    oc_theora_state *state;
+    int              refi;
+    state=&_stage->enc->state;
+    refi=state->ref_frame_idx[OC_FRAME_SELF];
+    for(pli=0;pli<3;pli++){
+      if(_stage->y_procd[pli]<_y_avail[pli]){
+        oc_state_borders_fill_rows(state,refi,pli,_stage->y_procd[pli],
+         _y_avail[pli]);
+        _stage->y_procd[pli]=_y_avail[pli];
+        if(_stage->next!=NULL){
+          int ret;
+          ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+          if(ret<0)return ret;
+        }
+      }
+    }
+  }
+  else{
+    for(pli=0;pli<3;pli++)_stage->y_procd[pli]=_y_avail[pli];
+    if(_stage->next!=NULL){
+      return (*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+    }
+  }
+  return 0;
+}
+
+static int oc_fill_pipe_end(oc_enc_pipe_stage *_stage){
+  oc_theora_state *state;
+  int              refi;
+  int              pli;
+  state=&_stage->enc->state;
+  refi=state->ref_frame_idx[OC_FRAME_SELF];
+  for(pli=0;pli<3;pli++)oc_state_borders_fill_caps(state,refi,pli);
+  return _stage->next!=NULL?(*_stage->next->pipe_end)(_stage->next):0;
+}
+
+/*Initialize the loop filter stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_fill_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_fill_pipe_start;
+  _stage->pipe_proc=oc_fill_pipe_process;
+  _stage->pipe_end=oc_fill_pipe_end;
+}
+
+/*A pipeline stage for storing the encoded frame contents in a packet.*/
+
+static int oc_pack_pipe_start(oc_enc_pipe_stage *_stage){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=0;
+  return 0;
+}
+
+static int oc_pack_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=_y_avail[pli];
+  return 0;
+}
+
+static int oc_pack_pipe_end(oc_enc_pipe_stage *_stage){
+  oc_enc_ctx *enc;
+  int         ret;
+  if(_stage->next!=NULL){
+    ret=(*_stage->next->pipe_start)(_stage->next);
+    if(ret<0)return ret;
+  }
+  enc=_stage->enc;
+  oggpackB_reset(&enc->opb);
+  /*Only proceed if we have some coded blocks.
+    No coded blocks -> dropped frame -> 0 byte packet.*/
+  if(enc->ncoded_frags>0){
+    oc_enc_frame_header_pack(enc);
+    if(enc->state.frame_type==OC_INTER_FRAME){
+      oggpackB_writecopy(&enc->opb,
+       oggpackB_get_buffer(&enc->opb_coded_flags),
+       oggpackB_bits(&enc->opb_coded_flags));
+      oc_enc_mb_modes_pack(enc);
+      oc_enc_mvs_pack(enc);
+    }
+    oc_enc_block_qis_pack(enc);
+    /*Pack the quantized DCT coefficients.*/
+    oc_enc_residual_tokens_pack(enc);
+  }
+  /*Success: Mark the packet as ready to be flushed.*/
+  enc->packet_state=OC_PACKET_READY;
+  if(_stage->next!=NULL){
+    ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+    if(ret<0)return ret;
+    return (*_stage->next->pipe_end)(_stage->next);
+  }
+  return 0;
+}
+
+/*Initialize the loop filter stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_pack_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_pack_pipe_start;
+  _stage->pipe_proc=oc_pack_pipe_process;
+  _stage->pipe_end=oc_pack_pipe_end;
+}
+
+
+static int oc_enc_init(oc_enc_ctx *_enc,const th_info *_info){
+  int ret;
+  /*Initialize the shared encoder/decoder state.*/
+  ret=oc_state_init(&_enc->state,_info);
+  if(ret<0)return ret;
+  _enc->block_coded_flags=_ogg_calloc(_enc->state.nfrags,
+   sizeof(_enc->block_coded_flags[0]));
+  /*Initialize our packet buffers.*/
+  oggpackB_writeinit(&_enc->opb);
+  oggpackB_writeinit(&_enc->opb_coded_flags);
+  /*Allocate and initialize storage for encoder-specific fragment and macro
+     block storage, as well as DCT token storage.*/
+  _enc->frinfo=_ogg_calloc(_enc->state.nfrags,
+   sizeof(_enc->frinfo[0]));
+  _enc->mbinfo=_ogg_calloc(_enc->state.nmbs,sizeof(_enc->mbinfo[0]));
+  _enc->dct_tokens=(unsigned char **)oc_malloc_2d(64,
+   _enc->state.nfrags,sizeof(_enc->dct_tokens[0][0]));
+  _enc->extra_bits=(ogg_uint16_t **)oc_malloc_2d(64,
+   _enc->state.nfrags,sizeof(_enc->extra_bits[0][0]));
+  oc_enc_init_mbinfo(_enc);
+  /*Do one-time mode scheme chooser initialization.*/
+  oc_mode_scheme_chooser_init(&_enc->mode_scheme_chooser);
+  /*Set the maximum distance between key frames.*/
+  _enc->keyframe_frequency_force=1<<_enc->state.info.keyframe_granule_shift;
+  /*Initialize the motion compensation, high-level importance map, and
+     low-level psychovisual model plug-ins.*/
+  _enc->mcenc=oc_mcenc_alloc(_enc);
+  /*Reset the packet-out state machine.*/
+  _enc->packet_state=OC_PACKET_INFO_HDR;
+  /*Mark us as not VP3-compatible.*/
+  _enc->vp3_compatible=0;
+  /*Set the Huffman codes and quantization parameters to the defaults.*/
+  memcpy(_enc->huff_codes,TH_VP31_HUFF_CODES,sizeof(_enc->huff_codes));
+  oc_enc_set_quant_params(_enc,NULL);
+  /*Initialize the static pipeline stages.*/
+  oc_fdct_pipe_init(&_enc->fdct_pipe,_enc);
+  oc_copy_pipe_init(&_enc->copy_pipe,_enc);
+  oc_loop_pipe_init(&_enc->loop_pipe,_enc);
+  _enc->copy_pipe.next=&_enc->loop_pipe;
+  oc_fill_pipe_init(&_enc->fill_pipe,_enc);
+  _enc->loop_pipe.next=&_enc->fill_pipe;
+  oc_pack_pipe_init(&_enc->pack_pipe,_enc);
+  /*Delay initialization of the encoding pipeline until the application sets
+     an encoding mode or the first frame is submitted.*/
+  _enc->pipe=NULL;
+  _enc->vbr=NULL;
+  return 0;
+}
+
+static void oc_enc_clear(oc_enc_ctx *_enc){
+  oc_enc_vbr_free(_enc->vbr);
+  oc_mcenc_free(_enc->mcenc);
+  oc_free_2d(_enc->extra_bits);
+  oc_free_2d(_enc->dct_tokens);
+  _ogg_free(_enc->mbinfo);
+  _ogg_free(_enc->frinfo);
+  oggpackB_writeclear(&_enc->opb_coded_flags);
+  oggpackB_writeclear(&_enc->opb);
+  _ogg_free(_enc->block_coded_flags);
+  oc_state_clear(&_enc->state);
+}
+
+
+
+/*A default implementation of set_speed, to use when the encoding mode is not
+   configurable.
+  It does nothing.
+  _speed: The encoding speed to use.*/
+void oc_enc_set_speed_null(oc_enc_ctx *_enc,int _speed){}
+
+/*Computes the SAD value of a fragment in the input image with respect to its
+   motion compensated predictor..
+  _frag:     The fragment to find the SAD of.
+  _dx:       The X component of the motion vector.
+  _dy:       The Y component of the motion vector.
+  _pli:      The color plane the fragment belongs to.
+  _frame:    The reference frame to predict from.*/
+int oc_enc_frag_sad(oc_enc_ctx *_enc,oc_fragment *_frag,int _dx,
+ int _dy,int _pli,int _frame){
+  int cur_ystride;
+  int ref_ystride;
+  int ref_framei;
+  int mvoffsets[2];
+  cur_ystride=_enc->state.input[_pli].ystride;
+  ref_framei=_enc->state.ref_frame_idx[_frame];
+  ref_ystride=_enc->state.ref_frame_bufs[ref_framei][_pli].ystride;
+  if(oc_state_get_mv_offsets(&_enc->state,mvoffsets,_dx,_dy,
+   ref_ystride,_pli)>1){
+    if(_frag->border==NULL){
+      return oc_sad8_halfpel(_frag->buffer[OC_FRAME_IO],cur_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[0],
+       _frag->buffer[ref_framei]+mvoffsets[1],ref_ystride);
+    }
+    else{
+      return oc_sad8_halfpel_border(_frag->buffer[OC_FRAME_IO],cur_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[0],
+       _frag->buffer[ref_framei]+mvoffsets[1],ref_ystride,_frag->border->mask);
+    }
+  }
+  else{
+    if(_frag->border==NULL){
+      return oc_sad8_fullpel(_frag->buffer[OC_FRAME_IO],cur_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[0],ref_ystride);
+    }
+    else{
+      return oc_sad8_fullpel_border(_frag->buffer[OC_FRAME_IO],
+       cur_ystride,_frag->buffer[ref_framei]+mvoffsets[0],ref_ystride,
+       _frag->border->mask);
+    }
+  }
+}
+
+/*Writes the bit flags for whether or not each super block is partially coded
+   or not.
+  These flags are run-length encoded, with the flag value alternating between
+   each run.
+  Return: The number of bits written.*/
+int oc_enc_partial_sb_flags_pack(oc_enc_ctx *_enc,oggpack_buffer *_opb){
+  oc_sb    *sb;
+  oc_sb    *sb_end;
+  unsigned  flag;
+  int       run_count;
+  int       ret;
+  /*Write the list of partially coded super block flags.*/
+  flag=_enc->state.sbs[0].coded_partially;
+  oggpackB_write(_opb,flag,1);
+  ret=1;
+  sb=_enc->state.sbs;
+  sb_end=sb+_enc->state.nsbs;
+  while(sb<sb_end){
+    for(run_count=0;sb<sb_end;sb++){
+      if(sb->coded_partially!=flag)break;
+      run_count++;
+    }
+    /*The maximum run length we can encode is 4129.
+      If we encode a run that long, we need to specify the bit value for the
+       next run instead of being able to implicitly toggle it.
+      Note that the original VP3 implementation did not consider this case,
+       and would not write the extra bit for runs of 4129, and would write an
+       invalid code for longer runs.*/
+    /*First, encode runs until we have 4129 or fewer sbs left.*/
+    while(run_count>4129){
+      ret+=oc_sb_run_pack(_opb,4129);
+      run_count-=4129;
+      oggpackB_write(_opb,flag,1);
+      ret++;
+    }
+    /*Encode the last run.*/
+    ret+=oc_sb_run_pack(_opb,run_count);
+    flag=!flag;
+    /*If there are more sbs to come, and we had a run of 4129 exactly,
+       encode the flipped bit.*/
+    if(run_count==4129&&sb<sb_end){
+      oggpackB_write(_opb,flag,1);
+      ret++;
+    }
+  }
+  return ret;
+}
+
+/*Writes the coded/not coded flags for each super block that is not partially
+   coded.
+  These flags are run-length encoded, with the flag value altenating between
+   each run.
+  Return: The number of bits written.*/
+int oc_enc_coded_sb_flags_pack(oc_enc_ctx *_enc,oggpack_buffer *_opb){
+  oc_sb    *sb;
+  oc_sb    *sb_end;
+  unsigned  flag;
+  int       run_count;
+  int       ret;
+  /*Write the list of coded/not coded super block flags.*/
+  /*Skip partially coded super blocks: their flags have already been coded.*/
+  sb=_enc->state.sbs;
+  sb_end=sb+_enc->state.nsbs;
+  for(;;sb++){
+    if(sb>=sb_end)return 0;
+    if(!sb->coded_partially)break;
+  }
+  flag=sb->coded_fully;
+  oggpackB_write(_opb,flag,1);
+  ret=1;
+  while(sb<sb_end){
+    for(run_count=0;sb<sb_end;sb++){
+      if(sb->coded_partially)continue;
+      if(sb->coded_fully!=flag)break;
+      run_count++;
+    }
+    /*The maximum run length we can encode is 4129.
+      If we encode a run that long, we need to specify the bit value for the
+       next run instead of being able to implicitly toggle it.
+      Note that the original VP3 implementation did not consider this case,
+       and would not write the extra bit for runs of 4129, and would write an
+       invalid code for longer runs.*/
+    /*First, encode runs until we have 4129 or fewer sbs left.*/
+    while(run_count>4129){
+      ret+=oc_sb_run_pack(_opb,4129);
+      run_count-=4129;
+      oggpackB_write(_opb,flag,1);
+      ret++;
+    }
+    /*Encode the last run.*/
+    ret+=oc_sb_run_pack(_opb,run_count);
+    flag=!flag;
+    if(run_count==4129&&sb<sb_end){
+      oggpackB_write(_opb,flag,1);
+      ret++;
+    }
+  }
+  return ret;
+}
+
+/*Writes the coded/not coded flags for each block belonging to a partially
+   coded super block.
+  These flags are run-length encoded, with the flag value alternating between
+   each run.
+  Return: The number of bits written.*/
+int oc_enc_coded_block_flags_pack(oc_enc_ctx *_enc,oggpack_buffer *_opb){
+  int flag;
+  int run_count;
+  int bli;
+  int ret;
+  if(_enc->nblock_coded_flags<=0)return 0;
+  flag=_enc->block_coded_flags[0];
+  oggpackB_write(_opb,flag,1);
+  ret=1;
+  for(bli=0;bli<_enc->nblock_coded_flags;){
+    for(run_count=0;bli<_enc->nblock_coded_flags;bli++){
+      if(_enc->block_coded_flags[bli]!=flag)break;
+      run_count++;
+    }
+    /*Since each super block must have a mix of coded and not coded blocks to
+       get on this list, we are guaranteed a maximum run size of 30 (16 blocks
+       per super block, with flags (1000 0000 0000 0000, 0000 0000 0000 0001)
+       or its complement).
+      This avoids the nastiness of the VLC not letting us encode runs long
+       enough like above.*/
+    ret+=oc_block_run_pack(_opb,run_count);
+    flag=!flag;
+  }
+  return ret;
+}
+
+/*Performs a motion-compensated fDCT for each fragment coded in a mode other
+   than INTRA.*/
+void oc_enc_do_inter_dcts(oc_enc_ctx *_enc){
+  int *coded_fragi;
+  int *coded_fragi_end;
+  int  pli;
+  coded_fragi_end=coded_fragi=_enc->state.coded_fragis;
+  for(pli=0;pli<3;pli++){
+    coded_fragi_end+=_enc->state.ncoded_fragis[pli];
+    for(;coded_fragi<coded_fragi_end;coded_fragi++){
+      oc_fragment *frag;
+      frag=_enc->state.frags+*coded_fragi;
+      if(frag->mbmode!=OC_MODE_INTRA){
+        oc_fragment_enc_info *efrag;
+        efrag=_enc->frinfo+(frag-_enc->state.frags);
+        oc_enc_frag_inter_fdct(_enc,frag,efrag->dct_coeffs,pli);
+      }
+    }
+  }
+}
+
+
+th_enc_ctx *th_encode_alloc(const th_info *_info){
+  oc_enc_ctx *enc;
+  if(_info==NULL)return NULL;
+  enc=_ogg_malloc(sizeof(*enc));
+  if(oc_enc_init(enc,_info)<0){
+    _ogg_free(enc);
+    return NULL;
+  }
+  return enc;
+}
+
+void th_encode_free(th_enc_ctx *_enc){
+  if(_enc!=NULL){
+    oc_enc_clear(_enc);
+    _ogg_free(_enc);
+  }
+}
+
+
+
+int th_encode_ctl(th_enc_ctx *_enc,int _req,void *_buf,size_t _buf_sz){
+  switch(_req){
+    case TH_ENCCTL_SET_HUFFMAN_CODES:{
+      if(_buf==NULL&&_buf_sz!=0||_buf!=NULL&&
+       _buf_sz!=sizeof(th_huff_code)*TH_NHUFFMAN_TABLES*TH_NDCT_TOKENS){
+        return TH_EINVAL;
+      }
+      return oc_enc_set_huffman_codes(_enc,(const th_huff_table *)_buf);
+    }break;
+    case TH_ENCCTL_SET_QUANT_PARAMS:{
+      if(_buf==NULL&&_buf_sz!=0||
+       _buf!=NULL&&_buf_sz!=sizeof(th_quant_info)){
+        return TH_EINVAL;
+      }
+      return oc_enc_set_quant_params(_enc,(th_quant_info *)_buf);
+    }break;
+    case TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE:{
+      ogg_uint32_t keyframe_frequency_force;
+      if(_enc==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(ogg_uint32_t))return TH_EINVAL;
+      keyframe_frequency_force=*(ogg_uint32_t *)_buf;
+      if(_enc->packet_state==OC_PACKET_INFO_HDR){
+        /*It's still early enough to enlarge keyframe_granule_shift.*/
+        _enc->state.info.keyframe_granule_shift=
+         OC_MAXI(_enc->state.info.keyframe_granule_shift,
+         OC_MINI(31,oc_ilog(keyframe_frequency_force-1)));
+      }
+      _enc->keyframe_frequency_force=OC_MINI(keyframe_frequency_force,
+       1U<<_enc->state.info.keyframe_granule_shift);
+      *(ogg_uint32_t *)_buf=_enc->keyframe_frequency_force;
+      return 0;
+    }break;
+    case TH_ENCCTL_SET_VP3_COMPATIBLE:{
+      int vp3_compatible;
+      int ret;
+      if(_enc==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(int))return TH_EINVAL;
+      vp3_compatible=*(int *)_buf;
+      _enc->vp3_compatible=vp3_compatible;
+      ret=oc_enc_set_huffman_codes(_enc,TH_VP31_HUFF_CODES);
+      if(ret<0)vp3_compatible=0;
+      ret=oc_enc_set_quant_params(_enc,&TH_VP31_QUANT_INFO);
+      if(ret<0)vp3_compatible=0;
+      if(_enc->state.info.pixel_fmt!=TH_PF_420||
+       _enc->state.info.pic_width<_enc->state.info.frame_width||
+       _enc->state.info.pic_height<_enc->state.info.frame_height||
+      /*If we have more than 4095 super blocks, VP3's RLE coding might
+         overflow.
+        We could overcome this by ensuring we flip the coded/not-coded flags on
+         at least one super block in the frame, but we pick the simple solution
+         of just marking the stream incompatible instead.
+        It's unlikely the old VP3 codec would be able to decode streams at this
+         resolution in real time in the first place.*/
+       _enc->state.nsbs>4095){
+        vp3_compatible=0;
+      }
+      *(int *)_buf=vp3_compatible;
+      return 0;
+    }break;
+    case TH_ENCCTL_GET_SPLEVEL_MAX:{
+      if(_enc==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(int))return TH_EINVAL;
+      /*We can only manipulate speed in the context of a given encoding mode.
+        Ensure one is selected if the user has not already done so.*/
+      if(_enc->set_speed==NULL)oc_enc_enable_default_mode(_enc);
+      *(int *)_buf=_enc->speed_max;
+      return 0;
+    }break;
+    case TH_ENCCTL_SET_SPLEVEL:{
+      int speed;
+      if(_enc==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(int))return TH_EINVAL;
+      speed=*(int *)_buf;
+      /*We can only manipulate speed in the context of a given encoding mode.
+        Ensure one is selected if the user has not already done so.*/
+      if(_enc->set_speed==NULL)oc_enc_enable_default_mode(_enc);
+      if(speed<0||speed>_enc->speed_max)return TH_EINVAL;
+      (*_enc->set_speed)(_enc,speed);
+      return 0;
+    }break;
+    case TH_ENCCTL_SETUP_VBR:{
+      if(_enc==NULL)return TH_EFAULT;
+      if(_buf==NULL&&_buf_sz!=0||_buf!=NULL&&_buf_sz!=sizeof(th_vbr_cfg)){
+        return TH_EINVAL;
+      }
+      if(_enc->vbr==NULL)_enc->vbr=oc_enc_vbr_alloc(_enc);
+      return oc_enc_vbr_enable(_enc->vbr,(th_vbr_cfg *)_buf);
+    }break;
+    default:return TH_EIMPL;
+  }
+}
+
+int th_encode_flushheader(th_enc_ctx *_enc,th_comment *_tc,ogg_packet *_op){
+  if(_enc==NULL)return TH_EFAULT;
+  return oc_state_flushheader(&_enc->state,&_enc->packet_state,&_enc->opb,
+   &_enc->qinfo,(const th_huff_table *)_enc->huff_codes,th_version_string(),
+   _tc,_op);
+}
+
+int th_encode_ycbcr_in(th_enc_ctx *_enc,th_ycbcr_buffer _img){
+  th_ycbcr_buffer img;
+  int             y_avail[3];
+  int             cwidth;
+  int             cheight;
+  int             ret;
+  int             rfi;
+  int             pli;
+  /*Step 1: validate parameters.*/
+  if(_enc==NULL||_img==NULL)return TH_EFAULT;
+  if(_enc->packet_state==OC_PACKET_DONE)return TH_EINVAL;
+  if(_img[0].width!=(int)_enc->state.info.frame_width||
+   _img[0].height!=(int)_enc->state.info.frame_height){
+    return TH_EINVAL;
+  }
+  cwidth=_enc->state.info.frame_width>>!(_enc->state.info.pixel_fmt&1);
+  cheight=_enc->state.info.frame_height>>!(_enc->state.info.pixel_fmt&2);
+  if(_img[1].width!=cwidth||_img[2].width!=cwidth||
+   _img[1].height!=cheight||_img[2].height!=cheight){
+    return TH_EINVAL;
+  }
+  /*Flip the input buffer upside down.*/
+  oc_ycbcr_buffer_flip(img,_img);
+  /*Step 2: Update buffer state.*/
+  if(_enc->state.ref_frame_idx[OC_FRAME_SELF]>=0){
+    _enc->state.ref_frame_idx[OC_FRAME_PREV]=
+     _enc->state.ref_frame_idx[OC_FRAME_SELF];
+    if(_enc->state.frame_type==OC_INTRA_FRAME){
+      /*The new frame becomes both the previous and gold reference frames.*/
+      _enc->state.keyframe_num=_enc->state.curframe_num;
+      _enc->state.ref_frame_idx[OC_FRAME_GOLD]=
+       _enc->state.ref_frame_idx[OC_FRAME_SELF];
+    }
+  }
+  /*If no encoding mode has been explicitly enabled by the application,
+     enable the default encoding mode with a default configuration.*/
+  else if(_enc->pipe==NULL)oc_enc_enable_default_mode(_enc);
+  /*Select a free buffer to use for the reconstructed version of this frame.*/
+  for(rfi=0;rfi==_enc->state.ref_frame_idx[OC_FRAME_GOLD]||
+   rfi==_enc->state.ref_frame_idx[OC_FRAME_PREV];rfi++);
+  _enc->state.ref_frame_idx[OC_FRAME_SELF]=rfi;
+  _enc->state.curframe_num++;
+  /*Fill the fragment array with pointers into the user buffer.*/
+  oc_state_fill_buffer_ptrs(&_enc->state,OC_FRAME_IO,img);
+  /*Reset the encoding pipeline.*/
+  ret=(*_enc->pipe->pipe_start)(_enc->pipe);
+  if(ret<0)return ret;
+  /*Push the image into the pipeline.*/
+  for(pli=0;pli<3;pli++)y_avail[pli]=_img[pli].height;
+  ret=(*_enc->pipe->pipe_proc)(_enc->pipe,y_avail);
+  if(ret<0)return ret;
+  /*Flush the results through.*/
+  ret=(*_enc->pipe->pipe_end)(_enc->pipe);
+  if(ret<0)return ret;
+  /*Note: All buffer management, etc., that is done after a frame is encoded
+     is delayed until the next frame is encoded.
+    This allows for a future API that would let an encoding application
+     examine the decompressed output and attempt to re-encode the same frame
+     again with different settings if it disapproved.
+    Here we just update the granpos needed for the output packet and return.*/
+  if(_enc->state.frame_type==OC_INTRA_FRAME){
+    _enc->state.granpos=
+     _enc->state.curframe_num<<_enc->state.info.keyframe_granule_shift;
+  }
+  else{
+    _enc->state.granpos=
+     (_enc->state.keyframe_num<<_enc->state.info.keyframe_granule_shift)+
+     (_enc->state.curframe_num-_enc->state.keyframe_num);
+  }
+#if defined(OC_DUMP_IMAGES)
+  /*This is done after the granpos update, because that's what it uses to name
+     the output file.*/
+  oc_state_dump_frame(&_enc->state,OC_FRAME_SELF,"rec");
+#endif
+  return 0;
+}
+
+int th_encode_packetout(th_enc_ctx *_enc,int _last,ogg_packet *_op){
+  if(_enc==NULL||_op==NULL)return TH_EFAULT;
+  if(_enc->packet_state!=OC_PACKET_READY)return 0;
+  _op->packet=oggpackB_get_buffer(&_enc->opb);
+  _op->bytes=oggpackB_bytes(&_enc->opb);
+  _op->b_o_s=0;
+  _op->e_o_s=_last;
+  _op->packetno=_enc->state.curframe_num;
+  _op->granulepos=_enc->state.granpos;
+  if(_last)_enc->packet_state=OC_PACKET_DONE;
+  else _enc->packet_state=OC_PACKET_EMPTY;
+  return 1;
+}

Added: trunk/theora-exp/lib/encvbr.c
===================================================================
--- trunk/theora-exp/lib/encvbr.c	                        (rev 0)
+++ trunk/theora-exp/lib/encvbr.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,1409 @@
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <ogg/ogg.h>
+#include "encvbr.h"
+#include "fdct.h"
+
+
+
+/*Returns the number of bits used by the given motion vector with the VLC
+   motion vector codes (as opposed to the CLC codes, which always use 12 bits).
+  _dx: The X component of the vector, in half-pel units.
+  _dy: The Y component of the vector, in half-pel units.
+  Return: The number of bits required to store the vector with the VLC codes.*/
+static int oc_mvbitsa(int _dx,int _dy){
+  return OC_MV_CODES[0][_dx+31].nbits+OC_MV_CODES[0][_dy+31].nbits;
+}
+
+
+
+/*Select the set of quantizers to use for the current frame for each possible
+   frame type (intra or inter).
+  This does not assign a quantizer to each fragment, as that depends on the
+   quantizer type used and thus is done during mode decision.*/
+static void oc_enc_vbr_quant_sel_quality(oc_enc_ctx *_enc,int _intra_only){
+  unsigned              qmax[2][3];
+  int                   qi_min[2];
+  int                   qi_max[2];
+  int                   fti;
+  int                   qti;
+  int                   pli;
+  int                   dc_qi[2];
+  qi_min[0]=_enc->vbr->cfg.kf_qi_min;
+  qi_min[1]=_enc->vbr->cfg.df_qi_min;
+  qi_max[0]=_enc->vbr->cfg.kf_qi_max;
+  qi_max[1]=_enc->vbr->cfg.df_qi_max;
+  /*The first quantizer value is used for DC coefficients.
+    Select one that allows us to meet our quality requirements.*/
+  for(qti=0;qti<1+!_intra_only;qti++)for(pli=0;pli<3;pli++){
+    qmax[qti][pli]=OC_MAXI(2U*_enc->vbr->dc_tol_mins[pli],
+     OC_DC_QUANT_MIN[qti]);
+  }
+  /*For intra frames...(containing just INTRA fragments)*/
+  for(dc_qi[0]=qi_min[0];dc_qi[0]<qi_max[0];dc_qi[0]++){
+    if(_enc->state.dequant_tables[0][0][dc_qi[0]][0]<=qmax[0][0]&&
+     _enc->state.dequant_tables[0][1][dc_qi[0]][0]<=qmax[0][1]&&
+     _enc->state.dequant_tables[0][2][dc_qi[0]][0]<=qmax[0][2]){
+      break;
+    }
+  }
+  /*For inter frames...(containing both INTER and INTRA fragments)*/
+  if(!_intra_only){
+    for(dc_qi[1]=OC_CLAMPI(qi_min[1],dc_qi[0],qi_max[1]);dc_qi[1]<qi_max[1];
+     dc_qi[1]++){
+      if(_enc->state.dequant_tables[1][0][dc_qi[1]][0]<=qmax[1][0]&&
+       _enc->state.dequant_tables[1][1][dc_qi[1]][0]<=qmax[1][1]&&
+       _enc->state.dequant_tables[1][2][dc_qi[1]][0]<=qmax[1][2]){
+        break;
+      }
+    }
+  }
+  /*Now we select a full qi list for each frame type.*/
+  for(fti=0;fti<1+!_intra_only;fti++){
+    oc_fragment_enc_info *efrag;
+    int                   ncoded_fragis;
+    int                   nqis[64];
+    int                   qi;
+    int                   qi0;
+    int                   qi1;
+    int                   qi2;
+    /*Here we count up the number of fragments that can use each qi value.
+      Unless we know this is an intra frame, we don't know what quantizer type
+       will be used for each fragment, so we just count both of them.*/
+    memset(nqis,0,sizeof(nqis));
+    if(fti){
+      int *coded_fragi;
+      int *coded_fragi_end;
+      coded_fragi=_enc->state.coded_fragis;
+      ncoded_fragis=_enc->state.ncoded_fragis[0]+
+       _enc->state.ncoded_fragis[1]+_enc->state.ncoded_fragis[2];
+      coded_fragi_end=coded_fragi+ncoded_fragis;
+      for(;coded_fragi<coded_fragi_end;coded_fragi++){
+        efrag=_enc->frinfo+*coded_fragi;
+        for(qti=0;qti<2;qti++)nqis[efrag->qi_min[qti]]++;
+      }
+    }
+    else{
+      oc_fragment_enc_info *efrag_end;
+      ncoded_fragis=_enc->state.nfrags;
+      efrag=_enc->frinfo;
+      efrag_end=efrag+ncoded_fragis;
+      for(;efrag<efrag_end;efrag++)nqis[efrag->qi_min[0]]++;
+    }
+    /*We'll now choose the qi values that divide the fragments into equally
+       sized groups, or as close as we can make it.
+      We account for the DC coefficients by adding an extra amount to the qi
+       value they require.
+      Since there are usually many more DC coefficients coded than any one AC
+       coefficient, we use 1/8 of the number of fragments, instead of 1/64.*/
+    nqis[dc_qi[fti]]+=(ncoded_fragis<<fti)+7>>3;
+    /*Convert this into a moment table.*/
+    for(qi=63;qi-->0;)nqis[qi]+=nqis[qi+1];
+    /*If we have a lower limit on the QI range, promote and fragments with a
+       smaller QI, to ensure they're counted.*/
+    if(qi_min[fti]>0)nqis[qi_min[fti]]=nqis[0];
+    /*Select our first quantizer.*/
+    for(qi0=qi_max[fti]+1;qi0-->qi_min[fti]&&nqis[qi0]<=0;);
+    for(qi1=qi0-1;qi1>=qi_min[fti]&&nqis[qi1]<=nqis[qi0];qi1--);
+    /*Test to make sure there are even two unique quantizers.*/
+    if(qi1>=qi_min[fti]){
+      ogg_int64_t best_metric;
+      ogg_int64_t metric;
+      int         best_qi1;
+      int         best_qi2;
+      int         qii;
+      for(qi2=qi1-1;qi2>=qi_min[fti]&&nqis[qi2]<=nqis[qi1];qi2--);
+      /*Test to make sure there are three unique quantizers.*/
+      if(qi2>=0){
+        best_metric=(ogg_int64_t)(nqis[0]-nqis[qi2+1])*
+         (nqis[qi2+1]-nqis[qi1+1])*nqis[qi1+1];
+        best_qi1=qi1;
+        best_qi2=qi2;
+        for(;nqis[qi1]<nqis[1];qi1--){
+          for(qi2=qi1-1;nqis[qi2]<nqis[0];qi2--){
+            metric=(ogg_int64_t)(nqis[0]-nqis[qi2+1])*
+             (nqis[qi2+1]-nqis[qi1+1])*nqis[qi1+1];
+            if(metric>=best_metric){
+              best_qi1=qi1;
+              best_qi2=qi2;
+              best_metric=metric;
+            }
+          }
+        }
+        _enc->qis[fti][0]=qi0;
+        _enc->qis[fti][1]=best_qi1;
+        _enc->qis[fti][2]=best_qi2;
+        _enc->nqis[fti]=3;
+      }
+      else{
+        best_metric=(ogg_int64_t)(nqis[0]-nqis[qi1+1])*nqis[qi1+1];
+        best_qi1=qi1;
+        if(qi1>0)for(qi1--;nqis[qi1]<nqis[0];qi1--){
+          metric=(ogg_int64_t)(nqis[0]-nqis[qi1+1])*nqis[qi1+1];
+          if(metric>best_metric){
+            best_qi1=qi1;
+            best_metric=metric;
+          }
+        }
+        _enc->qis[fti][0]=qi0;
+        _enc->qis[fti][1]=best_qi1;
+        _enc->nqis[fti]=2;
+      }
+      /*Right now qis[0] is the largest.
+        We want to use the smallest that is still large enough for our DC
+         coefficients.*/
+      for(qii=1;qii<_enc->nqis[fti];qii++)if(_enc->qis[fti][qii]>=dc_qi[fti]){
+        qi0=_enc->qis[fti][0];
+        _enc->qis[fti][0]=_enc->qis[fti][qii];
+        _enc->qis[fti][qii]=qi0;
+      }
+    }
+    else{
+      _enc->qis[fti][0]=qi0;
+      _enc->nqis[fti]=1;
+    }
+    /*If we're in VP3 compatibility mode, just use the first quantizer.*/
+    if(_enc->vp3_compatible)_enc->nqis[fti]=1;
+  }
+}
+
+/*Mark all fragments as coded and in OC_MODE_INTRA.
+  This also selects a quantizer value for each fragment and builds up the
+   coded fragment list (in coded order) and clears the uncoded fragment list.
+  It does not update the coded macro block list, as that is not used when
+   coding INTRA frames.*/
+static void oc_enc_vbr_mark_all_intra(oc_enc_ctx *_enc){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  int    pli;
+  int    qii;
+  int    ncoded_fragis;
+  int    prev_ncoded_fragis;
+  /*Select the quantizer list for INTRA frames.*/
+  _enc->state.nqis=_enc->nqis[OC_INTRA_FRAME];
+  for(qii=0;qii<_enc->state.nqis;qii++){
+    _enc->state.qis[qii]=_enc->qis[OC_INTRA_FRAME][qii];
+  }
+  prev_ncoded_fragis=ncoded_fragis=0;
+  sb=sb_end=_enc->state.sbs;
+  for(pli=0;pli<3;pli++){
+    const oc_fragment_plane *fplane;
+    fplane=_enc->state.fplanes+pli;
+    sb_end+=fplane->nsbs;
+    for(;sb<sb_end;sb++){
+      int quadi;
+      for(quadi=0;quadi<4;quadi++)if(sb->quad_valid&1<<quadi){
+        int bi;
+        for(bi=0;bi<4;bi++)if(sb->map[quadi][bi]>=0){
+          oc_fragment_enc_info *efrag;
+          oc_fragment          *frag;
+          int                   fragi;
+          int                   best_qii;
+          fragi=sb->map[quadi][bi];
+          frag=_enc->state.frags+fragi;
+          frag->coded=1;
+          frag->mbmode=OC_MODE_INTRA;
+          efrag=_enc->frinfo+fragi;
+          best_qii=0;
+          for(qii=1;qii<_enc->state.nqis;qii++){
+            if(efrag->qi_min[0]<=_enc->state.qis[qii]&&
+             (_enc->state.qis[best_qii]<efrag->qi_min[0]||
+             _enc->state.qis[qii]<_enc->state.qis[best_qii])){
+              best_qii=qii;
+            }
+          }
+          efrag->qii=(unsigned char)best_qii;
+          frag->qi=_enc->state.qis[best_qii];
+          _enc->state.coded_fragis[ncoded_fragis++]=fragi;
+#if defined(OC_BITRATE_STATS)
+          /*Compute the error function used for intra mode fragments.
+            This function can only use information known at mode decision time, and
+             so excludes the DC component.
+            TODO: Separate this out somewhere more useful.*/
+          {
+            oc_fragment_enc_info *efrag;
+            int                   ci;
+            int                   eerror;
+            efrag=_enc->frinfo+fragi;
+            eerror=0;
+            for(ci=1;ci<64;ci++)eerror+=abs(efrag->dct_coeffs[ci]);
+            efrag->eerror=eerror;
+          }
+#endif
+        }
+      }
+    }
+    _enc->state.ncoded_fragis[pli]=ncoded_fragis-prev_ncoded_fragis;
+    prev_ncoded_fragis=ncoded_fragis;
+    _enc->state.nuncoded_fragis[pli]=0;
+  }
+  _enc->ncoded_frags=ncoded_fragis;
+}
+
+
+
+/*Quantize and predict the DC coefficients.
+  This is done in a separate step because the prediction of DC coefficients
+   occurs in image order, not in the Hilbert-curve order, unlike the rest of
+   the encoding process.*/
+static void oc_enc_vbr_quant_dc(oc_enc_ctx *_enc){
+  oc_fragment_enc_info *efrag;
+  oc_fragment          *frag;
+  int                   pli;
+  frag=_enc->state.frags;
+  efrag=_enc->frinfo;
+  for(pli=0;pli<3;pli++){
+    oc_fragment_plane *fplane;
+    unsigned           fquant;
+    unsigned           iquant;
+    int                pred_last[3];
+    int                fragx;
+    int                fragy;
+    pred_last[OC_FRAME_GOLD]=0;
+    pred_last[OC_FRAME_PREV]=0;
+    pred_last[OC_FRAME_SELF]=0;
+    fplane=_enc->state.fplanes+pli;
+    for(fragy=0;fragy<fplane->nvfrags;fragy++){
+      for(fragx=0;fragx<fplane->nhfrags;fragx++,frag++,efrag++){
+        int qc_pred;
+        int qc;
+        if(!frag->coded)continue;
+        qc_pred=oc_frag_pred_dc(frag,fplane,fragx,fragy,pred_last);
+        /*Fragments outside the displayable region must still be coded in key
+           frames.
+          To minimize wasted bits, just use the predicted DC value.
+          TODO: We might do a better job in the lower-left hand corner by
+           propagating over the DC value of the first actually coded fragment,
+           but for the moment this is not done.*/
+        if(frag->invalid)qc=0;
+        else{
+          int c;
+          int c_abs;
+          int qti;
+          /*We now center the DC coefficient range around the predicted value
+             and perform token bits optimization based on the HVS-determined
+             tolerance range.
+            For more details, see oc_enc_vbr_frag_quant_tokenize().*/
+          qti=frag->mbmode!=OC_MODE_INTRA;
+          iquant=_enc->state.dequant_tables[qti][pli][_enc->state.qis[0]][0];
+          c=efrag->dct_coeffs[0]-qc_pred*iquant;
+          c_abs=abs(c);
+          if(c_abs<=efrag->tols[0])qc=0;
+          else{
+            int qc_signed[2];
+            int qc_max;
+            int qc_min;
+            int qc_offs;
+            int c_sign;
+            int c_min;
+            int c_recon;
+            int cati;
+            fquant=_enc->enquant_tables[qti][pli][_enc->state.qis[0]][0];
+            qc_max=(ogg_int32_t)c_abs*fquant+OC_FQUANT_ROUND>>OC_FQUANT_SHIFT;
+            c_sign=c<0;
+            c_recon=(qc_max-1)*iquant;
+            c_min=OC_MAXI(0,c_abs-efrag->tols[0]);
+            for(qc_min=qc_max;c_recon>=c_min;qc_min--)c_recon-=iquant;
+            if(qc_min<3+OC_NDCT_VAL_CAT2_SIZE)qc=qc_min;
+            else{
+              qc_offs=3+OC_NDCT_VAL_CAT2_SIZE;
+              for(cati=0;cati<5&&qc_min>=qc_offs+OC_DCT_VAL_CAT_SIZES[cati];
+               cati++){
+                qc_offs+=OC_DCT_VAL_CAT_SIZES[cati];
+              }
+              qc=OC_MINI(qc_offs+OC_DCT_VAL_CAT_SIZES[cati]-1,qc_max);
+            }
+            qc_signed[0]=qc;
+            qc_signed[1]=-qc;
+            qc=qc_signed[c_sign];
+          }
+        }
+        pred_last[OC_FRAME_FOR_MODE[frag->mbmode]]=frag->dc=qc+qc_pred;
+        efrag->dct_coeffs[0]=(ogg_int16_t)qc;
+      }
+    }
+  }
+}
+
+/*Quantize and tokenize the given fragment.
+  _efrag:   The encoder information for the fragment to quantize.
+  _qcoeffs: The quantized coefficients, in zig-zag order.
+  _fquant:  The forward quantization matrix to use.
+  _iquant:  The inverse quantization matrix to use.
+  Return: The number of coefficients before any final zero run.*/
+static int oc_enc_vbr_frag_quant_tokenize(oc_enc_ctx *_enc,
+ oc_fragment_enc_info *_efrag,ogg_int16_t _qcoeffs[64],
+ const ogg_uint16_t _fquant[64],const ogg_uint16_t _iquant[64]){
+  int zzi;
+  int zrun;
+  int qc;
+  int qc_offs;
+  int c_sign;
+  int cati;
+  int tli;
+  /*The DC coefficient is already quantized (it had to be for DC prediction).
+    Here we just tokenize it.*/
+  if(_efrag->dct_coeffs[0]){
+    qc=abs(_efrag->dct_coeffs[0]);
+    c_sign=_efrag->dct_coeffs[0]<0;
+    switch(qc){
+      case 1:{
+        _enc->dct_tokens[0][_enc->ndct_tokens[0]++]=
+         (unsigned char)(OC_ONE_TOKEN+c_sign);
+      }break;
+      case 2:{
+        _enc->dct_tokens[0][_enc->ndct_tokens[0]++]=
+         (unsigned char)(OC_TWO_TOKEN+c_sign);
+      }break;
+      default:{
+        if(qc-3<OC_NDCT_VAL_CAT2_SIZE){
+          _enc->dct_tokens[0][_enc->ndct_tokens[0]++]=
+           (unsigned char)(OC_DCT_VAL_CAT2+qc-3);
+          _enc->extra_bits[0][_enc->nextra_bits[0]++]=(ogg_uint16_t)c_sign;
+        }
+        else{
+          qc_offs=3+OC_NDCT_VAL_CAT2_SIZE;
+          for(cati=0;qc>=qc_offs+OC_DCT_VAL_CAT_SIZES[cati];cati++){
+            qc_offs+=OC_DCT_VAL_CAT_SIZES[cati];
+          }
+          _enc->dct_tokens[0][_enc->ndct_tokens[0]++]=
+           (unsigned char)(OC_DCT_VAL_CAT3+cati);
+          _enc->extra_bits[0][_enc->nextra_bits[0]++]=
+           (ogg_uint16_t)((c_sign<<OC_DCT_VAL_CAT_SHIFTS[cati])+qc-qc_offs);
+        }
+      }
+    }
+    zrun=0;
+  }
+  else zrun=1;
+  /*Now we quantize and tokenize each AC coefficient.*/
+  for(zzi=1;zzi<64;zzi++){
+    int qc_signed[2];
+    int qc_max;
+    int qc_min;
+    int c_sign;
+    int c_abs;
+    int c_min;
+    int c_recon;
+    int ci;
+    ci=OC_FZIG_ZAG[zzi];
+    c_abs=abs(_efrag->dct_coeffs[ci]);
+    /*Best case: we can encode this as a zero.*/
+    if(c_abs<=_efrag->tols[ci]){
+      zrun++;
+      _qcoeffs[zzi]=0;
+    }
+    else{
+      c_sign=_efrag->dct_coeffs[ci]<0;
+      /*qc_max is the most accurate quantized value.
+        This is the largest possible (absolute) value we will use.*/
+      qc_max=(ogg_int32_t)c_abs*_fquant[ci]+OC_FQUANT_ROUND>>OC_FQUANT_SHIFT;
+      /*qc_min is the smallest possible (by absolute value) quantized value
+         whose dequantized value is within the HVS-determined tolerance
+         range.*/
+      /*TODO: qc_min could be computed by a division (we do not want to allow
+         the rounding errors that are possible with the mul+shift quantization
+         used for qc_max), which would allow qc_max to be calculated only if
+         needed below.
+        Is this faster?
+        Who knows.*/
+      c_recon=(qc_max-1)*_iquant[ci];
+      c_min=c_abs-_efrag->tols[ci];
+      for(qc_min=qc_max;c_recon>=c_min;qc_min--)c_recon-=_iquant[ci];
+      /*We now proceed to find a token that is as close to qc_max as possible,
+         but does not use any more bits than would be required for qc_min.
+        The general assumption we make is that encoding a value closer to 0
+         always uses fewer bits.
+        qc_min can still reach 0 here despite the test above, if the quantizer
+         value is larger than the tolerance (which can happen for very small
+         tolerances; the quantizer value has a minimum it cannot go below).*/
+      if(qc_min==0){
+        zrun++;
+        _qcoeffs[zzi]=0;
+      }
+      else{
+        /*If we have an outstanding zero run, code it now.*/
+        if(zrun>0){
+          /*The zero run tokens appear on the list for the first zero in the
+             run.*/
+          tli=zzi-zrun;
+          /*Second assumption: coding a combined run/value token always uses
+             fewer bits than coding them separately.*/
+          /*CAT1 run/value tokens: the value is 1.*/
+          if(qc_min==1&&zrun<=17){
+            if(zrun<=5){
+              _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=
+               (unsigned char)(OC_DCT_RUN_CAT1A+(zrun-1));
+              _enc->extra_bits[tli][_enc->nextra_bits[tli]++]=
+               (ogg_uint16_t)c_sign;
+            }
+            else if(zrun<=9){
+              _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=
+               OC_DCT_RUN_CAT1B;
+              _enc->extra_bits[tli][_enc->nextra_bits[tli]++]=
+               (ogg_uint16_t)((c_sign<<2)+zrun-6);
+            }
+            else{
+              _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=
+               OC_DCT_RUN_CAT1C;
+              _enc->extra_bits[tli][_enc->nextra_bits[tli]++]=
+               (ogg_uint16_t)((c_sign<<3)+zrun-10);
+            }
+            qc_signed[0]=1;
+            qc_signed[1]=-1;
+            _qcoeffs[zzi]=(ogg_int16_t)qc_signed[c_sign];
+            zrun=0;
+            /*Skip coding the DCT value below.*/
+            continue;
+          }
+          /*CAT2 run/value tokens: the value is 2-3.*/
+          else if(qc_min<=3&&zrun<=3){
+            if(zrun==1){
+              _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=
+               OC_DCT_RUN_CAT2A;
+              qc=OC_MINI(3,qc_max);
+              _enc->extra_bits[tli][_enc->nextra_bits[tli]++]=
+               (ogg_uint16_t)((c_sign<<1)+qc-2);
+            }
+            else{
+              _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=
+               OC_DCT_RUN_CAT2B;
+              qc=OC_MINI(3,qc_max);
+              _enc->extra_bits[tli][_enc->nextra_bits[tli]++]=
+               (ogg_uint16_t)((c_sign<<2)+(qc-2<<1)+zrun-2);
+            }
+            qc_signed[0]=qc;
+            qc_signed[1]=-qc;
+            _qcoeffs[zzi]=(ogg_int16_t)qc_signed[c_sign];
+            zrun=0;
+            /*Skip coding the DCT value below.*/
+            continue;
+          }
+          /*The run is too long or the quantized value too large: code them
+             separately.*/
+          else{
+            /*This is stupid: non-short ZRL tokens are never used for run
+               values less than 9, but codewords are reserved for them,
+               wasting bits.
+              Yes, yes, this would've meant a non-constant number of extra
+               bits for this token, but even so.*/
+            if(zrun<=8){
+              _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=
+               OC_DCT_SHORT_ZRL_TOKEN;
+            }
+            else{
+              _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=
+               OC_DCT_ZRL_TOKEN;
+            }
+            _enc->extra_bits[tli][_enc->nextra_bits[tli]++]=
+             (ogg_uint16_t)(zrun-1);
+            zrun=0;
+          }
+        }
+        /*No zero run, or the run and the qc value are being coded
+           separately.*/
+        switch(qc_min){
+          case 1:{
+            _enc->dct_tokens[zzi][_enc->ndct_tokens[zzi]++]=
+             (unsigned char)(OC_ONE_TOKEN+c_sign);
+            _qcoeffs[zzi]=(ogg_int16_t)((-c_sign<<1)+1);
+          }break;
+          case 2:{
+            _enc->dct_tokens[zzi][_enc->ndct_tokens[zzi]++]=
+             (unsigned char)(OC_TWO_TOKEN+c_sign);
+            _qcoeffs[zzi]=(ogg_int16_t)((-c_sign<<2)+2);
+          }break;
+          default:{
+            if(qc_min-3<OC_NDCT_VAL_CAT2_SIZE){
+              _enc->dct_tokens[zzi][_enc->ndct_tokens[zzi]++]=
+               (unsigned char)(OC_DCT_VAL_CAT2+qc_min-3);
+              _enc->extra_bits[zzi][_enc->nextra_bits[zzi]++]=
+               (ogg_uint16_t)c_sign;
+              qc_signed[0]=qc_min;
+              qc_signed[1]=-qc_min;
+              _qcoeffs[zzi]=(ogg_int16_t)qc_signed[c_sign];
+            }
+            else{
+              qc_offs=3+OC_NDCT_VAL_CAT2_SIZE;
+              for(cati=0;cati<5&&qc_min>=qc_offs+OC_DCT_VAL_CAT_SIZES[cati];
+               cati++){
+                qc_offs+=OC_DCT_VAL_CAT_SIZES[cati];
+              }
+              /*qc_min can be encoded in this category.
+                Since all DCT values in the category use the same number of
+                 bits, we encode the closest value to qc_max.
+                This is either qc_max itself, if it is in the category's
+                 range, or the largest value in the category.*/
+              qc=OC_MINI(qc_offs+OC_DCT_VAL_CAT_SIZES[cati]-1,qc_max);
+              qc_signed[0]=qc;
+              qc_signed[1]=-qc;
+              _qcoeffs[zzi]=(ogg_int16_t)qc_signed[c_sign];
+              _enc->dct_tokens[zzi][_enc->ndct_tokens[zzi]++]=
+               (unsigned char)(OC_DCT_VAL_CAT3+cati);
+              _enc->extra_bits[zzi][_enc->nextra_bits[zzi]++]=(ogg_uint16_t)
+               ((c_sign<<OC_DCT_VAL_CAT_SHIFTS[cati])+qc-qc_offs);
+            }
+          }
+        }
+      }
+    }
+  }
+  /*If there's a trailing zero run, code an EOB token.*/
+  if(zrun>0){
+    int old_tok;
+    int toki;
+    int ebi;
+    tli=64-zrun;
+    toki=_enc->ndct_tokens[tli]-1;
+    if(toki>=0)old_tok=_enc->dct_tokens[tli][toki];
+    else old_tok=-1;
+    /*Try to extend an EOB run.*/
+    switch(old_tok){
+      case OC_DCT_EOB1_TOKEN:
+      case OC_DCT_EOB2_TOKEN:{
+        _enc->dct_tokens[tli][toki]++;
+      }break;
+      case OC_DCT_EOB3_TOKEN:{
+        _enc->dct_tokens[tli][toki]++;
+        _enc->extra_bits[tli][_enc->nextra_bits[tli]++]=0;
+      }break;
+      case OC_DCT_REPEAT_RUN0_TOKEN:{
+        ebi=_enc->nextra_bits[tli]-1;
+        if(_enc->extra_bits[tli][ebi]<3)_enc->extra_bits[tli][ebi]++;
+        else{
+          _enc->dct_tokens[tli][toki]++;
+          _enc->extra_bits[tli][ebi]=0;
+        }
+      }break;
+      case OC_DCT_REPEAT_RUN1_TOKEN:{
+        ebi=_enc->nextra_bits[tli]-1;
+        if(_enc->extra_bits[tli][ebi]<7)_enc->extra_bits[tli][ebi]++;
+        else{
+          _enc->dct_tokens[tli][toki]++;
+          _enc->extra_bits[tli][ebi]=0;
+        }
+      }break;
+      case OC_DCT_REPEAT_RUN2_TOKEN:{
+        ebi=_enc->nextra_bits[tli]-1;
+        if(_enc->extra_bits[tli][ebi]<15)_enc->extra_bits[tli][ebi]++;
+        else{
+          _enc->dct_tokens[tli][toki]++;
+          /*Again stupid: we could encode runs up to 4127, but inexplicably
+             they don't subtract the bottom of the range here, so we can only
+             go to 4095 (unless we want to change the spec to deal with
+             wrap-around).*/
+          _enc->extra_bits[tli][ebi]=32;
+        }
+      }break;
+      case OC_DCT_REPEAT_RUN3_TOKEN:{
+        ebi=_enc->nextra_bits[tli]-1;
+        if(_enc->extra_bits[tli][ebi]<4095){
+          _enc->extra_bits[tli][ebi]++;
+          break;
+        }
+        /*else fall through.*/
+      }
+      /*Start a new EOB run.*/
+      default:{
+        _enc->dct_tokens[tli][_enc->ndct_tokens[tli]++]=OC_DCT_EOB1_TOKEN;
+      }
+    }
+  }
+  /*Return the number of coefficients before the final zero run.*/
+  return 64-zrun;
+}
+
+static void oc_enc_vbr_residual_tokenize(oc_enc_ctx *_enc){
+  int *coded_fragi;
+  int *coded_fragi_end;
+  int    pli;
+  int    zzi;
+  /*Clear any existing DCT tokens.*/
+  /*LOOP VECTORIZES.*/
+  for(zzi=0;zzi<64;zzi++){
+    _enc->ndct_tokens[zzi]=_enc->nextra_bits[zzi]=0;
+    _enc->extra_bits_offs[zzi]=0;
+  }
+  coded_fragi_end=coded_fragi=_enc->state.coded_fragis;
+  for(pli=0;pli<3;pli++){
+    memcpy(_enc->dct_token_offs[pli],_enc->ndct_tokens,
+     sizeof(_enc->dct_token_offs[pli]));
+    coded_fragi_end+=_enc->state.ncoded_fragis[pli];
+    for(;coded_fragi<coded_fragi_end;coded_fragi++){
+      oc_quant_table       *iquants;
+      oc_fragment          *frag;
+      oc_fragment_enc_info *efrag;
+      ogg_int16_t           qcoeffs[64];
+      int                   fragi;
+      int                   qti;
+      int                   nnzc;
+      fragi=*coded_fragi;
+      frag=_enc->state.frags+fragi;
+      efrag=_enc->frinfo+fragi;
+      qti=frag->mbmode!=OC_MODE_INTRA;
+      iquants=_enc->state.dequant_tables[qti][pli];
+      nnzc=oc_enc_vbr_frag_quant_tokenize(_enc,efrag,qcoeffs,
+       _enc->enquant_tables[qti][pli][frag->qi],iquants[frag->qi]);
+      /*While we're here and things are in cache, reconstruct the quantized
+         fragment.*/
+      oc_state_frag_recon(&_enc->state,frag,pli,qcoeffs,nnzc,nnzc,
+       iquants[_enc->state.qis[0]][0],iquants[frag->qi]);
+    }
+  }
+  /*Merge the final EOB run of one coefficient list with the start of the
+     next, if possible.*/
+  for(zzi=1;zzi<64;zzi++){
+    static const int OC_EOB_RANGE[OC_NDCT_EOB_TOKEN_MAX]={1,1,1,4,8,16,4096};
+    static const int OC_EOB_OFFS[OC_NDCT_EOB_TOKEN_MAX]={1,2,3,4,8,16,0};
+    int old_tok1;
+    int old_tok2;
+    int old_eb1;
+    int old_eb2;
+    int new_tok;
+    int toki;
+    int zzj;
+    int ebi;
+    int runl;
+    /*Make sure this coefficient has tokens at all.*/
+    if(_enc->ndct_tokens[zzi]<=0)continue;
+    /*Ensure the first token is an EOB run.*/
+    old_tok2=_enc->dct_tokens[zzi][0];
+    if(old_tok2>=OC_NDCT_EOB_TOKEN_MAX)continue;
+    /*Search for a previous coefficient that has any tokens at all.*/
+    old_tok1=OC_NDCT_EOB_TOKEN_MAX;
+    zzj=zzi-1;
+    do{
+      toki=_enc->ndct_tokens[zzj]-1;
+      if(toki>=_enc->dct_token_offs[0][zzj]){
+        old_tok1=_enc->dct_tokens[zzj][toki];
+        break;
+      }
+    }
+    while(zzj-->0);
+    /*Ensure its last token was an EOB run.*/
+    if(old_tok1>=OC_NDCT_EOB_TOKEN_MAX)continue;
+    /*Pull off the associated extra bits, if any, and decode the runs.*/
+    ebi=_enc->nextra_bits[zzj];
+    old_eb1=OC_DCT_TOKEN_EXTRA_BITS[old_tok1]?_enc->extra_bits[zzj][--ebi]:0;
+    old_eb2=OC_DCT_TOKEN_EXTRA_BITS[old_tok2]?_enc->extra_bits[zzi][0]:0;
+    runl=OC_EOB_OFFS[old_tok1]+old_eb1+OC_EOB_OFFS[old_tok2]+old_eb2;
+    /*We can't possibly combine these into one run.
+      It might be possible to split them more optimally, but we'll just leave
+       them as is.*/
+    if(runl>=4096)continue;
+    /*We CAN combine them into one run.*/
+    for(new_tok=OC_DCT_EOB1_TOKEN;
+     runl-OC_EOB_OFFS[new_tok]>=OC_EOB_RANGE[new_tok];new_tok++);
+    /*toki is always initialized.
+      If your compiler thinks otherwise, it is dumb.*/
+    _enc->dct_tokens[zzj][toki]=(unsigned char)new_tok;
+    /*Update the two token lists.*/
+    if(OC_DCT_TOKEN_EXTRA_BITS[new_tok]){
+      _enc->extra_bits[zzj][ebi++]=(ogg_uint16_t)(
+       runl-OC_EOB_OFFS[new_tok]);
+    }
+    _enc->nextra_bits[zzj]=ebi;
+    _enc->dct_token_offs[0][zzi]++;
+    /*Note: We don't bother to update the offsets for planes 1 and 2 if
+       planes 0 or 1 don't have any tokens.
+      This turns out not to matter due to the way we use the offsets later.*/
+    if(OC_DCT_TOKEN_EXTRA_BITS[old_tok2])_enc->extra_bits_offs[zzi]++;
+  }
+}
+
+/*Marks each fragment as coded or not, based on the coefficient-level
+   thresholds computed in the psychovisual stage.
+  The MB mode of the fragments are not set, as they will be computed in
+   oc_enc_choose_mbmodes().
+  This also builds up the coded fragment and uncoded fragment lists.
+  The coded MB list is not built up.
+  That is done during mode decision.*/
+static void oc_enc_vbr_mark_coded(oc_enc_ctx *_enc){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  int    pli;
+  int    bli;
+  int    ncoded_fragis;
+  int    prev_ncoded_fragis;
+  int    nuncoded_fragis;
+  int    prev_nuncoded_fragis;
+  _enc->nblock_coded_flags=bli=0;
+  prev_ncoded_fragis=ncoded_fragis=prev_nuncoded_fragis=nuncoded_fragis=0;
+  sb=sb_end=_enc->state.sbs;
+  for(pli=0;pli<3;pli++){
+    const oc_fragment_plane *fplane;
+    int                      ystride;
+    int                      prev_refi;
+    fplane=_enc->state.fplanes+pli;
+    sb_end+=fplane->nsbs;
+    prev_refi=_enc->state.ref_frame_idx[OC_FRAME_PREV];
+    ystride=_enc->state.ref_frame_bufs[prev_refi][pli].ystride;
+    for(;sb<sb_end;sb++){
+      int quadi;
+      sb->coded_fully=1;
+      sb->coded_partially=0;
+      for(quadi=0;quadi<4;quadi++)if(sb->quad_valid&1<<quadi){
+        int bi;
+        for(bi=0;bi<4;bi++){
+          int fragi;
+          fragi=sb->map[quadi][bi];
+          if(fragi>=0){
+            oc_fragment *frag;
+            int          flag;
+            frag=_enc->state.frags+fragi;
+            if(frag->invalid){
+              frag->coded=0;
+              *(_enc->state.uncoded_fragis-++nuncoded_fragis)=fragi;
+            }
+            else{
+              oc_fragment_enc_info *efrag;
+              ogg_int16_t           dct_buf[64];
+              int                   ci;
+              /*Check to see if the fragment can be skipped.
+                It is assumed that a skipped fragment always takes fewer bits
+                 than a coded fragment, though this may not necessarily be true.
+                A single skipped fragment could take up to 34 bits to encode
+                 its location in the RLE scheme Theora uses */
+              oc_frag_intra_fdct(frag,dct_buf,ystride,prev_refi);
+              efrag=_enc->frinfo+fragi;
+              /*The comparison against OC_DC_QUANT_MIN and OC_AC_QUANT_MIN
+                 ensures we mark a fragment as skipped if it would be quantized
+                 to all zeros in OC_MODE_INTER_NOMV.
+                These minimum quantizers represent the maximum quality the
+                 format is capable of, and can be larger than our tolerances.
+                The minimum for INTER modes is twice the minimum for INTRA
+                 modes, so technically if the tolerances are below this
+                 threshold, we might be able to do a better job representing
+                 this fragment by coding it in INTRA mode.
+                But the number of extra bits required to do that would be
+                 ridiculous, so we give up our devotion to minimum quality just
+                 this once.
+
+                Note: OC_DC_QUANT_MIN[0] should actually be
+                 OC_DC_QUANT_MIN[1]>>1, but in this case those are
+                 equivalent.*/
+              ci=0;
+              if((unsigned)abs(dct_buf[0]-efrag->dct_coeffs[0])<=
+               OC_MAXI(efrag->tols[0],OC_DC_QUANT_MIN[0])){
+                for(ci++;ci<64;ci++){
+                  if((unsigned)abs(dct_buf[ci]-efrag->dct_coeffs[ci])>
+                   OC_MAXI(efrag->tols[ci],OC_AC_QUANT_MIN[0])){
+                    break;
+                  }
+                }
+              }
+              if(ci>=64){
+                frag->coded=0;
+                *(_enc->state.uncoded_fragis-++nuncoded_fragis)=fragi;
+              }
+              else{
+                frag->coded=1;
+                _enc->state.coded_fragis[ncoded_fragis++]=fragi;
+              }
+            }
+            flag=frag->coded;
+            sb->coded_fully&=flag;
+            sb->coded_partially|=flag;
+            _enc->block_coded_flags[bli++]=(char)flag;
+          }
+        }
+      }
+      /*If this is a partially coded super block, keep the entries just added
+         to the code block flag list.*/
+      if(!sb->coded_fully&&sb->coded_partially){
+        _enc->nblock_coded_flags=bli;
+      }
+      /*Otherwise, discard these entries from the list, as they are
+         implicit.*/
+      else{
+        sb->coded_partially=0;
+        bli=_enc->nblock_coded_flags;
+      }
+    }
+    _enc->state.ncoded_fragis[pli]=ncoded_fragis-prev_ncoded_fragis;
+    prev_ncoded_fragis=ncoded_fragis;
+    _enc->state.nuncoded_fragis[pli]=nuncoded_fragis-prev_nuncoded_fragis;
+    prev_nuncoded_fragis=nuncoded_fragis;
+  }
+  _enc->ncoded_frags=ncoded_fragis;
+}
+
+/*Selects an appropriate coding mode for each macro block.
+  A mode is chosen for the macro blocks with at least one coded fragment.
+  A bit cost estimate for coding the frame with the selected modes is made,
+   and a similar estimate is made for coding the frame as a key frame.
+  These estimates are used to select the optimal frame type.
+  Return: The frame type to encode with: OC_INTER_FRAME or OC_INTRA_FRAME.*/
+static int oc_enc_choose_mbmodes(oc_enc_ctx *_enc){
+  oc_set_chroma_mvs_func  set_chroma_mvs;
+  oc_fragment_enc_info   *efrag;
+  oc_fragment            *frag;
+  oc_mb                  *mb;
+  oc_mb_enc_info         *mbinfo;
+  oc_mv                   last_mv[2];
+  int                    *uncoded_fragi;
+  int                    *uncoded_fragi_end;
+  int                     best_qii;
+  int                     qii;
+  int                     qi;
+  int                     pli;
+  int                     mbi;
+  int                     fragi;
+  int                     ci;
+  int                     nmbs;
+  int                     mvbitsa;
+  int                     mvbitsb;
+  int                     intra_bits;
+  int                     inter_bits;
+  nmbs=_enc->state.nmbs;
+  set_chroma_mvs=OC_SET_CHROMA_MVS_TABLE[_enc->state.info.pixel_fmt];
+  oc_mode_scheme_chooser_reset(&_enc->mode_scheme_chooser);
+  memset(last_mv,0,sizeof(last_mv));
+  mbinfo=_enc->mbinfo;
+  mvbitsa=mvbitsb=0;
+  inter_bits=2+7*_enc->state.nqis-(_enc->state.nqis==3);
+  intra_bits=inter_bits+3;
+  _enc->state.ncoded_mbis=0;
+  for(mbi=0;mbi<nmbs;mbi++){
+    mb=_enc->state.mbs+mbi;
+    if(mb->mode!=OC_MODE_INVALID){
+      oc_fragment_enc_info *efrag;
+      oc_mv                 bmvs[2][4];
+      oc_mv                 mbmv;
+      int                   err[OC_NMODES][12];
+      int                   bits[OC_NMODES];
+      int                   coded[13];
+      int                   frag_qii[12][2][2];
+      int                   ncoded;
+      int                   ncoded_luma;
+      int                   mapii;
+      int                   mapi;
+      int                   modei;
+      int                   codedi;
+      int                   mbintrabits;
+      int                   mbpmvbitsa;
+      int                   mbgmvbitsa;
+      int                   mb4mvbitsa;
+      int                   mb4mvbitsb;
+      int                   mode;
+      int                   fti;
+      int                   qti;
+      int                   bi;
+      mbinfo=_enc->mbinfo+mbi;
+      /*Build up a list of coded fragments.*/
+      ncoded=0;
+      for(mapii=0;mapii<OC_MB_MAP_NIDXS[_enc->state.info.pixel_fmt];mapii++){
+        mapi=OC_MB_MAP_IDXS[_enc->state.info.pixel_fmt][mapii];
+        fragi=mb->map[mapi>>2][mapi&3];
+        if(fragi>=0&&_enc->state.frags[fragi].coded)coded[ncoded++]=mapi;
+      }
+      /*If we don't find any, mark this MB not coded and move on.*/
+      if(ncoded<=0){
+        mb->mode=OC_MODE_NOT_CODED;
+        /*Don't bother to do a MV search against the golden frame.
+          Just re-use the last vector, which should match well since the
+           contents of the MB haven't changed much.*/
+        mbinfo->mvs[0][OC_FRAME_GOLD][0]=mbinfo->mvs[1][OC_FRAME_GOLD][0];
+        mbinfo->mvs[0][OC_FRAME_GOLD][1]=mbinfo->mvs[1][OC_FRAME_GOLD][1];
+        continue;
+      }
+      /*Count the number of coded blocks that are luma blocks, and replace the
+         block MVs for not-coded blocks with (0,0).*/
+      memcpy(bmvs[0],mbinfo->bmvs,sizeof(bmvs[0]));
+      /*Mark the end of the list so we don't go past it below.*/
+      coded[ncoded]=-1;
+      for(mapi=ncoded_luma=0;mapi<4;mapi++){
+        if(coded[ncoded_luma]==mapi)ncoded_luma++;
+        else bmvs[0][mapi][0]=bmvs[0][mapi][1]=0;
+      }
+      /*Select a qi value for each coded fragment for each frame type and
+         quantizer type.*/
+      for(codedi=0;codedi<ncoded;codedi++){
+        mapi=coded[codedi];
+        efrag=_enc->frinfo+mb->map[mapi>>2][mapi&3];
+        for(fti=0;fti<2;fti++)for(qti=0;qti<=fti;qti++){
+          best_qii=0;
+          for(qii=1;qii<_enc->nqis[fti];qii++){
+            if(efrag->qi_min[qti]<=_enc->qis[fti][qii]&&
+             (_enc->qis[fti][qii]<_enc->qis[fti][best_qii]||
+             _enc->qis[fti][best_qii]<efrag->qi_min[qti])){
+              best_qii=qii;
+            }
+          }
+          frag_qii[codedi][fti][qti]=best_qii;
+        }
+      }
+      /*Special case: If no luma blocks are coded, but some chroma blocks are,
+         then the macro block defaults to OC_MODE_INTER_NOMV, and no mode need
+         be explicitly coded for it.*/
+      if(ncoded_luma<=0){
+        mb->mode=OC_MODE_NOT_CODED;
+        /*Don't bother to do a MV search against the golden frame.*/
+        mbinfo->mvs[0][OC_FRAME_GOLD][0]=mbinfo->mvs[0][OC_FRAME_GOLD][1]=0;
+        /*We do collect bitrate stats for frame type decision.*/
+        mbintrabits=bits[OC_MODE_INTER_NOMV]=0;
+        for(codedi=0;codedi<ncoded;codedi++){
+          mapi=coded[codedi];
+          pli=mapi>>2;
+          fragi=mb->map[pli][mapi&3];
+          frag=_enc->state.frags+fragi;
+          efrag=_enc->frinfo+fragi;
+          /*Set the MB mode and MV in the fragment.*/
+          frag->mbmode=OC_MODE_INTER_NOMV;
+          frag->mv[0]=frag->mv[1]=0;
+          /*Calculate the bitrate estimates.*/
+          err[OC_MODE_INTRA][mapi]=0;
+          for(ci=1;ci<64;ci++){
+            err[OC_MODE_INTRA][mapi]+=abs(efrag->dct_coeffs[ci]);
+          }
+          err[OC_MODE_INTER_NOMV][mapi]=oc_enc_frag_sad(_enc,frag,0,0,pli,
+           OC_FRAME_PREV);
+          qi=_enc->qis[OC_INTRA_FRAME][frag_qii[codedi][OC_INTRA_FRAME][0]];
+          mbintrabits+=OC_RES_BITRATES[qi][pli][OC_MODE_INTRA][
+           OC_MINI(err[OC_MODE_INTRA][mapi]>>8,15)];
+          qi=_enc->qis[OC_INTER_FRAME][frag_qii[codedi][OC_INTER_FRAME][1]];
+          bits[OC_MODE_INTER_NOMV]+=OC_RES_BITRATES[qi][pli][
+           OC_MODE_INTER_NOMV][OC_MINI(err[OC_MODE_INTER_NOMV][mapi]>>6,15)];
+          /*Also mark this fragment with the selected INTER qi.
+            It will be reset if we eventually code this as an INTRA frame.*/
+#if defined(OC_BITRATE_STATS)
+          efrag->eerror=err[OC_MODE_INTER_NOMV][mapi];
+#endif
+          efrag->qii=(unsigned char)frag_qii[codedi][OC_INTER_FRAME][1];
+          frag->qi=qi;
+        }
+        intra_bits+=mbintrabits+(1<<OC_BIT_SCALE-1)>>OC_BIT_SCALE;
+        inter_bits+=bits[OC_MODE_INTER_NOMV]+(1<<OC_BIT_SCALE-1)>>OC_BIT_SCALE;
+        continue;
+      }
+      /*Otherwise, add this to the coded MB list.*/
+      _enc->state.coded_mbis[_enc->state.ncoded_mbis++]=mbi;
+      /*Compute the chroma MVs for the 4MV mode.*/
+      (*set_chroma_mvs)(bmvs[1],(const oc_mv *)bmvs[0]);
+      /*Do a MV search against the golden frame.*/
+      oc_mcenc_search_1mv(_enc->mcenc,mb-_enc->state.mbs,OC_FRAME_GOLD);
+      /*We are now ready to do mode decision for this macro block.
+        Mode decision is done by exhaustively examining all potential choices.
+        Since we use a minimum-quality encoding strategy, this amounts to
+         simply selecting the mode which uses the smallest number of bits,
+         since the minimum quality will be met in any mode.
+        Obviously, doing the motion compensation, fDCT, tokenization, and then
+         counting the bits each token uses is computationally expensive.
+        Theora's EOB runs can also split the cost of these tokens across
+         multiple fragments, and naturally we don't know what the optimal
+         choice of Huffman codes will be until we know all the tokens we're
+         going to encode in all the fragments.
+
+        So we use a simple approach to estimating the bit cost of each mode
+         based upon the SAD value of the residual.
+        The mathematics behind the technique are outlined by Kim \cite{Kim03},
+         but the process is very simple.
+        For each quality index and SAD value, we have a table containing the
+         average number of bits needed to code a fragment.
+        The SAD values are placed into a small number of bins (currently 16).
+        The bit counts are obtained by examining actual encoded frames, with
+         optimal Huffman codes selected and EOB bits appropriately divided
+         among all the blocks they involve.
+        A separate QIxSAD table is kept for each mode and color plane.
+        It may be possible to combine many of these, but only experimentation
+         will tell which ones truly represent the same distribution.
+
+        @ARTICLE{Kim03,
+          author="Hyun Mun Kim",
+          title="Adaptive Rate Control Using Nonlinear Regression",
+          journal="IEEE Transactions on Circuits and Systems for Video
+           Technology",
+          volume=13,
+          number=5,
+          pages="432--439",
+          month="May",
+          year=2003
+        }*/
+      memset(bits,0,sizeof(bits));
+      mbintrabits=0;
+      /*Find the SAD values for each coded fragment for each possible mode.*/
+      for(codedi=0;codedi<ncoded;codedi++){
+        mapi=coded[codedi];
+        pli=mapi>>2;
+        bi=mapi&3;
+        fragi=mb->map[pli][bi];
+        frag=_enc->state.frags+fragi;
+        efrag=_enc->frinfo+fragi;
+        err[OC_MODE_INTRA][mapi]=0;
+        for(ci=1;ci<64;ci++){
+          err[OC_MODE_INTRA][mapi]+=abs(efrag->dct_coeffs[ci]);
+        }
+        err[OC_MODE_INTER_NOMV][mapi]=oc_enc_frag_sad(_enc,frag,0,0,pli,
+         OC_FRAME_PREV);
+        err[OC_MODE_INTER_MV][mapi]=oc_enc_frag_sad(_enc,frag,
+         mbinfo->mvs[0][OC_FRAME_PREV][0],mbinfo->mvs[0][OC_FRAME_PREV][1],
+         pli,OC_FRAME_PREV);
+        err[OC_MODE_INTER_MV_LAST][mapi]=oc_enc_frag_sad(_enc,frag,
+         last_mv[0][0],last_mv[0][1],pli,OC_FRAME_PREV);
+        err[OC_MODE_INTER_MV_LAST2][mapi]=oc_enc_frag_sad(_enc,frag,
+         last_mv[1][0],last_mv[1][1],pli,OC_FRAME_PREV);
+        err[OC_MODE_INTER_MV_FOUR][mapi]=oc_enc_frag_sad(_enc,frag,
+         bmvs[!!pli][bi][0],bmvs[!!pli][bi][1],pli,OC_FRAME_PREV);
+        err[OC_MODE_GOLDEN_NOMV][mapi]=oc_enc_frag_sad(_enc,frag,
+         0,0,pli,OC_FRAME_GOLD);
+        err[OC_MODE_GOLDEN_MV][mapi]=oc_enc_frag_sad(_enc,frag,
+         mbinfo->mvs[0][OC_FRAME_GOLD][0],mbinfo->mvs[0][OC_FRAME_GOLD][1],
+         pli,OC_FRAME_GOLD);
+        /*Using these distortion values, estimate the number of bits needed to
+           code this fragment in each mode.*/
+        qi=_enc->qis[OC_INTRA_FRAME][frag_qii[codedi][OC_INTRA_FRAME][0]];
+        mbintrabits+=OC_RES_BITRATES[qi][pli][OC_MODE_INTRA][
+         OC_MINI(err[OC_MODE_INTRA][mapi]>>8,15)];
+        qi=_enc->qis[OC_INTER_FRAME][frag_qii[codedi][OC_INTER_FRAME][0]];
+        bits[OC_MODE_INTRA]+=OC_RES_BITRATES[qi][pli][OC_MODE_INTRA][
+         OC_MINI(err[OC_MODE_INTRA][mapi]>>8,15)];
+        qi=_enc->qis[OC_INTER_FRAME][frag_qii[codedi][OC_INTER_FRAME][1]];
+        for(modei=OC_MODE_INTRA+1;modei<OC_NMODES;modei++){
+          bits[modei]+=OC_RES_BITRATES[qi][pli][modei][
+           OC_MINI(err[modei][mapi]>>6,15)];
+        }
+      }
+      /*Bit costs are stored in the table with extra precision.
+        Round them down to whole bits here.*/
+      /*LOOP VECTORIZES.*/
+      for(modei=0;modei<OC_NMODES;modei++){
+        bits[modei]=bits[modei]+(1<<OC_BIT_SCALE-1)>>OC_BIT_SCALE;
+      }
+      /*Estimate the cost of coding the label for each mode.
+        See comments at oc_mode_scheme_chooser_cost() for a description of the
+         method.*/
+      for(modei=0;modei<OC_NMODES;modei++){
+        bits[modei]+=oc_mode_scheme_chooser_cost(&_enc->mode_scheme_chooser,
+         modei);
+      }
+      /*Add the motion vector bits for each mode that requires them.*/
+      mbpmvbitsa=oc_mvbitsa(mbinfo->mvs[0][OC_FRAME_PREV][0],
+       mbinfo->mvs[0][OC_FRAME_PREV][1]);
+      mbgmvbitsa=oc_mvbitsa(mbinfo->mvs[1][OC_FRAME_GOLD][0],
+       mbinfo->mvs[0][OC_FRAME_GOLD][1]);
+      mb4mvbitsa=mb4mvbitsb=0;
+      for(codedi=0;codedi<ncoded_luma;codedi++){
+        mb4mvbitsa=oc_mvbitsa(bmvs[0][coded[codedi]][0],
+         bmvs[0][coded[codedi]][1]);
+        mb4mvbitsb+=12;
+      }
+      /*We use the same opportunity cost method of estimating the cost of
+         coding the motion vectors with the two different schemes as we do for
+         estimating the cost of the mode labels.
+        However, because there are only two schemes and they're both pretty
+         simple, this can just be done inline.*/
+      bits[OC_MODE_INTER_MV]+=OC_MINI(mvbitsa+mbpmvbitsa,mvbitsb+12)-
+       OC_MINI(mvbitsa,mvbitsb);
+      bits[OC_MODE_GOLDEN_MV]+=OC_MINI(mvbitsa+mbgmvbitsa,mvbitsb+12)-
+       OC_MINI(mvbitsa,mvbitsb);
+      bits[OC_MODE_INTER_MV_FOUR]+=OC_MINI(mvbitsa+mb4mvbitsa,
+       mvbitsb+mb4mvbitsb)-OC_MINI(mvbitsa,mvbitsb);
+      /*Finally, pick the mode with the cheapest estimated bit cost.*/
+      mode=0;
+      for(modei=1;modei<OC_NMODES;modei++)if(bits[modei]<bits[mode]){
+        /*Do not select 4MV mode when not all the luma blocks are coded when
+           we're in VP3 compatibility mode.*/
+        if(_enc->vp3_compatible&&modei==OC_MODE_INTER_MV_FOUR&&ncoded_luma<4){
+          continue;
+        }
+        mode=modei;
+      }
+#if defined(OC_BITRATE_STATS)
+      /*Remember the error for the mode we selected in each fragment.*/
+      for(codedi=0;codedi<ncoded;codedi++){
+        mapi=coded[codedi];
+        fragi=mb->map[mapi>>2][mapi&3];
+        efrag=_enc->frinfo+fragi;
+        efrag->eerror=err[mode][mapi];
+      }
+#endif
+      /*Go back and store the selected qi index corresponding to the selected
+         mode in each fragment.*/
+      for(codedi=0;codedi<ncoded;codedi++){
+        mapi=coded[codedi];
+        fragi=mb->map[mapi>>2][mapi&3];
+        frag=_enc->state.frags+fragi;
+        efrag=_enc->frinfo+fragi;
+        efrag->qii=(unsigned char)
+         frag_qii[codedi][OC_INTER_FRAME][mode!=0];
+        frag->qi=_enc->qis[OC_INTER_FRAME][efrag->qii];
+      }
+      inter_bits+=bits[mode];
+      intra_bits+=mbintrabits+(1<<OC_BIT_SCALE-1)>>OC_BIT_SCALE;
+      oc_mode_scheme_chooser_update(&_enc->mode_scheme_chooser,mode);
+      mb->mode=mode;
+      switch(mode){
+        case OC_MODE_INTER_MV:{
+          mvbitsa+=mbpmvbitsa;
+          mvbitsb+=12;
+          last_mv[1][0]=last_mv[0][0];
+          last_mv[1][1]=last_mv[0][1];
+          mbmv[0]=last_mv[0][0]=mbinfo->mvs[0][OC_FRAME_PREV][0];
+          mbmv[1]=last_mv[0][1]=mbinfo->mvs[0][OC_FRAME_PREV][1];
+        }break;
+        case OC_MODE_INTER_MV_LAST:{
+          mbmv[0]=last_mv[0][0];
+          mbmv[1]=last_mv[0][1];
+        }break;
+        case OC_MODE_INTER_MV_LAST2:{
+          mbmv[0]=last_mv[1][0];
+          mbmv[1]=last_mv[1][1];
+          last_mv[1][0]=last_mv[0][0];
+          last_mv[1][1]=last_mv[0][1];
+          last_mv[0][0]=mbmv[0];
+          last_mv[0][1]=mbmv[1];
+        }break;
+        case OC_MODE_INTER_MV_FOUR:{
+          mvbitsa+=mb4mvbitsa;
+          mvbitsb+=mb4mvbitsb;
+          if(ncoded_luma>0){
+            /*After 4MV mode, the last MV is the one from the last coded luma
+               block.*/
+            last_mv[1][0]=last_mv[0][0];
+            last_mv[1][1]=last_mv[0][1];
+            last_mv[0][0]=bmvs[0][coded[ncoded_luma-1]][0];
+            last_mv[0][1]=bmvs[0][coded[ncoded_luma-1]][1];
+          }
+        }break;
+        case OC_MODE_GOLDEN_MV:{
+          mvbitsa+=mbgmvbitsa;
+          mvbitsb+=12;
+          mbmv[0]=mbinfo->mvs[0][OC_FRAME_GOLD][0];
+          mbmv[1]=mbinfo->mvs[0][OC_FRAME_GOLD][1];
+        }break;
+        default:mbmv[0]=mbmv[1]=0;break;
+      }
+      /*Special case 4MV mode.
+        MVs are stored in bmvs.*/
+      if(mode==OC_MODE_INTER_MV_FOUR){
+        for(codedi=0;codedi<ncoded;codedi++){
+          mapi=coded[codedi];
+          pli=mapi>>2;
+          bi=mapi&3;
+          fragi=mb->map[pli][bi];
+          frag=_enc->state.frags+fragi;
+          frag->mbmode=mode;
+          frag->mv[0]=bmvs[!!pli][bi][0];
+          frag->mv[1]=bmvs[!!pli][bi][1];
+        }
+      }
+      /*For every other mode, the MV is stored in mbmv.*/
+      else{
+        for(codedi=0;codedi<ncoded;codedi++){
+          mapi=coded[codedi];
+          fragi=mb->map[mapi>>2][mapi&3];
+          frag=_enc->state.frags+fragi;
+          frag->mbmode=mode;
+          frag->mv[0]=mbmv[0];
+          frag->mv[1]=mbmv[1];
+        }
+      }
+    }
+  }
+  /*Finally, compare the cost of an INTER frame and an INTRA frame.*/
+  if(mvbitsb<mvbitsa){
+    _enc->mv_scheme=1;
+    inter_bits+=mvbitsb;
+  }
+  else{
+    _enc->mv_scheme=0;
+    inter_bits+=mvbitsa;
+  }
+  inter_bits+=_enc->mode_scheme_chooser.scheme_bits[
+   _enc->mode_scheme_chooser.scheme_list[0]];
+  /*The easiest way to count the bits needed for coded/not coded fragments is
+     to code them.
+    We need to do this anyway, might as well do it now.*/
+  oggpackB_reset(&_enc->opb_coded_flags);
+  inter_bits+=oc_enc_partial_sb_flags_pack(_enc,&_enc->opb_coded_flags);
+  inter_bits+=oc_enc_coded_sb_flags_pack(_enc,&_enc->opb_coded_flags);
+  inter_bits+=oc_enc_coded_block_flags_pack(_enc,&_enc->opb_coded_flags);
+  /*Select the quantizer list for INTER frames.*/
+  _enc->state.nqis=_enc->nqis[OC_INTER_FRAME];
+  for(qii=0;qii<_enc->state.nqis;qii++){
+    _enc->state.qis[qii]=_enc->qis[OC_INTER_FRAME][qii];
+  }
+  if(intra_bits>inter_bits){
+    _enc->vbr->est_bits=inter_bits;
+    return OC_INTER_FRAME;
+  }
+  /*All INTRA mode is smaller, but we haven't counted up the cost of all the
+     not coded fragments we will now have to code.*/
+  uncoded_fragi_end=uncoded_fragi=_enc->state.uncoded_fragis;
+  for(pli=0;pli<3;pli++){
+    uncoded_fragi_end-=_enc->state.nuncoded_fragis[pli];
+    while(uncoded_fragi-->uncoded_fragi_end){
+      fragi=*uncoded_fragi;
+      frag=_enc->state.frags+fragi;
+      /*Assume a very small bit cost for invalid fragments.*/
+      if(frag->invalid)intra_bits+=OC_RES_BITRATES[0][pli][OC_MODE_INTRA][0];
+      else{
+        int eerror;
+        eerror=0;
+        efrag=_enc->frinfo+fragi;
+        for(ci=1;ci<64;ci++)eerror+=abs(efrag->dct_coeffs[ci]);
+#if defined(OC_BITRATE_STATS)
+        efrag->eerror=eerror;
+#endif
+        qi=_enc->qis[OC_INTRA_FRAME][0];
+        for(qii=1;qii<_enc->nqis[OC_INTRA_FRAME];qii++){
+          if(_enc->qis[OC_INTRA_FRAME][qii]<qi&&
+           efrag->qi_min[0]<=_enc->qis[OC_INTRA_FRAME][qii]){
+            qi=_enc->qis[OC_INTRA_FRAME][qii];
+          }
+        }
+        intra_bits+=OC_RES_BITRATES[qi][pli][OC_MODE_INTRA][
+         OC_MINI(eerror>>8,15)];
+        /*If it turns out INTRA mode was more expensive, we're done.*/
+        if(intra_bits>inter_bits){
+          _enc->vbr->est_bits=inter_bits;
+          return OC_INTER_FRAME;
+        }
+      }
+    }
+  }
+  /*So, we've compared the full cost estimates, and INTRA is still better.
+    Code an INTRA frame instead.*/
+  oc_enc_vbr_mark_all_intra(_enc);
+  _enc->vbr->est_bits=intra_bits;
+  return OC_INTRA_FRAME;
+}
+
+/*A pipeline stage for transforming, quantizing, and tokenizing the frame.*/
+
+static int oc_vbr_pipe_start(oc_enc_pipe_stage *_stage){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=0;
+  return 0;
+}
+
+static int oc_vbr_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=_y_avail[pli];
+  return 0;
+}
+
+static int oc_vbr_pipe_end(oc_enc_pipe_stage *_stage){
+  oc_enc_ctx *enc;
+  int         ret;
+  enc=_stage->enc;
+  if(enc->state.curframe_num==1||
+   enc->state.curframe_num-enc->state.keyframe_num>=
+   enc->keyframe_frequency_force){
+    enc->state.frame_type=OC_INTRA_FRAME;
+    oc_enc_vbr_quant_sel_quality(enc,1);
+    oc_enc_vbr_mark_all_intra(enc);
+  }
+  else{
+    oc_enc_vbr_mark_coded(enc);
+    /*Only proceed if we have some coded blocks.
+      No coded blocks -> dropped frame -> 0 byte packet.*/
+    if(enc->ncoded_frags>0){
+      oc_enc_vbr_quant_sel_quality(enc,0);
+      enc->state.frame_type=oc_enc_choose_mbmodes(enc);
+      if(enc->state.frame_type==OC_INTER_FRAME)oc_enc_do_inter_dcts(enc);
+    }
+  }
+  /*Only initialize subsequent stages after we know how many fragments will be
+     encoded, and at what quality (so the loop filter can be set up
+     properly).*/
+  if(_stage->next!=NULL){
+    ret=(*_stage->next->pipe_start)(_stage->next);
+    if(ret<0)return ret;
+  }
+  if(enc->ncoded_frags>0){
+    /*TODO: These stages could be pipelined with reconstruction.*/
+    oc_enc_vbr_quant_dc(enc);
+    oc_enc_vbr_residual_tokenize(enc);
+  }
+  if(_stage->next!=NULL){
+    ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+    if(ret<0)return ret;
+    return (*_stage->next->pipe_end)(_stage->next);
+  }
+  return 0;
+}
+
+/*Initialize the transform, quantization, and tokenization stage of the
+   pipeline.
+  _enc: The encoding context.*/
+static void oc_vbr_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_vbr_pipe_start;
+  _stage->pipe_proc=oc_vbr_pipe_process;
+  _stage->pipe_end=oc_vbr_pipe_end;
+}
+
+
+static int oc_enc_vbr_init(oc_enc_vbr_ctx *_vbr,oc_enc_ctx *_enc){
+  _vbr->cfg.qi=_enc->state.info.quality;
+  _vbr->cfg.kf_qi_min=_vbr->cfg.df_qi_min=0;
+  _vbr->cfg.kf_qi_max=_vbr->cfg.df_qi_max=63;
+  _vbr->enc=_enc;
+  _vbr->impmap=oc_impmap_alloc(_enc);
+  _vbr->psych=oc_psych_alloc(_enc);
+  oc_vbr_pipe_init(&_vbr->pipe,_enc);
+  return 0;
+}
+
+static void oc_enc_vbr_clear(oc_enc_vbr_ctx *_vbr){
+  oc_psych_free(_vbr->psych);
+  oc_impmap_free(_vbr->impmap);
+}
+
+static int oc_enc_vbr_cfg(oc_enc_vbr_ctx *_vbr,th_vbr_cfg *_cfg){
+  if(_cfg->qi<0||_cfg->qi>63||_cfg->kf_qi_min<0||_cfg->kf_qi_min>63||
+   _cfg->kf_qi_max<_cfg->kf_qi_min||_cfg->kf_qi_max>63||
+   _cfg->df_qi_min<0||_cfg->df_qi_min>63||
+   _cfg->df_qi_max<_cfg->df_qi_min||_cfg->df_qi_max>63){
+    return TH_EINVAL;
+  }
+  memcpy(&_vbr->cfg,_cfg,sizeof(_vbr->cfg));
+  return 0;
+}
+
+static oc_enc_pipe_stage *oc_enc_vbr_create_pipe(oc_enc_vbr_ctx *_vbr){
+  oc_enc_pipe_stage *pipe;
+  _vbr->enc->fill_pipe.next=&_vbr->enc->pack_pipe;
+  _vbr->pipe.next=&_vbr->enc->copy_pipe;
+  /*TODO: Disable spatial masking and CSF filtering based on
+     application-specified speed level.*/
+  pipe=oc_psych_prepend_to_pipe(_vbr->psych,&_vbr->pipe);
+  _vbr->enc->fdct_pipe.next=pipe;
+  /*TODO: Disable impmap based on application-specified speed level.*/
+  pipe=oc_impmap_prepend_to_pipe(_vbr->impmap,&_vbr->enc->fdct_pipe);
+  pipe=oc_mcenc_prepend_to_pipe(_vbr->enc->mcenc,pipe);
+  return pipe;
+}
+
+
+oc_enc_vbr_ctx *oc_enc_vbr_alloc(oc_enc_ctx *_enc){
+  oc_enc_vbr_ctx *vbr;
+  vbr=(oc_enc_vbr_ctx *)_ogg_malloc(sizeof(*vbr));
+  oc_enc_vbr_init(vbr,_enc);
+  return vbr;
+}
+
+void oc_enc_vbr_free(oc_enc_vbr_ctx *_vbr){
+  if(_vbr!=NULL){
+    oc_enc_vbr_clear(_vbr);
+    _ogg_free(_vbr);
+  }
+}
+
+int oc_enc_vbr_enable(oc_enc_vbr_ctx *_vbr,th_vbr_cfg *_cfg){
+  if(_cfg!=NULL){
+    int ret;
+    ret=oc_enc_vbr_cfg(_vbr,_cfg);
+    if(ret<0)return ret;
+  }
+  /*Map the qi to a multiple of JND values.*/
+  _vbr->qscale=_vbr->cfg.qi>=63?0.5F:1.5F*OC_POWF(2,0.0625F*(64-_vbr->cfg.qi));
+  _vbr->enc->pipe=oc_enc_vbr_create_pipe(_vbr);
+  /*TODO: Implement a real speed level.*/
+  _vbr->enc->speed_max=0;
+  _vbr->enc->set_speed=oc_enc_set_speed_null;
+  return 0;
+}

Added: trunk/theora-exp/lib/encvbr.h
===================================================================
--- trunk/theora-exp/lib/encvbr.h	                        (rev 0)
+++ trunk/theora-exp/lib/encvbr.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,43 @@
+#if !defined(_encvbr_H)
+# define _encvbr_H (1)
+# include "encint.h"
+
+
+
+typedef struct oc_impmap_ctx oc_impmap_ctx;
+typedef struct oc_psych_ctx  oc_psych_ctx;
+
+
+
+/*Context information for the VBR encoder.*/
+struct oc_enc_vbr_ctx{
+  /*Configuration information.*/
+  th_vbr_cfg         cfg;
+  /*The main VBR encoder's pipe stage.*/
+  oc_enc_pipe_stage  pipe;
+  /*The scale factor for the current quality setting.*/
+  float              qscale;
+  /*Minimum psychovisual tolerance for the DC coefficients in each plane.*/
+  unsigned           dc_tol_mins[3];
+  /*The estimated bit cost of the current frame.*/
+  int                est_bits;
+  /*The encode context.*/
+  oc_enc_ctx        *enc;
+  /*Context information used to generate the importance map.*/
+  oc_impmap_ctx     *impmap;
+  /*Context information used to generate low-level perceptual weightings.*/
+  oc_psych_ctx      *psych;
+};
+
+
+oc_impmap_ctx *oc_impmap_alloc(oc_enc_ctx *_enc);
+void oc_impmap_free(oc_impmap_ctx *_impmap);
+oc_enc_pipe_stage *oc_impmap_prepend_to_pipe(oc_impmap_ctx *_impmap,
+ oc_enc_pipe_stage *_next);
+
+oc_psych_ctx *oc_psych_alloc(oc_enc_ctx *_enc);
+void oc_psych_free(oc_psych_ctx *_psych);
+oc_enc_pipe_stage *oc_psych_prepend_to_pipe(oc_psych_ctx *_psych,
+ oc_enc_pipe_stage *_next);
+
+#endif

Added: trunk/theora-exp/lib/enquant.c
===================================================================
--- trunk/theora-exp/lib/enquant.c	                        (rev 0)
+++ trunk/theora-exp/lib/enquant.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,866 @@
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+#include "enquant.h"
+#include "internal.h"
+
+
+/*The default quantization parameters used by VP3.1.*/
+static const int OC_VP31_RANGE_SIZES[1]={63};
+static const th_quant_base OC_VP31_BASES_INTRA_Y[2]={
+  {
+     16, 11, 10, 16, 24, 40, 51, 61,
+     12, 12, 14, 19, 26, 58, 60, 55,
+     14, 13, 16, 24, 40, 57, 69, 56,
+     14, 17, 22, 29, 51, 87, 80, 62,
+     18, 22, 37, 58, 68,109,103, 77,
+     24, 35, 55, 64, 81,104,113, 92,
+     49, 64, 78, 87,103,121,120,101,
+     72, 92, 95, 98,112,100,103, 99
+  },
+  {
+     16, 11, 10, 16, 24, 40, 51, 61,
+     12, 12, 14, 19, 26, 58, 60, 55,
+     14, 13, 16, 24, 40, 57, 69, 56,
+     14, 17, 22, 29, 51, 87, 80, 62,
+     18, 22, 37, 58, 68,109,103, 77,
+     24, 35, 55, 64, 81,104,113, 92,
+     49, 64, 78, 87,103,121,120,101,
+     72, 92, 95, 98,112,100,103, 99
+  }
+};
+static const th_quant_base OC_VP31_BASES_INTRA_C[2]={
+  {
+     17, 18, 24, 47, 99, 99, 99, 99,
+     18, 21, 26, 66, 99, 99, 99, 99,
+     24, 26, 56, 99, 99, 99, 99, 99,
+     47, 66, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99
+  },
+  {
+     17, 18, 24, 47, 99, 99, 99, 99,
+     18, 21, 26, 66, 99, 99, 99, 99,
+     24, 26, 56, 99, 99, 99, 99, 99,
+     47, 66, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99,
+     99, 99, 99, 99, 99, 99, 99, 99
+  }
+};
+static const th_quant_base OC_VP31_BASES_INTER[2]={
+  {
+     16, 16, 16, 20, 24, 28, 32, 40,
+     16, 16, 20, 24, 28, 32, 40, 48,
+     16, 20, 24, 28, 32, 40, 48, 64,
+     20, 24, 28, 32, 40, 48, 64, 64,
+     24, 28, 32, 40, 48, 64, 64, 64,
+     28, 32, 40, 48, 64, 64, 64, 96,
+     32, 40, 48, 64, 64, 64, 96,128,
+     40, 48, 64, 64, 64, 96,128,128
+  },
+  {
+     16, 16, 16, 20, 24, 28, 32, 40,
+     16, 16, 20, 24, 28, 32, 40, 48,
+     16, 20, 24, 28, 32, 40, 48, 64,
+     20, 24, 28, 32, 40, 48, 64, 64,
+     24, 28, 32, 40, 48, 64, 64, 64,
+     28, 32, 40, 48, 64, 64, 64, 96,
+     32, 40, 48, 64, 64, 64, 96,128,
+     40, 48, 64, 64, 64, 96,128,128
+  }
+};
+
+const th_quant_info TH_VP31_QUANT_INFO={
+  {
+    220,200,190,180,170,170,160,160,
+    150,150,140,140,130,130,120,120,
+    110,110,100,100, 90, 90, 90, 80,
+     80, 80, 70, 70, 70, 60, 60, 60,
+     60, 50, 50, 50, 50, 40, 40, 40,
+     40, 40, 30, 30, 30, 30, 30, 30,
+     30, 20, 20, 20, 20, 20, 20, 20,
+     20, 10, 10, 10, 10, 10, 10, 10
+  },
+  {
+    500,450,400,370,340,310,285,265,
+    245,225,210,195,185,180,170,160,
+    150,145,135,130,125,115,110,107,
+    100, 96, 93, 89, 85, 82, 75, 74,
+     70, 68, 64, 60, 57, 56, 52, 50,
+     49, 45, 44, 43, 40, 38, 37, 35,
+     33, 32, 30, 29, 28, 25, 24, 22,
+     21, 19, 18, 17, 15, 13, 12, 10
+  },
+  {
+    30,25,20,20,15,15,14,14,
+    13,13,12,12,11,11,10,10,
+     9, 9, 8, 8, 7, 7, 7, 7,
+     6, 6, 6, 6, 5, 5, 5, 5,
+     4, 4, 4, 4, 3, 3, 3, 3,
+     2, 2, 2, 2, 2, 2, 2, 2,
+     0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0
+  },
+  {
+    {
+      {1,OC_VP31_RANGE_SIZES,OC_VP31_BASES_INTRA_Y},
+      {1,OC_VP31_RANGE_SIZES,OC_VP31_BASES_INTRA_C},
+      {1,OC_VP31_RANGE_SIZES,OC_VP31_BASES_INTRA_C}
+    },
+    {
+      {1,OC_VP31_RANGE_SIZES,OC_VP31_BASES_INTER},
+      {1,OC_VP31_RANGE_SIZES,OC_VP31_BASES_INTER},
+      {1,OC_VP31_RANGE_SIZES,OC_VP31_BASES_INTER}
+    }
+  }
+};
+
+
+
+static const int OC_DEF_QRANGE_SIZES[3]={15,16,32};
+
+static const th_quant_base OC_DEF_BASE_MATRICES[9][4]={
+  /*Y' matrices, 4:4:4 subsampling.*/
+  {
+    /*qi=0.*/
+    {
+      255, 54, 54, 54, 55, 57, 63, 71,
+       54, 54, 54, 54, 55, 58, 63, 71,
+       54, 54, 54, 54, 55, 58, 63, 72,
+       54, 54, 54, 55, 55, 58, 63, 72,
+       55, 55, 55, 55, 56, 59, 64, 73,
+       57, 58, 58, 58, 59, 62, 67, 76,
+       63, 63, 63, 63, 64, 67, 73, 83,
+       71, 71, 72, 72, 73, 76, 83, 94
+    },
+    /*qi=15.*/
+    {
+      255, 48, 48, 48, 49, 51, 56, 64,
+       48, 48, 48, 48, 49, 51, 56, 65,
+       48, 48, 48, 48, 49, 51, 57, 65,
+       48, 48, 48, 48, 49, 52, 57, 65,
+       49, 49, 49, 49, 50, 52, 58, 66,
+       51, 51, 51, 52, 52, 55, 61, 69,
+       56, 56, 57, 57, 58, 61, 67, 76,
+       64, 65, 65, 65, 66, 69, 76, 87
+    },
+    /*qi=31.*/
+    {
+      255, 46, 46, 46, 47, 49, 54, 62,
+       46, 46, 46, 46, 47, 50, 55, 63,
+       46, 46, 46, 46, 47, 50, 55, 63,
+       46, 46, 46, 47, 47, 50, 55, 63,
+       47, 47, 47, 47, 48, 51, 56, 64,
+       49, 50, 50, 50, 51, 53, 59, 67,
+       54, 55, 55, 55, 56, 59, 65, 74,
+       62, 63, 63, 63, 64, 67, 74, 86
+    },
+    /*qi=63.*/
+    {
+      255, 45, 45, 46, 46, 49, 54, 62,
+       45, 46, 46, 46, 46, 49, 54, 62,
+       45, 46, 46, 46, 47, 49, 54, 62,
+       46, 46, 46, 46, 47, 49, 54, 62,
+       46, 46, 47, 47, 47, 50, 55, 63,
+       49, 49, 49, 49, 50, 53, 58, 67,
+       54, 54, 54, 54, 55, 58, 64, 74,
+       62, 62, 62, 62, 63, 67, 74, 85
+    }
+  },
+  /*Cb matrices, 4:4:4 subsampling.*/
+  {
+    /*qi=0.*/
+    {
+      149, 34, 37, 41, 45, 49, 54, 60,
+       34, 38, 41, 46, 50, 55, 61, 67,
+       37, 41, 45, 49, 54, 60, 66, 73,
+       41, 46, 49, 54, 60, 66, 72, 80,
+       45, 50, 54, 60, 65, 72, 79, 88,
+       49, 55, 60, 66, 72, 79, 87, 96,
+       54, 61, 66, 72, 79, 87, 96,106,
+       60, 67, 73, 80, 88, 96,106,117
+    },
+    /*qi=15.*/
+    {
+      149, 31, 34, 37, 41, 46, 51, 56,
+       31, 35, 38, 42, 47, 52, 57, 63,
+       34, 38, 42, 46, 51, 56, 62, 69,
+       37, 42, 46, 51, 56, 62, 69, 76,
+       41, 47, 51, 56, 62, 69, 76, 84,
+       46, 52, 56, 62, 69, 76, 84, 93,
+       51, 57, 62, 69, 76, 84, 93,103,
+       56, 63, 69, 76, 84, 93,103,115
+    },
+    /*qi=31.*/
+    {
+      149, 30, 33, 36, 40, 45, 49, 55,
+       30, 34, 37, 41, 46, 51, 56, 62,
+       33, 37, 41, 45, 50, 55, 61, 68,
+       36, 41, 45, 50, 55, 61, 68, 75,
+       40, 46, 50, 55, 61, 68, 75, 83,
+       45, 51, 55, 61, 68, 75, 83, 93,
+       49, 56, 61, 68, 75, 83, 92,102,
+       55, 62, 68, 75, 83, 93,102,114
+    },
+    /*qi=63.*/
+    {
+      149, 30, 33, 36, 40, 44, 49, 55,
+       30, 34, 37, 41, 45, 50, 56, 62,
+       33, 37, 40, 45, 50, 55, 61, 68,
+       36, 41, 45, 50, 55, 61, 67, 75,
+       40, 45, 50, 55, 61, 68, 75, 83,
+       44, 50, 55, 61, 68, 75, 83, 92,
+       49, 56, 61, 67, 75, 83, 92,102,
+       55, 62, 68, 75, 83, 92,102,114
+    }
+  },
+  /*Cb matrices, 4:2:2 subsampling.*/
+  {
+    /*qi=0.*/
+    {
+      142, 31, 32, 34, 36, 38, 40, 42,
+       33, 35, 36, 38, 40, 42, 44, 47,
+       35, 38, 39, 41, 43, 46, 48, 51,
+       39, 41, 43, 45, 48, 50, 53, 55,
+       43, 45, 47, 50, 52, 55, 58, 61,
+       47, 50, 52, 55, 58, 61, 64, 67,
+       52, 55, 57, 60, 63, 67, 70, 74,
+       57, 61, 63, 67, 70, 74, 77, 81
+    },
+    /*qi=15.*/
+    {
+      142, 28, 29, 31, 33, 34, 36, 38,
+       30, 32, 33, 35, 37, 39, 41, 43,
+       32, 34, 36, 38, 40, 42, 45, 47,
+       36, 38, 40, 42, 44, 47, 49, 52,
+       39, 42, 44, 46, 49, 52, 54, 58,
+       44, 46, 49, 51, 54, 57, 60, 64,
+       48, 51, 54, 57, 60, 63, 67, 70,
+       53, 57, 60, 63, 66, 70, 74, 78
+    },
+    /*qi=31.*/
+    {
+      142, 27, 28, 30, 32, 33, 35, 37,
+       29, 31, 32, 34, 36, 38, 40, 42,
+       31, 33, 35, 37, 39, 41, 44, 46,
+       35, 37, 39, 41, 43, 46, 48, 51,
+       38, 41, 43, 45, 48, 51, 54, 57,
+       43, 45, 48, 50, 53, 56, 59, 63,
+       47, 50, 53, 56, 59, 62, 66, 70,
+       52, 56, 59, 62, 65, 69, 73, 77
+    },
+    /*qi=63.*/
+    {
+      142, 27, 28, 30, 31, 33, 35, 37,
+       28, 30, 32, 34, 35, 38, 40, 42,
+       31, 33, 35, 37, 39, 41, 43, 46,
+       34, 37, 39, 41, 43, 45, 48, 51,
+       38, 41, 43, 45, 48, 50, 53, 56,
+       42, 45, 47, 50, 53, 56, 59, 63,
+       47, 50, 52, 55, 59, 62, 65, 69,
+       52, 56, 58, 62, 65, 69, 73, 77
+    }
+  },
+  /*Cb matrices, subsampling in the Y direction.*/
+  {
+    /*qi=0.*/
+    {
+      142, 33, 35, 39, 43, 47, 52, 57,
+       31, 35, 38, 41, 45, 50, 55, 61,
+       32, 36, 39, 43, 47, 52, 57, 63,
+       34, 38, 41, 45, 50, 55, 60, 67,
+       36, 40, 43, 48, 52, 58, 63, 70,
+       38, 42, 46, 50, 55, 61, 67, 74,
+       40, 44, 48, 53, 58, 64, 70, 77,
+       42, 47, 51, 55, 61, 67, 74, 81
+    },
+    /*qi=15.*/
+    {
+      142, 30, 32, 36, 39, 44, 48, 53,
+       28, 32, 34, 38, 42, 46, 51, 57,
+       29, 33, 36, 40, 44, 49, 54, 60,
+       31, 35, 38, 42, 46, 51, 57, 63,
+       33, 37, 40, 44, 49, 54, 60, 66,
+       34, 39, 42, 47, 52, 57, 63, 70,
+       36, 41, 45, 49, 54, 60, 67, 74,
+       38, 43, 47, 52, 58, 64, 70, 78
+    },
+    /*qi=31.*/
+    {
+      142, 29, 31, 35, 38, 43, 47, 52,
+       27, 31, 33, 37, 41, 45, 50, 56,
+       28, 32, 35, 39, 43, 48, 53, 59,
+       30, 34, 37, 41, 45, 50, 56, 62,
+       32, 36, 39, 43, 48, 53, 59, 65,
+       33, 38, 41, 46, 51, 56, 62, 69,
+       35, 40, 44, 48, 54, 59, 66, 73,
+       37, 42, 46, 51, 57, 63, 70, 77
+    },
+    /*qi=63.*/
+    {
+      142, 28, 31, 34, 38, 42, 47, 52,
+       27, 30, 33, 37, 41, 45, 50, 56,
+       28, 32, 35, 39, 43, 47, 52, 58,
+       30, 34, 37, 41, 45, 50, 55, 62,
+       31, 35, 39, 43, 48, 53, 59, 65,
+       33, 38, 41, 45, 50, 56, 62, 69,
+       35, 40, 43, 48, 53, 59, 65, 73,
+       37, 42, 46, 51, 56, 63, 69, 77
+    }
+  },
+  /*Cb matrices, 4:2:0 subsampling.*/
+  {
+    /*qi=0.*/
+    {
+      135, 30, 31, 33, 34, 36, 38, 40,
+       30, 32, 33, 35, 36, 38, 40, 42,
+       31, 33, 34, 36, 38, 40, 42, 44,
+       33, 35, 36, 38, 40, 42, 44, 46,
+       34, 36, 38, 40, 42, 44, 46, 49,
+       36, 38, 40, 42, 44, 46, 49, 51,
+       38, 40, 42, 44, 46, 49, 51, 54,
+       40, 42, 44, 46, 49, 51, 54, 57
+    },
+    /*qi=15.*/
+    {
+      135, 27, 28, 29, 31, 33, 35, 36,
+       27, 28, 30, 31, 33, 35, 37, 39,
+       28, 30, 31, 33, 35, 37, 39, 41,
+       29, 31, 33, 35, 37, 39, 41, 43,
+       31, 33, 35, 37, 39, 41, 43, 45,
+       33, 35, 37, 39, 41, 43, 45, 48,
+       35, 37, 39, 41, 43, 45, 48, 51,
+       36, 39, 41, 43, 45, 48, 51, 53
+    },
+    /*qi=31.*/
+    {
+      135, 26, 27, 28, 30, 32, 34, 36,
+       26, 28, 29, 30, 32, 34, 36, 38,
+       27, 29, 30, 32, 34, 36, 38, 40,
+       28, 30, 32, 34, 36, 38, 40, 42,
+       30, 32, 34, 36, 38, 40, 42, 44,
+       32, 34, 36, 38, 40, 42, 44, 47,
+       34, 36, 38, 40, 42, 44, 47, 50,
+       36, 38, 40, 42, 44, 47, 50, 52
+    },
+    /*qi=63.*/
+    {
+      135, 25, 27, 28, 30, 31, 33, 35,
+       25, 27, 29, 30, 32, 34, 36, 38,
+       27, 29, 30, 32, 33, 35, 37, 40,
+       28, 30, 32, 33, 35, 37, 39, 42,
+       30, 32, 33, 35, 37, 39, 42, 44,
+       31, 34, 35, 37, 39, 42, 44, 47,
+       33, 36, 37, 39, 42, 44, 47, 49,
+       35, 38, 40, 42, 44, 47, 49, 52
+    }
+  },
+  /*Cr matrices, 4:4:4 subsampling.*/
+  {
+    /*qi=0.*/
+    {
+      195, 46, 52, 59, 67, 77, 88,101,
+       46, 54, 60, 69, 78, 89,102,117,
+       52, 60, 68, 77, 87,100,114,131,
+       59, 69, 77, 87, 99,114,130,149,
+       67, 78, 87, 99,113,130,148,170,
+       77, 89,100,114,130,148,169,194,
+       88,102,114,130,148,169,193,222,
+      101,117,131,149,170,194,222,255
+    },
+    /*qi=15.*/
+    {
+      195, 42, 48, 55, 63, 72, 83, 96,
+       42, 50, 56, 64, 74, 85, 98,113,
+       48, 56, 63, 73, 83, 96,110,127,
+       55, 64, 73, 83, 95,110,126,146,
+       63, 74, 83, 95,110,126,145,167,
+       72, 85, 96,110,126,145,166,192,
+       83, 98,110,126,145,166,191,221,
+       96,113,127,146,167,192,221,255
+    },
+    /*qi=31.*/
+    {
+      195, 41, 47, 53, 61, 71, 81, 94,
+       41, 49, 55, 63, 73, 84, 96,111,
+       47, 55, 62, 71, 82, 95,109,126,
+       53, 63, 71, 82, 94,109,125,145,
+       61, 73, 82, 94,108,125,144,166,
+       71, 84, 95,109,125,144,166,192,
+       81, 96,109,125,144,166,191,220,
+       94,111,126,145,166,192,220,255
+    },
+    /*qi=63.*/
+    {
+      195, 41, 46, 53, 61, 70, 81, 94,
+       41, 48, 55, 63, 72, 83, 96,111,
+       46, 55, 62, 71, 82, 94,108,125,
+       53, 63, 71, 82, 94,108,125,144,
+       61, 72, 82, 94,108,125,144,166,
+       70, 83, 94,108,125,144,165,191,
+       81, 96,108,125,144,165,190,220,
+       94,111,125,144,166,191,220,255
+    }
+  },
+  /*Cr matrices, 4:2:2 subsampling.*/
+  {
+    /*qi=0.*/
+    {
+      183, 41, 43, 46, 49, 53, 57, 61,
+       44, 47, 50, 54, 58, 62, 66, 71,
+       49, 53, 56, 60, 64, 69, 74, 79,
+       56, 60, 64, 68, 73, 78, 84, 90,
+       63, 69, 73, 78, 83, 89, 96,103,
+       72, 79, 83, 89, 95,102,109,118,
+       83, 90, 95,102,109,117,125,134,
+       95,103,109,117,125,134,144,154
+    },
+    /*qi=15.*/
+    {
+      183, 37, 39, 42, 45, 49, 53, 57,
+       40, 43, 46, 50, 53, 58, 62, 67,
+       45, 49, 52, 56, 60, 65, 70, 75,
+       51, 56, 60, 64, 69, 74, 80, 86,
+       59, 64, 69, 74, 79, 85, 92, 99,
+       68, 74, 79, 85, 91, 98,106,114,
+       78, 85, 91, 97,105,113,121,131,
+       90, 98,105,112,121,130,140,151
+    },
+    /*qi=31.*/
+    {
+      183, 36, 38, 41, 44, 48, 51, 55,
+       39, 42, 45, 48, 52, 56, 61, 66,
+       44, 48, 51, 55, 59, 64, 69, 74,
+       50, 55, 59, 63, 68, 73, 79, 85,
+       58, 63, 67, 72, 78, 84, 91, 98,
+       66, 73, 78, 83, 90, 97,104,113,
+       76, 84, 89, 96,103,112,120,130,
+       88, 97,103,111,120,129,139,150
+    },
+    /*qi=63.*/
+    {
+      183, 35, 38, 41, 44, 47, 51, 55,
+       38, 42, 45, 48, 52, 56, 60, 65,
+       43, 47, 51, 54, 59, 63, 68, 74,
+       50, 54, 58, 63, 67, 73, 78, 85,
+       57, 63, 67, 72, 78, 84, 90, 98,
+       66, 72, 77, 83, 90, 97,104,112,
+       76, 83, 89, 96,103,111,120,129,
+       88, 96,103,111,119,129,139,150
+    }
+  },
+  /*Cr matrices, subsampling in the Y direction.*/
+  {
+    /*qi=0.*/
+    {
+      183, 44, 49, 56, 63, 72, 83, 95,
+       41, 47, 53, 60, 69, 79, 90,103,
+       43, 50, 56, 64, 73, 83, 95,109,
+       46, 54, 60, 68, 78, 89,102,117,
+       49, 58, 64, 73, 83, 95,109,125,
+       53, 62, 69, 78, 89,102,117,134,
+       57, 66, 74, 84, 96,109,125,144,
+       61, 71, 79, 90,103,118,134,154
+    },
+    /*qi=15.*/
+    {
+      183, 40, 45, 51, 59, 68, 78, 90,
+       37, 43, 49, 56, 64, 74, 85, 98,
+       39, 46, 52, 60, 69, 79, 91,105,
+       42, 50, 56, 64, 74, 85, 97,112,
+       45, 53, 60, 69, 79, 91,105,121,
+       49, 58, 65, 74, 85, 98,113,130,
+       53, 62, 70, 80, 92,106,121,140,
+       57, 67, 75, 86, 99,114,131,151
+    },
+    /*qi=31.*/
+    {
+      183, 39, 44, 50, 58, 66, 76, 88,
+       36, 42, 48, 55, 63, 73, 84, 97,
+       38, 45, 51, 59, 67, 78, 89,103,
+       41, 48, 55, 63, 72, 83, 96,111,
+       44, 52, 59, 68, 78, 90,103,120,
+       48, 56, 64, 73, 84, 97,112,129,
+       51, 61, 69, 79, 91,104,120,139,
+       55, 66, 74, 85, 98,113,130,150
+    },
+    /*qi=63.*/
+    {
+      183, 38, 43, 50, 57, 66, 76, 88,
+       35, 42, 47, 54, 63, 72, 83, 96,
+       38, 45, 51, 58, 67, 77, 89,103,
+       41, 48, 54, 63, 72, 83, 96,111,
+       44, 52, 59, 67, 78, 90,103,119,
+       47, 56, 63, 73, 84, 97,111,129,
+       51, 60, 68, 78, 90,104,120,139,
+       55, 65, 74, 85, 98,112,129,150
+    }
+  },
+  /*Cr matrices, 4:2:0 subsampling.*/
+  {
+    /*qi=0.*/
+    {
+      172, 38, 41, 44, 47, 50, 54, 58,
+       38, 42, 44, 47, 51, 54, 58, 62,
+       41, 44, 47, 50, 54, 57, 62, 66,
+       44, 47, 50, 54, 57, 61, 66, 71,
+       47, 51, 54, 57, 61, 66, 70, 76,
+       50, 54, 57, 61, 66, 70, 75, 81,
+       54, 58, 62, 66, 70, 75, 81, 87,
+       58, 62, 66, 71, 76, 81, 87, 93
+    },
+    /*qi=15.*/
+    {
+      172, 35, 37, 40, 43, 46, 49, 53,
+       35, 38, 40, 43, 47, 50, 54, 58,
+       37, 40, 43, 46, 50, 53, 57, 62,
+       40, 43, 46, 50, 53, 57, 62, 67,
+       43, 47, 50, 53, 57, 62, 66, 72,
+       46, 50, 53, 57, 62, 66, 71, 77,
+       49, 54, 57, 62, 66, 71, 77, 83,
+       53, 58, 62, 67, 72, 77, 83, 89
+    },
+    /*qi=31.*/
+    {
+      172, 34, 36, 38, 41, 45, 48, 52,
+       34, 37, 39, 42, 45, 49, 53, 57,
+       36, 39, 42, 45, 48, 52, 56, 61,
+       38, 42, 45, 48, 52, 56, 61, 65,
+       41, 45, 48, 52, 56, 61, 65, 70,
+       45, 49, 52, 56, 61, 65, 70, 76,
+       48, 53, 56, 61, 65, 70, 76, 82,
+       52, 57, 61, 65, 70, 76, 82, 88
+    },
+    /*qi=63.*/
+    {
+      172, 33, 35, 38, 41, 44, 48, 52,
+       33, 36, 39, 42, 45, 49, 52, 57,
+       35, 39, 41, 45, 48, 52, 56, 60,
+       38, 42, 45, 48, 52, 56, 60, 65,
+       41, 45, 48, 52, 56, 60, 65, 70,
+       44, 49, 52, 56, 60, 65, 70, 76,
+       48, 52, 56, 60, 65, 70, 75, 81,
+       52, 57, 60, 65, 70, 76, 81, 88
+    }
+  }
+};
+
+const th_quant_info OC_DEF_QUANT_INFO[4]={
+  {
+    {
+        15,  14,  13,  13,  12,  12,  11,  11,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   5,
+         5,   5,   4,   4,   4,   4,   4,   3,
+         3,   3,   3,   3,   3,   3,   2,   2,
+         2,   2,   2,   2,   2,   2,   2,   1,
+         1,   1,   1,   1,   1,   1,   1,   1,
+         1,   1,   1,   1,   1,   1,   1,   1
+    },
+    {
+        71,  68,  65,  64,  62,  59,  57,  55,
+        53,  51,  50,  48,  46,  44,  43,  41,
+        40,  38,  36,  35,  33,  32,  31,  29,
+        29,  27,  26,  25,  24,  23,  22,  21,
+        20,  19,  19,  18,  17,  16,  16,  15,
+        14,  14,  13,  12,  12,  11,  11,  10,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   1
+    },
+    {
+        77,  74,  71,  68,  65,  62,  60,  57,
+        55,  52,  50,  48,  46,  44,  42,  40,
+        39,  37,  35,  34,  33,  31,  30,  29,
+        27,  26,  25,  24,  23,  22,  21,  20,
+        19,  19,  18,  17,  16,  16,  15,  14,
+        14,  13,  13,  12,  12,  11,  11,  10,
+        10,   9,   9,   8,   8,   8,   7,   7,
+         7,   7,   6,   6,   6,   6,   5,   2
+    },
+    {
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[4]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[8]}
+      },
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[4]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[8]}
+      }
+    }
+  },
+  {
+    {
+        15,  14,  13,  13,  12,  12,  11,  11,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   5,
+         5,   5,   4,   4,   4,   4,   4,   3,
+         3,   3,   3,   3,   3,   3,   2,   2,
+         2,   2,   2,   2,   2,   2,   2,   1,
+         1,   1,   1,   1,   1,   1,   1,   1,
+         1,   1,   1,   1,   1,   1,   1,   1
+    },
+    {
+        71,  68,  65,  64,  62,  59,  57,  55,
+        53,  51,  50,  48,  46,  44,  43,  41,
+        40,  38,  36,  35,  33,  32,  31,  29,
+        29,  27,  26,  25,  24,  23,  22,  21,
+        20,  19,  19,  18,  17,  16,  16,  15,
+        14,  14,  13,  12,  12,  11,  11,  10,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   1
+    },
+    {
+        77,  74,  71,  68,  65,  62,  60,  57,
+        55,  52,  50,  48,  46,  44,  42,  40,
+        39,  37,  35,  34,  33,  31,  30,  29,
+        27,  26,  25,  24,  23,  22,  21,  20,
+        19,  19,  18,  17,  16,  16,  15,  14,
+        14,  13,  13,  12,  12,  11,  11,  10,
+        10,   9,   9,   8,   8,   8,   7,   7,
+         7,   7,   6,   6,   6,   6,   5,   2
+    },
+    {
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[3]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[7]}
+      },
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[3]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[7]}
+      }
+    }
+  },
+  {
+    {
+        15,  14,  13,  13,  12,  12,  11,  11,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   5,
+         5,   5,   4,   4,   4,   4,   4,   3,
+         3,   3,   3,   3,   3,   3,   2,   2,
+         2,   2,   2,   2,   2,   2,   2,   1,
+         1,   1,   1,   1,   1,   1,   1,   1,
+         1,   1,   1,   1,   1,   1,   1,   1
+    },
+    {
+        71,  68,  65,  64,  62,  59,  57,  55,
+        53,  51,  50,  48,  46,  44,  43,  41,
+        40,  38,  36,  35,  33,  32,  31,  29,
+        29,  27,  26,  25,  24,  23,  22,  21,
+        20,  19,  19,  18,  17,  16,  16,  15,
+        14,  14,  13,  12,  12,  11,  11,  10,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   1
+    },
+    {
+        77,  74,  71,  68,  65,  62,  60,  57,
+        55,  52,  50,  48,  46,  44,  42,  40,
+        39,  37,  35,  34,  33,  31,  30,  29,
+        27,  26,  25,  24,  23,  22,  21,  20,
+        19,  19,  18,  17,  16,  16,  15,  14,
+        14,  13,  13,  12,  12,  11,  11,  10,
+        10,   9,   9,   8,   8,   8,   7,   7,
+         7,   7,   6,   6,   6,   6,   5,   2
+    },
+    {
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[2]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[6]}
+      },
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[2]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[6]}
+      }
+    }
+  },
+  {
+    {
+        15,  14,  13,  13,  12,  12,  11,  11,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   5,
+         5,   5,   4,   4,   4,   4,   4,   3,
+         3,   3,   3,   3,   3,   3,   2,   2,
+         2,   2,   2,   2,   2,   2,   2,   1,
+         1,   1,   1,   1,   1,   1,   1,   1,
+         1,   1,   1,   1,   1,   1,   1,   1
+    },
+    {
+        71,  68,  65,  64,  62,  59,  57,  55,
+        53,  51,  50,  48,  46,  44,  43,  41,
+        40,  38,  36,  35,  33,  32,  31,  29,
+        29,  27,  26,  25,  24,  23,  22,  21,
+        20,  19,  19,  18,  17,  16,  16,  15,
+        14,  14,  13,  12,  12,  11,  11,  10,
+        10,  10,   9,   9,   8,   8,   8,   7,
+         7,   7,   6,   6,   6,   6,   5,   1
+    },
+    {
+        77,  74,  71,  68,  65,  62,  60,  57,
+        55,  52,  50,  48,  46,  44,  42,  40,
+        39,  37,  35,  34,  33,  31,  30,  29,
+        27,  26,  25,  24,  23,  22,  21,  20,
+        19,  19,  18,  17,  16,  16,  15,  14,
+        14,  13,  13,  12,  12,  11,  11,  10,
+        10,   9,   9,   8,   8,   8,   7,   7,
+         7,   7,   6,   6,   6,   6,   5,   2
+    },
+    {
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[1]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[5]}
+      },
+      {
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[0]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[1]},
+        {3,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[5]}
+      }
+    }
+  }
+};
+
+
+void oc_quant_params_pack(oggpack_buffer *_opb,const th_quant_info *_qinfo){
+  const th_quant_ranges *qranges;
+  const th_quant_base   *base_mats[2*3*64];
+  int                    indices[2][3][64];
+  int                    nbase_mats;
+  int                    nbits;
+  int                    ci;
+  int                    qi;
+  int                    qri;
+  int                    qti;
+  int                    pli;
+  int                    qtj;
+  int                    plj;
+  int                    bmi;
+  int                    i;
+  /*323 bits for the defaults.*/
+  /*Unlike the scale tables, we can't assume the maximum value will be in
+     index 0, so search for it here.*/
+  i=_qinfo->loop_filter_limits[0];
+  for(qi=1;qi<64;qi++)i=OC_MAXI(i,_qinfo->loop_filter_limits[qi]);
+  nbits=oc_ilog(i);
+  oggpackB_write(_opb,nbits,3);
+  for(qi=0;qi<64;qi++){
+    oggpackB_write(_opb,_qinfo->loop_filter_limits[qi],nbits);
+  }
+  /*452 bits for the defaults, 580 for VP3.*/
+  nbits=OC_MAXI(oc_ilog(_qinfo->ac_scale[0]),1);
+  oggpackB_write(_opb,nbits-1,4);
+  for(qi=0;qi<64;qi++)oggpackB_write(_opb,_qinfo->ac_scale[qi],nbits);
+  /*260 bits for the defaults, 516 for VP3.*/
+  nbits=OC_MAXI(oc_ilog(_qinfo->dc_scale[0]),1);
+  oggpackB_write(_opb,nbits-1,4);
+  for(qi=0;qi<64;qi++)oggpackB_write(_opb,_qinfo->dc_scale[qi],nbits);
+  /*Consolidate any duplicate base matrices.*/
+  nbase_mats=0;
+  for(qti=0;qti<2;qti++)for(pli=0;pli<3;pli++){
+    qranges=_qinfo->qi_ranges[qti]+pli;
+    for(qri=0;qri<=qranges->nranges;qri++){
+      for(bmi=0;;bmi++){
+        if(bmi>=nbase_mats){
+          base_mats[bmi]=qranges->base_matrices+qri;
+          indices[qti][pli][qri]=nbase_mats++;
+          break;
+        }
+        else if(memcmp(base_mats[bmi][0],qranges->base_matrices[qri],
+         sizeof(base_mats[bmi][0]))==0){
+          indices[qti][pli][qri]=bmi;
+          break;
+        }
+      }
+    }
+  }
+  /*Write out the list of unique base matrices.
+    6153 bits for our default matrices, 1545 bits for VP3 matrices.*/
+  oggpackB_write(_opb,nbase_mats-1,9);
+  for(bmi=0;bmi<nbase_mats;bmi++){
+    for(ci=0;ci<64;ci++)oggpackB_write(_opb,base_mats[bmi][0][ci],8);
+  }
+  /*Now store quant ranges and their associated indices into the base matrix
+     list.
+    236 bits for our default matrices, 46 bits for VP3 matrices.*/
+  nbits=oc_ilog(nbase_mats-1);
+  for(i=0;i<6;i++){
+    qti=i/3;
+    pli=i%3;
+    qranges=_qinfo->qi_ranges[qti]+pli;
+    if(i>0){
+      if(qti>0){
+        if(qranges->nranges==_qinfo->qi_ranges[qti-1][pli].nranges&&
+         memcmp(qranges->sizes,_qinfo->qi_ranges[qti-1][pli].sizes,
+         qranges->nranges*sizeof(qranges->sizes[0]))==0&&
+         memcmp(indices[qti][pli],indices[qti-1][pli],
+         (qranges->nranges+1)*sizeof(indices[qti][pli][0]))==0){
+          oggpackB_write(_opb,1,2);
+          continue;
+        }
+      }
+      qtj=(i-1)/3;
+      plj=(i-1)%3;
+      if(qranges->nranges==_qinfo->qi_ranges[qtj][plj].nranges&&
+       memcmp(qranges->sizes,_qinfo->qi_ranges[qtj][plj].sizes,
+       qranges->nranges*sizeof(qranges->sizes[0]))==0&&
+       memcmp(indices[qti][pli],indices[qtj][plj],
+       (qranges->nranges+1)*sizeof(indices[qti][pli][0]))==0){
+        oggpackB_write(_opb,0,1+(qti>0));
+        continue;
+      }
+      oggpackB_write(_opb,1,1);
+    }
+    oggpackB_write(_opb,indices[qti][pli][0],nbits);
+    for(qi=qri=0;qi<63;qri++){
+      oggpackB_write(_opb,qranges->sizes[qri]-1,oc_ilog(62-qi));
+      qi+=qranges->sizes[qri];
+      oggpackB_write(_opb,indices[qti][pli][qri+1],nbits);
+    }
+  }
+}
+
+
+
+/*See comments at oc_dequant_tables_init() for how the quantization tables'
+   storage should be initialized.*/
+void oc_enquant_tables_init(oc_quant_table *_dequant[2][3],
+ oc_quant_table *_enquant[2][3],const th_quant_info *_qinfo){
+  int qti;
+  int pli;
+  /*Initialize the dequantization tables first.*/
+  oc_dequant_tables_init(_dequant,NULL,_qinfo);
+  /*Derive the quantization tables directly from the dequantization tables.*/
+  for(qti=0;qti<2;qti++)for(pli=0;pli<3;pli++){
+    int qi;
+    /*These simple checks help us improve cache coherency later.*/
+    if(pli>0&&_dequant[qti][pli]==_dequant[qti][pli-1]){
+      _enquant[qti][pli]=_enquant[qti][pli-1];
+      continue;
+    }
+    if(qti>0&&_dequant[qti][pli]==_dequant[qti-1][pli]){
+      _enquant[qti][pli]=_enquant[qti-1][pli];
+      continue;
+    }
+    for(qi=0;qi<64;qi++){
+      int ci;
+      /*All of that VP3.2 floating point code has been implemented as integer
+         code with exact precision.
+        I.e., (ogg_uint16_t)(1.0/q*OC_FQUANT_SCALE+0.5) has become
+         (2*OC_FQUANT_SCALE+q)/(q<<1).*/
+      for(ci=0;ci<64;ci++){
+        ogg_uint32_t q;
+        q=_dequant[qti][pli][qi][ci];
+        _enquant[qti][pli][qi][ci]=(ogg_uint16_t)(
+         (2*OC_FQUANT_SCALE+q)/(q<<1));
+      }
+    }
+  }
+}

Added: trunk/theora-exp/lib/enquant.h
===================================================================
--- trunk/theora-exp/lib/enquant.h	                        (rev 0)
+++ trunk/theora-exp/lib/enquant.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,25 @@
+#if !defined(_enquant_H)
+# define _enquant_H (1)
+# include "quant.h"
+
+/*The amount to scale the forward quantizer value by.*/
+#define OC_FQUANT_SCALE ((ogg_uint32_t)1<<OC_FQUANT_SHIFT)
+/*The amount to add to the scaled forward quantizer for rounding.*/
+#define OC_FQUANT_ROUND (1<<OC_FQUANT_SHIFT-1)
+/*The amount to shift the resulting product by.*/
+#define OC_FQUANT_SHIFT (16)
+
+
+
+/*The default quantization parameters used by VP3.1.*/
+extern const th_quant_info TH_VP31_QUANT_INFO;
+/*Our default quantization parameters.*/
+extern const th_quant_info OC_DEF_QUANT_INFO[4];
+
+
+
+void oc_quant_params_pack(oggpack_buffer *_opb,const th_quant_info *_qinfo);
+void oc_enquant_tables_init(oc_quant_table *_dequant[2][3],
+ oc_quant_table *_enquant[2][3],const th_quant_info *_qinfo);
+
+#endif

Added: trunk/theora-exp/lib/fdct.c
===================================================================
--- trunk/theora-exp/lib/fdct.c	                        (rev 0)
+++ trunk/theora-exp/lib/fdct.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,446 @@
+#include <stdlib.h>
+#include <string.h>
+#include "dct.h"
+#include "fdct.h"
+
+
+
+/*Performs a forward 8 point Type-II DCT transform.
+  The output is scaled by a factor of 2 from the orthonormal version of the
+   transform.
+  _y: The buffer to store the result in.
+      Data will be placed in every 8th entry (e.g., in a column of an 8x8
+       block).
+  _x: The input coefficients.
+      The first 8 entries are used (e.g., from a row of an 8x8 block).*/
+static void fdct8(ogg_int16_t *_y,const ogg_int16_t _x[8]){
+  ogg_int32_t t[9];
+  ogg_int32_t r;
+  /*Stage 1:*/
+  /*0-7 butterfly.*/
+  t[0]=_x[0]+(ogg_int32_t)_x[7];
+  /*1-6 butterfly.*/
+  t[1]=_x[1]+(ogg_int32_t)_x[6];
+  /*2-5 butterfly.*/
+  t[2]=_x[2]+(ogg_int32_t)_x[5];
+  /*3-4 butterfly.*/
+  t[3]=_x[3]+(ogg_int32_t)_x[4];
+  t[4]=_x[3]-(ogg_int32_t)_x[4];
+  t[5]=_x[2]-(ogg_int32_t)_x[5];
+  t[6]=_x[1]-(ogg_int32_t)_x[6];
+  t[7]=_x[0]-(ogg_int32_t)_x[7];
+  /*Stage 2:*/
+  /*0-3 butterfly.*/
+  r=t[0]+t[3];
+  t[3]=t[0]-t[3];
+  t[0]=r;
+  /*1-2 butterfly.*/
+  r=t[1]+t[2];
+  t[2]=t[1]-t[2];
+  t[1]=r;
+  /*6-5 butterfly.*/
+  r=t[6]-t[5];
+  t[6]=OC_DIV2_16(OC_C4S4*(t[6]+t[5]));
+  t[5]=OC_DIV2_16(OC_C4S4*r);
+  /*Stage 3:*/
+  /*4-5 butterfly.*/
+  r=t[4]+t[5];
+  t[5]=t[4]-t[5];
+  t[4]=r;
+  /*7-6 butterfly.*/
+  r=t[7]+t[6];
+  t[6]=t[7]-t[6];
+  t[7]=r;
+  /*0-1 butterfly.*/
+  _y[0<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C4S4*(t[0]+t[1])));
+  _y[4<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C4S4*(t[0]-t[1])));
+  /*3-2 rotation by 6pi/16*/
+  _y[2<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C2S6*t[3])+OC_DIV2_16(OC_C6S2*t[2]));
+  _y[6<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C6S2*t[3])-OC_DIV2_16(OC_C2S6*t[2]));
+  /*Stage 4:*/
+  /*7-4 rotation by 7pi/16*/
+  _y[1<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C1S7*t[7])+OC_DIV2_16(OC_C7S1*t[4]));
+  /*6-5 rotation by 3pi/16*/
+  _y[5<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C5S3*t[6])+OC_DIV2_16(OC_C3S5*t[5]));
+  _y[3<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C3S5*t[6])-OC_DIV2_16(OC_C5S3*t[5]));
+  _y[7<<3]=(ogg_int16_t)(OC_DIV2_16(OC_C7S1*t[7])-OC_DIV2_16(OC_C1S7*t[4]));
+}
+
+/*Performs a forward 8x8 Type-II DCT transform.
+  The output is scaled by a factor of 4 relative to the orthonormal version
+   of the transform.
+  _y: The buffer to store the result in.
+      This may be the same as _x.
+  _x: The input coefficients. */
+void oc_fdct8x8(ogg_int16_t _y[64],const ogg_int16_t _x[64]){
+  const ogg_int16_t *in;
+  ogg_int16_t       *end;
+  ogg_int16_t       *out;
+  ogg_int16_t        w[64];
+  /*Transform rows of x into columns of w.*/
+  for(in=_x,out=w,end=out+8;out<end;in+=8,out++)fdct8(out,in);
+  /*Transform rows of w into columns of y.*/
+  for(in=w,out=_y,end=out+8;out<end;in+=8,out++)fdct8(out,in);
+}
+
+/*Information needed to pad boundary blocks.
+  We multiply each row/column by an extension matrix that fills in the padding
+   values as a linear combination of the active values, so that an equivalent
+   number of coefficients are forced to zero.
+  This costs at most 16 multiplies, the same as a 1-D fDCT itself, and as
+   little as 7 multiplies.
+  We compute the extension matrices for every possible shape in advance, as
+   there are only 35.
+  The coefficients for all matrices are stored in a single array to take
+   advantage of the overlap and repetitiveness of many of the shapes.
+  A similar technique is applied to the offsets into this array.
+  This reduces the required table storage by about 48%.
+  See tools/extgen.c for details.
+  We could conceivably do the same for all 256 possible shapes.*/
+typedef struct oc_extension_info{
+  /*The mask of the active pixels in the shape.*/
+  short                     mask;
+  /*The number of active pixels in the shape.*/
+  short                     na;
+  /*The extension matrix.
+    This is (8-na)xna*/
+  const ogg_int32_t *const *ext;
+  /*The pixel indices: na active pixels followed by 8-na padding pixels.*/
+  unsigned char             pi[8];
+  /*The coefficient indices: na unconstrained coefficients followed by 8-na
+     coefficients to be forced to zero.*/
+  unsigned char             ci[8];
+}oc_extension_info;
+
+
+
+/*The precision at which the matrix coefficients are stored.*/
+#define OC_EXT_SHIFT (19)
+
+/*The number of shapes we need.*/
+#define OC_NSHAPES   (35)
+
+static const ogg_int32_t OC_EXT_COEFFS[231]={
+   0x80000,-0x1E085,-0x96FC9,-0x55871, 0x55871, 0x96FC9, 0x1E085, 0x96FC9,
+   0x55871,-0x55871,-0x96FC9,-0x1E085, 0x80000, 0x00000, 0x00000, 0x00000,
+   0x80000, 0x00000, 0x00000, 0x80000,-0x80000, 0x80000, 0x00000, 0x00000,
+   0x80000,-0x1E086, 0x1E086,-0x4F591,-0x55E37, 0x337C7, 0x8C148, 0x43448,
+   0x2266F, 0x43448, 0x8C148, 0x337C7,-0x55E37,-0x4F591,-0x75743, 0x4F591,
+   0x03B45,-0x1D29D, 0x929E0, 0x2CF2A, 0x929E0,-0x1D29D, 0x03B45, 0x4F591,
+  -0x75743, 0x11033, 0x7AEF5, 0x5224C,-0x209FA,-0x3D77A,-0x209FA, 0x5224C,
+   0x7AEF5, 0x11033, 0x668A4,-0x29124, 0x3A15B, 0x0E6BD,-0x05F98, 0x0E6BD,
+   0x3A15B,-0x29124, 0x668A4, 0x2A78F, 0x24019,-0x67F0F, 0x50F49, 0x4881E,
+   0x50F49,-0x67F0F, 0x24019, 0x2A78F,-0x06898, 0x27678, 0x5F220, 0x27678,
+  -0x06898, 0x1F910, 0x76C13,-0x16523, 0x76C13, 0x1F910, 0x9EB2C,-0x2E7B1,
+   0x0FC86,-0x2E7B1, 0x9EB2C, 0x4F594, 0x43452,-0x129E6, 0x43452, 0x4F594,
+  -0x0A8C0, 0x5D997, 0x2CF29, 0x5D997,-0x0A8C0, 0x30FBD,-0x0B7E5,-0x6AC38,
+  -0x153C8, 0x8B7E5, 0x4F043, 0x8B7E5,-0x153C8,-0x6AC38,-0x0B7E5, 0x30FBD,
+  -0x5A827, 0x153C8, 0x6AC38, 0x3C7A2, 0x1E085, 0x3C7A2, 0x6AC38, 0x153C8,
+  -0x5A827, 0x5A827, 0x6AC38, 0x153C8,-0x3C7A2,-0x1E085,-0x3C7A2, 0x153C8,
+   0x6AC38, 0x5A827, 0x30FBB, 0x4F045, 0x273D7,-0x273D7, 0x273D7, 0x1E08B,
+   0x61F75, 0x1E08B, 0x273D7,-0x273D7, 0x273D7, 0x4F045, 0x30FBB,-0x273D7,
+   0x273D7, 0x9E08B,-0x1E08B, 0x9E08B, 0x273D7,-0x273D7, 0x4F045, 0x30FBB,
+  -0x273D7, 0x273D7,-0x273D7, 0x30FBB, 0x4F045, 0x1FC86, 0x67AC8, 0x18538,
+  -0x1FC86, 0x18538, 0x67AC8, 0x1FC86, 0x45460,-0x1FC87, 0x1FC87, 0x3ABA0,
+   0x1FC87,-0x1FC87, 0x45460, 0x35052, 0x5586D,-0x0A8BF, 0x5586D, 0x35052,
+  -0x43EF2, 0x78F43, 0x4AFAE,-0x070BD, 0x3C10E, 0x3C10E,-0x070BD, 0x4AFAE,
+   0x78F43,-0x43EF2, 0x3C10E, 0x78F43,-0x35052, 0x78F43, 0x3C10E, 0x070BD,
+   0x236D6, 0x5586D, 0x236D6, 0x070BD,-0x07755, 0x3C79F, 0x4AFB6,-0x190D2,
+   0x4E11C, 0x9FC86, 0x153C4,-0x3504A, 0xAC38E, 0x08CBB, 0x1E086,-0x1E086,
+   0x80000, 0x08CBB, 0xAC38E,-0x3504A, 0x153C4, 0x9FC86, 0x4E11C,-0x190D2,
+   0x4AFB6, 0x3C79F,-0x07755,-0x5A818, 0xDA818,-0x5A818,-0x101C31, 0x181C31,
+  -0x101C31,-0xD0C67, 0x150C67,-0xD0C67,-0x7643F, 0xF643F,-0x7643F
+};
+
+static const ogg_int32_t *const OC_EXT_ROWS[96]={
+  OC_EXT_COEFFS+   0,OC_EXT_COEFFS+   0,OC_EXT_COEFFS+   0,OC_EXT_COEFFS+   0,
+  OC_EXT_COEFFS+   0,OC_EXT_COEFFS+   0,OC_EXT_COEFFS+   0,OC_EXT_COEFFS+   6,
+  OC_EXT_COEFFS+  27,OC_EXT_COEFFS+  38,OC_EXT_COEFFS+  43,OC_EXT_COEFFS+  32,
+  OC_EXT_COEFFS+  49,OC_EXT_COEFFS+  58,OC_EXT_COEFFS+  67,OC_EXT_COEFFS+  71,
+  OC_EXT_COEFFS+  62,OC_EXT_COEFFS+  53,OC_EXT_COEFFS+  12,OC_EXT_COEFFS+  15,
+  OC_EXT_COEFFS+  14,OC_EXT_COEFFS+  13,OC_EXT_COEFFS+  76,OC_EXT_COEFFS+  81,
+  OC_EXT_COEFFS+  86,OC_EXT_COEFFS+  91,OC_EXT_COEFFS+  96,OC_EXT_COEFFS+  98,
+  OC_EXT_COEFFS+  93,OC_EXT_COEFFS+  88,OC_EXT_COEFFS+  83,OC_EXT_COEFFS+  78,
+  OC_EXT_COEFFS+  12,OC_EXT_COEFFS+  15,OC_EXT_COEFFS+  15,OC_EXT_COEFFS+  12,
+  OC_EXT_COEFFS+  12,OC_EXT_COEFFS+  15,OC_EXT_COEFFS+  12,OC_EXT_COEFFS+  15,
+  OC_EXT_COEFFS+  15,OC_EXT_COEFFS+  12,OC_EXT_COEFFS+ 101,OC_EXT_COEFFS+ 106,
+  OC_EXT_COEFFS+ 112,OC_EXT_COEFFS+  16,OC_EXT_COEFFS+ 121,OC_EXT_COEFFS+ 125,
+  OC_EXT_COEFFS+  20,OC_EXT_COEFFS+ 116,OC_EXT_COEFFS+ 130,OC_EXT_COEFFS+ 133,
+  OC_EXT_COEFFS+ 143,OC_EXT_COEFFS+ 150,OC_EXT_COEFFS+ 157,OC_EXT_COEFFS+ 164,
+  OC_EXT_COEFFS+ 167,OC_EXT_COEFFS+ 160,OC_EXT_COEFFS+ 153,OC_EXT_COEFFS+ 146,
+  OC_EXT_COEFFS+ 136,OC_EXT_COEFFS+ 139,OC_EXT_COEFFS+ 171,OC_EXT_COEFFS+ 176,
+  OC_EXT_COEFFS+ 181,OC_EXT_COEFFS+ 186,OC_EXT_COEFFS+ 191,OC_EXT_COEFFS+ 196,
+  OC_EXT_COEFFS+ 201,OC_EXT_COEFFS+ 206,OC_EXT_COEFFS+ 209,OC_EXT_COEFFS+ 214,
+  OC_EXT_COEFFS+ 198,OC_EXT_COEFFS+ 203,OC_EXT_COEFFS+  24,OC_EXT_COEFFS+ 211,
+  OC_EXT_COEFFS+ 216,OC_EXT_COEFFS+ 193,OC_EXT_COEFFS+ 188,OC_EXT_COEFFS+ 178,
+  OC_EXT_COEFFS+ 183,OC_EXT_COEFFS+ 173,OC_EXT_COEFFS+ 219,OC_EXT_COEFFS+ 220,
+  OC_EXT_COEFFS+ 220,OC_EXT_COEFFS+  12,OC_EXT_COEFFS+  15,OC_EXT_COEFFS+ 219,
+  OC_EXT_COEFFS+ 219,OC_EXT_COEFFS+ 220,OC_EXT_COEFFS+ 222,OC_EXT_COEFFS+ 225,
+  OC_EXT_COEFFS+ 228,OC_EXT_COEFFS+ 229,OC_EXT_COEFFS+ 226,OC_EXT_COEFFS+ 223
+};
+
+static const oc_extension_info OC_EXTENSION_INFO[OC_NSHAPES]={
+  {0x7F,7,OC_EXT_ROWS+  0,{0,1,2,3,4,5,6,7},{0,1,2,4,5,6,7,3}},
+  {0xFE,7,OC_EXT_ROWS+  7,{1,2,3,4,5,6,7,0},{0,1,2,4,5,6,7,3}},
+  {0x3F,6,OC_EXT_ROWS+  8,{0,1,2,3,4,5,7,6},{0,1,3,4,6,7,5,2}},
+  {0xFC,6,OC_EXT_ROWS+ 10,{2,3,4,5,6,7,1,0},{0,1,3,4,6,7,5,2}},
+  {0x1F,5,OC_EXT_ROWS+ 12,{0,1,2,3,4,7,6,5},{0,2,3,5,7,6,4,1}},
+  {0xF8,5,OC_EXT_ROWS+ 15,{3,4,5,6,7,2,1,0},{0,2,3,5,7,6,4,1}},
+  {0x0F,4,OC_EXT_ROWS+ 18,{0,1,2,3,7,6,5,4},{0,2,4,6,7,5,3,1}},
+  {0xF0,4,OC_EXT_ROWS+ 18,{4,5,6,7,3,2,1,0},{0,2,4,6,7,5,3,1}},
+  {0x07,3,OC_EXT_ROWS+ 22,{0,1,2,7,6,5,4,3},{0,3,6,7,5,4,2,1}},
+  {0xE0,3,OC_EXT_ROWS+ 27,{5,6,7,4,3,2,1,0},{0,3,6,7,5,4,2,1}},
+  {0x03,2,OC_EXT_ROWS+ 32,{0,1,7,6,5,4,3,2},{0,4,7,6,5,3,2,1}},
+  {0xC0,2,OC_EXT_ROWS+ 32,{6,7,5,4,3,2,1,0},{0,4,7,6,5,3,2,1}},
+  {0x01,1,OC_EXT_ROWS+  0,{0,7,6,5,4,3,2,1},{0,7,6,5,4,3,2,1}},
+  {0x80,1,OC_EXT_ROWS+  0,{7,6,5,4,3,2,1,0},{0,7,6,5,4,3,2,1}},
+  {0x7E,6,OC_EXT_ROWS+ 42,{1,2,3,4,5,6,7,0},{0,1,2,5,6,7,4,3}},
+  {0x7C,5,OC_EXT_ROWS+ 44,{2,3,4,5,6,7,1,0},{0,1,4,5,7,6,3,2}},
+  {0x3E,5,OC_EXT_ROWS+ 47,{1,2,3,4,5,7,6,0},{0,1,4,5,7,6,3,2}},
+  {0x78,4,OC_EXT_ROWS+ 50,{3,4,5,6,7,2,1,0},{0,4,5,7,6,3,2,1}},
+  {0x3C,4,OC_EXT_ROWS+ 54,{2,3,4,5,7,6,1,0},{0,3,4,7,6,5,2,1}},
+  {0x1E,4,OC_EXT_ROWS+ 58,{1,2,3,4,7,6,5,0},{0,4,5,7,6,3,2,1}},
+  {0x70,3,OC_EXT_ROWS+ 62,{4,5,6,7,3,2,1,0},{0,5,7,6,4,3,2,1}},
+  {0x38,3,OC_EXT_ROWS+ 67,{3,4,5,7,6,2,1,0},{0,5,6,7,4,3,2,1}},
+  {0x1C,3,OC_EXT_ROWS+ 72,{2,3,4,7,6,5,1,0},{0,5,6,7,4,3,2,1}},
+  {0x0E,3,OC_EXT_ROWS+ 77,{1,2,3,7,6,5,4,0},{0,5,7,6,4,3,2,1}},
+  {0x60,2,OC_EXT_ROWS+ 82,{5,6,7,4,3,2,1,0},{0,2,7,6,5,4,3,1}},
+  {0x30,2,OC_EXT_ROWS+ 36,{4,5,7,6,3,2,1,0},{0,4,7,6,5,3,2,1}},
+  {0x18,2,OC_EXT_ROWS+ 90,{3,4,7,6,5,2,1,0},{0,1,7,6,5,4,3,2}},
+  {0x0C,2,OC_EXT_ROWS+ 34,{2,3,7,6,5,4,1,0},{0,4,7,6,5,3,2,1}},
+  {0x06,2,OC_EXT_ROWS+ 84,{1,2,7,6,5,4,3,0},{0,2,7,6,5,4,3,1}},
+  {0x40,1,OC_EXT_ROWS+  0,{6,7,5,4,3,2,1,0},{0,7,6,5,4,3,2,1}},
+  {0x20,1,OC_EXT_ROWS+  0,{5,7,6,4,3,2,1,0},{0,7,6,5,4,3,2,1}},
+  {0x10,1,OC_EXT_ROWS+  0,{4,7,6,5,3,2,1,0},{0,7,6,5,4,3,2,1}},
+  {0x08,1,OC_EXT_ROWS+  0,{3,7,6,5,4,2,1,0},{0,7,6,5,4,3,2,1}},
+  {0x04,1,OC_EXT_ROWS+  0,{2,7,6,5,4,3,1,0},{0,7,6,5,4,3,2,1}},
+  {0x02,1,OC_EXT_ROWS+  0,{1,7,6,5,4,3,2,0},{0,7,6,5,4,3,2,1}}
+};
+
+
+
+/*Pads a single row of a partial block and then performs a forward Type-II DCT
+   on the result.
+  The output is scaled by a factor of 2 from the orthonormal version of the
+   transform.
+  _y: The buffer to store the result in.
+      Data will be placed in every 8th entry (e.g., in a column of an 8x8
+       block).
+  _x: The input coefficients.
+      The first 8 entries are used (e.g., from a row of an 8x8 block).
+  _e: The extension information for the shape.*/
+static void fdct8_ext(ogg_int16_t *_y,ogg_int16_t _x[8],
+ const oc_extension_info *_e){
+  if(_e->na==1){
+    int ci;
+    /*While the branch below is still correct for shapes with na==1, we can
+       perform the entire transform with just 1 multiply in this case instead
+       of 23.*/
+    _y[0]=(ogg_int16_t)(OC_DIV2_16(OC_C4S4*(_x[_e->pi[0]]<<3)));
+    for(ci=8;ci<64;ci+=8)_y[ci]=0;
+  }
+  else{
+    int zpi;
+    int api;
+    int nz;
+    /*First multiply by the extension matrix to compute the padding values.*/
+    nz=8-_e->na;
+    for(zpi=0;zpi<nz;zpi++){
+      ogg_int32_t v;
+      v=0;
+      for(api=0;api<_e->na;api++)v+=_e->ext[zpi][api]*_x[_e->pi[api]];
+      _x[_e->pi[zpi+_e->na]]=
+       (ogg_int16_t)OC_DIV_ROUND_POW2(v,OC_EXT_SHIFT,1<<OC_EXT_SHIFT-1);
+    }
+    fdct8(_y,_x);
+  }
+}
+
+/*Performs a forward 8x8 Type-II DCT transform on blocks which overlap the
+   border of the picture region.
+  This method ONLY works with rectangular regions.
+  _border:      A description of which pixels are inside the border.
+  _y:           The buffer to store the result in.
+                This may be the same as _x.
+  _x:           The input coefficients.
+                Pixel values outside the border will be modified.*/
+void oc_fdct8x8_border(const oc_border_info *_border,ogg_int16_t _y[64],
+ ogg_int16_t _x[64]){
+  ogg_int16_t             *in;
+  ogg_int16_t             *end;
+  ogg_int16_t             *out;
+  ogg_int16_t              w[64];
+  ogg_int64_t              mask;
+  const oc_extension_info *rext;
+  const oc_extension_info *cext;
+  int                      rmask;
+  int                      cmask;
+  int                      ri;
+  /*Identify the shapes of the non-zero rows and columns.*/
+  rmask=cmask=0;
+  mask=_border->mask;
+  for(ri=0;ri<8;ri++){
+    rmask|=mask&0xFF;
+    cmask|=((mask&0xFF)!=0)<<ri;
+    mask>>=8;
+  }
+  /*Find the associated extension info for these shapes.*/
+  if(rmask==0xFF)rext=NULL;
+  else for(rext=OC_EXTENSION_INFO;rext->mask!=rmask;){
+    /*If we somehow can't find the shape, then just do an unpadded fDCT.
+      It won't be efficient, but it should still be correct.*/
+    if(++rext>=OC_EXTENSION_INFO+OC_NSHAPES){
+      oc_fdct8x8(_y,_x);
+      return;
+    }
+  }
+  if(cmask==0xFF)cext=NULL;
+  else for(cext=OC_EXTENSION_INFO;cext->mask!=cmask;){
+    /*If we somehow can't find the shape, then just do an unpadded fDCT.
+      It won't be efficient, but it should still be correct.*/
+    if(++cext>=OC_EXTENSION_INFO+OC_NSHAPES){
+      oc_fdct8x8(_y,_x);
+      return;
+    }
+  }
+  /*Transform the rows.
+    We can ignore zero rows without a problem.*/
+  if(rext==NULL)for(in=_x,out=w,end=out+8;out<end;in+=8,out++)fdct8(out,in);
+  else for(in=_x,out=w,end=out+8,ri=cmask;out<end;in+=8,out++,ri>>=1){
+    if(ri&1)fdct8_ext(out,in,rext);
+  }
+  /*Transform the columns.
+    We transform even columns that are supposedly zero, because rounding errors
+     may make them slightly non-zero, and this will give a more precise
+     reconstruction with very small quantizers.*/
+  if(cext==NULL)for(in=w,out=_y,end=out+8;out<end;in+=8,out++)fdct8(out,in);
+  else for(in=w,out=_y,end=out+8;out<end;in+=8,out++)fdct8_ext(out,in,cext);
+}
+
+/*Performs an fDCT on a given fragment.
+  _frag:     The fragment to perform the 2D DCT on.
+  _dct_vals: The output buffer for the DCT coefficients.
+  _ystride:  The Y stride of the plane the fragment belongs to.
+  _framei:   The picture buffer index to perform the DCT on.
+             Use OC_FRAME_IO for the current input frame.*/
+void oc_frag_intra_fdct(const oc_fragment *_frag,ogg_int16_t _dct_vals[64],
+ int _ystride,int _framei){
+  ogg_int16_t    pix_buf[64];
+  unsigned char *pixels;
+  int            pixi;
+  int            y;
+  int            x;
+  /*NOTE: 128 is subtracted from each pixel value to make it signed.
+    The original VP3 source claimed that, "this reduces the internal precision
+     requirments [sic] in the DCT transform."
+    This is of course not actually true.
+    The transform must still support input in the range [-255,255] to code
+     predicted fragments, since the same transform is used for both.
+    This actually _reduces_ the precision of the results, because larger
+     (absolute) values would have fewer significant bits chopped off when
+     rounding.
+    We're stuck with it, however.
+    At least it might reduce bias towards 0 when coding unpredicted DC
+     coefficients, but that's not what VP3 justified it with.*/
+  pixels=_frag->buffer[_framei];
+  /*For border fragments, only copy pixels that are in the displayable
+     region of the image.
+    The DCT function will compute optimal padding values for the other
+     pixels.*/
+  if(_frag->border!=NULL){
+    ogg_int64_t mask;
+    mask=_frag->border->mask;
+    for(pixi=y=0;y<8;y++){
+      for(x=0;x<8;x++,pixi++){
+        pix_buf[pixi]=(ogg_int16_t)(((int)mask&1)?pixels[x]-128:0);
+        /*This branchless code is (almost) equivalent to the previous line:
+            int pmask;
+            pmask=-(int)mask&1;
+            pix_buf[pixi]=(ogg_int16_t)(pmask&pixels[x]);
+          We don't use this code to allow the user to pass in a buffer that is
+           the exact size of the displayed image, not the size padded to a
+           multiple of 16.
+          In the latter case, we might segfault on pixels[x] if it is not
+           mapped to a valid page, even though we would discard the value
+           we were attempting to read.*/
+        mask>>=1;
+      }
+      pixels+=_ystride;
+    }
+    oc_fdct8x8_border(_frag->border,_dct_vals,pix_buf);
+  }
+  /*Otherwise, copy all the pixels in the fragment and do a normal DCT.*/
+  else{
+    for(pixi=y=0;y<8;y++){
+      for(x=0;x<8;x++,pixi++)pix_buf[pixi]=(ogg_int16_t)(pixels[x]-128);
+      pixels+=_ystride;
+    }
+    oc_fdct8x8(_dct_vals,pix_buf);
+  }
+}
+
+/*A pipline stage for applying an fDCT to each (non-motion compensated) block
+   in a frame.*/
+
+static int oc_fdct_pipe_start(oc_enc_pipe_stage *_stage){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=0;
+  return _stage->next!=NULL?(*_stage->next->pipe_start)(_stage->next):0;
+}
+
+/*Does the fDCTs.
+  This pipeline stage proceeds in a planar fashion.*/
+static int oc_fdct_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  int pli;
+  for(pli=0;pli<3;pli++){
+    int y_procd;
+    int y_avail;
+    /*Compute how far we can get in complete fragment rows.*/
+    y_procd=_stage->y_procd[pli];
+    y_avail=_y_avail[pli]&~7;
+    /*If that's farther than we've already gotten, do some fDCTs.*/
+    if(y_avail>y_procd){
+      oc_fragment_plane    *fplane;
+      oc_fragment          *frags;
+      oc_fragment          *frag_end;
+      oc_fragment_enc_info *efrags;
+      int                   ystride;
+      int                   yfrag0;
+      int                   yrows;
+      fplane=_stage->enc->state.fplanes+pli;
+      ystride=_stage->enc->state.input[pli].ystride;
+      yfrag0=fplane->froffset+(y_procd>>3)*fplane->nhfrags;
+      yrows=y_avail-y_procd>>3;
+      frags=_stage->enc->state.frags+yfrag0;
+      efrags=_stage->enc->frinfo+yfrag0;
+      do{
+        for(frag_end=frags+fplane->nhfrags;frags<frag_end;frags++,efrags++){
+          oc_frag_intra_fdct(frags,efrags->dct_coeffs,ystride,OC_FRAME_IO);
+        }
+        _stage->y_procd[pli]+=8;
+        if(_stage->next!=NULL){
+          int ret;
+          ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+          if(ret<0)return ret;
+        }
+      }
+      while(--yrows);
+    }
+  }
+  return 0;
+}
+
+static int oc_fdct_pipe_end(oc_enc_pipe_stage *_stage){
+  return _stage->next!=NULL?(*_stage->next->pipe_end)(_stage->next):0;
+}
+
+
+/*Initialize the fDCT stage of the pipeline.
+  _enc: The encoding context.*/
+void oc_fdct_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_fdct_pipe_start;
+  _stage->pipe_proc=oc_fdct_pipe_process;
+  _stage->pipe_end=oc_fdct_pipe_end;
+}

Added: trunk/theora-exp/lib/fdct.h
===================================================================
--- trunk/theora-exp/lib/fdct.h	                        (rev 0)
+++ trunk/theora-exp/lib/fdct.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,13 @@
+/*Forward DCT transforms.*/
+#include "encint.h"
+#if !defined(_fdct_H)
+# define _fdct_H (1)
+
+void oc_fdct8x8(ogg_int16_t _y[64],const ogg_int16_t _x[64]);
+void oc_fdct8x8_border(const oc_border_info *_border,ogg_int16_t _y[64],
+ ogg_int16_t _x[64]);
+void oc_frag_intra_fdct(const oc_fragment *_frag,ogg_int16_t _dct_vals[64],
+ int _ystride,int _framei);
+void oc_fdct_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc);
+
+#endif

Added: trunk/theora-exp/lib/fragment.c
===================================================================
--- trunk/theora-exp/lib/fragment.c	                        (rev 0)
+++ trunk/theora-exp/lib/fragment.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,182 @@
+#include "internal.h"
+
+void oc_frag_recon_intra(const oc_theora_state *_state,unsigned char *_dst,
+ int _dst_ystride,const ogg_int16_t *_residue){
+  _state->opt_vtable.frag_recon_intra(_dst,_dst_ystride,_residue);
+}
+
+void oc_frag_recon_intra_c(unsigned char *_dst,int _dst_ystride,
+ const ogg_int16_t *_residue){
+  int i;
+  for(i=0;i<8;i++){
+    int j;
+    for(j=0;j<8;j++){
+      int c;
+      c=*_residue+++128;
+      _dst[j]=OC_CLAMP255(c);
+    }
+    _dst+=_dst_ystride;
+  }
+}
+
+void oc_frag_recon_inter(const oc_theora_state *_state,unsigned char *_dst,
+ int _dst_ystride,const unsigned char *_src,int _src_ystride,
+ const ogg_int16_t *_residue){
+  _state->opt_vtable.frag_recon_inter(_dst,_dst_ystride,_src,_src_ystride,
+   _residue);
+}
+
+void oc_frag_recon_inter_c(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src,int _src_ystride,const ogg_int16_t *_residue){
+  int i;
+  for(i=0;i<8;i++){
+    int j;
+    for(j=0;j<8;j++){
+      int c;
+      c=*_residue+++_src[j];
+      _dst[j]=OC_CLAMP255(c);
+    }
+    _dst+=_dst_ystride;
+    _src+=_src_ystride;
+  }
+}
+
+void oc_frag_recon_inter2(const oc_theora_state *_state,unsigned char *_dst,
+ int _dst_ystride,const unsigned char *_src1,int _src1_ystride,
+ const unsigned char *_src2,int _src2_ystride,const ogg_int16_t *_residue){
+  _state->opt_vtable.frag_recon_inter2(_dst,_dst_ystride,_src1,_src1_ystride,
+   _src2,_src2_ystride,_residue);
+}
+
+void oc_frag_recon_inter2_c(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src1,int _src1_ystride,const unsigned char *_src2,
+ int _src2_ystride,const ogg_int16_t *_residue){
+  int i;
+  for(i=0;i<8;i++){
+    int j;
+    for(j=0;j<8;j++){
+      int c;
+      c=*_residue+++((int)_src1[j]+_src2[j]>>1);
+      _dst[j]=OC_CLAMP255(c);
+    }
+    _dst+=_dst_ystride;
+    _src1+=_src1_ystride;
+    _src2+=_src2_ystride;
+  }
+}
+
+/*Computes the predicted DC value for the given fragment.
+  This requires that the fully decoded DC values be available for the left,
+   upper-left, upper, and upper-right fragments (if they exist).
+  _frag:      The fragment to predict the DC value for.
+  _fplane:    The fragment plane the fragment belongs to.
+  _x:         The x-coordinate of the fragment.
+  _y:         The y-coordinate of the fragment.
+  _pred_last: The last fully-decoded DC value for each predictor frame
+               (OC_FRAME_GOLD, OC_FRAME_PREV and OC_FRAME_SELF).
+              This should be initialized to 0's for the first fragment in each
+               color plane.
+  Return: The predicted DC value for this fragment.*/
+int oc_frag_pred_dc(const oc_fragment *_frag,
+ const oc_fragment_plane *_fplane,int _x,int _y,int _pred_last[3]){
+  static const int PRED_SCALE[16][4]={
+    /*0*/
+    {0,0,0,0},
+    /*OC_PL*/
+    {1,0,0,0},
+    /*OC_PUL*/
+    {1,0,0,0},
+    /*OC_PL|OC_PUL*/
+    {1,0,0,0},
+    /*OC_PU*/
+    {1,0,0,0},
+    /*OC_PL|OC_PU*/
+    {1,1,0,0},
+    /*OC_PUL|OC_PU*/
+    {0,1,0,0},
+    /*OC_PL|OC_PUL|PC_PU*/
+    {29,-26,29,0},
+    /*OC_PUR*/
+    {1,0,0,0},
+    /*OC_PL|OC_PUR*/
+    {75,53,0,0},
+    /*OC_PUL|OC_PUR*/
+    {1,1,0,0},
+    /*OC_PL|OC_PUL|OC_PUR*/
+    {75,0,53,0},
+    /*OC_PU|OC_PUR*/
+    {1,0,0,0},
+    /*OC_PL|OC_PU|OC_PUR*/
+    {75,0,53,0},
+    /*OC_PUL|OC_PU|OC_PUR*/
+    {3,10,3,0},
+    /*OC_PL|OC_PUL|OC_PU|OC_PUR*/
+    {29,-26,29,0}
+  };
+  static const int PRED_SHIFT[16]={0,0,0,0,0,1,0,5,0,7,1,7,0,7,4,5};
+  static const int PRED_RMASK[16]={0,0,0,0,0,1,0,31,0,127,1,127,0,127,15,31};
+  static const int BC_MASK[8]={
+    /*No boundary condition.*/
+    OC_PL|OC_PUL|OC_PU|OC_PUR,
+    /*Left column.*/
+    OC_PU|OC_PUR,
+    /*Top row.*/
+    OC_PL,
+    /*Top row, left column.*/
+    0,
+    /*Right column.*/
+    OC_PL|OC_PUL|OC_PU,
+    /*Right and left column.*/
+    OC_PU,
+    /*Top row, right column.*/
+    OC_PL,
+    /*Top row, right and left column.*/
+    0
+  };
+  /*Predictor fragments, left, up-left, up, up-right.*/
+  const oc_fragment *predfr[4];
+  /*The frame used for prediction for this fragment.*/
+  int                pred_frame;
+  /*The boundary condition flags.*/
+  int                bc;
+  /*DC predictor values: left, up-left, up, up-right, missing values
+     skipped.*/
+  int                p[4];
+  /*Predictor count.*/
+  int                np;
+  /*Which predictor constants to use.*/
+  int                pflags;
+  /*The predicted DC value.*/
+  int                ret;
+  int                i;
+  pred_frame=OC_FRAME_FOR_MODE[_frag->mbmode];
+  bc=(_x==0)+((_y==0)<<1)+((_x+1==_fplane->nhfrags)<<2);
+  predfr[0]=_frag-1;
+  predfr[1]=_frag-_fplane->nhfrags-1;
+  predfr[2]=predfr[1]+1;
+  predfr[3]=predfr[2]+1;
+  np=0;
+  pflags=0;
+  for(i=0;i<4;i++){
+    int pflag;
+    pflag=1<<i;
+    if((BC_MASK[bc]&pflag)&&predfr[i]->coded&&
+     OC_FRAME_FOR_MODE[predfr[i]->mbmode]==pred_frame){
+      p[np++]=predfr[i]->dc;
+      pflags|=pflag;
+    }
+  }
+  if(pflags==0)return _pred_last[pred_frame];
+  else{
+    ret=PRED_SCALE[pflags][0]*p[0];
+    /*LOOP VECTORIZES.*/
+    for(i=1;i<np;i++)ret+=PRED_SCALE[pflags][i]*p[i];
+    ret=OC_DIV_POW2(ret,PRED_SHIFT[pflags],PRED_RMASK[pflags]);
+  }
+  if((pflags&(OC_PL|OC_PUL|OC_PU))==(OC_PL|OC_PUL|OC_PU)){
+    if(abs(ret-p[2])>128)ret=p[2];
+    else if(abs(ret-p[0])>128)ret=p[0];
+    else if(abs(ret-p[1])>128)ret=p[1];
+  }
+  return ret;
+}

Added: trunk/theora-exp/lib/huffdec.c
===================================================================
--- trunk/theora-exp/lib/huffdec.c	                        (rev 0)
+++ trunk/theora-exp/lib/huffdec.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,261 @@
+#include <stdlib.h>
+#include <ogg/ogg.h>
+#include "huffdec.h"
+#include "decint.h"
+
+
+/*The ANSI offsetof macro is broken on some platforms (e.g., older DECs).*/
+#define _ogg_offsetof(_type,_field)\
+ ((size_t)((char *)&((_type *)0)->_field-(char *)0))
+
+/*The log_2 of the size of a lookup table is allowed to grow to relative to
+   the number of unique nodes it contains.
+  E.g., if OC_HUFF_SLUSH is 2, then at most 75% of the space in the tree is
+   wasted (each node will have an amortized cost of at most 20 bytes when using
+   4-byte pointers).
+  Larger numbers can decode tokens with fewer read operations, while smaller
+   numbers may save more space (requiring as little as 8 bytes amortized per
+   node, though there will be more nodes).
+  With a sample file:
+  32233473 read calls are required when no tree collapsing is done (100.0%).
+  19269269 read calls are required when OC_HUFF_SLUSH is 0 (59.8%).
+  11144969 read calls are required when OC_HUFF_SLUSH is 1 (34.6%).
+  10538563 read calls are required when OC_HUFF_SLUSH is 2 (32.7%).
+  10192578 read calls are required when OC_HUFF_SLUSH is 3 (31.6%).
+  Since a value of 1 gets us the vast majority of the speed-up with only a
+   small amount of wasted memory, this is what we use.*/
+#define OC_HUFF_SLUSH (1)
+
+
+/*Allocates a Huffman tree node that represents a subtree of depth _nbits.
+  _nbits: The depth of the subtree.
+          If this is 0, the node is a leaf node.
+          Otherwise 1<<_nbits pointers are allocated for children.
+  Return: The newly allocated and fully initialized Huffman tree node.*/
+static oc_huff_node *oc_huff_node_alloc(int _nbits){
+  oc_huff_node *ret;
+  size_t        size;
+  size=_ogg_offsetof(oc_huff_node,nodes);
+  if(_nbits>0)size+=sizeof(oc_huff_node *)*(1<<_nbits);
+  ret=_ogg_calloc(1,size);
+  ret->nbits=(unsigned char)_nbits;
+  return ret;
+}
+
+/*Frees a Huffman tree node allocated with oc_huf_node_alloc.
+  _node: The node to free.
+         This may be NULL.*/
+static void oc_huff_node_free(oc_huff_node *_node){
+  free(_node);
+}
+
+/*Frees the memory used by a Huffman tree.
+  _node: The Huffman tree to free.
+         This may be NULL.*/
+static void oc_huff_tree_free(oc_huff_node *_node){
+  if(_node==NULL)return;
+  if(_node->nbits){
+    int nchildren;
+    int i;
+    int inext;
+    nchildren=1<<_node->nbits;
+    for(i=0;i<nchildren;i=inext){
+      inext=i+(1<<_node->nbits-_node->nodes[i]->depth);
+      oc_huff_tree_free(_node->nodes[i]);
+    }
+  }
+  oc_huff_node_free(_node);
+}
+
+/*Unpacks a sub-tree from the given buffer.
+  _opb:    The buffer to unpack from.
+  _binode: The location to store a pointer to the sub-tree in.
+  _depth:  The current depth of the tree.
+           This is used to prevent infinite recursion.
+  Return: 0 on success, or a negative value on error.*/
+static int oc_huff_tree_unpack(oggpack_buffer *_opb,
+ oc_huff_node **_binode,int _depth){
+  oc_huff_node *binode;
+  long          bits;
+  /*Prevent infinite recursion.*/
+  if(++_depth>32)return TH_EBADHEADER;
+  if(theora_read1(_opb,&bits)<0)return TH_EBADHEADER;
+  /*Read an internal node:*/
+  if(!bits){
+    int ret;
+    binode=oc_huff_node_alloc(1);
+    binode->depth=(unsigned char)(_depth>1);
+    ret=oc_huff_tree_unpack(_opb,binode->nodes,_depth);
+    if(ret>=0)ret=oc_huff_tree_unpack(_opb,binode->nodes+1,_depth);
+    if(ret<0){
+      oc_huff_tree_free(binode);
+      return ret;
+    }
+  }
+  /*Read a leaf node:*/
+  else{
+    if(theora_read(_opb,OC_NDCT_TOKEN_BITS,&bits)<0)return TH_EBADHEADER;
+    binode=oc_huff_node_alloc(0);
+    binode->depth=(unsigned char)(_depth>1);
+    binode->token=(unsigned char)bits;
+  }
+  *_binode=binode;
+  return 0;
+}
+
+/*Finds the depth of shortest branch of the given sub-tree.
+  The tree must be binary.
+  _binode: The root of the given sub-tree.
+           _binode->nbits must be 0 or 1.
+  Return: The smallest depth of a leaf node in this sub-tree.
+          0 indicates this sub-tree is a leaf node.*/
+static int oc_huff_tree_mindepth(oc_huff_node *_binode){
+  int depth0;
+  int depth1;
+  if(_binode->nbits==0)return 0;
+  depth0=oc_huff_tree_mindepth(_binode->nodes[0]);
+  depth1=oc_huff_tree_mindepth(_binode->nodes[1]);
+  return OC_MINI(depth0,depth1)+1;
+}
+
+/*Finds the number of internal nodes at a given depth, plus the number of
+   leaves at that depth or shallower.
+  The tree must be binary.
+  _binode: The root of the given sub-tree.
+           _binode->nbits must be 0 or 1.
+  Return: The number of entries that would be contained in a jump table of the
+           given depth.*/
+static int oc_huff_tree_occupancy(oc_huff_node *_binode,int _depth){
+  if(_binode->nbits==0||_depth<=0)return 1;
+  else{
+    return oc_huff_tree_occupancy(_binode->nodes[0],_depth-1)+
+     oc_huff_tree_occupancy(_binode->nodes[1],_depth-1);
+  }
+}
+
+static oc_huff_node *oc_huff_tree_collapse(oc_huff_node *_binode);
+
+/*Fills the given nodes table with all the children in the sub-tree at the
+   given depth.
+  The nodes in the sub-tree with a depth less than that stored in the table
+   are freed.
+  The sub-tree must be binary and complete up until the given depth.
+  _nodes:  The nodes table to fill.
+  _binode: The root of the sub-tree to fill it with.
+           _binode->nbits must be 0 or 1.
+  _level:  The current level in the table.
+           0 indicates that the current node should be stored, regardless of
+            whether it is a leaf node or an internal node.
+  _depth:  The depth of the nodes to fill the table with, relative to their
+            parent.*/
+static void oc_huff_node_fill(oc_huff_node **_nodes,
+ oc_huff_node *_binode,int _level,int _depth){
+  if(_level<=0||_binode->nbits==0){
+    int i;
+    _binode->depth=(unsigned char)(_depth-_level);
+    _nodes[0]=oc_huff_tree_collapse(_binode);
+    for(i=1;i<1<<_level;i++)_nodes[i]=_nodes[0];
+  }
+  else{
+    _level--;
+    oc_huff_node_fill(_nodes,_binode->nodes[0],_level,_depth);
+    oc_huff_node_fill(_nodes+(1<<_level),_binode->nodes[1],_level,_depth);
+    oc_huff_node_free(_binode);
+  }
+}
+
+/*Finds the largest complete sub-tree rooted at the current node and collapses
+   it into a single node.
+  This procedure is then applied recursively to all the children of that node.
+  _binode: The root of the sub-tree to collapse.
+           _binode->nbits must be 0 or 1.
+  Return: The new root of the collapsed sub-tree.*/
+static oc_huff_node *oc_huff_tree_collapse(oc_huff_node *_binode){
+  oc_huff_node *root;
+  int           mindepth;
+  int           depth;
+  int           loccupancy;
+  int           occupancy;
+  depth=mindepth=oc_huff_tree_mindepth(_binode);
+  occupancy=1<<mindepth;
+  do{
+    loccupancy=occupancy;
+    occupancy=oc_huff_tree_occupancy(_binode,++depth);
+  }
+  while(occupancy>loccupancy&&occupancy>=1<<OC_MAXI(depth-OC_HUFF_SLUSH,0));
+  depth--;
+  if(depth<=1)return _binode;
+  root=oc_huff_node_alloc(depth);
+  root->depth=_binode->depth;
+  oc_huff_node_fill(root->nodes,_binode,depth,depth);
+  return root;
+}
+
+/*Makes a copy of the given Huffman tree.
+  _node: The Huffman tree to copy.
+  Return: The copy of the Huffman tree.*/
+static oc_huff_node *oc_huff_tree_copy(const oc_huff_node *_node){
+  oc_huff_node *ret;
+  ret=oc_huff_node_alloc(_node->nbits);
+  ret->depth=_node->depth;
+  if(_node->nbits){
+    int nchildren;
+    int i;
+    int inext;
+    nchildren=1<<_node->nbits;
+    for(i=0;i<nchildren;){
+      ret->nodes[i]=oc_huff_tree_copy(_node->nodes[i]);
+      inext=i+(1<<_node->nbits-ret->nodes[i]->depth);
+      while(++i<inext)ret->nodes[i]=ret->nodes[i-1];
+    }
+  }
+  else ret->token=_node->token;
+  return ret;
+}
+
+/*Unpacks a set of Huffman trees, and reduces them to a collapsed
+   representation.
+  _opb:   The buffer to unpack the trees from.
+  _nodes: The table to fill with the Huffman trees.
+  Return: 0 on success, or a negative value on error.*/
+int oc_huff_trees_unpack(oggpack_buffer *_opb,
+ oc_huff_node *_nodes[TH_NHUFFMAN_TABLES]){
+  int i;
+  for(i=0;i<TH_NHUFFMAN_TABLES;i++){
+    int ret;
+    ret=oc_huff_tree_unpack(_opb,_nodes+i,0);
+    if(ret<0)return ret;
+    _nodes[i]=oc_huff_tree_collapse(_nodes[i]);
+  }
+  return 0;
+}
+
+/*Makes a copy of the given set of Huffman trees.
+  _dst: The array to store the copy in.
+  _src: The array of trees to copy.*/
+void oc_huff_trees_copy(oc_huff_node *_dst[TH_NHUFFMAN_TABLES],
+ const oc_huff_node *const _src[TH_NHUFFMAN_TABLES]){
+  int i;
+  for(i=0;i<TH_NHUFFMAN_TABLES;i++)_dst[i]=oc_huff_tree_copy(_src[i]);
+}
+
+/*Frees the memory used by a set of Huffman trees.
+  _nodes: The array of trees to free.*/
+void oc_huff_trees_clear(oc_huff_node *_nodes[TH_NHUFFMAN_TABLES]){
+  int i;
+  for(i=0;i<TH_NHUFFMAN_TABLES;i++)oc_huff_tree_free(_nodes[i]);
+}
+
+/*Unpacks a single token using the given Huffman tree.
+  _opb:  The buffer to unpack the token from.
+  _node: The tree to unpack the token with.
+  Return: The token value.*/
+int oc_huff_token_decode(oggpack_buffer *_opb,const oc_huff_node *_node){
+  long bits;
+  while(_node->nbits!=0){
+    theora_look(_opb,_node->nbits,&bits);
+    _node=_node->nodes[bits];
+    oggpackB_adv(_opb,_node->depth);
+  }
+  return _node->token;
+}

Added: trunk/theora-exp/lib/huffdec.h
===================================================================
--- trunk/theora-exp/lib/huffdec.h	                        (rev 0)
+++ trunk/theora-exp/lib/huffdec.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,74 @@
+#if !defined(_huffdec_H)
+# define _huffdec_H (1)
+# include "huffman.h"
+
+
+
+typedef struct oc_huff_node oc_huff_node;
+
+/*A node in the Huffman tree.
+  Instead of storing every branching in the tree, subtrees can be collapsed
+   into one node, with a table of size 1<<nbits pointing directly to its
+   descedents nbits levels down.
+  This allows more than one bit to be read at a time, and avoids following all
+   the intermediate branches with next to no increased code complexity once
+   the collapsed tree has been built.
+  We do _not_ require that a subtree be complete to be collapsed, but instead
+   store duplicate pointers in the table, and record the actual depth of the
+   node below its parent.
+  This tells us the number of bits to advance the stream after reaching it.
+
+  This turns out to be equivalent to the method described in \cite{Hash95},
+   without the requirement that codewords be sorted by length.
+  If the codewords were sorted by length (so-called ``canonical-codes''), they
+   could be decoded much faster via either Lindell and Moffat's approach or
+   Hashemian's Condensed Huffman Code approach, the latter of which has an
+   extremely small memory footprint.
+  We can't use Choueka et al.'s finite state machine approach, which is
+   extremely fast, because we can't allow multiple symbols to be output at a
+   time; the codebook can and does change between symbols.
+  It also has very large memory requirements, which impairs cache coherency.
+
+  @ARTICLE{Hash95,
+    author="Reza Hashemian",
+    title="Memory Efficient and High-Speed Search {Huffman} Coding",
+    journal="{IEEE} Transactions on Communications",
+    volume=43,
+    number=10,
+    pages="2576--2581",
+    month=Oct,
+    year=1995
+  }*/
+struct oc_huff_node{
+  /*The number of bits of the code needed to descend through this node.
+    0 indicates a leaf node.
+    Otherwise there are 1<<nbits nodes in the nodes table, which can be
+     indexed by reading nbits bits from the stream.*/
+  unsigned char  nbits;
+  /*The value of a token stored in a leaf node.
+    The value in non-leaf nodes is undefined.*/
+  unsigned char  token;
+  /*The depth of the current node, relative to its parent in the collapsed
+     tree.
+    This can be less than its parent's nbits value, in which case there are
+     1<<nbits-depth copies of this node in the table, and the bitstream should
+     only be advanced depth bits after reaching this node.*/
+  unsigned char  depth;
+  /*The table of child nodes.
+    The ACTUAL size of this array is 1<<nbits, despite what the declaration
+     below claims.
+    The exception is that for leaf nodes the size is 0.*/
+  oc_huff_node  *nodes[1];
+};
+
+
+
+int oc_huff_trees_unpack(oggpack_buffer *_opb,
+ oc_huff_node *_nodes[TH_NHUFFMAN_TABLES]);
+void oc_huff_trees_copy(oc_huff_node *_dst[TH_NHUFFMAN_TABLES],
+ const oc_huff_node *const _src[TH_NHUFFMAN_TABLES]);
+void oc_huff_trees_clear(oc_huff_node *_nodes[TH_NHUFFMAN_TABLES]);
+int oc_huff_token_decode(oggpack_buffer *_opb,const oc_huff_node *_node);
+
+
+#endif

Added: trunk/theora-exp/lib/huffenc.c
===================================================================
--- trunk/theora-exp/lib/huffenc.c	                        (rev 0)
+++ trunk/theora-exp/lib/huffenc.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,910 @@
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+#include "huffenc.h"
+
+
+
+/*The default Huffman codes used for VP3.1.*/
+const th_huff_code TH_VP31_HUFF_CODES[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]={
+  {
+    {0x002D, 6},{0x0026, 7},{0x0166, 9},{0x004E, 8},
+    {0x02CE,10},{0x059E,11},{0x027D,11},{0x0008, 5},
+    {0x04F9,12},{0x000F, 4},{0x000E, 4},{0x001B, 5},
+    {0x0006, 4},{0x0008, 4},{0x0005, 4},{0x001A, 5},
+    {0x0015, 5},{0x0007, 4},{0x000C, 4},{0x0001, 3},
+    {0x0000, 3},{0x0009, 4},{0x0017, 5},{0x0029, 6},
+    {0x0028, 6},{0x00B2, 8},{0x04F8,12},{0x059F,11},
+    {0x009E, 9},{0x013F,10},{0x0012, 6},{0x0058, 7}
+  },
+  {
+    {0x0010, 5},{0x0047, 7},{0x01FF, 9},{0x008C, 8},
+    {0x03FC,10},{0x046A,11},{0x0469,11},{0x0022, 6},
+    {0x11A1,13},{0x000E, 4},{0x000D, 4},{0x0004, 4},
+    {0x0005, 4},{0x0009, 4},{0x0006, 4},{0x001E, 5},
+    {0x0016, 5},{0x0007, 4},{0x000C, 4},{0x0001, 3},
+    {0x0000, 3},{0x000A, 4},{0x0017, 5},{0x007D, 7},
+    {0x007E, 7},{0x011B, 9},{0x08D1,12},{0x03FD,10},
+    {0x046B,11},{0x11A0,13},{0x007C, 7},{0x00FE, 8}
+  },
+  {
+    {0x0016, 5},{0x0020, 6},{0x0086, 8},{0x0087, 8},
+    {0x0367,10},{0x06CC,11},{0x06CB,11},{0x006E, 7},
+    {0x366D,14},{0x000F, 4},{0x000E, 4},{0x0004, 4},
+    {0x0005, 4},{0x000A, 4},{0x0006, 4},{0x001A, 5},
+    {0x0011, 5},{0x0007, 4},{0x000C, 4},{0x0001, 3},
+    {0x0000, 3},{0x0009, 4},{0x0017, 5},{0x006F, 7},
+    {0x006D, 7},{0x0364,10},{0x0D9A,12},{0x06CA,11},
+    {0x1B37,13},{0x366C,14},{0x0042, 7},{0x00D8, 8}
+  },
+  {
+    {0x0000, 4},{0x002D, 6},{0x00F7, 8},{0x0058, 7},
+    {0x0167, 9},{0x02CB,10},{0x02CA,10},{0x000E, 6},
+    {0x1661,13},{0x0003, 3},{0x0002, 3},{0x0008, 4},
+    {0x0009, 4},{0x000D, 4},{0x0002, 4},{0x001F, 5},
+    {0x0017, 5},{0x0001, 4},{0x000C, 4},{0x000E, 4},
+    {0x000A, 4},{0x0006, 5},{0x0078, 7},{0x000F, 6},
+    {0x007A, 7},{0x0164, 9},{0x0599,11},{0x02CD,10},
+    {0x0B31,12},{0x1660,13},{0x0079, 7},{0x00F6, 8}
+  },
+  {
+    {0x0003, 4},{0x003C, 6},{0x000F, 7},{0x007A, 7},
+    {0x001D, 8},{0x0020, 9},{0x0072,10},{0x0006, 6},
+    {0x0399,13},{0x0004, 3},{0x0005, 3},{0x0005, 4},
+    {0x0006, 4},{0x000E, 4},{0x0004, 4},{0x0000, 4},
+    {0x0019, 5},{0x0002, 4},{0x000D, 4},{0x0007, 4},
+    {0x001F, 5},{0x0030, 6},{0x0011, 8},{0x0031, 6},
+    {0x0005, 6},{0x0021, 9},{0x00E7,11},{0x0038, 9},
+    {0x01CD,12},{0x0398,13},{0x007B, 7},{0x0009, 7}
+  },
+  {
+    {0x0009, 4},{0x0002, 5},{0x0074, 7},{0x0007, 6},
+    {0x00EC, 8},{0x00D1, 9},{0x01A6,10},{0x0006, 6},
+    {0x0D21,13},{0x0005, 3},{0x0006, 3},{0x0008, 4},
+    {0x0007, 4},{0x000F, 4},{0x0004, 4},{0x0000, 4},
+    {0x001C, 5},{0x0002, 4},{0x0005, 4},{0x0003, 4},
+    {0x000C, 5},{0x0035, 7},{0x01A7,10},{0x001B, 6},
+    {0x0077, 7},{0x01A5,10},{0x0349,11},{0x00D0, 9},
+    {0x0691,12},{0x0D20,13},{0x0075, 7},{0x00ED, 8}
+  },
+  {
+    {0x000A, 4},{0x000C, 5},{0x0012, 6},{0x001B, 6},
+    {0x00B7, 8},{0x016C, 9},{0x0099, 9},{0x005A, 7},
+    {0x16D8,13},{0x0007, 3},{0x0006, 3},{0x0009, 4},
+    {0x0008, 4},{0x0000, 3},{0x0005, 4},{0x0017, 5},
+    {0x000E, 5},{0x0002, 4},{0x0003, 4},{0x000F, 5},
+    {0x001A, 6},{0x004D, 8},{0x2DB3,14},{0x002C, 6},
+    {0x0011, 6},{0x02DA,10},{0x05B7,11},{0x0098, 9},
+    {0x0B6D,12},{0x2DB2,14},{0x0010, 6},{0x0027, 7}
+  },
+  {
+    {0x000D, 4},{0x000F, 5},{0x001D, 6},{0x0008, 5},
+    {0x0051, 7},{0x0056, 8},{0x00AF, 9},{0x002A, 7},
+    {0x148A,13},{0x0007, 3},{0x0000, 2},{0x0008, 4},
+    {0x0009, 4},{0x000C, 4},{0x0006, 4},{0x0017, 5},
+    {0x000B, 5},{0x0016, 5},{0x0015, 5},{0x0009, 5},
+    {0x0050, 7},{0x00AE, 9},{0x2917,14},{0x001C, 6},
+    {0x0014, 6},{0x0290,10},{0x0523,11},{0x0149, 9},
+    {0x0A44,12},{0x2916,14},{0x0053, 7},{0x00A5, 8}
+  },
+  {
+    {0x0001, 4},{0x001D, 6},{0x00F5, 8},{0x00F4, 8},
+    {0x024D,10},{0x0499,11},{0x0498,11},{0x0001, 5},
+    {0x0021, 6},{0x0006, 3},{0x0005, 3},{0x0006, 4},
+    {0x0005, 4},{0x0002, 4},{0x0007, 5},{0x0025, 6},
+    {0x007B, 7},{0x001C, 6},{0x0020, 6},{0x000D, 6},
+    {0x0048, 7},{0x0092, 8},{0x0127, 9},{0x000E, 4},
+    {0x0004, 4},{0x0011, 5},{0x000C, 6},{0x003C, 6},
+    {0x000F, 5},{0x0000, 5},{0x001F, 5},{0x0013, 5}
+  },
+  {
+    {0x0005, 4},{0x003C, 6},{0x0040, 7},{0x000D, 7},
+    {0x0031, 9},{0x0061,10},{0x0060,10},{0x0002, 5},
+    {0x00F5, 8},{0x0006, 3},{0x0005, 3},{0x0007, 4},
+    {0x0006, 4},{0x0002, 4},{0x0009, 5},{0x0025, 6},
+    {0x0007, 6},{0x0021, 6},{0x0024, 6},{0x0010, 6},
+    {0x0041, 7},{0x00F4, 8},{0x0019, 8},{0x000E, 4},
+    {0x0003, 4},{0x0011, 5},{0x0011, 6},{0x003F, 6},
+    {0x003E, 6},{0x007B, 7},{0x0000, 4},{0x0013, 5}
+  },
+  {
+    {0x000A, 4},{0x0007, 5},{0x0001, 6},{0x0009, 6},
+    {0x0131, 9},{0x0261,10},{0x0260,10},{0x0015, 6},
+    {0x0001, 7},{0x0007, 3},{0x0006, 3},{0x0008, 4},
+    {0x0007, 4},{0x0006, 4},{0x0012, 5},{0x002F, 6},
+    {0x0014, 6},{0x0027, 6},{0x002D, 6},{0x0016, 6},
+    {0x004D, 7},{0x0099, 8},{0x0000, 7},{0x0004, 4},
+    {0x0001, 4},{0x0005, 5},{0x0017, 6},{0x002E, 6},
+    {0x002C, 6},{0x0008, 6},{0x0006, 5},{0x0001, 5}
+  },
+  {
+    {0x0000, 3},{0x000E, 5},{0x0017, 6},{0x002A, 6},
+    {0x0010, 7},{0x00F9,10},{0x00F8,10},{0x001E, 7},
+    {0x003F, 8},{0x0007, 3},{0x0006, 3},{0x0009, 4},
+    {0x0008, 4},{0x0006, 4},{0x000F, 5},{0x0005, 5},
+    {0x0016, 6},{0x0029, 6},{0x002B, 6},{0x0015, 6},
+    {0x0050, 7},{0x0011, 7},{0x007D, 9},{0x0004, 4},
+    {0x0017, 5},{0x0006, 5},{0x0014, 6},{0x002C, 6},
+    {0x002D, 6},{0x000E, 6},{0x0009, 6},{0x0051, 7}
+  },
+  {
+    {0x0002, 3},{0x0018, 5},{0x002F, 6},{0x000D, 5},
+    {0x0053, 7},{0x0295,10},{0x0294,10},{0x00A4, 8},
+    {0x007C, 8},{0x0000, 2},{0x0007, 3},{0x0009, 4},
+    {0x0008, 4},{0x001B, 5},{0x000C, 5},{0x0028, 6},
+    {0x006A, 7},{0x001E, 6},{0x001D, 6},{0x0069, 7},
+    {0x00D7, 8},{0x007D, 8},{0x014B, 9},{0x0019, 5},
+    {0x0016, 5},{0x002E, 6},{0x001C, 6},{0x002B, 6},
+    {0x002A, 6},{0x0068, 7},{0x003F, 7},{0x00D6, 8}
+  },
+  {
+    {0x0002, 3},{0x001B, 5},{0x000C, 5},{0x0018, 5},
+    {0x0029, 6},{0x007F, 8},{0x02F0,10},{0x0198, 9},
+    {0x0179, 9},{0x0000, 2},{0x0007, 3},{0x0009, 4},
+    {0x0008, 4},{0x001A, 5},{0x000D, 5},{0x002A, 6},
+    {0x0064, 7},{0x001E, 6},{0x0067, 7},{0x005F, 7},
+    {0x00CD, 8},{0x007E, 8},{0x02F1,10},{0x0016, 5},
+    {0x000E, 5},{0x002E, 6},{0x0065, 7},{0x002B, 6},
+    {0x0028, 6},{0x003E, 7},{0x00BD, 8},{0x0199, 9}
+  },
+  {
+    {0x0002, 3},{0x0007, 4},{0x0016, 5},{0x0006, 4},
+    {0x0036, 6},{0x005C, 7},{0x015D, 9},{0x015C, 9},
+    {0x02BF,10},{0x0000, 2},{0x0007, 3},{0x0009, 4},
+    {0x0008, 4},{0x0018, 5},{0x0034, 6},{0x002A, 6},
+    {0x005E, 7},{0x006A, 7},{0x0064, 7},{0x005D, 7},
+    {0x00CB, 8},{0x00AD, 8},{0x02BE,10},{0x0014, 5},
+    {0x0033, 6},{0x006E, 7},{0x005F, 7},{0x006F, 7},
+    {0x006B, 7},{0x00CA, 8},{0x00AC, 8},{0x015E, 9}
+  },
+  {
+    {0x000F, 4},{0x001D, 5},{0x0018, 5},{0x000B, 4},
+    {0x0019, 5},{0x0029, 6},{0x00D6, 8},{0x0551,11},
+    {0x0AA1,12},{0x0001, 2},{0x0000, 2},{0x0009, 4},
+    {0x0008, 4},{0x001B, 5},{0x0038, 6},{0x0028, 6},
+    {0x0057, 7},{0x006A, 7},{0x0068, 7},{0x0056, 7},
+    {0x00E5, 8},{0x0155, 9},{0x0AA0,12},{0x0073, 7},
+    {0x0069, 7},{0x00D7, 8},{0x00AB, 8},{0x00E4, 8},
+    {0x00A9, 8},{0x0151, 9},{0x0150, 9},{0x02A9,10}
+  },
+  {
+    {0x0008, 5},{0x0025, 7},{0x017A, 9},{0x02F7,10},
+    {0x0BDB,12},{0x17B4,13},{0x2F6B,14},{0x001D, 5},
+    {0x2F6A,14},{0x0008, 4},{0x0007, 4},{0x0001, 4},
+    {0x0002, 4},{0x000A, 4},{0x0006, 4},{0x0000, 4},
+    {0x001C, 5},{0x0009, 4},{0x000D, 4},{0x000F, 4},
+    {0x000C, 4},{0x0003, 4},{0x000A, 5},{0x0016, 5},
+    {0x0013, 6},{0x005D, 7},{0x0024, 7},{0x00BC, 8},
+    {0x005C, 7},{0x05EC,11},{0x000B, 5},{0x005F, 7}
+  },
+  {
+    {0x000F, 5},{0x0010, 6},{0x004B, 8},{0x00C6, 8},
+    {0x031D,10},{0x0C71,12},{0x0C70,12},{0x0001, 4},
+    {0x0C73,12},{0x0008, 4},{0x0009, 4},{0x0002, 4},
+    {0x0003, 4},{0x000B, 4},{0x0006, 4},{0x0000, 4},
+    {0x001C, 5},{0x0005, 4},{0x000D, 4},{0x000F, 4},
+    {0x000A, 4},{0x0019, 5},{0x0013, 6},{0x001D, 5},
+    {0x0030, 6},{0x0062, 7},{0x0024, 7},{0x004A, 8},
+    {0x018F, 9},{0x0C72,12},{0x000E, 5},{0x0011, 6}
+  },
+  {
+    {0x001B, 5},{0x0003, 6},{0x008D, 8},{0x0040, 7},
+    {0x0239,10},{0x0471,11},{0x08E0,12},{0x0003, 4},
+    {0x11C3,13},{0x000A, 4},{0x0009, 4},{0x0004, 4},
+    {0x0005, 4},{0x000E, 4},{0x0007, 4},{0x0001, 4},
+    {0x001E, 5},{0x0006, 4},{0x000C, 4},{0x000B, 4},
+    {0x0002, 4},{0x0000, 5},{0x0041, 7},{0x001F, 5},
+    {0x0022, 6},{0x0002, 6},{0x008F, 8},{0x008C, 8},
+    {0x011D, 9},{0x11C2,13},{0x001A, 5},{0x0021, 6}
+  },
+  {
+    {0x001F, 5},{0x0003, 6},{0x0003, 7},{0x0043, 7},
+    {0x000B, 9},{0x0015,10},{0x0051,12},{0x0003, 4},
+    {0x0050,12},{0x000D, 4},{0x000C, 4},{0x0004, 4},
+    {0x0006, 4},{0x000E, 4},{0x000A, 4},{0x0001, 4},
+    {0x001E, 5},{0x0005, 4},{0x0009, 4},{0x0007, 4},
+    {0x0011, 5},{0x0002, 6},{0x0004, 8},{0x0002, 4},
+    {0x002D, 6},{0x0020, 6},{0x0042, 7},{0x0001, 7},
+    {0x0000, 7},{0x0029,11},{0x0017, 5},{0x002C, 6}
+  },
+  {
+    {0x0003, 4},{0x001F, 6},{0x003A, 7},{0x005D, 7},
+    {0x0173, 9},{0x02E4,10},{0x172D,13},{0x0004, 4},
+    {0x172C,13},{0x000F, 4},{0x000E, 4},{0x0009, 4},
+    {0x0008, 4},{0x000C, 4},{0x000A, 4},{0x0001, 4},
+    {0x0016, 5},{0x0002, 4},{0x0005, 4},{0x001A, 5},
+    {0x002F, 6},{0x0038, 7},{0x05CA,11},{0x0006, 4},
+    {0x0037, 6},{0x001E, 6},{0x003B, 7},{0x0039, 7},
+    {0x00B8, 8},{0x0B97,12},{0x0000, 4},{0x0036, 6}
+  },
+  {
+    {0x0006, 4},{0x0037, 6},{0x005D, 7},{0x000C, 6},
+    {0x00B9, 8},{0x02E3,10},{0x05C4,11},{0x0004, 4},
+    {0x1715,13},{0x0000, 3},{0x000F, 4},{0x0008, 4},
+    {0x0007, 4},{0x000C, 4},{0x0009, 4},{0x001D, 5},
+    {0x0016, 5},{0x001C, 5},{0x001A, 5},{0x000B, 5},
+    {0x005E, 7},{0x0170, 9},{0x1714,13},{0x000A, 4},
+    {0x000A, 5},{0x0036, 6},{0x005F, 7},{0x001B, 7},
+    {0x001A, 7},{0x0B8B,12},{0x0002, 4},{0x0007, 5}
+  },
+  {
+    {0x000C, 4},{0x000B, 5},{0x0079, 7},{0x0022, 6},
+    {0x00F0, 8},{0x0119, 9},{0x0230,10},{0x001D, 5},
+    {0x08C4,12},{0x0001, 3},{0x0000, 3},{0x000A, 4},
+    {0x0009, 4},{0x000B, 4},{0x0007, 4},{0x001C, 5},
+    {0x003D, 6},{0x000D, 5},{0x0008, 5},{0x0015, 6},
+    {0x008D, 8},{0x118B,13},{0x118A,13},{0x000D, 4},
+    {0x0010, 5},{0x0009, 5},{0x0014, 6},{0x0047, 7},
+    {0x00F1, 8},{0x0463,11},{0x001F, 5},{0x000C, 5}
+  },
+  {
+    {0x0000, 3},{0x001A, 5},{0x0033, 6},{0x000C, 5},
+    {0x0046, 7},{0x01E3, 9},{0x03C5,10},{0x0017, 5},
+    {0x1E21,13},{0x0002, 3},{0x0001, 3},{0x0009, 4},
+    {0x000A, 4},{0x0007, 4},{0x001B, 5},{0x003D, 6},
+    {0x001B, 6},{0x0022, 6},{0x0079, 7},{0x00F0, 8},
+    {0x1E20,13},{0x1E23,13},{0x1E22,13},{0x000E, 4},
+    {0x0016, 5},{0x0018, 5},{0x0032, 6},{0x001A, 6},
+    {0x0047, 7},{0x0789,11},{0x001F, 5},{0x0010, 5}
+  },
+  {
+    {0x001D, 5},{0x0061, 7},{0x004E, 8},{0x009E, 9},
+    {0x027C,11},{0x09F5,13},{0x09F4,13},{0x0003, 4},
+    {0x0060, 7},{0x0000, 3},{0x000F, 4},{0x000B, 4},
+    {0x000A, 4},{0x0009, 4},{0x0005, 4},{0x000D, 5},
+    {0x0031, 6},{0x0008, 5},{0x0038, 6},{0x0012, 6},
+    {0x0026, 7},{0x013F,10},{0x04FB,12},{0x000D, 4},
+    {0x0002, 4},{0x000C, 5},{0x0039, 6},{0x001C, 6},
+    {0x000F, 5},{0x001D, 6},{0x0008, 4},{0x0019, 5}
+  },
+  {
+    {0x0007, 4},{0x0019, 6},{0x00AB, 8},{0x00AA, 8},
+    {0x0119,10},{0x0461,12},{0x0460,12},{0x001B, 5},
+    {0x0047, 8},{0x0001, 3},{0x0000, 3},{0x000C, 4},
+    {0x000B, 4},{0x0009, 4},{0x0005, 4},{0x000D, 5},
+    {0x0035, 6},{0x003D, 6},{0x003C, 6},{0x0018, 6},
+    {0x0022, 7},{0x008D, 9},{0x0231,11},{0x000E, 4},
+    {0x001F, 5},{0x0009, 5},{0x002B, 6},{0x0010, 6},
+    {0x0034, 6},{0x0054, 7},{0x0008, 4},{0x0014, 5}
+  },
+  {
+    {0x000C, 4},{0x0005, 5},{0x0008, 6},{0x005B, 7},
+    {0x004D, 9},{0x0131,11},{0x0261,12},{0x001A, 5},
+    {0x0012, 7},{0x0000, 3},{0x000F, 4},{0x000A, 4},
+    {0x0009, 4},{0x0006, 4},{0x001B, 5},{0x0006, 5},
+    {0x001C, 6},{0x002C, 6},{0x0015, 6},{0x005A, 7},
+    {0x0027, 8},{0x0099,10},{0x0260,12},{0x000E, 4},
+    {0x0004, 4},{0x000F, 5},{0x0007, 5},{0x001D, 6},
+    {0x000B, 5},{0x0014, 6},{0x0008, 4},{0x0017, 5}
+  },
+  {
+    {0x000F, 4},{0x0013, 5},{0x0075, 7},{0x0024, 6},
+    {0x0095, 8},{0x0251,10},{0x04A0,11},{0x0010, 5},
+    {0x00C8, 8},{0x0002, 3},{0x0001, 3},{0x0001, 4},
+    {0x0000, 4},{0x001A, 5},{0x0011, 5},{0x002C, 6},
+    {0x0065, 7},{0x0074, 7},{0x004B, 7},{0x00C9, 8},
+    {0x0129, 9},{0x0943,12},{0x0942,12},{0x0003, 3},
+    {0x000A, 4},{0x001C, 5},{0x0018, 5},{0x0033, 6},
+    {0x0017, 5},{0x002D, 6},{0x001B, 5},{0x003B, 6}
+  },
+  {
+    {0x0003, 3},{0x001A, 5},{0x002D, 6},{0x0038, 6},
+    {0x0028, 7},{0x0395,10},{0x0E51,12},{0x0037, 6},
+    {0x00E4, 8},{0x0001, 3},{0x0000, 3},{0x001F, 5},
+    {0x001E, 5},{0x0017, 5},{0x003A, 6},{0x0073, 7},
+    {0x002A, 7},{0x002B, 7},{0x0029, 7},{0x01CB, 9},
+    {0x0729,11},{0x1CA1,13},{0x1CA0,13},{0x0004, 3},
+    {0x000A, 4},{0x0004, 4},{0x0018, 5},{0x0036, 6},
+    {0x000B, 5},{0x002C, 6},{0x0019, 5},{0x003B, 6}
+  },
+  {
+    {0x0004, 3},{0x0004, 4},{0x003F, 6},{0x0017, 5},
+    {0x0075, 7},{0x01F5, 9},{0x07D1,11},{0x0017, 6},
+    {0x01F6, 9},{0x0001, 3},{0x0000, 3},{0x001B, 5},
+    {0x001A, 5},{0x000A, 5},{0x0032, 6},{0x0074, 7},
+    {0x00F8, 8},{0x00F9, 8},{0x01F7, 9},{0x03E9,10},
+    {0x0FA0,12},{0x1F43,13},{0x1F42,13},{0x0003, 3},
+    {0x000A, 4},{0x001E, 5},{0x001C, 5},{0x003B, 6},
+    {0x0018, 5},{0x0016, 6},{0x0016, 5},{0x0033, 6}
+  },
+  {
+    {0x0004, 3},{0x0007, 4},{0x0018, 5},{0x001E, 5},
+    {0x0036, 6},{0x0031, 7},{0x0177, 9},{0x0077, 7},
+    {0x0176, 9},{0x0001, 3},{0x0000, 3},{0x001A, 5},
+    {0x0019, 5},{0x003A, 6},{0x0019, 6},{0x005C, 7},
+    {0x00BA, 8},{0x0061, 8},{0x00C1, 9},{0x0180,10},
+    {0x0302,11},{0x0607,12},{0x0606,12},{0x0002, 3},
+    {0x000A, 4},{0x001F, 5},{0x001C, 5},{0x0037, 6},
+    {0x0016, 5},{0x0076, 7},{0x000D, 5},{0x002F, 6}
+  },
+  {
+    {0x0000, 3},{0x000A, 4},{0x001A, 5},{0x000C, 4},
+    {0x001D, 5},{0x0039, 6},{0x0078, 7},{0x005E, 7},
+    {0x0393,11},{0x0002, 3},{0x0001, 3},{0x0016, 5},
+    {0x000F, 5},{0x002E, 6},{0x005F, 7},{0x0073, 8},
+    {0x00E5, 9},{0x01C8,10},{0x0E4A,13},{0x1C97,14},
+    {0x1C96,14},{0x0E49,13},{0x0E48,13},{0x0004, 3},
+    {0x0006, 4},{0x001F, 5},{0x001B, 5},{0x001D, 6},
+    {0x0038, 6},{0x0038, 7},{0x003D, 6},{0x0079, 7}
+  },
+  {
+    {0x000B, 5},{0x002B, 7},{0x0054, 8},{0x01B7, 9},
+    {0x06D9,11},{0x0DB1,12},{0x0DB0,12},{0x0002, 4},
+    {0x00AB, 9},{0x0009, 4},{0x000A, 4},{0x0007, 4},
+    {0x0008, 4},{0x000F, 4},{0x000C, 4},{0x0003, 4},
+    {0x001D, 5},{0x0004, 4},{0x000B, 4},{0x0006, 4},
+    {0x001A, 5},{0x0003, 6},{0x00AA, 9},{0x0001, 4},
+    {0x0000, 5},{0x0014, 6},{0x006C, 7},{0x00DA, 8},
+    {0x0002, 6},{0x036D,10},{0x001C, 5},{0x0037, 6}
+  },
+  {
+    {0x001D, 5},{0x0004, 6},{0x00B6, 8},{0x006A, 8},
+    {0x05B9,11},{0x16E1,13},{0x16E0,13},{0x0007, 4},
+    {0x016F, 9},{0x000C, 4},{0x000D, 4},{0x0009, 4},
+    {0x0008, 4},{0x000F, 4},{0x000A, 4},{0x0003, 4},
+    {0x0017, 5},{0x0002, 4},{0x0004, 4},{0x001C, 5},
+    {0x002C, 6},{0x006B, 8},{0x0B71,12},{0x0005, 4},
+    {0x0003, 5},{0x001B, 6},{0x005A, 7},{0x0034, 7},
+    {0x0005, 6},{0x02DD,10},{0x0000, 4},{0x000C, 5}
+  },
+  {
+    {0x0003, 4},{0x007F, 7},{0x00A1, 8},{0x00A0, 8},
+    {0x020C,10},{0x0834,12},{0x106B,13},{0x0007, 4},
+    {0x0082, 8},{0x000E, 4},{0x000D, 4},{0x000B, 4},
+    {0x000C, 4},{0x0000, 3},{0x0009, 4},{0x0002, 4},
+    {0x0011, 5},{0x001E, 5},{0x0015, 5},{0x003E, 6},
+    {0x0040, 7},{0x041B,11},{0x106A,13},{0x0006, 4},
+    {0x000A, 5},{0x0029, 6},{0x007E, 7},{0x0051, 7},
+    {0x0021, 6},{0x0107, 9},{0x0004, 4},{0x000B, 5}
+  },
+  {
+    {0x0007, 4},{0x001B, 6},{0x00F6, 8},{0x00E9, 8},
+    {0x03A1,10},{0x0740,11},{0x0E82,12},{0x001F, 5},
+    {0x01EF, 9},{0x0001, 3},{0x0002, 3},{0x000B, 4},
+    {0x000C, 4},{0x000D, 4},{0x0008, 4},{0x001C, 5},
+    {0x0003, 5},{0x0012, 5},{0x0002, 5},{0x0075, 7},
+    {0x01D1, 9},{0x1D07,13},{0x1D06,13},{0x000A, 4},
+    {0x0013, 5},{0x003B, 6},{0x001A, 6},{0x007A, 7},
+    {0x003C, 6},{0x01EE, 9},{0x0000, 4},{0x000C, 5}
+  },
+  {
+    {0x000D, 4},{0x003D, 6},{0x0042, 7},{0x0037, 7},
+    {0x00D9, 9},{0x0362,11},{0x06C6,12},{0x001F, 5},
+    {0x0086, 8},{0x0001, 3},{0x0002, 3},{0x000C, 4},
+    {0x000B, 4},{0x000A, 4},{0x0001, 4},{0x000F, 5},
+    {0x0025, 6},{0x003C, 6},{0x001A, 6},{0x0087, 8},
+    {0x01B0,10},{0x0D8F,13},{0x0D8E,13},{0x000E, 4},
+    {0x0013, 5},{0x000C, 5},{0x0024, 6},{0x0020, 6},
+    {0x0011, 5},{0x006D, 8},{0x0000, 4},{0x000E, 5}
+  },
+  {
+    {0x0000, 3},{0x0012, 5},{0x0076, 7},{0x0077, 7},
+    {0x014D, 9},{0x0533,11},{0x14C9,13},{0x0013, 5},
+    {0x00A5, 8},{0x0002, 3},{0x0003, 3},{0x000B, 4},
+    {0x000C, 4},{0x0008, 4},{0x001A, 5},{0x002B, 6},
+    {0x0075, 7},{0x0074, 7},{0x00A7, 8},{0x0298,10},
+    {0x14C8,13},{0x14CB,13},{0x14CA,13},{0x000F, 4},
+    {0x001C, 5},{0x0007, 5},{0x002A, 6},{0x0028, 6},
+    {0x001B, 5},{0x00A4, 8},{0x0002, 4},{0x0006, 5}
+  },
+  {
+    {0x0002, 3},{0x001A, 5},{0x002B, 6},{0x003A, 6},
+    {0x00ED, 8},{0x0283,10},{0x0A0A,12},{0x0004, 5},
+    {0x00A1, 8},{0x0004, 3},{0x0003, 3},{0x000B, 4},
+    {0x000C, 4},{0x001F, 5},{0x0006, 5},{0x0077, 7},
+    {0x00A3, 8},{0x00A2, 8},{0x0140, 9},{0x1417,13},
+    {0x1416,13},{0x0A09,12},{0x0A08,12},{0x0000, 3},
+    {0x001E, 5},{0x0007, 5},{0x002A, 6},{0x0029, 6},
+    {0x001C, 5},{0x00EC, 8},{0x001B, 5},{0x0005, 5}
+  },
+  {
+    {0x0002, 3},{0x0002, 4},{0x0018, 5},{0x001D, 5},
+    {0x0035, 6},{0x00E4, 8},{0x01CF,11},{0x001D, 7},
+    {0x0072, 9},{0x0004, 3},{0x0005, 3},{0x0006, 4},
+    {0x0007, 4},{0x0006, 5},{0x0073, 7},{0x0038, 8},
+    {0x01CE,11},{0x039B,12},{0x0398,12},{0x0733,13},
+    {0x0732,13},{0x0735,13},{0x0734,13},{0x0000, 3},
+    {0x001F, 5},{0x001B, 5},{0x0034, 6},{0x000F, 6},
+    {0x001E, 5},{0x00E5, 8},{0x0019, 5},{0x0038, 6}
+  },
+  {
+    {0x0016, 5},{0x0050, 7},{0x0172, 9},{0x02E7,10},
+    {0x1732,13},{0x2E67,14},{0x2E66,14},{0x0006, 4},
+    {0x0051, 7},{0x0001, 3},{0x0000, 3},{0x000D, 4},
+    {0x000C, 4},{0x0009, 4},{0x001C, 5},{0x0009, 5},
+    {0x001C, 6},{0x001D, 6},{0x005D, 7},{0x00B8, 8},
+    {0x05CD,11},{0x1731,13},{0x1730,13},{0x000F, 4},
+    {0x0005, 4},{0x000F, 5},{0x0008, 5},{0x0029, 6},
+    {0x001D, 5},{0x002F, 6},{0x0008, 4},{0x0015, 5}
+  },
+  {
+    {0x0009, 4},{0x0021, 6},{0x0040, 7},{0x00AD, 8},
+    {0x02B0,10},{0x1589,13},{0x1588,13},{0x001C, 5},
+    {0x005F, 7},{0x0000, 3},{0x000F, 4},{0x000D, 4},
+    {0x000C, 4},{0x0006, 4},{0x0011, 5},{0x002A, 6},
+    {0x0057, 7},{0x005E, 7},{0x0041, 7},{0x0159, 9},
+    {0x0563,11},{0x158B,13},{0x158A,13},{0x0001, 3},
+    {0x0005, 4},{0x0014, 5},{0x003B, 6},{0x002E, 6},
+    {0x0004, 4},{0x003A, 6},{0x0007, 4},{0x0016, 5}
+  },
+  {
+    {0x000E, 4},{0x0007, 5},{0x0046, 7},{0x0045, 7},
+    {0x0064, 9},{0x032A,12},{0x0657,13},{0x0018, 5},
+    {0x000D, 6},{0x0000, 3},{0x000F, 4},{0x000A, 4},
+    {0x000B, 4},{0x001A, 5},{0x0036, 6},{0x0047, 7},
+    {0x0044, 7},{0x0018, 7},{0x0033, 8},{0x00CB,10},
+    {0x0656,13},{0x0329,12},{0x0328,12},{0x0002, 3},
+    {0x0006, 4},{0x0019, 5},{0x000E, 5},{0x0037, 6},
+    {0x0009, 4},{0x000F, 5},{0x0002, 4},{0x0010, 5}
+  },
+  {
+    {0x0003, 3},{0x0018, 5},{0x0023, 6},{0x0077, 7},
+    {0x0194, 9},{0x1956,13},{0x32AF,14},{0x003A, 6},
+    {0x0076, 7},{0x0002, 3},{0x0001, 3},{0x001F, 5},
+    {0x001E, 5},{0x0014, 5},{0x0022, 6},{0x0064, 7},
+    {0x0197, 9},{0x0196, 9},{0x032B,10},{0x0654,11},
+    {0x32AE,14},{0x1955,13},{0x1954,13},{0x0000, 3},
+    {0x0009, 4},{0x001C, 5},{0x0015, 5},{0x0010, 5},
+    {0x000D, 4},{0x0017, 5},{0x0016, 5},{0x0033, 6}
+  },
+  {
+    {0x0005, 3},{0x0006, 4},{0x003E, 6},{0x0010, 5},
+    {0x0048, 7},{0x093F,12},{0x24FA,14},{0x0032, 6},
+    {0x0067, 7},{0x0002, 3},{0x0001, 3},{0x001B, 5},
+    {0x001E, 5},{0x0034, 6},{0x0066, 7},{0x0092, 8},
+    {0x0126, 9},{0x024E,10},{0x049E,11},{0x49F7,15},
+    {0x49F6,15},{0x24F9,14},{0x24F8,14},{0x0000, 3},
+    {0x0007, 4},{0x0018, 5},{0x0011, 5},{0x003F, 6},
+    {0x000E, 4},{0x0013, 5},{0x0035, 6},{0x0025, 6}
+  },
+  {
+    {0x0005, 3},{0x0008, 4},{0x0012, 5},{0x001C, 5},
+    {0x001C, 6},{0x00EA, 9},{0x1D75,14},{0x001E, 6},
+    {0x0066, 7},{0x0001, 3},{0x0002, 3},{0x001B, 5},
+    {0x001A, 5},{0x001F, 6},{0x003B, 7},{0x0074, 8},
+    {0x01D6,10},{0x03AF,11},{0x1D74,14},{0x1D77,14},
+    {0x1D76,14},{0x0EB9,13},{0x0EB8,13},{0x000F, 4},
+    {0x0006, 4},{0x0013, 5},{0x003B, 6},{0x003A, 6},
+    {0x0000, 3},{0x0018, 5},{0x0032, 6},{0x0067, 7}
+  },
+  {
+    {0x0004, 3},{0x000A, 4},{0x001B, 5},{0x000C, 4},
+    {0x000D, 5},{0x00E6, 8},{0x0684,11},{0x0072, 7},
+    {0x00E7, 8},{0x0002, 3},{0x0001, 3},{0x0017, 5},
+    {0x0016, 5},{0x0018, 6},{0x00D1, 8},{0x01A0, 9},
+    {0x0686,11},{0x0D0F,12},{0x0D0A,12},{0x1A17,13},
+    {0x1A16,13},{0x1A1D,13},{0x1A1C,13},{0x000F, 4},
+    {0x001D, 5},{0x000E, 5},{0x0035, 6},{0x0038, 6},
+    {0x0000, 3},{0x000F, 5},{0x0019, 6},{0x0069, 7}
+  },
+  {
+    {0x0003, 3},{0x000C, 4},{0x001B, 5},{0x0000, 3},
+    {0x0003, 4},{0x002E, 6},{0x0051, 9},{0x00BC, 8},
+    {0x0053, 9},{0x0004, 3},{0x0002, 3},{0x0016, 5},
+    {0x0015, 5},{0x0015, 7},{0x0050, 9},{0x00A4,10},
+    {0x0294,12},{0x052B,13},{0x052A,13},{0x052D,13},
+    {0x052C,13},{0x052F,13},{0x052E,13},{0x000E, 4},
+    {0x001A, 5},{0x0004, 5},{0x0028, 6},{0x0029, 6},
+    {0x000F, 4},{0x000B, 6},{0x005F, 7},{0x00BD, 8}
+  },
+  {
+    {0x0003, 4},{0x0009, 6},{0x00D0, 8},{0x01A3, 9},
+    {0x0344,10},{0x0D14,12},{0x1A2B,13},{0x0004, 4},
+    {0x0015, 7},{0x0000, 3},{0x000F, 4},{0x000B, 4},
+    {0x000C, 4},{0x000E, 4},{0x0009, 4},{0x001B, 5},
+    {0x000A, 5},{0x0014, 5},{0x000D, 5},{0x002A, 6},
+    {0x0014, 7},{0x068B,11},{0x1A2A,13},{0x0008, 4},
+    {0x000B, 5},{0x002B, 6},{0x000B, 6},{0x0069, 7},
+    {0x0035, 6},{0x0008, 6},{0x0007, 4},{0x000C, 5}
+  },
+  {
+    {0x000A, 4},{0x003C, 6},{0x0032, 7},{0x0030, 7},
+    {0x00C5, 9},{0x0621,12},{0x0620,12},{0x001F, 5},
+    {0x0033, 7},{0x0001, 3},{0x0000, 3},{0x000E, 4},
+    {0x000D, 4},{0x000C, 4},{0x0004, 4},{0x000D, 5},
+    {0x0026, 6},{0x0027, 6},{0x0014, 6},{0x0063, 8},
+    {0x0189,10},{0x0623,12},{0x0622,12},{0x000B, 4},
+    {0x0012, 5},{0x003D, 6},{0x0022, 6},{0x0015, 6},
+    {0x000B, 5},{0x0023, 6},{0x0007, 4},{0x0010, 5}
+  },
+  {
+    {0x000F, 4},{0x000C, 5},{0x0043, 7},{0x0010, 6},
+    {0x0044, 8},{0x0114,10},{0x0455,12},{0x0018, 5},
+    {0x0023, 7},{0x0001, 3},{0x0000, 3},{0x000E, 4},
+    {0x000D, 4},{0x0009, 4},{0x0019, 5},{0x0009, 5},
+    {0x0017, 6},{0x0016, 6},{0x0042, 7},{0x008B, 9},
+    {0x0454,12},{0x0457,12},{0x0456,12},{0x000B, 4},
+    {0x0015, 5},{0x000A, 5},{0x0029, 6},{0x0020, 6},
+    {0x000D, 5},{0x0028, 6},{0x0007, 4},{0x0011, 5}
+  },
+  {
+    {0x0001, 3},{0x001A, 5},{0x0029, 6},{0x002A, 6},
+    {0x00A0, 8},{0x0285,10},{0x1425,13},{0x0002, 5},
+    {0x0000, 7},{0x0002, 3},{0x0003, 3},{0x000C, 4},
+    {0x000B, 4},{0x0008, 4},{0x0012, 5},{0x0001, 6},
+    {0x0051, 7},{0x0001, 7},{0x0143, 9},{0x0508,11},
+    {0x1424,13},{0x1427,13},{0x1426,13},{0x000F, 4},
+    {0x001C, 5},{0x0003, 5},{0x0037, 6},{0x002B, 6},
+    {0x0013, 5},{0x0036, 6},{0x001D, 5},{0x0001, 5}
+  },
+  {
+    {0x0004, 3},{0x001F, 5},{0x003D, 6},{0x0006, 5},
+    {0x0016, 7},{0x0053, 9},{0x014A,11},{0x0034, 6},
+    {0x002A, 8},{0x0002, 3},{0x0003, 3},{0x000B, 4},
+    {0x000C, 4},{0x001C, 5},{0x0037, 6},{0x0017, 7},
+    {0x002B, 8},{0x0028, 8},{0x00A4,10},{0x052D,13},
+    {0x052C,13},{0x052F,13},{0x052E,13},{0x0000, 3},
+    {0x001D, 5},{0x0007, 5},{0x0004, 5},{0x0035, 6},
+    {0x0014, 5},{0x0036, 6},{0x0015, 5},{0x003C, 6}
+  },
+  {
+    {0x0004, 3},{0x000A, 4},{0x0007, 5},{0x001D, 5},
+    {0x0009, 6},{0x01F3, 9},{0x07C7,11},{0x0008, 6},
+    {0x01F0, 9},{0x0003, 3},{0x0002, 3},{0x000D, 4},
+    {0x000C, 4},{0x0017, 5},{0x007D, 7},{0x01F2, 9},
+    {0x07C6,11},{0x07C5,11},{0x1F12,13},{0x3E27,14},
+    {0x3E26,14},{0x1F11,13},{0x1F10,13},{0x0000, 3},
+    {0x001E, 5},{0x0006, 5},{0x0039, 6},{0x0038, 6},
+    {0x003F, 6},{0x002C, 6},{0x0005, 5},{0x002D, 6}
+  },
+  {
+    {0x0002, 3},{0x0007, 4},{0x0018, 5},{0x0003, 4},
+    {0x0005, 5},{0x0035, 7},{0x004F, 9},{0x0012, 7},
+    {0x04E5,13},{0x0005, 3},{0x0004, 3},{0x000D, 4},
+    {0x000E, 4},{0x0033, 6},{0x0026, 8},{0x009D,10},
+    {0x04E4,13},{0x04E7,13},{0x04E6,13},{0x04E1,13},
+    {0x04E0,13},{0x04E3,13},{0x04E2,13},{0x0000, 3},
+    {0x001F, 5},{0x000C, 5},{0x003D, 6},{0x003C, 6},
+    {0x0032, 6},{0x0034, 7},{0x001B, 6},{0x0008, 6}
+  },
+  {
+    {0x0000, 3},{0x0004, 4},{0x001C, 5},{0x000F, 4},
+    {0x0002, 4},{0x0007, 5},{0x0075, 7},{0x00E8, 8},
+    {0x1D2A,13},{0x0005, 3},{0x0004, 3},{0x000D, 4},
+    {0x000C, 4},{0x0077, 7},{0x0E96,12},{0x3A57,14},
+    {0x3A56,14},{0x3A5D,14},{0x3A5C,14},{0x3A5F,14},
+    {0x3A5E,14},{0x1D29,13},{0x1D28,13},{0x0003, 3},
+    {0x0006, 5},{0x000A, 5},{0x002C, 7},{0x0017, 6},
+    {0x0076, 7},{0x01D3, 9},{0x03A4,10},{0x002D, 7}
+  },
+  {
+    {0x000A, 4},{0x0024, 6},{0x00BF, 8},{0x0085, 8},
+    {0x0211,10},{0x0842,12},{0x1087,13},{0x0018, 5},
+    {0x0020, 6},{0x0001, 3},{0x0002, 3},{0x000E, 4},
+    {0x000D, 4},{0x0007, 4},{0x0013, 5},{0x0025, 6},
+    {0x005E, 7},{0x0043, 7},{0x00BE, 8},{0x0109, 9},
+    {0x1086,13},{0x0841,12},{0x0840,12},{0x000F, 4},
+    {0x0001, 4},{0x0011, 5},{0x0000, 5},{0x002E, 6},
+    {0x0019, 5},{0x0001, 5},{0x0006, 4},{0x0016, 5}
+  },
+  {
+    {0x0002, 3},{0x000F, 5},{0x006F, 7},{0x0061, 7},
+    {0x0374,10},{0x1BA8,13},{0x3753,14},{0x0012, 5},
+    {0x0036, 6},{0x0000, 3},{0x0001, 3},{0x000A, 4},
+    {0x000B, 4},{0x001A, 5},{0x0031, 6},{0x0060, 7},
+    {0x00DC, 8},{0x01BB, 9},{0x06EB,11},{0x1BAB,13},
+    {0x3752,14},{0x3755,14},{0x3754,14},{0x000E, 4},
+    {0x0006, 4},{0x0013, 5},{0x000E, 5},{0x003E, 6},
+    {0x0008, 4},{0x001E, 5},{0x0019, 5},{0x003F, 6}
+  },
+  {
+    {0x0003, 3},{0x001C, 5},{0x0025, 6},{0x0024, 6},
+    {0x01DA, 9},{0x1DBD,13},{0x3B7C,14},{0x003C, 6},
+    {0x003D, 6},{0x0000, 3},{0x0001, 3},{0x000B, 4},
+    {0x000A, 4},{0x000B, 5},{0x0077, 7},{0x00EC, 8},
+    {0x03B6,10},{0x076E,11},{0x1DBF,13},{0x76FB,15},
+    {0x76FA,15},{0x3B79,14},{0x3B78,14},{0x000D, 4},
+    {0x001F, 5},{0x0013, 5},{0x000A, 5},{0x0008, 5},
+    {0x000C, 4},{0x0008, 4},{0x0009, 5},{0x003A, 6}
+  },
+  {
+    {0x0005, 3},{0x0003, 4},{0x0004, 5},{0x0010, 5},
+    {0x008F, 8},{0x0475,11},{0x11D1,13},{0x0079, 7},
+    {0x0027, 6},{0x0002, 3},{0x0003, 3},{0x0001, 4},
+    {0x0000, 4},{0x0026, 6},{0x0046, 7},{0x011C, 9},
+    {0x0477,11},{0x08ED,12},{0x11D0,13},{0x11D3,13},
+    {0x11D2,13},{0x11D9,13},{0x11D8,13},{0x000D, 4},
+    {0x001F, 5},{0x0012, 5},{0x0005, 5},{0x003D, 6},
+    {0x000C, 4},{0x000E, 4},{0x0022, 6},{0x0078, 7}
+  },
+  {
+    {0x0005, 3},{0x000C, 4},{0x001B, 5},{0x0000, 4},
+    {0x0006, 6},{0x03E2,10},{0x3E3D,14},{0x000F, 7},
+    {0x0034, 6},{0x0003, 3},{0x0002, 3},{0x001E, 5},
+    {0x001D, 5},{0x007D, 7},{0x01F0, 9},{0x07C6,11},
+    {0x3E3C,14},{0x3E3F,14},{0x3E3E,14},{0x3E39,14},
+    {0x3E38,14},{0x3E3B,14},{0x3E3A,14},{0x0008, 4},
+    {0x001C, 5},{0x0002, 5},{0x003F, 6},{0x0035, 6},
+    {0x0009, 4},{0x0001, 3},{0x000E, 7},{0x00F9, 8}
+  },
+  {
+    {0x0004, 3},{0x000B, 4},{0x0001, 4},{0x000A, 4},
+    {0x001E, 6},{0x00E0, 9},{0x0E1E,13},{0x0071, 8},
+    {0x0039, 7},{0x0007, 3},{0x0006, 3},{0x000D, 5},
+    {0x000C, 5},{0x0020, 7},{0x01C2,10},{0x1C3F,14},
+    {0x1C3E,14},{0x0E19,13},{0x0E18,13},{0x0E1B,13},
+    {0x0E1A,13},{0x0E1D,13},{0x0E1C,13},{0x0000, 4},
+    {0x0009, 5},{0x001D, 6},{0x001F, 6},{0x0011, 6},
+    {0x0005, 4},{0x0001, 3},{0x0043, 8},{0x0042, 8}
+  },
+  {
+    {0x0004, 3},{0x000D, 4},{0x0007, 4},{0x0002, 3},
+    {0x0014, 5},{0x016C, 9},{0x16D1,13},{0x02DF,10},
+    {0x016E, 9},{0x0000, 2},{0x0007, 3},{0x002C, 6},
+    {0x002B, 6},{0x02DE,10},{0x16D0,13},{0x16D3,13},
+    {0x16D2,13},{0x2DB5,14},{0x2DB4,14},{0x2DB7,14},
+    {0x2DB6,14},{0x16D9,13},{0x16D8,13},{0x000C, 5},
+    {0x002A, 6},{0x005A, 7},{0x001B, 6},{0x001A, 6},
+    {0x0017, 5},{0x000C, 4},{0x05B7,11},{0x05B5,11}
+  },
+  {
+    {0x0002, 2},{0x000F, 4},{0x001C, 5},{0x000C, 4},
+    {0x003B, 6},{0x01AC, 9},{0x1AD8,13},{0x35B3,14},
+    {0x35B2,14},{0x0001, 2},{0x0000, 2},{0x0069, 7},
+    {0x0068, 7},{0x35BD,14},{0x35BC,14},{0x35BF,14},
+    {0x35BE,14},{0x35B9,14},{0x35B8,14},{0x35BB,14},
+    {0x35BA,14},{0x35B5,14},{0x35B4,14},{0x01A9, 9},
+    {0x01A8, 9},{0x035A,10},{0x00D7, 8},{0x00D5, 8},
+    {0x003A, 6},{0x001B, 5},{0x35B7,14},{0x35B6,14}
+  },
+  {
+    {0x0000, 3},{0x0010, 5},{0x0072, 7},{0x0071, 7},
+    {0x0154, 9},{0x0AAB,12},{0x0AA8,12},{0x0014, 5},
+    {0x0070, 7},{0x0002, 3},{0x0003, 3},{0x000C, 4},
+    {0x000B, 4},{0x0003, 4},{0x0011, 5},{0x0073, 7},
+    {0x0054, 7},{0x00AB, 8},{0x02AB,10},{0x1553,13},
+    {0x1552,13},{0x1555,13},{0x1554,13},{0x000D, 4},
+    {0x001E, 5},{0x0012, 5},{0x003E, 6},{0x002B, 6},
+    {0x0002, 4},{0x003F, 6},{0x001D, 5},{0x0013, 5}
+  },
+  {
+    {0x0003, 3},{0x001F, 5},{0x0029, 6},{0x003D, 6},
+    {0x000C, 7},{0x0069,10},{0x0345,13},{0x0002, 5},
+    {0x0028, 6},{0x0002, 3},{0x0001, 3},{0x000E, 4},
+    {0x000C, 4},{0x0015, 5},{0x0007, 6},{0x001B, 8},
+    {0x006B,10},{0x006A,10},{0x0344,13},{0x0347,13},
+    {0x0346,13},{0x01A1,12},{0x01A0,12},{0x000B, 4},
+    {0x001A, 5},{0x0012, 5},{0x0000, 5},{0x003C, 6},
+    {0x0008, 4},{0x001B, 5},{0x0013, 5},{0x0001, 5}
+  },
+  {
+    {0x0004, 3},{0x0004, 4},{0x003F, 6},{0x0014, 5},
+    {0x0056, 7},{0x015C, 9},{0x15D5,13},{0x003C, 6},
+    {0x002A, 6},{0x0000, 3},{0x0001, 3},{0x000E, 4},
+    {0x000D, 4},{0x000C, 5},{0x00AF, 8},{0x02BB,10},
+    {0x15D4,13},{0x15D7,13},{0x15D6,13},{0x15D1,13},
+    {0x15D0,13},{0x15D3,13},{0x15D2,13},{0x000B, 4},
+    {0x0019, 5},{0x000D, 5},{0x003E, 6},{0x0031, 6},
+    {0x0007, 4},{0x0005, 4},{0x003D, 6},{0x0030, 6}
+  },
+  {
+    {0x0005, 3},{0x0008, 4},{0x001A, 5},{0x0000, 4},
+    {0x0036, 6},{0x0011, 8},{0x0106,12},{0x000A, 7},
+    {0x006E, 7},{0x0002, 3},{0x0003, 3},{0x0003, 4},
+    {0x0002, 4},{0x006F, 7},{0x0021, 9},{0x020F,13},
+    {0x020E,13},{0x0101,12},{0x0100,12},{0x0103,12},
+    {0x0102,12},{0x0105,12},{0x0104,12},{0x000C, 4},
+    {0x001E, 5},{0x0003, 5},{0x003E, 6},{0x003F, 6},
+    {0x0009, 4},{0x000E, 4},{0x000B, 7},{0x0009, 7}
+  },
+  {
+    {0x0002, 3},{0x000E, 4},{0x001E, 5},{0x000C, 4},
+    {0x001F, 5},{0x006E, 7},{0x00AD,10},{0x00AF,10},
+    {0x0014, 7},{0x0004, 3},{0x0003, 3},{0x001A, 5},
+    {0x0017, 5},{0x002A, 8},{0x0576,13},{0x0AEF,14},
+    {0x0AEE,14},{0x0571,13},{0x0570,13},{0x0573,13},
+    {0x0572,13},{0x0575,13},{0x0574,13},{0x0003, 4},
+    {0x0016, 5},{0x0004, 5},{0x0036, 6},{0x000B, 6},
+    {0x000A, 4},{0x0000, 3},{0x006F, 7},{0x00AC,10}
+  },
+  {
+    {0x0004, 3},{0x0005, 4},{0x0003, 3},{0x0001, 3},
+    {0x0004, 4},{0x002F, 6},{0x0526,11},{0x1495,13},
+    {0x00A6, 8},{0x0007, 3},{0x0006, 3},{0x002D, 6},
+    {0x002C, 6},{0x1494,13},{0x1497,13},{0x1496,13},
+    {0x1491,13},{0x1490,13},{0x1493,13},{0x1492,13},
+    {0x293D,14},{0x293C,14},{0x293F,14},{0x0000, 3},
+    {0x0028, 6},{0x00A5, 8},{0x0148, 9},{0x00A7, 8},
+    {0x002E, 6},{0x0015, 5},{0x0A4E,12},{0x293E,14}
+  },
+  {
+    {0x0004, 3},{0x0005, 4},{0x0003, 3},{0x0001, 3},
+    {0x0004, 4},{0x002F, 6},{0x0526,11},{0x1495,13},
+    {0x00A6, 8},{0x0007, 3},{0x0006, 3},{0x002D, 6},
+    {0x002C, 6},{0x1494,13},{0x1497,13},{0x1496,13},
+    {0x1491,13},{0x1490,13},{0x1493,13},{0x1492,13},
+    {0x293D,14},{0x293C,14},{0x293F,14},{0x0000, 3},
+    {0x0028, 6},{0x00A5, 8},{0x0148, 9},{0x00A7, 8},
+    {0x002E, 6},{0x0015, 5},{0x0A4E,12},{0x293E,14}
+  },
+  {
+    {0x0004, 3},{0x0005, 4},{0x0003, 3},{0x0001, 3},
+    {0x0004, 4},{0x002F, 6},{0x0526,11},{0x1495,13},
+    {0x00A6, 8},{0x0007, 3},{0x0006, 3},{0x002D, 6},
+    {0x002C, 6},{0x1494,13},{0x1497,13},{0x1496,13},
+    {0x1491,13},{0x1490,13},{0x1493,13},{0x1492,13},
+    {0x293D,14},{0x293C,14},{0x293F,14},{0x0000, 3},
+    {0x0028, 6},{0x00A5, 8},{0x0148, 9},{0x00A7, 8},
+    {0x002E, 6},{0x0015, 5},{0x0A4E,12},{0x293E,14}
+  },
+  {
+    {0x0003, 3},{0x0011, 5},{0x0020, 6},{0x0074, 7},
+    {0x010D, 9},{0x0863,12},{0x0860,12},{0x000A, 5},
+    {0x0075, 7},{0x0001, 3},{0x0000, 3},{0x000B, 4},
+    {0x000A, 4},{0x0018, 5},{0x0038, 6},{0x0042, 7},
+    {0x010F, 9},{0x010E, 9},{0x0219,10},{0x10C3,13},
+    {0x10C2,13},{0x10C5,13},{0x10C4,13},{0x000F, 4},
+    {0x0004, 4},{0x0019, 5},{0x000B, 5},{0x0039, 6},
+    {0x0009, 4},{0x001B, 5},{0x001A, 5},{0x003B, 6}
+  },
+  {
+    {0x0005, 3},{0x0001, 4},{0x003E, 6},{0x0001, 5},
+    {0x00E2, 8},{0x1C6F,13},{0x38D9,14},{0x0039, 6},
+    {0x001F, 6},{0x0002, 3},{0x0001, 3},{0x0009, 4},
+    {0x0008, 4},{0x0000, 5},{0x0070, 7},{0x01C7, 9},
+    {0x038C,10},{0x071A,11},{0x38D8,14},{0x38DB,14},
+    {0x38DA,14},{0x38DD,14},{0x38DC,14},{0x000D, 4},
+    {0x001D, 5},{0x000E, 5},{0x003F, 6},{0x003C, 6},
+    {0x000C, 4},{0x0006, 4},{0x003D, 6},{0x001E, 6}
+  },
+  {
+    {0x0006, 3},{0x000B, 4},{0x0011, 5},{0x001E, 5},
+    {0x0074, 7},{0x03AA,10},{0x1D5C,13},{0x0001, 6},
+    {0x0021, 6},{0x0001, 3},{0x0002, 3},{0x0007, 4},
+    {0x0006, 4},{0x003E, 6},{0x00EB, 8},{0x01D4, 9},
+    {0x0EAF,12},{0x3ABB,14},{0x3ABA,14},{0x1D59,13},
+    {0x1D58,13},{0x1D5B,13},{0x1D5A,13},{0x000A, 4},
+    {0x001C, 5},{0x0001, 5},{0x003F, 6},{0x003B, 6},
+    {0x0001, 4},{0x0009, 4},{0x0020, 6},{0x0000, 6}
+  },
+  {
+    {0x0004, 3},{0x000A, 4},{0x0017, 5},{0x0004, 4},
+    {0x0016, 6},{0x016A, 9},{0x16B1,13},{0x0017, 7},
+    {0x005B, 7},{0x0006, 3},{0x0007, 3},{0x0001, 4},
+    {0x0000, 4},{0x000A, 6},{0x02D7,10},{0x0B5A,12},
+    {0x16B0,13},{0x16B3,13},{0x16B2,13},{0x2D6D,14},
+    {0x2D6C,14},{0x2D6F,14},{0x2D6E,14},{0x0006, 4},
+    {0x000A, 5},{0x0004, 5},{0x002C, 6},{0x0017, 6},
+    {0x0003, 4},{0x0007, 4},{0x0016, 7},{0x00B4, 8}
+  },
+  {
+    {0x0005, 3},{0x000D, 4},{0x0005, 4},{0x0009, 4},
+    {0x0033, 6},{0x0193, 9},{0x192C,13},{0x0061, 8},
+    {0x0031, 7},{0x0000, 2},{0x0007, 3},{0x0010, 5},
+    {0x0011, 5},{0x00C8, 8},{0x192F,13},{0x325B,14},
+    {0x325A,14},{0x1929,13},{0x1928,13},{0x192B,13},
+    {0x192A,13},{0x325D,14},{0x325C,14},{0x0018, 5},
+    {0x001A, 6},{0x001B, 6},{0x0065, 7},{0x0019, 6},
+    {0x0004, 4},{0x0007, 4},{0x0060, 8},{0x0324,10}
+  },
+  {
+    {0x0006, 3},{0x0000, 3},{0x0002, 4},{0x000F, 4},
+    {0x0039, 6},{0x01D9, 9},{0x1D82,13},{0x0761,11},
+    {0x03BE,10},{0x0001, 2},{0x0002, 2},{0x000F, 6},
+    {0x000E, 6},{0x0762,11},{0x3B07,14},{0x3B06,14},
+    {0x3B1D,14},{0x3B1C,14},{0x3B1F,14},{0x3B1E,14},
+    {0x3B19,14},{0x3B18,14},{0x3B1B,14},{0x0038, 6},
+    {0x01DE, 9},{0x00ED, 8},{0x03BF,10},{0x00EE, 8},
+    {0x003A, 6},{0x0006, 5},{0x0EC0,12},{0x3B1A,14}
+  },
+  {
+    {0x0000, 2},{0x0002, 3},{0x000F, 5},{0x0006, 4},
+    {0x001C, 6},{0x01D0,10},{0x0E8C,13},{0x1D1B,14},
+    {0x1D1A,14},{0x0003, 2},{0x0002, 2},{0x00EA, 9},
+    {0x00E9, 9},{0x0E89,13},{0x0E88,13},{0x0E8B,13},
+    {0x0E8A,13},{0x1D65,14},{0x1D64,14},{0x1D67,14},
+    {0x1D66,14},{0x1D61,14},{0x1D60,14},{0x03AD,11},
+    {0x1D63,14},{0x1D62,14},{0x1D1D,14},{0x1D1C,14},
+    {0x003B, 7},{0x01D7,10},{0x1D1F,14},{0x1D1E,14}
+  },
+  {
+    {0x0002, 2},{0x000F, 4},{0x001C, 5},{0x000C, 4},
+    {0x003B, 6},{0x01AC, 9},{0x1AD8,13},{0x35B3,14},
+    {0x35B2,14},{0x0001, 2},{0x0000, 2},{0x0069, 7},
+    {0x0068, 7},{0x35BD,14},{0x35BC,14},{0x35BF,14},
+    {0x35BE,14},{0x35B9,14},{0x35B8,14},{0x35BB,14},
+    {0x35BA,14},{0x35B5,14},{0x35B4,14},{0x01A9, 9},
+    {0x01A8, 9},{0x035A,10},{0x00D7, 8},{0x00D5, 8},
+    {0x003A, 6},{0x001B, 5},{0x35B7,14},{0x35B6,14}
+  }
+};
+
+
+
+/*A description of a Huffman code value used when encoding the tree.*/
+typedef struct{
+  /*The bit pattern, left-shifted so that the MSB of all patterns is
+     aligned.*/
+  ogg_uint32_t pattern;
+  /*The amount the bit pattern was shifted.*/
+  int          shift;
+  /*The token this bit pattern represents.*/
+  int          token;
+}oc_huff_entry;
+
+
+
+/*Compares two oc_huff_entry structures by their bit patterns.
+  _c1: The first entry to compare.
+  _c2: The second entry to compare.
+  Return: <0 if _c1<_c2, >0 if _c1>_c2.*/
+static int huff_entry_cmp(const void *_c1,const void *_c2){
+  ogg_uint32_t b1;
+  ogg_uint32_t b2;
+  b1=((const oc_huff_entry *)_c1)->pattern;
+  b2=((const oc_huff_entry *)_c2)->pattern;
+  return b1<b2?-1:b1>b2?1:0;
+}
+
+/*Encodes a description of the given Huffman tables.
+  Although the codes are stored in the encoder as flat arrays, in the bit
+   stream and in the decoder they are structured as a tree.
+  This function recovers the tree structure from the flat array and then
+   writes it out.
+  Note that the codes MUST form a Huffman code, and not merely a prefix-free
+   code, since the binary tree is assumed to be full.
+  _opb:   The buffer to store the tree in.
+  _codes: The Huffman tables to pack.
+  Return: 0 on success, or a negative value if one of the given Huffman tables
+   does not form a full, prefix-free code.*/
+int oc_huff_codes_pack(oggpack_buffer *_opb,
+ const th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]){
+  int i;
+  for(i=0;i<TH_NHUFFMAN_TABLES;i++){
+    oc_huff_entry entries[TH_NDCT_TOKENS];
+    int           bpos;
+    int           maxlen;
+    int           mask;
+    int           j;
+    /*First, find the maximum code length so we can align all the bit
+       patterns.*/
+    maxlen=_codes[i][0].nbits;
+    for(j=1;j<TH_NDCT_TOKENS;j++){
+      maxlen=OC_MAXI(_codes[i][j].nbits,maxlen);
+    }
+    mask=(1<<maxlen)-1;
+    /*Copy over the codes into our temporary workspace.
+      The bit patterns are aligned, and the original entry each code is from
+       is stored as well.*/
+    for(j=0;j<TH_NDCT_TOKENS;j++){
+      entries[j].shift=maxlen-_codes[i][j].nbits;
+      entries[j].pattern=_codes[i][j].pattern<<entries[j].shift&mask;
+      entries[j].token=j;
+    }
+    /*Sort the codes into ascending order.
+      This is the order the leaves of the tree will be traversed.*/
+    qsort(entries,TH_NDCT_TOKENS,sizeof(entries[0]),huff_entry_cmp);
+    /*For each leaf of the tree:*/
+    bpos=maxlen;
+    for(j=0;j<TH_NDCT_TOKENS;j++){
+      int bit;
+      /*If this code has any bits at all.*/
+      if(entries[j].shift<maxlen){
+        /*Descend into the tree, writing a bit for each branch.*/
+        for(;bpos>entries[j].shift;bpos--)oggpackB_write(_opb,0,1);
+        /*Mark this as a leaf node, and write its value.*/
+        oggpackB_write(_opb,1,1);
+        oggpackB_write(_opb,entries[j].token,5);
+        /*For each 1 branch we've descended, back up the tree until we reach a
+           0 branch.*/
+        bit=1<<bpos;
+        for(;entries[j].pattern&bit;bpos++)bit<<=1;
+        /*Validate the code.*/
+        if(j+1<TH_NDCT_TOKENS){
+          mask=~(bit-1)<<1;
+          /*The next entry should have a 1 bit where we had a 0, and should
+             match our code above that bit.
+            This verifies both fullness and prefix-freeness simultaneously.*/
+          if(!(entries[j+1].pattern&bit)||
+           (entries[j].pattern&mask)!=(entries[j+1].pattern&mask)){
+            return TH_EINVAL;
+          }
+        }
+        /*If there are no more codes, we should have ascended back to the top
+           of the tree.*/
+        else if(bpos<maxlen)return TH_EINVAL;
+      }
+    }
+  }
+  return 0;
+}

Added: trunk/theora-exp/lib/huffenc.h
===================================================================
--- trunk/theora-exp/lib/huffenc.h	                        (rev 0)
+++ trunk/theora-exp/lib/huffenc.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,17 @@
+#if !defined(_huffenc_H)
+# define _huffenc_H (1)
+# include "huffman.h"
+
+
+
+extern const th_huff_code
+ TH_VP31_HUFF_CODES[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS];
+
+
+
+int oc_huff_codes_pack(oggpack_buffer *_opb,
+ const th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]);
+
+
+
+#endif

Added: trunk/theora-exp/lib/huffman.h
===================================================================
--- trunk/theora-exp/lib/huffman.h	                        (rev 0)
+++ trunk/theora-exp/lib/huffman.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,53 @@
+#if !defined(_huffman_H)
+# define _hufffman_H (1)
+# include "theora/codec.h"
+# include "ocintrin.h"
+
+/*The range of valid quantized DCT coefficient values.
+  VP3 used 511 in the encoder, but the bitstream is capable of 580.*/
+#define OC_DCT_VAL_RANGE         (580)
+
+#define OC_NDCT_TOKEN_BITS       (5)
+
+#define OC_DCT_EOB1_TOKEN        (0)
+#define OC_DCT_EOB2_TOKEN        (1)
+#define OC_DCT_EOB3_TOKEN        (2)
+#define OC_DCT_REPEAT_RUN0_TOKEN (3)
+#define OC_DCT_REPEAT_RUN1_TOKEN (4)
+#define OC_DCT_REPEAT_RUN2_TOKEN (5)
+#define OC_DCT_REPEAT_RUN3_TOKEN (6)
+
+#define OC_DCT_SHORT_ZRL_TOKEN   (7)
+#define OC_DCT_ZRL_TOKEN         (8)
+
+#define OC_ONE_TOKEN             (9)
+#define OC_MINUS_ONE_TOKEN       (10)
+#define OC_TWO_TOKEN             (11)
+#define OC_MINUS_TWO_TOKEN       (12)
+
+#define OC_DCT_VAL_CAT2          (13)
+#define OC_DCT_VAL_CAT3          (17)
+#define OC_DCT_VAL_CAT4          (18)
+#define OC_DCT_VAL_CAT5          (19)
+#define OC_DCT_VAL_CAT6          (20)
+#define OC_DCT_VAL_CAT7          (21)
+#define OC_DCT_VAL_CAT8          (22)
+
+#define OC_DCT_RUN_CAT1A         (23)
+#define OC_DCT_RUN_CAT1B         (28)
+#define OC_DCT_RUN_CAT1C         (29)
+#define OC_DCT_RUN_CAT2A         (30)
+#define OC_DCT_RUN_CAT2B         (31)
+
+#define OC_NDCT_EOB_TOKEN_MAX    (7)
+#define OC_NDCT_ZRL_TOKEN_MAX    (9)
+#define OC_NDCT_VAL_MAX          (23)
+#define OC_NDCT_VAL_CAT1_MAX     (13)
+#define OC_NDCT_VAL_CAT2_MAX     (17)
+#define OC_NDCT_VAL_CAT2_SIZE    (OC_NDCT_VAL_CAT2_MAX-OC_DCT_VAL_CAT2)
+#define OC_NDCT_RUN_MAX          (32)
+#define OC_NDCT_RUN_CAT1A_MAX    (28)
+
+extern const int OC_DCT_TOKEN_EXTRA_BITS[TH_NDCT_TOKENS];
+
+#endif

Added: trunk/theora-exp/lib/idct.c
===================================================================
--- trunk/theora-exp/lib/idct.c	                        (rev 0)
+++ trunk/theora-exp/lib/idct.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,253 @@
+#include <string.h>
+#include <ogg/ogg.h>
+#include "dct.h"
+#include "idct.h"
+
+/*Performs an inverse 8 point Type-II DCT transform.
+  The output is scaled by a factor of 2 relative to the orthonormal version of
+   the transform.
+  _y: The buffer to store the result in.
+      Data will be placed in every 8th entry (e.g., in a column of an 8x8
+       block).
+  _x: The input coefficients.
+      The first 8 entries are used (e.g., from a row of an 8x8 block).*/
+static void idct8(ogg_int16_t *_y,const ogg_int16_t _x[8]){
+  ogg_int32_t t[8];
+  ogg_int32_t r;
+  /*Stage 1:*/
+  /*0-1 butterfly.*/
+  t[0]=OC_C4S4*(ogg_int16_t)(_x[0]+_x[4])>>16;
+  t[1]=OC_C4S4*(ogg_int16_t)(_x[0]-_x[4])>>16;
+  /*2-3 rotation by 6pi/16.*/
+  t[2]=(OC_C6S2*_x[2]>>16)-(OC_C2S6*_x[6]>>16);
+  t[3]=(OC_C2S6*_x[2]>>16)+(OC_C6S2*_x[6]>>16);
+  /*4-7 rotation by 7pi/16.*/
+  t[4]=(OC_C7S1*_x[1]>>16)-(OC_C1S7*_x[7]>>16);
+  /*5-6 rotation by 3pi/16.*/
+  t[5]=(OC_C3S5*_x[5]>>16)-(OC_C5S3*_x[3]>>16);
+  t[6]=(OC_C5S3*_x[5]>>16)+(OC_C3S5*_x[3]>>16);
+  t[7]=(OC_C1S7*_x[1]>>16)+(OC_C7S1*_x[7]>>16);
+  /*Stage 2:*/
+  /*4-5 butterfly.*/
+  r=t[4]+t[5];
+  t[5]=OC_C4S4*(ogg_int16_t)(t[4]-t[5])>>16;
+  t[4]=r;
+  /*7-6 butterfly.*/
+  r=t[7]+t[6];
+  t[6]=OC_C4S4*(ogg_int16_t)(t[7]-t[6])>>16;
+  t[7]=r;
+  /*Stage 3:*/
+  /*0-3 butterfly.*/
+  r=t[0]+t[3];
+  t[3]=t[0]-t[3];
+  t[0]=r;
+  /*1-2 butterfly.*/
+  r=t[1]+t[2];
+  t[2]=t[1]-t[2];
+  t[1]=r;
+  /*6-5 butterfly.*/
+  r=t[6]+t[5];
+  t[5]=t[6]-t[5];
+  t[6]=r;
+  /*Stage 4:*/
+  /*0-7 butterfly.*/
+  _y[0<<3]=(ogg_int16_t)(t[0]+t[7]);
+  /*1-6 butterfly.*/
+  _y[1<<3]=(ogg_int16_t)(t[1]+t[6]);
+  /*2-5 butterfly.*/
+  _y[2<<3]=(ogg_int16_t)(t[2]+t[5]);
+  /*3-4 butterfly.*/
+  _y[3<<3]=(ogg_int16_t)(t[3]+t[4]);
+  _y[4<<3]=(ogg_int16_t)(t[3]-t[4]);
+  _y[5<<3]=(ogg_int16_t)(t[2]-t[5]);
+  _y[6<<3]=(ogg_int16_t)(t[1]-t[6]);
+  _y[7<<3]=(ogg_int16_t)(t[0]-t[7]);
+}
+
+/*Performs an inverse 8 point Type-II DCT transform.
+  The output is scaled by a factor of 2 relative to the orthonormal version of
+   the transform.
+  _y: The buffer to store the result in.
+      Data will be placed in every 8th entry (e.g., in a column of an 8x8
+       block).
+  _x: The input coefficients.
+      Only the first 4 entries are used.
+      The other 4 are assumed to be 0.*/
+static void idct8_4(ogg_int16_t *_y,const ogg_int16_t _x[8]){
+  ogg_int32_t t[8];
+  ogg_int32_t r;
+  /*Stage 1:*/
+  t[0]=OC_C4S4*_x[0]>>16;
+  t[2]=OC_C6S2*_x[2]>>16;
+  t[3]=OC_C2S6*_x[2]>>16;
+  t[4]=OC_C7S1*_x[1]>>16;
+  t[5]=-(OC_C5S3*_x[3]>>16);
+  t[6]=OC_C3S5*_x[3]>>16;
+  t[7]=OC_C1S7*_x[1]>>16;
+  /*Stage 2:*/
+  r=t[4]+t[5];
+  t[5]=OC_C4S4*(ogg_int16_t)(t[4]-t[5])>>16;
+  t[4]=r;
+  r=t[7]+t[6];
+  t[6]=OC_C4S4*(ogg_int16_t)(t[7]-t[6])>>16;
+  t[7]=r;
+  /*Stage 3:*/
+  t[1]=t[0]+t[2];
+  t[2]=t[0]-t[2];
+  r=t[0]+t[3];
+  t[3]=t[0]-t[3];
+  t[0]=r;
+  r=t[6]+t[5];
+  t[5]=t[6]-t[5];
+  t[6]=r;
+  /*Stage 4:*/
+  _y[0<<3]=(ogg_int16_t)(t[0]+t[7]);
+  _y[1<<3]=(ogg_int16_t)(t[1]+t[6]);
+  _y[2<<3]=(ogg_int16_t)(t[2]+t[5]);
+  _y[3<<3]=(ogg_int16_t)(t[3]+t[4]);
+  _y[4<<3]=(ogg_int16_t)(t[3]-t[4]);
+  _y[5<<3]=(ogg_int16_t)(t[2]-t[5]);
+  _y[6<<3]=(ogg_int16_t)(t[1]-t[6]);
+  _y[7<<3]=(ogg_int16_t)(t[0]-t[7]);
+}
+
+/*Performs an inverse 8 point Type-II DCT transform.
+  The output is scaled by a factor of 2 relative to the orthonormal version of
+   the transform.
+  _y: The buffer to store the result in.
+      Data will be placed in every 8th entry (e.g., in a column of an 8x8
+       block).
+  _x: The input coefficients.
+      Only the first 3 entries are used.
+      The other 5 are assumed to be 0.*/
+static void idct8_3(ogg_int16_t *_y,const ogg_int16_t _x[8]){
+  ogg_int32_t t[8];
+  ogg_int32_t r;
+  /*Stage 1:*/
+  t[0]=OC_C4S4*_x[0]>>16;
+  t[2]=OC_C6S2*_x[2]>>16;
+  t[3]=OC_C2S6*_x[2]>>16;
+  t[4]=OC_C7S1*_x[1]>>16;
+  t[7]=OC_C1S7*_x[1]>>16;
+  /*Stage 2:*/
+  t[5]=OC_C4S4*t[4]>>16;
+  t[6]=OC_C4S4*t[7]>>16;
+  /*Stage 3:*/
+  t[1]=t[0]+t[2];
+  t[2]=t[0]-t[2];
+  r=t[0]+t[3];
+  t[3]=t[0]-t[3];
+  t[0]=r;
+  r=t[6]+t[5];
+  t[5]=t[6]-t[5];
+  t[6]=r;
+  /*Stage 4:*/
+  _y[0<<3]=(ogg_int16_t)(t[0]+t[7]);
+  _y[1<<3]=(ogg_int16_t)(t[1]+t[6]);
+  _y[2<<3]=(ogg_int16_t)(t[2]+t[5]);
+  _y[3<<3]=(ogg_int16_t)(t[3]+t[4]);
+  _y[4<<3]=(ogg_int16_t)(t[3]-t[4]);
+  _y[5<<3]=(ogg_int16_t)(t[2]-t[5]);
+  _y[6<<3]=(ogg_int16_t)(t[1]-t[6]);
+  _y[7<<3]=(ogg_int16_t)(t[0]-t[7]);
+}
+
+
+/*Performs an inverse 8 point Type-II DCT transform.
+  The output is scaled by a factor of 2 relative to the orthonormal version of
+   the transform.
+  _y: The buffer to store the result in.
+      Data will be placed in every 8th entry (e.g., in a column of an 8x8
+       block).
+  _x: The input coefficients.
+      Only the first 2 entries are used.
+      The other 6 are assumed to be 0.*/
+static void idct8_2(ogg_int16_t *_y,const ogg_int16_t _x[8]){
+  ogg_int32_t t[8];
+  ogg_int32_t r;
+  /*Stage 1:*/
+  t[0]=OC_C4S4*_x[0]>>16;
+  t[4]=OC_C7S1*_x[1]>>16;
+  t[7]=OC_C1S7*_x[1]>>16;
+  /*Stage 2:*/
+  t[5]=OC_C4S4*t[4]>>16;
+  t[6]=OC_C4S4*t[7]>>16;
+  /*Stage 3:*/
+  r=t[6]+t[5];
+  t[5]=t[6]-t[5];
+  t[6]=r;
+  /*Stage 4:*/
+  _y[0<<3]=(ogg_int16_t)(t[0]+t[7]);
+  _y[1<<3]=(ogg_int16_t)(t[0]+t[6]);
+  _y[2<<3]=(ogg_int16_t)(t[0]+t[5]);
+  _y[3<<3]=(ogg_int16_t)(t[0]+t[4]);
+  _y[4<<3]=(ogg_int16_t)(t[0]-t[4]);
+  _y[5<<3]=(ogg_int16_t)(t[0]-t[5]);
+  _y[6<<3]=(ogg_int16_t)(t[0]-t[6]);
+  _y[7<<3]=(ogg_int16_t)(t[0]-t[7]);
+}
+
+
+/*Performs an inverse 8 point Type-II DCT transform.
+  The output is scaled by a factor of 2 relative to the orthonormal version of
+   the transform.
+  _y: The buffer to store the result in.
+      Data will be placed in every 8th entry (e.g., in a column of an 8x8
+       block).
+  _x: The input coefficients.
+      Only the first entry is used.
+      The other 7 are assumed to be 0.*/
+static void idct8_1(ogg_int16_t *_y,const ogg_int16_t _x[1]){
+  _y[0<<3]=_y[1<<3]=_y[2<<3]=_y[3<<3]=
+   _y[4<<3]=_y[5<<3]=_y[6<<3]=_y[7<<3]=(ogg_int16_t)(OC_C4S4*_x[0]>>16);
+}
+
+/*Performs an inverse 8x8 Type-II DCT transform.
+  The input is assumed to be scaled by a factor of 4 relative to orthonormal
+   version of the transform.
+  _y: The buffer to store the result in.
+      This may be the same as _x.
+  _x: The input coefficients. */
+void oc_idct8x8_c(ogg_int16_t _y[64],const ogg_int16_t _x[64]){
+  const ogg_int16_t *in;
+  ogg_int16_t       *end;
+  ogg_int16_t       *out;
+  ogg_int16_t        w[64];
+  /*Transform rows of x into columns of w.*/
+  for(in=_x,out=w,end=out+8;out<end;in+=8,out++)idct8(out,in);
+  /*Transform rows of w into columns of y.*/
+  for(in=w,out=_y,end=out+8;out<end;in+=8,out++)idct8(out,in);
+  /*Adjust for scale factor.*/
+  for(out=_y,end=out+64;out<end;out++)*out=(ogg_int16_t)(*out+8>>4);
+}
+
+/*Performs an inverse 8x8 Type-II DCT transform.
+  The input is assumed to be scaled by a factor of 4 relative to orthonormal
+   version of the transform.
+  All coefficients but the first 10 in zig-zag scan order are assumed to be 0:
+   x  x  x  x  0  0  0  0
+   x  x  x  0  0  0  0  0
+   x  x  0  0  0  0  0  0
+   x  0  0  0  0  0  0  0
+   0  0  0  0  0  0  0  0
+   0  0  0  0  0  0  0  0
+   0  0  0  0  0  0  0  0
+   0  0  0  0  0  0  0  0
+  _y: The buffer to store the result in.
+      This may be the same as _x.
+  _x: The input coefficients. */
+void oc_idct8x8_10_c(ogg_int16_t _y[64],const ogg_int16_t _x[64]){
+  const ogg_int16_t *in;
+  ogg_int16_t       *end;
+  ogg_int16_t       *out;
+  ogg_int16_t        w[64];
+  /*Transform rows of x into columns of w.*/
+  idct8_4(w,_x);
+  idct8_3(w+1,_x+8);
+  idct8_2(w+2,_x+16);
+  idct8_1(w+3,_x+24);
+  /*Transform rows of w into columns of y.*/
+  for(in=w,out=_y,end=out+8;out<end;in+=8,out++)idct8_4(out,in);
+  /*Adjust for scale factor.*/
+  for(out=_y,end=out+64;out<end;out++)*out=(ogg_int16_t)(*out+8>>4);
+}

Added: trunk/theora-exp/lib/idct.h
===================================================================
--- trunk/theora-exp/lib/idct.h	                        (rev 0)
+++ trunk/theora-exp/lib/idct.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,9 @@
+/*Inverse DCT transforms.*/
+#include <ogg/ogg.h>
+#if !defined(_idct_H)
+# define _idct_H (1)
+
+void oc_idct8x8_c(ogg_int16_t _y[64],const ogg_int16_t _x[64]);
+void oc_idct8x8_10_c(ogg_int16_t _y[64],const ogg_int16_t _x[64]);
+
+#endif

Added: trunk/theora-exp/lib/impmap.c
===================================================================
--- trunk/theora-exp/lib/impmap.c	                        (rev 0)
+++ trunk/theora-exp/lib/impmap.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,2284 @@
+#include <stdlib.h>
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#include <ogg/ogg.h>
+#include "encint.h"
+#include "psych.h"
+#if defined(OC_DUMP_IMAGES)
+# include <stdio.h>
+# include "png.h"
+#endif
+
+/*Importance map calculations.
+
+  This is where we attempt to model high-level vision processes, such as
+   object tracking and visual attention.
+  The importance map isolates "regions of interest" or areas of the image that
+   are likely to draw viewer attention.
+  Because the visual accuity of the fovea is so much higher than in a viewer's
+   peripheral vision, bits can be taken from uninteresting areas and allocated
+   to areas that the viewer is actually looking at.
+
+  The algorithm here is mostly that which was described by Osberger in his
+   Ph.D. thesis \cite{Osb99}.
+  This document was once available online, but as both the student and his
+   supervising professor have since left the university, it does not appear to
+   be available any longer.
+  The algorithm has the advantages of being simple (and thus fairly fast),
+   requiring no tuning parameters, and having demonstrable correlation with
+   actual human fixations (for still images only).
+  It is also well described in the thesis, which makes a re-implementation
+   from scratch fairly easy.
+
+  It is, however, a fairly ad-hoc algorithm.
+  While its design decisions are in fact made by taking into account real
+   properties of the human visual system, they are not necessarily the only
+   decisions that could be made, or even the best.
+  Thus experimentation could potentially produce a better method, but this
+   would require collecting our own eye-tracking data to validate the model
+   against.
+
+  Also, its extension to video has not been experimentally validated.
+  Although correlation was demonstrated against actual human fixation points
+   for still images, a similar experiment was not carried out for video
+   sequences.
+
+  @PHDTHESIS{Osb99,
+    author="Wilfried Osberger",
+    title="Perceptual Vision Models for Picture Quality Assessment and
+     Compression Applications",
+    school="Queensland University of Technology",
+    address="Brisbane, Australia",
+    month="Mar.",
+    year=1999
+  }*/
+
+/*The number of weighting factors assigned to each segmented region.*/
+#define OC_IMPMAP_NSEG_WEIGHTS          (5)
+
+/*The number of weighting factors which must be rescaled into the interval
+   [0,1]*/
+#define OC_IMPMAP_NSEG_RESCALED_WEIGHTS (2)
+
+/*The list of weighting factors assigned to each segmented region.*/
+enum{
+  /*Contrast with surrounding regions.*/
+  OC_IMPMAP_WEIGHT_CONTRAST,
+  /*Unusualness of the region's shape.*/
+  OC_IMPMAP_WEIGHT_SHAPE,
+  /*Note: These three come last, since they do not need to be rescaled.*/
+  /*Size of the region.*/
+  OC_IMPMAP_WEIGHT_SIZE,
+  /*Closeness of the region to the image center.*/
+  OC_IMPMAP_WEIGHT_LOCATION,
+  /*Degree to which the region is in the foreground vs. background.*/
+  OC_IMPMAP_WEIGHT_FOREGROUND
+};
+
+/*The limits for assessing motion as an attractor of attention, in deg/sec.
+  Importance increases linearly from 0 to 1 over the range [min,p1], stays
+   constant over [p1,p2], and decreases linearly over the range [p2,max].
+  It might be wise to disable the upper limit, so that moving farther away
+   from the screen does not make the image look worse as faster motions are
+   slowed down enough to become visible.*/
+
+/*Minimum important motion.*/
+#define OC_IMPMAP_MOT_MIN (0.0F)
+/*First peak important motion.*/
+#define OC_IMPMAP_MOT_P1  (5.0F)
+/*Second peak important motion.*/
+#define OC_IMPMAP_MOT_P2  (10.0F)
+/*Maximum important motion.*/
+#define OC_IMPMAP_MOT_MAX (15.0F)
+
+/*Image segmentation code.
+  The image segmentation drives the rest of the importance map calculations.
+  Improving the segmentation process improves the entire rest of the process.
+  The segmentation algorithm used here roughly corresponds to the one
+   described by Osberger, since minimal research (a few hours on the web) did
+   not turn up anything that looked to have a better speed-quality tradeoff.
+
+  The algorithm is a standard split-merge variant.
+  The split phase starts with one region that covers the whole image.
+  So long as its variance is above a threshold, it is recursively subdivided
+   into four sub-regions.
+  After the split phase, a merge phase combines neighboring sub-regions so
+   long as the variance of the combined region stays below a threshold.
+  Finally, all regions smaller than a fixed number of pixels are combined with
+   their largest neighbor.
+  All determinations of borders, neighbors and connectedness use
+   4-connectivity.
+
+  Although Osberger used a fixed threshold to determine whether or not to
+   split or merge regions, we use the Bayesian Information Criterion instead.
+  This removes the only adjustable parameter from Osberger's model.
+  The BIC for a model is:
+
+  BIC(model)=log P(data|model)-
+   \lambda/2(model dimension)log(data sample count).
+
+  Using a Gaussian distribution as the model, this reduces to
+   -(1/2)(data sample count)log(variance)-\lambda*log(data sample count).
+  We scale this by two to avoid the extra multiply.
+  The weight \lambda in the last term is traditionally introduced to
+   penalize small samples, but can also serve as a compensation for the large
+   variances found with data in the range 0..255.
+  Like Osberger, however, a strict minimal region size is enforced.
+  The minimum size allows us to place a hard upper bound on the number of
+   regions in order to allocate storage once ahead of time.
+
+  The variances are computed using a reduced-resolution table of sums.
+  This table contains accumulated sums from the upper-left corner of the
+   image sampled every OC_SEG_MOMENT_RES pixels.
+  The initial row and column of the table contain all zeros, so that
+   sum[width][height] works as expected even if width or height are 0.
+  The reduced resolution is designed to reduce memory requirements, since
+   otherwise they would require 8 bytes per pixel.
+  With a resolution of 16 pixels, this is reduced to 1/32 byte per pixel.
+  Once recursion descends below this resolution level, a local moment table is
+   computed for the remaining lookups.
+  Because the local moment table is small (2312 bytes), it easily fits in
+   cache.
+  Thus even though this method requires scanning the input image as
+   much as two times, it yields a vast reduction in the amount of memory
+   outside of cache that is accessed (2.125 bytes read, 0.03125 bytes written
+   per pixel as compared to 10 bytes read, 8 bytes written).
+
+  Osberger never specifies how the next region pair to consider merging is
+   chosen, despite this order playing a large role in the final output.
+  Our strategy is as follows:
+  As soon as a region is created, its existing neighbors are enumerated and
+   any potential merge pairs are put on a heap.
+  The heap is then emptied by merging the pair at the top.
+  The newly created region then checks its neighbors and adds those pairs to
+   the heap if necessary, and the process continues until the heap is empty.
+  
+  First local regions are created in a local block, OC_SEG_MOMENT_RES by
+   OC_SEG_MOMENT_RES pixels.
+  These are given temporary, negative labels starting at -2 (-1 is reserved
+   to indicate no region).
+  Once all the regions in a local block are established, all the pairs
+   involving a local region that does not satisfy the minimum pixel size are
+   placed on the heap, and merging continues until the heap is empty.
+  This is unlike Osberger, who simply merged small regions with their largest
+   neighbor.
+
+  Because small regions can only accumulate in a local block, the total number
+   of regions present at any one time can be reasonably bounded.
+  Otherwise, the best bound available would be the number of pixels in the
+   image.
+  This also removes overhead early on required to deal with one pixel regions
+   that often accumulate on region borders.
+   
+  TODO: Initial results do not look very promising.
+  Candidates to replace this segmentation algorithm are needed.
+  One potential solution may be to perform the initial split based upon edge
+   detection results within the region instead of on region variance.
+  Also, operating on an RLE-compressed label image may provide further speed
+   improvements.*/
+
+/*The log base 2 of the resolution of the global moment table.*/
+#define OC_SEG_MOMENT_RES_LOG   (4)
+/*The resolution of the global moment table.*/
+#define OC_SEG_MOMENT_RES       (1<<OC_SEG_MOMENT_RES_LOG)
+/*A mask for the bits below the resolution of the moment table.*/
+#define OC_SEG_MOMENT_RES_MASK  (OC_SEG_MOMENT_RES-1)
+
+/*The maximum number of local regions.*/
+#define OC_SEG_NLOCAL_REGS      (OC_SEG_MOMENT_RES*OC_SEG_MOMENT_RES)
+/*The maximum number of local pairs.*/
+#define OC_SEG_NLOCAL_PAIRS     (OC_SEG_MOMENT_RES*(3*OC_SEG_MOMENT_RES+2)-6)
+
+/*The minimum size of a segmented region.
+  Imposing this limit gives us an upper bound on the number of regions that
+   can be created, which allows us to allocate storage in advance.*/
+#define OC_SEG_REGION_SZ_MIN    (16)
+
+/*The weight to associate with the model cost, scaled by a factor of 2.*/
+/*#define OC_SEG_MODEL_WEIGHT     (2*1)*/
+#define OC_SEG_MODEL_SPLIT_WEIGHT (2*4)
+#define OC_SEG_MODEL_MERGE_WEIGHT (2*16)
+
+
+
+typedef struct oc_seg_region       oc_seg_region;
+typedef struct oc_seg_link         oc_seg_link;
+typedef struct oc_seg_pair         oc_seg_pair;
+typedef struct oc_seg_ctx          oc_seg_ctx;
+
+
+
+/*Called when the BIC factor of a candidate merge pair has been updated to
+   add it to, remove it from, or update its position in the heap.
+  _seg:      The segmentation context.
+  _pair:     The pair that was updated.
+  _old_dbic: The old delta BIC factor.*/
+typedef void (*oc_seg_pair_reheap_func)(oc_seg_ctx *_seg,oc_seg_pair *_pair,
+ float _old_dbic);
+
+
+
+/*Region pairs belong to two doubly linked lists: one for each region they
+   belong to.
+  This is a link used in those lists.
+  The lists are circular, to minimize special cases, with the head/tail link
+   pointing to a NULL pair contained in the region itself.*/
+struct oc_seg_link{
+  /*The region index of the other region in this pair.
+    For the link stored within a region itself, this index is the region label
+     to use after merging.*/
+  int          regi;
+  /*The pair this link is contained in, or NULL if it is the head/tail link.*/
+  oc_seg_pair *pair;
+  /*The next link in the chain.*/
+  oc_seg_link *next;
+  /*The previous link in the chain.*/
+  oc_seg_link *prev;
+};
+
+struct oc_seg_region{
+  /*The list of pairs to which this region belongs.*/
+  oc_seg_link link;
+  /*The number of pixels in the region.*/
+  int         npixels;
+  /*The sum of the pixel values in the region.*/
+  float       sumx;
+  /*The sum of the squared pixel values in the region.*/
+  float       sumx2;
+  /*The base BIC level used to drive merge decisions.*/
+  float       bic;
+};
+
+/*A pair of neighboring regions.*/
+struct oc_seg_pair{
+  /*The links for this pair.*/
+  oc_seg_link   links[2];
+  /*The number of pixels in the region.*/
+  int           npixels;
+  /*The sum of the pixel values in the region.*/
+  float         sumx;
+  /*The sum of the squared pixel values in the region.*/
+  float         sumx2;
+  /*The base BIC level used to drive merge decisions.*/
+  float         bic;
+  /*The location in the merge heap.*/
+  int           heapi;
+  /*The BIC delta for keeping the regions separate.*/
+  float         dbic;
+};
+
+/*Buffers and tables needed to drive the segmentation process.*/
+struct oc_seg_ctx{
+  /*The global first moment table.*/
+  float                   **sumx;
+  /*The global second moment table.*/
+  float                   **sumx2;
+  /*The local first moment table.*/
+  float                   **local_sumx;
+  /*The local second moment table.*/
+  float                   **local_sumx2;
+  /*The region labels for each pixel.*/
+  int                     **labels;
+  /*The minimum power of 2 greater than or equal to the image width and
+     height.*/
+  int                       level_max;
+  /*The number of local regions in a local segmentation.
+    This count starts at -2 and goes down as each region is added.*/
+  int                       nlocal_regions;
+  /*The number of regions in the segmentation.*/
+  int                       nregions;
+  /*The total number of regions allocated.*/
+  int                       cregions;
+  /*The number of pairs in use.*/
+  int                       npairs;
+  /*The size of the global heap.*/
+  int                       nheap;
+  /*The list of regions.*/
+  oc_seg_region            *regions;
+  /*The relabeling list used in the last step.*/
+  int                      *relabels;
+  /*The storage for the neighbor lists for each region.*/
+  oc_seg_pair              *pairs;
+  /*The list of available pairs.*/
+  oc_seg_link              *free_pairs;
+  /*The global merge heap.*/
+  oc_seg_pair             **heap;
+  /*The reheaping function.*/
+  oc_seg_pair_reheap_func   reheap;
+};
+
+
+
+typedef struct oc_impmap_region   oc_impmap_region;
+
+
+
+/*Called to fill in the importance values for each of the chroma plane
+   fragments given the Y plane fragments' importances.
+  A different version of this function is called depending on the type of
+   chroma decimation active.
+  _efrag:             The encoding fragment info array.
+  _map:               The fragment map for the current macro block.
+  _yfrag_imp_weights: The weight for each fragment in the Y plane.*/
+typedef void (*oc_impmap_chroma_frag_weight_func)(
+ oc_fragment_enc_info *_efrag,oc_mb_map _map,
+ const float _yfrag_imp_weights[4]);
+
+
+
+/*The per-region information gathered for the importance map.*/
+struct oc_impmap_region{
+  /*The number of pixels on the region's border.*/
+  int              nborder;
+  /*The number of pixels on the region's edge.*/
+  int              nedge;
+  /*The number of pixels in the central 25% of the image.*/
+  int              ncenter;
+  /*The weight given to the region because of its contrast.*/
+  float            weights[OC_IMPMAP_NSEG_WEIGHTS];
+  /*The final importance of the region.*/
+  float            importance;
+};
+
+/*Importance map context information.*/
+struct oc_impmap_ctx{
+  /*The pipeline stage.*/
+  oc_enc_pipe_stage                  pipe;
+  /*Segmentation information for the Y plane.
+    Some day we may also wish to segment the chroma planes, or derive a
+     segmentation using all 3 planes at once.*/
+  oc_seg_ctx                         seg;
+  /*The reciprocal of the maximum region size to count towards a region's
+     importance.
+    This cap prevents very large regions from dominating the scene.*/
+  float                              inv_region_sz_max;
+  /*The reciprocal of the maximum number of edge pixels required to consider a
+     region completely in the background.
+    This value is used when computing the foreground weight of a region.*/
+  float                              inv_edge_sz_max;
+  /*The horizontal offset used to convert from image buffer coordinates to
+     label buffer coordinates.*/
+  int                                pic_x;
+  /*The vertical offset used to convert from image buffer coordinates to label
+     buffer coordinates.*/
+  int                                pic_y;
+  /*The boundaries of each of the three piecewise sections of the importance
+     function for motion, pre-adjusted to half-pixels/frame.*/
+  float                              mot_limits[4];
+  /*The average importance from the previous frame.*/
+  float                              imp_avg;
+  /*The per-region information gathered for the importance map.*/
+  oc_impmap_region                  *regions;
+  /*The encoding context we're embedded in.*/
+  oc_enc_ctx                        *enc;
+  /*The function used to update chroma fragment importances.*/
+  oc_impmap_chroma_frag_weight_func  chroma_frag_weight;
+};
+
+
+
+/*The following masks are used to test quad-tree child nodes for boundary
+   conditions.
+  The bits they are tested against are the following:
+  0: size>width
+  1: size>height
+  2: (size/2)>width
+  3: (size/2)>height
+  4: (size/2)==width
+  5: (size/2)==height
+  Here "size" is the size of quadtree nodes at the parent's level, and "width"
+   and "height" are the dimensions of the part of the parent node that lies
+   inside the image.
+
+  The quadtree nodes are organized as:
+  +---+---+
+  | 0 | 1 |
+  +---+---+
+  | 2 | 3 |
+  +---+---+
+*/
+
+/*If any of the bits in these masks are set, the corresponding child node
+   is completely clipped by the border.*/
+static const int OC_SEG_CLIP_MASKS[4]={0x0,0x14,0x28,0x3C};
+/*If the bit in these masks is set, the width of the child node is partially
+   clipped by the border.*/
+static const int OC_SEG_BORDER_XMASKS[4]={0x4,0x1,0x4,0x1};
+/*If the bit in these masks is set, the height of the child node is partially
+   clipped by the border.*/
+static const int OC_SEG_BORDER_YMASKS[4]={0x8,0x8,0x2,0x2};
+/*If any of the bits in these masks are set, either the width or height of the
+   child node is partially clipped by the border.*/
+static const int OC_SEG_BORDER_MASKS[4]={0xC,0x9,0x6,0x3};
+
+
+
+/*Computes moments for an image row, saving samples every
+   OC_SEG_MOMENT_RES pixels.
+  These moments are added to the previous row value.
+  _xrow:       The storage for the first moments.
+  _x2row:      The storage for the second moments.
+  _xrow_prev:  The previous first moments for the row.
+  _x2row_prev: The previous second moments for the row.
+  _irow:       The image row to accumulate.
+  _width:      The width of the row in pixels.*/
+static void oc_seg_sum_moment_row(float *_xrow,float *_x2row,
+ const float *_xrow_prev,const float *_x2row_prev,
+ const unsigned char *_irow,int _width){
+  float xsum;
+  float x2sum;
+  int   xmax;
+  int   x;
+  int i;
+  xmax=_width>>OC_SEG_MOMENT_RES_LOG;
+  xsum=x2sum=0;
+  for(x=1;x<=xmax;x++){
+    for(i=0;i<OC_SEG_MOMENT_RES;i++){
+      xsum+=*_irow;
+      x2sum+=*_irow**_irow;
+      _irow++;
+    }
+    _xrow[x]=xsum+_xrow_prev[x];
+    _x2row[x]=x2sum+_x2row_prev[x];
+  }
+  i=_width&OC_SEG_MOMENT_RES_MASK;
+  if(i>0){
+    do{
+      xsum+=*_irow;
+      x2sum+=*_irow**_irow;
+      _irow++;
+    }
+    while(--i>0);
+    _xrow[x]=xsum+_xrow_prev[x];
+    _x2row[x]=x2sum+_x2row_prev[x];
+  }
+}
+
+/*Sum up 2-dimensional moments over the whole image.
+  These are used for fast variance calculations over rectangular
+   regions of the image during the split phase.
+  The value at each position is the moment summed over the image
+   region above and to the left.
+  _seg:    The image segmentation context.
+  _iplane: The image plane to sum the moments over.
+           This should already be adjusted to cover only the visible
+            frame, and not the full encoded frame.*/
+static void oc_seg_sum_moments(oc_seg_ctx *_seg,const th_img_plane *_iplane){
+  const unsigned char *ypix;
+  int                  ymax;
+  int                  y;
+  int                  i;
+  ypix=_iplane->data;
+  ymax=_iplane->height>>OC_SEG_MOMENT_RES_LOG;
+  for(y=1;y<=ymax;y++){
+    oc_seg_sum_moment_row(_seg->sumx[y],_seg->sumx2[y],
+     _seg->sumx[y-1],_seg->sumx2[y-1],ypix,_iplane->width);
+    ypix+=_iplane->ystride;
+    for(i=1;i<OC_SEG_MOMENT_RES;i++){
+      oc_seg_sum_moment_row(_seg->sumx[y],_seg->sumx2[y],
+       _seg->sumx[y],_seg->sumx2[y],ypix,_iplane->width);
+      ypix+=_iplane->ystride;
+    }
+  }
+  i=_iplane->height&OC_SEG_MOMENT_RES_MASK;
+  if(i>0){
+    oc_seg_sum_moment_row(_seg->sumx[y],_seg->sumx2[y],
+     _seg->sumx[y-1],_seg->sumx2[y-1],ypix,_iplane->width);
+    ypix+=_iplane->ystride;
+    while(--i>0){
+      oc_seg_sum_moment_row(_seg->sumx[y],_seg->sumx2[y],
+       _seg->sumx[y],_seg->sumx2[y],ypix,_iplane->width);
+      ypix+=_iplane->ystride;
+    }
+  }
+}
+
+/*Computes the sum over the given region using the given moment
+   table.
+  Note that coordinates are those of the table, not of the image from which
+   the moments were computed.
+  _sums:    The pre-computed moment table.
+  _tx:      The X coordinate in the table of the upper-left hand corner of the
+             region.
+  _ty:      The Y coordinate in the table of the upper-right hand corner of
+             the region.
+  _twidth:  The width of the region in the table.
+  _theight: The height of the region in the table.
+  Return: The sum of the appropriate value over the given region.*/
+static float oc_seg_sum_region(/*const*/ float **_sums,int _tx,int _ty,
+ int _twidth,int _theight){
+  return _sums[_ty][_tx]-_sums[_ty][_tx+_twidth]-
+   _sums[_ty+_theight][_tx]+_sums[_ty+_theight][_tx+_twidth];
+}
+
+/*Gets the region number for a given pixel label.
+  When a region is merged with another, its label becomes the other region
+   number (but not vice versa: the other region keeps its label as its own
+   region number).
+  However, if that other region should then merge later on, its label could
+   change.
+  Thus we must follow the labels until we find a region whose label is its
+   own region number.
+
+  This is the classic set membership problem, which can be very efficiently
+   solved by updating the region label each time a query is made to be the
+   most recent final answer.
+  This gives an amortized number of updates per query equal to the inverse
+   Ackerman's function: i.e., 4 or less for up to 4 billion regions, or very
+   nearly constant.
+
+  _seg:   The segmentation context.
+  _label: The pixel label to retrieve the region number for.
+  Return: The region number corresponding to the given label.*/
+static int oc_seg_get_label(oc_seg_ctx *_seg,int _label){
+  oc_seg_region *reg;
+  reg=_seg->regions+_label;
+  if(reg->link.regi!=_label){
+    return reg->link.regi=oc_seg_get_label(_seg,reg->link.regi);
+  }
+  return _label;
+}
+
+/*Returns an unused region pair structure.
+  _seg: The segmentation context.
+  Return: An unused region pair structure.*/
+static oc_seg_pair *oc_seg_pair_alloc(oc_seg_ctx *_seg){
+  oc_seg_pair *ret;
+  /*If there's any on the free_pairs list, use those.*/
+  if(_seg->free_pairs!=NULL){
+    ret=_seg->free_pairs->pair;
+    _seg->free_pairs=_seg->free_pairs->next;
+  }
+  /*Otherwise, pull one from the pre-allocated buffer of them.
+    It would simplify the code slightly to put these all on the free list when
+     we initially allocate them, but since we allocate a conservatively large
+     number, most of the time we won't need nearly that many.
+    Never touching the RAM means the pages won't ever actually be allocated by
+     some modern OSes.*/
+  else ret=_seg->pairs+_seg->npairs++;
+  return ret;
+}
+
+/*Free a region pair structure that is no longer in use.
+  _seg:  The segmentation context.
+  _pair: The pair to free.
+         This cannot be NULL.*/
+static void oc_seg_pair_free(oc_seg_ctx *_seg,oc_seg_pair *_pair){
+  _pair->links[0].next=_seg->free_pairs;
+  _seg->free_pairs=_pair->links+0;
+}
+
+/*Move the pair at the given index up in the pair heap as far as necessary.
+  This should be called when a pair's dbic value decreases to maintain the
+   heap invariants.
+  _seg:   The segmentation context.
+  _heapi: The index of the pair to try moving up.*/
+static void oc_seg_pair_heap_up(oc_seg_ctx *_seg,int _heapi){
+  oc_seg_pair **heap;
+  int           p;
+  p=_heapi;
+  heap=_seg->heap;
+  while(p>0){
+    oc_seg_pair *t;
+    int          q;
+    q=p;
+    p=(q+1>>1)-1;
+    if(heap[p]->dbic<=heap[q]->dbic)break;
+    heap[p]->heapi=q;
+    heap[q]->heapi=p;
+    t=heap[p];
+    heap[p]=heap[q];
+    heap[q]=t;
+  }
+}
+
+/*Move the pair at the given index down in the pair heap as far as necessary.
+  This should be called when a pair's dbic value increases to maintain the
+   heap invariants.
+  _seg:   The segmentation context.
+  _heapi: The index of the pair to try moving up.*/
+static void oc_seg_pair_heap_down(oc_seg_ctx *_seg,int _heapi){
+  oc_seg_pair **heap;
+  int           l;
+  int           r;
+  int           p;
+  heap=_seg->heap;
+  l=_seg->nheap>>1;
+  r=_seg->nheap-1;
+  p=_heapi;
+  while(p<l){
+    oc_seg_pair *t;
+    int          q;
+    q=(p<<1)+1;
+    if(q<r&&heap[q]->dbic>=heap[q+1]->dbic)q++;
+    if(heap[p]->dbic<=heap[q]->dbic)break;
+    heap[p]->heapi=q;
+    heap[q]->heapi=p;
+    t=heap[p];
+    heap[p]=heap[q];
+    heap[q]=t;
+    p=q;
+  }
+}
+
+/*Takes an unordered list of pairs in the heap array and arranages them into a
+   proper heap.
+  _seg: The segmentation context.*/
+static void oc_seg_pair_heapify(oc_seg_ctx *_seg){
+  oc_seg_pair **heap;
+  int           l;
+  int           r;
+  int           i;
+  heap=_seg->heap;
+  l=_seg->nheap>>1;
+  r=_seg->nheap-1;
+  for(i=l;i-->0;){
+    int p;
+    p=i;
+    do{
+      oc_seg_pair *t;
+      int          q;
+      q=(p<<1)+1;
+      if(q<r&&heap[q]->dbic>=heap[q+1]->dbic)q++;
+      if(heap[p]->dbic<=heap[q]->dbic)break;
+      heap[p]->heapi=q;
+      heap[q]->heapi=p;
+      t=heap[p];
+      heap[p]=heap[q];
+      heap[q]=t;
+      p=q;
+    }
+    while(p<l);
+  }
+}
+
+/*Adds a pair to the pair heap.
+  _seg:  The segmentation context.
+  _pair: The pair to add.*/
+static void oc_seg_pair_heap_add(oc_seg_ctx *_seg,oc_seg_pair *_pair){
+  _seg->heap[_seg->nheap]=_pair;
+  _pair->heapi=_seg->nheap++;
+  oc_seg_pair_heap_up(_seg,_pair->heapi);
+}
+
+/*Removes the head of the pair heap and returns it.
+  This does NOT reset the pair's heapi to -1.
+  The heap MUST not be empty when this is called.
+  _seg: The segmentation context.
+  Return: The pair that was at the top of the heap.*/
+static oc_seg_pair *oc_seg_pair_heap_delhead(oc_seg_ctx *_seg){
+  oc_seg_pair *ret;
+  ret=_seg->heap[0];
+  if(--_seg->nheap>0){
+    _seg->heap[0]=_seg->heap[_seg->nheap];
+    _seg->heap[0]->heapi=0;
+    oc_seg_pair_heap_down(_seg,0);
+  }
+  return ret;
+}
+
+/*Removes a pair from its position in the heap, wherever it is.
+  If the pair is not in the heap, this does nothing.
+  This does NOT reset the pair's heap to -1.
+  _seg:  The segmentation context.
+  _pair: The pair to remove from the heap.*/
+static void oc_seg_pair_heap_del(oc_seg_ctx *_seg,oc_seg_pair *_pair){
+  int heapi;
+  heapi=_pair->heapi;
+  if(heapi>=0){
+    _seg->nheap--;
+    if(_seg->nheap>heapi){
+      _seg->heap[heapi]=_seg->heap[_seg->nheap];
+      _seg->heap[heapi]->heapi=heapi;
+      if(_seg->heap[heapi]->dbic<_pair->dbic)oc_seg_pair_heap_up(_seg,heapi);
+      else oc_seg_pair_heap_down(_seg,heapi);
+    }
+  }
+}
+
+/*Adds, removes, or moves a pair in the pair heap after its dbic has changed.
+  This is the version of this function that does not force small regions to
+   keep their pairs in the heap.
+  _seg:      The segmentation context.
+  _pair:     The pair that was updated.
+  _old_dbic: The delta BIC value the pair used to have.
+             This is only used if the pair was in the heap previously and is
+              still in the heap to decide which direction to try to move it.*/
+static void oc_seg_pair_reheap(oc_seg_ctx *_seg,oc_seg_pair *_pair,
+ float _old_dbic){
+  /*Place this pair on the merge heap if necessary.*/
+  if(_pair->dbic<=0){
+    if(_pair->heapi<0)oc_seg_pair_heap_add(_seg,_pair);
+    else if(_old_dbic<_pair->dbic)oc_seg_pair_heap_down(_seg,_pair->heapi);
+    else oc_seg_pair_heap_up(_seg,_pair->heapi);
+  }
+  else if(_pair->heapi>=0){
+    oc_seg_pair_heap_del(_seg,_pair);
+    _pair->heapi=-1;
+  }
+}
+
+/*Adds, removes, or moves a pair in the pair heap after its dbic has changed.
+  This is the version of this function that forces small regions to keep their
+   pairs in the heap.
+  _seg:      The segmentation context.
+  _pair:     The pair that was updated.
+  _old_dbic: The delta BIC value the pair used to have.
+             This is only used if the pair was in the heap previously and is
+              still in the heap to decide which direction to try to move it.*/
+static void oc_seg_pair_reheap_small(oc_seg_ctx *_seg,oc_seg_pair *_pair,
+ float _old_dbic){
+  /*Place this pair on the merge heap if necessary.*/
+  if(_pair->dbic<=0||
+   (_seg->regions+_pair->links[0].regi)->npixels<OC_SEG_REGION_SZ_MIN||
+   (_seg->regions+_pair->links[1].regi)->npixels<OC_SEG_REGION_SZ_MIN){
+    if(_pair->heapi<0)oc_seg_pair_heap_add(_seg,_pair);
+    else if(_old_dbic<_pair->dbic)oc_seg_pair_heap_down(_seg,_pair->heapi);
+    else oc_seg_pair_heap_up(_seg,_pair->heapi);
+  }
+  else if(_pair->heapi>=0){
+    oc_seg_pair_heap_del(_seg,_pair);
+    _pair->heapi=-1;
+  }
+}
+
+/*Updates a pair's npixels, sumx, sumx2, bic and dbic fields, and its position
+   in the heap.
+  This is used after a pair is first created, and whenever one of its
+   constituent regions merges with another region.
+  _seg:  The segmentation context.
+  _pair: The pair to update.*/
+static float oc_seg_pair_update(oc_seg_ctx *_seg,oc_seg_pair *_pair){
+  oc_seg_region *reg0;
+  oc_seg_region *reg1;
+  float          area;
+  float          var;
+  float          old_dbic;
+  /*Compute the statistics of the merged region.*/
+  reg0=_seg->regions+_pair->links[0].regi;
+  reg1=_seg->regions+_pair->links[1].regi;
+  _pair->npixels=reg0->npixels+reg1->npixels;
+  _pair->sumx=reg0->sumx+reg1->sumx;
+  _pair->sumx2=reg0->sumx2+reg1->sumx2;
+  area=(float)_pair->npixels;
+  var=(_pair->sumx2*area-_pair->sumx*_pair->sumx)/(area*area);
+  _pair->bic=var>0?area*OC_LOGF(var):0;
+  old_dbic=_pair->dbic;
+  _pair->dbic=_pair->bic-reg0->bic-reg1->bic-
+   OC_SEG_MODEL_MERGE_WEIGHT*OC_LOGF(area);
+  return old_dbic;
+}
+
+/*Updates a pair's npixels, sumx, sumx2, bic and dbic fields, and its position
+   in the heap.
+  This is used after a pair is first created, and whenever one of its
+   constituent regions merges with another region.
+  _seg:  The segmentation context.
+  _pair: The pair to update.*/
+static void oc_seg_pair_update_reheap(oc_seg_ctx *_seg,oc_seg_pair *_pair){
+  _seg->reheap(_seg,_pair,oc_seg_pair_update(_seg,_pair));
+}
+
+
+/*Creates a new pair between two regions if one does not already exist.
+  The pair is never added to the merge heap.
+  _seg:   The segmentation context.
+  _regi0: The region number of the first region.
+          If this pair is eventually merged, this will be the label of the
+           merged region.
+  _regi1: The region number of the second region.
+          For efficiency purposes, one desires this to have the smaller
+           number of neighbors.*/
+static oc_seg_pair *oc_seg_create_pair(oc_seg_ctx *_seg,int _regi0,
+ int _regi1){
+  oc_seg_region *reg0;
+  oc_seg_region *reg1;
+  oc_seg_link   *link;
+  oc_seg_pair   *pair;
+  /*Search the second region's neighbor list for the first region.*/
+  reg1=_seg->regions+_regi1;
+  /*Quick rejection: it's at the head of the list.*/
+  if(reg1->link.next->regi==_regi0)return NULL;
+  /*Otherwise start searching from the second element of the list.*/
+  for(link=reg1->link.next->next;link->pair!=NULL;link=link->next){
+    if(link->regi==_regi0){
+      /*We found it.
+        Now move this link to the head of the list, so that if the next pixel
+         also comes from the same region (highly likely), we can do a fast
+         rejection.*/
+      link->prev->next=link->next;
+      link->next->prev=link->prev;
+      link->next=reg1->link.next;
+      link->prev=&reg1->link;
+      link->next->prev=link;
+      reg1->link.next=link;
+      return NULL;
+    }
+  }
+  /*Add a new pair to the regions' lists.*/
+  reg0=_seg->regions+_regi0;
+  pair=oc_seg_pair_alloc(_seg);
+  pair->links[0].regi=_regi0;
+  pair->links[0].pair=pair;
+  pair->links[0].next=reg1->link.next;
+  pair->links[0].prev=&reg1->link;
+  reg1->link.next->prev=pair->links+0;
+  reg1->link.next=pair->links+0;
+  pair->links[1].regi=_regi1;
+  pair->links[1].pair=pair;
+  pair->links[1].next=reg0->link.next;
+  pair->links[1].prev=&reg0->link;
+  reg0->link.next->prev=pair->links+1;
+  reg0->link.next=pair->links+1;
+  pair->heapi=-1;
+  pair->dbic=0;
+  return pair;
+}
+
+/*Creates a new pair between two regions if one does not already exist.
+  If possible, the pair is added to the merge heap.
+  _seg:   The segmentation context.
+  _regi0: The region number of the first region.
+          If this pair is eventually merged, this will be the label of the
+           merged region.
+  _regi1: The region number of the second region.
+          For efficiency purposes, one desires this to have the smaller
+           number of neighbors.*/
+static void oc_seg_create_pair_reheap(oc_seg_ctx *_seg,int _regi0,int _regi1){
+  oc_seg_pair *pair;
+  pair=oc_seg_create_pair(_seg,_regi0,_regi1);
+  /*Check to see if these regions can potentially be merged.*/
+  if(pair!=NULL)oc_seg_pair_update_reheap(_seg,pair);
+}
+
+/*Merges the list of pairs in region _srci into the list in region _dsti,
+   relabling _srci to _dsti.
+  _srci's list is destructively modified, and should not be referenced any
+   further.
+  The (_dsti,_srci) pair should already be removed from both lists before
+   calling this function.
+  _seg:  The segmentation context.
+  _dsti: The destination region number.
+  _srci: The source region number.*/
+static void oc_seg_merge_pair_lists(oc_seg_ctx *_seg,int _dsti,int _srci){
+  oc_seg_region  *dst;
+  oc_seg_region  *src;
+  oc_seg_link    *dlink;
+  oc_seg_link    *dhead;
+  oc_seg_link    *slink;
+  oc_seg_link    *slink2;
+  oc_seg_link    *snext;
+  dst=_seg->regions+_dsti;
+  src=_seg->regions+_srci;
+  dhead=dst->link.next;
+  for(slink=src->link.next;slink->pair!=NULL;slink=snext){
+    snext=slink->next;
+    /*Grab a pointer to the other link in the pair.*/
+    slink2=slink->pair->links+(slink->pair->links+1-slink);
+    for(dlink=dhead;;dlink=dlink->next){
+      /*If we've reached the end of the list, then the pair was not found in
+         dst, so add it.*/
+      if(dlink->pair==NULL){
+        slink->next=dst->link.next;
+        slink->prev=&dst->link;
+        dst->link.next->prev=slink;
+        dst->link.next=slink;
+        /*Change the region index of the other link.*/
+        slink2->regi=_dsti;
+        break;
+      }
+      /*If we found a duplicate pair, move the duplicate off the part of the
+         list we're scanning, and delete the original from the other list it
+         is in.*/
+      else if(dlink->regi==slink->regi){
+        if(dlink==dhead)dhead=dlink->next;
+        else{
+          dlink->next->prev=dlink->prev;
+          dlink->prev->next=dlink->next;
+          dlink->next=dst->link.next;
+          dlink->prev=&dst->link;
+          dst->link.next->prev=dlink;
+          dst->link.next=dlink;
+        }
+        slink2->next->prev=slink2->prev;
+        slink2->prev->next=slink2->next;
+        /*And remove the pair from the merge heap if necessary.*/
+        oc_seg_pair_heap_del(_seg,slink->pair);
+        /*And finally free it.*/
+        oc_seg_pair_free(_seg,slink->pair);
+        break;
+      }
+    }
+  }
+}
+
+/*Performs pending merges until the pair heap is empty.
+  _seg: The segmentation context.*/
+static void oc_seg_merge(oc_seg_ctx *_seg){
+  /*While the heap is non-empty...*/
+  while(_seg->nheap>0){
+    oc_seg_pair   *pair;
+    oc_seg_link   *link;
+    oc_seg_region *reg[2];
+    int            regi[2];
+    int            dst;
+    /*Take the head off the heap.*/
+    pair=oc_seg_pair_heap_delhead(_seg);
+    /*Remove this pair from each region's neighbor list, since we're about to
+       merge the two.*/
+    pair->links[0].next->prev=pair->links[0].prev;
+    pair->links[0].prev->next=pair->links[0].next;
+    pair->links[1].next->prev=pair->links[1].prev;
+    pair->links[1].prev->next=pair->links[1].next;
+    regi[0]=pair->links[0].regi;
+    regi[1]=pair->links[1].regi;
+    /*We want to be sure we always prefer any global region label over a local
+       one, but otherwise we use the inherent order of the pair, which is
+       usually a good one.*/
+    dst=regi[0]<0&&0<=regi[1];
+    /*Merge the two neighbor lists.*/
+    oc_seg_merge_pair_lists(_seg,regi[dst],regi[1-dst]);
+    reg[0]=_seg->regions+regi[dst];
+    reg[1]=_seg->regions+regi[1-dst];
+    /*Fill the new region with statistics from the merge.*/
+    reg[0]->npixels=pair->npixels;
+    reg[0]->sumx=pair->sumx;
+    reg[0]->sumx2=pair->sumx2;
+    reg[0]->bic=pair->bic;
+    reg[1]->link.regi=regi[dst];
+    /*Finally free the pair.*/
+    oc_seg_pair_free(_seg,pair);
+    /*Now update all the pairs that involve the new merged region.*/
+    for(link=reg[0]->link.next;link->pair!=NULL;link=link->next){
+      oc_seg_pair_update_reheap(_seg,link->pair);
+    }
+  }
+}
+
+/*Attempts to merge a block that can't be split anymore with existing,
+   neighboring local regions.
+  If a successful candidate cannot be found, a new local region is created.
+  _seg:    The segmentation context.
+  _x0:     The X coordinate of the upper-left hand corner of the local block.
+  _y0:     The Y coordinate of the upper-left hand corner of the local block.
+  _dx:     The X offset of the local region in the local block.
+  _dy:     The Y offset of the local region in the lcoal block.
+  _width:  The width of the local region.
+  _height: The height of the local region.
+  _area:   The area of the local region.
+  _sumx:   The sum of the pixel values over the local region.
+  _sumx2   The sum of the squared pixel values over the local region.
+  _bic:    The BIC of the local region.*/
+static void oc_seg_merge_l(oc_seg_ctx *_seg,int _x0,int _y0,int _dx,int _dy,
+ int _width,int _height,int _area,float _sumx,float _sumx2,float _bic){
+  oc_seg_region *reg;
+  int            regi;
+  int            xend;
+  int            yend;
+  int            x;
+  int            y;
+  _x0+=_dx;
+  _y0+=_dy;
+  xend=_x0+_width;
+  yend=_y0+_height;
+  /*Set up the region structure.*/
+  regi=_seg->nlocal_regions--;
+  reg=_seg->regions+regi;
+  reg->link.regi=regi;
+  reg->link.pair=NULL;
+  reg->link.next=&reg->link;
+  reg->link.prev=&reg->link;
+  reg->npixels=_area;
+  reg->sumx=_sumx;
+  reg->sumx2=_sumx2;
+  reg->bic=_bic;
+  /*Scan the left edge, if present, for adjacent regions.*/
+  if(_dx>0)for(y=_y0;y<yend;y++){
+    oc_seg_create_pair_reheap(_seg,
+     oc_seg_get_label(_seg,_seg->labels[y][_x0-1]),regi);
+  }
+  /*Scan the top edge, if present, for adjacent regions.*/
+  if(_dy>0)for(x=_x0;x<xend;x++){
+    oc_seg_create_pair_reheap(_seg,
+     oc_seg_get_label(_seg,_seg->labels[_y0-1][x]),regi);
+  }
+  /*Merge all mergeable regions.*/
+  oc_seg_merge(_seg);
+  /*If we merged away the region we just created, set it up for re-use.*/
+  if(reg->link.regi!=regi){
+    _seg->nlocal_regions++;
+    regi=oc_seg_get_label(_seg,regi);
+  }
+  /*Fill the block with the new region label.*/
+  for(y=_y0;y<yend;y++)for(x=_x0;x<xend;x++)_seg->labels[y][x]=regi;
+}
+
+/*Attempts to merge the local regions with neighboring global regions.
+  If a successful candidate cannot be found, and the local region is too
+   small, it is merged with its largest neighbor, local or not.
+  Otherwise, a new region is created.
+  _seg:    The segmentation context.
+  _x0:     The X coordinate of the upper-left hand corner of the local block.
+  _y0:     The Y coordinate of the upper-left hand corner of the local block.
+  _width:  The width of the block.
+  _height: The height of the block.*/
+static void oc_seg_merge_s(oc_seg_ctx *_seg,int _x0,int _y0,int _width,
+ int _height){
+  oc_seg_region *reg;
+  oc_seg_region *lreg;
+  oc_seg_link   *link;
+  oc_seg_pair   *pair;
+  int            regi;
+  int            lregi;
+  int            xend;
+  int            yend;
+  int            x;
+  int            y;
+  /*Step 1: Add all the small region pairs to the heap.*/
+  for(lregi=-1;--lregi>_seg->nlocal_regions;){
+    lreg=_seg->regions+lregi;
+    /*If this region was not already merged with another and is small...*/
+    if(lreg->link.regi==lregi&&lreg->npixels<OC_SEG_REGION_SZ_MIN){
+      /*Add its pairs to the merge heap, regardless of whether or not they're
+         beneficial.
+        Don't worry about heap structure for now.*/
+      for(link=lreg->link.next;link->pair!=NULL;link=link->next){
+        pair=link->pair;
+        if(pair->heapi<0){
+          pair->heapi=_seg->nheap++;
+          _seg->heap[pair->heapi]=pair;
+        }
+      }
+    }
+  }
+  /*Make a heap out of all the pairs all at once.*/
+  oc_seg_pair_heapify(_seg);
+  /*Step 2: Merge all the small regions.*/
+  _seg->reheap=oc_seg_pair_reheap_small;
+  oc_seg_merge(_seg);
+  _seg->reheap=oc_seg_pair_reheap;
+  /*Step 3: Allocate global regions for each local region that survived.*/
+  for(lregi=-1;--lregi>_seg->nlocal_regions;){
+    lreg=_seg->regions+lregi;
+    /*If this region was not already merged with another...*/
+    if(lreg->link.regi==lregi){
+      /*Create a new global region out of it.*/
+      regi=_seg->nregions++;
+      reg=_seg->regions+regi;
+      *&reg->link=*&lreg->link;
+      reg->link.regi=regi;
+      reg->link.next->prev=&reg->link;
+      reg->link.prev->next=&reg->link;
+      reg->npixels=lreg->npixels;
+      reg->sumx=lreg->sumx;
+      reg->sumx2=lreg->sumx2;
+      reg->bic=lreg->bic;
+      lreg->link.regi=regi;
+      /*Relabel the region in all of its merge pairs.*/
+      for(link=reg->link.next;link->pair!=NULL;link=link->next){
+        pair=link->pair;
+        pair->links[(pair->links+1-link)].regi=regi;
+      }
+    }
+  }
+  /*Step 4: Update all pixel labels to refer to the global region labels.*/
+  for(lregi=-1;--lregi>_seg->nlocal_regions;)oc_seg_get_label(_seg,lregi);
+  xend=_x0+_width;
+  yend=_y0+_height;
+  for(y=_y0;y<yend;y++)for(x=_x0;x<xend;x++){
+    _seg->labels[y][x]=(_seg->regions+_seg->labels[y][x])->link.regi;
+  }
+  /*Step 5: Create pairs with other global regions.*/
+  /*Scan the left edge, if present, for adjacent regions.*/
+  if(_x0>0)for(y=_y0;y<yend;y++){
+    oc_seg_create_pair(_seg,_seg->labels[y][_x0-1],_seg->labels[y][_x0]);
+  }
+  /*Scan the top edge, if present, for adjacent regions.*/
+  if(_y0>0)for(x=_x0;x<xend;x++){
+    oc_seg_create_pair(_seg,_seg->labels[_y0-1][x],_seg->labels[_y0][x]);
+  }
+}
+
+/*Attempts to merge a block that can't be split anymore with existing,
+   neighboring regions.
+  If a successful candidate cannot be found, a new global region is created.
+  _seg:    The segmentation context.
+  _x0:     The X coordinate of the upper-left hand corner of the block.
+  _y0:     The Y coordinate of the upper-left hand corner of the block.
+  _width:  The width of the block.
+  _height: The height of the block.
+  _area:   The area of the block.
+  _sumx:   The sum of the pixel values over the block.
+  _sumx2   The sum of the squared pixel values over the block.
+  _bic:    The BIC of the block.*/
+static void oc_seg_merge_t(oc_seg_ctx *_seg,int _x0,int _y0,int _width,
+ int _height,int _area,float _sumx,float _sumx2,float _bic){
+  oc_seg_region *reg;
+  int            regi;
+  int            xend;
+  int            yend;
+  int            x;
+  int            y;
+  xend=_x0+_width;
+  yend=_y0+_height;
+  /*Set up the region structure.*/
+  regi=_seg->nregions++;
+  reg=_seg->regions+regi;
+  reg->link.regi=regi;
+  reg->link.pair=NULL;
+  reg->link.next=&reg->link;
+  reg->link.prev=&reg->link;
+  reg->npixels=_area;
+  reg->sumx=_sumx;
+  reg->sumx2=_sumx2;
+  reg->bic=_bic;
+  /*Scan the left edge, if present, for adjacent regions.*/
+  if(_x0>0)for(y=_y0;y<yend;y++){
+    oc_seg_create_pair(_seg,
+     oc_seg_get_label(_seg,_seg->labels[y][_x0-1]),regi);
+  }
+  /*Scan the top edge, if present, for adjacent regions.*/
+  if(_y0>0)for(x=_x0;x<xend;x++){
+    oc_seg_create_pair(_seg,
+     oc_seg_get_label(_seg,_seg->labels[_y0-1][x]),regi);
+  }
+#if 0
+  /*Merge all mergeable regions.*/
+  oc_seg_merge(_seg);
+  /*If we merged away the region we just created, set it up for re-use.*/
+  if(reg->link.regi!=regi){
+    _seg->nregions--;
+    regi=oc_seg_get_label(_seg,regi);
+  }
+#endif
+  /*Fill the block with the new region label.*/
+  for(y=_y0;y<yend;y++)for(x=_x0;x<xend;x++)_seg->labels[y][x]=regi;
+}
+
+/*Recursive split-merge step.
+  Version for interior regions with local table lookups.
+  _seg:    The segmentation context.
+  _x0:     The X coordinate of the upper-left hand corner of the local region.
+  _y0:     The Y coordinate of the upper-left hand corner of the local region.
+  _dx:     The X coordinate of the upper-left hand corner of the block
+            relative to the local region.
+  _dy:     The Y coordinate of the upper-left hand corner of the block
+            relative to the local region.
+  _level:  The log base 2 of the block size.
+  _area:   The area of the block in pixels^2.
+  _sumx:   The sum of the pixel values over the block.
+  _sumx2:  The sum of the pixel values squared over the block.
+  _bic:    The BIC of the block.*/
+static void oc_seg_splitmerge_il(oc_seg_ctx *_seg,int _x0,int _y0,
+ int _dx,int _dy,int _level,int _area,float _sumx,float _sumx2,float _bic){
+  int size;
+  if(_level>0){
+    float sumx[4];
+    float sumx2[4];
+    float bic[4];
+    float dbic;
+    int   dx[4];
+    int   dy[4];
+    int   area;
+    int   size_2;
+    int   i;
+    _level--;
+    area=1<<(_level<<1);
+    size_2=1<<_level;
+    dx[0]=dx[2]=dy[0]=dy[1]=0;
+    dx[1]=dx[3]=dy[2]=dy[3]=size_2;
+    dbic=_bic;
+    for(i=0;i<4;i++){
+      float var;
+      sumx[i]=oc_seg_sum_region(_seg->local_sumx,_dx+dx[i],_dy+dy[i],
+       size_2,size_2);
+      sumx2[i]=oc_seg_sum_region(_seg->local_sumx2,_dx+dx[i],_dy+dy[i],
+       size_2,size_2);
+      var=(sumx2[i]*area-sumx[i]*sumx[i])/(area*area);
+      bic[i]=var>0?area*OC_LOGF(var):0;
+      dbic-=bic[i];
+    }
+    dbic-=3*OC_SEG_MODEL_SPLIT_WEIGHT*OC_LOGF(_area);
+    if(dbic>=0){
+      for(i=0;i<4;i++){
+        oc_seg_splitmerge_il(_seg,_x0,_y0,_dx+dx[i],_dy+dy[i],_level,area,
+         sumx[i],sumx2[i],bic[i]);
+      }
+      return;
+    }
+    _level++;
+  }
+  size=1<<_level;
+  oc_seg_merge_l(_seg,_x0,_y0,_dx,_dy,size,size,_area,_sumx,_sumx2,_bic);
+}
+
+/*Recursive split-merge step.
+  Version for border regions with local table lookups.
+  _seg:    The segmentation context.
+  _x0:     The X coordinate of the upper-left hand corner of the local region.
+  _y0:     The Y coordinate of the upper-left hand corner of the local region.
+  _dx:     The X coordinate of the upper-left hand corner of the block
+            relative to the local region.
+  _dy:     The Y coordinate of the upper-left hand corner of the block
+            relative to the local region.
+  _width:  The width of the block in pixels.
+  _height: The height of the block in pixels.
+  _level:  The log base 2 of the block size.
+  _area:   The area of the block in pixels^2.
+  _sumx:   The sum of the pixel values over the block.
+  _sumx2:  The sum of the pixel values squared over the block.
+  _bic:    The BIC of the block.*/
+static void oc_seg_splitmerge_bl(oc_seg_ctx *_seg,
+ int _x0,int _y0,int _dx,int _dy,int _width,int _height,int _level,
+ int _area,float _sumx,float _sumx2,float _bic){
+  int size;
+  size=1<<_level;
+  if(_level>0){
+    float sumx[4];
+    float sumx2[4];
+    float bic[4];
+    float dbic;
+    float model_cost;
+    int   dx[4];
+    int   dy[4];
+    int   area[4];
+    int   width[4];
+    int   height[4];
+    int   size_2;
+    int   b;
+    int   i;
+    _level--;
+    size_2=1<<_level;
+    dx[0]=dx[2]=dy[0]=dy[1]=0;
+    dx[1]=dx[3]=dy[2]=dy[3]=size_2;
+    b=(size>_width)|((size>_height)<<1)|
+     ((size_2>_width)<<2)|((size_2>_height)<<3)|
+     ((size_2==_width)<<4)|((size_2==_height)<<5);
+    model_cost=OC_SEG_MODEL_SPLIT_WEIGHT*OC_LOGF(_area);
+    dbic=_bic+model_cost;
+    for(i=0;i<4;i++)if(!(b&OC_SEG_CLIP_MASKS[i])){
+      float var;
+      width[i]=(b&OC_SEG_BORDER_XMASKS[i])?_width-dx[i]:size_2;
+      height[i]=(b&OC_SEG_BORDER_YMASKS[i])?_height-dy[i]:size_2;
+      area[i]=width[i]*height[i];
+      sumx[i]=oc_seg_sum_region(_seg->local_sumx,_dx+dx[i],_dy+dy[i],
+       width[i],height[i]);
+      sumx2[i]=oc_seg_sum_region(_seg->local_sumx2,_dx+dx[i],_dy+dy[i],
+       width[i],height[i]);
+      var=(sumx2[i]*area[i]-sumx[i]*sumx[i])/(area[i]*area[i]);
+      bic[i]=var>0?area[i]*OC_LOGF(var):0;
+      dbic-=bic[i]+model_cost;
+    }
+    if(dbic>=0){
+      for(i=0;i<4;i++)if(!(b&OC_SEG_CLIP_MASKS[i])){
+        if(b&OC_SEG_BORDER_MASKS[i]){
+          oc_seg_splitmerge_bl(_seg,_x0,_y0,_dx+dx[i],_dy+dy[i],
+           width[i],height[i],_level,area[i],sumx[i],sumx2[i],bic[i]);
+        }
+        else{
+          oc_seg_splitmerge_il(_seg,_x0,_y0,_dx+dx[i],_dy+dy[i],
+           _level,area[i],sumx[i],sumx2[i],bic[i]);
+        }
+      }
+      return;
+    }
+  }
+  oc_seg_merge_l(_seg,_x0,_y0,_dx,_dy,_width,_height,_area,_sumx,_sumx2,_bic);
+}
+
+/*Recursive split-merge step.
+  Version for interior regions with manual summing.
+  _seg:    The segmentation context.
+  _x0:     The X coordinate of the upper-left hand corner of the block.
+  _y0:     The Y coordinate of the upper-left hand corner of the block.
+  _level:  The log base 2 of the block size.
+  _area:   The area of the block in pixels^2.
+  _sumx:   The sum of the pixel values over the block.
+  _sumx2:  The sum of the pixel values squared over the block.
+  _bic:    The BIC of the block.
+  _iplane: The image plane the block is contained in.*/
+static void oc_seg_splitmerge_is(oc_seg_ctx *_seg,
+ int _x0,int _y0,int _level,int _area,float _sumx,float _sumx2,float _bic,
+ const th_img_plane *_iplane){
+  const unsigned char *ypix;
+  int                  size;
+  int                  y;
+  int                  x;
+  size=1<<_level;
+  /*Compute a pixel-level moment table for this local region.*/
+  ypix=_iplane->data+_y0*_iplane->ystride+_x0;
+  for(y=1;y<=size;y++){
+    const unsigned char *xpix;
+    float                xsum;
+    float                x2sum;
+    xpix=ypix;
+    xsum=x2sum=0;
+    for(x=1;x<=size;x++){
+      xsum+=*xpix;
+      x2sum+=*xpix**xpix;
+      _seg->local_sumx[y][x]=_seg->local_sumx[y-1][x]+xsum;
+      _seg->local_sumx2[y][x]=_seg->local_sumx2[y-1][x]+x2sum;
+      xpix++;
+    }
+    ypix+=_iplane->ystride;
+  }
+  _seg->nlocal_regions=-2;
+  oc_seg_splitmerge_il(_seg,_x0,_y0,0,0,_level,_area,_sumx,_sumx2,_bic);
+  oc_seg_merge_s(_seg,_x0,_y0,size,size);
+}
+
+/*Recursive split-merge step.
+  Version for border regions with manual summing.
+  _seg:     The segmentation context.
+  _x0:      The X coordinate of the upper-left hand corner of the block.
+  _y0:      The Y coordinate of the upper-left hand corner of the block.
+  _width:   The width of the block in pixels.
+  _height:  The height of the block in pixels.
+  _level:   The log base 2 of the block size.
+  _area:    The area of the block in pixels^2.
+  _sumx:    The sum of the pixel values over the block.
+  _sumx2:   The sum of the pixel values squared over the block.
+  _bic:     The BIC of the block.
+  _iplane:  The image plane the block is contained in.*/
+static void oc_seg_splitmerge_bs(oc_seg_ctx *_seg,
+ int _x0,int _y0,int _width,int _height,int _level,
+ int _area,float _sumx,float _sumx2,float _bic,const th_img_plane *_iplane){
+  const unsigned char *ypix;
+  int                  size;
+  int                  y;
+  int                  x;
+  size=1<<_level;
+  /*Compute a pixel-level moment table for this local region.*/
+  ypix=_iplane->data+_y0*_iplane->ystride+_x0;
+  for(y=1;y<=_height;y++){
+    const unsigned char *xpix;
+    float                xsum;
+    float                x2sum;
+    xpix=ypix;
+    xsum=x2sum=0;
+    for(x=1;x<=_width;x++){
+      xsum+=*xpix;
+      x2sum+=*xpix**xpix;
+      _seg->local_sumx[y][x]=_seg->local_sumx[y-1][x]+xsum;
+      _seg->local_sumx2[y][x]=_seg->local_sumx2[y-1][x]+x2sum;
+      xpix++;
+    }
+    for(;x<=size;x++){
+      _seg->local_sumx[y][x]=_seg->local_sumx[y-1][x]+xsum;
+      _seg->local_sumx2[y][x]=_seg->local_sumx2[y-1][x]+x2sum;
+    }
+    ypix+=_iplane->ystride;
+  }
+  for(;y<=size;y++){
+    for(x=_width+1;x<=size;x++){
+      _seg->local_sumx[y][x]=_seg->local_sumx[y-1][x];
+      _seg->local_sumx2[y][x]=_seg->local_sumx2[y-1][x];
+    }
+  }
+  _seg->nlocal_regions=-2;
+  oc_seg_splitmerge_bl(_seg,_x0,_y0,0,0,_width,_height,_level,
+   _area,_sumx,_sumx2,_bic);
+  oc_seg_merge_s(_seg,_x0,_y0,_width,_height);
+}
+
+/*Recursive split-merge step.
+  Version for interior regions with reduced resolution table lookups.
+  _seg:     The segmentation context.
+  _x0:      The X coordinate of the upper-left hand corner of the block.
+  _y0:      The Y coordinate of the upper-left hand corner of the block.
+  _level:   The log base 2 of the block size.
+  _area:    The area of the block in pixels^2.
+  _sumx:    The sum of the pixel values over the block.
+  _sumx2:   The sum of the pixel values squared over the block.
+  _bic:     The BIC of the block.
+  _iplane:  The image plane the block is contained in.*/
+static void oc_seg_splitmerge_it(oc_seg_ctx *_seg,
+ int _x0,int _y0,int _level,int _area,float _sumx,float _sumx2,float _bic,
+ const th_img_plane *_iplane){
+  float sumx[4];
+  float sumx2[4];
+  float bic[4];
+  float dbic;
+  int   tdx[4];
+  int   tdy[4];
+  int   area;
+  int   tsize;
+  int   tx;
+  int   ty;
+  int   i;
+  _level--;
+  area=1<<(_level<<1);
+  tx=_x0>>OC_SEG_MOMENT_RES_LOG;
+  ty=_y0>>OC_SEG_MOMENT_RES_LOG;
+  tsize=1<<_level-OC_SEG_MOMENT_RES_LOG;
+  tdx[0]=tdx[2]=tdy[0]=tdy[1]=0;
+  tdx[1]=tdx[3]=tdy[2]=tdy[3]=tsize;
+  dbic=_bic;
+  for(i=0;i<4;i++){
+    float var;
+    sumx[i]=oc_seg_sum_region(_seg->sumx,tx+tdx[i],ty+tdy[i],tsize,tsize);
+    sumx2[i]=oc_seg_sum_region(_seg->sumx2,tx+tdx[i],ty+tdy[i],tsize,tsize);
+    var=(sumx2[i]-sumx[i]*sumx[i]/area)/area;
+    bic[i]=var>0?area*OC_LOGF(var):0;
+    dbic-=bic[i];
+  }
+  dbic-=3*OC_SEG_MODEL_SPLIT_WEIGHT*OC_LOGF(_area);
+  if(dbic>=0){
+    int dx[4];
+    int dy[4];
+    int size_2;
+    size_2=1<<_level;
+    dx[0]=dx[2]=dy[0]=dy[1]=0;
+    dx[1]=dx[3]=dy[2]=dy[3]=size_2;
+    if(_level>OC_SEG_MOMENT_RES_LOG)for(i=0;i<4;i++){
+      oc_seg_splitmerge_it(_seg,_x0+dx[i],_y0+dy[i],_level,area,
+       sumx[i],sumx2[i],bic[i],_iplane);
+    }
+    else for(i=0;i<4;i++){
+      oc_seg_splitmerge_is(_seg,_x0+dx[i],_y0+dy[i],_level,area,
+       sumx[i],sumx2[i],bic[i],_iplane);
+    }
+  }
+  else{
+    int size;
+    _level++;
+    size=1<<_level;
+    oc_seg_merge_t(_seg,_x0,_y0,size,size,_area,_sumx,_sumx2,_bic);
+  }
+}
+
+/*Recursive split-merge step.
+  Version for border regions with reduced resolution table lookups.
+  _seg:    The segmentation context.
+  _x0:     The X coordinate of the upper-left hand corner of the block.
+  _y0:     The Y coordinate of the upper-left hand corner of the block.
+  _width:  The width of the block in pixels.
+  _height: The height of the block in pixels.
+  _level:  The log base 2 of the block size.
+  _area:   The area of the block in pixels^2.
+  _sumx:   The sum of the pixel values over the block.
+  _sumx2:  The sum of the pixel values squared over the block.
+  _bic:    The BIC of the block.
+  _iplane: The image plane the block is contained in.*/
+static void oc_seg_splitmerge_bt(oc_seg_ctx *_seg,
+ int _x0,int _y0,int _width,int _height,int _level,
+ int _area,float _sumx,float _sumx2,float _bic,const th_img_plane *_iplane){
+  float sumx[4];
+  float sumx2[4];
+  float bic[4];
+  float dbic;
+  float model_cost;
+  int   dx[4];
+  int   dy[4];
+  int   tdx[4];
+  int   tdy[4];
+  int   area[4];
+  int   width[4];
+  int   height[4];
+  int   size;
+  int   size_2;
+  int   b;
+  int   tx;
+  int   ty;
+  int   i;
+  size=1<<_level;
+  _level--;
+  size_2=1<<_level;
+  dx[0]=dx[2]=dy[0]=dy[1]=0;
+  dx[1]=dx[3]=dy[2]=dy[3]=size_2;
+  tx=_x0>>OC_SEG_MOMENT_RES_LOG;
+  ty=_y0>>OC_SEG_MOMENT_RES_LOG;
+  tdx[0]=tdx[2]=tdy[0]=tdy[1]=0;
+  tdx[1]=tdx[3]=tdy[2]=tdy[3]=1<<_level-OC_SEG_MOMENT_RES_LOG;
+  b=(size>_width)|((size>_height)<<1)|
+   ((size_2>_width)<<2)|((size_2>_height)<<3)|
+   ((size_2==_width)<<4)|((size_2==_height)<<5);
+  model_cost=OC_SEG_MODEL_SPLIT_WEIGHT*OC_LOGF(_area);
+  dbic=_bic+model_cost;
+  for(i=0;i<4;i++)if(!(b&OC_SEG_CLIP_MASKS[i])){
+    float var;
+    int   twidth;
+    int   theight;
+    width[i]=(b&OC_SEG_BORDER_XMASKS[i])?_width-dx[i]:size_2;
+    height[i]=(b&OC_SEG_BORDER_YMASKS[i])?_height-dy[i]:size_2;
+    area[i]=width[i]*height[i];
+    twidth=width[i]+OC_SEG_MOMENT_RES-1>>OC_SEG_MOMENT_RES_LOG;
+    theight=height[i]+OC_SEG_MOMENT_RES-1>>OC_SEG_MOMENT_RES_LOG;
+    sumx[i]=oc_seg_sum_region(_seg->sumx,tx+tdx[i],ty+tdy[i],
+     twidth,theight);
+    sumx2[i]=oc_seg_sum_region(_seg->sumx2,tx+tdx[i],ty+tdy[i],
+     twidth,theight);
+    var=(sumx2[i]-sumx[i]*sumx[i]/area[i])/area[i];
+    bic[i]=var>0?area[i]*OC_LOGF(var):0;
+    dbic-=bic[i]+model_cost;
+  }
+  if(dbic>=0){
+    if(_level>OC_SEG_MOMENT_RES_LOG){
+      for(i=0;i<4;i++)if(!(b&OC_SEG_CLIP_MASKS[i])){
+        if(b&OC_SEG_BORDER_MASKS[i]){
+          oc_seg_splitmerge_bt(_seg,_x0+dx[i],_y0+dy[i],width[i],height[i],
+           _level,area[i],sumx[i],sumx2[i],bic[i],_iplane);
+        }
+        else{
+          oc_seg_splitmerge_it(_seg,_x0+dx[i],_y0+dy[i],
+           _level,area[i],sumx[i],sumx2[i],bic[i],_iplane);
+        }
+      }
+    }
+    else{
+      for(i=0;i<4;i++)if(!(b&OC_SEG_CLIP_MASKS[i])){
+        if(b&OC_SEG_BORDER_MASKS[i]){
+          oc_seg_splitmerge_bs(_seg,_x0+dx[i],_y0+dy[i],width[i],height[i],
+           _level,area[i],sumx[i],sumx2[i],bic[i],_iplane);
+        }
+        else{
+          oc_seg_splitmerge_is(_seg,_x0+dx[i],_y0+dy[i],
+           _level,area[i],sumx[i],sumx2[i],bic[i],_iplane);
+        }
+      }
+    }
+  }
+  else oc_seg_merge_t(_seg,_x0,_y0,_width,_height,_area,_sumx,_sumx2,_bic);
+}
+
+
+/*Initialize a segmentation context.
+  This pre-allocates all memory needed by the segmentation process.
+  _seg:    The segmentation context.
+  _width:  The width of the image to segment, in pixels.
+  _height: The height of the image to segment, in pixels.*/
+static void oc_seg_init(oc_seg_ctx *_seg,int _width,int _height){
+  int size;
+  int level_max;
+  int twidth;
+  int theight;
+  int cregions;
+  int cpairs;
+  int x;
+  int y;
+  /*Find the maximum recursion depth.*/
+  for(level_max=0,size=1;size<_width||size<_height;size<<=1)level_max++;
+  _seg->level_max=level_max;
+  /*Allocate space for the moment tables.
+    We rely on the initial row and column being zeroed out.*/
+  twidth=(_width+OC_SEG_MOMENT_RES-1>>OC_SEG_MOMENT_RES_LOG)+1;
+  theight=(_height+OC_SEG_MOMENT_RES-1>>OC_SEG_MOMENT_RES_LOG)+1;
+  _seg->sumx=(float **)oc_malloc_2d(theight,twidth,sizeof(_seg->sumx[0][0]));
+  _seg->sumx2=(float **)oc_malloc_2d(theight,twidth,
+   sizeof(_seg->sumx2[0][0]));
+  for(x=0;x<twidth;x++)_seg->sumx[0][x]=_seg->sumx2[0][x]=0;
+  for(y=1;y<theight;y++)_seg->sumx[y][0]=_seg->sumx2[y][0]=0;
+  _seg->local_sumx=(float **)oc_malloc_2d(OC_SEG_MOMENT_RES+1,
+   OC_SEG_MOMENT_RES+1,sizeof(_seg->local_sumx[0][0]));
+  _seg->local_sumx2=(float **)oc_malloc_2d(OC_SEG_MOMENT_RES+1,
+   OC_SEG_MOMENT_RES+1,sizeof(_seg->local_sumx2[0][0]));
+  for(x=0;x<OC_SEG_MOMENT_RES+1;x++){
+    _seg->local_sumx[0][x]=_seg->local_sumx2[0][x]=0;
+  }
+  for(y=1;y<OC_SEG_MOMENT_RES+1;y++){
+    _seg->local_sumx[y][0]=_seg->local_sumx2[y][0]=0;
+  }
+  _seg->labels=(int **)oc_malloc_2d(_height,_width,
+   sizeof(_seg->labels[0][0]));
+  /*Compute the maximum number of global regions in the segmentation:*/
+  cregions=(_width*_height+OC_SEG_REGION_SZ_MIN-1)/OC_SEG_REGION_SZ_MIN;
+  /*Compute the maximum number of pairs.
+    The maximum number of edges in a planar graph is 3n-6, where n is the
+     number of vertices and n>=3 (from Euler's formula).*/
+  cpairs=3*cregions-6+OC_SEG_NLOCAL_PAIRS;
+  if(cpairs<2)cpairs=2;
+  /*Allocate space for the region information and the neighbor lists.*/
+  _seg->nregions=0;
+  _seg->cregions=cregions;
+  _seg->regions=(oc_seg_region *)_ogg_malloc(
+   (OC_SEG_NLOCAL_REGS+1+cregions)*sizeof(_seg->regions[0]));
+  /*Local regions have negative labels.
+    However, to avoid lots of special casing when retreiving the region data
+     for a given label, we store them all in a single table.
+    Thus, we offset the regions pointer so that adding the region label always
+     points to a valid entry in the table.
+    The extra 1 entry is there to account for the special label -1, which
+     indicates no region.*/
+  _seg->regions+=OC_SEG_NLOCAL_REGS+1;
+  _seg->relabels=(int *)_ogg_malloc(cregions*sizeof(_seg->relabels[0]));
+  _seg->pairs=(oc_seg_pair *)_ogg_malloc(cpairs*sizeof(_seg->pairs[0]));
+  _seg->free_pairs=NULL;
+  _seg->heap=(oc_seg_pair **)_ogg_malloc(cpairs*sizeof(_seg->heap[0]));
+  _seg->reheap=oc_seg_pair_reheap;
+}
+
+/*Frees all memory used by the given segmentation context.
+  _seg: The segmentation context to clear.*/
+static void oc_seg_clear(oc_seg_ctx *_seg){
+  oc_free_2d(_seg->sumx);
+  oc_free_2d(_seg->sumx2);
+  oc_free_2d(_seg->local_sumx);
+  oc_free_2d(_seg->local_sumx2);
+  oc_free_2d(_seg->labels);
+  _ogg_free(_seg->regions-OC_SEG_NLOCAL_REGS-1);
+  _ogg_free(_seg->relabels);
+  _ogg_free(_seg->pairs);
+  _ogg_free(_seg->heap);
+}
+
+
+/*Perform segmentation over the given image plane.
+  _seg:    The segmentation context.
+  _iplane: The image plane to segment.*/
+static void oc_seg_plane(oc_seg_ctx *_seg,const th_img_plane *_iplane){
+  float sumx;
+  float sumx2;
+  float var;
+  float bic;
+  int   area;
+  int   twidth;
+  int   theight;
+  int   regi;
+  /*Build the moment tables.*/
+  oc_seg_sum_moments(_seg,_iplane);
+  /*Perform the splitting and merging to produce the segmentation.*/
+  _seg->npairs=0;
+  _seg->free_pairs=NULL;
+  _seg->nheap=0;
+  _seg->nregions=0;
+  area=_iplane->width*_iplane->height;
+  if(_seg->level_max>OC_SEG_MOMENT_RES_LOG){
+    twidth=_iplane->width+OC_SEG_MOMENT_RES-1>>OC_SEG_MOMENT_RES_LOG;
+    theight=_iplane->height+OC_SEG_MOMENT_RES-1>>OC_SEG_MOMENT_RES_LOG;
+  }
+  else twidth=theight=1;
+  sumx=oc_seg_sum_region(_seg->sumx,0,0,twidth,theight);
+  sumx2=oc_seg_sum_region(_seg->sumx2,0,0,twidth,theight);
+  var=(sumx2-sumx*sumx/area)/area;
+  bic=var>0?area*OC_LOGF(var):0;
+  if(_seg->level_max>OC_SEG_MOMENT_RES_LOG){
+    oc_seg_splitmerge_bt(_seg,0,0,_iplane->width,_iplane->height,
+     _seg->level_max,area,sumx,sumx2,bic,_iplane);
+  }
+  else{
+    oc_seg_splitmerge_bs(_seg,0,0,_iplane->width,_iplane->height,
+     _seg->level_max,area,sumx,sumx2,bic,_iplane);
+  }
+  /*Step 1: Add all the global region pairs to the heap.*/
+  for(regi=0;regi<_seg->nregions;regi++){
+    oc_seg_region *reg;
+    oc_seg_link   *link;
+    reg=_seg->regions+regi;
+    /*Add this region's pairs to the merge heap if necessary.
+      Don't worry about heap structure for now.*/
+    for(link=reg->link.next;link->pair!=NULL;link=link->next){
+      oc_seg_pair *pair;
+      pair=link->pair;
+      if(pair->links==link){
+        oc_seg_pair_update(_seg,pair);
+        if(pair->dbic<0){
+          pair->heapi=_seg->nheap++;
+          _seg->heap[pair->heapi]=pair;
+        }
+      }
+    }
+  }
+  /*Make a heap out of all the pairs all at once.*/
+  oc_seg_pair_heapify(_seg);
+  /*Step 2: Merge all the regions.*/
+  oc_seg_merge(_seg);
+  /*Make sure all the region labels are up to date.*/
+  for(regi=0;regi<_seg->nregions;regi++)oc_seg_get_label(_seg,regi);
+}
+
+
+
+/*Scans a newly created segmentation to enumerate neighbors, count border
+   pixels, count edge pixels, and count pixels near the center of the image.
+  _impmap: The importance map context.
+  _width:  The width of the image.
+  _height: The height of the image.*/
+static void oc_impmap_scan(oc_impmap_ctx *_impmap,int _width,int _height){
+  oc_seg_region     *sregions;
+  oc_impmap_region  *iregions;
+  int              **labels;
+  int               *relabels;
+  int                width_2;
+  int                height_2;
+  int                xend;
+  int                yend;
+  int                nregions;
+  int                regi;
+  int                regj;
+  int                x;
+  int                y;
+  /*First: compact the list of regions.*/
+  nregions=_impmap->seg.nregions;
+  sregions=_impmap->seg.regions;
+  relabels=_impmap->seg.relabels;
+  for(regi=regj=0;regi<nregions;regi++){
+    if(sregions[regi].link.regi==regi){
+      if(regi!=regj)*(sregions+regj)=*(sregions+regi);
+      relabels[regi]=regj++;
+    }
+    /*We may not know the final label of the region we were merged with:
+       save the old label.*/
+    else relabels[regi]=-1-sregions[regi].link.regi;
+  }
+  /*Go back and fix up the labels of any merged regions.*/
+  for(regi=0;regi<nregions;regi++){
+    if(relabels[regi]<0)relabels[regi]=relabels[-1-relabels[regi]];
+  }
+  nregions=_impmap->seg.nregions=regj;
+  /*And now update the neighbor lists.*/
+  for(regi=0;regi<nregions;regi++){
+    oc_seg_link *link;
+    link=&sregions[regi].link;
+    link->next->prev=link;
+    link->prev->next=link;
+    do{
+      link->regi=relabels[link->regi];
+      link=link->next;
+    }
+    while(link->pair!=NULL);
+  }
+  /*Second: Scan the image, gathering statistics and relabeling as we go.
+    We must be careful to relabel each pixel exactly once, because after
+     compacting, relabels[relabels[regi]]!=relabels[regi], so multiple
+     relabelings would be destructive.*/
+  labels=_impmap->seg.labels;
+  iregions=_impmap->regions;
+  /*Clear the region data.*/
+  memset(iregions,0,sizeof(iregions[0])*nregions);
+  /*Handle the corner(s):*/
+  regi=labels[0][0]=relabels[labels[0][0]];
+  iregions[regi].nborder++;
+  iregions[regi].nedge++;
+  if(_width>1){
+    regi=labels[0][_width-1]=relabels[labels[0][_width-1]];
+    iregions[regi].nborder++;
+    iregions[regi].nedge++;
+  }
+  if(_height>1){
+    regi=labels[_height-1][0]=relabels[labels[_height-1][0]];
+    iregions[regi].nborder++;
+    iregions[regi].nedge++;
+  }
+  if(_width>1&&_height>1){
+    regi=labels[_height-1][_width-1]=relabels[labels[_height-1][_width-1]];
+    iregions[regi].nborder++;
+    iregions[regi].nedge++;
+  }
+  /*Handle the interior edge(s):*/
+  for(x=1;x<_width-1;x++){
+    regi=labels[0][x]=relabels[labels[0][x]];
+    iregions[regi].nborder++;
+    iregions[regi].nedge++;
+  }
+  for(y=1;y<_height-1;y++){
+    regi=labels[y][0]=relabels[labels[y][0]];
+    iregions[regi].nborder++;
+    iregions[regi].nedge++;
+  }
+  /*Note: we DON'T store the new label for this edge.
+    See below.*/
+  if(_height>1)for(x=1;x<_width-1;x++){
+    regi=relabels[labels[_height-1][x]];
+    iregions[regi].nborder++;
+    iregions[regi].nedge++;
+  }
+  if(_width>1)for(y=1;y<_height-1;y++){
+    regi=labels[y][_width-1]=relabels[labels[y][_width-1]];
+    iregions[regi].nborder++;
+    iregions[regi].nedge++;
+  }
+  /*Handle the interior:*/
+  /*In the interior, we visit a pixel and all four of its neighbors.
+    To make sure we only relabel each pixel once, we operate under the
+     invariant that the current pixel, and all of its neighbors except the
+     one below it have already been relabeled.
+    Thus we relabel the next row right before we traverse it.
+    That's why we skipped relabeling the last row above.
+    But first, we must relabel the first row of the interior, because that
+     was not done above.*/
+  if(_height>1)for(x=1;x<_width-1;x++)labels[1][x]=relabels[labels[1][x]];
+  /*Now we proceed with the main interior loop.*/
+  for(y=1;y<_height-1;y++)for(x=1;x<_width-1;x++){
+    int border;
+    regi=labels[y][x];
+    border=regi^labels[y][x-1];
+    border|=regi^labels[y][x+1];
+    border|=regi^labels[y-1][x];
+    regj=labels[y+1][x]=relabels[labels[y+1][x]];
+    border|=regi^regj;
+    iregions[regi].nborder+=!!border;
+  }
+  /*Fifth: Handle the central 25% of the image.*/
+  width_2=_width>>1;
+  height_2=_height>>1;
+  xend=(width_2>>1)+width_2;
+  yend=(height_2>>1)+height_2;
+  for(y=height_2>>1;y<yend;y++)for(x=width_2>>1;x<xend;x++){
+    iregions[labels[y][x]].ncenter++;
+  }
+#if defined(OC_DUMP_IMAGES)
+  /*Dump a PNG of the segmented image.
+    Each segment is mapped to its mean gray level.*/
+  {
+    png_structp   png;
+    png_infop     info;
+    png_bytep    *image;
+    FILE         *fp;
+    char          fname[16];
+    sprintf(fname,"%08iseg.png",_impmap->enc->state.curframe_num);
+    fp=fopen(fname,"wb");
+    if(fp==NULL)return;
+    image=(png_bytep *)oc_malloc_2d(_height,_width,sizeof(image[0][0]));
+    png=png_create_write_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
+    if(png==NULL){
+      oc_free_2d(image);
+      fclose(fp);
+      return;
+    }
+    info=png_create_info_struct(png);
+    if(info==NULL){
+      png_destroy_write_struct(&png,NULL);
+      oc_free_2d(image);
+      fclose(fp);
+      return;
+    }
+    if(setjmp(png_jmpbuf(png))){
+      png_destroy_write_struct(&png,&info);
+      oc_free_2d(image);
+      fclose(fp);
+      return;
+    }
+    for(y=0;y<_height;y++)for(x=0;x<_width;x++){
+      int regi;
+      regi=labels[y][x];
+      image[_height-1-y][x]=(unsigned char)(
+       sregions[regi].sumx/sregions[regi].npixels+0.5F);
+    }
+    png_init_io(png,fp);
+    png_set_compression_level(png,Z_BEST_COMPRESSION);
+    png_set_IHDR(png,info,_width,_height,8,PNG_COLOR_TYPE_GRAY,
+     PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
+    png_set_rows(png,info,image);
+    png_write_png(png,info,PNG_TRANSFORM_IDENTITY,NULL);
+    png_write_end(png,info);
+    png_destroy_write_struct(&png,&info);
+    oc_free_2d(image);
+    fclose(fp);
+  }
+#endif
+}
+
+static void oc_impmap_regions_weight(oc_impmap_ctx *_impmap){
+  oc_seg_region    *sreg;
+  oc_impmap_region *ireg;
+  float             weight_mins[OC_IMPMAP_NSEG_RESCALED_WEIGHTS];
+  float             weight_maxs[OC_IMPMAP_NSEG_RESCALED_WEIGHTS];
+  float             weight_scales[OC_IMPMAP_NSEG_RESCALED_WEIGHTS];
+  float             imp_max;
+  float             imp_scale;
+  int               regi;
+  int               i;
+  /*Compute the importance values for each region:*/
+  for(i=0;i<OC_IMPMAP_NSEG_RESCALED_WEIGHTS;i++){
+    weight_mins[i]=FLT_MAX;
+    weight_maxs[i]=-FLT_MAX;
+  }
+  /*Step 1: Compute several weighting factors for each region.*/
+  for(regi=0;regi<_impmap->seg.nregions;regi++){
+    oc_seg_link *link;
+    float        nsumx;
+    int          narea;
+    ireg=_impmap->regions+regi;
+    sreg=_impmap->seg.regions+regi;
+    /*Contrast weight: measure contrast with neighboring regions.*/
+    nsumx=0;
+    narea=0;
+    for(link=sreg->link.next;link->pair!=NULL;link=link->next){
+      nsumx+=_impmap->seg.regions[link->regi].sumx;
+      narea+=_impmap->seg.regions[link->regi].npixels;
+    }
+    ireg->weights[OC_IMPMAP_WEIGHT_CONTRAST]=sreg->sumx/sreg->npixels;
+    if(narea>0)ireg->weights[OC_IMPMAP_WEIGHT_CONTRAST]-=nsumx/narea;
+    /*Osberger does not specify using an absolute value, but it seems like
+       that is really what one wants.*/
+    ireg->weights[OC_IMPMAP_WEIGHT_CONTRAST]=
+     OC_FABSF(ireg->weights[OC_IMPMAP_WEIGHT_CONTRAST]);
+    /*Size weight: measure the size of the region.*/
+    ireg->weights[OC_IMPMAP_WEIGHT_SIZE]=
+     OC_MINF(sreg->npixels*_impmap->inv_region_sz_max,1);
+    /*Shape weight: measure unusual (long/thin) shapes.*/
+    ireg->weights[OC_IMPMAP_WEIGHT_SHAPE]=
+     OC_POWF(ireg->nborder,1.75F)/sreg->npixels;
+    /*Location weight: weight regions in the image center.*/
+    ireg->weights[OC_IMPMAP_WEIGHT_LOCATION]=
+     ireg->ncenter/(float)sreg->npixels;
+    /*Foreground weight: weight regions in the image foreground.
+      As per Osberger, this is defined as regions which do not intersect the
+       border of the image.*/
+    ireg->weights[OC_IMPMAP_WEIGHT_FOREGROUND]=
+     OC_MAXF(1-ireg->nedge*_impmap->inv_edge_sz_max,0);
+    for(i=0;i<OC_IMPMAP_NSEG_RESCALED_WEIGHTS;i++){
+      weight_maxs[i]=OC_MAXF(weight_maxs[i],ireg->weights[i]);
+      weight_mins[i]=OC_MINF(weight_mins[i],ireg->weights[i]);
+    }
+  }
+  /*Rescale the weighting factors into the range [0,1] as necessary.*/
+  for(i=0;i<OC_IMPMAP_NSEG_RESCALED_WEIGHTS;i++){
+    if(weight_maxs[i]>weight_mins[i]){
+      weight_scales[i]=1/(weight_maxs[i]-weight_mins[i]);
+    }
+    else weight_scales[i]=1;
+  }
+  /*Step 2: Combine the weighting factors into a single importance value.*/
+  imp_max=0;
+  for(regi=0;regi<_impmap->seg.nregions;regi++){
+    ireg=_impmap->regions+regi;
+    for(i=0;i<OC_IMPMAP_NSEG_RESCALED_WEIGHTS;i++){
+      ireg->weights[i]=(ireg->weights[i]-weight_mins[i])*weight_scales[i];
+    }
+    ireg->importance=0;
+    for(i=0;i<OC_IMPMAP_NSEG_WEIGHTS;i++){
+      ireg->importance+=ireg->weights[i]*ireg->weights[i];
+    }
+    imp_max=OC_MAXF(imp_max,ireg->importance);
+  }
+  /*Rescale the regions' importances into the range [0,1].*/
+  if(imp_max>0){
+    imp_scale=1/imp_max;
+    for(regi=0;regi<_impmap->seg.nregions;regi++){
+      _impmap->regions[regi].importance*=imp_scale;
+    }
+  }
+}
+
+/*Computes the importance of a given motion vector.
+  _impmap: The importance map context.
+  _dx:     The horizontal motion, in half-pixels/frame.
+  _dy:     The vertical motion, in half-pixels/frame.*/
+static float oc_impmap_mot_weight(oc_impmap_ctx *_impmap,int _dx,int _dy){
+  float mot;
+  /*This computation is perhaps too simple: In reality, it is motion which
+     deviates from the average (3D) motion that attracts attention.
+    Consider a camera that is moving straight forward.
+    The motion with the largest magnitudes is on the edge of the image, but
+     the most likely center of attention is the vanishing point in the center
+     of the image.
+    All of the motion in the image can be explained by one global motion of
+     the camera, and so none of it in particular draws attention.
+    However, the Theora codec does not currently have a form of global motion
+     compensation, and computing it just for this measurement is awfully
+     expensive.*/
+  mot=OC_SQRTF(_dx*_dx+_dy*_dy);
+  if(mot<_impmap->mot_limits[0])return 0;
+  else if(mot<_impmap->mot_limits[1]){
+    return (mot-_impmap->mot_limits[0])/
+     (_impmap->mot_limits[1]-_impmap->mot_limits[0]);
+  }
+  else if(mot<_impmap->mot_limits[2])return 1;
+  else if(mot<_impmap->mot_limits[3]){
+    return (_impmap->mot_limits[3]-mot)/
+     (_impmap->mot_limits[3]-_impmap->mot_limits[2]);
+  }
+  else return 0;
+}
+
+static void oc_impmap_chroma_frag_weight00(oc_fragment_enc_info *_efrag,
+ oc_mb_map _map,const float _yfrag_imp_weights[4]){
+  float cfrag_imp_weight;
+  cfrag_imp_weight=OC_MAXF(OC_MAXF(_yfrag_imp_weights[0],
+   _yfrag_imp_weights[1]),
+   OC_MAXF(_yfrag_imp_weights[2],_yfrag_imp_weights[3]));
+  _efrag[_map[1][0]].imp_weight=cfrag_imp_weight;
+  _efrag[_map[2][0]].imp_weight=cfrag_imp_weight;
+}
+
+static void oc_impmap_chroma_frag_weight01(oc_fragment_enc_info *_efrag,
+ oc_mb_map _map,const float _yfrag_imp_weights[4]){
+  float cfrag_imp_weight;
+  cfrag_imp_weight=OC_MAXF(_yfrag_imp_weights[0],_yfrag_imp_weights[2]);
+  _efrag[_map[1][0]].imp_weight=cfrag_imp_weight;
+  _efrag[_map[2][0]].imp_weight=cfrag_imp_weight;
+  cfrag_imp_weight=OC_MAXF(_yfrag_imp_weights[1],_yfrag_imp_weights[3]);
+  _efrag[_map[1][1]].imp_weight=cfrag_imp_weight;
+  _efrag[_map[2][1]].imp_weight=cfrag_imp_weight;
+}
+
+static void oc_impmap_chroma_frag_weight10(oc_fragment_enc_info *_efrag,
+ oc_mb_map _map,const float _yfrag_imp_weights[4]){
+  float cfrag_imp_weight;
+  cfrag_imp_weight=OC_MAXF(_yfrag_imp_weights[0],_yfrag_imp_weights[1]);
+  _efrag[_map[1][0]].imp_weight=cfrag_imp_weight;
+  _efrag[_map[2][0]].imp_weight=cfrag_imp_weight;
+  cfrag_imp_weight=OC_MAXF(_yfrag_imp_weights[2],_yfrag_imp_weights[3]);
+  _efrag[_map[1][2]].imp_weight=cfrag_imp_weight;
+  _efrag[_map[2][2]].imp_weight=cfrag_imp_weight;
+}
+
+static void oc_impmap_chroma_frag_weight11(oc_fragment_enc_info *_efrag,
+ oc_mb_map _map,const float _yfrag_imp_weights[4]){
+  _efrag[_map[1][0]].imp_weight=_yfrag_imp_weights[0];
+  _efrag[_map[2][0]].imp_weight=_yfrag_imp_weights[0];
+  _efrag[_map[1][1]].imp_weight=_yfrag_imp_weights[1];
+  _efrag[_map[2][1]].imp_weight=_yfrag_imp_weights[1];
+  _efrag[_map[1][2]].imp_weight=_yfrag_imp_weights[2];
+  _efrag[_map[2][2]].imp_weight=_yfrag_imp_weights[2];
+  _efrag[_map[1][3]].imp_weight=_yfrag_imp_weights[3];
+  _efrag[_map[2][3]].imp_weight=_yfrag_imp_weights[3];
+}
+
+/*A table of functions used to fill in the chroma plane fragment importance
+   for a macro block for each type of chrominance decimation.
+  The importance of a chroma fragment is taken as the maximum importance of
+   any co-located luma fragment.*/
+static const oc_impmap_chroma_frag_weight_func
+ OC_IMPMAP_CHROMA_FRAG_WEIGHT_TABLE[4]={
+  oc_impmap_chroma_frag_weight00,
+  oc_impmap_chroma_frag_weight01,
+  oc_impmap_chroma_frag_weight10,
+  oc_impmap_chroma_frag_weight11,
+};
+
+
+
+static float oc_impmap_mb_weight(oc_impmap_ctx *_impmap,int _mbi){
+  oc_mb *mb;
+  float  ret;
+  mb=_impmap->enc->state.mbs+_mbi;
+  ret=0;
+  if(mb->mode!=OC_MODE_INVALID){
+    static const int FRAG_DX[4]={0,8,0,8};
+    static const int FRAG_DY[4]={0,0,8,8};
+    oc_mb_enc_info    *emb;
+    oc_impmap_region  *iregions;
+    int              **labels;
+    float              frag_imps[4];
+    float              frag_imp_weights[4];
+    float              mot_imp;
+    int                x0;
+    int                y0;
+    int                i;
+    emb=_impmap->enc->mbinfo+_mbi;
+    mot_imp=oc_impmap_mot_weight(_impmap,emb->mvs[0][OC_FRAME_PREV][0],
+     emb->mvs[0][OC_FRAME_PREV][1]);
+    iregions=_impmap->regions;
+    labels=_impmap->seg.labels;
+    x0=mb->x-_impmap->pic_x;
+    y0=mb->y-_impmap->pic_y;
+    for(i=0;i<4;i++){
+      oc_fragment          *frag;
+      oc_fragment_enc_info *efrag;
+      int                   xend;
+      int                   yend;
+      int                   x;
+      int                   y;
+      frag=_impmap->enc->state.frags+mb->map[0][i];
+      efrag=_impmap->enc->frinfo+mb->map[0][i];
+      xend=x0+FRAG_DX[i]+8;
+      yend=y0+FRAG_DY[i]+8;
+      frag_imps[i]=0;
+      if(frag->invalid)continue;
+      if(frag->border==NULL){
+        for(y=y0+FRAG_DY[i];y<yend;y++)for(x=x0+FRAG_DX[i];x<xend;x++){
+          frag_imps[i]=OC_MAXF(frag_imps[i],
+           iregions[labels[y][x]].importance);
+        }
+      }
+      else{
+        oc_border_info *border;
+        ogg_int64_t     bit;
+        border=frag->border;
+        for(y=y0+FRAG_DY[i],bit=1;y<yend;y++){
+          for(x=x0+FRAG_DX[i];x<xend;x++,bit<<=1)if(border->mask&bit){
+            frag_imps[i]=OC_MAXF(frag_imps[i],
+             iregions[labels[y][x]].importance);
+          }
+        }
+      }
+      frag_imps[i]+=mot_imp;
+      ret+=frag_imps[i];
+      efrag->imp_weight=frag_imp_weights[i]=
+       (2*frag_imps[i]+_impmap->imp_avg)/(frag_imps[i]+2*_impmap->imp_avg);
+    }
+    (*_impmap->chroma_frag_weight)(_impmap->enc->frinfo,mb->map,
+     frag_imp_weights);
+  }
+  return ret;
+}
+static void oc_impmap_fill(oc_impmap_ctx *_impmap,float _duration){
+  th_img_plane yplane;
+  float        imp_sum;
+  int          img_offset;
+  int          nmbs;
+  int          mbi;
+  /*Segment the Y plane.*/
+  /*TODO: Use the same oc_border_info structure as everyone else.
+    This would make future integration of an alpha mask easier.*/
+  img_offset=_impmap->enc->state.input[0].ystride*
+   _impmap->enc->state.info.pic_y+_impmap->enc->state.info.pic_x;
+  yplane.data=_impmap->enc->state.input[0].data+img_offset;
+  yplane.width=_impmap->enc->state.info.pic_width;
+  yplane.height=_impmap->enc->state.info.pic_height;
+  yplane.ystride=_impmap->enc->state.input[0].ystride;
+  oc_seg_plane(&_impmap->seg,&yplane);
+  /*Gather statistics over the segmentation.*/
+  oc_impmap_scan(_impmap,yplane.width,yplane.height);
+  /*Compute weights for each segmented region.*/
+  oc_impmap_regions_weight(_impmap);
+  /*Rescale motion limits from deg/sec to half-pixels/frame.*/
+  _impmap->mot_limits[0]=2*OC_IMPMAP_MOT_MIN*OC_PIXELS_PER_DEGREE*_duration;
+  _impmap->mot_limits[1]=2*OC_IMPMAP_MOT_P1*OC_PIXELS_PER_DEGREE*_duration;
+  _impmap->mot_limits[2]=2*OC_IMPMAP_MOT_P2*OC_PIXELS_PER_DEGREE*_duration;
+  _impmap->mot_limits[3]=2*OC_IMPMAP_MOT_MAX*OC_PIXELS_PER_DEGREE*_duration;
+  nmbs=_impmap->enc->state.nmbs;
+  imp_sum=0;
+  for(mbi=0;mbi<nmbs;mbi++)imp_sum+=oc_impmap_mb_weight(_impmap,mbi);
+  _impmap->imp_avg=imp_sum/_impmap->enc->state.fplanes[0].nfrags;
+#if defined(OC_DUMP_IMAGES)
+  /*Dump a PNG of the importance maps.*/
+  {
+    int pli;
+    for(pli=0;pli<3;pli++){
+      oc_fragment_plane *fplane;
+      png_structp        png;
+      png_infop          info;
+      png_bytep         *image;
+      FILE              *fp;
+      char               fname[16];
+      int                x;
+      int                y;
+      sprintf(fname,"%08iim%i.png",(int)_impmap->enc->state.curframe_num,pli);
+      fp=fopen(fname,"wb");
+      if(fp==NULL)return;
+      fplane=_impmap->enc->state.fplanes+pli;
+      image=(png_bytep *)oc_malloc_2d(fplane->nvfrags,fplane->nhfrags,
+       sizeof(image[0][0]));
+      png=png_create_write_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
+      if(png==NULL){
+        oc_free_2d(image);
+        fclose(fp);
+        return;
+      }
+      info=png_create_info_struct(png);
+      if(info==NULL){
+        png_destroy_write_struct(&png,NULL);
+        oc_free_2d(image);
+        fclose(fp);
+        return;
+      }
+      if(setjmp(png_jmpbuf(png))){
+        png_destroy_write_struct(&png,&info);
+        oc_free_2d(image);
+        fclose(fp);
+        return;
+      }
+      for(y=0;y<fplane->nvfrags;y++)for(x=0;x<fplane->nhfrags;x++){
+        float imp;
+        imp=(_impmap->enc->frinfo+fplane->froffset+
+         (fplane->nvfrags-1-y)*fplane->nhfrags+x)->imp_weight;
+        image[y][x]=(unsigned char)(imp*64+128.5F);
+      }
+      png_init_io(png,fp);
+      png_set_compression_level(png,Z_BEST_COMPRESSION);
+      png_set_IHDR(png,info,fplane->nhfrags,fplane->nvfrags,8,
+       PNG_COLOR_TYPE_GRAY,PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,
+       PNG_FILTER_TYPE_DEFAULT);
+      png_set_rows(png,info,image);
+      png_write_png(png,info,PNG_TRANSFORM_IDENTITY,NULL);
+      png_write_end(png,info);
+      png_destroy_write_struct(&png,&info);
+      oc_free_2d(image);
+      fclose(fp);
+    }
+  }
+#endif
+}
+
+
+/*The importance map pipeline stage.
+  For now, for simplicity, this is not actually pipelined.
+  The quadtree segmentation algorithm does not really lend itself to it, and
+   even if an online segmentation algorithm were used, a full stall would be
+   created by the need to gather statistics over all the regions to assign
+   weights to any of them.*/
+
+static int oc_impmap_pipe_start(oc_enc_pipe_stage *_stage){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=0;
+  return 0;
+}
+
+static int oc_impmap_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  int pli;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=_y_avail[pli];
+  return 0;
+}
+
+static int oc_impmap_pipe_end(oc_enc_pipe_stage *_stage){
+  oc_enc_ctx *enc;
+  enc=_stage->enc;
+  oc_impmap_fill(enc->vbr->impmap,
+   enc->state.info.fps_denominator/(float)enc->state.info.fps_numerator);
+  if(_stage->next!=NULL){
+    int ret;
+    ret=(*_stage->next->pipe_start)(_stage->next);
+    if(ret<0)return ret;
+    ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+    if(ret<0)return ret;
+    return (*_stage->next->pipe_end)(_stage->next);
+  }
+  return 0;
+}
+
+/*Initialize the importance map stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_impmap_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_impmap_pipe_start;
+  _stage->pipe_proc=oc_impmap_pipe_process;
+  _stage->pipe_end=oc_impmap_pipe_end;
+}
+
+
+oc_impmap_ctx *oc_impmap_alloc(oc_enc_ctx *_enc){
+  th_info       *info;
+  oc_impmap_ctx *impmap;
+  int            edge_sz;
+  int            width;
+  int            height;
+  info=&_enc->state.info;
+  width=info->pic_width;
+  height=info->pic_height;
+  impmap=(oc_impmap_ctx *)_ogg_malloc(sizeof(*impmap));
+  oc_seg_init(&impmap->seg,width,height);
+  impmap->inv_region_sz_max=100.0F/(width*height);
+  edge_sz=width>1?height>1?(width-2<<1)+(height<<1):width:height;
+  impmap->inv_edge_sz_max=2.0F/edge_sz;
+  impmap->pic_x=info->pic_x;
+  impmap->pic_y=info->pic_y;
+  impmap->imp_avg=0.5F;
+  /*Allocate space for the region stats and neighbor links.*/
+  impmap->regions=(oc_impmap_region *)_ogg_malloc(
+   impmap->seg.cregions*sizeof(impmap->regions[0]));
+  impmap->enc=_enc;
+  impmap->chroma_frag_weight=
+   OC_IMPMAP_CHROMA_FRAG_WEIGHT_TABLE[_enc->state.info.pixel_fmt];
+  oc_impmap_pipe_init(&impmap->pipe,_enc);
+  return impmap;
+}
+
+void oc_impmap_free(oc_impmap_ctx *_impmap){
+  if(_impmap!=NULL){
+    oc_seg_clear(&_impmap->seg);
+    _ogg_free(_impmap->regions);
+    _ogg_free(_impmap);
+  }
+}
+
+
+oc_enc_pipe_stage *oc_impmap_prepend_to_pipe(oc_impmap_ctx *_impmap,
+ oc_enc_pipe_stage *_next){
+  _impmap->pipe.next=_next;
+  return &_impmap->pipe;
+}

Added: trunk/theora-exp/lib/info.c
===================================================================
--- trunk/theora-exp/lib/info.c	                        (rev 0)
+++ trunk/theora-exp/lib/info.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,106 @@
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include "internal.h"
+
+
+
+/*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.
+  Note: We take advantage of the fact that we know _n is less than or equal to
+   the length of at least one of the strings.*/
+static int oc_tagcompare(const char *_s1,const char *_s2,int _n){
+  int c;
+  for(c=0;c<_n;c++){
+    if(toupper(_s1[c])!=toupper(_s2[c]))return !0;
+  }
+  return _s1[c]!='=';
+}
+
+
+
+void th_info_init(th_info *_info){
+  memset(_info,0,sizeof(*_info));
+  _info->version_major=TH_VERSION_MAJOR;
+  _info->version_minor=TH_VERSION_MINOR;
+  _info->version_subminor=TH_VERSION_SUB;
+  _info->keyframe_granule_shift=6;
+}
+
+void th_info_clear(th_info *_info){
+  memset(_info,0,sizeof(*_info));
+}
+
+
+
+void th_comment_init(th_comment *_tc){
+  memset(_tc,0,sizeof(*_tc));
+}
+
+void th_comment_add(th_comment *_tc,char *_comment){
+  int comment_len;
+  _tc->user_comments=_ogg_realloc(_tc->user_comments,
+   (_tc->comments+2)*sizeof(*_tc->user_comments));
+  _tc->comment_lengths=_ogg_realloc(_tc->comment_lengths,
+   (_tc->comments+2)*sizeof(*_tc->comment_lengths));
+  comment_len=strlen(_comment);
+  _tc->comment_lengths[_tc->comments]=comment_len;
+  _tc->user_comments[_tc->comments]=_ogg_malloc(comment_len+1);
+  memcpy(_tc->user_comments[_tc->comments],_comment,comment_len+1);
+  _tc->comments++;
+  _tc->user_comments[_tc->comments]=NULL;
+}
+
+void th_comment_add_tag(th_comment *_tc,char *_tag,char *_val){
+  char *comment;
+  int   tag_len;
+  int   val_len;
+  tag_len=strlen(_tag);
+  val_len=strlen(_val);
+  /*+2 for '=' and '\0'.*/
+  comment=_ogg_malloc(tag_len+val_len+2);
+  memcpy(comment,_tag,tag_len);
+  comment[tag_len]='=';
+  memcpy(comment+tag_len+1,_val,val_len+1);
+  th_comment_add(_tc,comment);
+  _ogg_free(comment);
+}
+
+char *th_comment_query(th_comment *_tc,char *_tag,int _count){
+  long i;
+  int  found;
+  int  tag_len;
+  tag_len=strlen(_tag);
+  found=0;
+  for(i=0;i<_tc->comments;i++){
+    if(!oc_tagcompare(_tc->user_comments[i],_tag,tag_len)){
+      /*We return a pointer to the data, not a copy.*/
+      if(_count==found++)return _tc->user_comments[i]+tag_len+1;
+    }
+  }
+  /*Didn't find anything.*/
+  return NULL;
+}
+
+int th_comment_query_count(th_comment *_tc,char *_tag){
+  long i;
+  int  tag_len;
+  int  count;
+  tag_len=strlen(_tag);
+  count=0;
+  for(i=0;i<_tc->comments;i++){
+    if(!oc_tagcompare(_tc->user_comments[i],_tag,tag_len))count++;
+  }
+  return count;
+}
+
+void th_comment_clear(th_comment *_tc){
+  if(_tc!=NULL){
+    long i;
+    for(i=0;i<_tc->comments;i++)_ogg_free(_tc->user_comments[i]);
+    _ogg_free(_tc->user_comments);
+    _ogg_free(_tc->comment_lengths);
+    _ogg_free(_tc->vendor);
+    memset(_tc,0,sizeof(*_tc));
+  }
+}

Added: trunk/theora-exp/lib/internal.c
===================================================================
--- trunk/theora-exp/lib/internal.c	                        (rev 0)
+++ trunk/theora-exp/lib/internal.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,365 @@
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include "internal.h"
+#include "idct.h"
+
+
+
+/*A map from the index in the zig zag scan to the coefficient number in a
+   block.
+  All zig zag indices beyond 63 are sent to coefficient 64, so that zero runs
+   past the end of a block in bogus streams get mapped to a known location.*/
+const int OC_FZIG_ZAG[128]={
+   0, 1, 8,16, 9, 2, 3,10,
+  17,24,32,25,18,11, 4, 5,
+  12,19,26,33,40,48,41,34,
+  27,20,13, 6, 7,14,21,28,
+  35,42,49,56,57,50,43,36,
+  29,22,15,23,30,37,44,51,
+  58,59,52,45,38,31,39,46,
+  53,60,61,54,47,55,62,63,
+  64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64,
+  64,64,64,64,64,64,64,64
+};
+
+/*A map from the coefficient number in a block to its index in the zig zag
+   scan.*/
+const int OC_IZIG_ZAG[64]={
+   0, 1, 5, 6,14,15,27,28,
+   2, 4, 7,13,16,26,29,42,
+   3, 8,12,17,25,30,41,43,
+   9,11,18,24,31,40,44,53,
+  10,19,23,32,39,45,52,54,
+  20,22,33,38,46,51,55,60,
+  21,34,37,47,50,56,59,61,
+  35,36,48,49,57,58,62,63
+};
+
+/*The predictor frame to use for each macro block mode.*/
+const int OC_FRAME_FOR_MODE[8]={
+  /*OC_MODE_INTRA*/
+  OC_FRAME_SELF,
+  /*OC_MODE_INTER_NOMV*/
+  OC_FRAME_PREV,
+  /*OC_MODE_INTER_MV*/
+  OC_FRAME_PREV,
+  /*OC_MODE_INTER_MV_LAST*/
+  OC_FRAME_PREV,
+  /*OC_MODE_INTER_MV_LAST2*/
+  OC_FRAME_PREV,
+  /*OC_MODE_INTER_MV_FOUR*/
+  OC_FRAME_PREV,
+  /*OC_MODE_GOLDEN*/
+  OC_FRAME_GOLD,
+  /*OC_MODE_GOLDEN_MV*/
+  OC_FRAME_GOLD,
+};
+
+/*A map from physical macro block ordering to bitstream macro block
+   ordering within a super block.*/
+const int OC_MB_MAP[2][2]={{0,3},{1,2}};
+
+/*A list of the indices in the oc_mb.map array that can be valid for each of
+   the various chroma decimation types.*/
+const int OC_MB_MAP_IDXS[TH_PF_NFORMATS][12]={
+  {0,1,2,3,4,8},
+  {0,1,2,3,4,5,8,9},
+  {0,1,2,3,4,6,8,10},
+  {0,1,2,3,4,5,6,7,8,9,10,11}
+};
+
+/*The number of indices in the oc_mb.map array that can be valid for each of
+   the various chroma decimation types.*/
+const int OC_MB_MAP_NIDXS[TH_PF_NFORMATS]={6,8,8,12};
+
+/*The number of extra bits that are coded with each of the DCT tokens.
+  Each DCT token has some fixed number of additional bits (possibly 0) stored
+   after the token itself, containing, for example, coefficient magnitude,
+   sign bits, etc.*/
+const int OC_DCT_TOKEN_EXTRA_BITS[TH_NDCT_TOKENS]={
+  0,0,0,2,3,4,12,3,6,
+  0,0,0,0,
+  1,1,1,1,2,3,4,5,6,10,
+  1,1,1,1,1,3,4,
+  2,3
+};
+
+
+
+int oc_ilog(unsigned _v){
+  int ret;
+  for(ret=0;_v;ret++)_v>>=1;
+  return ret;
+}
+
+
+
+/*Determines the number of blocks or coefficients to be skipped for a given
+   token value.
+  _token:      The token value to skip.
+  _extra_bits: The extra bits attached to this token.
+  Return: A positive value indicates that number of coefficients are to be
+           skipped in the current block.
+          Otherwise, the negative of the return value indicates that number of
+           blocks are to be ended.*/
+typedef int (*oc_token_skip_func)(int _token,int _extra_bits);
+
+/*Handles the simple end of block tokens.*/
+static int oc_token_skip_eob(int _token,int _extra_bits){
+  static const int NBLOCKS_ADJUST[OC_NDCT_EOB_TOKEN_MAX]={1,2,3,4,8,16,0};
+  return -_extra_bits-NBLOCKS_ADJUST[_token];
+}
+
+/*The last EOB token has a special case, where an EOB run of size zero ends all
+   the remaining blocks in the frame.*/
+static int oc_token_skip_eob6(int _token,int _extra_bits){
+  if(!_extra_bits)return -INT_MAX;
+  return -_extra_bits;
+}
+
+/*Handles the pure zero run tokens.*/
+static int oc_token_skip_zrl(int _token,int _extra_bits){
+  return _extra_bits+1;
+}
+
+/*Handles a normal coefficient value token.*/
+static int oc_token_skip_val(void){
+  return 1;
+}
+
+/*Handles a category 1A zero run/coefficient value combo token.*/
+static int oc_token_skip_run_cat1a(int _token){
+  return _token-OC_DCT_RUN_CAT1A+2;
+}
+
+/*Handles category 1b and 2 zero run/coefficient value combo tokens.*/
+static int oc_token_skip_run(int _token,int _extra_bits){
+  static const int NCOEFFS_ADJUST[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    7,11,2,3
+  };
+  static const int NCOEFFS_MASK[OC_NDCT_RUN_MAX-OC_DCT_RUN_CAT1B]={
+    3,7,0,1
+  };
+  _token-=OC_DCT_RUN_CAT1B;
+  return (_extra_bits&NCOEFFS_MASK[_token])+NCOEFFS_ADJUST[_token];
+}
+
+/*A jump table for computing the number of coefficients or blocks to skip for
+   a given token value.
+  This reduces all the conditional branches, etc., needed to parse these token
+   values down to one indirect jump.*/
+static const oc_token_skip_func OC_TOKEN_SKIP_TABLE[TH_NDCT_TOKENS]={
+  oc_token_skip_eob,
+  oc_token_skip_eob,
+  oc_token_skip_eob,
+  oc_token_skip_eob,
+  oc_token_skip_eob,
+  oc_token_skip_eob,
+  oc_token_skip_eob6,
+  oc_token_skip_zrl,
+  oc_token_skip_zrl,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_val,
+  (oc_token_skip_func)oc_token_skip_run_cat1a,
+  (oc_token_skip_func)oc_token_skip_run_cat1a,
+  (oc_token_skip_func)oc_token_skip_run_cat1a,
+  (oc_token_skip_func)oc_token_skip_run_cat1a,
+  (oc_token_skip_func)oc_token_skip_run_cat1a,
+  oc_token_skip_run,
+  oc_token_skip_run,
+  oc_token_skip_run,
+  oc_token_skip_run
+};
+
+/*Determines the number of blocks or coefficients to be skipped for a given
+   token value.
+  _token:      The token value to skip.
+  _extra_bits: The extra bits attached to this token.
+  Return: A positive value indicates that number of coefficients are to be
+           skipped in the current block.
+          Otherwise, the negative of the return value indicates that number of
+           blocks are to be ended.
+          0 will never be returned, so that at least one coefficient in one
+           block will always be decoded for every token.*/
+int oc_dct_token_skip(int _token,int _extra_bits){
+  return (*OC_TOKEN_SKIP_TABLE[_token])(_token,_extra_bits);
+}
+
+
+/*The function used to fill in the chroma plane motion vectors for a macro
+   block when 4 different motion vectors are specified in the luma plane.
+  This version is for use with chroma decimated in the X and Y directions.
+  _cbmvs: The chroma block-level motion vectors to fill in.
+  _lbmvs: The luma block-level motion vectors.*/
+static void oc_set_chroma_mvs00(oc_mv _cbmvs[4],const oc_mv _lbmvs[4]){
+  int dx;
+  int dy;
+  dx=_lbmvs[0][0]+_lbmvs[1][0]+_lbmvs[2][0]+_lbmvs[3][0];
+  dy=_lbmvs[0][1]+_lbmvs[1][1]+_lbmvs[2][1]+_lbmvs[3][1];
+  _cbmvs[0][0]=(signed char)OC_DIV_ROUND_POW2(dx,2,2);
+  _cbmvs[0][1]=(signed char)OC_DIV_ROUND_POW2(dy,2,2);
+}
+
+/*The function used to fill in the chroma plane motion vectors for a macro
+   block when 4 different motion vectors are specified in the luma plane.
+  This version is for use with chroma decimated in the Y direction.
+  _cbmvs: The chroma block-level motion vectors to fill in.
+  _lbmvs: The luma block-level motion vectors.*/
+static void oc_set_chroma_mvs01(oc_mv _cbmvs[4],const oc_mv _lbmvs[4]){
+  int dx;
+  int dy;
+  dx=_lbmvs[0][0]+_lbmvs[2][0];
+  dy=_lbmvs[0][1]+_lbmvs[2][1];
+  _cbmvs[0][0]=(signed char)OC_DIV_ROUND_POW2(dx,1,1);
+  _cbmvs[0][1]=(signed char)OC_DIV_ROUND_POW2(dy,1,1);
+  dx=_lbmvs[1][0]+_lbmvs[3][0];
+  dy=_lbmvs[1][1]+_lbmvs[3][1];
+  _cbmvs[1][0]=(signed char)OC_DIV_ROUND_POW2(dx,1,1);
+  _cbmvs[1][1]=(signed char)OC_DIV_ROUND_POW2(dy,1,1);
+}
+
+/*The function used to fill in the chroma plane motion vectors for a macro
+   block when 4 different motion vectors are specified in the luma plane.
+  This version is for use with chroma decimated in the X direction.
+  _cbmvs: The chroma block-level motion vectors to fill in.
+  _lbmvs: The luma block-level motion vectors.*/
+static void oc_set_chroma_mvs10(oc_mv _cbmvs[4],const oc_mv _lbmvs[4]){
+  int dx;
+  int dy;
+  dx=_lbmvs[0][0]+_lbmvs[1][0];
+  dy=_lbmvs[0][1]+_lbmvs[1][1];
+  _cbmvs[0][0]=(signed char)OC_DIV_ROUND_POW2(dx,1,1);
+  _cbmvs[0][1]=(signed char)OC_DIV_ROUND_POW2(dy,1,1);
+  dx=_lbmvs[2][0]+_lbmvs[3][0];
+  dy=_lbmvs[2][1]+_lbmvs[3][1];
+  _cbmvs[2][0]=(signed char)OC_DIV_ROUND_POW2(dx,1,1);
+  _cbmvs[2][1]=(signed char)OC_DIV_ROUND_POW2(dy,1,1);
+}
+
+/*The function used to fill in the chroma plane motion vectors for a macro
+   block when 4 different motion vectors are specified in the luma plane.
+  This version is for use with no chroma decimation.
+  _cbmvs: The chroma block-level motion vectors to fill in.
+  _lmbmv: The luma macro-block level motion vector to fill in for use in
+           prediction.
+  _lbmvs: The luma block-level motion vectors.*/
+static void oc_set_chroma_mvs11(oc_mv _cbmvs[4][2],const oc_mv _lbmvs[4]){
+  memcpy(_cbmvs,_lbmvs,4*sizeof(_lbmvs[0]));
+}
+
+/*A table of functions used to fill in the chroma plane motion vectors for a
+   macro block when 4 different motion vectors are specified in the luma
+   plane.*/
+const oc_set_chroma_mvs_func OC_SET_CHROMA_MVS_TABLE[TH_PF_NFORMATS]={
+  oc_set_chroma_mvs00,
+  oc_set_chroma_mvs01,
+  oc_set_chroma_mvs10,
+  oc_set_chroma_mvs11
+};
+
+
+
+void **oc_malloc_2d(size_t _height,size_t _width,size_t _sz){
+  size_t  rowsz;
+  size_t  colsz;
+  size_t  datsz;
+  char   *ret;
+  colsz=_height*sizeof(void *);
+  rowsz=_sz*_width;
+  datsz=rowsz*_height;
+  /*Alloc array and row pointers.*/
+  ret=(char *)_ogg_malloc(datsz+colsz);
+  /*Initialize the array.*/
+  if(ret!=NULL){
+    size_t   i;
+    void   **p;
+    char    *datptr;
+    p=(void **)ret;
+    i=_height;
+    for(datptr=ret+colsz;i-->0;p++,datptr+=rowsz)*p=(void *)datptr;
+  }
+  return (void **)ret;
+}
+
+void **oc_calloc_2d(size_t _height,size_t _width,size_t _sz){
+  size_t  colsz;
+  size_t  rowsz;
+  size_t  datsz;
+  char   *ret;
+  colsz=_height*sizeof(void *);
+  rowsz=_sz*_width;
+  datsz=rowsz*_height;
+  /*Alloc array and row pointers.*/
+  ret=(char *)_ogg_calloc(datsz+colsz,1);
+  /*Initialize the array.*/
+  if(ret!=NULL){
+    size_t   i;
+    void   **p;
+    char    *datptr;
+    p=(void **)ret;
+    i=_height;
+    for(datptr=ret+colsz;i-->0;p++,datptr+=rowsz)*p=(void *)datptr;
+  }
+  return (void **)ret;
+}
+
+void oc_free_2d(void *_ptr){
+  _ogg_free(_ptr);
+}
+
+/*Fills in a Y'CbCr buffer with a pointer to the image data in the first
+   buffer, but with the opposite vertical orientation.
+  _dst: The destination buffer.
+        This can be the same as _src.
+  _src: The source buffer.*/
+void oc_ycbcr_buffer_flip(th_ycbcr_buffer _dst,const th_ycbcr_buffer _src){
+  int pli;
+  for(pli=0;pli<3;pli++){
+    _dst[pli].width=_src[pli].width;
+    _dst[pli].height=_src[pli].height;
+    _dst[pli].ystride=-_src[pli].ystride;
+    _dst[pli].data=_src[pli].data+(1-_dst[pli].height)*_dst[pli].ystride;
+  }
+}
+
+const char *th_version_string(void){
+  return OC_VENDOR_STRING;
+}
+
+ogg_uint32_t th_version_number(void){
+  return (TH_VERSION_MAJOR<<16)+(TH_VERSION_MINOR<<8)+(TH_VERSION_SUB);
+}
+
+/*Determines the packet type.
+  Note that this correctly interprets a 0-byte packet as a video data packet.
+  Return: 1 for a header packet, 0 for a data packet.*/
+int th_packet_isheader(ogg_packet *_op){
+  return _op->bytes>0?_op->packet[0]>>7:0;
+}
+
+/*Determines the frame type of a video data packet.
+  Note that this correctly interprets a 0-byte packet as a delta frame.
+  Return: 1 for a key frame, 0 for a delta frame, and -1 for a header
+           packet.*/
+int th_packet_iskeyframe(ogg_packet *_op){
+  return _op->bytes<=0?0:_op->packet[0]&0x80?-1:!(_op->packet[0]&0x40);
+}

Added: trunk/theora-exp/lib/internal.h
===================================================================
--- trunk/theora-exp/lib/internal.h	                        (rev 0)
+++ trunk/theora-exp/lib/internal.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,467 @@
+#if !defined(_internal_H)
+# define _internal_H (1)
+# include <stdlib.h>
+# if defined(HAVE_CONFIG_H)
+#  include <config.h>
+# endif
+# include "theora/codec.h"
+# include "ocintrin.h"
+# include "huffman.h"
+# include "quant.h"
+
+/*Thank you Microsoft, I know the order of operations.*/
+# if defined(_MSCVER)
+#  pragma warning(disable:4554)
+# endif
+
+/*This library's version.*/
+# define OC_VENDOR_STRING "derf's experimental encoder library " __DATE__
+
+/*Theora bitstream version.*/
+# define TH_VERSION_MAJOR (3)
+# define TH_VERSION_MINOR (2)
+# define TH_VERSION_SUB   (1)
+# define TH_VERSION_CHECK(_info,_maj,_min,_sub) \
+ ((_info)->version_major>(_maj)||(_info)->version_major==(_maj)&& \
+ ((_info)->version_minor>(_min)||(_info)->version_minor==(_min)&& \
+ (_info)->version_subminor>=(_sub)))
+
+/*A keyframe.*/
+#define OC_INTRA_FRAME (0)
+/*A predicted frame.*/
+#define OC_INTER_FRAME (1)
+/*A frame of unknown type (frame type decision has not yet been made).*/
+#define OC_UNKWN_FRAME (-1)
+
+/*The amount of padding to add to the reconstructed frame buffers on all
+   sides.
+  This is used to allow unrestricted motion vectors without special casing.
+  This must be a multiple of 2.*/
+#define OC_UMV_PADDING (16)
+
+/*Frame classification indices.*/
+/*The previous golden frame.*/
+#define OC_FRAME_GOLD (0)
+/*The previous frame.*/
+#define OC_FRAME_PREV (1)
+/*The current frame.*/
+#define OC_FRAME_SELF (2)
+
+/*The input or output buffer.*/
+#define OC_FRAME_IO   (3)
+
+/*Macroblock modes.*/
+/*Macro block is invalid: It is never coded.*/
+#define OC_MODE_INVALID        (-1)
+
+/*Encoded with no motion compensated prediction.*/
+#define OC_MODE_INTRA          (0)
+/*Encoded difference from the same macro block in the previous frame.*/
+#define OC_MODE_INTER_NOMV     (1)
+/*Encoded difference from the previous frame offset by the given motion
+   vector.*/
+#define OC_MODE_INTER_MV       (2)
+/*Encoded difference from the previous frame offset by the last coded motion
+   vector.*/
+#define OC_MODE_INTER_MV_LAST  (3)
+/*Encoded difference from the previous frame offset by the second to last
+   coded motion vector.*/
+#define OC_MODE_INTER_MV_LAST2 (4)
+/*Encoded difference from the previous frame offset by the individual motion
+   vectors given for each block.*/
+#define OC_MODE_INTER_MV_FOUR  (5)
+/*Encoded difference from the same macro block in the previous golden frame.*/
+#define OC_MODE_GOLDEN_NOMV    (6)
+/*Encoded difference from the previous golden frame offset by the given motion
+   vector.*/
+#define OC_MODE_GOLDEN_MV      (7)
+/*The number of (coded) modes.*/
+#define OC_NMODES              (8)
+
+/*Macro block is not coded.*/
+#define OC_MODE_NOT_CODED      (8)
+
+/*Predictor bit flags.*/
+/*Left.*/
+#define OC_PL  (1)
+/*Upper-left.*/
+#define OC_PUL (2)
+/*Up.*/
+#define OC_PU  (4)
+/*Upper-right.*/
+#define OC_PUR (8)
+
+/*Constants for the packet state machine common between encoder and decoder.*/
+
+/*Next packet to emit/read: Codec info header.*/
+#define OC_PACKET_INFO_HDR    (-3)
+/*Next packet to emit/read: Comment header.*/
+#define OC_PACKET_COMMENT_HDR (-2)
+/*Next packet to emit/read: Codec setup header.*/
+#define OC_PACKET_SETUP_HDR   (-1)
+/*No more packets to emit/read.*/
+#define OC_PACKET_DONE        (INT_MAX)
+
+
+
+typedef struct oc_theora_state oc_theora_state;
+
+
+
+/*A map from a super block to fragment numbers.*/
+typedef int         oc_sb_map[4][4];
+/*A map from a macro block to fragment numbers.*/
+typedef int         oc_mb_map[3][4];
+/*A motion vector.*/
+typedef signed char oc_mv[2];
+
+
+
+/*Super block information.
+  Super blocks are 32x32 segments of pixels in a single color plane indexed
+   in image order.
+  Internally, super blocks are broken up into four quadrants, each of which
+   contains a 2x2 pattern of blocks, each of which is an 8x8 block of pixels.
+  Quadrants, and the blocks within them, are indexed in a special order called
+   a "Hilbert curve" within the super block.
+
+  In order to differentiate between the Hilbert-curve indexing strategy and
+   the regular image order indexing strategy, blocks indexed in image order
+   are called "fragments".
+  Fragments are indexed in image order, left to right, then bottom to top,
+   from Y plane to Cb plane to Cr plane.*/
+typedef struct{
+  unsigned  coded_fully:1;
+  unsigned  coded_partially:1;
+  unsigned  quad_valid:4;
+  oc_sb_map map;
+}oc_sb;
+
+
+
+/*Macro block information.
+  The co-located fragments in all image planes corresponding to the location of
+   a single luma plane super block quadrant forms a macro block.
+  Thus there is only a single set of macro blocks for all planes, which
+   contains between 6 and 12 fragments, depending on the pixel format.
+  Therefore macro block information is kept in a separate array from super
+   blocks, to avoid unused space in the other planes.*/
+typedef struct{
+  /*The current macro block mode.
+    A negative number indicates the macro block lies entirely outside the
+     coded frame.*/
+  int           mode;
+  /*The X location of the macro block's upper-left hand pixel.*/
+  int           x;
+  /*The Y location of the macro block's upper-right hand pixel.*/
+  int           y;
+  /*The fragments that belong to this macro block in each color plane.
+    Fragments are stored in image order (left to right then top to bottom).
+    When chroma components are decimated, the extra fragments have an index of
+     -1.*/
+  oc_mb_map     map;
+}oc_mb;
+
+
+
+/*Information about a fragment which intersects the border of the displayable
+   region.
+  This marks which pixels belong to the displayable region, and is used to
+   ensure that pixels outside of this region are never referenced.
+  This allows applications to pass in buffers that are really the size of the
+   displayable region without causing a seg fault.*/
+typedef struct{
+  /*A bit mask marking which pixels are in the displayable region.
+    Pixel (x,y) corresponds to bit (y<<3|x).*/
+  ogg_int64_t mask;
+  /*The number of pixels in the displayable region.
+    This is always positive, and always less than 64.*/
+  int         npixels;
+}oc_border_info;
+
+
+
+/*Fragment information.*/
+typedef struct{
+  /*A flag indicating whether or not this fragment is coded.*/
+  unsigned        coded:1;
+  /*A flag indicating that all of this fragment lies outside the displayable
+     region of the frame.
+    Note the contrast with an invalid macro block, which is outside the coded
+     frame, not just the displayable one.*/
+  unsigned        invalid:1;
+  /*The quality index used for this fragment's AC coefficients.*/
+  unsigned        qi:6;
+  /*The mode of the macroblock this fragment belongs to.*/
+  int             mbmode:8;
+  /*The prediction-corrected DC component.*/
+  int             dc:16;
+  /*A pointer to the portion of an image covered by this fragment in several
+     images.
+    The first three are reconstructed frame buffers, while the last is the
+     input image buffer.
+    The appropriate stride value is determined by the color plane the fragment
+     belongs in.*/
+  unsigned char  *buffer[4];
+  /*Information for fragments which lie partially outside the displayable
+     region.
+    For fragments completely inside or outside this region, this is NULL.*/
+  oc_border_info *border;
+  /*The motion vector used for this fragment.*/
+  oc_mv           mv;
+}oc_fragment;
+
+
+
+/*A description of each fragment plane.*/
+typedef struct{
+  /*The number of fragments in the horizontal direction.*/
+  int nhfrags;
+  /*The number of fragments in the vertical direction.*/
+  int nvfrags;
+  /*The offset of the first fragment in the plane.*/
+  int froffset;
+  /*The total number of fragments in the plane.*/
+  int nfrags;
+  /*The number of super blocks in the horizontal direction.*/
+  int nhsbs;
+  /*The number of super blocks in the vertical direction.*/
+  int nvsbs;
+  /*The offset of the first super block in the plane.*/
+  int sboffset;
+  /*The total number of super blocks in the plane.*/
+  int nsbs;
+}oc_fragment_plane;
+
+
+
+/*The shared (encoder and decoder) functions that have accelerated variants.*/
+typedef struct{
+  void (*frag_recon_intra)(unsigned char *_dst,int _dst_ystride,
+   const ogg_int16_t *_residue);
+  void (*frag_recon_inter)(unsigned char *_dst,int _dst_ystride,
+   const unsigned char *_src,int _src_ystride,const ogg_int16_t *_residue);
+  void (*frag_recon_inter2)(unsigned char *_dst,int _dst_ystride,
+   const unsigned char *_src1,int _src1_ystride,const unsigned char *_src2,
+   int _src2_ystride,const ogg_int16_t *_residue);
+  void (*state_frag_copy)(const oc_theora_state *_state,
+   const int *_fragis,int _nfragis,int _dst_frame,int _src_frame,int _pli);
+  void (*state_frag_recon)(oc_theora_state *_state,const oc_fragment *_frag,
+   int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,int _ncoefs,
+   ogg_uint16_t _dc_iquant,const ogg_uint16_t _ac_iquant[64]);
+  void (*state_loop_filter_frag_rows)(oc_theora_state *_state,int *_bv,
+   int _refi,int _pli,int _fragy0,int _fragy_end);
+  void (*restore_fpu)(void);
+}oc_base_opt_vtable;
+
+
+
+/*Common state information between the encoder and decoder.*/
+struct oc_theora_state{
+  /*The stream information.*/
+  th_info               info;
+  /*Table for shared accelerated functions.*/
+  oc_base_opt_vtable    opt_vtable;
+  /*CPU flags to detect the presence of extended instruction sets.*/
+  ogg_uint32_t          cpu_flags;
+  /*The fragment plane descriptions.*/
+  oc_fragment_plane     fplanes[3];
+  /*The total number of fragments in a single frame.*/
+  int                   nfrags;
+  /*The list of fragments, indexed in image order.*/
+  oc_fragment          *frags;
+  /*The total number of super blocks in a single frame.*/
+  int                   nsbs;
+  /*The list of super blocks, indexed in image order.*/
+  oc_sb                *sbs;
+  /*The number of macro blocks in the X direction.*/
+  int                   nhmbs;
+  /*The number of macro blocks in the Y direction.*/
+  int                   nvmbs;
+  /*The total number of macro blocks.*/
+  int                   nmbs;
+  /*The list of macro blocks, indexed in super block order.
+    That is, the macro block corresponding to the macro block mbi in (luma
+     plane) super block sbi is (sbi<<2|mbi).*/
+  oc_mb                *mbs;
+  /*The list of coded fragments, in coded order.*/
+  int                  *coded_fragis;
+  /*The number of coded fragments in each plane.*/
+  int                   ncoded_fragis[3];
+  /*The list of uncoded fragments.
+    This just past the end of the list, which is in reverse order, and
+     uses the same block of allocated storage as the coded_fragis list.*/
+  int                  *uncoded_fragis;
+  /*The number of uncoded fragments in each plane.*/
+  int                   nuncoded_fragis[3];
+  /*The list of coded macro blocks in the Y plane, in coded order.*/
+  int                  *coded_mbis;
+  /*The number of coded macro blocks in the Y plane.*/
+  int                   ncoded_mbis;
+  /*A copy of the image data used to fill the input pointers in each fragment.
+    If the data pointers or strides change, these input pointers must be
+     re-populated.*/
+  th_ycbcr_buffer       input;
+  /*The number of unique border patterns.*/
+  int                   nborders;
+  /*The storage for the border info for all border fragments.
+    This data is pointed to from the appropriate fragments.*/
+  oc_border_info        borders[16];
+  /*The index of the buffers being used for each OC_FRAME_* reference frame.*/
+  int                   ref_frame_idx[3];
+  /*The actual buffers used for the previously decoded frames.*/
+  th_ycbcr_buffer       ref_frame_bufs[3];
+  /*The storage for the reference frame buffers.*/
+  unsigned char        *ref_frame_data;
+  /*The frame number of the last keyframe.*/
+  ogg_int64_t           keyframe_num;
+  /*The frame number of the current frame.*/
+  ogg_int64_t           curframe_num;
+  /*The granpos of the current frame.*/
+  ogg_int64_t           granpos;
+  /*The type of the current frame.*/
+  int                   frame_type;
+  /*The quality indices of the current frame.*/
+  int                   qis[3];
+  /*The number of quality indices used in the current frame.*/
+  int                   nqis;
+  /*The dequantization tables.*/
+  oc_quant_table       *dequant_tables[2][3];
+  oc_quant_tables       dequant_table_data[2][3];
+  /*Loop filter strength parameters.*/
+  unsigned char         loop_filter_limits[64];
+};
+
+
+
+/*The function type used to fill in the chroma plane motion vectors for a
+   macro block when 4 different motion vectors are specified in the luma
+   plane.
+  _cbmvs: The chroma block-level motion vectors to fill in.
+  _lmbmv: The luma macro-block level motion vector to fill in for use in
+           prediction.
+  _lbmvs: The luma block-level motion vectors.*/
+typedef void (*oc_set_chroma_mvs_func)(oc_mv _cbmvs[4],const oc_mv _lbmvs[4]);
+
+
+
+/*A map from the index in the zig zag scan to the coefficient number in a
+   block.
+  The extra 64 entries send out of bounds indexes to index 64.
+  This is used to safely ignore invalid zero runs when decoding
+   coefficients.*/
+extern const int OC_FZIG_ZAG[128];
+/*A map from the coefficient number in a block to its index in the zig zag
+   scan.*/
+extern const int OC_IZIG_ZAG[64];
+/*The predictor frame to use for each macro block mode.*/
+extern const int OC_FRAME_FOR_MODE[OC_NMODES];
+/*A map from physical macro block ordering to bitstream macro block
+   ordering within a super block.*/
+extern const int OC_MB_MAP[2][2];
+/*A list of the indices in the oc_mb.map array that can be valid for each of
+   the various chroma decimation types.*/
+extern const int OC_MB_MAP_IDXS[TH_PF_NFORMATS][12];
+/*The number of indices in the oc_mb.map array that can be valid for each of
+   the various chroma decimation types.*/
+extern const int OC_MB_MAP_NIDXS[TH_PF_NFORMATS];
+/*A table of functions used to fill in the Cb,Cr plane motion vectors for a
+   macro block when 4 different motion vectors are specified in the luma
+   plane.*/
+extern const oc_set_chroma_mvs_func OC_SET_CHROMA_MVS_TABLE[TH_PF_NFORMATS];
+
+
+
+int oc_ilog(unsigned _v);
+void **oc_malloc_2d(size_t _height,size_t _width,size_t _sz);
+void **oc_calloc_2d(size_t _height,size_t _width,size_t _sz);
+void oc_free_2d(void *_ptr);
+
+void oc_ycbcr_buffer_flip(th_ycbcr_buffer _dst,const th_ycbcr_buffer _src);
+
+int oc_dct_token_skip(int _token,int _extra_bits);
+
+int oc_frag_pred_dc(const oc_fragment *_frag,
+ const oc_fragment_plane *_fplane,int _x,int _y,int _pred_last[3]);
+
+int oc_state_init(oc_theora_state *_state,const th_info *_info);
+void oc_state_clear(oc_theora_state *_state);
+void oc_state_vtable_init_c(oc_theora_state *_state);
+void oc_state_borders_fill_rows(oc_theora_state *_state,int _refi,int _pli,
+ int _y0,int _yend);
+void oc_state_borders_fill_caps(oc_theora_state *_state,int _refi,int _pli);
+void oc_state_borders_fill(oc_theora_state *_state,int _refi);
+void oc_state_fill_buffer_ptrs(oc_theora_state *_state,int _buf_idx,
+ th_ycbcr_buffer _img);
+int oc_state_mbi_for_pos(oc_theora_state *_state,int _mbx,int _mby);
+int oc_state_get_mv_offsets(oc_theora_state *_state,int _offsets[2],
+ int _dx,int _dy,int _ystride,int _pli);
+
+int oc_state_loop_filter_init(oc_theora_state *_state,int *_bv);
+void oc_state_loop_filter(oc_theora_state *_state,int _frame);
+#if defined(OC_DUMP_IMAGES)
+int oc_state_dump_frame(const oc_theora_state *_state,int _frame,
+ const char *_suf);
+#endif
+
+/*Shared accelerated functions.*/
+void oc_frag_recon_intra(const oc_theora_state *_state,
+ unsigned char *_dst,int _dst_ystride,const ogg_int16_t *_residue);
+void oc_frag_recon_inter(const oc_theora_state *_state,
+ unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src,int _src_ystride,const ogg_int16_t *_residue);
+void oc_frag_recon_inter2(const oc_theora_state *_state,
+ unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src1,int _src1_ystride,const unsigned char *_src2,
+ int _src2_ystride,const ogg_int16_t *_residue);
+void oc_state_frag_copy(const oc_theora_state *_state,const int *_fragis,
+ int _nfragis,int _dst_frame,int _src_frame,int _pli);
+void oc_state_frag_recon(oc_theora_state *_state,const oc_fragment *_frag,
+ int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,int _ncoefs,
+ ogg_uint16_t _dc_iquant,const ogg_uint16_t _ac_iquant[64]);
+void oc_state_loop_filter_frag_rows(oc_theora_state *_state,int *_bv,
+ int _refi,int _pli,int _fragy0,int _fragy_end);
+void oc_restore_fpu(const oc_theora_state *_state);
+
+/*Default pure-C implementations.*/
+void oc_frag_recon_intra_c(unsigned char *_dst,int _dst_ystride,
+ const ogg_int16_t *_residue);
+void oc_frag_recon_inter_c(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src,int _src_ystride,const ogg_int16_t *_residue);
+void oc_frag_recon_inter2_c(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src1,int _src1_ystride,const unsigned char *_src2,
+ int _src2_ystride,const ogg_int16_t *_residue);
+void oc_state_frag_copy_c(const oc_theora_state *_state,const int *_fragis,
+ int _nfragis,int _dst_frame,int _src_frame,int _pli);
+void oc_state_frag_recon_c(oc_theora_state *_state,const oc_fragment *_frag,
+ int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,int _ncoefs,
+ ogg_uint16_t _dc_iquant,const ogg_uint16_t _ac_iquant[64]);
+void oc_state_loop_filter_frag_rows_c(oc_theora_state *_state,int *_bv,
+ int _refi,int _pli,int _fragy0,int _fragy_end);
+void oc_restore_fpu_c(void);
+
+/*We need a way to call a few enocder functions without introducing a link-time
+   dependency into the decoder, while still allowing the old alpha API which
+   does not distinguish between encoder and decoder objects to be used.
+  We do this by placing a function table at the start of the encoder object
+   which can dispatch into the encoder library.*/
+/*We don't ship theora.h, so we don't want to include it to force theora_state
+   to be defined; thus it is replaced by void * below.*/
+typedef void (*oc_state_clear_func)(void *_th);
+typedef int (*oc_state_control_func)(void *th,int req,
+ void *buf,size_t buf_sz);
+typedef ogg_int64_t (*oc_state_granule_frame_func)(void *_th,
+ ogg_int64_t _granulepos);
+typedef double (*oc_state_granule_time_func)(void *_th,
+ ogg_int64_t _granulepos);
+
+typedef struct oc_state_dispatch_vtbl oc_state_dispatch_vtbl;
+
+struct oc_state_dispatch_vtbl{
+  oc_state_clear_func         clear;
+  oc_state_control_func       control;
+  oc_state_granule_frame_func granule_frame;
+  oc_state_granule_time_func  granule_time;
+};
+
+#endif

Added: trunk/theora-exp/lib/mcenc.c
===================================================================
--- trunk/theora-exp/lib/mcenc.c	                        (rev 0)
+++ trunk/theora-exp/lib/mcenc.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,785 @@
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include "encint.h"
+
+struct oc_mcenc_ctx{
+  oc_enc_ctx        *enc;
+  oc_enc_pipe_stage  pipe;
+  int                candidates[12][2];
+  int                setb0;
+  int                ncandidates;
+  ogg_int32_t        mvapw1[2];
+  ogg_int32_t        mvapw2[2];
+};
+
+/*The maximum Y plane SAD value for accepting the median predictor.*/
+#define OC_YSAD_THRESH1            (256)
+/*The amount to right shift the minimum error by when inflating it for
+   computing the second maximum Y plane SAD threshold.*/
+#define OC_YSAD_THRESH2_SCALE_BITS (3)
+/*The amount to add to the second maximum Y plane threshold when inflating
+   it.*/
+#define OC_YSAD_THRESH2_OFFSET     (128)
+
+/*The vector offsets in the X direction for each search site in the square
+   pattern.*/
+static const int OC_SQUARE_DX[9]={-1,0,1,-1,0,1,-1,0,1};
+/*The vector offsets in the Y direction for each search site in the square
+   pattern.*/
+static const int OC_SQUARE_DY[9]={-1,-1,-1,0,0,0,1,1,1};
+/*The number of sites to search for each boundary condition in the square
+   pattern.
+  Bit flags for the boundary conditions are as follows:
+  1: -16==dx
+  2:      dx==15(.5)
+  4: -16==dy
+  8:      dy==15(.5)*/
+static const int OC_SQUARE_NSITES[11]={8,5,5,0,5,3,3,0,5,3,3};
+/*The list of sites to search for each boundary condition in the square
+   pattern.*/
+static const int OC_SQUARE_SITES[11][8]={
+  /* -15.5<dx<31,       -15.5<dy<15(.5)*/
+  {0,1,2,3,5,6,7,8},
+  /*-15.5==dx,          -15.5<dy<15(.5)*/
+  {1,2,5,7,8},
+  /*     dx==15(.5),    -15.5<dy<15(.5)*/
+  {0,1,3,6,7},
+  /*-15.5==dx==15(.5),  -15.5<dy<15(.5)*/
+  {-1},
+  /* -15.5<dx<15(.5),  -15.5==dy*/
+  {3,5,6,7,8},
+  /*-15.5==dx,         -15.5==dy*/
+  {5,7,8},
+  /*     dx==15(.5),   -15.5==dy*/
+  {3,6,7},
+  /*-15.5==dx==15(.5), -15.5==dy*/
+  {-1},
+  /*-15.5dx<15(.5),           dy==15(.5)*/
+  {0,1,2,3,5},
+  /*-15.5==dx,                dy==15(.5)*/
+  {1,2,5},
+  /*       dx==15(.5),        dy==15(.5)*/
+  {0,1,3}
+};
+
+
+
+static void oc_mcenc_find_candidates(oc_mcenc_ctx *_mcenc,int _mbi,
+ int _which_frame){
+  oc_mb_enc_info *nemb;
+  oc_mb_enc_info *emb;
+  ogg_int32_t     mvapw1;
+  ogg_int32_t     mvapw2;
+  int             a[3][2];
+  int             ncandidates;
+  int             i;
+  emb=_mcenc->enc->mbinfo+_mbi;
+  if(emb->ncneighbors>0){
+    /*Fill in the first part of set A: the last motion vectors used and the
+       vectors from adjacent blocks.*/
+    /*Skip a position to store the median predictor in.*/
+    ncandidates=1;
+    for(i=0;i<emb->ncneighbors;i++){
+      nemb=_mcenc->enc->mbinfo+emb->cneighbors[i];
+      _mcenc->candidates[ncandidates][0]=nemb->mvs[0][_which_frame][0];
+      _mcenc->candidates[ncandidates][1]=nemb->mvs[0][_which_frame][1];
+      ncandidates++;
+    }
+    /*Add a few additional vectors to set A: the vector used in the previous
+       frame and the (0,0) vector.*/
+    _mcenc->candidates[ncandidates][0]=emb->mvs[1][_which_frame][0];
+    _mcenc->candidates[ncandidates][1]=emb->mvs[1][_which_frame][1];
+    ncandidates++;
+    _mcenc->candidates[ncandidates][0]=0;
+    _mcenc->candidates[ncandidates][1]=0;
+    ncandidates++;
+    /*Use the first three vectors of set A to find our best predictor: their
+       median.*/
+    memcpy(a,_mcenc->candidates+1,sizeof(a[0])*3);
+    OC_SORT2I(a[0][0],a[1][0]);
+    OC_SORT2I(a[0][1],a[1][1]);
+    OC_SORT2I(a[1][0],a[2][0]);
+    OC_SORT2I(a[1][1],a[2][1]);
+    OC_SORT2I(a[0][0],a[1][0]);
+    OC_SORT2I(a[0][1],a[1][1]);
+    _mcenc->candidates[0][0]=a[1][0];
+    _mcenc->candidates[0][1]=a[1][1];
+  }
+  /*The upper-left most macro block has no neighbors at all
+    We just use 0,0 as the median predictor and its previous motion vector
+     for set A.*/
+  else{
+    _mcenc->candidates[0][0]=0;
+    _mcenc->candidates[0][1]=0;
+    _mcenc->candidates[1][0]=emb->mvs[1][_which_frame][0];
+    _mcenc->candidates[1][1]=emb->mvs[1][_which_frame][1];
+    ncandidates=2;
+  }
+  /*Fill in set B: accelerated predictors for this and adjacent macro
+     blocks.*/
+  _mcenc->setb0=ncandidates;
+  mvapw1=_mcenc->mvapw1[_which_frame];
+  mvapw2=_mcenc->mvapw2[_which_frame];
+  /*The first time through the loop use the current macro block.*/
+  nemb=emb;
+  for(i=0;;i++){
+    _mcenc->candidates[ncandidates][0]=
+     OC_DIV_ROUND_POW2(nemb->mvs[1][_which_frame][0]*mvapw1-
+     nemb->mvs[2][_which_frame][0]*mvapw2,16,0x8000);
+    _mcenc->candidates[ncandidates][1]=
+     OC_DIV_ROUND_POW2(nemb->mvs[1][_which_frame][1]*mvapw1-
+     nemb->mvs[2][_which_frame][1]*mvapw2,16,0x8000);
+    _mcenc->candidates[ncandidates][0]=OC_CLAMPI(-31,
+     _mcenc->candidates[ncandidates][0],31);
+    _mcenc->candidates[ncandidates][1]=OC_CLAMPI(-31,
+     _mcenc->candidates[ncandidates][1],31);
+    ncandidates++;
+    if(i>=emb->npneighbors)break;
+    nemb=_mcenc->enc->mbinfo+emb->pneighbors[i];
+  }
+  /*Truncate to full-pel positions.*/
+  for(i=0;i<ncandidates;i++){
+    _mcenc->candidates[i][0]=OC_DIV2(_mcenc->candidates[i][0]);
+    _mcenc->candidates[i][1]=OC_DIV2(_mcenc->candidates[i][1]);
+  }
+  _mcenc->ncandidates=ncandidates;
+}
+
+static int oc_sad16_halfpel(const oc_fragment *_frags,const int _fragis[4],
+ int _cur_ystride,int _ref_ystride,int _mvoffset0,int _mvoffset1,
+ int  _ref_framei){
+  int err;
+  int i;
+  err=0;
+  for(i=0;i<4;i++){
+    const oc_fragment *frag;
+    frag=_frags+_fragis[i];
+    if(frag->border==NULL){
+      if(!frag->invalid){
+        err+=oc_sad8_halfpel(frag->buffer[OC_FRAME_IO],_cur_ystride,
+         frag->buffer[_ref_framei]+_mvoffset0,
+         frag->buffer[_ref_framei]+_mvoffset1,_ref_ystride);
+      }
+    }
+    else{
+      err+=oc_sad8_halfpel_border(frag->buffer[OC_FRAME_IO],_cur_ystride,
+       frag->buffer[_ref_framei]+_mvoffset0,
+       frag->buffer[_ref_framei]+_mvoffset1,_ref_ystride,frag->border->mask);
+    }
+  }
+  return err;
+}
+
+static int oc_mcenc_sad_check_mbcandidate_fullpel(oc_mcenc_ctx *_mcenc,
+ int _mbi,int _dx,int _dy,int _pli,int _ref_framei,int _block_err[4]){
+  const oc_fragment_plane *fplane;
+  const oc_fragment       *frags;
+  int                     *mb_map;
+  int                      cur_ystride;
+  int                      ref_ystride;
+  int                      mvoffset;
+  int                      err;
+  int                      bi;
+  /*TODO: customize error function for speed/(quality+size) tradeoff.*/
+  fplane=_mcenc->enc->state.fplanes+_pli;
+  cur_ystride=_mcenc->enc->state.input[_pli].ystride;
+  ref_ystride=_mcenc->enc->state.ref_frame_bufs[_ref_framei][_pli].ystride;
+  frags=_mcenc->enc->state.frags;
+  mb_map=_mcenc->enc->state.mbs[_mbi].map[_pli];
+  mvoffset=_dx+_dy*ref_ystride;
+  err=0;
+  for(bi=0;bi<4;bi++)if(mb_map[bi]>=0){
+    const oc_fragment *frag;
+    frag=frags+mb_map[bi];
+    if(frag->border==NULL){
+      if(!frag->invalid){
+        _block_err[bi]=oc_sad8_fullpel(frag->buffer[OC_FRAME_IO],cur_ystride,
+         frag->buffer[_ref_framei]+mvoffset,ref_ystride);
+      }
+    }
+    else{
+      _block_err[bi]=oc_sad8_fullpel_border(frag->buffer[OC_FRAME_IO],
+       cur_ystride,frag->buffer[_ref_framei]+mvoffset,ref_ystride,
+       frag->border->mask);
+    }
+    err+=_block_err[bi];
+
+  }
+  return err;
+}
+
+static int oc_mcenc_ysad_check_mbcandidate_fullpel(oc_mcenc_ctx *_mcenc,
+ int _mbi,int _dx,int _dy,int _ref_framei,int _block_err[4]){
+  return oc_mcenc_sad_check_mbcandidate_fullpel(_mcenc,_mbi,_dx,_dy,0,
+   _ref_framei,_block_err);
+}
+
+static int oc_mcenc_ysad_halfpel_mbrefine(oc_mcenc_ctx *_mcenc,
+ int _mbi,int _vec[2],int _best_err,int _ref_framei){
+  int                      offset_y[9];
+  const oc_fragment_plane *fplane;
+  const oc_fragment       *frags;
+  int                     *mb_map;
+  int                      cur_ystride;
+  int                      ref_ystride;
+  int                      mvoffset_base;
+  int                      best_site;
+  int                      sitei;
+  int                      err;
+  fplane=_mcenc->enc->state.fplanes+0;
+  cur_ystride=_mcenc->enc->state.input[0].ystride;
+  ref_ystride=_mcenc->enc->state.ref_frame_bufs[_ref_framei][0].ystride;
+  frags=_mcenc->enc->state.frags;
+  mb_map=_mcenc->enc->state.mbs[_mbi].map[0];
+  mvoffset_base=_vec[0]+_vec[1]*ref_ystride;
+  offset_y[0]=offset_y[1]=offset_y[2]=-ref_ystride;
+  offset_y[3]=offset_y[5]=0;
+  offset_y[6]=offset_y[7]=offset_y[8]=ref_ystride;
+  err=_best_err;
+  best_site=4;
+  for(sitei=0;sitei<8;sitei++){
+    int site;
+    int xmask;
+    int ymask;
+    int dx;
+    int dy;
+    int mvoffset0;
+    int mvoffset1;
+    site=OC_SQUARE_SITES[0][sitei];
+    dx=OC_SQUARE_DX[site];
+    dy=OC_SQUARE_DY[site];
+    /*The following code SHOULD be equivalent to
+      oc_state_get_mv_offsets(&_mcenc->enc.state,&mvoffset0,&mvoffset1,
+       (_vec[0]<<1)+dx,(_vec[1]<<1)+dy,ref_ystride,0);
+      However, it should also be much faster, as it involves no multiplies and
+       doesn't have to handle chroma vectors.*/
+    xmask=-((((_vec[0]<<1)+dx)^dx)<0);
+    ymask=-((((_vec[1]<<1)+dy)^dy)<0);
+    mvoffset0=mvoffset_base+(dx&xmask)+(offset_y[site]&ymask);
+    mvoffset1=mvoffset_base+(dx&~xmask)+(offset_y[site]&~ymask);
+    err=oc_sad16_halfpel(frags,mb_map,cur_ystride,ref_ystride,mvoffset0,
+     mvoffset1,_ref_framei);
+    if(err<_best_err){
+      _best_err=err;
+      best_site=site;
+    }
+  }
+  _vec[0]=(_vec[0]<<1)+OC_SQUARE_DX[best_site];
+  _vec[1]=(_vec[1]<<1)+OC_SQUARE_DY[best_site];
+  return _best_err;
+}
+
+static int oc_mcenc_ysad_halfpel_brefine(oc_mcenc_ctx *_mcenc,
+ int _mbi,int _bi,int _vec[2],int _best_err,int _ref_framei){
+  int                      offset_y[9];
+  const oc_fragment_plane *fplane;
+  const oc_fragment       *frag;
+  int                      cur_ystride;
+  int                      ref_ystride;
+  int                      mvoffset_base;
+  int                      best_site;
+  int                      sitei;
+  int                      err;
+  fplane=_mcenc->enc->state.fplanes+0;
+  cur_ystride=_mcenc->enc->state.input[0].ystride;
+  ref_ystride=_mcenc->enc->state.ref_frame_bufs[_ref_framei][0].ystride;
+  frag=_mcenc->enc->state.frags+_mcenc->enc->state.mbs[_mbi].map[0][_bi];
+  if(frag->invalid)return _best_err;
+  mvoffset_base=_vec[0]+_vec[1]*ref_ystride;
+  offset_y[0]=offset_y[1]=offset_y[2]=-ref_ystride;
+  offset_y[3]=offset_y[5]=0;
+  offset_y[6]=offset_y[7]=offset_y[8]=ref_ystride;
+  err=_best_err;
+  best_site=4;
+  for(sitei=0;sitei<8;sitei++){
+    int site;
+    int xmask;
+    int ymask;
+    int dx;
+    int dy;
+    int mvoffset0;
+    int mvoffset1;
+    site=OC_SQUARE_SITES[0][sitei];
+    dx=OC_SQUARE_DX[site];
+    dy=OC_SQUARE_DY[site];
+    /*The following code SHOULD be equivalent to
+      oc_state_get_mv_offsets(&_mcenc->enc.state,&mvoffset0,&mvoffset1,
+       (_vec[0]<<1)+dx,(_vec[1]<<1)+dy,ref_ystride,0);
+      However, it should also be much faster, as it involves no multiplies and
+       doesn't have to handle chroma vectors.*/
+    xmask=-((((_vec[0]<<1)+dx)^dx)<0);
+    ymask=-((((_vec[1]<<1)+dy)^dy)<0);
+    mvoffset0=mvoffset_base+(dx&xmask)+(offset_y[site]&ymask);
+    mvoffset1=mvoffset_base+(dx&~xmask)+(offset_y[site]&~ymask);
+    if(frag->border==NULL){
+      err=oc_sad8_halfpel(frag->buffer[OC_FRAME_IO],cur_ystride,
+       frag->buffer[_ref_framei]+mvoffset0,
+       frag->buffer[_ref_framei]+mvoffset1,ref_ystride);
+    }
+    else{
+      err=oc_sad8_halfpel_border(frag->buffer[OC_FRAME_IO],cur_ystride,
+       frag->buffer[_ref_framei]+mvoffset0,
+       frag->buffer[_ref_framei]+mvoffset1,ref_ystride,frag->border->mask);
+    }
+    if(err<_best_err){
+      _best_err=err;
+      best_site=site;
+    }
+  }
+  _vec[0]=(_vec[0]<<1)+OC_SQUARE_DX[best_site];
+  _vec[1]=(_vec[1]<<1)+OC_SQUARE_DY[best_site];
+  return _best_err;
+}
+
+/*Perform a motion vector search for this macro block against a single
+   reference frame.
+  As a bonus, individual block motion vectors are computed as well, as much of
+   the work can be shared.
+  The actual motion vector is stored in the appropriate place in the
+   oc_mb_enc_info structure.
+  _mcenc:    The motion compensation context.
+  _mbi:      The macro block index.
+  _frame:    The frame to search, either OC_FRAME_PREV or OC_FRAME_GOLD.
+  _bmvs:     Returns the individual block motion vectors.
+  _error:    Returns the prediction error for the macro block motion vector.
+  _error4mv: Returns sum of the prediction error for the individual block
+              motion vectors.*/
+static void oc_mcenc_search(oc_mcenc_ctx *_mcenc,int _mbi,int _frame,
+ oc_mv _bmvs[4],int *_error,int *_error4mv){
+  oc_mb_enc_info *embs;
+  oc_mb_enc_info *emb;
+  oc_mb          *mb;
+  ogg_int32_t     hit_cache[31];
+  ogg_int32_t     hitbit;
+  int             block_err[4];
+  int             best_block_err[4];
+  int             best_block_vec[4][2];
+  int             best_vec[2];
+  int             best_err;
+  int             candx;
+  int             candy;
+  int             ref_framei;
+  int             bi;
+  /*TODO: customize error function for speed/(quality+size) tradeoff.*/
+  ref_framei=_mcenc->enc->state.ref_frame_idx[_frame];
+  mb=_mcenc->enc->state.mbs+_mbi;
+  embs=_mcenc->enc->mbinfo;
+  emb=embs+_mbi;
+  /*Find some candidate motion vectors.*/
+  oc_mcenc_find_candidates(_mcenc,_mbi,_frame);
+  /*Clear the cache of locations we've examined.*/
+  memset(hit_cache,0,sizeof(hit_cache));
+  /*Start with the median predictor.*/
+  candx=_mcenc->candidates[0][0];
+  candy=_mcenc->candidates[0][1];
+  hit_cache[candy+15]|=(ogg_int32_t)1<<candx+15;
+  best_err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,candx,candy,
+   ref_framei,block_err);
+  best_vec[0]=candx;
+  best_vec[1]=candy;
+  for(bi=0;bi<4;bi++){
+    best_block_err[bi]=block_err[bi];
+    best_block_vec[bi][0]=candx;
+    best_block_vec[bi][1]=candy;
+  }
+  /*If this predictor fails, move on to set A.*/
+  if(best_err>OC_YSAD_THRESH1){
+    int err;
+    int ci;
+    int ncs;
+    int t2;
+    /*Compute the early termination threshold for set A.*/
+    t2=emb->aerror;
+    ncs=OC_MINI(3,emb->ncneighbors);
+    for(ci=0;ci<ncs;ci++)t2=OC_MAXI(t2,embs[emb->cneighbors[ci]].aerror);
+    t2=t2+(t2>>OC_YSAD_THRESH2_SCALE_BITS)+OC_YSAD_THRESH2_OFFSET;
+    /*Examine the candidates in set A.*/
+    for(ci=1;ci<_mcenc->setb0;ci++){
+      candx=_mcenc->candidates[ci][0];
+      candy=_mcenc->candidates[ci][1];
+      /*If we've already examined this vector, then we would be using it if it
+         was better than what we are using.*/
+      hitbit=(ogg_int32_t)1<<candx+15;
+      if(hit_cache[candy+15]&hitbit)continue;
+      hit_cache[candy+15]|=hitbit;
+      err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,candx,candy,
+       ref_framei,block_err);
+      if(err<best_err){
+        best_err=err;
+        best_vec[0]=candx;
+        best_vec[1]=candy;
+      }
+      for(bi=0;bi<4;bi++)if(block_err[bi]<best_block_err[bi]){
+        best_block_err[bi]=block_err[bi];
+        best_block_vec[bi][0]=candx;
+        best_block_vec[bi][1]=candy;
+      }
+    }
+    if(best_err>t2){
+      /*Examine the candidates in set B.*/
+      for(;ci<_mcenc->ncandidates;ci++){
+        candx=_mcenc->candidates[ci][0];
+        candy=_mcenc->candidates[ci][1];
+        hitbit=(ogg_int32_t)1<<candx+15;
+        if(hit_cache[candy+15]&hitbit)continue;
+        hit_cache[candy+15]|=hitbit;
+        err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,candx,candy,
+         ref_framei,block_err);
+        if(err<best_err){
+          best_err=err;
+          best_vec[0]=candx;
+          best_vec[1]=candy;
+        }
+        for(bi=0;bi<4;bi++)if(block_err[bi]<best_block_err[bi]){
+          best_block_err[bi]=block_err[bi];
+          best_block_vec[bi][0]=candx;
+          best_block_vec[bi][1]=candy;
+        }
+      }
+      /*Use the same threshold for set B as in set A.*/
+      if(best_err>t2){
+        int best_site;
+        int nsites;
+        int sitei;
+        int site;
+        int b;
+        /*Square pattern search.*/
+        for(;;){
+          best_site=4;
+          /*Compose the bit flags for boundary conditions.*/
+          b=OC_DIV16(-best_vec[0]+1)|OC_DIV16(best_vec[0]+1)<<1|
+           OC_DIV16(-best_vec[1]+1)<<2|OC_DIV16(best_vec[1]+1)<<3;
+          nsites=OC_SQUARE_NSITES[b];
+          for(sitei=0;sitei<nsites;sitei++){
+            site=OC_SQUARE_SITES[b][sitei];
+            candx=best_vec[0]+OC_SQUARE_DX[site];
+            candy=best_vec[1]+OC_SQUARE_DY[site];
+            hitbit=(ogg_int32_t)1<<candx+15;
+            if(hit_cache[candy+15]&hitbit)continue;
+            hit_cache[candy+15]|=hitbit;
+            err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,
+             candx,candy,ref_framei,block_err);
+            if(err<best_err){
+              best_err=err;
+              best_site=site;
+            }
+            for(bi=0;bi<4;bi++)if(block_err[bi]<best_block_err[bi]){
+              best_block_err[bi]=block_err[bi];
+              best_block_vec[bi][0]=candx;
+              best_block_vec[bi][1]=candy;
+            }
+          }
+          if(best_site==4)break;
+          best_vec[0]+=OC_SQUARE_DX[best_site];
+          best_vec[1]+=OC_SQUARE_DY[best_site];
+        }
+        /*Final 4-MV search.*/
+        /*Simply use 1/4 of the macro block set A and B threshold as the
+           individual block threshold.*/
+        t2>>=2;
+        for(bi=0;bi<4;bi++)if(best_block_err[bi]>t2){
+          /*Square pattern search.
+            We do this in a slightly interesting manner.
+            We continue to check the SAD of all four blocks in the macro
+             block.
+            This gives us two things:
+             1) We can continue to use the hit_cache to avoid duplicate
+                 checks.
+                Otherwise we could continue to read it, but not write to it
+                 without saving and restoring it for each block.
+                Note that we could still eliminate a large number of
+                 duplicate checks by taking into account the site we came
+                 from when choosing the site list.
+                We can still do that to avoid extra hit_cache queries, and it
+                 might even be a speed win.
+             2) It gives us a slightly better chance of escaping local minima.
+                We would not be here if we weren't doing a fairly bad job in
+                 finding a good vector, and checking these vectors can save us
+                 from 100 to several thousand points off our SAD 1 in 15
+                 times.
+            TODO: Is this a good idea?
+            Who knows.
+            It needs more testing.*/
+          for(;;){
+            int bestx;
+            int besty;
+            int bj;
+            bestx=best_block_vec[bi][0];
+            besty=best_block_vec[bi][1];
+            /*Compose the bit flags for boundary conditions.*/
+            b=OC_DIV16(-bestx+1)|OC_DIV16(bestx+1)<<1|
+             OC_DIV16(-besty+1)<<2|OC_DIV16(besty+1)<<3;
+            nsites=OC_SQUARE_NSITES[b];
+            for(sitei=0;sitei<nsites;sitei++){
+              site=OC_SQUARE_SITES[b][sitei];
+              candx=bestx+OC_SQUARE_DX[site];
+              candy=besty+OC_SQUARE_DY[site];
+              hitbit=(ogg_int32_t)1<<candx+15;
+              if(hit_cache[candy+15]&hitbit)continue;
+              hit_cache[candy+15]|=hitbit;
+              err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,
+               candx,candy,ref_framei,block_err);
+              if(err<best_err){
+                best_err=err;
+                best_vec[0]=candx;
+                best_vec[1]=candy;
+              }
+              for(bj=0;bj<4;bj++)if(block_err[bj]<best_block_err[bj]){
+                best_block_err[bj]=block_err[bj];
+                best_block_vec[bj][0]=candx;
+                best_block_vec[bj][1]=candy;
+              }
+            }
+            if(best_block_vec[bi][0]==bestx&&best_block_vec[bi][1]==besty){
+              break;
+            }
+          }
+        }
+      }
+    }
+  }
+  *_error=oc_mcenc_ysad_halfpel_mbrefine(_mcenc,_mbi,best_vec,best_err,
+   ref_framei);
+  emb->mvs[0][_frame][0]=(signed char)best_vec[0];
+  emb->mvs[0][_frame][1]=(signed char)best_vec[1];
+  *_error4mv=0;
+  for(bi=0;bi<4;bi++){
+    (*_error4mv)+=oc_mcenc_ysad_halfpel_brefine(_mcenc,_mbi,bi,
+     best_block_vec[bi],best_block_err[bi],ref_framei);
+    _bmvs[bi][0]=(signed char)best_block_vec[bi][0];
+    _bmvs[bi][1]=(signed char)best_block_vec[bi][1];
+  }
+}
+
+/*Perform a motion vector search for this macro block against a single
+   reference frame.
+  The actual motion vector is stored in the appropriate place in the
+   oc_mb_enc_info structure.
+  This is like the above oc_mcenc_search() routine, except that block-level
+   motion vectors are not computed.
+  _mcenc:    The motion compensation context.
+  _mbi:      The macro block index.
+  _frame:    The frame to search, either OC_FRAME_PREV or OC_FRAME_GOLD.
+  Returns: The prediction error for the macro block motion vector.*/
+int oc_mcenc_search_1mv(oc_mcenc_ctx *_mcenc,int _mbi,int _frame){
+  oc_mb_enc_info *embs;
+  oc_mb_enc_info *emb;
+  oc_mb          *mb;
+  ogg_int32_t     hit_cache[31];
+  ogg_int32_t     hitbit;
+  int             block_err[4];
+  int             best_vec[2];
+  int             best_err;
+  int             candx;
+  int             candy;
+  int             ref_framei;
+  /*TODO: customize error function for speed/(quality+size) tradeoff.*/
+  ref_framei=_mcenc->enc->state.ref_frame_idx[_frame];
+  mb=_mcenc->enc->state.mbs+_mbi;
+  embs=_mcenc->enc->mbinfo;
+  emb=embs+_mbi;
+  /*Find some candidate motion vectors.*/
+  oc_mcenc_find_candidates(_mcenc,_mbi,_frame);
+  /*Clear the cache of locations we've examined.*/
+  memset(hit_cache,0,sizeof(hit_cache));
+  /*Start with the median predictor.*/
+  candx=_mcenc->candidates[0][0];
+  candy=_mcenc->candidates[0][1];
+  hit_cache[candy+15]|=(ogg_int32_t)1<<candx+15;
+  best_err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,candx,candy,
+   ref_framei,block_err);
+  best_vec[0]=candx;
+  best_vec[1]=candy;
+  /*If this predictor fails, move on to set A.*/
+  if(best_err>OC_YSAD_THRESH1){
+    int err;
+    int ci;
+    int ncs;
+    int t2;
+    /*Compute the early termination threshold for set A.*/
+    t2=emb->aerror;
+    ncs=OC_MINI(3,emb->ncneighbors);
+    for(ci=0;ci<ncs;ci++)t2=OC_MAXI(t2,embs[emb->cneighbors[ci]].aerror);
+    t2=t2+(t2>>OC_YSAD_THRESH2_SCALE_BITS)+OC_YSAD_THRESH2_OFFSET;
+    /*Examine the candidates in set A.*/
+    for(ci=1;ci<_mcenc->setb0;ci++){
+      candx=_mcenc->candidates[ci][0];
+      candy=_mcenc->candidates[ci][1];
+      /*If we've already examined this vector, then we would be using it if it
+         was better than what we are using.*/
+      hitbit=(ogg_int32_t)1<<candx+15;
+      if(hit_cache[candy+15]&hitbit)continue;
+      hit_cache[candy+15]|=hitbit;
+      err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,candx,candy,
+       ref_framei,block_err);
+      if(err<best_err){
+        best_err=err;
+        best_vec[0]=candx;
+        best_vec[1]=candy;
+      }
+    }
+    if(best_err>t2){
+      /*Examine the candidates in set B.*/
+      for(;ci<_mcenc->ncandidates;ci++){
+        candx=_mcenc->candidates[ci][0];
+        candy=_mcenc->candidates[ci][1];
+        hitbit=(ogg_int32_t)1<<candx+15;
+        if(hit_cache[candy+15]&hitbit)continue;
+        hit_cache[candy+15]|=hitbit;
+        err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,candx,candy,
+         ref_framei,block_err);
+        if(err<best_err){
+          best_err=err;
+          best_vec[0]=candx;
+          best_vec[1]=candy;
+        }
+      }
+      /*Use the same threshold for set B as in set A.*/
+      if(best_err>t2){
+        int best_site;
+        int nsites;
+        int sitei;
+        int site;
+        int b;
+        /*Square pattern search.*/
+        for(;;){
+          best_site=4;
+          /*Compose the bit flags for boundary conditions.*/
+          b=OC_DIV16(-best_vec[0]+1)|OC_DIV16(best_vec[0]+1)<<1|
+           OC_DIV16(-best_vec[1]+1)<<2|OC_DIV16(best_vec[1]+1)<<3;
+          nsites=OC_SQUARE_NSITES[b];
+          for(sitei=0;sitei<nsites;sitei++){
+            site=OC_SQUARE_SITES[b][sitei];
+            candx=best_vec[0]+OC_SQUARE_DX[site];
+            candy=best_vec[1]+OC_SQUARE_DY[site];
+            hitbit=(ogg_int32_t)1<<candx+15;
+            if(hit_cache[candy+15]&hitbit)continue;
+            hit_cache[candy+15]|=hitbit;
+            err=oc_mcenc_ysad_check_mbcandidate_fullpel(_mcenc,_mbi,
+             candx,candy,ref_framei,block_err);
+            if(err<best_err){
+              best_err=err;
+              best_site=site;
+            }
+          }
+          if(best_site==4)break;
+          best_vec[0]+=OC_SQUARE_DX[best_site];
+          best_vec[1]+=OC_SQUARE_DY[best_site];
+        }
+      }
+    }
+  }
+  best_err=oc_mcenc_ysad_halfpel_mbrefine(_mcenc,_mbi,best_vec,best_err,
+   ref_framei);
+  emb->mvs[0][_frame][0]=(signed char)best_vec[0];
+  emb->mvs[0][_frame][1]=(signed char)best_vec[1];
+  return best_err;
+}
+
+/*A pipe to perform a motion vector search for each macro block.*/
+
+static int oc_mcenc_pipe_start(oc_enc_pipe_stage *_stage){
+  oc_enc_ctx  *enc;
+  ogg_int64_t  nframes;
+  int          pli;
+  int          mbi;
+  for(pli=0;pli<3;pli++)_stage->y_procd[pli]=0;
+  /*Move the motion vector predictors back a frame.
+    We could pipeline this, too, but it's probably not worth it.*/
+  enc=_stage->enc;
+  for(mbi=enc->state.fplanes[0].nsbs<<2;mbi-->0;){
+    oc_mb_enc_info *emb;
+    emb=enc->mbinfo+mbi;
+    memmove(emb->mvs+1,emb->mvs,2*sizeof(emb->mvs[0]));
+  }
+  /*Set up the accelerated MV weights for previous frame prediction.*/
+  enc->mcenc->mvapw1[OC_FRAME_PREV]=(ogg_int32_t)1<<17;
+  enc->mcenc->mvapw2[OC_FRAME_PREV]=(ogg_int32_t)1<<16;
+  /*Set up the accelerated MV weights for golden frame prediction.*/
+  nframes=enc->state.curframe_num-enc->state.keyframe_num;
+  enc->mcenc->mvapw1[OC_FRAME_GOLD]=(ogg_int32_t)(
+   nframes!=1?(nframes<<17)/(nframes-1):0);
+  enc->mcenc->mvapw2[OC_FRAME_GOLD]=(ogg_int32_t)(
+   nframes!=2?(nframes<<16)/(nframes-2):0);
+  return _stage->next!=NULL?(*_stage->next->pipe_start)(_stage->next):0;
+}
+
+static int oc_mcenc_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  oc_mcenc_ctx   *mcenc;
+  int             pli;
+  mcenc=_stage->enc->mcenc;
+  /*For now we ignore the chroma planes.*/
+  for(pli=1;pli<3;pli++)_stage->y_procd[pli]=_y_avail[pli];
+  /*Only do motion analysis if there is a previous frame; otherwise every
+     vector has already been initialized to (0,0).*/
+  if(mcenc->enc->state.ref_frame_idx[OC_FRAME_PREV]>=0){
+    int             y_avail;
+    y_avail=_y_avail[0];
+    /*Round to a super-block row, except for the last one, which may be
+       incomplete.*/
+    if(y_avail<(int)mcenc->enc->state.info.frame_height)y_avail&=~31;
+    while(_stage->y_procd[0]<y_avail){
+      oc_mb_enc_info *embs;
+      oc_mb          *mbs;
+      int             mbi;
+      int             mbi_end;
+      mbi=(_stage->y_procd[0]>>4)*mcenc->enc->state.fplanes[0].nhsbs;
+      mbi_end=mbi+mcenc->enc->state.fplanes[0].nhsbs<<1;
+      mbs=mcenc->enc->state.mbs;
+      embs=mcenc->enc->mbinfo;
+      for(;mbi<mbi_end;mbi++)if(mbs[mbi].mode!=OC_MODE_INVALID){
+        oc_mb_enc_info *emb;
+        emb=embs+mbi;
+        oc_mcenc_search(mcenc,mbi,OC_FRAME_PREV,emb->bmvs,&emb->aerror,
+         &emb->aerror4mv);
+      }
+      /*Chain to the next stage.*/
+      _stage->y_procd[0]=OC_MINI(_stage->y_procd[0]+32,y_avail);
+      if(_stage->next!=NULL){
+        int ret;
+        ret=_stage->next->pipe_proc(_stage->next,_stage->y_procd);
+        if(ret<0)return ret;
+      }
+    }
+  }
+  else{
+    _stage->y_procd[0]=_y_avail[0];
+    if(_stage->next!=NULL){
+      return _stage->next->pipe_proc(_stage->next,_stage->y_procd);
+    }
+  }
+  return 0;
+}
+
+static int oc_mcenc_pipe_end(oc_enc_pipe_stage *_stage){
+  return _stage->next!=NULL?(*_stage->next->pipe_end)(_stage->next):0;
+}
+
+/*Initialize the motion vector search stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_mcenc_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_mcenc_pipe_start;
+  _stage->pipe_proc=oc_mcenc_pipe_process;
+  _stage->pipe_end=oc_mcenc_pipe_end;
+}
+
+oc_mcenc_ctx *oc_mcenc_alloc(oc_enc_ctx *_enc){
+  oc_mcenc_ctx *mcenc;
+  mcenc=_ogg_calloc(1,sizeof(*mcenc));
+  mcenc->enc=_enc;
+  oc_mcenc_pipe_init(&mcenc->pipe,_enc);
+  return mcenc;
+}
+
+void oc_mcenc_free(oc_mcenc_ctx *_mcenc){
+  _ogg_free(_mcenc);
+}
+
+oc_enc_pipe_stage *oc_mcenc_prepend_to_pipe(oc_mcenc_ctx *_mcenc,
+ oc_enc_pipe_stage *_next){
+  _mcenc->pipe.next=_next;
+  return &_mcenc->pipe;
+}

Added: trunk/theora-exp/lib/ocintrin.h
===================================================================
--- trunk/theora-exp/lib/ocintrin.h	                        (rev 0)
+++ trunk/theora-exp/lib/ocintrin.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,71 @@
+/*Some common macros for potential platform-specific optimization.*/
+#include <math.h>
+#if !defined(_ocintrin_H)
+# define _ocintrin_H (1)
+
+/*Some specific platforms may have optimized intrinsic or inline assembly
+   versions of these functions which can substantially improve performance.
+  We define macros for them to allow easy incorporation of these non-ANSI
+   features.*/
+
+/*Branchless, but not correct for differences larger than INT_MAX.
+static int oc_mini(int _a,int _b){
+  int ambsign;
+  ambsign=_a-_b>>sizeof(int)*8-1;
+  return (_a&~ambsign)+(_b&ambsign);
+}*/
+
+
+#define OC_MAXI(_a,_b)      ((_a)<(_b)?(_b):(_a))
+#define OC_MINI(_a,_b)      ((_a)>(_b)?(_b):(_a))
+/*Clamps an integer into the given range.
+  If _a>_c, then the lower bound _a is respected over the upper bound _c (this
+   behavior is required to meet our documented API behavior).
+  _a: The lower bound.
+  _b: The value to clamp.
+  _c: The upper boud.*/
+#define OC_CLAMPI(_a,_b,_c) (OC_MAXI(_a,OC_MINI(_b,_c)))
+#define OC_CLAMP255(_x)     ((unsigned char)((((_x)<0)-1)&((_x)|-((_x)>255))))
+/*Divides an integer by a power of two, truncating towards 0.
+  _dividend: The integer to divide.
+  _shift:    The non-negative power of two to divide by.
+  _rmask:    (1<<_shift)-1*/
+#define OC_DIV_POW2(_dividend,_shift,_rmask)\
+  ((_dividend)+(((_dividend)>>sizeof(_dividend)*8-1)&(_rmask))>>(_shift))
+/*Divides _x by 65536, truncating towards 0.*/
+#define OC_DIV2_16(_x) OC_DIV_POW2(_x,16,0xFFFF)
+/*Divides _x by 2, truncating towards 0.*/
+#define OC_DIV2(_x) OC_DIV_POW2(_x,1,0x1)
+/*Divides _x by 8, truncating towards 0.*/
+#define OC_DIV8(_x) OC_DIV_POW2(_x,3,0x7)
+/*Divides _x by 16, truncating towards 0.*/
+#define OC_DIV16(_x) OC_DIV_POW2(_x,4,0xF)
+/*Right shifts _dividend by _shift, adding _rval, and subtracting one for
+   negative dividends first..
+  When _rval is (1<<_shift-1), this is equivalent to division with rounding
+   ties towards positive infinity.*/
+#define OC_DIV_ROUND_POW2(_dividend,_shift,_rval)\
+  ((_dividend)+((_dividend)>>sizeof(_dividend)*8-1)+(_rval)>>(_shift))
+/*Swaps two integers _a and _b if _a>_b.*/
+#define OC_SORT2I(_a,_b)\
+  if((_a)>(_b)){\
+    int t__;\
+    t__=(_a);\
+    (_a)=(_b);\
+    (_b)=t__;\
+  }
+
+
+
+/*All of these macros should expect floats as arguments.*/
+#define OC_MAXF(_a,_b)      ((_a)<(_b)?(_b):(_a))
+#define OC_MINF(_a,_b)      ((_a)>(_b)?(_b):(_a))
+#define OC_CLAMPF(_a,_b,_c) (OC_MINF(_a,OC_MAXF(_b,_c)))
+#define OC_FABSF(_f)        ((float)fabs(_f))
+#define OC_SQRTF(_f)        ((float)sqrt(_f))
+#define OC_POWF(_b,_e)      ((float)pow(_b,_e))
+#define OC_LOGF(_f)         ((float)log(_f))
+#define OC_IFLOORF(_f)      ((int)floor(_f))
+#define OC_ICEILF(_f)       ((int)ceil(_f))
+
+#endif

Added: trunk/theora-exp/lib/psych.c
===================================================================
--- trunk/theora-exp/lib/psych.c	                        (rev 0)
+++ trunk/theora-exp/lib/psych.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,2740 @@
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#include "psych.h"
+
+/*This is where we attempt to model low-level vision processes, such as
+   sensitivities due to the way human eyes are constructed and how data flows
+   through the early stages of the vision system.
+  Most of the material here is derived from Marcus Nadenau's Ph.D. thesis,
+   though also draws on some earlier work by Scott Daly et al. \cite{Nad00,
+   DZL+00}.
+  Nadenau's thesis dealt almost exclusively with wavelet-based still image
+   codecs since it was targeted at JPEG 2000, but many of the results in it
+   can be generalized to any subband codec with a little work.
+  This is, in fact, one of the reasons it was chosen as a starting point.
+  It has the advantages that the algorithms described in it are fairly simple,
+   computationally efficient, and have shown definite performance increases.
+
+  Still, the results mainly apply to still image codecs.
+  There is plenty of room for improvement by considering temporal sensitivity,
+   temporal masking and other effects of dynamic images that we have not
+   considered \cite{Lam96}.
+  The techniques described in the cited reference requires at least a three
+   frame delay, and considerable computational overhead, however.
+
+  We also extend Nadenau's contrast sensitivity function measurements to the
+   supra-threshold levels video codecs typically operate at by using the
+   exponential model proposed by Mark Cannon Jr. \cite{Can85}.
+  This area of the literature is in general fairly thin, but his model has
+   the good properties of simplicity and a lack of magic constants.
+  When adapting from Michelson contrast to our simple model, the CSF never
+   reaches the flat curve predicted by contrast constancy in the useful range
+   of contrast levels.
+  However, recent research suggests that uniform quantization does not yield
+   optimal perceptual results at contrast levels far above threshold, although
+   the model they propose to account for this is both complicated, contains
+   many magic constants, and is not robust to varying display parameters
+   \cite{CH03}.
+
+  @ARTICLE{Can85,
+    author="Mark W. Cannon, Jr.",
+    title="Perceived contrast in the fovea and periphery",
+    journal="Journal of the Optical Society of America A",
+    volume=2,
+    number=10,
+    pages="1760--1758",
+    month="Oct.",
+    year=1985
+  }
+
+  @INPROCEEDINGS{CH03,
+    author="Damon M. Chandler and Sheila S. Hemami",
+    title="Suprathreshold image compression based on contrast allocation and
+     global precedence",
+    booktitle="Proc. Human Vision and Electronic Imaging 2003",
+    address="Santa Clara, CA",
+    month="Jan.",
+    year=2003,
+    URL="http://citeseer.nj.nec.com/579192.html"
+  }
+
+  @INPROCEEDINGS{DZL+00,
+    author="Scott Daly and Wenjun Zeng and Jin Li and Shawmin Lei",
+    title="Visual masking in wavelet compression for JPEG2000",
+    booktitle="Proceedings of the {SPIE/IS&T} Electronic Imaging: Image and
+     Video Communications and Processing Conference",
+    address="San Jose",
+    month="Jan.",
+    year=2000,
+    URL="http://www.ee.princeton.edu/~wzeng/EI00_wavelet_masking.zip"
+  }
+
+  @PHDTHESIS{Lam96,
+    author="Christian J. van den Branden Lambrecht",
+    title="Perceptual Models and Architectures for Video Coding Applications",
+    school="\'{E}cole Polytechnique F\'{e}d\'{e}rale de Lausanne",
+    year=1996,
+    URL="http://ltswww.epfl.ch/pub_files/vdb/dissertation/dissertation.pdf.gz"
+  }
+
+  @PHDTHESIS{Nad00,
+    author="Marcus Nadenau",
+    title="Integration of Human Color Visual Models into High
+     Quality Image Compression",
+    school="\'{E}cole Polytechnique F\'{e}d\'{e}rale de Lausanne",
+    year=2000,
+    URL="http://ltswww.epfl.ch/pub_files/nadenau/Thesis_Marcus_LQ.pdf"
+  }
+
+  @ARTICLE{PSY+93,
+    author="E. Peli and L. E. Arend and G. M. Young and R. B. Goldstein",
+    title="Contrast sensitivity to patch stimuli: effects of spatial bandwidth
+     and temporal presentation",
+    journal="Spatial Vision",
+    volume=7,
+    number=1,
+    pages="1--15",
+    year=1993
+  }
+
+  @INPROCEEDINGS{TS96,
+    author="Trac D. Tran and Robert Safranek",
+    title="A Locally Adaptive Perceptual Masking Threshold Model for Image
+     Coding",
+    booktitle="Proceedings of the {IEEE} Conference on Acoustics, Speech, and
+     Signal Processing",
+    address="Atlanta",
+    volume=4,
+    pages="1882--1885",
+    month="May",
+    year=1996,
+    URL="http://citeseer.nj.nec.com/tran96locally.html"
+  }
+  
+  @ARTICLE{WYS+97,
+    author="A. B. Watson and G. Y. Yang and J. A. Solomon and J. Villasenor",
+    title="Visibility of wavelet quantization noise",
+    journal="{IEEE} Transactions on Image Processing",
+    volume=6,
+    pages="1164--1175",
+    year=1997,
+    URL="http://citeseer.nj.nec.com/watson97visibility.html"
+  }*/
+
+/*All CSF curves are scaled so that their peak is at 1.0, but JND
+   values are computed at frequency 0, which is not the peak of the
+   Y curve.
+  This is 1/CSF_Y(0), which scales the frequency 0 value to 1.0
+   like the other curves.
+
+  The question is, should this even be used?
+  In Nadenau's earlier work, he used an arbitrary constant of 2 to scale Y
+   channel sensitivity.
+  In his later work, he forces the CSF curve to its maximum for every
+   frequency below the frequency it achives that maximum at.
+
+  For chroma curves, the maximum is at frequency 0, but for the luma curve,
+   it is not.
+  The idea is that as one moves farther away, one can increase the frequencies
+   in the image.
+  Thus, distortions classified as "invisible" by the CSF curve for one
+   distance might become visible from a farther distance.
+  Forcing the curve to its maximum for low frequencies solves this problem.
+
+  So now, either one can use the modified CSF curve, which has a value of 1.0
+   at frequency 0, or one can scale it by the value given below, which causes
+   its frequency 0 values to be over 20 times more important (since the filter
+   is run in both the horizontal and vertical directions).
+  Nadenau chose the former, with no justification, and this may likely be the
+   better choice.
+  His methods are at least tested and confirmed to give up to 29% bitrate
+   reductions for visually-lossless still image compression.
+  Other weight towards the former comes from measurements that show contrast
+   sensitivity of unmasked 1-octave Gabor patches is low-pass, not band-pass
+   \cite{PAY+93}, and that wavelet quantization sensitivity behaves similarly
+   \cite{WYS+97}.*/
+#define OC_YAMP (4.52514935207592383F)
+
+const float OC_YCbCr_SCALE[3][3]={
+  /*Unspecified.*/
+  {
+    0.62660577006129702908501F,
+    1.33082085846485050021660F,1.08759046924374083944404F
+    /*JND values:
+    1.59589976310332425729864F,
+    0.75141593523980064237395F,0.91946373959616699828994F
+    */
+  },
+  /*ITU-R BT Rec 470-6 System M.*/
+  {
+    0.58002163837392672895987F,
+    1.34159010104556952747146F,1.18947262510486906350593F
+    /*JND values:
+    1.72407361008715120931356F,
+    0.74538415214948960940688F,0.84070871316759865354840F
+    */
+  },
+  /*ITU-R BT Rec 470-6 Systems B,G.*/
+  {
+    0.67693128169295702090125F,
+    1.32013806299317915105007F,0.99443484770028645058915F
+    /*JND values:
+    1.47725482193564916499895F,
+    0.75749652860752847427506F,1.00559629654228577244623F
+    */
+  }
+};
+
+/*The maximum number of coefficients in a CSF filter.
+  All CSF filters are symmetric, so the real filter size is
+   OC_CSF_FILTER_SZ_MAX*2-1.*/
+#define OC_CSF_FILTER_SZ_MAX (4)
+
+/*A CSF filter.
+  CSF filters are symmetric, so only coefficients in one direction are
+   stored.*/
+typedef float oc_csf_filter[OC_CSF_FILTER_SZ_MAX];
+/*A set of CSF filters, one for each DCT coefficient.
+  CSF filters are separable, so only filters for the coefficients in one
+   dimension are stored.*/
+typedef oc_csf_filter oc_csf_filter_bank[8];
+
+/*Filter coefficients for the contrast sensitivity function.
+  There is a different filter set for each color channel, with both decimated
+   and undecimated versions for the chroma channels, and for 8 different
+    contrast levels.
+  These were generated with the measurements given in Chapter 5 of Nadenau's
+   thesis and using a modified version of the method described therein.
+  Instead of assuming an ideal frequency response with finite support, the
+   actual frequency response of the DCT filter is used to weight the portions
+   of the CSF that contribute to the importance of each coefficient.
+  Sensitivity at different levels of contrast is modeled as 1/(C-T)^\alpha,
+   where T is the threshold contrast level and \alpha is fixed at 0.5
+   \cite{Can85}.
+  Thus, as C increases, the curves approach constant contrast sensitivity.
+  See the Mathematica notebook in doc/theory/psych.nb and the code to generate
+   the tables in tools/csfgen.c for more details.
+
+  The fitlers are stored in this order: Y filters, full resolution Cr filters,
+   half resolution Cr filters, full resolution Cb filters, half resolution Cb
+   filters.*/
+static const oc_csf_filter_bank OC_CSF_FILTERS[5][8]={
+  /*Y channel filters.*/
+  {
+    /*Contrast level 0 filters.*/
+    {
+      {
+        +0.4974979156295645799090721F,+0.0012404707975748668555283F,
+        +0.0000080106551093210126942F,+0.0000016274187019290664437F
+      },
+      {
+        +0.4946513130812318914664161F,-0.0027037537913987231760760F,
+        -0.0000330471695690925902091F,-0.0000000906623724571996728F
+      },
+      {
+        +0.4938944467506038438209259F,+0.0030361290189818454336723F,
+        +0.0000114829773190052630345F,+0.0000031200579746008261025F
+      },
+      {
+        +0.4918574148437053206173175F,-0.0040659281073912763304623F,
+        +0.0000091342174863448405024F,+0.0000114285638008321142813F
+      },
+      {
+        +0.4849051006583633416369139F,+0.0074388198444532149800068F,
+        +0.0000588189223675330443548F,+0.0000151937943563432782852F
+      },
+      {
+        +0.4599362228688526066378017F,-0.0096332351312863901543482F,
+        -0.0001957936409766333567782F,-0.0000309739095527862133865F
+      },
+      {
+        +0.4171873318721850965040687F,+0.0075634147110850502918056F,
+        +0.0001406246499985776136129F,+0.0000245145898043081554107F
+      },
+      {
+        +0.3622492868463687010205376F,-0.0079619663638459698545846F,
+        -0.0011862532832578940970858F,-0.0004590931594731116269226F
+      }
+    },
+    /*Contrast level 1 filters.*/
+    {
+      {
+        +0.4985952211684308021943934F,+0.0006929968245834339539077F,
+        +0.0000073638012374395989327F,+0.0000013053828352005946804F
+      },
+      {
+        +0.4969616832351805846279547F,-0.0015468288080826119845063F,
+        -0.0000323471848981306134632F,-0.0000036473783112434650109F
+      },
+      {
+        +0.4965804229791817014927346F,+0.0016918596532595941896865F,
+        +0.0000135821463075017275781F,+0.0000027067370702343916607F
+      },
+      {
+        +0.4954015481252519448318594F,-0.0023145025955579063420275F,
+        -0.0000174013355874229034041F,+0.0000006393132048949258850F
+      },
+      {
+        +0.4917459840700729167828342F,+0.0040576527603305642677434F,
+        +0.0000415233172946356360019F,+0.0000094869260538222692232F
+      },
+      {
+        +0.4782417493570770838928752F,-0.0056026658195043634036470F,
+        -0.0001439184882724861233062F,-0.0000273935419950798459267F
+      },
+      {
+        +0.4540145745199611893028191F,+0.0048131669800966069699966F,
+        +0.0001039464112021163945355F,+0.0000182154037458178904034F
+      },
+      {
+        +0.4193616606144400793532157F,-0.0057237897506124645052861F,
+        -0.0008902510390405555086926F,-0.0003484643316722941109968F
+      }
+    },
+    /*Contrast level 2 filters.*/
+    {
+      {
+        +0.4993917553220076910314162F,+0.0002987792675789140432914F,
+        +0.0000042348429586058825263F,+0.0000007166109631133404283F
+      },
+      {
+        +0.4986711203344355025635082F,-0.0006806350200641122279860F,
+        -0.0000192753655634024158728F,-0.0000030386631529038878887F
+      },
+      {
+        +0.4985217616090412140472665F,+0.0007282459524106939079136F,
+        +0.0000084356735629882367231F,+0.0000015356572007092566149F
+      },
+      {
+        +0.4979969696822242886113941F,-0.0010147057124000465836572F,
+        -0.0000157298955555893672418F,-0.0000019577424496730524289F
+      },
+      {
+        +0.4964880417208658025529644F,+0.0017223189322020380272876F,
+        +0.0000213607135587729943769F,+0.0000045470742845642022351F
+      },
+      {
+        +0.4907852358193834363397912F,-0.0024832427159493979454408F,
+        -0.0000761508774030194012265F,-0.0000160598837680240097360F
+      },
+      {
+        +0.4802673087213260028072170F,+0.0022507695093204210280702F,
+        +0.0000547813876165770423702F,+0.0000096506977823251094439F
+      },
+      {
+        +0.4640144269579485336585378F,-0.0029380893686057701040537F,
+        -0.0004747406413986356718895F,-0.0001873528096329502869426F
+      }
+    },
+    /*Contrast level 4 filters.*/
+    {
+      {
+        +0.4998137274648045136338226F,+0.0000912696159462314342541F,
+        +0.0000014843787227076340130F,+0.0000002476038959338043932F
+      },
+      {
+        +0.4995905931066523808503632F,-0.0002104358660185189956477F,
+        -0.0000068762206074010203557F,-0.0000012099908446087239219F
+      },
+      {
+        +0.4995476579004028971908724F,+0.0002222846485656745560682F,
+        +0.0000030368461003509543638F,+0.0000005374256197622947177F
+      },
+      {
+        +0.4993842047634874381500936F,-0.0003131139985448601423951F,
+        -0.0000062949398654856223578F,-0.0000010179627295714944439F
+      },
+      {
+        +0.4989338104957108388504139F,+0.0005220844404367886272891F,
+        +0.0000071708090595083798122F,+0.0000014802646157887906511F
+      },
+      {
+        +0.4972087446540453536947268F,-0.0007696923273746066876053F,
+        -0.0000259513187718355942373F,-0.0000057346607886135720063F
+      },
+      {
+        +0.4939873062181578955431860F,+0.0007149727748709724245435F,
+        +0.0000185889993986410929395F,+0.0000032872263385569140901F
+      },
+      {
+        +0.4888015084144361477314078F,-0.0009818722410188439417983F,
+        -0.0001622454979429055661484F,-0.0000643148365864906962960F
+      }
+    },
+    /*Contrast level 8 filters.*/
+    {
+      {
+        +0.4999506506251316095834625F,+0.0000241593584209429973638F,
+        +0.0000004101192692365366679F,+0.0000000681748460570138379F
+      },
+      {
+        +0.4998913134190874352213996F,-0.0000559322844779620533722F,
+        -0.0000019105677112889524220F,-0.0000003464926297259606339F
+      },
+      {
+        +0.4998801908401898641542971F,+0.0000588248802183322815800F,
+        +0.0000008451931104155585646F,+0.0000001485113546988487278F
+      },
+      {
+        +0.4998366341415675928594453F,-0.0000831709695403873376087F,
+        -0.0000018013774219368567310F,-0.0000003081909154259488803F
+      },
+      {
+        +0.4997183096241975541751401F,+0.0001378632096540683619861F,
+        +0.0000019571651197377926674F,+0.0000004004136670677446209F
+      },
+      {
+        +0.4992630422329858985719397F,-0.0002047091578843848139625F,
+        -0.0000071181198253395804878F,-0.0000015954913789402466708F
+      },
+      {
+        +0.4984097096395556647507874F,+0.0001915690820724511792949F,
+        +0.0000050901402230419786208F,+0.0000009014031698120338827F
+      },
+      {
+        +0.4970176720677992321384409F,-0.0002674975577999730985690F,
+        -0.0000445377789255487871152F,-0.0000176810302770080758519F
+      }
+    },
+    /*Contrast level 16 filters.*/
+    {
+      {
+        +0.4999874755326983444270184F,+0.0000061300062681946914151F,
+        +0.0000001052519850200102338F,+0.0000000174816076134240805F
+      },
+      {
+        +0.4999724008191679947010755F,-0.0000142077480328958145281F,
+        -0.0000004910655416519663291F,-0.0000000897496156494382389F
+      },
+      {
+        +0.4999695954662750074781741F,+0.0000149247812929188784174F,
+        +0.0000002173130495546358248F,+0.0000000381174217736460805F
+      },
+      {
+        +0.4999585234855704052314707F,-0.0000211232580046656607154F,
+        -0.0000004664454746007790730F,-0.0000000809013500389663776F
+      },
+      {
+        +0.4999285617392343894493933F,+0.0000349577910372148478973F,
+        +0.0000005007013859360666698F,+0.0000001021999933913723439F
+      },
+      {
+        +0.4998131366671812458868374F,-0.0000520077885699183199470F,
+        -0.0000018234627141940781669F,-0.0000004102587958020365375F
+      },
+      {
+        +0.4995965797576074618469022F,+0.0000487642150325281225807F,
+        +0.0000013033288646874188726F,+0.0000002308959439591987542F
+      },
+      {
+        +0.4992420472953436605401123F,-0.0000683984570725664186566F,
+        -0.0000114117223943732663143F,-0.0000045321443743445158429F
+      }
+    },
+    /*Contrast level 32 filters.*/
+    {
+      {
+        +0.4999968569633094217508074F,+0.0000015382431506488678755F,
+        +0.0000000264880574917300026F,+0.0000000043985687513150228F
+      },
+      {
+        +0.4999930729477782831438049F,-0.0000035662676828781185600F,
+        -0.0000001236307688019724448F,-0.0000000226394465865930717F
+      },
+      {
+        +0.4999923700605397036689226F,+0.0000037451117790174111833F,
+        +0.0000000547153501346255138F,+0.0000000095930350228033560F
+      },
+      {
+        +0.4999895903930139939852495F,-0.0000053018917810338624179F,
+        -0.0000001176505431097798597F,-0.0000000204749807057907393F
+      },
+      {
+        +0.4999820757893215783518315F,+0.0000087707540888702817297F,
+        +0.0000001259081133986305178F,+0.0000000256845013920447803F
+      },
+      {
+        +0.4999531171855649547275391F,-0.0000130549165552376623663F,
+        -0.0000004586906133020776115F,-0.0000001032986356249514205F
+      },
+      {
+        +0.4998987726726807356847360F,+0.0000122467480165678056759F,
+        +0.0000003278109523803935838F,+0.0000000580804967483879606F
+      },
+      {
+        +0.4998097224713375918980773F,-0.0000171974173459937233895F,
+        -0.0000028707618790378860885F,-0.0000011402340485875928503F
+      }
+    },
+    /*Contrast level 64 filters.*/
+    {
+      {
+        +0.4999992134922559006149356F,+0.0000003849213285110855801F,
+        +0.0000000066330348569149570F,+0.0000000011014154584515877F
+      },
+      {
+        +0.4999982665248277613478933F,-0.0000008924671924946150712F,
+        -0.0000000309621248576388811F,-0.0000000056725963408933297F
+      },
+      {
+        +0.4999980907061378765376958F,+0.0000009371518088510124054F,
+        +0.0000000137032099503720727F,+0.0000000024022681798146420F
+      },
+      {
+        +0.4999973950557881074985289F,-0.0000013267969813612056625F,
+        -0.0000000294781131806493973F,-0.0000000051344897167296845F
+      },
+      {
+        +0.4999955148884093758532288F,+0.0000021946540386269054541F,
+        +0.0000000315231414668302833F,+0.0000000064295873978643399F
+      },
+      {
+        +0.4999882688124631657800023F,-0.0000032670567003315287756F,
+        -0.0000001148504838286859402F,-0.0000000258708892860719560F
+      },
+      {
+        +0.4999746697933456496265592F,+0.0000030651870298140881922F,
+        +0.0000000820772787340354999F,+0.0000000145425660809524183F
+      },
+      {
+        +0.4999523810248664434929822F,-0.0000043055079282289645130F,
+        -0.0000007188129863325958459F,-0.0000002855116819385006770F
+      }
+    }
+  },
+  /*Cr channel filters at full resolution.*/
+  {
+    /*Contrast level 0 filters.*/
+    {
+      {
+        +0.4466131034990036274834324F,+0.0204563871591344446920768F,
+        +0.0023939221213980293664902F,+0.0010480976513234819148118F
+      },
+      {
+        +0.3943525077511645382521976F,-0.0194312007508983461412377F,
+        -0.0002991392322740196491222F,-0.0000418658386670598238813F
+      },
+      {
+        +0.3602165550759829359961373F,+0.0109843676819592721283225F,
+        +0.0000340732083994970040108F,+0.0000034293744517165677533F
+      },
+      {
+        +0.3253604730307345649364947F,-0.0073474567266921218811060F,
+        -0.0000246081815279124990021F,+0.0000065726960631269384670F
+      },
+      {
+        +0.2935508632220520941480402F,+0.0050435024480460057330622F,
+        +0.0000197913611940059728437F,+0.0000029381559238051280840F
+      },
+      {
+        +0.2645790141301814224483735F,-0.0037929500982503520922773F,
+        -0.0000559497045800741237779F,-0.0000043288231670403312955F
+      },
+      {
+        +0.2388636589566937307171912F,+0.0026599487397785887346502F,
+        +0.0000499974651329198401147F,+0.0000088670737686502255963F
+      },
+      {
+        +0.2147883058975149639380220F,-0.0028258396905114393886371F,
+        -0.0004288976310994812375828F,-0.0001640767602695969852415F
+      }
+    },
+    /*Contrast level 1 filters.*/
+    {
+      {
+        +0.4698578102368252129572568F,+0.0119304558868460457848881F,
+        +0.0012115903786694226604986F,+0.0005277168711196883335926F
+      },
+      {
+        +0.4386269582433506841745441F,-0.0127862923907847078619504F,
+        -0.0001602430214692817463020F,-0.0000195722569996841122715F
+      },
+      {
+        +0.4169960531871078068810732F,+0.0081127134615084986468680F,
+        +0.0000232588063957524358741F,+0.0000026208146395139378962F
+      },
+      {
+        +0.3929024115992683086062698F,-0.0059554576317657707124065F,
+        -0.0000245114024840928133940F,+0.0000039573448279499121711F
+      },
+      {
+        +0.3689847372054864682588970F,+0.0044170269151178791558476F,
+        +0.0000194609155260757375413F,+0.0000029628609638351198479F
+      },
+      {
+        +0.3453540773032837130074313F,-0.0035679797526732407765560F,
+        -0.0000594312634054908807977F,-0.0000067749294918672538118F
+      },
+      {
+        +0.3228620127205077405818656F,+0.0026224919234070732595998F,
+        +0.0000512831165659902757066F,+0.0000090980082325552709372F
+      },
+      {
+        +0.3002502447130425689003630F,-0.0028854418338218387057870F,
+        -0.0004422565606365215572053F,-0.0001703816409394388322815F
+      }
+    },
+    /*Contrast level 2 filters.*/
+    {
+      {
+        +0.4867441391026595121083176F,+0.0053656903788364667534649F,
+        +0.0004887198367536145114307F,+0.0002120418626616244243098F
+      },
+      {
+        +0.4725122075211675154449154F,-0.0062630752460282896471044F,
+        -0.0000705061198436637121510F,-0.0000077503711692285297752F
+      },
+      {
+        +0.4623297540279411310670810F,+0.0043131917627408740065209F,
+        +0.0000131268391170999021992F,+0.0000016229653269626313114F
+      },
+      {
+        +0.4501951498452281263951136F,-0.0034152219551933818246503F,
+        -0.0000184809884634354849799F,+0.0000011277852315615552371F
+      },
+      {
+        +0.4373156975931161150050741F,+0.0027035532940359353892834F,
+        +0.0000139132810869793730032F,+0.0000021444756114345932393F
+      },
+      {
+        +0.4236370538857213152716952F,-0.0023418384173699924657996F,
+        -0.0000448056812193965004051F,-0.0000065017703255079614035F
+      },
+      {
+        +0.4097477895414575188581807F,+0.0018071018217870682756598F,
+        +0.0000373965827200492621210F,+0.0000066363077245494702270F
+      },
+      {
+        +0.3947357774885709158496638F,-0.0020825714057240850458907F,
+        -0.0003240988774238835897455F,-0.0001257375472981652896227F
+      }
+    },
+    /*Contrast level 4 filters.*/
+    {
+      {
+        +0.4958834656421001740866927F,+0.0016859519056663628544523F,
+        +0.0001445025023262314664389F,+0.0000625264961989884367156F
+      },
+      {
+        +0.4913874931139418089642845F,-0.0020593861138210665766290F,
+        -0.0000226092805204661257822F,-0.0000024066196304147228100F
+      },
+      {
+        +0.4881311311493955473750361F,+0.0014797430991360914238203F,
+        +0.0000049264898376419930071F,+0.0000006390190043181814159F
+      },
+      {
+        +0.4840996676637792650588210F,-0.0012237890166467769222786F,
+        -0.0000080407608920541696272F,+0.0000000413046765873424668F
+      },
+      {
+        +0.4796575272601830142171764F,+0.0010058742257652098298082F,
+        +0.0000058176418812422918563F,+0.0000009014941215735951753F
+      },
+      {
+        +0.4747253321574411710770391F,-0.0009118419706028339311379F,
+        -0.0000192799213040731582758F,-0.0000031517690586197395265F
+      },
+      {
+        +0.4695095348185415740083215F,+0.0007269098386637814091654F,
+        +0.0000157577834945070641821F,+0.0000027979576676246618138F
+      },
+      {
+        +0.4635866848505370008126647F,-0.0008690766903331083705411F,
+        -0.0001370659367807853113840F,-0.0000534285631685433790028F
+      }
+    },
+    /*Contrast level 8 filters.*/
+    {
+      {
+        +0.4989032657299813933171606F,+0.0004508885250507135020528F,
+        +0.0000378687776724978810631F,+0.0000163682592366822710517F
+      },
+      {
+        +0.4976990343814432504743195F,-0.0005590362807171194228784F,
+        -0.0000061344011583817215891F,-0.0000006520168673858460086F
+      },
+      {
+        +0.4968242080213455258430599F,+0.0004071780856574246858053F,
+        +0.0000014107694341815653082F,+0.0000001857550935630192576F
+      },
+      {
+        +0.4957271332146040987431945F,-0.0003417502727829278504935F,
+        -0.0000024117320912226457587F,-0.0000000314276727951980480F
+      },
+      {
+        +0.4945032049560656450815088F,+0.0002844597351455135101142F,
+        +0.0000017200658041290622997F,+0.0000002669964635612131963F
+      },
+      {
+        +0.4931229281906876482644009F,-0.0002621175868537459620160F,
+        -0.0000057553609042691053762F,-0.0000009770500636906775946F
+      },
+      {
+        +0.4916422352455450672792381F,+0.0002114292198477351887413F,
+        +0.0000046692051973829650031F,+0.0000008293473603515466290F
+      },
+      {
+        +0.4899298619593880910194628F,-0.0002564751824144358106558F,
+        -0.0000406737915269712537901F,-0.0000158824949035072251569F
+      }
+    },
+    /*Contrast level 16 filters.*/
+    {
+      {
+        +0.4997212087765695032182123F,+0.0001147340276179476589030F,
+        +0.0000095831952674561008592F,+0.0000041409109405756833042F
+      },
+      {
+        +0.4994146572400975925276612F,-0.0001428285422951212522633F,
+        -0.0000015683164162862297173F,-0.0000001668014581580321873F
+      },
+      {
+        +0.4991918010179293707651027F,+0.0001044086068593389111676F,
+        +0.0000003660134475814273868F,+0.0000000483845855363679069F
+      },
+      {
+        +0.4989113465804591029950643F,-0.0000879850330316772930939F,
+        -0.0000006334463649372846156F,-0.0000000113452095602269466F
+      },
+      {
+        +0.4985974113452554257186478F,+0.0000734863291078301071211F,
+        +0.0000004499859565283966385F,+0.0000000698815740383369691F
+      },
+      {
+        +0.4982418489567451147514987F,-0.0000680230325427612738439F,
+        -0.0000015096044607814982171F,-0.0000002588749307410131994F
+      },
+      {
+        +0.4978589080920167719845892F,+0.0000550484870529407562217F,
+        +0.0000012222017366671539300F,+0.0000002171121142022902965F
+      },
+      {
+        +0.4974137753766228464691324F,-0.0000670551786167608278528F,
+        -0.0000106512240094618133071F,-0.0000041611869214930319994F
+      }
+    },
+    /*Contrast level 32 filters.*/
+    {
+      {
+        +0.4999300076157416894417906F,+0.0000288122669341368914885F,
+        +0.0000024031677817380821061F,+0.0000010383274725146474736F
+      },
+      {
+        +0.4998530180929730004635303F,-0.0000359043654502861017967F,
+        -0.0000003943337487483114176F,-0.0000000419502539379778554F
+      },
+      {
+        +0.4997970386241146756312048F,+0.0000262705789622399434827F,
+        +0.0000000923755404781967567F,+0.0000000122237582557993805F
+      },
+      {
+        +0.4997265277821371642907877F,-0.0000221609962758671951073F,
+        -0.0000001603707912619345992F,-0.0000000030715237063176491F
+      },
+      {
+        +0.4996475316876837213797558F,+0.0000185253498948414021315F,
+        +0.0000001138075497721189058F,+0.0000000176761176087779480F
+      },
+      {
+        +0.4995579622322675605872178F,-0.0000171681429803162927475F,
+        -0.0000003820551272206407269F,-0.0000000656852223996049388F
+      },
+      {
+        +0.4994613979826325045330293F,+0.0000139052196437981325422F,
+        +0.0000003091555877587903549F,+0.0000000549200608453141957F
+      },
+      {
+        +0.4993490028543484671175179F,-0.0000169563752736321444613F,
+        -0.0000026945226572072131838F,-0.0000010528212293658266857F
+      }
+    },
+    /*Contrast level 64 filters.*/
+    {
+      {
+        +0.4999824833869556117704747F,+0.0000072111626411971994265F,
+        +0.0000006012544013488351046F,+0.0000002597763464667639583F
+      },
+      {
+        +0.4999632138959408389489170F,-0.0000089885049739711238428F,
+        -0.0000000987257403393744738F,-0.0000000105033892738312263F
+      },
+      {
+        +0.4999492023433999010606499F,+0.0000065782528205756289120F,
+        +0.0000000231490449847509044F,+0.0000000030640136122263519F
+      },
+      {
+        +0.4999315496351057763746439F,-0.0000055506345023664364709F,
+        -0.0000000402199501155586828F,-0.0000000007828676740402504F
+      },
+      {
+        +0.4999117683485769791928988F,+0.0000046410379760095441779F,
+        +0.0000000285348607848787503F,+0.0000000044320502364094861F
+      },
+      {
+        +0.4998893331834736164509536F,-0.0000043022910674822050300F,
+        -0.0000000958084528018879889F,-0.0000000164825877208729088F
+      },
+      {
+        +0.4998651398024888115045883F,+0.0000034853487944542519948F,
+        +0.0000000775170695289236531F,+0.0000000137706518824132828F
+      },
+      {
+        +0.4998369707575275877609045F,-0.0000042512783907376547603F,
+        -0.0000006756382634799853338F,-0.0000002639981667588252647F
+      }
+    }
+  },
+  /*Cr channel filters at half resolution.*/
+  {
+    /*Contrast level 0 filters.*/
+    {
+      {
+        +0.4695167969228932758340989F,+0.0118718351587125559715163F,
+        +0.0012965130664463896288663F,+0.0005662371678254208033285F
+      },
+      {
+        +0.4388143301023016418227485F,-0.0120135532251189214997256F,
+        -0.0001669247254022054969148F,-0.0000219481096099628507248F
+      },
+      {
+        +0.4181505572964309136452243F,+0.0072449968749778402565820F,
+        +0.0000217252708311208960943F,+0.0000023403819777649205360F
+      },
+      {
+        +0.3960235893103195570219555F,-0.0051270782000218707852301F,
+        -0.0000200642852007973282089F,+0.0000037481888840257615307F
+      },
+      {
+        +0.3748260081983196823074422F,+0.0036989182895335159101391F,
+        +0.0000158747291663022933005F,+0.0000023973135012358275899F
+      },
+      {
+        +0.3545217626567973567830450F,-0.0029239324108313942580939F,
+        -0.0000474467413179348193814F,-0.0000050008893046642872881F
+      },
+      {
+        +0.3356529259343632443091110F,+0.0021229471847555411896658F,
+        +0.0000412647623712182482218F,+0.0000073203779275024357106F
+      },
+      {
+        +0.3170744801586446448560253F,-0.0023213902831152118284852F,
+        -0.0003554375191269673302588F,-0.0001367245997123144366468F
+      }
+    },
+    /*Contrast level 1 filters.*/
+    {
+      {
+        +0.4836308306501569953539388F,+0.0064930538147626917083732F,
+        +0.0006526985361209555226714F,+0.0002842083171947500531279F
+      },
+      {
+        +0.4666233971978723804596711F,-0.0070385576201047496402996F,
+        -0.0000879030116116034856023F,-0.0000106718823583842997016F
+      },
+      {
+        +0.4548190941110913376732583F,+0.0045330041876995453425936F,
+        +0.0000134778920865219048995F,+0.0000015573016337061152485F
+      },
+      {
+        +0.4415150653445629180815502F,-0.0033917098317780849069114F,
+        -0.0000155793977831583760774F,+0.0000018471711366006795366F
+      },
+      {
+        +0.4281169344940197185600539F,+0.0025644228947526844994420F,
+        +0.0000120451710117027005194F,+0.0000018410050994371369771F
+      },
+      {
+        +0.4146162746402144438917503F,-0.0021234871914581768606589F,
+        -0.0000375476514876610172836F,-0.0000047810116910102886984F
+      },
+      {
+        +0.4015013744485408375695101F,+0.0015909657431346366836949F,
+        +0.0000319351503243229408835F,+0.0000056665154596238314467F
+      },
+      {
+        +0.3879615599270475057025465F,-0.0017874386453353410721817F,
+        -0.0002760029073079348018067F,-0.0001066589679214394040859F
+      }
+    },
+    /*Contrast level 2 filters.*/
+    {
+      {
+        +0.4931183466763838785240637F,+0.0027624669124665934827334F,
+        +0.0002622722165700911507898F,+0.0001139622500238115544724F
+      },
+      {
+        +0.4858305119870601762599449F,-0.0031335211278896418080064F,
+        -0.0000369976912359326878051F,-0.0000042651976814331478755F
+      },
+      {
+        +0.4806838540421569105909327F,+0.0021071386104229527895526F,
+        +0.0000064701285123968139555F,+0.0000007849955528773996738F
+      },
+      {
+        +0.4746734787500401786530801F,-0.0016403540209556381670314F,
+        -0.0000086974570476210647700F,+0.0000005907910888867568744F
+      },
+      {
+        +0.4684050905393940533727459F,+0.0012829464723505905852929F,
+        +0.0000065451033860091992257F,+0.0000010068727582205162545F
+      },
+      {
+        +0.4618447215616265366655568F,-0.0011019343858519544971514F,
+        -0.0000209715759562448650604F,-0.0000030052012807484980557F
+      },
+      {
+        +0.4552521864732587686397380F,+0.0008468924651249438995126F,
+        +0.0000175319929402584630349F,+0.0000031116120420323132983F
+      },
+      {
+        +0.4481800437012667948089018F,-0.0009756327739151399126502F,
+        -0.0001519317138244341113939F,-0.0000589296900896258015303F
+      }
+    },
+    /*Contrast level 4 filters.*/
+    {
+      {
+        +0.4979230383986483765568209F,+0.0008386946594426612474130F,
+        +0.0000773258988324650365807F,+0.0000335601179077375054286F
+      },
+      {
+        +0.4957033692105178301900992F,-0.0009731912675722631609482F,
+        -0.0000112503692463413741112F,-0.0000012688868966867814525F
+      },
+      {
+        +0.4941240320650327477736141F,+0.0006685765380286866430698F,
+        +0.0000021155999929475169844F,+0.0000002630086767322655800F
+      },
+      {
+        +0.4922455243204088559672016F,-0.0005313457985576951377038F,
+        -0.0000030637002743417027582F,+0.0000001278532581659137263F
+      },
+      {
+        +0.4902507554199150296980747F,+0.0004230034169241665524541F,
+        +0.0000022676475967969978322F,+0.0000003498646273309863166F
+      },
+      {
+        +0.4881199398960199276054084F,-0.0003707873262008414298393F,
+        -0.0000073671179573384878877F,-0.0000011179318763879160310F
+      },
+      {
+        +0.4859387204261632065005472F,+0.0002890910354338275308622F,
+        +0.0000061009910341029670108F,+0.0000010830508017200641850F
+      },
+      {
+        +0.4835472848145313529144573F,-0.0003382010472590805429116F,
+        -0.0000529549988910092426565F,-0.0000205825591428645541441F
+      }
+    },
+    /*Contrast level 8 filters.*/
+    {
+      {
+        +0.4994522596472190656413659F,+0.0002215954251715837803379F,
+        +0.0000202398722059418877627F,+0.0000087807935953227835225F
+      },
+      {
+        +0.4988652324428006212819753F,-0.0002589862726493012516638F,
+        -0.0000029777307354311767111F,-0.0000003338734239934711138F
+      },
+      {
+        +0.4984466365571178503302008F,+0.0001791227881210257541055F,
+        +0.0000005734587681423751531F,+0.0000000718381840537506100F
+      },
+      {
+        +0.4979458094231292708542469F,-0.0001433081786963304963406F,
+        -0.0000008500023180420679499F,+0.0000000283751801041673331F
+      },
+      {
+        +0.4974109122261932691699826F,+0.0001147401509354206179800F,
+        +0.0000006256148297418191691F,+0.0000000966091172726374355F
+      },
+      {
+        +0.4968356983378738878087688F,-0.0001012569514721387692584F,
+        -0.0000020414609043619688506F,-0.0000003153731734632332331F
+      },
+      {
+        +0.4962432896718967367810649F,+0.0000793254051083025387954F,
+        +0.0000016853717541981491899F,+0.0000002992147418594681153F
+      },
+      {
+        +0.4955890275489457375002189F,-0.0000932971052573183757747F,
+        -0.0000146365725569265970262F,-0.0000056929245737308219766F
+      }
+    },
+    /*Contrast level 16 filters.*/
+    {
+      {
+        +0.4998611570226071387779143F,+0.0000561986766606086413913F,
+        +0.0000051201431153412290474F,+0.0000022210636548893662555F
+      },
+      {
+        +0.4997122443089725418730040F,-0.0000658075071313614969873F,
+        -0.0000007556198837515174208F,-0.0000000845984030650239734F
+      },
+      {
+        +0.4996059977093053050545279F,+0.0000455960654235170221465F,
+        +0.0000001464572429874675988F,+0.0000000183842398706308098F
+      },
+      {
+        +0.4994786788442057146042430F,-0.0000365446796566987810182F,
+        -0.0000002184306321095725997F,+0.0000000068043642154947857F
+      },
+      {
+        +0.4993424888460161192860198F,+0.0000293044227604581471376F,
+        +0.0000001605224477450457797F,+0.0000000247941451891726096F
+      },
+      {
+        +0.4991957693624383129993305F,-0.0000259080892238846858329F,
+        -0.0000005244224383208276881F,-0.0000000814009094831105251F
+      },
+      {
+        +0.4990444159731659001799642F,+0.0000203229160262065034176F,
+        +0.0000004325853457851024372F,+0.0000000768016102306213593F
+      },
+      {
+        +0.4988769278291567133010176F,-0.0000239374237743052331758F,
+        -0.0000037573400835358366793F,-0.0000014617026288582778623F
+      }
+    },
+    /*Contrast level 32 filters.*/
+    {
+      {
+        +0.4999651678819846400969595F,+0.0000141005802437881223892F,
+        +0.0000012838532484197587457F,+0.0000005569064407644136500F
+      },
+      {
+        +0.4999278024453653879177750F,-0.0000165195509739608277109F,
+        -0.0000001896190359078884463F,-0.0000000212217826543456007F
+      },
+      {
+        +0.4999011390458626968857914F,+0.0000114511155948291469623F,
+        +0.0000000368129637366108189F,+0.0000000046233792250619020F
+      },
+      {
+        +0.4998691745725470925165723F,-0.0000091821067151572047016F,
+        -0.0000000549901868049509983F,+0.0000000016818023020295985F
+      },
+      {
+        +0.4998349695031858996863150F,+0.0000073658102040057640768F,
+        +0.0000000403959275072578960F,+0.0000000062398894288430272F
+      },
+      {
+        +0.4997981029274434772169400F,-0.0000065151595659965957439F,
+        -0.0000001320119339589072851F,-0.0000000205156585175137481F
+      },
+      {
+        +0.4997600560680905967814169F,+0.0000051123369183002634797F,
+        +0.0000001088706632325653276F,+0.0000000193291302784124363F
+      },
+      {
+        +0.4997179319509047479286323F,-0.0000060238427959572464932F,
+        -0.0000009456626233815313247F,-0.0000003679051068368071936F
+      }
+    },
+    /*Contrast level 64 filters.*/
+    {
+      {
+        +0.4999912843507081094962530F,+0.0000035283416991741613266F,
+        +0.0000003212028013558364107F,+0.0000001393295230733825218F
+      },
+      {
+        +0.4999819343728570397722422F,-0.0000041341391807609398598F,
+        -0.0000000474496259910934465F,-0.0000000053099819541588781F
+      },
+      {
+        +0.4999752621333932722791360F,+0.0000028660533055402908606F,
+        +0.0000000092157430372188399F,+0.0000000011575647993101375F
+      },
+      {
+        +0.4999672625488200128351934F,-0.0000022984150962871844118F,
+        -0.0000000137716468298074144F,+0.0000000004192254679993819F
+      },
+      {
+        +0.4999587013779953070802264F,+0.0000018439500011884936776F,
+        +0.0000000101156909511318107F,+0.0000000015625767578566138F
+      },
+      {
+        +0.4999494729936705961215182F,-0.0000016311898744777719547F,
+        -0.0000000330600760916600531F,-0.0000000051393441051615709F
+      },
+      {
+        +0.4999399481616498830405249F,+0.0000012800739524601243801F,
+        +0.0000000272632855386633490F,+0.0000000048403902040499782F
+      },
+      {
+        +0.4999294012661086861193382F,-0.0000015084473857850950143F,
+        -0.0000002368141965753492091F,-0.0000000921324503507289458F
+      }
+    }
+  },
+  /*Cb channel filters at full resolution.*/
+  {
+    /*Contrast level 0 filters.*/
+    {
+      {
+        +0.4312048850363129348650659F,+0.0261634755939081191378204F,
+        +0.0031750772564368176346938F,+0.0013874848035305088669172F
+      },
+      {
+        +0.3648564476712009008174675F,-0.0238426973284627599647401F,
+        -0.0003931252829393594699220F,-0.0000568657294143991526390F
+      },
+      {
+        +0.3223968430317957767350379F,+0.0128422442826788708175600F,
+        +0.0000414471825883240834083F,+0.0000039752432106109812865F
+      },
+      {
+        +0.2804836413065861511206833F,-0.0082241427090125433785328F,
+        -0.0000247997987440750155912F,+0.0000082214843948207206182F
+      },
+      {
+        +0.2435945701707277200043222F,+0.0054248167290125385436861F,
+        +0.0000200130780606898053223F,+0.0000029201978500570578793F
+      },
+      {
+        +0.2112512721676763349787365F,-0.0039216740912408594790795F,
+        -0.0000536838546757304984464F,-0.0000027834831585026808163F
+      },
+      {
+        +0.1835455014530386064208756F,+0.0026749983944352904649544F,
+        +0.0000491074270152470714447F,+0.0000087068880048752066592F
+      },
+      {
+        +0.1586010497517217898710840F,-0.0027823160561639618919283F,
+        -0.0004197741523304857730846F,-0.0001598432434828200409804F
+      }
+    },
+    /*Contrast level 1 filters.*/
+    {
+      {
+        +0.4598595927109241920938132F,+0.0159163878225080726580565F,
+        +0.0016119432715116484636231F,+0.0006998405760071078635792F
+      },
+      {
+        +0.4181353674799145880847107F,-0.0169522280480596566898388F,
+        -0.0002111367365725923131783F,-0.0000257194306344017703135F
+      },
+      {
+        +0.3892168484067823341909786F,+0.0106073402518933653654321F,
+        +0.0000291961906781608349808F,+0.0000032024654446753188805F
+      },
+      {
+        +0.3573460821204919035665171F,-0.0076310457238191273937611F,
+        -0.0000277582398580081882698F,+0.0000059669593279700587160F
+      },
+      {
+        +0.3261672078827498877373614F,+0.0055400531916913013652515F,
+        +0.0000227672648134058980317F,+0.0000034510563457196915127F
+      },
+      {
+        +0.2959995531918351852063154F,-0.0043536784504266436146569F,
+        -0.0000678837955147546022548F,-0.0000066564449870218959590F
+      },
+      {
+        +0.2679167049092647800989653F,+0.0031318494348818205763596F,
+        +0.0000595772196036073009139F,+0.0000105689747934208020362F
+      },
+      {
+        +0.2404884151403481606923407F,-0.0033699165768711993908247F,
+        -0.0005126013690148204437688F,-0.0001967977370010746637242F
+      }
+    },
+    /*Contrast level 2 filters.*/
+    {
+      {
+        +0.4817120792465502399082311F,+0.0074724315808237231836819F,
+        +0.0006516392309702905005775F,+0.0002815245153035708203064F
+      },
+      {
+        +0.4617799787784527820733160F,-0.0089330693685947138577008F,
+        -0.0000955207550748095015258F,-0.0000099040179076770895627F
+      },
+      {
+        +0.4473378472950032547217347F,+0.0062551941429642701417158F,
+        +0.0000184705180670257794635F,+0.0000023023823007004419637F
+      },
+      {
+        +0.4298781400943726405117218F,-0.0049940173805803457843244F,
+        -0.0000262842187295421361552F,+0.0000018287017578816391974F
+      },
+      {
+        +0.4111460548094960087972538F,+0.0039688514372345591249558F,
+        +0.0000200138575890065358422F,+0.0000030864724760458936325F
+      },
+      {
+        +0.3911410298434226384678425F,-0.0034301165480603622651157F,
+        -0.0000642853214180271072655F,-0.0000091227921858019962628F
+      },
+      {
+        +0.3708010298878299249025758F,+0.0026360598441461957110177F,
+        +0.0000538723161638011622024F,+0.0000095574740153336816919F
+      },
+      {
+        +0.3489120970486987993730565F,-0.0030100382871891414281185F,
+        -0.0004664723745621126649655F,-0.0001807859522167991827516F
+      }
+    },
+    /*Contrast level 4 filters.*/
+    {
+      {
+        +0.4941658856998470961130465F,+0.0024233123979785255175390F,
+        +0.0001932074875662472858429F,+0.0000831105211319156379464F
+      },
+      {
+        +0.4876602722868220163299213F,-0.0030905075007501259763687F,
+        -0.0000325596218445339458309F,-0.0000032790980791743816316F
+      },
+      {
+        +0.4828792576859727847526926F,+0.0022985545858219516741905F,
+        +0.0000079624515509959584961F,+0.0000010617060879139090464F
+      },
+      {
+        +0.4767652919061929894795071F,-0.0019577346550704111463603F,
+        -0.0000139992621280691532519F,-0.0000002220327960929667512F
+      },
+      {
+        +0.4698333763048777589332872F,+0.0016461203637354723458563F,
+        +0.0000099940339496473717793F,+0.0000015523470412585898549F
+      },
+      {
+        +0.4619130244036616095293368F,-0.0015265210571683931507769F,
+        -0.0000334995202072480791826F,-0.0000056997504999518381849F
+      },
+      {
+        +0.4533427707255207050884849F,+0.0012344541050524223367579F,
+        +0.0000271744585322142675251F,+0.0000048252310570862587505F
+      },
+      {
+        +0.4433828521055653837379396F,-0.0014946768504321328221301F,
+        -0.0002366335603871463639635F,-0.0000923892560281006428036F
+      }
+    },
+    /*Contrast level 8 filters.*/
+    {
+      {
+        +0.4984288343975059598633948F,+0.0006562052364283222152808F,
+        +0.0000507157536390280400920F,+0.0000217706132202295523607F
+      },
+      {
+        +0.4966642306360010139520966F,-0.0008555366892458960911827F,
+        -0.0000091624242974067453081F,-0.0000009415980610145982637F
+      },
+      {
+        +0.4953645681975468728630574F,+0.0006488105721603400384556F,
+        +0.0000024319488330673602594F,+0.0000003310769067458522383F
+      },
+      {
+        +0.4936691099865914145183865F,-0.0005654495738762885985798F,
+        -0.0000045674889466461169709F,-0.0000002004098700369449674F
+      },
+      {
+        +0.4917103047825460149233834F,+0.0004848166883451819619832F,
+        +0.0000031824191720537174520F,+0.0000004955723362595859390F
+      },
+      {
+        +0.4894149820816336426965165F,-0.0004620263922605706346722F,
+        -0.0000108293930905426763809F,-0.0000019525940715985574606F
+      },
+      {
+        +0.4868725721430893771390913F,+0.0003810932905231036670578F,
+        +0.0000086774531525387136184F,+0.0000015419547591789487515F
+      },
+      {
+        +0.4838244145301845988704770F,-0.0004736707507444618599907F,
+        -0.0000757640541296034704822F,-0.0000296696124696210131037F
+      }
+    },
+    /*Contrast level 16 filters.*/
+    {
+      {
+        +0.4995993603725594200959392F,+0.0001675790051963064412194F,
+        +0.0000128413222402595711072F,+0.0000055087749513106696301F
+      },
+      {
+        +0.4991485323900807236086052F,-0.0002198113706306171393021F,
+        -0.0000023704700214431176567F,-0.0000002458308213386123646F
+      },
+      {
+        +0.4988163838127456783944069F,+0.0001675683041352075974568F,
+        +0.0000006433155295694552215F,+0.0000000880597963312900939F
+      },
+      {
+        +0.4983806733625466556247829F,-0.0001469739614975548638170F,
+        -0.0000012295239077028707444F,-0.0000000632154280827319493F
+      },
+      {
+        +0.4978746999205063694660112F,+0.0001266897221764517295853F,
+        +0.0000008508501271006457350F,+0.0000001325943198630668791F
+      },
+      {
+        +0.4972775592456645243899516F,-0.0001216788456608324940807F,
+        -0.0000029075619999733626398F,-0.0000005324822709820448539F
+      },
+      {
+        +0.4966117614934890123201683F,+0.0001009310800574111260421F,
+        +0.0000023216901090831847279F,+0.0000004126671295303846784F
+      },
+      {
+        +0.4958062635952286134610745F,-0.0001264380539211572914045F,
+        -0.0000202877312685135985186F,-0.0000079517431916540738722F
+      }
+    },
+    /*Contrast level 32 filters.*/
+    {
+      {
+        +0.4998993351771336968170090F,+0.0000421220032475569009607F,
+        +0.0000032206817961775215503F,+0.0000013813954564573950940F
+      },
+      {
+        +0.4997860047929443272352046F,-0.0000553368227772964353618F,
+        -0.0000005979284126332098208F,-0.0000000621689973188208138F
+      },
+      {
+        +0.4997025033015418116200124F,+0.0000422407185527253454887F,
+        +0.0000001631914270623181817F,+0.0000000223693885536100517F
+      },
+      {
+        +0.4995928101081758554435908F,-0.0000371101499479539579957F,
+        -0.0000003132820523681314136F,-0.0000000167087493931284721F
+      },
+      {
+        +0.4994652608212478139826374F,+0.0000320321692643728164838F,
+        +0.0000002164152696408874873F,+0.0000000337321614787282274F
+      },
+      {
+        +0.4993144520397829189128913F,-0.0000308273860686345823625F,
+        -0.0000007403465875189430361F,-0.0000001361243203404831883F
+      },
+      {
+        +0.4991460174323619214398207F,+0.0000256081933915283632122F,
+        +0.0000005906349708546492738F,+0.0000001049897350000978661F
+      },
+      {
+        +0.4989417607647111396751427F,-0.0000321459342115372963917F,
+        -0.0000051623025155033980537F,-0.0000020238177523863364102F
+      }
+    },
+    /*Contrast level 64 filters.*/
+    {
+      {
+        +0.4999748020039830875838049F,+0.0000105448136884012114769F,
+        +0.0000008058206653170043856F,+0.0000003456125767547167418F
+      },
+      {
+        +0.4999464301453608316982979F,-0.0000138584245076405129918F,
+        -0.0000001498193746973520146F,-0.0000000155877105180651935F
+      },
+      {
+        +0.4999255255535027808733162F,+0.0000105821860375712442561F,
+        +0.0000000409480959457036872F,+0.0000000056148971136907884F
+      },
+      {
+        +0.4998980539981414117356451F,-0.0000093007142669651292756F,
+        -0.0000000786964156299724979F,-0.0000000042351883624420844F
+      },
+      {
+        +0.4998661000495203121651855F,+0.0000080308026967991907055F,
+        +0.0000000543394130767120918F,+0.0000000084701788489652804F
+      },
+      {
+        +0.4998283015377052440619821F,-0.0000077326874018139165278F,
+        -0.0000001859434346391019483F,-0.0000000342227331225284434F
+      },
+      {
+        +0.4997860672041459784153972F,+0.0000064258732348099073471F,
+        +0.0000001483085835788009634F,+0.0000000263634466317491599F
+      },
+      {
+        +0.4997348201514046905913347F,-0.0000080705958338840041262F,
+        -0.0000012963274322268743507F,-0.0000005082386609530270635F
+      }
+    }
+  },
+  /*Cb channel filters at half resolution.*/
+  {
+    /*Contrast level 0 filters.*/
+    {
+      {
+        +0.4602086625268231867558200F,+0.0154644101646652411263805F,
+        +0.0017139680661844658524778F,+0.0007466224261652644900861F
+      },
+      {
+        +0.4203147358444114800590796F,-0.0153576587604778470874667F,
+        -0.0002193317653509145798759F,-0.0000293024896882381180032F
+      },
+      {
+        +0.3936824926826040793592654F,+0.0090546142646650024793376F,
+        +0.0000271981448294032643288F,+0.0000028520968546003849985F
+      },
+      {
+        +0.3656388142886505265849451F,-0.0062728057224575783576426F,
+        -0.0000229109237204130183061F,+0.0000050338770173233405873F
+      },
+      {
+        +0.3392500264538516607792928F,+0.0044399735298648775050356F,
+        +0.0000183308323441815770936F,+0.0000027524756651677612665F
+      },
+      {
+        +0.3144590386416039051731275F,-0.0034410259141278900368865F,
+        -0.0000537025101106421577212F,-0.0000050849766445565794187F
+      },
+      {
+        +0.2918304760154632471191860F,+0.0024638672926468457857752F,
+        +0.0000472080766446111824868F,+0.0000083739749129400848558F
+      },
+      {
+        +0.2699936349490731912759145F,-0.0026616819969186894696833F,
+        -0.0004059940385696034735596F,-0.0001558329947118572704652F
+      }
+    },
+    /*Contrast level 1 filters.*/
+    {
+      {
+        +0.4781615085884826643614076F,+0.0086926110131892875970694F,
+        +0.0008643706989259012513083F,+0.0003751101743641625449466F
+      },
+      {
+        +0.4553496839535168261292597F,-0.0094487315134822169593320F,
+        -0.0001166235533015845874088F,-0.0000140081971928498450576F
+      },
+      {
+        +0.4394739520269050903067409F,+0.0060756761788154593079136F,
+        +0.0000177467260284247707505F,+0.0000020379596196937894010F
+      },
+      {
+        +0.4216018120739419283715677F,-0.0045252927687756908797789F,
+        -0.0000200512127055128185288F,+0.0000026443219136367930252F
+      },
+      {
+        +0.4036527395526329220487582F,+0.0034038308211054510432625F,
+        +0.0000156547693173164447324F,+0.0000023906039343116392064F
+      },
+      {
+        +0.3856583774696092370426470F,-0.0027975648503294914953843F,
+        -0.0000485187662361873521294F,-0.0000059794524511424401126F
+      },
+      {
+        +0.3682790881502632229782535F,+0.0020835009412891406649360F,
+        +0.0000414545852249780631010F,+0.0000073551312341149776368F
+      },
+      {
+        +0.3504823381563014206285800F,-0.0023245622127997115149989F,
+        -0.0003580271056274965694663F,-0.0001382211213773269482905F
+      }
+    },
+    /*Contrast level 2 filters.*/
+    {
+      {
+        +0.4906477859441781275151584F,+0.0037824671969380191383081F,
+        +0.0003478083577686764070978F,+0.0001505152822959150151708F
+      },
+      {
+        +0.4806278681534560948129808F,-0.0043717135806460331523549F,
+        -0.0000500855122094850846079F,-0.0000055960073257212778543F
+      },
+      {
+        +0.4734921247384216158593517F,+0.0029813011626340811185965F,
+        +0.0000091368455226524458512F,+0.0000011218339131127151912F
+      },
+      {
+        +0.4650586901118646254715827F,-0.0023448450933404494343770F,
+        -0.0000126910334944193751934F,+0.0000007747036541429312930F
+      },
+      {
+        +0.4561722239177513626984251F,+0.0018480827148408185064965F,
+        +0.0000095324075788810215797F,+0.0000014683983753382557532F
+      },
+      {
+        +0.4467855777070405820516896F,-0.0015977740464431693448444F,
+        -0.0000306793872423118341381F,-0.0000044606182934143019040F
+      },
+      {
+        +0.4372856389699626977751734F,+0.0012327172165589896351418F,
+        +0.0000255927010398500871867F,+0.0000045421711509735831212F
+      },
+      {
+        +0.4270287690541813563349649F,-0.0014237534941442383726318F,
+        -0.0002218497230922978811184F,-0.0000860857157147907237245F
+      }
+    },
+    /*Contrast level 4 filters.*/
+    {
+      {
+        +0.4971460649591666336455376F,+0.0011636399729905537447916F,
+        +0.0001026463529986448337686F,+0.0000443439754802337109184F
+      },
+      {
+        +0.4940510732579490027482905F,-0.0013879215457904354926594F,
+        -0.0000155356132537631831116F,-0.0000016900389065118308948F
+      },
+      {
+        +0.4918260770604944154271720F,+0.0009749674164589081353655F,
+        +0.0000031493379731592939307F,+0.0000003999561078445047152F
+      },
+      {
+        +0.4891271714038635254340193F,-0.0007898209927561170018429F,
+        -0.0000048491536852577602865F,+0.0000001135143101289031343F
+      },
+      {
+        +0.4862096615978594993379147F,+0.0006385111597891724799850F,
+        +0.0000035506447732053923992F,+0.0000005490728968264281322F
+      },
+      {
+        +0.4830350565738341095389785F,-0.0005688295077240233853580F,
+        -0.0000116529508005388360943F,-0.0000018369478686018179049F
+      },
+      {
+        +0.4797342094944266333023108F,+0.0004483154263745252787916F,
+        +0.0000095871420639472317411F,+0.0000017021279368523581238F
+      },
+      {
+        +0.4760531716997873918906237F,-0.0005301129386037866080689F,
+        -0.0000833041296515965882987F,-0.0000324253810482480852423F
+      }
+    },
+    /*Contrast level 8 filters.*/
+    {
+      {
+        +0.4992444835974491068597558F,+0.0003088435876279362166281F,
+        +0.0000268779569733892417891F,+0.0000116042498986108184937F
+      },
+      {
+        +0.4984220668736984438673687F,-0.0003721105376605886175603F,
+        -0.0000041467601158370050266F,-0.0000004486458888485877789F
+      },
+      {
+        +0.4978292885293383318590088F,+0.0002638585555855297920189F,
+        +0.0000008707883622934384889F,+0.0000001117623868345653658F
+      },
+      {
+        +0.4971041132935203887832643F,-0.0002158359416585387110989F,
+        -0.0000013847094803124767368F,+0.0000000156756949140729970F
+      },
+      {
+        +0.4963136741525427386712011F,+0.0001759437344031844984403F,
+        +0.0000010049726651719525168F,+0.0000001555955914948288237F
+      },
+      {
+        +0.4954449600589856950172418F,-0.0001583577899523404405521F,
+        -0.0000033192061665273614916F,-0.0000005366863223510101579F
+      },
+      {
+        +0.4945334300806312199938475F,+0.0001257251918016510656550F,
+        +0.0000027180227895753001599F,+0.0000004826469863732972892F
+      },
+      {
+        +0.4935054054165609049853458F,-0.0001499437205014660632902F,
+        -0.0000236378241409296686122F,-0.0000092107328841456947798F
+      }
+    },
+    /*Contrast level 16 filters.*/
+    {
+      {
+        +0.4998082891290608342771407F,+0.0000784225821887767093367F,
+        +0.0000068001654637878569993F,+0.0000029353831595763431232F
+      },
+      {
+        +0.4995993942162609280366325F,-0.0000947438742531420726844F,
+        -0.0000010548637801785191399F,-0.0000001139981807388965032F
+      },
+      {
+        +0.4994487283513495134990023F,+0.0000673499430049362179983F,
+        +0.0000002236391116305261782F,+0.0000000287839074709941245F
+      },
+      {
+        +0.4992639881352125552638199F,-0.0000552367080491171106920F,
+        -0.0000003586844583628537256F,+0.0000000028994376696220573F
+      },
+      {
+        +0.4990621724709565221189678F,+0.0000451284840720293943983F,
+        +0.0000002596895744578047987F,+0.0000000402194703252865477F
+      },
+      {
+        +0.4988397692343520262170387F,-0.0000407318132483162168868F,
+        -0.0000008591626814938898862F,-0.0000001398615903289499636F
+      },
+      {
+        +0.4986058246389627468531103F,+0.0000324031698429677145158F,
+        +0.0000007026513732516271905F,+0.0000001247781641005778767F
+      },
+      {
+        +0.4983411637385160020130570F,-0.0000387374947664184600838F,
+        -0.0000061122319350186889525F,-0.0000023824033322084650407F
+      }
+    },
+    /*Contrast level 32 filters.*/
+    {
+      {
+        +0.4999518918227697228395812F,+0.0000196829210259502925928F,
+        +0.0000017051612382712894011F,+0.0000007360229095357550227F
+      },
+      {
+        +0.4998994581886274657378522F,-0.0000237957337813770248615F,
+        -0.0000002648825975177812061F,-0.0000000286180329343052322F
+      },
+      {
+        +0.4998616340735522745042374F,+0.0000169262785037985382926F,
+        +0.0000000562941480146951632F,+0.0000000072506125955771948F
+      },
+      {
+        +0.4998152285910394954093761F,-0.0000138912800753890178001F,
+        -0.0000000904840948884158553F,+0.0000000006569053684572551F
+      },
+      {
+        +0.4997645050846114544995658F,+0.0000113556814985429743562F,
+        +0.0000000654703268447273447F,+0.0000000101405530586313040F
+      },
+      {
+        +0.4997085684350353051996763F,-0.0000102567015065452848152F,
+        -0.0000002166976700434084466F,-0.0000000353365038058256193F
+      },
+      {
+        +0.4996496916819095912565274F,+0.0000081636499530921329481F,
+        +0.0000001771646242092627697F,+0.0000000314616523949115513F
+      },
+      {
+        +0.4995830317103385764809786F,-0.0000097655218729216240113F,
+        -0.0000015412181378217517645F,-0.0000006007760062033873553F
+      }
+    },
+    /*Contrast level 64 filters.*/
+    {
+      {
+        +0.4999879616215221478370268F,+0.0000049255846539969078327F,
+        +0.0000004266115348804893581F,+0.0000001841423067367882810F
+      },
+      {
+        +0.4999748400262142289385281F,-0.0000059558338066581850766F,
+        -0.0000000662940618596535339F,-0.0000000071619736813179048F
+      },
+      {
+        +0.4999653740934134060758254F,+0.0000042371546362524793879F,
+        +0.0000000140977703995967159F,+0.0000000018160990882293691F
+      },
+      {
+        +0.4999537588655347808419549F,-0.0000034779875496128436171F,
+        -0.0000000226723427446380982F,+0.0000000001599095928602632F
+      },
+      {
+        +0.4999410610317421288506523F,+0.0000028435525305817017172F,
+        +0.0000000164021520985583606F,+0.0000000025405447297687155F
+      },
+      {
+        +0.4999270557298786110678179F,-0.0000025688225646702732445F,
+        -0.0000000542947722626940048F,-0.0000000088575719125639121F
+      },
+      {
+        +0.4999123119399688786046454F,+0.0000020448752725206912492F,
+        +0.0000000443859118778854798F,+0.0000000078822671904045956F
+      },
+      {
+        +0.4998956157616588069636521F,-0.0000024464996226189751516F,
+        -0.0000003861349358219454581F,-0.0000001505205748074876969F
+      }
+    }
+  }
+};
+
+/*Distortion:
+
+  We measure distortion using Nadenau's IaCLA-2 masking model, as it performed
+   the best in his model comparisons.
+  Nadenau only used the model to predict the detection threshold for
+   distortions, and never gave an example of the bitrate savings achievable by
+   incorporating it into a visually-lossless compression system, as he did
+   with his CSF filtering and texture synthesis.
+  Thus, it is unknown on a quantifiable level how much this actually
+   contributes to performance.
+  Daly mentions that "the various visual optimization tools" when combined
+   have produced observed bit rate savings as high as 50%, though it is
+   unclear which tools he is referring to, and no reference is given.
+  Most likely he is talking about CSF filtering, point-wise masking and
+   neighborhood masking.
+
+  Unlike CSF filtering, which provides little benefit at low resolutions and
+   high contrast, neighborhood masking can provide bit rate reductions at any
+   resolution or contrast.
+
+  The IaCLA-2 masking model:
+
+  D = sum_{block coefficients i,j} (|c_{ij}'-\hat{c}_{ij}|/
+   (1+(1/(k_L^\nu N_{neighbors})) sum_{neighbors k.l} |c_{kl}'|^\nu)^
+   \epsilon)^\Beta)^{1/\Beta}
+
+  c_{ij}' = r_{csf} w_{csf} c_{ij}
+  \hat{c}_{ij} = r_{csf} w_{csf} \lfloor c_{ij}/(\Delta Q) \rfloor \Delta Q
+
+  Parameters:
+
+  r_{csf} = 1/128 (Nadenau used 1/8)
+  \epsilon = 1 (Nadenau claimed he used 0, but probably meant 1)
+  \Beta = \infty (Nadenau used 20)
+  N_\Gamma = 79-99 (Nadenau used 84)
+  k_L = 1E-4 (JPEG 2000 used 1E-4, Nadenau used 3E-6)
+  \nu = 0.2 (Nadenau estimated 0.389 and 0.477).
+
+  A detailed discussion of each parameter is given below.
+
+  r_{csf}: Coefficient scale factor.
+
+  Nadenau's explanation of r_{csf} was very brief:
+
+    Additionally, the viewing coniditions for the psycho-visual test were
+     chosen, so that the spatial frequencies affected by quantization
+     correspond to the frequencies for which the human observer is most
+     sensitive....
+    However, this way it is only guaranteed that the relative CSF-sensitivity
+     equals 1, but it needs to be expressed in terms of the dynamic range of
+     the wavelet coefficients c_{ij}.
+    This is done by setting c_{ij}' to:
+
+      c_{ij}' = r_{csf} c_{ij},
+
+     where r_{csf} is approximately 1/8.
+
+  No description of how the value 1/8 was derived is present.
+  However, the FCD of the JPEG 2000 standard gives us a hint of what a proper
+   value might be.
+  In Part II, Annex E, Section 2, it discusses the "point-wise extended
+   non-linearity" on which Nadenau's IaCLA-2 method is based.
+  There it suggests using a parameter a which would cause k_L to have an
+   equivalent value of 2^{component_bit_depth-1}*1E-4.
+  Nadenau reports, however, that the standard specifies a value of 1E-4
+   directly.
+  This makes us assume he has separated out the 2^{component_bit_depth-1}
+   part into his r_{csf} parameter.
+
+  Thus, we adopt a value of 1/(2^7) for r_{csf}.
+  The remaining discrepancy with Nadenau's value of 1/8 is likely accounted
+   for by some scaling introduced by his wavelet transform.
+  The scale factor of 2 in our DCT transform is already accounted for in our
+   CSF filter computations.
+
+  \epsilon: Threshold elevation non-linearity..
+
+  The original IaCLA model (used in JPEG 2000) also contained an exponent,
+   \epsilon, on the neighborhood threshold elevation term.
+  Nadenau found that this actually hurts performance, and in his IaCLA-2
+   model claims to set it to 0.
+  This was probably meant to be 1, since 0 would've disabled neighborhood
+   masking altogether.
+
+  \Beta: Error pooling exponent.
+
+  Again for simplicity, we use \Beta=\infty to turn the pooling into a max
+   operator, which is a close approximation for the fixed value of \Beta=20
+   used by Nadenau.
+
+  N_\Gamma: Masking neighborhood size.
+
+  Daly et al. use a causal masking neighborhood in a wavelet transform
+   \cite{DZL+00}.
+  They take all causal coefficients--those above or to the left--from the same
+   band in a 13x13 neighborhood, i.e. 84 coefficients.
+  They also talk about encroachments of the horizontal and vertical bands in
+   a wavelet decomposition on the diagonal bands, which can lead to excessive
+   horizontal and vertical masking around diagonal edges and decreased
+   diagonal masking.
+  The DCT has smaller frequency bands than wavelets, and so we can get a slight
+   improvement by moving some coefficients around in the high frequency
+   channels.
+
+  Each coefficient uses a combination of nearby coefficients in the same DCT
+   block and nearby coefficients in neighboring blocks for neighborhood
+   masking.
+  The number of coefficients in the same block is chosen to approximate the
+   octave structure of the HVS, while the number of neighboring blocks used is
+   chosen to give nearly the same number of neighbors for each masking group.
+
+  There are 9 groups for a single 8x8 DCT block:
+
+     0 1 2 3 4 5 6 7
+    +-+-+---+-------+
+  0 | |A|   |       |
+    +-+-+ D |       |
+  1 |B|C|   |       |
+    +-+-+---+   G   |
+  2 |   |   |       |
+    | E | F +-+     |
+  3 |   |   | |     |
+    +---+-+-+ +---+ |
+  4 |     |       | |
+    |     +-+     +-+
+  5 |       |       |
+    |   H   |   I   |
+  6 |       |       |
+    |       +-+     |
+  7 |         |     |
+    +---------+-----+
+
+  (no neighborhood masking is applied to the DC coefficient)
+  Groups A through C use a 9x9 neighborhood of blocks, for a total of
+   1*9*9-1=80 neighbors.
+  Groups D through F use a 5x5 neighborhood of blocks, for a total of
+   4*5*5-1=99 neighbors.
+  Groups G through I use the top, bottom, left and right neighboring blocks,
+   for a total of 16*5-1=79 neighbors.
+
+  There might be a smarter way to group these coefficients.
+  In addition, there is no reason that the groupings must form a partition,
+   but instead each coefficient could belong to multiple groups, potentially
+   increasing the total number of groups to one per coefficient.
+  One could also conceivably weight neighbors in a non-uniform manner.
+  This approach was investigated by Tran and Safranek \cite{TS96}, but too
+   little detail was reported to reproduce their results.
+  Tran's Master's thesis might contain more information, but no copy is
+   available online.
+
+  k_L: Masking dynamic range
+
+  This parameter controls the degree to which a signal can be masked.
+  We use the JPEG 2000 value.
+  See below for discussion.
+
+  \nu: Neighborhood coefficient exponent
+
+  Nadenau's estimates for \nu on observer data where observers have unlimited
+   time and can flicker back and forth between a distorted and undistorted
+   image were 0.389, with a standard deviation of 0.0142.
+  He found that values in the range of 0.4 were less likely to declare
+   homogenous regions near strong edges active than more usual values in the
+   literature, such as 2, while still classifying medium-sized coefficients as
+   active.
+  However, for observer data where observers had a limited amount of time and
+   could not flicker back and forth between the two still images, the
+   estimates grew to 0.477, with a standard deviation of 0.0171.
+
+  Unforunately, attempts to reproduce Nadenau's experiments have yielded
+   nonsense results.
+  With the small value of k_L and large value of \nu he suggests, coefficients
+   are masked by a value nearly two orders of magnitude greater than with the
+   JPEG 2000 recommended parameters.
+  Clearly some part of his description has been misinterpreted or was not
+   sufficiently described, but in any case the results are completely unusable
+   as-is.
+  Adopting the JPEG 2000 parameter values seems to give plausible results,
+   however, and so until this discrepancy can be resolved, that is what we
+   have done.
+
+  Finally, Nadenau ran the computed distortion through a Weibull fuction to
+   compute the probability of detection.
+  This function was parameterized by a base distortion, D_0, and a slope
+   value, \kappa, which he estimated from observer data.
+  The Weibull function is monotonic, and outside a narrow band around D_0 it
+   is very close to either 0 or 1, so we forgo applying it at all.
+
+  A note about point-wise masking:
+
+  Point-wise masking or self-masking or luma masking is sometimes suggested to
+   account for the HVS's decreased sensitivity in bright regions and vice
+   versa.
+  This type of masking is actually built in to our compression system since
+   we operate on gamma-pre-corrected signals with uniform quantization.
+  In effect, we are really performing non-uniform quantization on the
+   underlying linear signals.
+  The gamma exponent is not equal to the value of 3.0 generally assumed for
+   the HVS, but it is close enough that additional effort on our part would
+   not likely bring much improvement.*/
+
+/*This parameter, r_{csf}^\nu, compensates for the dyanmic range of the DCT
+   coefficients.*/
+#define OC_MASK_R_CSF_NU      (8.8388347648318440550E-2F)
+/*#define OC_MASK_R_CSF_NU      (0.37892914162759952059F)*/
+
+/*This parameter, k_L^\nu, determines the dynamic range of the neighborhood
+   masking.*/
+/*#define OC_MASK_K_L_NU        (1.7320508075688772935E-3F)*/
+#define OC_MASK_K_L_NU        (0.15848931924611134852F)
+
+/*#define OC_MASK_NU            (0.5F)*/
+#define OC_MASK_NU            (0.2F)
+
+/*The maximum half-width in blocks of a masking neighborhood.
+  This half-width is rounded up for consistency with the
+   OC_CSF_FILTER_SZ_MAX constant, so the real neighborhood width and height
+   are OC_MASK_WINDOW_SZ_MAX*2-1.*/
+#define OC_MASK_WINDOW_SZ_MAX (5)
+
+/*The number of DCT coefficient groups used for masking.*/
+#define OC_MASK_NGROUPS       (9)
+
+/*The number of DCT coefficient groups that use a full NxN neighborhood.*/
+#define OC_MASK_NFULL_GROUPS  (6)
+
+/*The half-width in blocks of each masking neighborhood, rounded down for
+   consistency with csf_filter_sizes values.*/
+static const int   OC_MASK_WINDOW_SIZES[OC_MASK_NGROUPS]={
+  4,4,4,2,2,2,1,1,1
+};
+/*The masking group that each DCT coefficient belongs to.*/
+static const int   OC_MASK_GROUP[64]={
+  9,0,3,3,6,6,6,6,
+  1,2,3,3,6,6,6,6,
+  4,4,5,5,6,6,6,6,
+  4,4,5,5,8,6,6,6,
+  7,7,7,8,8,8,8,6,
+  7,7,7,7,8,8,8,8,
+  7,7,7,7,8,8,8,8,
+  7,7,7,7,7,8,8,8
+};
+/*The weights for each coefficient masking group.
+  These terms absorb a good number of the constants in the model.*/
+static const float OC_MASK_WEIGHTS[OC_MASK_NGROUPS]={
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*80),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*80),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*80),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*99),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*99),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*99),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*79),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*79),
+  OC_MASK_R_CSF_NU/(OC_MASK_K_L_NU*79),
+};
+
+/*This constant is used to absorb noise in the CSF values of low-amplitude
+   coefficients.*/
+#define OC_CSF_NOISE_LEVEL (8)
+/*The amount that the DC coefficient of the DC transform is shifted by.*/
+#define OC_CSF_DC_SHIFT    (4096)
+
+
+
+typedef float oc_weight_block[64];
+typedef float oc_mask_block[9];
+
+
+
+/*Scratch space used by the psychovisual model.*/
+struct oc_psych_ctx{
+  /*The CSF filter pipeline stage.*/
+  oc_enc_pipe_stage    csf_pipe;
+  /*The spatial masking pipeline stage.*/
+  oc_enc_pipe_stage    mask_pipe;
+  /*A single row of CSF-filtered coefficients (after vertical filtering).
+    This has OC_CSF_FILTER_SZ_MAX-1 blocks of padding on each side.*/
+  oc_weight_block     *csf_row;
+  /*OC_MASK_WINDOW_SZ_MAX rows of CSF-filtered coefficients (after both
+     vertical and horizontal filtering) for each plane.
+    This has no padding on either side.*/
+  oc_weight_block    **csf_weights[3];
+  /*The half-width of the CSF filters in the current filter banks, rounded
+     down.*/
+  int                  csf_filter_sizes[5][8];
+  /*The current CSF filter banks.
+    There are 5 in total:
+    0: Y channel (horizontal and vertical).
+    1: Cr channel horizontal.
+    2: Cr channel vertical.
+    3: Cb channel horizontal.
+    4: Cb channel vertical.*/
+  oc_csf_filter_bank   csf_filters[5];
+  /*Offsets used to protect against division by 0.*/
+  float                csf_offsets[3][64];
+  /*Sums of CSF-weighted masking values in each masking group over
+     OC_MASK_WINDOW_SZ_MAX*2-1 rows, with OC_MASK_WINDOW_SZ_MAX-1 blocks of
+     padding on either side.*/
+  oc_mask_block      **mask_groups[3];
+  /*Individual CSF-weighted masking values over OC_MASK_WINDOW_SZ_MAX rows.*/
+  oc_weight_block    **mask_weights[3];
+  /*The encoding context.*/
+  oc_enc_ctx          *enc;
+  /*The vertical delay for CSF filtering.*/
+  int                  vsize_max[3];
+};
+
+
+
+/*Computes a set of CSF filters to use for each plane given the current
+   expected contrast level.
+  _psych:    The psycho-visual context.
+  _contrast: The current expected contrast level.*/
+static void oc_psych_csf_filters_interpolate(oc_psych_ctx *_psych,
+ float _contrast){
+  float logc;
+  int   logc0;
+  int   logc1;
+  float alpha;
+  int   hdec;
+  int   vdec;
+  int   i;
+  int   j;
+  int   k;
+  hdec=!(_psych->enc->state.info.pixel_fmt&1);
+  vdec=!(_psych->enc->state.info.pixel_fmt&2);
+  /*Select a pair of CSF filters to interpolate over for the given contrast
+     level.
+    For contrasts in the range 0..1, we interpolate linearly.
+    For contrasts in the range 1..64, we interpolate linearly in log space.*/
+  if(_contrast<=0){
+    logc0=logc1=0;
+    alpha=0;
+  }
+  else if(_contrast<=1){
+    logc0=0;
+    logc1=1;
+    alpha=_contrast;
+  }
+  else if(_contrast<=64){
+    logc=OC_LOGF(_contrast)*OC_1_LN2+1;
+    logc0=OC_IFLOORF(logc);
+    logc1=OC_ICEILF(logc);
+    alpha=logc-logc0;
+  }
+  else{
+    logc0=logc1=7;
+    alpha=0;
+  }
+  for(i=0;i<8;i++){
+    for(j=0;j<5;j++){
+      /*Horizontal and vertical Y filter.*/
+      _psych->csf_filters[0][i][j]=OC_CSF_FILTERS[0][logc0][i][j]+
+       alpha*(OC_CSF_FILTERS[0][logc1][i][j]-OC_CSF_FILTERS[0][logc0][i][j]);
+      /*Horizontal Cb filter.*/
+      _psych->csf_filters[1][i][j]=OC_CSF_FILTERS[1+hdec][logc0][i][j]+
+       alpha*(OC_CSF_FILTERS[1+hdec][logc1][i][j]-
+       OC_CSF_FILTERS[1+hdec][logc0][i][j]);
+      /*Vertical Cb filter.*/
+      _psych->csf_filters[2][i][j]=OC_CSF_FILTERS[1+vdec][logc0][i][j]+
+       alpha*(OC_CSF_FILTERS[1+vdec][logc1][i][j]-
+       OC_CSF_FILTERS[1+vdec][logc0][i][j]);
+      /*Horizontal Cr filter.*/
+      _psych->csf_filters[3][i][j]=OC_CSF_FILTERS[3+hdec][logc0][i][j]+
+       alpha*(OC_CSF_FILTERS[3+hdec][logc1][i][j]-
+       OC_CSF_FILTERS[3+hdec][logc0][i][j]);
+      /*Vertical Cr filter.*/
+      _psych->csf_filters[4][i][j]=OC_CSF_FILTERS[3+vdec][logc0][i][j]+
+       alpha*(OC_CSF_FILTERS[3+vdec][logc1][i][j]-
+       OC_CSF_FILTERS[3+vdec][logc0][i][j]);
+    }
+    /*Find the filter length that leaves us with less than 1% error.
+      For a filter size of n, the actual number of taps is 2*n+1.*/
+    for(k=0;k<5;k++){
+      for(j=OC_CSF_FILTER_SZ_MAX-1;
+       OC_FABSF(_psych->csf_filters[k][i][0]*0.01F)>
+       OC_FABSF(_psych->csf_filters[k][i][j]);j--);
+      _psych->csf_filter_sizes[k][i]=j;
+    }
+  }
+  /*Find the offsets used to protect against division by 0.*/
+  for(k=0;k<3;k++){
+    int vfilti;
+    int hfilti;
+    vfilti=k<<1;
+    hfilti=k>0?(k<<1)-1:0;
+    for(i=0;i<8;i++)for(j=0;j<8;j++){
+      int hi;
+      int vi;
+      _psych->csf_offsets[k][i<<3|j]=0;
+      for(vi=1;vi<=_psych->csf_filter_sizes[vfilti][i];vi++){
+        for(hi=1;hi<=_psych->csf_filter_sizes[hfilti][j];hi++){
+          _psych->csf_offsets[k][i<<3|j]+=_psych->csf_filters[vfilti][i][vi]*
+           _psych->csf_filters[hfilti][j][hi];
+        }
+      }
+      _psych->csf_offsets[k][i<<3|j]*=4;
+      for(vi=1;vi<=_psych->csf_filter_sizes[vfilti][i];vi++){
+        _psych->csf_offsets[k][i<<3|j]+=_psych->csf_filters[vfilti][i][vi]*2*
+         _psych->csf_filters[hfilti][j][0];
+      }
+      for(hi=1;hi<=_psych->csf_filter_sizes[hfilti][j];hi++){
+        _psych->csf_offsets[k][i<<3|j]+=_psych->csf_filters[vfilti][i][0]*2*
+         _psych->csf_filters[hfilti][j][hi];
+      }
+      _psych->csf_offsets[k][i<<3|j]+=_psych->csf_filters[vfilti][i][0]*
+       _psych->csf_filters[hfilti][j][0];
+      _psych->csf_offsets[k][i<<3|j]=OC_FABSF(_psych->csf_offsets[k][i<<3|j])*
+       (i||j?OC_CSF_NOISE_LEVEL:OC_CSF_DC_SHIFT);
+    }
+  }
+}
+
+static int oc_csf_pipe_start(oc_enc_pipe_stage *_stage){
+  oc_psych_ctx *psych;
+  int           pli;
+  psych=_stage->enc->vbr->psych;
+  oc_psych_csf_filters_interpolate(psych,_stage->enc->vbr->qscale);
+  for(pli=0;pli<3;pli++){
+    int *vsizes;
+    int  vfilti;
+    int  filti;
+    _stage->y_procd[pli]=0;
+    vfilti=pli<<1;
+    vsizes=psych->csf_filter_sizes[vfilti];
+    /*Find the number of rows we have to perform DCTs in advance.*/
+    psych->vsize_max[pli]=0;
+    for(filti=0;filti<8;filti++){
+      psych->vsize_max[pli]=OC_MAXI(psych->vsize_max[pli],vsizes[filti]);
+    }
+  }
+  return _stage->next!=NULL?(*_stage->next->pipe_start)(_stage->next):0;
+}
+
+static int oc_csf_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  oc_psych_ctx *psych;
+  int           pli;
+  psych=_stage->enc->vbr->psych;
+  for(pli=0;pli<3;pli++){
+    int y_procd;
+    int y_avail;
+    /*Compute how far we can get in complete fragment rows.*/
+    y_procd=_stage->y_procd[pli];
+    /*Add a vsize_max[pli] delay.*/
+    y_avail=(_y_avail[pli]&~7)-(psych->vsize_max[pli]<<3);
+    /*Perform CSF filtering on any newly available rows.*/
+    while(y_avail>y_procd){
+      oc_fragment_plane    *fplane;
+      oc_fragment          *frags;
+      oc_fragment_enc_info *efrags;
+      oc_weight_block      *maskw_row;
+      oc_weight_block      *csfw_row;
+      oc_csf_filter        *vfilters;
+      oc_csf_filter        *hfilters;
+      oc_mask_block        *maskg_row;
+      float                *csfw;
+      float                *maskw;
+      float                *maskg;
+      int                  *vsizes;
+      int                  *hsizes;
+      int                   fragi_end;
+      int                   fragx;
+      int                   cfragi0;
+      int                   cfragi;
+      int                   cfragj;
+      int                   mfragj;
+      int                   vfilti;
+      int                   hfilti;
+      int                   filti;
+      int                   ci;
+      int                   wi;
+      vfilti=pli<<1;
+      vfilters=psych->csf_filters[vfilti];
+      vsizes=psych->csf_filter_sizes[vfilti];
+      hfilti=(pli<<1)-(pli>0);
+      hfilters=psych->csf_filters[hfilti];
+      hsizes=psych->csf_filter_sizes[hfilti];
+      frags=psych->enc->state.frags;
+      efrags=psych->enc->frinfo;
+      fplane=psych->enc->state.fplanes+pli;
+      fragi_end=fplane->froffset+fplane->nfrags;
+      cfragi0=fplane->froffset+(y_procd>>3)*fplane->nhfrags;
+      /*First, the vertical filter.*/
+      for(fragx=0,cfragi=cfragi0;fragx<fplane->nhfrags;fragx++,cfragi++){
+        int fragi_off;
+        csfw=psych->csf_row[fragx+OC_CSF_FILTER_SZ_MAX-1];
+        for(ci=0;ci<64;ci++){
+          filti=ci>>3;
+          csfw[ci]=vfilters[filti][0]*efrags[cfragi].dct_coeffs[ci];
+          fragi_off=fplane->nhfrags;
+          for(wi=vsizes[filti];wi>0;wi--){
+            int coeffs;
+            cfragj=cfragi-fragi_off;
+            coeffs=cfragj>=fplane->froffset?efrags[cfragj].dct_coeffs[ci]:0;
+            cfragj=cfragi+fragi_off;
+            if(cfragj<fragi_end)coeffs+=efrags[cfragj].dct_coeffs[ci];
+            csfw[ci]+=0.5F*vfilters[filti][wi]*coeffs;
+            fragi_off+=fplane->nhfrags;
+          }
+        }
+      }
+      /*Next, the horizontal filtering.*/
+      maskg_row=psych->mask_groups[pli][OC_MASK_WINDOW_SZ_MAX-1<<1];
+      maskw_row=psych->mask_weights[pli][OC_MASK_WINDOW_SZ_MAX-1];
+      csfw_row=psych->csf_weights[pli][OC_MASK_WINDOW_SZ_MAX-1];
+      memset(maskg_row[0],0,sizeof(maskg_row[0])*(
+       fplane->nhfrags+(OC_MASK_WINDOW_SZ_MAX-1<<1)));
+      for(fragx=0,cfragi=cfragi0;fragx<fplane->nhfrags;fragx++,cfragi++){
+        csfw=csfw_row[fragx];
+        if(frags[cfragi].invalid)memset(csfw,0,sizeof(oc_weight_block));
+        else{
+          cfragj=fragx+OC_CSF_FILTER_SZ_MAX-1;
+          mfragj=fragx+OC_MASK_WINDOW_SZ_MAX-1;
+          for(ci=0;ci<64;ci++){
+            filti=ci&7;
+            csfw[ci]=hfilters[filti][0]*psych->csf_row[cfragj][ci];
+            for(wi=hsizes[filti];wi>0;wi--){
+              csfw[ci]+=0.5F*hfilters[filti][wi]*(
+               psych->csf_row[cfragj-wi][ci]+psych->csf_row[cfragj+wi][ci]);
+            }
+            csfw[ci]=OC_FABSF(csfw[ci]);
+          }
+          maskw=maskw_row[fragx];
+          maskg=maskg_row[mfragj];
+          for(ci=1;ci<64;ci++){
+            maskw[ci]=OC_POWF(csfw[ci],OC_MASK_NU);
+            maskg[OC_MASK_GROUP[ci]]+=maskw[ci];
+          }
+        }
+      }
+      y_procd+=8;
+      _stage->y_procd[pli]=y_procd;
+      if(_stage->next!=NULL){
+        int ret;
+        ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+        if(ret<0)return ret;
+      }
+    }
+  }
+  return 0;
+}
+
+static int oc_csf_pipe_end(oc_enc_pipe_stage *_stage){
+  oc_psych_ctx *psych;
+  int           pli;
+  int           ret;
+  int           y_avail[3];
+  psych=_stage->enc->vbr->psych;
+  for(pli=0;pli<3;pli++){
+    y_avail[pli]=_stage->enc->state.input[pli].height+
+    (psych->vsize_max[pli]<<3);
+  }
+  ret=oc_csf_pipe_process(_stage,y_avail);
+  if(ret<0)return ret;
+  return _stage->next!=NULL?(*_stage->next->pipe_end)(_stage->next):0;
+}
+
+/*Initialize the CSF filter stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_csf_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_csf_pipe_start;
+  _stage->pipe_proc=oc_csf_pipe_process;
+  _stage->pipe_end=oc_csf_pipe_end;
+}
+
+
+static int oc_mask_pipe_start(oc_enc_pipe_stage *_stage){
+  oc_psych_ctx *psych;
+  int           pli;
+  psych=_stage->enc->vbr->psych;
+  for(pli=0;pli<3;pli++){
+    oc_fragment_plane *fplane;
+    int                rowi;
+    _stage->y_procd[pli]=-(OC_MASK_WINDOW_SZ_MAX-1)<<3;
+    fplane=psych->enc->state.fplanes+pli;
+    /*Just clear out the mask group weights for the rows above the image.*/
+    for(rowi=OC_MASK_WINDOW_SZ_MAX-1;rowi<(OC_MASK_WINDOW_SZ_MAX-1<<1);rowi++){
+      memset(psych->mask_groups[pli][rowi][0],0,
+       sizeof(oc_mask_block)*(fplane->nhfrags+(OC_MASK_WINDOW_SZ_MAX-1<<1)));
+    }
+  }
+  return 0;
+}
+
+static int oc_mask_pipe_process(oc_enc_pipe_stage *_stage,int _y_avail[3]){
+  static const int o=OC_MASK_WINDOW_SZ_MAX-1;
+  oc_psych_ctx *psych;
+  int           pli;
+  psych=_stage->enc->vbr->psych;
+  for(pli=0;pli<3;pli++){
+    int y_procd;
+    int y_avail;
+    /*Compute how far we can get in complete fragment rows.*/
+    y_procd=_stage->y_procd[pli];
+    /*Add an (OC_MASK_WINDOW_SZ_MAX-1) delay.*/
+    y_avail=(_y_avail[pli]&~7)-(o<<3);
+    /*Perform CSF filtering on any newly available rows.*/
+    while(y_avail>y_procd){
+      oc_weight_block  *csfw_row;
+      oc_weight_block  *maskw_row;
+      oc_mask_block   **mask_groups;
+      oc_mask_block    *maskg_row;
+      int               rowi;
+      mask_groups=psych->mask_groups[pli];
+      if(y_procd>0){
+        oc_fragment_plane    *fplane;
+        oc_fragment_enc_info *efrag;
+        oc_mask_block         group_sums;
+        float                *csf_offset;
+        float                *csfw;
+        float                *maskw;
+        float                 fscale;
+        float                 pscale;
+        int                   fragx;
+        int                   mfragi;
+        int                   mfragj;
+        int                   qti;
+        int                   gi;
+        int                   wi;
+        int                   wj;
+        int                   ci;
+        pscale=OC_YCbCr_SCALE[psych->enc->state.info.colorspace][pli];
+        csf_offset=psych->csf_offsets[pli];
+        maskw_row=psych->mask_weights[pli][0];
+        csfw_row=psych->csf_weights[pli][0];
+        for(gi=0;gi<OC_MASK_NFULL_GROUPS;gi++){
+          group_sums[gi]=0;
+          for(wi=o-OC_MASK_WINDOW_SIZES[gi];wi<=o+OC_MASK_WINDOW_SIZES[gi];wi++){
+            for(wj=o;wj<o+OC_MASK_WINDOW_SIZES[gi];wj++){
+              group_sums[gi]+=mask_groups[wi][wj][gi];
+            }
+          }
+        }
+        fplane=psych->enc->state.fplanes+pli;
+        mfragi=fplane->froffset+(y_procd>>3)*fplane->nhfrags;
+        for(fragx=0;fragx<fplane->nhfrags;fragx++,mfragi++){
+          /*Add the parts of the group neighborhoods that are new.*/
+          mfragj=fragx+OC_MASK_WINDOW_SZ_MAX-1;
+          for(gi=0;gi<OC_MASK_NFULL_GROUPS;gi++){
+            wj=OC_MASK_WINDOW_SIZES[gi];
+            for(wi=o-wj;wi<=o+wj;wi++){
+              group_sums[gi]+=mask_groups[wi][mfragj+wj][gi];
+            }
+          }
+          /*These groups are so small it is not worth incremental updates.*/
+          for(;gi<OC_MASK_NGROUPS;gi++){
+            group_sums[gi]=mask_groups[o][mfragj][gi]+
+             mask_groups[o-1][mfragj][gi]+mask_groups[o+1][mfragj][gi]+
+             mask_groups[o][mfragj-1][gi]+mask_groups[o][mfragj+1][gi];
+          }
+          /*Mask the coefficients in this block.*/
+          /*An offset is added to the numerator and denominator to prevent
+             against division by zero.
+            In effect, this is like a small addition of noise to the signal, but
+             it should be well below the visual threshold.
+            This is the best solution I could come up with to handle the problem
+             of 0's in the intra DCT coefficients that, because of motion
+             compensation, are not 0 in the inter DCT coefficients and thus need
+             a valid weight.
+            The DC coefficient has a different offset added than the others,
+             because the pixel values have 128 subtracted from them before the
+             DCT is performed, which offsets the DC coefficient by 4096.*/
+          efrag=psych->enc->frinfo+mfragi;
+          csfw=psych->csf_row[fragx];
+          maskw=maskw_row[fragx];
+          /*Compute the scaling value for this fragment.*/
+          fscale=pscale*efrag->imp_weight/psych->enc->vbr->qscale;
+          /*The DC coefficient is not masked.*/
+          efrag->tols[0]=(ogg_uint16_t)OC_MINI(65535,(int)(
+           (OC_CSF_DC_SHIFT+abs(efrag->dct_coeffs[0]))/
+           (fscale*(csf_offset[0]+csfw[0]))));
+          psych->enc->vbr->dc_tol_mins[pli]=(unsigned)OC_MINI(
+           psych->enc->vbr->dc_tol_mins[pli],efrag->tols[0]);
+          /*The remaining coefficients are masked.*/
+          for(ci=1;ci<64;ci++){
+            float mask;
+            gi=OC_MASK_GROUP[ci];
+            mask=group_sums[gi]-maskw[ci];
+            efrag->tols[ci]=(ogg_uint16_t)OC_MINI(65535,(int)(
+             ((OC_CSF_NOISE_LEVEL+abs(efrag->dct_coeffs[ci]))*
+             (1+OC_MASK_WEIGHTS[gi]*mask))/
+             (fscale*(csf_offset[ci]+csfw[ci]))));
+          }
+          /*Select minimum qi values for each quantizer type.*/
+          for(qti=2;qti-->0;){
+            unsigned qmin;
+            int      qi_min;
+            /*This is the minimum quantizer Theora allows.
+              Don't inflate the qi unnecessarily if we have a tolerance less
+               than this.*/
+            qmin=OC_AC_QUANT_MIN[qti];
+            qi_min=qti?0:efrag->qi_min[1];
+            for(ci=0;qi_min<63;qi_min++){
+              while(psych->enc->state.dequant_tables[qti][pli][qi_min][ci]<=
+               OC_MAXI(2U*efrag->tols[ci],qmin)&&++ci<64);
+              if(ci==64)break;
+            }
+            efrag->qi_min[qti]=(unsigned char)qi_min;
+          }
+  #if 0
+          /*Now undo all the work we did above and just use a constant quantizer
+             value for testing purposes.*/
+          efrag->qi_min[0]=efrag->qi_min[1]=_psych->enc->state.info.quality;
+          for(ci=0;ci<64;ci++){
+            efrag->tols[ci]=OC_MINI(
+             psych->enc->state.dequant_tables[0][pli][efrag->qi_min[0]][ci],
+             psych->enc->state.dequant_tables[1][pli][efrag->qi_min[1]][ci])+
+             1>>1;
+          }
+  #endif
+          /*Remove the parts of the group neighborhoods that are old.*/
+          for(gi=0;gi<OC_MASK_NFULL_GROUPS;gi++){
+            wj=OC_MASK_WINDOW_SIZES[gi];
+            for(wi=o-wj;wi<=o+wj;wi++){
+              group_sums[gi]-=mask_groups[wi][mfragj-wj][gi];
+            }
+          }
+        }
+      }
+      /*Move the sliding windows.
+        The nice thing about these manually allocated 2D arrays is that we can
+         move rows around just by moving around the initial pointers to them,
+         not actually copying their contents.*/
+      maskg_row=mask_groups[0];
+      for(rowi=0;rowi<OC_MASK_WINDOW_SZ_MAX-1<<1;rowi++){
+        mask_groups[rowi]=mask_groups[rowi+1];
+      }
+      mask_groups[OC_MASK_WINDOW_SZ_MAX-1<<1]=maskg_row;
+      maskw_row=psych->mask_weights[pli][0];
+      csfw_row=psych->csf_weights[pli][0];
+      for(rowi=0;rowi<OC_MASK_WINDOW_SZ_MAX-1;rowi++){
+        psych->mask_weights[pli][rowi]=psych->mask_weights[pli][rowi+1];
+        psych->csf_weights[pli][rowi]=psych->csf_weights[pli][rowi+1];
+      }
+      psych->mask_weights[pli][OC_MASK_WINDOW_SZ_MAX-1]=maskw_row;
+      psych->csf_weights[pli][OC_MASK_WINDOW_SZ_MAX-1]=csfw_row;
+      y_procd+=8;
+    }
+    _stage->y_procd[pli]=y_procd;
+  }
+  return 0;
+}
+
+static int oc_mask_pipe_end(oc_enc_pipe_stage *_stage){
+  oc_psych_ctx *psych;
+  int           y_avail[3];
+  int           rowi;
+  int           pli;
+  int           ret;
+  psych=_stage->enc->vbr->psych;
+  /*To finish up this stage, we need to keep the sliding windows sliding, so
+     we make a separate call to pipe_process() for each row.*/
+  for(pli=0;pli<3;pli++)y_avail[pli]=_stage->enc->state.input[pli].height;
+  for(rowi=OC_MASK_WINDOW_SZ_MAX-1;rowi-->0;){
+    for(pli=0;pli<3;pli++){
+      oc_fragment_plane *fplane;
+      fplane=psych->enc->state.fplanes+pli;
+      /*Just clear out the mask group weights for the rows below the image.*/
+      memset(psych->mask_groups[pli][OC_MASK_WINDOW_SZ_MAX-1<<1][0],0,
+       sizeof(oc_mask_block)*(fplane->nhfrags+(OC_MASK_WINDOW_SZ_MAX-1<<1)));
+      y_avail[pli]+=8;
+    }
+    ret=oc_mask_pipe_process(_stage,y_avail);
+    if(ret<0)return ret;
+  }
+  /*Because dc_tol_mins[] is not complete until each plane has been completely
+     processed, we wait until then to execute the next pipeline stage.*/
+  if(_stage->next!=NULL){
+    ret=(*_stage->next->pipe_start)(_stage->next);
+    if(ret<0)return ret;
+    ret=(*_stage->next->pipe_proc)(_stage->next,_stage->y_procd);
+    if(ret<0)return ret;
+    return (*_stage->next->pipe_end)(_stage->next);
+  }
+  return 0;
+}
+
+/*Initialize the spatial masking stage of the pipeline.
+  _enc: The encoding context.*/
+static void oc_mask_pipe_init(oc_enc_pipe_stage *_stage,oc_enc_ctx *_enc){
+  _stage->enc=_enc;
+  _stage->next=NULL;
+  _stage->pipe_start=oc_mask_pipe_start;
+  _stage->pipe_proc=oc_mask_pipe_process;
+  _stage->pipe_end=oc_mask_pipe_end;
+}
+
+#if 0
+static void oc_psych_scan_plane(oc_psych_ctx *_psych,int _pli){
+  oc_csf_filter        *vfilters;
+  oc_csf_filter        *hfilters;
+  oc_fragment_plane    *fplane;
+  oc_fragment          *frags;
+  oc_fragment_enc_info *efrags;
+  oc_fragment_enc_info *efrag;
+  oc_mask_block        *maskg_row;
+  oc_weight_block      *maskw_row;
+  oc_weight_block      *csfw_row;
+  float                *csfw;
+  float                *maskw;
+  float                *maskg;
+  float                *csf_offset;
+  float                 pscale;
+  float                 fscale;
+  int                  *vsizes;
+  int                  *hsizes;
+  int                   vfilti;
+  int                   hfilti;
+  int                   filti;
+  int                   vsize_max;
+  int                   ystride;
+  int                   fragx;
+  int                   fragy;
+  int                   fragy_end;
+  int                   fragi_end;
+  int                   dfragi;
+  int                   cfragi;
+  int                   cfragj;
+  int                   mfragi;
+  int                   mfragj;
+  int                   qti;
+  int                   i;
+  int                   j;
+  int                   k;
+  csf_offset=_psych->csf_offsets[_pli];
+  /*Initialize the minimum psychovisual tolerance for the DC coefficient.*/
+  _psych->enc->vbr->dc_tol_mins[_pli]=32767;
+  /*Select the filter sets we're going to use.*/
+  vfilti=_pli<<1;
+  hfilti=_pli>0?(_pli<<1)-1:0;
+  vfilters=_psych->csf_filters[vfilti];
+  vsizes=_psych->csf_filter_sizes[vfilti];
+  hfilters=_psych->csf_filters[hfilti];
+  hsizes=_psych->csf_filter_sizes[hfilti];
+  /*Find the number of rows we have to perform DCTs in advance.*/
+  vsize_max=0;
+  for(i=0;i<8;i++)if(vsizes[i]>vsize_max)vsize_max=vsizes[i];
+  fplane=_psych->enc->state.fplanes+_pli;
+  frags=_psych->enc->state.frags;
+  efrags=_psych->enc->frinfo;
+  ystride=_psych->enc->state.input[_pli].ystride;
+  pscale=OC_YCbCr_SCALE[_psych->enc->state.info.colorspace][_pli];
+  /*Clear out the mask group weights for the rows above the image.*/
+  for(i=(OC_MASK_WINDOW_SZ_MAX-2<<1)-vsize_max;i<OC_MASK_WINDOW_SZ_MAX-1<<1;
+   i++){
+    memset(_psych->mask_groups[i][0],0,sizeof(oc_mask_block)*(
+     fplane->nhfrags+(OC_MASK_WINDOW_SZ_MAX-1<<1)));
+  }
+  /*Run each of the filters over the rows, with a suitable delay between
+     each.*/
+  fragy_end=fplane->nvfrags+vsize_max+OC_MASK_WINDOW_SZ_MAX-1;
+  fragi_end=fplane->froffset+fplane->nfrags;
+  dfragi=cfragi=mfragi=fplane->froffset;
+  for(fragy=0;fragy<fragy_end;fragy++){
+    /*Perform DCTs.*/
+    /*TODO: Move this out of here.
+      Yes, this is the first place it's needed, but it's needed in other
+       places too and conceptually does not belong to the psychovisual
+       model.*/
+    if(fragy<fplane->nvfrags){
+      for(fragx=0;fragx<fplane->nhfrags;fragx++,dfragi++){
+        if(frags[dfragi].invalid)continue;
+        oc_enc_frag_intra_fdct(_psych->enc,
+         frags+dfragi,efrags[dfragi].dct_coeffs,ystride,OC_FRAME_IO);
+      }
+    }
+    /*After a vsize_max delay, perform CSF filtering.*/
+    if(fragy>=vsize_max&&fragy<fplane->nvfrags+vsize_max){
+      int chfragi;
+      /*First, the vertical filter.*/
+      for(fragx=0,chfragi=cfragi;fragx<fplane->nhfrags;fragx++,chfragi++){
+        int fragi_off;
+        csfw=_psych->csf_row[fragx+OC_CSF_FILTER_SZ_MAX-1];
+        for(i=0;i<64;i++){
+          filti=i>>3;
+          csfw[i]=vfilters[filti][0]*efrags[chfragi].dct_coeffs[i];
+          fragi_off=fplane->nhfrags;
+          for(j=vsizes[filti];j>0;j--){
+            int coeffs;
+            int cvfragi;
+            cvfragi=chfragi-fragi_off;
+            coeffs=cvfragi>=fplane->froffset?efrags[cvfragi].dct_coeffs[i]:0;
+            cvfragi=chfragi+fragi_off;
+            if(cvfragi<fragi_end)coeffs+=efrags[cvfragi].dct_coeffs[i];
+            csfw[i]+=0.5F*vfilters[filti][j]*coeffs;
+            fragi_off+=fplane->nhfrags;
+          }
+        }
+      }
+      /*Next, the horizontal filtering.*/
+      maskg_row=_psych->mask_groups[OC_MASK_WINDOW_SZ_MAX-1<<1];
+      maskw_row=_psych->mask_weights[OC_MASK_WINDOW_SZ_MAX-1];
+      csfw_row=_psych->csf_weights[OC_MASK_WINDOW_SZ_MAX-1];
+      memset(maskg_row[0],0,sizeof(maskg_row[0])*(
+       fplane->nhfrags+(OC_MASK_WINDOW_SZ_MAX-1<<1)));
+      for(fragx=0;fragx<fplane->nhfrags;fragx++,cfragi++){
+        csfw=csfw_row[fragx];
+        if(frags[cfragi].invalid)memset(csfw,0,sizeof(oc_weight_block));
+        else{
+          cfragj=fragx+OC_CSF_FILTER_SZ_MAX-1;
+          mfragj=fragx+OC_MASK_WINDOW_SZ_MAX-1;
+          for(i=0;i<64;i++){
+            filti=i&7;
+            csfw[i]=hfilters[filti][0]*_psych->csf_row[cfragj][i];
+            for(j=hsizes[filti];j>0;j--){
+              csfw[i]+=0.5F*hfilters[filti][j]*(
+               _psych->csf_row[cfragj-j][i]+_psych->csf_row[cfragj+j][i]);
+            }
+            csfw[i]=OC_FABSF(csfw[i]);
+          }
+          maskw=maskw_row[fragx];
+          maskg=maskg_row[mfragj];
+          for(i=1;i<64;i++){
+            maskw[i]=OC_POWF(csfw[i],OC_MASK_NU);
+            maskg[OC_MASK_GROUP[i]]+=maskw[i];
+          }
+        }
+      }
+    }
+    else{
+      /*Clear out the mask group weights for the rows below the image.*/
+      memset(_psych->mask_groups[OC_MASK_WINDOW_SZ_MAX-1<<1][0],0,
+       sizeof(oc_mask_block)*(fplane->nhfrags+(OC_MASK_WINDOW_SZ_MAX-1<<1)));
+    }
+    /*After an additional OC_MASK_WINDOW_SZ_MAX delay, perform neighborhood
+       masking.*/
+    if(fragy>=vsize_max+OC_MASK_WINDOW_SZ_MAX-1){
+      static const int o=OC_MASK_WINDOW_SZ_MAX-1;
+      oc_mask_block group_sums;
+      for(i=0;i<OC_MASK_NFULL_GROUPS;i++){
+        group_sums[i]=0;
+        for(j=o-OC_MASK_WINDOW_SIZES[i];j<=o+OC_MASK_WINDOW_SIZES[i];j++){
+          for(k=o;k<o+OC_MASK_WINDOW_SIZES[i];k++){
+            group_sums[i]+=_psych->mask_groups[j][k][i];
+          }
+        }
+      }
+      maskw_row=_psych->mask_weights[0];
+      for(fragx=0;fragx<fplane->nhfrags;fragx++,mfragi++){
+        /*Add the parts of the group neighborhoods that are new.*/
+        mfragj=fragx+OC_MASK_WINDOW_SZ_MAX-1;
+        for(i=0;i<OC_MASK_NFULL_GROUPS;i++){
+          k=OC_MASK_WINDOW_SIZES[i];
+          for(j=o-k;j<=o+k;j++){
+            group_sums[i]+=_psych->mask_groups[j][mfragj+k][i];
+          }
+        }
+        /*These groups are so small it is not worth incremental updates.*/
+        for(;i<OC_MASK_NGROUPS;i++){
+          group_sums[i]=_psych->mask_groups[o][mfragj][i]+
+           _psych->mask_groups[o-1][mfragj][i]+
+           _psych->mask_groups[o+1][mfragj][i]+
+           _psych->mask_groups[o][mfragj-1][i]+
+           _psych->mask_groups[o][mfragj+1][i];
+        }
+        /*Mask the coefficients in this block.*/
+        /*An offset is added to the numerator and denominator to prevent
+           against division by zero.
+          In effect, this is like a small addition of noise to the signal, but
+           it should be well below the visual threshold.
+          This is the best solution I could come up with to handle the problem
+           of 0's in the inter DCT coefficients that, because of motion
+           compensation, are not 0 in the intra DCT coefficients and thus
+           need a valid weight.
+          The DC coefficient has a different offset added than the others,
+           because the pixel values have 128 subtracted from them before the
+           DCT is performed, which offsets the DC coefficient by 4096.*/
+        efrag=efrags+mfragi;
+        csfw=_psych->csf_weights[0][fragx];
+        maskw=maskw_row[fragx];
+        /*Compute the scaling value for this fragment.*/
+        fscale=pscale*efrag->imp_weight/_psych->enc->vbr->qscale;
+        /*The DC coefficient is not masked.*/
+        efrag->tols[0]=(ogg_uint16_t)OC_MINI(65535,(int)(
+         (OC_CSF_DC_SHIFT+abs(efrag->dct_coeffs[0]))/
+         (fscale*(csf_offset[0]+csfw[0]))));
+        _psych->enc->vbr->dc_tol_mins[_pli]=(unsigned)OC_MINI(
+         _psych->enc->vbr->dc_tol_mins[_pli],efrag->tols[0]);
+        /*The remaining coefficients are masked.*/
+        for(i=1;i<64;i++){
+          float mask;
+          int   groupi;
+          groupi=OC_MASK_GROUP[i];
+          mask=group_sums[groupi]-maskw[i];
+          efrag->tols[i]=(ogg_uint16_t)OC_MINI(65535,(int)(
+           ((OC_CSF_NOISE_LEVEL+abs(efrag->dct_coeffs[i]))*
+           (1+OC_MASK_WEIGHTS[groupi]*mask))/
+           (fscale*(csf_offset[i]+csfw[i]))));
+        }
+        /*Select minimum qi values for each quantizer type.*/
+        for(qti=2;qti-->0;){
+          unsigned qmin;
+          int      qi_min;
+          /*This is the minimum quantizer Theora allows.
+            Don't inflate the qi unnecessarily if we have a tolerance less
+             than this.*/
+          qmin=OC_AC_QUANT_MIN[qti];
+          qi_min=qti?0:efrag->qi_min[1];
+          for(i=0;qi_min<63;qi_min++){
+            while(_psych->enc->state.dequant_tables[qti][_pli][qi_min][i]<=
+             OC_MAXI(2U*efrag->tols[i],qmin)&&++i<64);
+            if(i==64)break;
+          }
+          efrag->qi_min[qti]=(unsigned char)qi_min;
+        }
+#if 0
+        /*Now undo all the work we did above and just use a constant quantizer
+           value for testing purposes.*/
+        efrag->qi_min[0]=efrag->qi_min[1]=_psych->enc->state.info.quality;
+        for(i=0;i<64;i++){
+          efrag->tols[i]=OC_MINI(
+           _psych->enc->state.dequant_tables[0][_pli][efrag->qi_min[0]][i],
+           _psych->enc->state.dequant_tables[1][_pli][efrag->qi_min[1]][i])+
+           1>>1;
+        }
+#endif
+        /*Remove the parts of the group neighborhoods that are old.*/
+        for(i=0;i<OC_MASK_NFULL_GROUPS;i++){
+          k=OC_MASK_WINDOW_SIZES[i];
+          for(j=o-k;j<=o+k;j++){
+            group_sums[i]-=_psych->mask_groups[j][mfragj-k][i];
+          }
+        }
+      }
+    }
+    /*Move the sliding windows.
+      The nice thing about these manually allocated 2D arrays is that we can
+       move rows around just by moving around the initial pointers to them,
+       not actually copying their contents.*/
+    maskg_row=_psych->mask_groups[0];
+    for(i=0;i<OC_MASK_WINDOW_SZ_MAX-1<<1;i++){
+      _psych->mask_groups[i]=_psych->mask_groups[i+1];
+    }
+    _psych->mask_groups[OC_MASK_WINDOW_SZ_MAX-1<<1]=maskg_row;
+    maskw_row=_psych->mask_weights[0];
+    csfw_row=_psych->csf_weights[0];
+    for(i=0;i<OC_MASK_WINDOW_SZ_MAX-1;i++){
+      _psych->mask_weights[i]=_psych->mask_weights[i+1];
+      _psych->csf_weights[i]=_psych->csf_weights[i+1];
+    }
+    _psych->mask_weights[OC_MASK_WINDOW_SZ_MAX-1]=maskw_row;
+    _psych->csf_weights[OC_MASK_WINDOW_SZ_MAX-1]=csfw_row;
+  }
+}
+#endif
+
+
+oc_psych_ctx *oc_psych_alloc(oc_enc_ctx *_enc){
+  oc_psych_ctx *psych;
+  int           nhfrags;
+  int           pli;
+  nhfrags=_enc->state.fplanes[0].nhfrags;
+  psych=(oc_psych_ctx *)_ogg_malloc(sizeof(*psych));
+  psych->csf_row=(oc_weight_block *)_ogg_calloc(
+   (nhfrags+(OC_CSF_FILTER_SZ_MAX-1<<1)),sizeof(psych->csf_row[0]));
+  for(pli=0;pli<3;pli++){
+    nhfrags=_enc->state.fplanes[pli].nhfrags;
+    psych->csf_weights[pli]=(oc_weight_block **)oc_malloc_2d(
+     OC_MASK_WINDOW_SZ_MAX,nhfrags,sizeof(oc_weight_block));
+    psych->mask_groups[pli]=(oc_mask_block **)oc_malloc_2d(
+     (OC_MASK_WINDOW_SZ_MAX<<1)-1,nhfrags+(OC_MASK_WINDOW_SZ_MAX-1<<1),
+     sizeof(oc_mask_block));
+    psych->mask_weights[pli]=(oc_weight_block **)oc_malloc_2d(
+     OC_MASK_WINDOW_SZ_MAX,nhfrags,sizeof(oc_weight_block));
+  }
+  psych->enc=_enc;
+  /*Initialize our pipeline stages.*/
+  oc_csf_pipe_init(&psych->csf_pipe,_enc);
+  oc_mask_pipe_init(&psych->mask_pipe,_enc);
+  psych->csf_pipe.next=&psych->mask_pipe;
+  return psych;
+}
+
+void oc_psych_free(oc_psych_ctx *_psych){
+  if(_psych!=NULL){
+    int pli;
+    _ogg_free(_psych->csf_row);
+    for(pli=0;pli<3;pli++){
+      oc_free_2d((void **)_psych->csf_weights[pli]);
+      oc_free_2d((void **)_psych->mask_groups[pli]);
+      oc_free_2d((void **)_psych->mask_weights[pli]);
+    }
+    _ogg_free(_psych);
+  }
+}
+
+oc_enc_pipe_stage *oc_psych_prepend_to_pipe(oc_psych_ctx *_psych,
+ oc_enc_pipe_stage *_next){
+  _psych->mask_pipe.next=_next;
+  return &_psych->csf_pipe;
+}
+
+#if 0
+void oc_psych_scan(oc_psych_ctx *_psych,float _contrast){
+  int pli;
+  oc_psych_csf_filters_interpolate(_psych,_contrast);
+  for(pli=0;pli<3;pli++)oc_psych_scan_plane(_psych,pli);
+}
+#endif

Added: trunk/theora-exp/lib/psych.h
===================================================================
--- trunk/theora-exp/lib/psych.h	                        (rev 0)
+++ trunk/theora-exp/lib/psych.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,18 @@
+#if !defined(_psych_H)
+# define _psych_H (1)
+# include "encvbr.h"
+
+/*The assumed screen resolution vs. viewing distance.
+  This is taken to be constant under the assumption that viewers will sit
+   closer to higher resolution images, and farther from lower resolution ones.
+  This value corresponds to roughly 50 cm from an 44 pixel/inch display, and
+   is measured over a 1 degree arc around the perpendicular to the display
+   surface (i.e., the maximum resolution).*/
+#define OC_PIXELS_PER_DEGREE (15)
+
+/*The weightings of each color channel for each color space.
+  These are computed such that after weighting, a value of 1.0
+   roughly corresponds to a Just Noticible Difference.*/
+extern const float OC_YCbCr_SCALE[3][3];
+
+#endif

Added: trunk/theora-exp/lib/quant.c
===================================================================
--- trunk/theora-exp/lib/quant.c	                        (rev 0)
+++ trunk/theora-exp/lib/quant.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,90 @@
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+#include "quant.h"
+
+
+
+unsigned OC_DC_QUANT_MIN[2]={4<<2,8<<2};
+unsigned OC_AC_QUANT_MIN[2]={2<<2,4<<2};
+
+
+
+/*Initializes the dequantization tables from a set of quantizer info.
+  Currently the dequantizer (and elsewhere enquantizer) tables are expected to
+   be initialized as pointing to the storage reserved for them in the
+   oc_theora_state (resp. oc_enc_ctx) structure.
+  If some tables are duplicates of others, the pointers will be adjusted to
+   point to a single copy of the tables, but the storage for them will not be
+   freed.
+  If you're concerned about the memory footprint, the obvious thing to do is
+   to move the storage out of its fixed place in the structures and allocate
+   it on demand.
+  However, a much, much better option is to only store the quantization
+   matrices being used for the current frame, and to recalculate these as the
+   qi values change between frames (this is what VP3 did).*/
+void oc_dequant_tables_init(oc_quant_table *_dequant[2][3],
+ int _pp_dc_scale[64],const th_quant_info *_qinfo){
+  int          qti;
+  int          pli;
+  for(qti=0;qti<2;qti++)for(pli=0;pli<3;pli++){
+    int qi;
+    int qri;
+    /*These simple checks help us improve cache coherency later.*/
+    if(pli>0&&memcmp(_qinfo->qi_ranges[qti]+pli-1,
+     _qinfo->qi_ranges[qti]+pli,sizeof(_qinfo->qi_ranges[qti][pli]))==0){
+      _dequant[qti][pli]=_dequant[qti][pli-1];
+      continue;
+    }
+    if(qti>0&&memcmp(_qinfo->qi_ranges[qti-1]+pli,
+     _qinfo->qi_ranges[qti]+pli,sizeof(_qinfo->qi_ranges[qti][pli]))==0){
+      _dequant[qti][pli]=_dequant[qti-1][pli];
+      continue;
+    }
+    for(qi=qri=0;qri<=_qinfo->qi_ranges[qti][pli].nranges;qri++){
+      th_quant_base base;
+      ogg_uint32_t  q;
+      int           qi_start;
+      int           qi_end;
+      int           ci;
+      memcpy(base,_qinfo->qi_ranges[qti][pli].base_matrices[qri],
+       sizeof(base));
+      qi_start=qi;
+      if(qri==_qinfo->qi_ranges[qti][pli].nranges)qi_end=qi+1;
+      else qi_end=qi+_qinfo->qi_ranges[qti][pli].sizes[qri];
+      for(;;){
+        ogg_uint32_t qfac;
+        /*In the original VP3.2 code, the rounding offset and the size of the
+           dead zone around 0 were controlled by a "sharpness" parameter.
+          The size of our dead zone is now controlled by the per-coefficient
+           quality thresholds returned by our HVS module.
+          We round down from a more accurate value when the quality of the
+           reconstruction does not fall below our threshold and it saves bits.
+          Hence, all of that VP3.2 code is gone from here, and the remaining
+           floating point code has been implemented as equivalent integer code
+           with exact precision.*/
+        /*Scale DC the coefficient from the proper table.*/
+        qfac=(ogg_uint32_t)_qinfo->dc_scale[qi]*base[0];
+        if(_pp_dc_scale!=NULL)_pp_dc_scale[qi]=(int)(qfac/160);
+        q=(qfac/100)<<2;
+        q=OC_CLAMPI(OC_DC_QUANT_MIN[qti],q,OC_QUANT_MAX);
+        _dequant[qti][pli][qi][0]=(ogg_uint16_t)q;
+        /*Now scale AC coefficients from the proper table.*/
+        for(ci=1;ci<64;ci++){
+          q=((ogg_uint32_t)_qinfo->ac_scale[qi]*base[ci]/100)<<2;
+          q=OC_CLAMPI(OC_AC_QUANT_MIN[qti],q,OC_QUANT_MAX);
+          _dequant[qti][pli][qi][ci]=(ogg_uint16_t)q;
+        }
+        if(++qi>=qi_end)break;
+        /*Interpolate the next base matrix.*/
+        for(ci=0;ci<64;ci++){
+          base[ci]=(unsigned char)(
+           (2*((qi_end-qi)*_qinfo->qi_ranges[qti][pli].base_matrices[qri][ci]+
+           (qi-qi_start)*_qinfo->qi_ranges[qti][pli].base_matrices[qri+1][ci])
+           +_qinfo->qi_ranges[qti][pli].sizes[qri])/
+           (2*_qinfo->qi_ranges[qti][pli].sizes[qri]));
+        }
+      }
+    }
+  }
+}

Added: trunk/theora-exp/lib/quant.h
===================================================================
--- trunk/theora-exp/lib/quant.h	                        (rev 0)
+++ trunk/theora-exp/lib/quant.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,28 @@
+#if !defined(_quant_H)
+# define _quant_H (1)
+# include "theora/codec.h"
+# include "ocintrin.h"
+
+typedef ogg_uint16_t   oc_quant_table[64];
+typedef oc_quant_table oc_quant_tables[64];
+
+
+
+/*Maximum scaled quantizer value.*/
+#define OC_QUANT_MAX          (1024<<2)
+
+
+
+/*Minimum scaled DC coefficient frame quantizer value for intra and inter
+   modes.*/
+extern unsigned OC_DC_QUANT_MIN[2];
+/*Minimum scaled AC coefficient frame quantizer value for intra and inter
+   modes.*/
+extern unsigned OC_AC_QUANT_MIN[2];
+
+
+
+void oc_dequant_tables_init(oc_quant_table *_dequant[2][3],
+ int _pp_dc_scale[64],const th_quant_info *_qinfo);
+
+#endif

Added: trunk/theora-exp/lib/recode.c
===================================================================
--- trunk/theora-exp/lib/recode.c	                        (rev 0)
+++ trunk/theora-exp/lib/recode.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,1246 @@
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "recode.h"
+/*For th_setup_info, packet state, idct, huffdec, dequant.*/
+#include "decint.h"
+/*For oc_huff_codes_pack, oc_state_flushheader.*/
+#include "encint.h"
+
+typedef struct th_rec_ctx oc_rec_ctx;
+typedef oc_tok_hist       oc_tok_hist_table[5];
+
+
+
+/*Reading packet statistics.*/
+#define OC_PACKET_ANALYZE    (1)
+/*Waiting for Huffman tables to be set.*/
+#define OC_PACKET_HUFFTABLES (2)
+/*Rewriting data packets.*/
+#define OC_PACKET_REWRITE    (0)
+
+
+
+struct th_rec_ctx{
+  /*Shared encoder/decoder state.*/
+  oc_theora_state      state;
+  /*The next four fields must be in the given positions in order to be
+     compatible with some encoder functions we call.*/
+  /*Whether or not packets are ready to be emitted.
+    This takes on negative values while there are remaining header packets to
+     be emitted, reaches 0 when the codec is ready for input, and goes to 1
+     when a frame has been processed and a data packet is ready.*/
+  int                  packet_state;
+  /*Buffer in which to assemble packets.*/
+  oggpack_buffer       enc_opb;
+  /*Huffman encode tables.*/
+  th_huff_code         enc_huff_codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS];
+  /*Quantization parameters.*/
+  th_quant_info        qinfo;
+  /*The previous four fields must be in the given positions in order to be
+     compatible with some encoder functions we call.*/
+  /*Buffer from which to decode packets.*/
+  oggpack_buffer       dec_opb;
+  /*Huffman decode trees.*/
+  oc_huff_node        *dec_huff_tables[TH_NHUFFMAN_TABLES];
+  /*The index of one past the last token in each plane for each coefficient.
+    The final entries are the total number of tokens for each coefficient.*/
+  int                  ti0[3][64];
+  /*The index of one past the last extra bits entry in each plane for each
+     coefficient.
+    The final entries are the total number of extra bits entries for each
+     coefficient.*/
+  int                  ebi0[3][64];
+  /*The number of outstanding EOB runs at the start of each coefficient in each
+     plane.*/
+  int                  eob_runs[3][64];
+  /*The DCT token lists.*/
+  unsigned char      **dct_tokens;
+  /*The extra bits associated with DCT tokens.*/
+  ogg_uint16_t       **extra_bits;
+  /*The DCT token counts for the last decoded frame.*/
+  oc_tok_hist          tok_hist[2][5];
+  /*The DCT token counts for all decoded frames.*/
+  oc_frame_tok_hist   *tok_hists;
+  long                 ntok_hists;
+  long                 ctok_hists;
+  /*The index of the set of token counts used for the current frame while
+     rewriting.*/
+  long                 cur_tok_histi;
+};
+
+
+
+/*The mode alphabets for the various mode coding schemes.
+  Scheme 0 uses a custom alphabet, which is not stored in this table.*/
+static const int OC_MODE_ALPHABETS[7][OC_NMODES]={
+  /*Last MV dominates */
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV_LAST2,OC_MODE_INTER_MV,
+    OC_MODE_INTER_NOMV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV_LAST2,OC_MODE_INTER_NOMV,
+    OC_MODE_INTER_MV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV,OC_MODE_INTER_MV_LAST2,
+    OC_MODE_INTER_NOMV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV,OC_MODE_INTER_NOMV,
+    OC_MODE_INTER_MV_LAST2,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,
+    OC_MODE_GOLDEN_MV,OC_MODE_INTER_MV_FOUR
+  },
+  /*No MV dominates.*/
+  {
+    OC_MODE_INTER_NOMV,OC_MODE_INTER_MV_LAST,OC_MODE_INTER_MV_LAST2,
+    OC_MODE_INTER_MV,OC_MODE_INTRA,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  {
+    OC_MODE_INTER_NOMV,OC_MODE_GOLDEN_NOMV,OC_MODE_INTER_MV_LAST,
+    OC_MODE_INTER_MV_LAST2,OC_MODE_INTER_MV,OC_MODE_INTRA,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  },
+  /*Default ordering.*/
+  {
+    OC_MODE_INTER_NOMV,OC_MODE_INTRA,OC_MODE_INTER_MV,OC_MODE_INTER_MV_LAST,
+    OC_MODE_INTER_MV_LAST2,OC_MODE_GOLDEN_NOMV,OC_MODE_GOLDEN_MV,
+    OC_MODE_INTER_MV_FOUR
+  }
+};
+
+
+
+static int oc_sb_run_unpack(oggpack_buffer *_opb){
+  long bits;
+  int ret;
+  /*Coding scheme:
+       Codeword            Run Length
+     0                       1
+     10x                     2-3
+     110x                    4-5
+     1110xx                  6-9
+     11110xxx                10-17
+     111110xxxx              18-33
+     111111xxxxxxxxxxxx      34-4129*/
+  theora_read1(_opb,&bits);
+  if(bits==0)return 1;
+  theora_read(_opb,2,&bits);
+  if((bits&2)==0)return 2+(int)bits;
+  else if((bits&1)==0){
+    theora_read1(_opb,&bits);
+    return 4+(int)bits;
+  }
+  theora_read(_opb,3,&bits);
+  if((bits&4)==0)return 6+(int)bits;
+  else if((bits&2)==0){
+    ret=10+((bits&1)<<2);
+    theora_read(_opb,2,&bits);
+    return ret+(int)bits;
+  }
+  else if((bits&1)==0){
+    theora_read(_opb,4,&bits);
+    return 18+(int)bits;
+  }
+  theora_read(_opb,12,&bits);
+  return 34+(int)bits;
+}
+
+static int oc_block_run_unpack(oggpack_buffer *_opb){
+  long bits;
+  long bits2;
+  /*Coding scheme:
+     Codeword             Run Length
+     0x                      1-2
+     10x                     3-4
+     110x                    5-6
+     1110xx                  7-10
+     11110xx                 11-14
+     11111xxxx               15-30*/
+  theora_read(_opb,2,&bits);
+  if((bits&2)==0)return 1+(int)bits;
+  else if((bits&1)==0){
+    theora_read1(_opb,&bits);
+    return 3+(int)bits;
+  }
+  theora_read(_opb,2,&bits);
+  if((bits&2)==0)return 5+(int)bits;
+  else if((bits&1)==0){
+    theora_read(_opb,2,&bits);
+    return 7+(int)bits;
+  }
+  theora_read(_opb,3,&bits);
+  if((bits&4)==0)return 11+bits;
+  theora_read(_opb,2,&bits2);
+  return 15+((bits&3)<<2)+bits2;
+}
+
+static void oc_quant_params_copy(th_quant_info *_qdst,
+ const th_quant_info *_qsrc){
+  int i;
+  memcpy(_qdst,_qsrc,sizeof(*_qdst));
+  for(i=0;i<6;i++){
+    int qti;
+    int pli;
+    int qtj;
+    int plj;
+    qti=i/3;
+    pli=i%3;
+    qtj=(i-1)/3;
+    plj=(i-1)%3;
+    if(i>0&&_qsrc->qi_ranges[qti][pli].sizes==
+     _qsrc->qi_ranges[qtj][plj].sizes){
+      _qdst->qi_ranges[qti][pli].sizes=_qdst->qi_ranges[qtj][plj].sizes;
+    }
+    else if(qti>0&&_qsrc->qi_ranges[1][pli].sizes==
+     _qsrc->qi_ranges[0][pli].sizes){
+      _qdst->qi_ranges[1][pli].sizes=_qdst->qi_ranges[0][pli].sizes;
+    }
+    else{
+      int *sizes;
+      sizes=(int *)_ogg_malloc(
+       _qsrc->qi_ranges[qti][pli].nranges*sizeof(*sizes));
+      memcpy(sizes,_qsrc->qi_ranges[qti][pli].sizes,
+       _qsrc->qi_ranges[qti][pli].nranges*sizeof(*sizes));
+      _qdst->qi_ranges[qti][pli].sizes=sizes;
+    }
+    if(i>0&&_qsrc->qi_ranges[qti][pli].base_matrices==
+     _qsrc->qi_ranges[qtj][plj].base_matrices){
+      _qdst->qi_ranges[qti][pli].base_matrices=
+       _qdst->qi_ranges[qtj][plj].base_matrices;
+    }
+    else if(qti>0&&_qsrc->qi_ranges[1][pli].base_matrices==
+     _qsrc->qi_ranges[0][pli].base_matrices){
+      _qdst->qi_ranges[1][pli].base_matrices=
+       _qdst->qi_ranges[0][pli].base_matrices;
+    }
+    else{
+      th_quant_base *base_matrices;
+      base_matrices=(th_quant_base *)_ogg_malloc(
+       (_qsrc->qi_ranges[qti][pli].nranges+1)*sizeof(*base_matrices));
+      memcpy(base_matrices,_qsrc->qi_ranges[qti][pli].base_matrices,
+       (_qsrc->qi_ranges[qti][pli].nranges+1)*sizeof(*base_matrices));
+      _qdst->qi_ranges[qti][pli].base_matrices=
+       (const th_quant_base *)base_matrices;
+    }
+  }
+}
+
+
+static int oc_rec_init(oc_rec_ctx *_rec,const th_info *_info,
+ const th_setup_info *_setup){
+  int ret;
+  ret=oc_state_init(&_rec->state,_info);
+  if(ret<0)return ret;
+  oc_huff_trees_copy(_rec->dec_huff_tables,
+   (const oc_huff_node *const *)_setup->huff_tables);
+  /*Do a deep copy of the quant params, since we will need to refer to this
+     data again (unlike in the normal decoder).*/
+  oc_quant_params_copy(&_rec->qinfo,&_setup->qinfo);
+  _rec->dct_tokens=(unsigned char **)oc_calloc_2d(64,
+   _rec->state.nfrags,sizeof(_rec->dct_tokens[0][0]));
+  _rec->extra_bits=(ogg_uint16_t **)oc_calloc_2d(64,
+   _rec->state.nfrags,sizeof(_rec->extra_bits[0][0]));
+  _rec->tok_hists=NULL;
+  _rec->ntok_hists=_rec->ctok_hists=0;
+  _rec->cur_tok_histi=0;
+  _rec->packet_state=OC_PACKET_ANALYZE;
+  oggpackB_writeinit(&_rec->enc_opb);
+  return 0;
+}
+
+static void oc_rec_clear(oc_rec_ctx *_rec){
+  _ogg_free(_rec->tok_hists);
+  oc_free_2d(_rec->extra_bits);
+  oc_free_2d(_rec->dct_tokens);
+  oc_quant_params_clear(&_rec->qinfo);
+  oc_huff_trees_clear(_rec->dec_huff_tables);
+  oggpackB_writeclear(&_rec->enc_opb);
+  oc_state_clear(&_rec->state);
+}
+
+
+static int oc_rec_frame_header_unpack(oc_rec_ctx *_rec){
+  long val;
+  /*Check to make sure this is a data packet.*/
+  theora_read1(&_rec->dec_opb,&val);
+  if(val!=0)return TH_EBADPACKET;
+  /*Read in the frame type (I or P).*/
+  theora_read1(&_rec->dec_opb,&val);
+  _rec->state.frame_type=(int)val;
+  /*Read in the current qi.*/
+  theora_read(&_rec->dec_opb,6,&val);
+  _rec->state.qis[0]=(int)val;
+  theora_read1(&_rec->dec_opb,&val);
+  if(!val)_rec->state.nqis=1;
+  else{
+    theora_read(&_rec->dec_opb,6,&val);
+    _rec->state.qis[1]=(int)val;
+    theora_read1(&_rec->dec_opb,&val);
+    if(!val)_rec->state.nqis=2;
+    else{
+      theora_read(&_rec->dec_opb,6,&val);
+      _rec->state.qis[2]=(int)val;
+      _rec->state.nqis=3;
+    }
+  }
+  if(_rec->state.frame_type==OC_INTRA_FRAME){
+    /*Keyframes have 3 unused configuration bits, holdovers from VP3 days.
+      Most of the other unused bits in the VP3 headers were eliminated.
+      I don't know why these remain.*/
+    theora_read(&_rec->dec_opb,3,&val);
+    if(val!=0)return TH_EIMPL;
+  }
+  return 0;
+}
+
+/*Mark all fragments as coded and in OC_MODE_INTRA.
+  This also builds up the coded fragment list (in coded order), and clears the
+   uncoded fragment list.
+  It does not update the coded macro block list, as that is not used when
+   decoding INTRA frames.*/
+static void oc_rec_mark_all_intra(oc_rec_ctx *_rec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  int    pli;
+  int    ncoded_fragis;
+  int    prev_ncoded_fragis;
+  prev_ncoded_fragis=ncoded_fragis=0;
+  sb=sb_end=_rec->state.sbs;
+  for(pli=0;pli<3;pli++){
+    const oc_fragment_plane *fplane;
+    fplane=_rec->state.fplanes+pli;
+    sb_end+=fplane->nsbs;
+    for(;sb<sb_end;sb++){
+      int quadi;
+      for(quadi=0;quadi<4;quadi++)if(sb->quad_valid&1<<quadi){
+        int bi;
+        for(bi=0;bi<4;bi++){
+          int fragi;
+          fragi=sb->map[quadi][bi];
+          if(fragi>=0){
+            oc_fragment *frag;
+            frag=_rec->state.frags+fragi;
+            frag->coded=1;
+            frag->mbmode=OC_MODE_INTRA;
+            _rec->state.coded_fragis[ncoded_fragis++]=fragi;
+          }
+        }
+      }
+    }
+    _rec->state.ncoded_fragis[pli]=ncoded_fragis-prev_ncoded_fragis;
+    prev_ncoded_fragis=ncoded_fragis;
+    _rec->state.nuncoded_fragis[pli]=0;
+  }
+}
+
+/*Decodes the bit flags for whether or not each super block is partially coded
+   or not.
+  Return: The number of partially coded super blocks.*/
+static int oc_rec_partial_sb_flags_unpack(oc_rec_ctx *_rec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  long   val;
+  int    flag;
+  int    npartial;
+  int    run_count;
+  theora_read1(&_rec->dec_opb,&val);
+  flag=(int)val;
+  sb=_rec->state.sbs;
+  sb_end=sb+_rec->state.nsbs;
+  run_count=npartial=0;
+  while(sb<sb_end){
+    int full_run;
+    run_count=oc_sb_run_unpack(&_rec->dec_opb);
+    full_run=run_count>=4129;
+    do{
+      sb->coded_partially=flag;
+      sb->coded_fully=0;
+      npartial+=flag;
+      sb++;
+    }
+    while(--run_count>0&&sb<sb_end);
+    if(full_run&&sb<sb_end){
+      theora_read1(&_rec->dec_opb,&val);
+      flag=(int)val;
+    }
+    else flag=!flag;
+  }
+  /*TODO: run_count should be 0 here.
+    If it's not, we should issue a warning of some kind.*/
+  return npartial;
+}
+
+/*Decodes the bit flags for whether or not each non-partially-coded super
+   block is fully coded or not.
+  This function should only be called if there is at least one
+   non-partially-coded super block.
+  Return: The number of partially coded super blocks.*/
+static void oc_rec_coded_sb_flags_unpack(oc_rec_ctx *_rec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  long   val;
+  int    flag;
+  int    run_count;
+  sb=_rec->state.sbs;
+  sb_end=sb+_rec->state.nsbs;
+  /*Skip partially coded super blocks.*/
+  for(;sb->coded_partially;sb++);
+  theora_read1(&_rec->dec_opb,&val);
+  flag=(int)val;
+  while(sb<sb_end){
+    int full_run;
+    run_count=oc_sb_run_unpack(&_rec->dec_opb);
+    full_run=run_count>=4129;
+    for(;sb<sb_end;sb++){
+      if(sb->coded_partially)continue;
+      if(run_count--<=0)break;
+      sb->coded_fully=flag;
+    }
+    if(full_run&&sb<sb_end){
+      theora_read1(&_rec->dec_opb,&val);
+      flag=(int)val;
+    }
+    else flag=!flag;
+  }
+  /*TODO: run_count should be 0 here.
+    If it's not, we should issue a warning of some kind.*/
+}
+
+static void oc_rec_coded_flags_unpack(oc_rec_ctx *_rec){
+  oc_sb *sb;
+  oc_sb *sb_end;
+  long   val;
+  int    npartial;
+  int    pli;
+  int    flag;
+  int    run_count;
+  int    ncoded_fragis;
+  int    prev_ncoded_fragis;
+  int    nuncoded_fragis;
+  int    prev_nuncoded_fragis;
+  npartial=oc_rec_partial_sb_flags_unpack(_rec);
+  if(npartial<_rec->state.nsbs)oc_rec_coded_sb_flags_unpack(_rec);
+  if(npartial>0){
+    theora_read1(&_rec->dec_opb,&val);
+    flag=!(int)val;
+  }
+  else flag=0;
+  run_count=0;
+  prev_ncoded_fragis=ncoded_fragis=prev_nuncoded_fragis=nuncoded_fragis=0;
+  sb=sb_end=_rec->state.sbs;
+  for(pli=0;pli<3;pli++){
+    const oc_fragment_plane *fplane;
+    fplane=_rec->state.fplanes+pli;
+    sb_end+=fplane->nsbs;
+    for(;sb<sb_end;sb++){
+      int quadi;
+      for(quadi=0;quadi<4;quadi++)if(sb->quad_valid&1<<quadi){
+        int bi;
+        for(bi=0;bi<4;bi++){
+          int fragi;
+          fragi=sb->map[quadi][bi];
+          if(fragi>=0){
+            oc_fragment *frag;
+            frag=_rec->state.frags+fragi;
+            if(sb->coded_fully)frag->coded=1;
+            else if(!sb->coded_partially)frag->coded=0;
+            else{
+              if(run_count<=0){
+                run_count=oc_block_run_unpack(&_rec->dec_opb);
+                flag=!flag;
+              }
+              run_count--;
+              frag->coded=flag;
+            }
+            if(frag->coded)_rec->state.coded_fragis[ncoded_fragis++]=fragi;
+            else *(_rec->state.uncoded_fragis-++nuncoded_fragis)=fragi;
+          }
+        }
+      }
+    }
+    _rec->state.ncoded_fragis[pli]=ncoded_fragis-prev_ncoded_fragis;
+    prev_ncoded_fragis=ncoded_fragis;
+    _rec->state.nuncoded_fragis[pli]=nuncoded_fragis-prev_nuncoded_fragis;
+    prev_nuncoded_fragis=nuncoded_fragis;
+  }
+  /*TODO: run_count should be 0 here.
+    If it's not, we should issue a warning of some kind.*/
+}
+
+
+
+typedef int (*oc_mode_unpack_func)(oggpack_buffer *_opb);
+
+static int oc_vlc_mode_unpack(oggpack_buffer *_opb){
+  long val;
+  int  i;
+  for(i=0;i<7;i++){
+    theora_read1(_opb,&val);
+    if(!val)break;
+  }
+  return i;
+}
+
+static int oc_clc_mode_unpack(oggpack_buffer *_opb){
+  long val;
+  theora_read(_opb,3,&val);
+  return (int)val;
+}
+
+/*Unpacks the list of macro block modes for INTER frames.*/
+void oc_rec_mb_modes_unpack(oc_rec_ctx *_rec){
+  oc_mode_unpack_func  mode_unpack;
+  oc_mb               *mb;
+  oc_mb               *mb_end;
+  const int           *alphabet;
+  long                 val;
+  int                  scheme0_alphabet[8];
+  int                  mode_scheme;
+  theora_read(&_rec->dec_opb,3,&val);
+  mode_scheme=(int)val;
+  if(mode_scheme==0){
+    int mi;
+    /*Just in case, initialize the modes to something.
+      If the bitstream doesn't contain each index exactly once, it's likely
+       corrupt and the rest of the packet is garbage anyway, but this way we
+       won't crash, and we'll decode SOMETHING.*/
+    /*LOOP VECTORIZES.*/
+    for(mi=0;mi<OC_NMODES;mi++)scheme0_alphabet[mi]=OC_MODE_INTER_NOMV;
+    for(mi=0;mi<OC_NMODES;mi++){
+      theora_read(&_rec->dec_opb,3,&val);
+      scheme0_alphabet[val]=OC_MODE_ALPHABETS[6][mi];
+    }
+    alphabet=scheme0_alphabet;
+  }
+  else alphabet=OC_MODE_ALPHABETS[mode_scheme-1];
+  if(mode_scheme==7)mode_unpack=oc_clc_mode_unpack;
+  else mode_unpack=oc_vlc_mode_unpack;
+  mb=_rec->state.mbs;
+  mb_end=mb+_rec->state.nmbs;
+  for(;mb<mb_end;mb++)if(mb->mode!=OC_MODE_INVALID){
+    int bi;
+    for(bi=0;bi<4;bi++){
+      int fragi;
+      fragi=mb->map[0][bi];
+      if(fragi>=0&&_rec->state.frags[fragi].coded)break;
+    }
+    if(bi<4)mb->mode=alphabet[(*mode_unpack)(&_rec->dec_opb)];
+    else mb->mode=OC_MODE_INTER_NOMV;
+  }
+}
+
+
+
+typedef int (*oc_mv_comp_unpack_func)(oggpack_buffer *_opb);
+
+static int oc_vlc_mv_comp_unpack(oggpack_buffer *_opb){
+  long bits;
+  int  mvsigned[2];
+  theora_read(_opb,3,&bits);
+  switch(bits){
+    case 0:return 0;
+    case 1:return 1;
+    case 2:return -1;
+    case 3:{
+      mvsigned[0]=2;
+      theora_read1(_opb,&bits);
+    }break;
+    case 4:{
+      mvsigned[0]=3;
+      theora_read1(_opb,&bits);
+    }break;
+    case 5:{
+      theora_read(_opb,3,&bits);
+      mvsigned[0]=4+(bits>>1);
+      bits&=1;
+    }break;
+    case 6:{
+      theora_read(_opb,4,&bits);
+      mvsigned[0]=8+(bits>>1);
+      bits&=1;
+    }break;
+    case 7:{
+      theora_read(_opb,5,&bits);
+      mvsigned[0]=16+(bits>>1);
+      bits&=1;
+    }break;
+  }
+  mvsigned[1]=-mvsigned[0];
+  return mvsigned[bits];
+}
+
+static int oc_clc_mv_comp_unpack(oggpack_buffer *_opb){
+  long bits;
+  int  mvsigned[2];
+  theora_read(_opb,6,&bits);
+  mvsigned[0]=bits>>1;
+  mvsigned[1]=-mvsigned[0];
+  return mvsigned[bits&1];
+}
+
+/*Unpacks the list of motion vectors for INTER frames.
+  Does not propagte the macro block modes and motion vectors to the individual
+   fragments.
+  The purpose of this function is solely to skip these bits in the packet.*/
+static void oc_rec_mv_unpack(oc_rec_ctx *_rec){
+  oc_mv_comp_unpack_func  mv_comp_unpack;
+  oc_mb                  *mb;
+  oc_mb                  *mb_end;
+  const int              *map_idxs;
+  long                    val;
+  int                     map_nidxs;
+  theora_read1(&_rec->dec_opb,&val);
+  mv_comp_unpack=val?oc_clc_mv_comp_unpack:oc_vlc_mv_comp_unpack;
+  map_idxs=OC_MB_MAP_IDXS[_rec->state.info.pixel_fmt];
+  map_nidxs=OC_MB_MAP_NIDXS[_rec->state.info.pixel_fmt];
+  mb=_rec->state.mbs;
+  mb_end=mb+_rec->state.nmbs;
+  for(;mb<mb_end;mb++)if(mb->mode!=OC_MODE_INVALID){
+    int          coded[13];
+    int          codedi;
+    int          ncoded;
+    int          mapi;
+    int          mapii;
+    int          fragi;
+    /*Search for at least one coded fragment.*/
+    ncoded=mapii=0;
+    do{
+      mapi=map_idxs[mapii];
+      fragi=mb->map[mapi>>2][mapi&3];
+      if(fragi>=0&&_rec->state.frags[fragi].coded)coded[ncoded++]=mapi;
+    }
+    while(++mapii<map_nidxs);
+    if(ncoded<=0)continue;
+    switch(mb->mode){
+      case OC_MODE_INTER_MV_FOUR:{
+        int  bi;
+        /*Mark the tail of the list, so we don't accidentally go past it.*/
+        coded[ncoded]=-1;
+        for(bi=codedi=0;bi<4;bi++)if(coded[codedi]==bi){
+          codedi++;
+          (*mv_comp_unpack)(&_rec->dec_opb);
+          (*mv_comp_unpack)(&_rec->dec_opb);
+        }
+      }break;
+      case OC_MODE_INTER_MV:{
+        (*mv_comp_unpack)(&_rec->dec_opb);
+        (*mv_comp_unpack)(&_rec->dec_opb);
+      }break;
+      case OC_MODE_GOLDEN_MV:{
+        (*mv_comp_unpack)(&_rec->dec_opb);
+        (*mv_comp_unpack)(&_rec->dec_opb);
+      }break;
+    }
+  }
+}
+
+static void oc_rec_block_qis_unpack(oc_rec_ctx *_rec){
+  int *coded_fragi;
+  int *coded_fragi_end;
+  int  ncoded_fragis;
+  ncoded_fragis=_rec->state.ncoded_fragis[0]+
+   _rec->state.ncoded_fragis[1]+_rec->state.ncoded_fragis[2];
+  if(ncoded_fragis<=0)return;
+  coded_fragi=_rec->state.coded_fragis;
+  coded_fragi_end=coded_fragi+ncoded_fragis;
+  if(_rec->state.nqis>1){
+    long val;
+    int  flag;
+    int  nqi0;
+    int  run_count;
+    /*If this frame has more than one qi value, we decode a qi index for each
+      fragment, using two passes of the same binary RLE scheme used for
+      super-block coded bits.
+     The first pass marks each fragment as having a qii of 0 or greater than
+      0, and the second pass (if necessary), distinguishes between a qii of
+      1 and 2.
+     We just store the qii in the fragment.*/
+    theora_read1(&_rec->dec_opb,&val);
+    flag=(int)val;
+    run_count=nqi0=0;
+    while(coded_fragi<coded_fragi_end){
+      int full_run;
+      run_count=oc_sb_run_unpack(&_rec->dec_opb);
+      full_run=run_count>=4129;
+      do{
+        _rec->state.frags[*coded_fragi++].qi=flag;
+        nqi0+=!flag;
+      }
+      while(--run_count>0&&coded_fragi<coded_fragi_end);
+      if(full_run&&coded_fragi<coded_fragi_end){
+        theora_read1(&_rec->dec_opb,&val);
+        flag=(int)val;
+      }
+      else flag=!flag;
+    }
+    /*TODO: run_count should be 0 here.
+      If it's not, we should issue a warning of some kind.*/
+    /*If we have 3 different qi's for this frame, and there was at least one
+       fragment with a non-zero qi, make the second pass.*/
+    if(_rec->state.nqis==3&&nqi0<ncoded_fragis){
+      /*Skip qii==0 fragments.*/
+      for(coded_fragi=_rec->state.coded_fragis;
+       _rec->state.frags[*coded_fragi].qi==0;coded_fragi++);
+      theora_read1(&_rec->dec_opb,&val);
+      flag=(int)val;
+      while(coded_fragi<coded_fragi_end){
+        int full_run;
+        run_count=oc_sb_run_unpack(&_rec->dec_opb);
+        full_run=run_count>=4129;
+        for(;coded_fragi<coded_fragi_end;coded_fragi++){
+          oc_fragment *frag;
+          frag=_rec->state.frags+*coded_fragi;
+          if(frag->qi==0)continue;
+          if(run_count--<=0)break;
+          frag->qi+=flag;
+        }
+        if(full_run&&coded_fragi<coded_fragi_end){
+          theora_read1(&_rec->dec_opb,&val);
+          flag=(int)val;
+        }
+        else flag=!flag;
+      }
+      /*TODO: run_count should be 0 here.
+        If it's not, we should issue a warning of some kind.*/
+    }
+  }
+}
+
+/*Unpacks the DC coefficient tokens.
+  Unlike when unpacking the AC coefficient tokens, we actually need to decode
+   the DC coefficient values now so that we can do DC prediction.
+  _huff_idx:   The index of the Huffman table to use for each color plane.
+  _ntoks_left: The number of tokens left to be decoded in each color plane for
+                each coefficient.
+               This is updated as EOB tokens and zero run tokens are decoded.
+  Return: The length of any outstanding EOB run.*/
+static int oc_rec_dc_coeff_unpack(oc_rec_ctx *_rec,int _huff_idxs[3],
+ int *_tok_hists[3],int _ntoks_left[3][64]){
+  long  val;
+  int  *coded_fragi;
+  int  *coded_fragi_end;
+  int   run_counts[64];
+  int   cfi;
+  int   eobi;
+  int   eobs;
+  int   ti;
+  int   ebi;
+  int   pli;
+  int   rli;
+  eobs=0;
+  ti=ebi=0;
+  coded_fragi_end=coded_fragi=_rec->state.coded_fragis;
+  for(pli=0;pli<3;pli++){
+    coded_fragi_end+=_rec->state.ncoded_fragis[pli];
+    memset(run_counts,0,sizeof(run_counts));
+    _rec->eob_runs[pli][0]=eobs;
+    /*Continue any previous EOB run, if there was one.*/
+    for(eobi=eobs;eobi-->0&&coded_fragi<coded_fragi_end;coded_fragi++);
+    cfi=0;
+    while(eobs<_ntoks_left[pli][0]-cfi){
+      int token;
+      int neb;
+      int eb;
+      int skip;
+      cfi+=eobs;
+      run_counts[63]+=eobs;
+      token=oc_huff_token_decode(&_rec->dec_opb,
+       _rec->dec_huff_tables[_huff_idxs[pli]]);
+      _rec->dct_tokens[0][ti++]=(unsigned char)token;
+      _tok_hists[pli][token]++;
+      neb=OC_DCT_TOKEN_EXTRA_BITS[token];
+      if(neb){
+        theora_read(&_rec->dec_opb,neb,&val);
+        eb=(int)val;
+        _rec->extra_bits[0][ebi++]=(ogg_int16_t)eb;
+      }
+      else eb=0;
+      skip=oc_dct_token_skip(token,eb);
+      if(skip<0){
+        eobs=eobi=-skip;
+        while(eobi-->0&&coded_fragi<coded_fragi_end)coded_fragi++;
+      }
+      else{
+        run_counts[skip-1]++;
+        cfi++;
+        eobs=0;
+        coded_fragi++;
+      }
+    }
+    _rec->ti0[pli][0]=ti;
+    _rec->ebi0[pli][0]=ebi;
+    /*Set the EOB count to the portion of the last EOB run which extends past
+       this coefficient.*/
+    eobs=eobs+cfi-_ntoks_left[pli][0];
+    /*Add the portion of the last EOB which was included in this coefficient to
+       to the longest run length.*/
+    run_counts[63]+=_ntoks_left[pli][0]-cfi;
+    /*And convert the run_counts array to a moment table.*/
+    for(rli=63;rli-->0;)run_counts[rli]+=run_counts[rli+1];
+    /*Finally, subtract off the number of coefficients that have been
+       accounted for by runs started in this coefficient.*/
+    for(rli=64;rli-->0;)_ntoks_left[pli][rli]-=run_counts[rli];
+  }
+  return eobs;
+}
+
+/*Unpacks the AC coefficient tokens.
+  This can completely discard coefficient values while unpacking, and so is
+   somewhat simpler than unpacking the DC coefficient tokens.
+  _huff_idx:   The index of the Huffman table to use for each color plane.
+  _ntoks_left: The number of tokens left to be decoded in each color plane for
+                each coefficient.
+               This is updated as EOB tokens and zero run tokens are decoded.
+  _eobs:       The length of any outstanding EOB run from previous
+                coefficients.
+  Return: The length of any outstanding EOB run.*/
+static int oc_rec_ac_coeff_unpack(oc_rec_ctx *_rec,int _zzi,int _huff_idxs[3],
+ int *_tok_hists[3],int _ntoks_left[3][64],int _eobs){
+  long val;
+  int  run_counts[64];
+  int  cfi;
+  int  ti;
+  int  ebi;
+  int  pli;
+  int  rli;
+  ti=ebi=0;
+  for(pli=0;pli<3;pli++){
+    memset(run_counts,0,sizeof(run_counts));
+    _rec->eob_runs[pli][_zzi]=_eobs;
+    cfi=0;
+    while(_eobs<_ntoks_left[pli][_zzi]-cfi){
+      int token;
+      int neb;
+      int eb;
+      int skip;
+      cfi+=_eobs;
+      run_counts[63]+=_eobs;
+      token=oc_huff_token_decode(&_rec->dec_opb,
+       _rec->dec_huff_tables[_huff_idxs[pli]]);
+      _rec->dct_tokens[_zzi][ti++]=(unsigned char)token;
+      _tok_hists[pli][token]++;
+      neb=OC_DCT_TOKEN_EXTRA_BITS[token];
+      if(neb){
+        theora_read(&_rec->dec_opb,neb,&val);
+        eb=(int)val;
+        _rec->extra_bits[_zzi][ebi++]=(ogg_int16_t)eb;
+      }
+      else eb=0;
+      skip=oc_dct_token_skip(token,eb);
+      if(skip<0)_eobs=-skip;
+      else{
+        run_counts[skip-1]++;
+        cfi++;
+        _eobs=0;
+      }
+    }
+    _rec->ti0[pli][_zzi]=ti;
+    _rec->ebi0[pli][_zzi]=ebi;
+    /*Set the EOB count to the portion of the last EOB run which extends past
+       this coefficient.*/
+    _eobs=_eobs+cfi-_ntoks_left[pli][_zzi];
+    /*Add the portion of the last EOB which was included in this coefficient to
+       to the longest run length.*/
+    run_counts[63]+=_ntoks_left[pli][_zzi]-cfi;
+    /*And convert the run_counts array to a moment table.*/
+    for(rli=63;rli-->0;)run_counts[rli]+=run_counts[rli+1];
+    /*Finally, subtract off the number of coefficients that have been
+       accounted for by runs started in this coefficient.*/
+    for(rli=64-_zzi;rli-->0;)_ntoks_left[pli][_zzi+rli]-=run_counts[rli];
+  }
+  return _eobs;
+}
+
+/*Tokens describing the DCT coefficients that belong to each fragment are
+   stored in the bitstream grouped by coefficient, not by fragment.
+  This means that we either decode all the tokens in order, building up a
+   separate coefficient list for each fragment as we go, and then go back and
+   do the iDCT on each fragment, or we have to create separate lists of tokens
+   for each coefficient, so that we can pull the next token required off the
+   head of the appropriate list when decoding a specific fragment.
+  The former was VP3's choice, and it meant 2*w*h extra storage for all the
+   decoded coefficient values.
+  We take the second option, which lets us store just one or three bytes per
+   token (generally far fewer than the number of coefficients, due to EOB
+   tokens and zero runs), and which requires us to only maintain a counter for
+   each of the 64 coefficients, instead of a counter for every fragment to
+   determine where the next token goes.
+  Actually, we use 3 counters per coefficient, one for each color plane, so we
+   can decode all color planes simultaneously.
+  This lets us color conversion, etc., be done as soon as a full MCU (one or
+   two super block rows) is decoded, while the image data is still in cache.*/
+static void oc_rec_residual_tokens_unpack(oc_rec_ctx *_rec){
+  static const int OC_HUFF_LIST_MAX[5]={1,6,15,28,64};
+  long  val;
+  int   ntoks_left[3][64];
+  int   huff_idxs[3];
+  int  *tok_hists[3];
+  int   pli;
+  int   zzi;
+  int   hgi;
+  int   huffi_y;
+  int   huffi_c;
+  int   eobs;
+  memset(_rec->tok_hist,0,sizeof(_rec->tok_hist));
+  for(pli=0;pli<3;pli++)for(zzi=0;zzi<64;zzi++){
+    ntoks_left[pli][zzi]=_rec->state.ncoded_fragis[pli];
+  }
+  theora_read(&_rec->dec_opb,4,&val);
+  huffi_y=(int)val;
+  theora_read(&_rec->dec_opb,4,&val);
+  huffi_c=(int)val;
+  huff_idxs[0]=huffi_y;
+  huff_idxs[1]=huff_idxs[2]=huffi_c;
+  tok_hists[0]=_rec->tok_hist[0][0];
+  tok_hists[1]=tok_hists[2]=_rec->tok_hist[1][0];
+  _rec->eob_runs[0][0]=0;
+  eobs=oc_rec_dc_coeff_unpack(_rec,huff_idxs,tok_hists,ntoks_left);
+  theora_read(&_rec->dec_opb,4,&val);
+  huffi_y=(int)val;
+  theora_read(&_rec->dec_opb,4,&val);
+  huffi_c=(int)val;
+  zzi=1;
+  for(hgi=1;hgi<5;hgi++){
+    huff_idxs[0]=huffi_y+(hgi<<4);
+    huff_idxs[1]=huff_idxs[2]=huffi_c+(hgi<<4);
+    tok_hists[0]=_rec->tok_hist[0][hgi];
+    tok_hists[1]=tok_hists[2]=_rec->tok_hist[1][hgi];
+    for(;zzi<OC_HUFF_LIST_MAX[hgi];zzi++){
+      eobs=oc_rec_ac_coeff_unpack(_rec,zzi,huff_idxs,tok_hists,ntoks_left,eobs);
+    }
+  }
+  /*TODO: eobs should be exactly zero, or 4096 or greater.
+    The second case occurs when an EOB run of size zero is encountered, which
+     gets treated as an infinite EOB run (where infinity is INT_MAX).
+    If neither of these conditions holds, then a warning should be issued.*/
+}
+
+static int oc_rec_set_huffman_codes(oc_rec_ctx *_rec,
+ const th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]){
+  int ret;
+  if(_rec==NULL)return TH_EFAULT;
+  /*If we've already emitted the setup header, then don't let the user set the
+     tables again.*/
+  if(_rec->packet_state>=OC_PACKET_SETUP_HDR&&
+   _rec->packet_state<=OC_PACKET_REWRITE){
+    return TH_EINVAL;
+  }
+  if(_codes==NULL)_codes=TH_VP31_HUFF_CODES;
+  /*Validate the codes.*/
+  oggpackB_reset(&_rec->enc_opb);
+  ret=oc_huff_codes_pack(&_rec->enc_opb,_codes);
+  if(ret<0)return ret;
+  memcpy(_rec->enc_huff_codes,_codes,sizeof(_rec->enc_huff_codes));
+  _rec->packet_state=OC_PACKET_INFO_HDR;
+  return 0;
+}
+
+/*Computes the number of bits used for each of the potential Huffman codes for
+   the given list of token counts.
+  The bits are added to whatever the current bit counts are.*/
+static void oc_rec_count_bits(oc_rec_ctx *_rec,int _hgi,
+ const int _token_counts[TH_NDCT_TOKENS],int _bit_counts[16]){
+  int huffi;
+  int huff_base;
+  int token;
+  huff_base=_hgi<<4;
+  for(huffi=huff_base;huffi<huff_base+16;huffi++){
+    for(token=0;token<TH_NDCT_TOKENS;token++){
+      _bit_counts[huffi-huff_base]+=
+       _token_counts[token]*_rec->enc_huff_codes[huffi][token].nbits;
+    }
+  }
+}
+
+/*Returns the Huffman index using the fewest number of bits.*/
+static int oc_rec_select_huffi(int _bit_counts[16]){
+  int best_huffi;
+  int huffi;
+  best_huffi=0;
+  for(huffi=1;huffi<16;huffi++)if(_bit_counts[huffi]<_bit_counts[best_huffi]){
+    best_huffi=huffi;
+  }
+  return best_huffi;
+}
+
+/*Packs the DCT tokens for the given range of coefficient indices in zig-zag
+   order using the given Huffman tables.*/
+static void oc_rec_huff_group_pack(oc_rec_ctx *_rec,int _zzi_start,
+ int _zzi_end,int _huff_idxs[3]){
+  int zzi;
+  for(zzi=_zzi_start;zzi<_zzi_end;zzi++){
+    int pli;
+    int ti;
+    int ebi;
+    ti=0;
+    ebi=0;
+    for(pli=0;pli<3;pli++){
+      const th_huff_code *huff_codes;
+      int                 token;
+      int                 ti_end;
+      /*Step 2: Write the tokens using these tables.*/
+      huff_codes=_rec->enc_huff_codes[_huff_idxs[pli]];
+      /*Note: dct_token_offs[3] is really the ndct_tokens table.
+        Yes, this seems like a horrible hack, yet it's strangely elegant.*/
+      ti_end=_rec->ti0[pli][zzi];
+      for(;ti<ti_end;ti++){
+        token=_rec->dct_tokens[zzi][ti];
+        oggpackB_write(&_rec->enc_opb,huff_codes[token].pattern,
+         huff_codes[token].nbits);
+        if(OC_DCT_TOKEN_EXTRA_BITS[token]){
+          oggpackB_write(&_rec->enc_opb,_rec->extra_bits[zzi][ebi++],
+           OC_DCT_TOKEN_EXTRA_BITS[token]);
+        }
+      }
+    }
+  }
+}
+
+static void oc_rec_residual_tokens_pack(oc_rec_ctx *_rec,
+ const oc_tok_hist _tok_hist[2][5]){
+  static const int  OC_HUFF_LIST_MIN[6]={0,1,6,15,28,64};
+  static const int *OC_HUFF_LIST_MAX=OC_HUFF_LIST_MIN+1;
+  int bits_y[16];
+  int bits_c[16];
+  int huff_idxs[5][3];
+  int huffi_y;
+  int huffi_c;
+  int hgi;
+  /*Step 1a: Select Huffman tables for the DC token list.*/
+  memset(bits_y,0,sizeof(bits_y));
+  memset(bits_c,0,sizeof(bits_c));
+  oc_rec_count_bits(_rec,0,_tok_hist[0][0],bits_y);
+  oc_rec_count_bits(_rec,0,_tok_hist[1][0],bits_c);
+  huffi_y=oc_rec_select_huffi(bits_y);
+  huffi_c=oc_rec_select_huffi(bits_c);
+  huff_idxs[0][0]=huffi_y;
+  huff_idxs[0][1]=huff_idxs[0][2]=huffi_c;
+  /*Step 1b: Write the DC token list with the chosen tables.*/
+  oggpackB_write(&_rec->enc_opb,huffi_y,4);
+  oggpackB_write(&_rec->enc_opb,huffi_c,4);
+  oc_rec_huff_group_pack(_rec,0,1,huff_idxs[0]);
+  /*Step 2a: Select Huffman tables for the AC token lists.*/
+  memset(bits_y,0,sizeof(bits_y));
+  memset(bits_y,0,sizeof(bits_c));
+  for(hgi=1;hgi<5;hgi++){
+    oc_rec_count_bits(_rec,hgi,_tok_hist[0][hgi],bits_y);
+    oc_rec_count_bits(_rec,hgi,_tok_hist[1][hgi],bits_c);
+  }
+  huffi_y=oc_rec_select_huffi(bits_y);
+  huffi_c=oc_rec_select_huffi(bits_c);
+  /*Step 2b: Write the AC token lists using the chosen tables.*/
+  oggpackB_write(&_rec->enc_opb,huffi_y,4);
+  oggpackB_write(&_rec->enc_opb,huffi_c,4);
+  for(hgi=1;hgi<5;hgi++){
+    huff_idxs[hgi][0]=huffi_y+(hgi<<4);
+    huff_idxs[hgi][1]=huff_idxs[hgi][2]=huffi_c+(hgi<<4);
+    oc_rec_huff_group_pack(_rec,OC_HUFF_LIST_MIN[hgi],OC_HUFF_LIST_MAX[hgi],
+     huff_idxs[hgi]);
+  }
+}
+
+
+
+th_rec_ctx *th_recode_alloc(const th_info *_info,const th_setup_info *_setup){
+  oc_rec_ctx *rec;
+  if(_info==NULL||_setup==NULL)return NULL;
+  rec=_ogg_malloc(sizeof(*rec));
+  if(oc_rec_init(rec,_info,_setup)<0){
+    _ogg_free(rec);
+    return NULL;
+  }
+  rec->state.curframe_num++;
+  return rec;
+}
+
+void th_recode_free(th_rec_ctx *_rec){
+  if(_rec!=NULL){
+    oc_rec_clear(_rec);
+    _ogg_free(_rec);
+  }
+}
+
+int th_recode_packetin(th_rec_ctx *_rec,const ogg_packet *_op,
+ ogg_int64_t *_granpos){
+  int ret;
+  if(_rec==NULL||_op==NULL)return TH_EFAULT;
+  /*If the user has already retrieved the statistics, we can't update them any
+     longer.*/
+  if(_rec->packet_state!=OC_PACKET_ANALYZE)return TH_EINVAL;
+  /*A completely empty packet indicates a dropped frame and is treated exactly
+     like an inter frame with no coded blocks.
+    Only proceed if we have a non-empty packet.*/
+  if(_op->bytes!=0){
+    oc_frame_tok_hist *tok_hist;
+    oggpackB_readinit(&_rec->dec_opb,_op->packet,_op->bytes);
+    ret=oc_rec_frame_header_unpack(_rec);
+    if(ret<0)return ret;
+    if(_rec->state.frame_type==OC_INTRA_FRAME){
+      oc_rec_mark_all_intra(_rec);
+      _rec->state.keyframe_num=_rec->state.curframe_num;
+    }
+    else{
+      oc_rec_coded_flags_unpack(_rec);
+      oc_rec_mb_modes_unpack(_rec);
+      oc_rec_mv_unpack(_rec);
+    }
+    oc_rec_block_qis_unpack(_rec);
+    if(_rec->ntok_hists>=_rec->ctok_hists){
+      _rec->ctok_hists=_rec->ctok_hists<<1|1;
+      _rec->tok_hists=(oc_frame_tok_hist *)_ogg_realloc(_rec->tok_hists,
+       _rec->ctok_hists*sizeof(*_rec->tok_hists));
+    }
+    tok_hist=_rec->tok_hists+_rec->ntok_hists++;
+    tok_hist->pkt_sz=_op->bytes;
+    tok_hist->dct_offs=oggpackB_bits(&_rec->dec_opb);
+    memcpy(tok_hist->ncoded_fragis,_rec->state.ncoded_fragis,
+     sizeof(tok_hist->ncoded_fragis));
+    oc_rec_residual_tokens_unpack(_rec);
+    /*Update granule position.*/
+    _rec->state.granpos=
+     (_rec->state.keyframe_num<<_rec->state.info.keyframe_granule_shift)+
+     (_rec->state.curframe_num-_rec->state.keyframe_num);
+    tok_hist->granpos=_rec->state.granpos;
+    /*Save the statistics for this frame.*/
+    memcpy(tok_hist->tok_hist,_rec->tok_hist,sizeof(tok_hist->tok_hist));
+    _rec->state.curframe_num++;
+    if(_granpos!=NULL)*_granpos=_rec->state.granpos;
+    return 0;
+  }
+  else{
+    /*Just update the granule position and return.*/
+    _rec->state.granpos=
+     (_rec->state.keyframe_num<<_rec->state.info.keyframe_granule_shift)+
+     (_rec->state.curframe_num-_rec->state.keyframe_num);
+    _rec->state.curframe_num++;
+    if(_granpos!=NULL)*_granpos=_rec->state.granpos;
+    return TH_DUPFRAME;
+  }
+}
+
+int th_recode_ctl(th_rec_ctx *_rec,int _req,void *_buf,size_t _buf_sz){
+  switch(_req){
+    case TH_ENCCTL_SET_HUFFMAN_CODES:{
+      if(_buf==NULL&&_buf_sz!=0||_buf!=NULL&&
+       _buf_sz!=sizeof(th_huff_code)*TH_NHUFFMAN_TABLES*TH_NDCT_TOKENS){
+        return TH_EINVAL;
+      }
+      return oc_rec_set_huffman_codes(_rec,(const th_huff_table *)_buf);
+    }break;
+    case TH_DECCTL_SET_GRANPOS:{
+      ogg_int64_t granpos;
+      if(_rec==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(ogg_int64_t))return TH_EINVAL;
+      granpos=*(ogg_int64_t *)_buf;
+      if(granpos<0)return TH_EINVAL;
+      _rec->state.granpos=granpos;
+      _rec->state.keyframe_num=
+       granpos>>_rec->state.info.keyframe_granule_shift;
+      _rec->state.curframe_num=_rec->state.keyframe_num+
+       (granpos&(1<<_rec->state.info.keyframe_granule_shift)-1);
+      return 0;
+    }break;
+    case TH_RECCTL_GET_TOK_NSTATS:{
+      if(_rec==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(long))return TH_EINVAL;
+      *((long *)_buf)=_rec->ntok_hists;
+      return 0;
+    }break;
+    case TH_RECCTL_GET_TOK_STATS:{
+      if(_rec==NULL||_buf==NULL)return TH_EFAULT;
+      if(_buf_sz!=sizeof(const oc_frame_tok_hist **))return TH_EINVAL;
+      if(_rec->packet_state<OC_PACKET_ANALYZE)return TH_EINVAL;
+      /*Update the state to prevent us from invalidating this pointer.*/
+      _rec->packet_state=OC_PACKET_HUFFTABLES;
+      *((const oc_frame_tok_hist **)_buf)=_rec->tok_hists;
+      return 0;
+    }break;
+    default:return TH_EIMPL;
+  }
+}
+
+int th_recode_flushheader(th_rec_ctx *_rec,th_comment *_tc,ogg_packet *_op){
+  return oc_state_flushheader(&_rec->state,&_rec->packet_state,&_rec->enc_opb,
+   &_rec->qinfo,(const th_huff_table *)_rec->enc_huff_codes,_tc->vendor,
+   _tc,_op);
+}
+
+#include <stdio.h>
+
+int th_recode_packet_rewrite(th_rec_ctx *_rec,const ogg_packet *_op_in,
+ ogg_packet *_op_out){
+  int ret;
+  if(_rec==NULL||_op_in==NULL||_op_out==NULL)return TH_EFAULT;
+  /*If we've used all our decoded token histograms, please stop calling us.*/
+  if(_rec->cur_tok_histi>=_rec->ntok_hists)return TH_EINVAL;
+  /*A completely empty packet indicates a dropped frame and is treated exactly
+     like an inter frame with no coded blocks.
+    Only proceed if we have a non-empty packet.*/
+  if(_op_in->bytes!=0){
+    oc_frame_tok_hist *tok_hist;
+    /*Read enough of the packet to figure out what kind of frame we have.
+      This also validates the packet to be sure we can decode it, which is why
+       we don't just use th_packet_iskeyframe().*/
+    oggpackB_readinit(&_rec->dec_opb,_op_in->packet,_op_in->bytes);
+    ret=oc_rec_frame_header_unpack(_rec);
+    if(ret<0)return ret;
+    /*Update granule position.*/
+    if(_rec->state.frame_type==OC_INTRA_FRAME){
+      _rec->state.keyframe_num=_rec->state.curframe_num;
+    }
+    _rec->state.granpos=
+     (_rec->state.keyframe_num<<_rec->state.info.keyframe_granule_shift)+
+     (_rec->state.curframe_num-_rec->state.keyframe_num);
+    _rec->state.curframe_num++;
+    /*Sanity checks to see if the next piece of frame data corresponds to this
+       packet.
+      This isn't a guarantee if someone rewrote the file out from under us, but
+       it at least ensures that we have enough bytes in the packet.
+      TODO: We could re-decode this packet to get the info we need, instead of
+       failing, but that would be more code.*/
+    tok_hist=_rec->tok_hists+_rec->cur_tok_histi;
+    if(tok_hist->granpos!=_rec->state.granpos||
+     tok_hist->pkt_sz!=_op_in->bytes){
+      return TH_EBADPACKET;
+    }
+    _rec->cur_tok_histi++;
+    /*Copy the contents of the input packet up to the DCT tokens.*/
+    oggpackB_reset(&_rec->enc_opb);
+    oggpackB_writecopy(&_rec->enc_opb,_op_in->packet,tok_hist->dct_offs);
+    /*Read the DCT tokens using the old codes.*/
+    oggpackB_readinit(&_rec->dec_opb,_op_in->packet,_op_in->bytes);
+    oggpackB_adv(&_rec->dec_opb,tok_hist->dct_offs);
+    memcpy(_rec->state.ncoded_fragis,tok_hist->ncoded_fragis,
+     sizeof(_rec->state.ncoded_fragis));
+    oc_rec_residual_tokens_unpack(_rec);
+    /*Write the DCT tokens using the new codes.*/
+    memcpy(_rec->state.ncoded_fragis,tok_hist->ncoded_fragis,
+     sizeof(_rec->state.ncoded_fragis));
+    oc_rec_residual_tokens_pack(_rec,
+     (const oc_tok_hist_table *)tok_hist->tok_hist);
+    ret=0;
+  }
+  else{
+    oggpackB_reset(&_rec->enc_opb);
+    /*Just update the granule position and return.*/
+    _rec->state.granpos=
+     (_rec->state.keyframe_num<<_rec->state.info.keyframe_granule_shift)+
+     (_rec->state.curframe_num-_rec->state.keyframe_num);
+    _rec->state.curframe_num++;
+    ret=TH_DUPFRAME;
+  }
+  _op_out->packet=oggpackB_get_buffer(&_rec->enc_opb);
+  _op_out->bytes=oggpackB_bytes(&_rec->enc_opb);
+  _op_out->b_o_s=0;
+  _op_out->e_o_s=_op_in->e_o_s;
+  _op_out->packetno=_rec->state.curframe_num;
+  _op_out->granulepos=_rec->state.granpos;
+  if(_op_out->e_o_s)_rec->packet_state=OC_PACKET_DONE;
+  return ret;
+}

Added: trunk/theora-exp/lib/recode.h
===================================================================
--- trunk/theora-exp/lib/recode.h	                        (rev 0)
+++ trunk/theora-exp/lib/recode.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,37 @@
+#include <ogg/ogg.h>
+#if !defined(_recode_H)
+# define _recode_H (1)
+# include "theora/theoradec.h"
+# include "theora/theoraenc.h"
+
+#define TH_RECCTL_GET_TOK_NSTATS (0x8000)
+#define TH_RECCTL_GET_TOK_STATS  (0x8001)
+
+typedef int                      oc_tok_hist[TH_NDCT_TOKENS];
+typedef struct oc_frame_tok_hist oc_frame_tok_hist;
+typedef struct th_rec_ctx        th_rec_ctx;
+
+
+
+/*The DCT token histograms for a single frame.*/
+struct oc_frame_tok_hist{
+  oc_tok_hist tok_hist[2][5];
+  ogg_int64_t granpos;
+  long        pkt_sz;
+  long        dct_offs;
+  int         ncoded_fragis[3];
+};
+
+
+
+th_rec_ctx *th_recode_alloc(const th_info *_info,const th_setup_info *_setup);
+void th_recode_free(th_rec_ctx *_rec);
+
+int th_recode_packetin(th_rec_ctx *_rec,const ogg_packet *_op,
+ ogg_int64_t *_granpos);
+int th_recode_ctl(th_rec_ctx *_rec,int _req,void *_buf,size_t _buf_sz);
+int th_recode_flushheader(th_rec_ctx *_enc,th_comment *_tc,ogg_packet *_op);
+int th_recode_packet_rewrite(th_rec_ctx *_rec,const ogg_packet *_op_in,
+ ogg_packet *_op_out);
+
+#endif

Added: trunk/theora-exp/lib/state.c
===================================================================
--- trunk/theora-exp/lib/state.c	                        (rev 0)
+++ trunk/theora-exp/lib/state.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,1156 @@
+#include <stdlib.h>
+#include <string.h>
+#include "internal.h"
+#include "idct.h"
+#if defined(OC_X86ASM)
+# include "x86/x86int.h"
+#endif
+#if defined(OC_DUMP_IMAGES)
+# include <stdio.h>
+# include "png.h"
+#endif
+
+
+
+void oc_restore_fpu(const oc_theora_state *_state){
+  _state->opt_vtable.restore_fpu();
+}
+
+void oc_restore_fpu_c(void){}
+
+/*Returns the fragment index of the top-left block in a macro block.
+  This can be used to test whether or not the whole macro block is coded.
+  _sb:    The super block.
+  _quadi: The quadrant number.
+  Return: The index of the fragment of the upper left block in the macro
+   block, or -1 if the block lies outside the coded frame.*/
+static int oc_sb_quad_top_left_frag(const oc_sb *_sb,int _quadi){
+  /*It so happens that under the Hilbert curve ordering described below, the
+     upper-left block in each macro block is at index 0, except in macro block
+     3, where it is at index 2.*/
+  return _sb->map[_quadi][_quadi&_quadi<<1];
+}
+
+/*Fills in the mapping from block positions to fragment numbers for a single
+   color plane.
+  This function also fills in the "valid" flag of each quadrant in a super
+   block.
+  _sbs:    The array of super blocks for the color plane.
+  _frag0:  The index of the first fragment in the plane.
+  _hfrags: The number of horizontal fragments in a coded frame.
+  _vfrags: The number of vertical fragments in a coded frame.*/
+static void oc_sb_create_plane_mapping(oc_sb _sbs[],int _frag0,int _hfrags,
+ int _vfrags){
+  /*Contains the (macro_block,block) indices for a 4x4 grid of
+     fragments.
+    The pattern is a 4x4 Hilbert space-filling curve.
+    A Hilbert curve has the nice property that as the curve grows larger, its
+     fractal dimension approaches 2.
+    The intuition is that nearby blocks in the curve are also close spatially,
+     with the previous element always an immediate neighbor, so that runs of
+     blocks should be well correlated.*/
+  static const int SB_MAP[4][4][2]={
+    {{0,0},{0,1},{3,2},{3,3}},
+    {{0,3},{0,2},{3,1},{3,0}},
+    {{1,0},{1,3},{2,0},{2,3}},
+    {{1,1},{1,2},{2,1},{2,2}}
+  };
+  oc_sb *sb;
+  int    yfrag;
+  int    y;
+  sb=_sbs;
+  yfrag=_frag0;
+  for(y=0;;y+=4){
+    int imax;
+    int x;
+    /*Figure out how many columns of blocks in this super block lie within the
+       image.*/
+    imax=_vfrags-y;
+    if(imax>4)imax=4;
+    else if(imax<=0)break;
+    for(x=0;;x+=4,sb++){
+      int    xfrag;
+      int    jmax;
+      int    quadi;
+      int    i;
+      /*Figure out how many rows of blocks in this super block lie within the
+         image.*/
+      jmax=_hfrags-x;
+      if(jmax>4)jmax=4;
+      else if(jmax<=0)break;
+      /*By default, set all fragment indices to -1.*/
+      memset(sb->map[0],0xFF,sizeof(sb->map));
+      /*Fill in the fragment map for this super block.*/
+      xfrag=yfrag+x;
+      for(i=0;i<imax;i++){
+        int j;
+        for(j=0;j<jmax;j++){
+          sb->map[SB_MAP[i][j][0]][SB_MAP[i][j][1]]=xfrag+j;
+        }
+        xfrag+=_hfrags;
+      }
+      /*Mark which quadrants of this super block lie within the image.*/
+      for(quadi=0;quadi<4;quadi++){
+        sb->quad_valid|=(oc_sb_quad_top_left_frag(sb,quadi)>=0)<<quadi;
+      }
+    }
+    yfrag+=_hfrags<<2;
+  }
+}
+
+/*Fills in the Y plane fragment map for a macro block given the fragment
+   coordinates of its upper-left hand corner.
+  _mb:     The macro block to fill.
+  _fplane: The description of the Y plane.
+  _x:      The X location of the upper-left hand fragment in the Y plane.
+  _y:      The Y location of the upper-left hand fragment in the Y plane.*/
+static void oc_mb_fill_ymapping(oc_mb *_mb,const oc_fragment_plane *_fplane,
+ int _x,int _y){
+  int i;
+  for(i=0;i<2;i++){
+    int j;
+    if(_y+i>=_fplane->nvfrags)break;
+    for(j=0;j<2;j++){
+      if(_x+j>=_fplane->nhfrags)break;
+      _mb->map[0][i<<1|j]=(_y+i)*_fplane->nhfrags+_x+j;
+    }
+  }
+}
+
+/*Fills in the chroma plane fragment maps for a macro block.
+  This version is for use with chroma decimated in the X and Y directions.
+  _mb:      The macro block to fill.
+  _fplanes: The descriptions of the fragment planes.
+  _x:       The X location of the upper-left hand fragment in the Y plane.
+  _y:       The Y location of the upper-left hand fragment in the Y plane.*/
+static void oc_mb_fill_cmapping00(oc_mb *_mb,
+ const oc_fragment_plane _fplanes[3],int _x,int _y){
+  int fragi;
+  _x>>=1;
+  _y>>=1;
+  fragi=_y*_fplanes[1].nhfrags+_x;
+  _mb->map[1][0]=fragi+_fplanes[1].froffset;
+  _mb->map[2][0]=fragi+_fplanes[2].froffset;
+}
+
+/*Fills in the chroma plane fragment maps for a macro block.
+  This version is for use with chroma decimated in the Y direction.
+  _mb:      The macro block to fill.
+  _fplanes: The descriptions of the fragment planes.
+  _x:       The X location of the upper-left hand fragment in the Y plane.
+  _y:       The Y location of the upper-left hand fragment in the Y plane.*/
+static void oc_mb_fill_cmapping01(oc_mb *_mb,
+ const oc_fragment_plane _fplanes[3],int _x,int _y){
+  int fragi;
+  int j;
+  _y>>=1;
+  fragi=_y*_fplanes[1].nhfrags+_x;
+  for(j=0;j<2;j++){
+    if(_x+j>=_fplanes[1].nhfrags)break;
+    _mb->map[1][j]=fragi+_fplanes[1].froffset;
+    _mb->map[2][j]=fragi+_fplanes[2].froffset;
+    fragi++;
+  }
+}
+
+/*Fills in the chroma plane fragment maps for a macro block.
+  This version is for use with chroma decimated in the X direction.
+  _mb:      The macro block to fill.
+  _fplanes: The descriptions of the fragment planes.
+  _x:       The X location of the upper-left hand fragment in the Y plane.
+  _y:       The Y location of the upper-left hand fragment in the Y plane.*/
+static void oc_mb_fill_cmapping10(oc_mb *_mb,
+ const oc_fragment_plane _fplanes[3],int _x,int _y){
+  int fragi;
+  int i;
+  _x>>=1;
+  fragi=_y*_fplanes[1].nhfrags+_x;
+  for(i=0;i<2;i++){
+    if(_y+i>=_fplanes[1].nvfrags)break;
+    _mb->map[1][i<<1]=fragi+_fplanes[1].froffset;
+    _mb->map[2][i<<1]=fragi+_fplanes[2].froffset;
+    fragi+=_fplanes[1].nhfrags;
+  }
+}
+
+/*Fills in the chroma plane fragment maps for a macro block.
+  This version is for use with no chroma decimation.
+  This uses the already filled-in Y plane values.
+  _mb:      The macro block to fill.
+  _fplanes: The descriptions of the fragment planes.*/
+static void oc_mb_fill_cmapping11(oc_mb *_mb,
+ const oc_fragment_plane _fplanes[3]){
+  int k;
+  for(k=0;k<4;k++){
+    if(_mb->map[0][k]>=0){
+      _mb->map[1][k]=_mb->map[0][k]+_fplanes[1].froffset;
+      _mb->map[2][k]=_mb->map[0][k]+_fplanes[2].froffset;
+    }
+  }
+}
+
+/*The function type used to fill in the chroma plane fragment maps for a
+   macro block.
+  _mb:      The macro block to fill.
+  _fplanes: The descriptions of the fragment planes.
+  _x:       The X location of the upper-left hand fragment in the Y plane.
+  _y:       The Y location of the upper-left hand fragment in the Y plane.*/
+typedef void (*oc_mb_fill_cmapping_func)(oc_mb *_mb,
+ const oc_fragment_plane _fplanes[3],int _xfrag0,int _yfrag0);
+
+/*A table of functions used to fill in the chroma plane fragment maps for a
+   macro block for each type of chrominance decimation.*/
+static const oc_mb_fill_cmapping_func OC_MB_FILL_CMAPPING_TABLE[4]={
+  oc_mb_fill_cmapping00,
+  oc_mb_fill_cmapping01,
+  oc_mb_fill_cmapping10,
+  (oc_mb_fill_cmapping_func)oc_mb_fill_cmapping11
+};
+
+/*Fills in the mapping from macro blocks to their corresponding fragment
+   numbers in each plane.
+  _mbs:     The array of macro blocks.
+  _fplanes: The descriptions of the fragment planes.
+  _ctype:   The chroma decimation type.*/
+static void oc_mb_create_mapping(oc_mb _mbs[],
+ const oc_fragment_plane _fplanes[3],int _ctype){
+  oc_mb_fill_cmapping_func  mb_fill_cmapping;
+  oc_mb                    *mb0;
+  int                       y;
+  mb0=_mbs;
+  mb_fill_cmapping=OC_MB_FILL_CMAPPING_TABLE[_ctype];
+  /*Loop through the Y plane super blocks.*/
+  for(y=0;y<_fplanes[0].nvfrags;y+=4){
+    int x;
+    for(x=0;x<_fplanes[0].nhfrags;x+=4,mb0+=4){
+      int ymb;
+      /*Loop through the macro blocks in each super block in display order.*/
+      for(ymb=0;ymb<2;ymb++){
+        int xmb;
+        for(xmb=0;xmb<2;xmb++){
+          oc_mb *mb;
+          int    mbx;
+          int    mby;
+          mb=mb0+OC_MB_MAP[ymb][xmb];
+          mbx=x|xmb<<1;
+          mby=y|ymb<<1;
+          mb->x=mbx<<3;
+          mb->y=mby<<3;
+          /*Initialize fragment indexes to -1.*/
+          memset(mb->map,0xFF,sizeof(mb->map));
+          /*Make sure this macro block is within the encoded region.*/
+          if(mbx>=_fplanes[0].nhfrags||mby>=_fplanes[0].nvfrags){
+            mb->mode=OC_MODE_INVALID;
+            continue;
+          }
+          /*Fill in the fragment indices for the Y plane.*/
+          oc_mb_fill_ymapping(mb,_fplanes,mbx,mby);
+          /*Fill in the fragment indices for the chroma planes.*/
+          (*mb_fill_cmapping)(mb,_fplanes,mbx,mby);
+        }
+      }
+    }
+  }
+}
+
+/*Marks the fragments which fall all or partially outside the displayable
+   region of the frame.
+  _state: The Theora state containing the fragments to be marked.*/
+static void oc_state_border_init(oc_theora_state *_state){
+  typedef struct{
+    int x0;
+    int y0;
+    int xf;
+    int yf;
+  }oc_crop_rect;
+  oc_fragment       *frag;
+  oc_fragment       *yfrag_end;
+  oc_fragment       *xfrag_end;
+  oc_fragment_plane *fplane;
+  oc_crop_rect      *crop;
+  oc_crop_rect       crop_rects[3];
+  int                pli;
+  int                y;
+  int                x;
+  /*The method we use here is slow, but the code is dead simple and handles
+     all the special cases easily.
+    We only ever need to do it once.*/
+  /*Loop through the fragments, marking those completely outside the
+     displayable region and constructing a border mask for those that straddle
+     the border.*/
+  _state->nborders=0;
+  yfrag_end=frag=_state->frags;
+  for(pli=0;pli<3;pli++){
+    fplane=_state->fplanes+pli;
+    crop=crop_rects+pli;
+    /*Set up the cropping rectangle for this plane.*/
+    crop->x0=_state->info.pic_x;
+    crop->xf=_state->info.pic_x+_state->info.pic_width;
+    crop->y0=_state->info.pic_y;
+    crop->yf=_state->info.pic_y+_state->info.pic_height;
+    if(pli>0){
+      if(!(_state->info.pixel_fmt&1)){
+        crop->x0=crop->x0>>1;
+        crop->xf=crop->xf+1>>1;
+      }
+      if(!(_state->info.pixel_fmt&2)){
+        crop->y0=crop->y0>>1;
+        crop->yf=crop->yf+1>>1;
+      }
+    }
+    y=0;
+    for(yfrag_end+=fplane->nfrags;frag<yfrag_end;y+=8){
+      x=0;
+      for(xfrag_end=frag+fplane->nhfrags;frag<xfrag_end;frag++,x+=8){
+        /*First check to see if this fragment is completely outside the
+           displayable region.*/
+        /*Note the special checks for an empty cropping rectangle.
+          This guarantees that if we count a fragment as straddling the
+           border below, at least one pixel in the fragment will be inside
+           the displayable region.*/
+        if(x+8<=crop->x0||crop->xf<=x||y+8<=crop->y0||crop->yf<=y||
+         crop->x0>=crop->xf||crop->y0>=crop->yf){
+          frag->invalid=1;
+        }
+        /*Otherwise, check to see if it straddles the border.*/
+        else if(x<crop->x0&&crop->x0<x+8||x<crop->xf&&crop->xf<x+8||
+         y<crop->y0&&crop->y0<y+8||y<crop->yf&&crop->yf<y+8){
+          ogg_int64_t mask;
+          int         npixels;
+          int         i;
+          mask=npixels=0;
+          for(i=0;i<8;i++){
+            int j;
+            for(j=0;j<8;j++){
+              if(x+j>=crop->x0&&x+j<crop->xf&&y+i>=crop->y0&&y+i<crop->yf){
+                mask|=(ogg_int64_t)1<<(i<<3|j);
+                npixels++;
+              }
+            }
+          }
+          /*Search the fragment array for border info with the same pattern.
+            In general, there will be at most 8 different patterns (per
+            plane).*/
+          for(i=0;;i++){
+            if(i>=_state->nborders){
+              _state->nborders++;
+              _state->borders[i].mask=mask;
+              _state->borders[i].npixels=npixels;
+            }
+            else if(_state->borders[i].mask!=mask)continue;
+            frag->border=_state->borders+i;
+            break;
+          }
+        }
+      }
+    }
+  }
+}
+
+static void oc_state_frarray_init(oc_theora_state *_state){
+  int yhfrags;
+  int yvfrags;
+  int chfrags;
+  int cvfrags;
+  int yfrags;
+  int cfrags;
+  int nfrags;
+  int yhsbs;
+  int yvsbs;
+  int chsbs;
+  int cvsbs;
+  int ysbs;
+  int csbs;
+  int nsbs;
+  int nmbs;
+  int hdec;
+  int vdec;
+  int pli;
+  /*Figure out the number of fragments in each plane.*/
+  /*These parameters have already been validated to be multiples of 16.*/
+  yhfrags=_state->info.frame_width>>3;
+  yvfrags=_state->info.frame_height>>3;
+  hdec=!(_state->info.pixel_fmt&1);
+  vdec=!(_state->info.pixel_fmt&2);
+  chfrags=yhfrags+hdec>>hdec;
+  cvfrags=yvfrags+vdec>>vdec;
+  yfrags=yhfrags*yvfrags;
+  cfrags=chfrags*cvfrags;
+  nfrags=yfrags+2*cfrags;
+  /*Figure out the number of super blocks in each plane.*/
+  yhsbs=yhfrags+3>>2;
+  yvsbs=yvfrags+3>>2;
+  chsbs=chfrags+3>>2;
+  cvsbs=cvfrags+3>>2;
+  ysbs=yhsbs*yvsbs;
+  csbs=chsbs*cvsbs;
+  nsbs=ysbs+2*csbs;
+  nmbs=ysbs<<2;
+  /*Initialize the fragment array.*/
+  _state->fplanes[0].nhfrags=yhfrags;
+  _state->fplanes[0].nvfrags=yvfrags;
+  _state->fplanes[0].froffset=0;
+  _state->fplanes[0].nfrags=yfrags;
+  _state->fplanes[0].nhsbs=yhsbs;
+  _state->fplanes[0].nvsbs=yvsbs;
+  _state->fplanes[0].sboffset=0;
+  _state->fplanes[0].nsbs=ysbs;
+  _state->fplanes[1].nhfrags=_state->fplanes[2].nhfrags=chfrags;
+  _state->fplanes[1].nvfrags=_state->fplanes[2].nvfrags=cvfrags;
+  _state->fplanes[1].froffset=yfrags;
+  _state->fplanes[2].froffset=yfrags+cfrags;
+  _state->fplanes[1].nfrags=_state->fplanes[2].nfrags=cfrags;
+  _state->fplanes[1].nhsbs=_state->fplanes[2].nhsbs=chsbs;
+  _state->fplanes[1].nvsbs=_state->fplanes[2].nvsbs=cvsbs;
+  _state->fplanes[1].sboffset=ysbs;
+  _state->fplanes[2].sboffset=ysbs+csbs;
+  _state->fplanes[1].nsbs=_state->fplanes[2].nsbs=csbs;
+  _state->nfrags=nfrags;
+  _state->frags=_ogg_calloc(nfrags,sizeof(oc_fragment));
+  _state->nsbs=nsbs;
+  _state->sbs=_ogg_calloc(nsbs,sizeof(oc_sb));
+  _state->nhmbs=yhsbs<<1;
+  _state->nvmbs=yvsbs<<1;
+  _state->nmbs=nmbs;
+  _state->mbs=_ogg_calloc(nmbs,sizeof(oc_mb));
+  _state->coded_fragis=_ogg_malloc(nfrags*sizeof(_state->coded_fragis[0]));
+  _state->uncoded_fragis=_state->coded_fragis+nfrags;
+  _state->coded_mbis=_ogg_malloc(nmbs*sizeof(_state->coded_mbis[0]));
+  /*Create the mapping from super blocks to fragments.*/
+  for(pli=0;pli<3;pli++){
+    oc_fragment_plane *fplane;
+    fplane=_state->fplanes+pli;
+    oc_sb_create_plane_mapping(_state->sbs+fplane->sboffset,
+     fplane->froffset,fplane->nhfrags,fplane->nvfrags);
+  }
+  /*Create the mapping from macro blocks to fragments.*/
+  oc_mb_create_mapping(_state->mbs,_state->fplanes,_state->info.pixel_fmt);
+  /*Initialize the invalid and border fields of each fragment.*/
+  oc_state_border_init(_state);
+}
+
+static void oc_state_frarray_clear(oc_theora_state *_state){
+  _ogg_free(_state->coded_mbis);
+  _ogg_free(_state->coded_fragis);
+  _ogg_free(_state->mbs);
+  _ogg_free(_state->sbs);
+  _ogg_free(_state->frags);
+}
+
+
+/*Initializes the buffers used for reconstructed frames.
+  These buffers are padded with 16 extra pixels on each side, to allow
+   unrestricted motion vectors without special casing the boundary.
+  If chroma is decimated in either direction, the padding is reduced by a
+   factor of 2 on the appropriate sides.
+  _enc: The encoding context to store the buffers in.*/
+static void oc_state_ref_bufs_init(oc_theora_state *_state){
+  th_info       *info;
+  unsigned char *ref_frame_data;
+  size_t         yplane_sz;
+  size_t         cplane_sz;
+  int            yhstride;
+  int            yvstride;
+  int            chstride;
+  int            cvstride;
+  int            yoffset;
+  int            coffset;
+  int            rfi;
+  info=&_state->info;
+  /*Compute the image buffer parameters for each plane.*/
+  yhstride=info->frame_width+2*OC_UMV_PADDING;
+  yvstride=info->frame_height+2*OC_UMV_PADDING;
+  chstride=yhstride>>!(info->pixel_fmt&1);
+  cvstride=yvstride>>!(info->pixel_fmt&2);
+  yplane_sz=(size_t)yhstride*yvstride;
+  cplane_sz=(size_t)chstride*cvstride;
+  yoffset=OC_UMV_PADDING+OC_UMV_PADDING*yhstride;
+  coffset=(OC_UMV_PADDING>>!(info->pixel_fmt&1))+
+   (OC_UMV_PADDING>>!(info->pixel_fmt&2))*chstride;
+  _state->ref_frame_data=ref_frame_data=_ogg_malloc(3*(yplane_sz+2*cplane_sz));
+  /*Set up the width, height and stride for the image buffers.*/
+  _state->ref_frame_bufs[0][0].width=info->frame_width;
+  _state->ref_frame_bufs[0][0].height=info->frame_height;
+  _state->ref_frame_bufs[0][0].ystride=yhstride;
+  _state->ref_frame_bufs[0][1].width=_state->ref_frame_bufs[0][2].width=
+   info->frame_width>>!(info->pixel_fmt&1);
+  _state->ref_frame_bufs[0][1].height=_state->ref_frame_bufs[0][2].height=
+   info->frame_height>>!(info->pixel_fmt&2);
+  _state->ref_frame_bufs[0][1].ystride=_state->ref_frame_bufs[0][2].ystride=
+   chstride;
+  memcpy(_state->ref_frame_bufs[1],_state->ref_frame_bufs[0],
+   sizeof(_state->ref_frame_bufs[0]));
+  memcpy(_state->ref_frame_bufs[2],_state->ref_frame_bufs[0],
+   sizeof(_state->ref_frame_bufs[0]));
+  /*Set up the data pointers for the image buffers.*/
+  for(rfi=0;rfi<3;rfi++){
+    _state->ref_frame_bufs[rfi][0].data=ref_frame_data+yoffset;
+    ref_frame_data+=yplane_sz;
+    _state->ref_frame_bufs[rfi][1].data=ref_frame_data+coffset;
+    ref_frame_data+=cplane_sz;
+    _state->ref_frame_bufs[rfi][2].data=ref_frame_data+coffset;
+    ref_frame_data+=cplane_sz;
+    /*Flip the buffer upside down.*/
+    oc_ycbcr_buffer_flip(_state->ref_frame_bufs[rfi],
+     _state->ref_frame_bufs[rfi]);
+    /*Initialize the fragment pointers into this buffer.*/
+    oc_state_fill_buffer_ptrs(_state,rfi,_state->ref_frame_bufs[rfi]);
+  }
+  /*Initialize the reference frame indexes.*/
+  _state->ref_frame_idx[OC_FRAME_GOLD]=
+   _state->ref_frame_idx[OC_FRAME_PREV]=
+   _state->ref_frame_idx[OC_FRAME_SELF]=-1;
+}
+
+static void oc_state_ref_bufs_clear(oc_theora_state *_state){
+  _ogg_free(_state->ref_frame_data);
+}
+
+
+void oc_state_vtable_init_c(oc_theora_state *_state){
+  _state->opt_vtable.frag_recon_intra=oc_frag_recon_intra_c;
+  _state->opt_vtable.frag_recon_inter=oc_frag_recon_inter_c;
+  _state->opt_vtable.frag_recon_inter2=oc_frag_recon_inter2_c;
+  _state->opt_vtable.state_frag_copy=oc_state_frag_copy_c;
+  _state->opt_vtable.state_frag_recon=oc_state_frag_recon_c;
+  _state->opt_vtable.state_loop_filter_frag_rows=
+   oc_state_loop_filter_frag_rows_c;
+  _state->opt_vtable.restore_fpu=oc_restore_fpu_c;
+}
+
+/*Initialize the accelerated function pointers.*/
+void oc_state_vtable_init(oc_theora_state *_state){
+#if defined(OC_X86ASM)
+  oc_state_vtable_init_x86(_state);
+#else
+  oc_state_vtable_init_c(_state);
+#endif
+}
+
+
+int oc_state_init(oc_theora_state *_state,const th_info *_info){
+  int old_granpos;
+  /*First validate the parameters.*/
+  if(_info==NULL)return TH_EFAULT;
+  /*The width and height of the encoded frame must be multiples of 16.
+    They must also, when divided by 16, fit into a 16-bit unsigned integer.
+    The displayable frame offset coordinates must fit into an 8-bit unsigned
+     integer.
+    Note that the offset Y in the API is specified on the opposite side from
+     how it is specified in the bitstream, because the Y axis is flipped in
+     the bitstream.
+    The displayable frame must fit inside the encoded frame.
+    The color space must be one known by the encoder.*/
+  if((_info->frame_width&0xF)||(_info->frame_height&0xF)||
+   _info->frame_width>=0x100000||_info->frame_height>=0x100000||
+   _info->pic_x+_info->pic_width>_info->frame_width||
+   _info->pic_y+_info->pic_height>_info->frame_height||
+   _info->pic_x>255||
+   _info->frame_height-_info->pic_height-_info->pic_y>255||
+   _info->colorspace<0||_info->colorspace>=TH_CS_NSPACES||
+   _info->pixel_fmt<0||_info->pixel_fmt>=TH_PF_NFORMATS){
+    return TH_EINVAL;
+  }
+  memset(_state,0,sizeof(*_state));
+  memcpy(&_state->info,_info,sizeof(*_info));
+  /*Invert the sense of pic_y to match Theora's right-handed coordinate
+     system.*/
+  _state->info.pic_y=_info->frame_height-_info->pic_height-_info->pic_y;
+  _state->frame_type=OC_UNKWN_FRAME;
+  oc_state_vtable_init(_state);
+  oc_state_frarray_init(_state);
+  oc_state_ref_bufs_init(_state);
+  /*If the keyframe_granule_shift is out of range, use the maximum allowable
+     value.*/
+  if(_info->keyframe_granule_shift<0||_info->keyframe_granule_shift>31){
+    _state->info.keyframe_granule_shift=31;
+  }
+  _state->keyframe_num=1;
+  _state->curframe_num=0;
+  /*3.2.0 streams mark the frame index instead of the frame count.
+    This was changed with stream version 3.2.1 to conform to other Ogg
+     codecs.
+    We subtract an extra one from the frame number for old streams.*/
+  old_granpos=!TH_VERSION_CHECK(_info,3,2,1);
+  _state->curframe_num-=old_granpos;
+  _state->keyframe_num-=old_granpos;
+  return 0;
+}
+
+void oc_state_clear(oc_theora_state *_state){
+  oc_state_ref_bufs_clear(_state);
+  oc_state_frarray_clear(_state);
+}
+
+
+/*Duplicates the pixels on the border of the image plane out into the
+   surrounding padding for use by unrestricted motion vectors.
+  This function only adds the left and right borders, and only for the fragment
+   rows specified.
+  _refi: The index of the reference buffer to pad.
+  _pli:  The color plane.
+  _y0:   The Y coordinate of the first row to pad.
+  _yend: The Y coordinate of the row to stop padding at.*/
+void oc_state_borders_fill_rows(oc_theora_state *_state,int _refi,int _pli,
+ int _y0,int _yend){
+  th_img_plane  *iplane;
+  unsigned char *apix;
+  unsigned char *bpix;
+  unsigned char *epix;
+  int            hpadding;
+  hpadding=OC_UMV_PADDING>>(_pli!=0&&!(_state->info.pixel_fmt&1));
+  iplane=_state->ref_frame_bufs[_refi]+_pli;
+  apix=iplane->data+_y0*iplane->ystride;
+  bpix=apix+iplane->width-1;
+  epix=iplane->data+_yend*iplane->ystride;
+  /*Note the use of != instead of <, which allows ystride to be negative.*/
+  while(apix!=epix){
+    memset(apix-hpadding,apix[0],hpadding);
+    memset(bpix+1,bpix[0],hpadding);
+    apix+=iplane->ystride;
+    bpix+=iplane->ystride;
+  }
+}
+
+/*Duplicates the pixels on the border of the image plane out into the
+   surrounding padding for use by unrestricted motion vectors.
+  This function only adds the top and bottom borders, and must be called after
+   the left and right borders are added.
+  _refi:      The index of the reference buffer to pad.
+  _pli:       The color plane.*/
+void oc_state_borders_fill_caps(oc_theora_state *_state,int _refi,int _pli){
+  th_img_plane  *iplane;
+  unsigned char *apix;
+  unsigned char *bpix;
+  unsigned char *epix;
+  int            hpadding;
+  int            vpadding;
+  int            fullw;
+  hpadding=OC_UMV_PADDING>>(_pli!=0&&!(_state->info.pixel_fmt&1));
+  vpadding=OC_UMV_PADDING>>(_pli!=0&&!(_state->info.pixel_fmt&2));
+  iplane=_state->ref_frame_bufs[_refi]+_pli;
+  fullw=iplane->width+(hpadding<<1);
+  apix=iplane->data-hpadding;
+  bpix=iplane->data+(iplane->height-1)*iplane->ystride-hpadding;
+  epix=apix-iplane->ystride*vpadding;
+  while(apix!=epix){
+    memcpy(apix-iplane->ystride,apix,fullw);
+    memcpy(bpix+iplane->ystride,bpix,fullw);
+    apix-=iplane->ystride;
+    bpix+=iplane->ystride;
+  }
+}
+
+/*Sets the buffer pointer in each fragment to point to the portion of the
+   image buffer which it corresponds to.
+  _state:   The Theora state to fill.
+  _buf_idx: The index of the buffer pointer to fill.
+            The first three correspond to our reconstructed frame buffers,
+             while the last corresponds to the input image.
+  _img:     The image buffer to fill the fragments with.*/
+void oc_state_fill_buffer_ptrs(oc_theora_state *_state,int _buf_idx,
+ th_ycbcr_buffer _img){
+  int pli;
+  /*Special handling for the input image to give us the opportunity to skip
+     some updates.
+    The other buffers do not change throughout the encoding process.*/
+  if(_buf_idx==OC_FRAME_IO){
+     if(memcmp(_state->input,_img,sizeof(th_ycbcr_buffer))==0)return;
+     memcpy(_state->input,_img,sizeof(th_ycbcr_buffer));
+  }
+  for(pli=0;pli<3;pli++){
+    th_img_plane      *iplane;
+    oc_fragment_plane *fplane;
+    oc_fragment       *frag;
+    oc_fragment       *vfrag_end;
+    unsigned char     *vpix;
+    iplane=&_img[pli];
+    fplane=&_state->fplanes[pli];
+    vpix=iplane->data;
+    frag=_state->frags+fplane->froffset;
+    vfrag_end=frag+fplane->nfrags;
+    while(frag<vfrag_end){
+      oc_fragment   *hfrag_end;
+      unsigned char *hpix;
+      hpix=vpix;
+      for(hfrag_end=frag+fplane->nhfrags;frag<hfrag_end;frag++){
+        frag->buffer[_buf_idx]=hpix;
+        hpix+=8;
+      }
+      vpix+=iplane->ystride<<3;
+    }
+  }
+}
+
+/*Returns the macro block index of the macro block in the given position.
+  _state: The Theora state the macro block is contained in.
+  _mbx:   The X coordinate of the macro block (in macro blocks, not pixels).
+  _mby:   The Y coordinate of the macro block (in macro blocks, not pixels).
+  Return: The index of the macro block in the given position.*/
+int oc_state_mbi_for_pos(oc_theora_state *_state,int _mbx,int _mby){
+  return ((_mbx&~1)<<1)+(_mby&~1)*_state->nhmbs+OC_MB_MAP[_mby&1][_mbx&1];
+}
+
+/*Determines the offsets in an image buffer to use for motion compensation.
+  _state:   The Theora state the offsets are to be computed with.
+  _offsets: Returns the offset for the buffer(s).
+            _offsets[0] is always set.
+            _offsets[1] is set if the motion vector has non-zero fractional
+             components.
+  _dx:      The X component of the motion vector.
+  _dy:      The Y component of the motion vector.
+  _ystride: The Y stride in the buffer the motion vector points into.
+  _pli:     The color plane index.
+  Return: The number of offsets returned: 1 or 2.*/
+int oc_state_get_mv_offsets(oc_theora_state *_state,int _offsets[2],
+ int _dx,int _dy,int _ystride,int _pli){
+  int xprec;
+  int yprec;
+  int xfrac;
+  int yfrac;
+  /*Here is a brief description of how Theora handles motion vectors:
+    Motion vector components are specified to half-pixel accuracy in
+     undecimated directions of each plane, and quarter-pixel accuracy in
+     decimated directions.
+    Integer parts are extracted by dividing (not shifting) by the
+     appropriate amount, with truncation towards zero.
+    These integer values are used to calculate the first offset.
+
+    If either of the fractional parts are non-zero, then a second offset is
+     computed.
+    No third or fourth offsets are computed, even if both components have
+     non-zero fractional parts.
+    The second offset is computed by dividing (not shifting) by the
+     appropriate amount, always truncating _away_ from zero.*/
+  /*These two variables decide whether we are in half- or quarter-pixel
+     precision in each component.*/
+  xprec=1+(!(_state->info.pixel_fmt&1)&&_pli);
+  yprec=1+(!(_state->info.pixel_fmt&2)&&_pli);
+  /*These two variables are either 0 if all the fractional bits are 0 or 1 if
+     any of them are non-zero.*/
+  xfrac=!!(_dx&(1<<xprec)-1);
+  yfrac=!!(_dy&(1<<yprec)-1);
+  _offsets[0]=(_dx>>xprec)+(_dy>>yprec)*_ystride;
+  if(xfrac||yfrac){
+    /*This branchless code is equivalent to:
+    if(_dx<0)_offests[0]=-(-_dx>>xprec);
+    else _offsets[0]=(_dx>>xprec);
+    if(_dy<0)_offsets[0]-=(-_dy>>yprec)*_ystride;
+    else _offsets[0]+=(_dy>>yprec)*_ystride;
+    _offsets[1]=_offsets[0];
+    if(xfrac){
+      if(_dx<0)_offsets[1]++;
+      else _offsets[1]--;
+    }
+    if(yfrac){
+      if(_dy<0)_offsets[1]+=_ystride;
+      else _offsets[1]-=_ystride;
+    }*/
+    _offsets[1]=_offsets[0];
+    _offsets[_dx>=0]+=xfrac;
+    _offsets[_dy>=0]+=_ystride&-yfrac;
+    return 2;
+  }
+  else return 1;
+}
+
+void oc_state_frag_recon(oc_theora_state *_state,const oc_fragment *_frag,
+ int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,int _ncoefs,
+ ogg_uint16_t _dc_iquant,const ogg_uint16_t _ac_iquant[64]){
+  _state->opt_vtable.state_frag_recon(_state,_frag,_pli,_dct_coeffs,
+   _last_zzi,_ncoefs,_dc_iquant,_ac_iquant);
+}
+
+void oc_state_frag_recon_c(oc_theora_state *_state,const oc_fragment *_frag,
+ int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,int _ncoefs,
+ ogg_uint16_t _dc_iquant,const ogg_uint16_t _ac_iquant[64]){
+  ogg_int16_t dct_buf[64];
+  ogg_int16_t res_buf[64];
+  int dst_framei;
+  int dst_ystride;
+  int zzi;
+  int ci;
+  /*_last_zzi is subtly different from an actual count of the number of
+     coefficients we decoded for this block.
+    It contains the value of zzi BEFORE the final token in the block was
+     decoded.
+    In most cases this is an EOB token (the continuation of an EOB run from a
+     previous block counts), and so this is the same as the coefficient count.
+    However, in the case that the last token was NOT an EOB token, but filled
+     the block up with exactly 64 coefficients, _last_zzi will be less than 64.
+    Provided the last token was not a pure zero run, the minimum value it can
+     be is 46, and so that doesn't affect any of the cases in this routine.
+    However, if the last token WAS a pure zero run of length 63, then _last_zzi
+     will be 1 while the number of coefficients decoded is 64.
+    Thus, we will trigger the following special case, where the real
+     coefficient count would not.
+    Note also that a zero run of length 64 will give _last_zzi a value of 0,
+     but we still process the DC coefficient, which might have a non-zero value
+     due to DC prediction.
+    Although convoluted, this is arguably the correct behavior: it allows us to
+     dequantize fewer coefficients and use a smaller transform when the block
+     ends with a long zero run instead of a normal EOB token.
+    It could be smarter... multiple separate zero runs at the end of a block
+     will fool it, but an encoder that generates these really deserves what it
+     gets.
+    Needless to say we inherited this approach from VP3.*/
+  /*Special case only having a DC component.*/
+  if(_last_zzi<2){
+    ogg_int16_t p;
+    /*Why is the iquant product rounded in this case and no others?
+      Who knows.*/
+    p=(ogg_int16_t)((ogg_int32_t)_frag->dc*_dc_iquant+15>>5);
+    /*LOOP VECTORIZES.*/
+    for(ci=0;ci<64;ci++)res_buf[ci]=p;
+  }
+  else{
+    /*First, dequantize the coefficients.*/
+    dct_buf[0]=(ogg_int16_t)((ogg_int32_t)_frag->dc*_dc_iquant);
+    for(zzi=1;zzi<_ncoefs;zzi++){
+      int ci;
+      ci=OC_FZIG_ZAG[zzi];
+      dct_buf[ci]=(ogg_int16_t)((ogg_int32_t)_dct_coeffs[zzi]*_ac_iquant[ci]);
+    }
+    /*Then, fill in the remainder of the coefficients with 0's, and perform
+       the iDCT.*/
+    if(_last_zzi<10){
+      for(;zzi<10;zzi++)dct_buf[OC_FZIG_ZAG[zzi]]=0;
+      oc_idct8x8_10_c(res_buf,dct_buf);
+    }
+    else{
+      for(;zzi<64;zzi++)dct_buf[OC_FZIG_ZAG[zzi]]=0;
+      oc_idct8x8_c(res_buf,dct_buf);
+    }
+  }
+  /*Fill in the target buffer.*/
+  dst_framei=_state->ref_frame_idx[OC_FRAME_SELF];
+  dst_ystride=_state->ref_frame_bufs[dst_framei][_pli].ystride;
+  /*For now ystride values in all ref frames assumed to be equal.*/
+  if(_frag->mbmode==OC_MODE_INTRA){
+    oc_frag_recon_intra(_state,_frag->buffer[dst_framei],dst_ystride,res_buf);
+  }
+  else{
+    int ref_framei;
+    int ref_ystride;
+    int mvoffsets[2];
+    ref_framei=_state->ref_frame_idx[OC_FRAME_FOR_MODE[_frag->mbmode]];
+    ref_ystride=_state->ref_frame_bufs[ref_framei][_pli].ystride;
+    if(oc_state_get_mv_offsets(_state,mvoffsets,_frag->mv[0],_frag->mv[1],
+     ref_ystride,_pli)>1){
+      oc_frag_recon_inter2(_state,_frag->buffer[dst_framei],dst_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[0],ref_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[1],ref_ystride,res_buf);
+    }
+    else{
+      oc_frag_recon_inter(_state,_frag->buffer[dst_framei],dst_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[0],ref_ystride,res_buf);
+    }
+  }
+  oc_restore_fpu(_state);
+}
+
+/*Copies the fragments specified by the lists of fragment indices from one
+   frame to another.
+  _fragis:    A pointer to a list of fragment indices.
+  _nfragis:   The number of fragment indices to copy.
+  _dst_frame: The reference frame to copy to.
+  _src_frame: The reference frame to copy from.
+  _pli:       The color plane the fragments lie in.*/
+void oc_state_frag_copy(const oc_theora_state *_state,const int *_fragis,
+ int _nfragis,int _dst_frame,int _src_frame,int _pli){
+  _state->opt_vtable.state_frag_copy(_state,_fragis,_nfragis,_dst_frame,
+   _src_frame,_pli);
+}
+
+void oc_state_frag_copy_c(const oc_theora_state *_state,const int *_fragis,
+ int _nfragis,int _dst_frame,int _src_frame,int _pli){
+  const int *fragi;
+  const int *fragi_end;
+  int        dst_framei;
+  int        dst_ystride;
+  int        src_framei;
+  int        src_ystride;
+  dst_framei=_state->ref_frame_idx[_dst_frame];
+  src_framei=_state->ref_frame_idx[_src_frame];
+  dst_ystride=_state->ref_frame_bufs[dst_framei][_pli].ystride;
+  src_ystride=_state->ref_frame_bufs[src_framei][_pli].ystride;
+  fragi_end=_fragis+_nfragis;
+  for(fragi=_fragis;fragi<fragi_end;fragi++){
+    oc_fragment   *frag;
+    unsigned char *dst;
+    unsigned char *src;
+    int            j;
+    frag=_state->frags+*fragi;
+    dst=frag->buffer[dst_framei];
+    src=frag->buffer[src_framei];
+    for(j=0;j<8;j++){
+      memcpy(dst,src,sizeof(dst[0])*8);
+      dst+=dst_ystride;
+      src+=src_ystride;
+    }
+  }
+}
+
+static void loop_filter_h(unsigned char *_pix,int _ystride,int *_bv){
+  int y;
+  _pix-=2;
+  for(y=0;y<8;y++){
+    int f;
+    f=_pix[0]-_pix[3]+3*(_pix[2]-_pix[1]);
+    /*The _bv array is used to compute the function
+      f=OC_CLAMPI(OC_MINI(-_2flimit-f,0),f,OC_MAXI(_2flimit-f,0));
+      where _2flimit=_state->loop_filter_limits[_state->qis[0]]<<1;*/
+    f=*(_bv+(f+4>>3));
+    _pix[1]=OC_CLAMP255(_pix[1]+f);
+    _pix[2]=OC_CLAMP255(_pix[2]-f);
+    _pix+=_ystride;
+  }
+}
+
+static void loop_filter_v(unsigned char *_pix,int _ystride,int *_bv){
+  int y;
+  _pix-=_ystride*2;
+  for(y=0;y<8;y++){
+    int f;
+    f=_pix[0]-_pix[_ystride*3]+3*(_pix[_ystride*2]-_pix[_ystride]);
+    /*The _bv array is used to compute the function
+      f=OC_CLAMPI(OC_MINI(-_2flimit-f,0),f,OC_MAXI(_2flimit-f,0));
+      where _2flimit=_state->loop_filter_limits[_state->qis[0]]<<1;*/
+    f=*(_bv+(f+4>>3));
+    _pix[_ystride]=OC_CLAMP255(_pix[_ystride]+f);
+    _pix[_ystride*2]=OC_CLAMP255(_pix[_ystride*2]-f);
+    _pix++;
+  }
+}
+
+/*Initialize the bounding values array used by the loop filter.
+  _bv: Storage for the array.
+  Return: 0 on success, or a non-zero value if no filtering need be applied.*/
+int oc_state_loop_filter_init(oc_theora_state *_state,int *_bv){
+  int flimit;
+  int i;
+  flimit=_state->loop_filter_limits[_state->qis[0]];
+  if(flimit==0)return 1;
+  memset(_bv,0,sizeof(_bv[0])*256);
+  for(i=0;i<flimit;i++){
+    if(127-i-flimit>=0)_bv[127-i-flimit]=i-flimit;
+    _bv[127-i]=-i;
+    _bv[127+i]=i;
+    if(127+i+flimit<256)_bv[127+i+flimit]=flimit-i;
+  }
+  return 0;
+}
+
+/*Apply the loop filter to a given set of fragment rows in the given plane.
+  The filter may be run on the bottom edge, affecting pixels in the next row of
+   fragments, so this row also needs to be available.
+  _bv:        The bounding values array.
+  _refi:      The index of the frame buffer to filter.
+  _pli:       The color plane to filter.
+  _fragy0:    The Y coordinate of the first fragment row to filter.
+  _fragy_end: The Y coordinate of the fragment row to stop filtering at.*/
+void oc_state_loop_filter_frag_rows(oc_theora_state *_state,int *_bv,
+ int _refi,int _pli,int _fragy0,int _fragy_end){
+  _state->opt_vtable.state_loop_filter_frag_rows(_state,_bv,_refi,_pli,
+   _fragy0,_fragy_end);
+}
+
+void oc_state_loop_filter_frag_rows_c(oc_theora_state *_state,int *_bv,
+ int _refi,int _pli,int _fragy0,int _fragy_end){
+  th_img_plane      *iplane;
+  oc_fragment_plane *fplane;
+  oc_fragment       *frag_top;
+  oc_fragment       *frag0;
+  oc_fragment       *frag;
+  oc_fragment       *frag_end;
+  oc_fragment       *frag0_end;
+  oc_fragment       *frag_bot;
+  _bv+=127;
+  iplane=_state->ref_frame_bufs[_refi]+_pli;
+  fplane=_state->fplanes+_pli;
+  /*The following loops are constructed somewhat non-intuitively on purpose.
+    The main idea is: if a block boundary has at least one coded fragment on
+     it, the filter is applied to it.
+    However, the order that the filters are applied in matters, and VP3 chose
+     the somewhat strange ordering used below.*/
+  frag_top=_state->frags+fplane->froffset;
+  frag0=frag_top+_fragy0*fplane->nhfrags;
+  frag0_end=frag0+(_fragy_end-_fragy0)*fplane->nhfrags;
+  frag_bot=_state->frags+fplane->froffset+fplane->nfrags;
+  while(frag0<frag0_end){
+    frag=frag0;
+    frag_end=frag+fplane->nhfrags;
+    while(frag<frag_end){
+      if(frag->coded){
+        if(frag>frag0){
+          loop_filter_h(frag->buffer[_refi],iplane->ystride,_bv);
+        }
+        if(frag0>frag_top){
+          loop_filter_v(frag->buffer[_refi],iplane->ystride,_bv);
+        }
+        if(frag+1<frag_end&&!(frag+1)->coded){
+          loop_filter_h(frag->buffer[_refi]+8,iplane->ystride,_bv);
+        }
+        if(frag+fplane->nhfrags<frag_bot&&!(frag+fplane->nhfrags)->coded){
+          loop_filter_v((frag+fplane->nhfrags)->buffer[_refi],
+           iplane->ystride,_bv);
+        }
+      }
+      frag++;
+    }
+    frag0+=fplane->nhfrags;
+  }
+}
+
+#if defined(OC_DUMP_IMAGES)
+int oc_state_dump_frame(const oc_theora_state *_state,int _frame,
+ const char *_suf){
+  /*Dump a PNG of the reconstructed image.*/
+  png_structp    png;
+  png_infop      info;
+  png_bytep     *image;
+  FILE          *fp;
+  char           fname[16];
+  unsigned char *y_row;
+  unsigned char *u_row;
+  unsigned char *v_row;
+  unsigned char *y;
+  unsigned char *u;
+  unsigned char *v;
+  ogg_int64_t    iframe;
+  ogg_int64_t    pframe;
+  int            y_stride;
+  int            u_stride;
+  int            v_stride;
+  int            framei;
+  int            width;
+  int            height;
+  int            imgi;
+  int            imgj;
+  width=_state->info.frame_width;
+  height=_state->info.frame_height;
+  iframe=_state->granpos>>_state->info.keyframe_granule_shift;
+  pframe=_state->granpos-(iframe<<_state->info.keyframe_granule_shift);
+  sprintf(fname,"%08i%s.png",(int)(iframe+pframe),_suf);
+  fp=fopen(fname,"wb");
+  if(fp==NULL)return TH_EFAULT;
+  image=(png_bytep *)oc_malloc_2d(height,6*width,sizeof(image[0][0]));
+  png=png_create_write_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
+  if(png==NULL){
+    oc_free_2d(image);
+    fclose(fp);
+    return TH_EFAULT;
+  }
+  info=png_create_info_struct(png);
+  if(info==NULL){
+    png_destroy_write_struct(&png,NULL);
+    oc_free_2d(image);
+    fclose(fp);
+    return TH_EFAULT;
+  }
+  if(setjmp(png_jmpbuf(png))){
+    png_destroy_write_struct(&png,&info);
+    oc_free_2d(image);
+    fclose(fp);
+    return TH_EFAULT;
+  }
+  framei=_state->ref_frame_idx[_frame];
+  y_row=_state->ref_frame_bufs[framei][0].data;
+  u_row=_state->ref_frame_bufs[framei][1].data;
+  v_row=_state->ref_frame_bufs[framei][2].data;
+  y_stride=_state->ref_frame_bufs[framei][0].ystride;
+  u_stride=_state->ref_frame_bufs[framei][1].ystride;
+  v_stride=_state->ref_frame_bufs[framei][2].ystride;
+  /*Chroma up-sampling is just done with a box filter.
+    This is very likely what will actually be used in practice on a real
+     display, and also removes one more layer to search in for the source of
+     artifacts.
+    As an added bonus, it's dead simple.*/
+  for(imgi=height;imgi-->0;){
+    int dc;
+    y=y_row;
+    u=u_row;
+    v=v_row;
+    for(imgj=0;imgj<6*width;){
+      float    yval;
+      float    uval;
+      float    vval;
+      unsigned rval;
+      unsigned gval;
+      unsigned bval;
+      /*This is intentionally slow and very accurate.*/
+      yval=(*y-16)*(1.0F/219);
+      uval=(*u-128)*(2*(1-0.114F)/224);
+      vval=(*v-128)*(2*(1-0.299F)/224);
+      rval=OC_CLAMPI(0,(int)(65535*(yval+vval)+0.5F),65535);
+      gval=OC_CLAMPI(0,(int)(65535*(
+       yval-uval*(0.114F/0.587F)-vval*(0.299F/0.587F))+0.5F),65535);
+      bval=OC_CLAMPI(0,(int)(65535*(yval+uval)+0.5F),65535);
+      image[imgi][imgj++]=(unsigned char)(rval>>8);
+      image[imgi][imgj++]=(unsigned char)(rval&0xFF);
+      image[imgi][imgj++]=(unsigned char)(gval>>8);
+      image[imgi][imgj++]=(unsigned char)(gval&0xFF);
+      image[imgi][imgj++]=(unsigned char)(bval>>8);
+      image[imgi][imgj++]=(unsigned char)(bval&0xFF);
+      dc=(y-y_row&1)|(_state->info.pixel_fmt&1);
+      y++;
+      u+=dc;
+      v+=dc;
+    }
+    dc=-((height-1-imgi&1)|_state->info.pixel_fmt>>1);
+    y_row+=y_stride;
+    u_row+=dc&u_stride;
+    v_row+=dc&v_stride;
+  }
+  png_init_io(png,fp);
+  png_set_compression_level(png,Z_BEST_COMPRESSION);
+  png_set_IHDR(png,info,width,height,16,PNG_COLOR_TYPE_RGB,
+   PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
+  switch(_state->info.colorspace){
+    case TH_CS_ITU_REC_470M:{
+      png_set_gAMA(png,info,2.2);
+      png_set_cHRM_fixed(png,info,31006,31616,
+       67000,32000,21000,71000,14000,8000);
+    }break;
+    case TH_CS_ITU_REC_470BG:{
+      png_set_gAMA(png,info,2.67);
+      png_set_cHRM_fixed(png,info,31271,32902,
+       64000,33000,29000,60000,15000,6000);
+    }break;
+  }
+  png_set_pHYs(png,info,_state->info.aspect_numerator,
+   _state->info.aspect_denominator,0);
+  png_set_rows(png,info,image);
+  png_write_png(png,info,PNG_TRANSFORM_IDENTITY,NULL);
+  png_write_end(png,info);
+  png_destroy_write_struct(&png,&info);
+  oc_free_2d(image);
+  fclose(fp);
+  return 0;
+}
+#endif
+
+
+
+ogg_int64_t th_granule_frame(void *_encdec,ogg_int64_t _granpos){
+  oc_theora_state *state;
+  state=(oc_theora_state *)_encdec;
+  if(_granpos>=0){
+    ogg_int64_t iframe;
+    ogg_int64_t pframe;
+    iframe=_granpos>>state->info.keyframe_granule_shift;
+    pframe=_granpos-(iframe<<state->info.keyframe_granule_shift);
+    return iframe+pframe-TH_VERSION_CHECK(&state->info,3,2,1);
+  }
+  return -1;
+}
+
+double th_granule_time(void *_encdec,ogg_int64_t _granpos){
+  oc_theora_state *state;
+  state=(oc_theora_state *)_encdec;
+  if(_granpos>=0){
+    return (th_granule_frame(_encdec,_granpos)+1)*(
+     (double)state->info.fps_denominator/state->info.fps_numerator);
+  }
+  return -1;
+}

Added: trunk/theora-exp/lib/x86/cpu.c
===================================================================
--- trunk/theora-exp/lib/x86/cpu.c	                        (rev 0)
+++ trunk/theora-exp/lib/x86/cpu.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,101 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+/*CPU capability detection for x86 processors.
+  Originally written by Rudolf Marek.*/
+
+#include "cpu.h"
+#include "x86int.h"
+
+#if defined(OC_X86ASM)
+
+ogg_uint32_t oc_cpu_flags_get(void){
+  ogg_uint32_t eax;
+  ogg_uint32_t ebx;
+  ogg_uint32_t ecx;
+  ogg_uint32_t edx;
+  ogg_uint32_t flags;
+#if (defined(__amd64__)||defined(__x86_64__))
+# define cpuid(_op,_eax,_ebx,_ecx,_edx) \
+  __asm__ __volatile__( \
+   "push %%rbx\n\t" \
+   "cpuid\n\t" \
+   "movl %%ebx,%1\n\t" \
+   "pop  %%rbx\n\t" \
+   :"=a" (_eax), \
+    "=r" (_ebx), \
+    "=c" (_ecx), \
+    "=d" (_edx) \
+   :"a" (_op) \
+   :"cc" \
+  )
+#else
+# define cpuid(_op,_eax,_ebx,_ecx,_edx) \
+  __asm__ __volatile__( \
+   "pushl %%ebx\n\t" \
+   "cpuid\n\t" \
+   "movl  %%ebx,%1\n\t" \
+   "popl  %%ebx\n\t" \
+   :"=a" (_eax), \
+    "=r" (_ebx), \
+    "=c" (_ecx), \
+    "=d" (_edx) \
+   :"a" (_op) \
+   :"cc" \
+  )
+  __asm__ __volatile__(
+   "pushfl\n\t"
+   "pushfl\n\t"
+   "popl          %0\n\t"
+   "movl          %0,%1\n\t"
+   "xorl   $0x200000,%0\n\t"
+   "pushl         %0\n\t"
+   "popfl\n\t"
+   "pushfl\n\t"
+   "popl          %0\n\t"
+   "popfl\n\t"
+   :"=r" (eax),
+    "=r" (ebx)
+   :
+   :"cc"
+  );
+  /*No cpuid.*/
+  if(eax==ebx)return 0;
+#endif
+  cpuid(0,eax,ebx,ecx,edx);
+  if(ebx==0x756e6547&&edx==0x49656e69&&ecx==0x6c65746e){
+    /*Intel:*/
+inteltest:
+    cpuid(1,eax,ebx,ecx,edx);
+    if((edx&0x00800000)==0)return 0;
+    flags=OC_CPU_X86_MMX;
+    if(edx&0x02000000)flags|=OC_CPU_X86_MMXEXT|OC_CPU_X86_SSE;
+    if(edx&0x04000000)flags|=OC_CPU_X86_SSE2;
+  }
+  else if(ebx==0x68747541&&edx==0x69746e65&&ecx==0x444d4163||
+   ebx==0x646f6547&&edx==0x79622065&&ecx==0x43534e20){
+    /*AMD, Geode:*/
+    cpuid(0x80000000,eax,ebx,ecx,edx);
+    if(eax<0x80000001)goto inteltest;
+    cpuid(0x80000001,eax,ebx,ecx,edx);
+    if((edx&0x00800000)==0)return 0;
+    flags=OC_CPU_X86_MMX;
+    if(edx&0x80000000)flags|=OC_CPU_X86_3DNOW;
+    if(edx&0x00400000)flags|=OC_CPU_X86_MMXEXT;
+  }
+  else{
+    /*Implement me.*/
+    flags=0;
+  }
+  return flags;
+}
+
+#endif

Added: trunk/theora-exp/lib/x86/cpu.h
===================================================================
--- trunk/theora-exp/lib/x86/cpu.h	                        (rev 0)
+++ trunk/theora-exp/lib/x86/cpu.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,25 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+*/
+#if !defined(_x86_cpu_H)
+# define _x86_cpu_H (1)
+#include "../internal.h"
+
+#define OC_CPU_X86_MMX    (1<<0)
+#define OC_CPU_X86_3DNOW  (1<<1)
+#define OC_CPU_X86_MMXEXT (1<<2)
+#define OC_CPU_X86_SSE    (1<<3)
+#define OC_CPU_X86_SSE2   (1<<4)
+
+ogg_uint32_t oc_cpu_flags_get(void);
+
+#endif

Added: trunk/theora-exp/lib/x86/mmxfrag.c
===================================================================
--- trunk/theora-exp/lib/x86/mmxfrag.c	                        (rev 0)
+++ trunk/theora-exp/lib/x86/mmxfrag.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,285 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+*/
+/*MMX acceleration of fragment reconstruction for motion compensation.
+  Originally written by Rudolf Marek.
+  Additional optimization by Nils Pipenbrinck.
+  Note: Loops are unrolled for best performance.
+  The iteration each instruction belongs to is marked in the comments as #i.*/
+#include "x86int.h"
+
+#if defined(OC_X86ASM)
+
+void oc_frag_recon_intra_mmx(unsigned char *_dst,int _dst_ystride,
+ const ogg_int16_t *_residue){
+  __asm__ __volatile__(
+    /*Set mm0 to 0xFFFFFFFFFFFFFFFF.*/
+    "pcmpeqw %%mm0,%%mm0\n\t"
+    /*#0 Load low residue.*/
+    "movq 0*8(%[residue]),%%mm1\n\t"
+    /*#0 Load high residue.*/
+    "movq 1*8(%[residue]),%%mm2\n\t"
+    /*Set mm0 to 0x8000800080008000.*/
+    "psllw $15,%%mm0\n\t"
+    /*#1 Load low residue.*/
+    "movq 2*8(%[residue]),%%mm3\n\t"
+    /*#1 Load high residue.*/
+    "movq 3*8(%[residue]),%%mm4\n\t"
+    /*Set mm0 to 0x0080008000800080.*/
+    "psrlw $8,%%mm0\n\t"
+    /*#2 Load low residue.*/
+    "movq 4*8(%[residue]),%%mm5\n\t"
+    /*#2 Load high residue.*/
+    "movq 5*8(%[residue]),%%mm6\n\t"
+    /*#0 Bias low  residue.*/
+    "paddsw %%mm0,%%mm1\n\t"
+    /*#0 Bias high residue.*/
+    "paddsw %%mm0,%%mm2\n\t"
+    /*#0 Pack to byte.*/
+    "packuswb %%mm2,%%mm1\n\t"
+    /*#1 Bias low  residue.*/
+    "paddsw %%mm0,%%mm3\n\t"
+    /*#1 Bias high residue.*/
+    "paddsw %%mm0,%%mm4\n\t"
+    /*#1 Pack to byte.*/
+    "packuswb %%mm4,%%mm3\n\t"
+    /*#2 Bias low  residue.*/
+    "paddsw %%mm0,%%mm5\n\t"
+    /*#2 Bias high residue.*/
+    "paddsw %%mm0,%%mm6\n\t"
+    /*#2 Pack to byte.*/
+    "packuswb %%mm6,%%mm5\n\t"
+    /*#0 Write row.*/
+    "movq %%mm1,(%[dst])\n\t"
+    /*#1 Write row.*/
+    "movq %%mm3,(%[dst],%[dst_ystride])\n\t"
+    /*#2 Write row.*/
+    "movq %%mm5,(%[dst],%[dst_ystride],2)\n\t"
+    /*#3 Load low residue.*/
+    "movq 6*8(%[residue]),%%mm1\n\t"
+    /*#3 Load high residue.*/
+    "movq 7*8(%[residue]),%%mm2\n\t"
+    /*#4 Load high residue.*/
+    "movq 8*8(%[residue]),%%mm3\n\t"
+    /*#4 Load high residue.*/
+    "movq 9*8(%[residue]),%%mm4\n\t"
+    /*#5 Load high residue.*/
+    "movq 10*8(%[residue]),%%mm5\n\t"
+    /*#5 Load high residue.*/
+    "movq 11*8(%[residue]),%%mm6\n\t"
+    /*#3 Bias low  residue.*/
+    "paddsw %%mm0,%%mm1\n\t"
+    /*#3 Bias high residue.*/
+    "paddsw %%mm0,%%mm2\n\t"
+    /*#3 Pack to byte.*/
+    "packuswb %%mm2,%%mm1\n\t"
+    /*#4 Bias low  residue.*/
+    "paddsw %%mm0,%%mm3\n\t"
+    /*#4 Bias high residue.*/
+    "paddsw %%mm0,%%mm4\n\t"
+    /*#4 Pack to byte.*/
+    "packuswb %%mm4,%%mm3\n\t"
+    /*#5 Bias low  residue.*/
+    "paddsw %%mm0,%%mm5\n\t"
+    /*#5 Bias high residue.*/
+    "paddsw %%mm0,%%mm6\n\t"
+    /*#5 Pack to byte.*/
+    "packuswb %%mm6,%%mm5\n\t"
+    /*#3 Write row.*/
+    "movq %%mm1,(%[dst],%[dst_ystride3])\n\t"
+    /*#4 Write row.*/
+    "movq %%mm3,(%[dst4])\n\t"
+    /*#5 Write row.*/
+    "movq %%mm5,(%[dst4],%[dst_ystride])\n\t"
+    /*#6 Load low residue.*/
+    "movq 12*8(%[residue]),%%mm1\n\t"
+    /*#6 Load high residue.*/
+    "movq 13*8(%[residue]),%%mm2\n\t"
+    /*#7 Load low residue.*/
+    "movq 14*8(%[residue]),%%mm3\n\t"
+    /*#7 Load high residue.*/
+    "movq 15*8(%[residue]),%%mm4\n\t"
+    /*#6 Bias low  residue.*/
+    "paddsw %%mm0,%%mm1\n\t"
+    /*#6 Bias high residue.*/
+    "paddsw %%mm0,%%mm2\n\t"
+    /*#6 Pack to byte.*/
+    "packuswb %%mm2,%%mm1\n\t"
+    /*#7 Bias low  residue.*/
+    "paddsw %%mm0,%%mm3\n\t"
+    /*#7 Bias high residue.*/
+    "paddsw %%mm0,%%mm4\n\t"
+    /*#7 Pack to byte.*/
+    "packuswb %%mm4,%%mm3\n\t"
+    /*#6 Write row.*/
+    "movq %%mm1,(%[dst4],%[dst_ystride],2)\n\t"
+    /*#7 Write row.*/
+    "movq %%mm3,(%[dst4],%[dst_ystride3])\n\t"
+    :
+    :[residue]"r"(_residue),
+     [dst]"r"(_dst),
+     [dst4]"r"(_dst+(_dst_ystride<<2)),
+     [dst_ystride]"r"((long)_dst_ystride),
+     [dst_ystride3]"r"((long)_dst_ystride*3)
+    :"memory"
+  );
+}
+
+void oc_frag_recon_inter_mmx(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src,int _src_ystride,const ogg_int16_t *_residue){
+  int i;
+  /*Zero mm0.*/
+  __asm__ __volatile__("pxor %%mm0,%%mm0\n\t"::);
+  for(i=4;i-->0;){
+    __asm__ __volatile__(
+      /*#0 Load source.*/
+      "movq (%[src]),%%mm3\n\t"
+      /*#1 Load source.*/
+      "movq (%[src],%[src_ystride]),%%mm7\n\t"
+      /*#0 Get copy of src.*/
+      "movq %%mm3,%%mm4\n\t"
+      /*#0 Expand high source.*/
+      "punpckhbw %%mm0,%%mm4\n\t"
+      /*#0 Expand low  source.*/
+      "punpcklbw %%mm0,%%mm3\n\t"
+      /*#0 Add residue high.*/
+      "paddsw 8(%[residue]),%%mm4\n\t"
+      /*#1 Get copy of src.*/
+      "movq %%mm7,%%mm2\n\t"
+      /*#0 Add residue low.*/
+      "paddsw (%[residue]), %%mm3\n\t"
+      /*#1 Expand high source.*/
+      "punpckhbw %%mm0,%%mm2\n\t"
+      /*#0 Pack final row pixels.*/
+      "packuswb %%mm4,%%mm3\n\t"
+      /*#1 Expand low  source.*/
+      "punpcklbw %%mm0,%%mm7\n\t"
+      /*#1 Add residue low.*/
+      "paddsw 16(%[residue]),%%mm7\n\t"
+      /*#1 Add residue high.*/
+      "paddsw 24(%[residue]),%%mm2\n\t"
+      /*Advance residue.*/
+      "lea 32(%[residue]),%[residue]\n\t"
+      /*#1 Pack final row pixels.*/
+      "packuswb %%mm2,%%mm7\n\t"
+      /*Advance src.*/
+      "lea (%[src],%[src_ystride],2),%[src]\n\t"
+      /*#0 Write row.*/
+      "movq %%mm3,(%[dst])\n\t"
+      /*#1 Write row.*/
+      "movq %%mm7,(%[dst],%[dst_ystride])\n\t"
+      /*Advance dst.*/
+      "lea (%[dst],%[dst_ystride],2),%[dst]\n\t"
+      :[residue]"+r"(_residue),[dst]"+r"(_dst),[src]"+r"(_src)
+      :[dst_ystride]"r"((long)_dst_ystride),
+       [src_ystride]"r"((long)_src_ystride)
+      :"memory"
+    );
+  }
+}
+
+void oc_frag_recon_inter2_mmx(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src1,int _src1_ystride,const unsigned char *_src2,
+ int _src2_ystride,const ogg_int16_t *_residue){
+  int i;
+  /*NOTE: This assumes that
+     _dst_ystride==_src1_ystride&&_dst_ystride==_src2_ystride.
+    This is currently always the case, but a slower fallback version will need
+     to be written if it ever is not.*/
+  /*Zero mm7.*/
+  __asm__ __volatile__("pxor %%mm7,%%mm7\n\t"::);
+  for(i=4;i-->0;){
+    __asm__ __volatile__(
+      /*#0 Load src1.*/
+      "movq (%[src1]),%%mm0\n\t"
+      /*#0 Load src2.*/
+      "movq (%[src2]),%%mm2\n\t"
+      /*#0 Copy src1.*/
+      "movq %%mm0,%%mm1\n\t"
+      /*#0 Copy src2.*/
+      "movq %%mm2,%%mm3\n\t"
+      /*#1 Load src1.*/
+      "movq (%[src1],%[ystride]),%%mm4\n\t"
+      /*#0 Unpack lower src1.*/
+      "punpcklbw %%mm7,%%mm0\n\t"
+      /*#1 Load src2.*/
+      "movq (%[src2],%[ystride]),%%mm5\n\t"
+      /*#0 Unpack higher src1.*/
+      "punpckhbw %%mm7,%%mm1\n\t"
+      /*#0 Unpack lower src2.*/
+      "punpcklbw %%mm7,%%mm2\n\t"
+      /*#0 Unpack higher src2.*/
+      "punpckhbw %%mm7,%%mm3\n\t"
+      /*Advance src1 ptr.*/
+      "lea (%[src1],%[ystride],2),%[src1]\n\t"
+      /*Advance src2 ptr.*/
+      "lea (%[src2],%[ystride],2),%[src2]\n\t"
+      /*#0 Lower src1+src2.*/
+      "paddsw %%mm2,%%mm0\n\t"
+      /*#0 Higher src1+src2.*/
+      "paddsw %%mm3,%%mm1\n\t"
+      /*#1 Copy src1.*/
+      "movq %%mm4,%%mm2\n\t"
+      /*#0 Build lo average.*/
+      "psraw $1,%%mm0\n\t"
+      /*#1 Copy src2.*/
+      "movq %%mm5,%%mm3\n\t"
+      /*#1 Unpack lower src1.*/
+      "punpcklbw %%mm7,%%mm4\n\t"
+      /*#0 Build hi average.*/
+      "psraw $1,%%mm1\n\t"
+      /*#1 Unpack higher src1.*/
+      "punpckhbw %%mm7,%%mm2\n\t"
+      /*#0 low+=residue.*/
+      "paddsw (%[residue]),%%mm0\n\t"
+      /*#1 Unpack lower src2.*/
+      "punpcklbw %%mm7,%%mm5\n\t"
+      /*#0 high+=residue.*/
+      "paddsw 8(%[residue]),%%mm1\n\t"
+      /*#1 Unpack higher src2.*/
+      "punpckhbw %%mm7,%%mm3\n\t"
+      /*#1 Lower src1+src2.*/
+      "paddsw %%mm4,%%mm5\n\t"
+      /*#0 Pack and saturate.*/
+      "packuswb %%mm1,%%mm0\n\t"
+      /*#1 Higher src1+src2.*/
+      "paddsw %%mm2,%%mm3\n\t"
+      /*#0 Write row.*/
+      "movq %%mm0,(%[dst])\n\t"
+      /*#1 Build lo average.*/
+      "psraw $1,%%mm5\n\t"
+      /*#1 Build hi average.*/
+      "psraw $1,%%mm3\n\t"
+      /*#1 low+=residue.*/
+      "paddsw 16(%[residue]),%%mm5\n\t"
+      /*#1 high+=residue.*/
+      "paddsw 24(%[residue]),%%mm3\n\t"
+      /*#1 Pack and saturate.*/
+      "packuswb  %%mm3,%%mm5\n\t"
+      /*#1 Write row ptr.*/
+      "movq %%mm5,(%[dst],%[ystride])\n\t"
+      /*Advance residue ptr.*/
+      "add $32,%[residue]\n\t"
+      /*Advance dest ptr.*/
+      "lea (%[dst],%[ystride],2),%[dst]\n\t"
+     :[dst]"+r"(_dst),[residue]"+r"(_residue),
+      [src1]"+r"(_src1),[src2]"+r"(_src2)
+     :[ystride]"r"((long)_dst_ystride)
+     :"memory"
+    );
+  }
+}
+
+void oc_restore_fpu_mmx(void){
+  __asm__ __volatile__("emms\n\t");
+}
+#endif

Added: trunk/theora-exp/lib/x86/mmxidct.c
===================================================================
--- trunk/theora-exp/lib/x86/mmxidct.c	                        (rev 0)
+++ trunk/theora-exp/lib/x86/mmxidct.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,518 @@
+/*MMX acceleration of Theora's iDCT.
+  Originally written by Rudolf Marek, based on code from On2's VP3.*/
+#include <ogg/ogg.h>
+#include "../dct.h"
+#include "../idct.h"
+
+#include "x86int.h"
+
+#if defined(OC_X86ASM)
+
+/*These are offsets into the table of constants below.*/
+/*7 rows of cosines, in order: pi/16 * (1 ... 7).*/
+#define OC_COSINE_OFFSET (0)
+/*A row of 8's.*/
+#define OC_EIGHT_OFFSET  (56)
+
+
+
+/*A table of constants used by the MMX routines.*/
+static const ogg_uint16_t __attribute__((aligned(8),used))
+ OC_IDCT_CONSTS[(7+1)*4]={
+  (ogg_uint16_t)OC_C1S7,(ogg_uint16_t)OC_C1S7,
+  (ogg_uint16_t)OC_C1S7,(ogg_uint16_t)OC_C1S7,
+  (ogg_uint16_t)OC_C2S6,(ogg_uint16_t)OC_C2S6,
+  (ogg_uint16_t)OC_C2S6,(ogg_uint16_t)OC_C2S6,
+  (ogg_uint16_t)OC_C3S5,(ogg_uint16_t)OC_C3S5,
+  (ogg_uint16_t)OC_C3S5,(ogg_uint16_t)OC_C3S5,
+  (ogg_uint16_t)OC_C4S4,(ogg_uint16_t)OC_C4S4,
+  (ogg_uint16_t)OC_C4S4,(ogg_uint16_t)OC_C4S4,
+  (ogg_uint16_t)OC_C5S3,(ogg_uint16_t)OC_C5S3,
+  (ogg_uint16_t)OC_C5S3,(ogg_uint16_t)OC_C5S3,
+  (ogg_uint16_t)OC_C6S2,(ogg_uint16_t)OC_C6S2,
+  (ogg_uint16_t)OC_C6S2,(ogg_uint16_t)OC_C6S2,
+  (ogg_uint16_t)OC_C7S1,(ogg_uint16_t)OC_C7S1,
+  (ogg_uint16_t)OC_C7S1,(ogg_uint16_t)OC_C7S1,
+      8,    8,    8,    8
+};
+
+/*Converts the expression in the argument to a string.*/
+#define OC_M2STR(_s) #_s
+
+/*38 cycles*/
+#define OC_IDCT_BEGIN \
+  "#OC_IDCT_BEGIN\n\t" \
+  "movq "OC_I(3)",%%mm2\n\t" \
+  "movq "OC_C(3)",%%mm6\n\t" \
+  "movq %%mm2,%%mm4\n\t" \
+  "movq "OC_J(5)",%%mm7\n\t" \
+  "pmulhw %%mm6,%%mm4\n\t" \
+  "movq "OC_C(5)",%%mm1\n\t" \
+  "pmulhw %%mm7,%%mm6\n\t" \
+  "movq %%mm1,%%mm5\n\t" \
+  "pmulhw %%mm2,%%mm1\n\t" \
+  "movq "OC_I(1)",%%mm3\n\t" \
+  "pmulhw %%mm7,%%mm5\n\t" \
+  "movq "OC_C(1)",%%mm0\n\t" \
+  "paddw %%mm2,%%mm4\n\t" \
+  "paddw %%mm7,%%mm6\n\t" \
+  "paddw %%mm1,%%mm2\n\t" \
+  "movq "OC_J(7)",%%mm1\n\t" \
+  "paddw %%mm5,%%mm7\n\t" \
+  "movq %%mm0,%%mm5\n\t" \
+  "pmulhw %%mm3,%%mm0\n\t" \
+  "paddw %%mm7,%%mm4\n\t" \
+  "pmulhw %%mm1,%%mm5\n\t" \
+  "movq "OC_C(7)",%%mm7\n\t" \
+  "psubw %%mm2,%%mm6\n\t" \
+  "paddw %%mm3,%%mm0\n\t" \
+  "pmulhw %%mm7,%%mm3\n\t" \
+  "movq "OC_I(2)",%%mm2\n\t" \
+  "pmulhw %%mm1,%%mm7\n\t" \
+  "paddw %%mm1,%%mm5\n\t" \
+  "movq %%mm2,%%mm1\n\t" \
+  "pmulhw "OC_C(2)",%%mm2\n\t" \
+  "psubw %%mm5,%%mm3\n\t" \
+  "movq "OC_J(6)",%%mm5\n\t" \
+  "paddw %%mm7,%%mm0\n\t" \
+  "movq %%mm5,%%mm7\n\t" \
+  "psubw %%mm4,%%mm0\n\t" \
+  "pmulhw "OC_C(2)",%%mm5\n\t" \
+  "paddw %%mm1,%%mm2\n\t" \
+  "pmulhw "OC_C(6)",%%mm1\n\t" \
+  "paddw %%mm4,%%mm4\n\t" \
+  "paddw %%mm0,%%mm4\n\t" \
+  "psubw %%mm6,%%mm3\n\t" \
+  "paddw %%mm7,%%mm5\n\t" \
+  "paddw %%mm6,%%mm6\n\t" \
+  "pmulhw "OC_C(6)",%%mm7\n\t" \
+  "paddw %%mm3,%%mm6\n\t" \
+  "movq %%mm4,"OC_I(1)"\n\t" \
+  "psubw %%mm5,%%mm1\n\t" \
+  "movq "OC_C(4)",%%mm4\n\t" \
+  "movq %%mm3,%%mm5\n\t" \
+  "pmulhw %%mm4,%%mm3\n\t" \
+  "paddw %%mm2,%%mm7\n\t" \
+  "movq %%mm6,"OC_I(2)"\n\t" \
+  "movq %%mm0,%%mm2\n\t" \
+  "movq "OC_I(0)",%%mm6\n\t" \
+  "pmulhw %%mm4,%%mm0\n\t" \
+  "paddw %%mm3,%%mm5\n\t" \
+  "movq "OC_J(4)",%%mm3\n\t" \
+  "psubw %%mm1,%%mm5\n\t" \
+  "paddw %%mm0,%%mm2\n\t" \
+  "psubw %%mm3,%%mm6\n\t" \
+  "movq %%mm6,%%mm0\n\t" \
+  "pmulhw %%mm4,%%mm6\n\t" \
+  "paddw %%mm3,%%mm3\n\t" \
+  "paddw %%mm1,%%mm1\n\t" \
+  "paddw %%mm0,%%mm3\n\t" \
+  "paddw %%mm5,%%mm1\n\t" \
+  "pmulhw %%mm3,%%mm4\n\t" \
+  "paddw %%mm0,%%mm6\n\t" \
+  "psubw %%mm2,%%mm6\n\t" \
+  "paddw %%mm2,%%mm2\n\t" \
+  "movq "OC_I(1)",%%mm0\n\t" \
+  "paddw %%mm6,%%mm2\n\t" \
+  "paddw %%mm3,%%mm4\n\t" \
+  "psubw %%mm1,%%mm2\n\t" \
+  "#end OC_IDCT_BEGIN\n\t" \
+
+/*38+8=46 cycles.*/
+#define OC_ROW_IDCT \
+  "#OC_ROW_IDCT\n" \
+  OC_IDCT_BEGIN \
+  /*r3=D'*/ \
+  "movq "OC_I(2)",%%mm3\n\t" \
+  /*r4=E'=E-G*/ \
+  "psubw %%mm7,%%mm4\n\t" \
+  /*r1=H'+H'*/ \
+  "paddw %%mm1,%%mm1\n\t" \
+  /*r7=G+G*/ \
+  "paddw %%mm7,%%mm7\n\t" \
+  /*r1=R1=A''+H'*/ \
+  "paddw %%mm2,%%mm1\n\t" \
+  /*r7=G'=E+G*/ \
+  "paddw %%mm4,%%mm7\n\t" \
+  /*r4=R4=E'-D'*/ \
+  "psubw %%mm3,%%mm4\n\t" \
+  "paddw %%mm3,%%mm3\n\t" \
+  /*r6=R6=F'-B''*/ \
+  "psubw %%mm5,%%mm6\n\t" \
+  "paddw %%mm5,%%mm5\n\t" \
+  /*r3=R3=E'+D'*/ \
+  "paddw %%mm4,%%mm3\n\t" \
+  /*r5=R5=F'+B''*/ \
+  "paddw %%mm6,%%mm5\n\t" \
+  /*r7=R7=G'-C'*/ \
+  "psubw %%mm0,%%mm7\n\t" \
+  "paddw %%mm0,%%mm0\n\t" \
+  /*Save R1.*/ \
+  "movq %%mm1,"OC_I(1)"\n\t" \
+  /*r0=R0=G.+C.*/ \
+  "paddw %%mm7,%%mm0\n\t" \
+  "#end OC_ROW_IDCT\n\t" \
+
+/*The following macro does two 4x4 transposes in place.
+  At entry, we assume:
+    r0 = a3 a2 a1 a0
+  I(1) = b3 b2 b1 b0
+    r2 = c3 c2 c1 c0
+    r3 = d3 d2 d1 d0
+
+    r4 = e3 e2 e1 e0
+    r5 = f3 f2 f1 f0
+    r6 = g3 g2 g1 g0
+    r7 = h3 h2 h1 h0
+
+  At exit, we have:
+  I(0) = d0 c0 b0 a0
+  I(1) = d1 c1 b1 a1
+  I(2) = d2 c2 b2 a2
+  I(3) = d3 c3 b3 a3
+
+  J(4) = h0 g0 f0 e0
+  J(5) = h1 g1 f1 e1
+  J(6) = h2 g2 f2 e2
+  J(7) = h3 g3 f3 e3
+
+  I(0) I(1) I(2) I(3) is the transpose of r0 I(1) r2 r3.
+  J(4) J(5) J(6) J(7) is the transpose of r4   r5 r6 r7.
+
+  Since r1 is free at entry, we calculate the Js first.*/
+/*19 cycles.*/
+#define OC_TRANSPOSE \
+  "#OC_TRANSPOSE\n\t" \
+  "movq %%mm4,%%mm1\n\t" \
+  "punpcklwd %%mm5,%%mm4\n\t" \
+  "movq %%mm0,"OC_I(0)"\n\t" \
+  "punpckhwd %%mm5,%%mm1\n\t" \
+  "movq %%mm6,%%mm0\n\t" \
+  "punpcklwd %%mm7,%%mm6\n\t" \
+  "movq %%mm4,%%mm5\n\t" \
+  "punpckldq %%mm6,%%mm4\n\t" \
+  "punpckhdq %%mm6,%%mm5\n\t" \
+  "movq %%mm1,%%mm6\n\t" \
+  "movq %%mm4,"OC_J(4)"\n\t" \
+  "punpckhwd %%mm7,%%mm0\n\t" \
+  "movq %%mm5,"OC_J(5)"\n\t" \
+  "punpckhdq %%mm0,%%mm6\n\t" \
+  "movq "OC_I(0)",%%mm4\n\t" \
+  "punpckldq %%mm0,%%mm1\n\t" \
+  "movq "OC_I(1)",%%mm5\n\t" \
+  "movq %%mm4,%%mm0\n\t" \
+  "movq %%mm6,"OC_J(7)"\n\t" \
+  "punpcklwd %%mm5,%%mm0\n\t" \
+  "movq %%mm1,"OC_J(6)"\n\t" \
+  "punpckhwd %%mm5,%%mm4\n\t" \
+  "movq %%mm2,%%mm5\n\t" \
+  "punpcklwd %%mm3,%%mm2\n\t" \
+  "movq %%mm0,%%mm1\n\t" \
+  "punpckldq %%mm2,%%mm0\n\t" \
+  "punpckhdq %%mm2,%%mm1\n\t" \
+  "movq %%mm4,%%mm2\n\t" \
+  "movq %%mm0,"OC_I(0)"\n\t" \
+  "punpckhwd %%mm3,%%mm5\n\t" \
+  "movq %%mm1,"OC_I(1)"\n\t" \
+  "punpckhdq %%mm5,%%mm4\n\t" \
+  "punpckldq %%mm5,%%mm2\n\t" \
+  "movq %%mm4,"OC_I(3)"\n\t" \
+  "movq %%mm2,"OC_I(2)"\n\t" \
+  "#end OC_TRANSPOSE\n\t" \
+
+/*38+19=57 cycles.*/
+#define OC_COLUMN_IDCT \
+  "#OC_COLUMN_IDCT\n" \
+  OC_IDCT_BEGIN \
+  "paddw "OC_8",%%mm2\n\t" \
+  /*r1=H'+H'*/ \
+  "paddw %%mm1,%%mm1\n\t" \
+  /*r1=R1=A''+H'*/ \
+  "paddw %%mm2,%%mm1\n\t" \
+  /*r2=NR2*/ \
+  "psraw $4,%%mm2\n\t" \
+  /*r4=E'=E-G*/ \
+  "psubw %%mm7,%%mm4\n\t" \
+  /*r1=NR1*/ \
+  "psraw $4,%%mm1\n\t" \
+  /*r3=D'*/ \
+  "movq "OC_I(2)",%%mm3\n\t" \
+  /*r7=G+G*/ \
+  "paddw %%mm7,%%mm7\n\t" \
+  /*Store NR2 at I(2).*/ \
+  "movq %%mm2,"OC_I(2)"\n\t" \
+  /*r7=G'=E+G*/ \
+  "paddw %%mm4,%%mm7\n\t" \
+  /*Store NR1 at I(1).*/ \
+  "movq %%mm1,"OC_I(1)"\n\t" \
+  /*r4=R4=E'-D'*/ \
+  "psubw %%mm3,%%mm4\n\t" \
+  "paddw "OC_8",%%mm4\n\t" \
+  /*r3=D'+D'*/ \
+  "paddw %%mm3,%%mm3\n\t" \
+  /*r3=R3=E'+D'*/ \
+  "paddw %%mm4,%%mm3\n\t" \
+  /*r4=NR4*/ \
+  "psraw $4,%%mm4\n\t" \
+  /*r6=R6=F'-B''*/ \
+  "psubw %%mm5,%%mm6\n\t" \
+  /*r3=NR3*/ \
+  "psraw $4,%%mm3\n\t" \
+  "paddw "OC_8",%%mm6\n\t" \
+  /*r5=B''+B''*/ \
+  "paddw %%mm5,%%mm5\n\t" \
+  /*r5=R5=F'+B''*/ \
+  "paddw %%mm6,%%mm5\n\t" \
+  /*r6=NR6*/ \
+  "psraw $4,%%mm6\n\t" \
+  /*Store NR4 at J(4).*/ \
+  "movq %%mm4,"OC_J(4)"\n\t" \
+  /*r5=NR5*/ \
+  "psraw $4,%%mm5\n\t" \
+  /*Store NR3 at I(3).*/ \
+  "movq %%mm3,"OC_I(3)"\n\t" \
+  /*r7=R7=G'-C'*/ \
+  "psubw %%mm0,%%mm7\n\t" \
+  "paddw "OC_8",%%mm7\n\t" \
+  /*r0=C'+C'*/ \
+  "paddw %%mm0,%%mm0\n\t" \
+  /*r0=R0=G'+C'*/ \
+  "paddw %%mm7,%%mm0\n\t" \
+  /*r7=NR7*/ \
+  "psraw $4,%%mm7\n\t" \
+  /*Store NR6 at J(6).*/ \
+  "movq %%mm6,"OC_J(6)"\n\t" \
+  /*r0=NR0*/ \
+  "psraw $4,%%mm0\n\t" \
+  /*Store NR5 at J(5).*/ \
+  "movq %%mm5,"OC_J(5)"\n\t" \
+  /*Store NR7 at J(7).*/ \
+  "movq %%mm7,"OC_J(7)"\n\t" \
+  /*Store NR0 at I(0).*/ \
+  "movq %%mm0,"OC_I(0)"\n\t" \
+  "#end OC_COLUMN_IDCT\n\t" \
+
+#define OC_MID(_m,_i) OC_M2STR(_m+(_i)*8)"(%[c])"
+#define OC_C(_i)      OC_MID(OC_COSINE_OFFSET,_i-1)
+#define OC_8          OC_MID(OC_EIGHT_OFFSET,0)
+
+void oc_idct8x8_mmx(ogg_int16_t _y[64]){
+  /*This routine accepts an 8x8 matrix, but in transposed form.
+    Every 4x4 submatrix is transposed.*/
+  __asm__ __volatile__(
+#define OC_I(_k)      OC_M2STR((_k*16))"(%[y])"
+#define OC_J(_k)      OC_M2STR(((_k-4)*16)+8)"(%[y])"
+    OC_ROW_IDCT
+    OC_TRANSPOSE
+#undef  OC_I
+#undef  OC_J
+#define OC_I(_k)      OC_M2STR((_k*16)+64)"(%[y])"
+#define OC_J(_k)      OC_M2STR(((_k-4)*16)+72)"(%[y])"
+    OC_ROW_IDCT
+    OC_TRANSPOSE
+#undef  OC_I
+#undef  OC_J
+#define OC_I(_k)      OC_M2STR((_k*16))"(%[y])"
+#define OC_J(_k)      OC_I(_k)
+    OC_COLUMN_IDCT
+#undef  OC_I
+#undef  OC_J
+#define OC_I(_k)      OC_M2STR((_k*16)+8)"(%[y])"
+#define OC_J(_k)      OC_I(_k)
+    OC_COLUMN_IDCT
+#undef  OC_I
+#undef  OC_J
+    "emms\n\t"
+    :
+    :[y]"r"(_y),[c]"r"(OC_IDCT_CONSTS)
+  );
+}
+
+/*25 cycles.*/
+#define OC_IDCT_BEGIN_10 \
+ "#OC_IDCT_BEGIN_10\n\t" \
+ "movq "OC_I(3)",%%mm2\n\t" \
+ "nop\n\t" \
+ "movq "OC_C(3)",%%mm6\n\t" \
+ "movq %%mm2,%%mm4\n\t" \
+ "movq "OC_C(5)",%%mm1\n\t" \
+ "pmulhw %%mm6,%%mm4\n\t" \
+ "movq "OC_I(1)",%%mm3\n\t" \
+ "pmulhw %%mm2,%%mm1\n\t" \
+ "movq "OC_C(1)",%%mm0\n\t" \
+ "paddw %%mm2,%%mm4\n\t" \
+ "pxor %%mm6,%%mm6\n\t" \
+ "paddw %%mm1,%%mm2\n\t" \
+ "movq "OC_I(2)",%%mm5\n\t" \
+ "pmulhw %%mm3,%%mm0\n\t" \
+ "movq %%mm5,%%mm1\n\t" \
+ "paddw %%mm3,%%mm0\n\t" \
+ "pmulhw "OC_C(7)",%%mm3\n\t" \
+ "psubw %%mm2,%%mm6\n\t" \
+ "pmulhw "OC_C(2)",%%mm5\n\t" \
+ "psubw %%mm4,%%mm0\n\t" \
+ "movq "OC_I(2)",%%mm7\n\t" \
+ "paddw %%mm4,%%mm4\n\t" \
+ "paddw %%mm5,%%mm7\n\t" \
+ "paddw %%mm0,%%mm4\n\t" \
+ "pmulhw "OC_C(6)",%%mm1\n\t" \
+ "psubw %%mm6,%%mm3\n\t" \
+ "movq %%mm4,"OC_I(1)"\n\t" \
+ "paddw %%mm6,%%mm6\n\t" \
+ "movq "OC_C(4)",%%mm4\n\t" \
+ "paddw %%mm3,%%mm6\n\t" \
+ "movq %%mm3,%%mm5\n\t" \
+ "pmulhw %%mm4,%%mm3\n\t" \
+ "movq %%mm6,"OC_I(2)"\n\t" \
+ "movq %%mm0,%%mm2\n\t" \
+ "movq "OC_I(0)",%%mm6\n\t" \
+ "pmulhw %%mm4,%%mm0\n\t" \
+ "paddw %%mm3,%%mm5\n\t" \
+ "paddw %%mm0,%%mm2\n\t" \
+ "psubw %%mm1,%%mm5\n\t" \
+ "pmulhw %%mm4,%%mm6\n\t" \
+ "paddw "OC_I(0)",%%mm6\n\t" \
+ "paddw %%mm1,%%mm1\n\t" \
+ "movq %%mm6,%%mm4\n\t" \
+ "paddw %%mm5,%%mm1\n\t" \
+ "psubw %%mm2,%%mm6\n\t" \
+ "paddw %%mm2,%%mm2\n\t" \
+ "movq "OC_I(1)",%%mm0\n\t" \
+ "paddw %%mm6,%%mm2\n\t" \
+ "psubw %%mm1,%%mm2\n\t" \
+ "nop\n\t" \
+ "#end OC_IDCT_BEGIN_10\n\t" \
+
+/*25+8=33 cycles.*/
+#define OC_ROW_IDCT_10 \
+ "#OC_ROW_IDCT_10\n\t" \
+ OC_IDCT_BEGIN_10 \
+ /*r3=D'*/ \
+ "movq "OC_I(2)",%%mm3\n\t" \
+ /*r4=E'=E-G*/ \
+ "psubw %%mm7,%%mm4\n\t" \
+ /*r1=H'+H'*/ \
+ "paddw %%mm1,%%mm1\n\t" \
+ /*r7=G+G*/ \
+ "paddw %%mm7,%%mm7\n\t" \
+ /*r1=R1=A''+H'*/ \
+ "paddw %%mm2,%%mm1\n\t" \
+ /*r7=G'=E+G*/ \
+ "paddw %%mm4,%%mm7\n\t" \
+ /*r4=R4=E'-D'*/ \
+ "psubw %%mm3,%%mm4\n\t" \
+ "paddw %%mm3,%%mm3\n\t" \
+ /*r6=R6=F'-B''*/ \
+ "psubw %%mm5,%%mm6\n\t" \
+ "paddw %%mm5,%%mm5\n\t" \
+ /*r3=R3=E'+D'*/ \
+ "paddw %%mm4,%%mm3\n\t" \
+ /*r5=R5=F'+B''*/ \
+ "paddw %%mm6,%%mm5\n\t" \
+ /*r7=R7=G'-C'*/ \
+ "psubw %%mm0,%%mm7\n\t" \
+ "paddw %%mm0,%%mm0\n\t" \
+ /*Save R1.*/ \
+ "movq %%mm1,"OC_I(1)"\n\t" \
+ /*r0=R0=G'+C'*/ \
+ "paddw %%mm7,%%mm0\n\t" \
+ "#end OC_ROW_IDCT_10\n\t" \
+
+/*25+19=44 cycles'*/
+#define OC_COLUMN_IDCT_10 \
+ "#OC_COLUMN_IDCT_10\n\t" \
+ OC_IDCT_BEGIN_10 \
+ "paddw "OC_8",%%mm2\n\t" \
+ /*r1=H'+H'*/ \
+ "paddw %%mm1,%%mm1\n\t" \
+ /*r1=R1=A''+H'*/ \
+ "paddw %%mm2,%%mm1\n\t" \
+ /*r2=NR2*/ \
+ "psraw $4,%%mm2\n\t" \
+ /*r4=E'=E-G*/ \
+ "psubw %%mm7,%%mm4\n\t" \
+ /*r1=NR1*/ \
+ "psraw $4,%%mm1\n\t" \
+ /*r3=D'*/ \
+ "movq "OC_I(2)",%%mm3\n\t" \
+ /*r7=G+G*/ \
+ "paddw %%mm7,%%mm7\n\t" \
+ /*Store NR2 at I(2).*/ \
+ "movq %%mm2,"OC_I(2)"\n\t" \
+ /*r7=G'=E+G*/ \
+ "paddw %%mm4,%%mm7\n\t" \
+ /*Store NR1 at I(1).*/ \
+ "movq %%mm1,"OC_I(1)"\n\t" \
+ /*r4=R4=E'-D'*/ \
+ "psubw %%mm3,%%mm4\n\t" \
+ "paddw "OC_8",%%mm4\n\t" \
+ /*r3=D'+D'*/ \
+ "paddw %%mm3,%%mm3\n\t" \
+ /*r3=R3=E'+D'*/ \
+ "paddw %%mm4,%%mm3\n\t" \
+ /*r4=NR4*/ \
+ "psraw $4,%%mm4\n\t" \
+ /*r6=R6=F'-B''*/ \
+ "psubw %%mm5,%%mm6\n\t" \
+ /*r3=NR3*/ \
+ "psraw $4,%%mm3\n\t" \
+ "paddw "OC_8",%%mm6\n\t" \
+ /*r5=B''+B''*/ \
+ "paddw %%mm5,%%mm5\n\t" \
+ /*r5=R5=F'+B''*/ \
+ "paddw %%mm6,%%mm5\n\t" \
+ /*r6=NR6*/ \
+ "psraw $4,%%mm6\n\t" \
+ /*Store NR4 at J(4).*/ \
+ "movq %%mm4,"OC_J(4)"\n\t" \
+ /*r5=NR5*/ \
+ "psraw $4,%%mm5\n\t" \
+ /*Store NR3 at I(3).*/ \
+ "movq %%mm3,"OC_I(3)"\n\t" \
+ /*r7=R7=G'-C'*/ \
+ "psubw %%mm0,%%mm7\n\t" \
+ "paddw "OC_8",%%mm7\n\t" \
+ /*r0=C'+C'*/ \
+ "paddw %%mm0,%%mm0\n\t" \
+ /*r0=R0=G'+C'*/ \
+ "paddw %%mm7,%%mm0\n\t" \
+ /*r7=NR7*/ \
+ "psraw $4,%%mm7\n\t" \
+ /*Store NR6 at J(6).*/ \
+ "movq %%mm6,"OC_J(6)"\n\t" \
+ /*r0=NR0*/ \
+ "psraw $4,%%mm0\n\t" \
+ /*Store NR5 at J(5).*/ \
+ "movq %%mm5,"OC_J(5)"\n\t" \
+ /*Store NR7 at J(7).*/ \
+ "movq %%mm7,"OC_J(7)"\n\t" \
+ /*Store NR0 at I(0).*/ \
+ "movq %%mm0,"OC_I(0)"\n\t" \
+ "#end OC_COLUMN_IDCT_10\n\t" \
+
+void oc_idct8x8_10_mmx(ogg_int16_t _y[64]){
+  __asm__ __volatile__(
+#define OC_I(_k) OC_M2STR((_k*16))"(%[y])"
+#define OC_J(_k) OC_M2STR(((_k-4)*16)+8)"(%[y])"
+    /*Done with dequant, descramble, and partial transpose.
+      Now do the iDCT itself.*/
+    OC_ROW_IDCT_10
+    OC_TRANSPOSE
+#undef  OC_I
+#undef  OC_J
+#define OC_I(_k) OC_M2STR((_k*16))"(%[y])"
+#define OC_J(_k) OC_I(_k)
+    OC_COLUMN_IDCT_10
+#undef  OC_I
+#undef  OC_J
+#define OC_I(_k) OC_M2STR((_k*16)+8)"(%[y])"
+#define OC_J(_k) OC_I(_k)
+    OC_COLUMN_IDCT_10
+#undef  OC_I
+#undef  OC_J
+    "emms\n\t"
+    :
+    :[y]"r"(_y),[c]"r"(OC_IDCT_CONSTS)
+  );
+}
+#endif

Added: trunk/theora-exp/lib/x86/mmxstate.c
===================================================================
--- trunk/theora-exp/lib/x86/mmxstate.c	                        (rev 0)
+++ trunk/theora-exp/lib/x86/mmxstate.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,645 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+*/
+/*MMX acceleration of complete fragment reconstruction algorithm.
+  Originally written by Rudolf Marek.*/
+#include "x86int.h"
+#include "../internal.h"
+
+#if defined(OC_X86ASM)
+
+static const __attribute__((aligned(8),used)) int OC_FZIG_ZAGMMX[64]={
+   0, 8, 1, 2, 9,16,24,17,
+  10, 3,32,11,18,25, 4,12,
+   5,26,19,40,33,34,41,48,
+  27, 6,13,20,28,21,14, 7,
+  56,49,42,35,43,50,57,36,
+  15,22,29,30,23,44,37,58,
+  51,59,38,45,52,31,60,53,
+  46,39,47,54,61,62,55,63
+};
+
+
+
+void oc_state_frag_recon_mmx(oc_theora_state *_state,const oc_fragment *_frag,
+ int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,int _ncoefs,
+ ogg_uint16_t _dc_iquant,const ogg_uint16_t _ac_iquant[64]){
+  ogg_int16_t  __attribute__((aligned(8))) res_buf[64];
+  int dst_framei;
+  int dst_ystride;
+  int zzi;
+  /*_last_zzi is subtly different from an actual count of the number of
+     coefficients we decoded for this block.
+    It contains the value of zzi BEFORE the final token in the block was
+     decoded.
+    In most cases this is an EOB token (the continuation of an EOB run from a
+     previous block counts), and so this is the same as the coefficient count.
+    However, in the case that the last token was NOT an EOB token, but filled
+     the block up with exactly 64 coefficients, _last_zzi will be less than 64.
+    Provided the last token was not a pure zero run, the minimum value it can
+     be is 46, and so that doesn't affect any of the cases in this routine.
+    However, if the last token WAS a pure zero run of length 63, then _last_zzi
+     will be 1 while the number of coefficients decoded is 64.
+    Thus, we will trigger the following special case, where the real
+     coefficient count would not.
+    Note also that a zero run of length 64 will give _last_zzi a value of 0,
+     but we still process the DC coefficient, which might have a non-zero value
+     due to DC prediction.
+    Although convoluted, this is arguably the correct behavior: it allows us to
+     dequantize fewer coefficients and use a smaller transform when the block
+     ends with a long zero run instead of a normal EOB token.
+    It could be smarter... multiple separate zero runs at the end of a block
+     will fool it, but an encoder that generates these really deserves what it
+     gets.
+    Needless to say we inherited this approach from VP3.*/
+  /*Special case only having a DC component.*/
+  if(_last_zzi<2){
+    ogg_uint16_t p;
+    /*Why is the iquant product rounded in this case and no others?
+      Who knows.*/
+    p=(ogg_int16_t)((ogg_int32_t)_frag->dc*_dc_iquant+15>>5);
+    /*Fill res_buf with p.*/
+    __asm__ __volatile__(
+      /*mm0=0000 0000 0000 AAAA*/
+      "movd %[p],%%mm0\n\t"
+      /*mm1=0000 0000 0000 AAAA*/
+      "movd %[p],%%mm1\n\t"
+      /*mm0=0000 0000 AAAA 0000*/
+      "pslld $16,%%mm0\n\t"
+      /*mm0=0000 0000 AAAA AAAA*/
+      "por %%mm1,%%mm0\n\t"
+      /*mm0=AAAA AAAA AAAA AAAA*/
+      "punpcklwd %%mm0,%%mm0\n\t"
+      "movq %%mm0,(%[res_buf])\n\t"
+      "movq %%mm0,8(%[res_buf])\n\t"
+      "movq %%mm0,16(%[res_buf])\n\t"
+      "movq %%mm0,24(%[res_buf])\n\t"
+      "movq %%mm0,32(%[res_buf])\n\t"
+      "movq %%mm0,40(%[res_buf])\n\t"
+      "movq %%mm0,48(%[res_buf])\n\t"
+      "movq %%mm0,56(%[res_buf])\n\t"
+      "movq %%mm0,64(%[res_buf])\n\t"
+      "movq %%mm0,72(%[res_buf])\n\t"
+      "movq %%mm0,80(%[res_buf])\n\t"
+      "movq %%mm0,88(%[res_buf])\n\t"
+      "movq %%mm0,96(%[res_buf])\n\t"
+      "movq %%mm0,104(%[res_buf])\n\t"
+      "movq %%mm0,112(%[res_buf])\n\t"
+      "movq %%mm0,120(%[res_buf])\n\t"
+      :
+      :[res_buf]"r"(res_buf),[p]"r"((unsigned)p)
+      :"memory"
+    );
+  }
+  else{
+    /*Then, fill in the remainder of the coefficients with 0's, and perform
+       the iDCT.*/
+    /*First zero the buffer.*/
+    /*On K7, etc., this could be replaced with movntq and sfence.*/
+    __asm__ __volatile__(
+      "pxor %%mm0,%%mm0\n\t"
+      "movq %%mm0,(%[res_buf])\n\t"
+      "movq %%mm0,8(%[res_buf])\n\t"
+      "movq %%mm0,16(%[res_buf])\n\t"
+      "movq %%mm0,24(%[res_buf])\n\t"
+      "movq %%mm0,32(%[res_buf])\n\t"
+      "movq %%mm0,40(%[res_buf])\n\t"
+      "movq %%mm0,48(%[res_buf])\n\t"
+      "movq %%mm0,56(%[res_buf])\n\t"
+      "movq %%mm0,64(%[res_buf])\n\t"
+      "movq %%mm0,72(%[res_buf])\n\t"
+      "movq %%mm0,80(%[res_buf])\n\t"
+      "movq %%mm0,88(%[res_buf])\n\t"
+      "movq %%mm0,96(%[res_buf])\n\t"
+      "movq %%mm0,104(%[res_buf])\n\t"
+      "movq %%mm0,112(%[res_buf])\n\t"
+      "movq %%mm0,120(%[res_buf])\n\t"
+      :
+      :[res_buf]"r"(res_buf)
+      :"memory"
+    );
+    res_buf[0]=(ogg_int16_t)((ogg_int32_t)_frag->dc*_dc_iquant);
+    /*This is planned to be rewritten in MMX.*/
+    for(zzi=1;zzi<_ncoefs;zzi++){
+      int ci;
+      ci=OC_FZIG_ZAG[zzi];
+      res_buf[OC_FZIG_ZAGMMX[zzi]]=(ogg_int16_t)((ogg_int32_t)_dct_coeffs[zzi]*
+       _ac_iquant[ci]);
+    }
+    if(_last_zzi<10)oc_idct8x8_10_mmx(res_buf);
+    else oc_idct8x8_mmx(res_buf);
+  }
+  /*Fill in the target buffer.*/
+  dst_framei=_state->ref_frame_idx[OC_FRAME_SELF];
+  dst_ystride=_state->ref_frame_bufs[dst_framei][_pli].ystride;
+  /*For now ystride values in all ref frames assumed to be equal.*/
+  if(_frag->mbmode==OC_MODE_INTRA){
+    oc_frag_recon_intra_mmx(_frag->buffer[dst_framei],dst_ystride,res_buf);
+  }
+  else{
+    int ref_framei;
+    int ref_ystride;
+    int mvoffsets[2];
+    ref_framei=_state->ref_frame_idx[OC_FRAME_FOR_MODE[_frag->mbmode]];
+    ref_ystride=_state->ref_frame_bufs[ref_framei][_pli].ystride;
+    if(oc_state_get_mv_offsets(_state,mvoffsets,_frag->mv[0],_frag->mv[1],
+     ref_ystride,_pli)>1){
+      oc_frag_recon_inter2_mmx(_frag->buffer[dst_framei],dst_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[0],ref_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[1],ref_ystride,res_buf);
+    }
+    else{
+      oc_frag_recon_inter_mmx(_frag->buffer[dst_framei],dst_ystride,
+       _frag->buffer[ref_framei]+mvoffsets[0],ref_ystride,res_buf);
+    }
+  }
+  oc_restore_fpu(_state);
+}
+
+/*Copies the fragments specified by the lists of fragment indices from one
+   frame to another.
+  _fragis:    A pointer to a list of fragment indices.
+  _nfragis:   The number of fragment indices to copy.
+  _dst_frame: The reference frame to copy to.
+  _src_frame: The reference frame to copy from.
+  _pli:       The color plane the fragments lie in.*/
+void oc_state_frag_copy_mmx(const oc_theora_state *_state,const int *_fragis,
+ int _nfragis,int _dst_frame,int _src_frame,int _pli){
+  const int *fragi;
+  const int *fragi_end;
+  int        dst_framei;
+  long       dst_ystride;
+  int        src_framei;
+  long       src_ystride;
+  dst_framei=_state->ref_frame_idx[_dst_frame];
+  src_framei=_state->ref_frame_idx[_src_frame];
+  dst_ystride=_state->ref_frame_bufs[dst_framei][_pli].ystride;
+  src_ystride=_state->ref_frame_bufs[src_framei][_pli].ystride;
+  fragi_end=_fragis+_nfragis;
+  for(fragi=_fragis;fragi<fragi_end;fragi++){
+    oc_fragment   *frag;
+    unsigned char *dst;
+    unsigned char *src;
+    long           esi;
+    frag=_state->frags+*fragi;
+    dst=frag->buffer[dst_framei];
+    src=frag->buffer[src_framei];
+    __asm__ __volatile__(
+      /*src+0*src_ystride*/
+      "movq (%[src]),%%mm0\n\t"
+      /*esi=src_ystride*3*/
+      "lea (%[src_ystride],%[src_ystride],2),%[s]\n\t"
+      /*src+1*src_ystride*/
+      "movq (%[src],%[src_ystride]),%%mm1\n\t"
+      /*src+2*src_ystride*/
+      "movq (%[src],%[src_ystride],2),%%mm2\n\t"
+      /*src+3*src_ystride*/
+      "movq (%[src],%[s]),%%mm3\n\t"
+      /*dst+0*dst_ystride*/
+      "movq %%mm0,(%[dst])\n\t"
+      /*esi=dst_ystride*3*/
+      "lea (%[dst_ystride],%[dst_ystride],2),%[s]\n\t"
+      /*dst+1*dst_ystride*/
+      "movq %%mm1,(%[dst],%[dst_ystride])\n\t"
+      /*Pointer to next 4.*/
+      "lea (%[src],%[src_ystride],4),%[src]\n\t"
+      /*dst+2*dst_ystride*/
+      "movq %%mm2,(%[dst],%[dst_ystride],2)\n\t"
+      /*dst+3*dst_ystride*/
+      "movq %%mm3,(%[dst],%[s])\n\t"
+      /*Pointer to next 4.*/
+      "lea (%[dst],%[dst_ystride],4),%[dst]\n\t"
+      /*src+0*src_ystride*/
+      "movq (%[src]),%%mm0\n\t"
+      /*esi=src_ystride*3*/
+      "lea (%[src_ystride],%[src_ystride],2),%[s]\n\t"
+      /*src+1*src_ystride*/
+      "movq (%[src],%[src_ystride]),%%mm1\n\t"
+      /*src+2*src_ystride*/
+      "movq (%[src],%[src_ystride],2),%%mm2\n\t"
+      /*src+3*src_ystride*/
+      "movq (%[src],%[s]),%%mm3\n\t"
+      /*dst+0*dst_ystride*/
+      "movq %%mm0,(%[dst])\n\t"
+      /*esi=dst_ystride*3*/
+      "lea (%[dst_ystride],%[dst_ystride],2),%[s]\n\t"
+      /*dst+1*dst_ystride*/
+      "movq %%mm1,(%[dst],%[dst_ystride])\n\t"
+      /*dst+2*dst_ystride*/
+      "movq %%mm2,(%[dst],%[dst_ystride],2)\n\t"
+      /*dst+3*dst_ystride*/
+      "movq %%mm3,(%[dst],%[s])\n\t"
+      :[s]"=&S"(esi)
+      :[dst]"r"(dst),[src]"r"(src),[dst_ystride]"r"(dst_ystride),
+       [src_ystride]"r"(src_ystride)
+      :"memory"
+    );
+  }
+  /*This needs to be removed when decode specific functions are implemented:*/
+  __asm__ __volatile__("emms\n\t");
+}
+
+static void loop_filter_v(unsigned char *_pix,int _ystride,
+ const ogg_int16_t *_ll){
+  long esi;
+  _pix-=_ystride*2;
+  __asm__ __volatile__(
+    /*mm0=0*/
+    "pxor %%mm0,%%mm0\n\t"
+    /*esi=_ystride*3*/
+    "lea (%[ystride],%[ystride],2),%[s]\n\t"
+    /*mm7=_pix[0...8]*/
+    "movq (%[pix]),%%mm7\n\t"
+    /*mm4=_pix[0...8+_ystride*3]*/
+    "movq (%[pix],%[s]),%%mm4\n\t"
+    /*mm6=_pix[0...8]*/
+    "movq %%mm7,%%mm6\n\t"
+    /*Expand unsigned _pix[0...3] to 16 bits.*/
+    "punpcklbw %%mm0,%%mm6\n\t"
+    "movq %%mm4,%%mm5\n\t"
+    /*Expand unsigned _pix[4...8] to 16 bits.*/
+    "punpckhbw %%mm0,%%mm7\n\t"
+    /*Expand other arrays too.*/
+    "punpcklbw %%mm0,%%mm4\n\t"
+    "punpckhbw %%mm0,%%mm5\n\t"
+    /*mm7:mm6=_p[0...8]-_p[0...8+_ystride*3]:*/
+    "psubw %%mm4,%%mm6\n\t"
+    "psubw %%mm5,%%mm7\n\t"
+    /*mm5=mm4=_pix[0...8+_ystride]*/
+    "movq (%[pix],%[ystride]),%%mm4\n\t"
+    /*mm1=mm3=mm2=_pix[0..8]+_ystride*2]*/
+    "movq (%[pix],%[ystride],2),%%mm2\n\t"
+    "movq %%mm4,%%mm5\n\t"
+    "movq %%mm2,%%mm3\n\t"
+    "movq %%mm2,%%mm1\n\t"
+    /*Expand these arrays.*/
+    "punpckhbw %%mm0,%%mm5\n\t"
+    "punpcklbw %%mm0,%%mm4\n\t"
+    "punpckhbw %%mm0,%%mm3\n\t"
+    "punpcklbw %%mm0,%%mm2\n\t"
+    /*mm0=3 3 3 3
+      mm3:mm2=_pix[0...8+_ystride*2]-_pix[0...8+_ystride]*/
+    "pcmpeqw %%mm0,%%mm0\n\t"
+    "psubw %%mm5,%%mm3\n\t"
+    "psrlw $14,%%mm0\n\t"
+    "psubw %%mm4,%%mm2\n\t"
+    /*Scale by 3.*/
+    "pmullw %%mm0,%%mm3\n\t"
+    "pmullw %%mm0,%%mm2\n\t"
+    /*mm0=4 4 4 4
+      f=mm3:mm2==_pix[0...8]-_pix[0...8+_ystride*3]+
+       3*(_pix[0...8+_ystride*2]-_pix[0...8+_ystride])*/
+    "psrlw $1,%%mm0\n\t"
+    "paddw %%mm7,%%mm3\n\t"
+    "psllw $2,%%mm0\n\t"
+    "paddw %%mm6,%%mm2\n\t"
+    /*Add 4.*/
+    "paddw %%mm0,%%mm3\n\t"
+    "paddw %%mm0,%%mm2\n\t"
+    /*"Divide" by 8.*/
+    "psraw $3,%%mm3\n\t"
+    "psraw $3,%%mm2\n\t"
+    /*Now compute lflim of mm3:mm2 cf. Section 7.10 of the sepc.*/
+    /*Free up mm5.*/
+    "packuswb %%mm5,%%mm4\n\t"
+    /*mm0=L L L L*/
+    "movq (%[ll]),%%mm0\n\t"
+    /*if(R_i<-2L||R_i>2L)R_i=0:*/
+    "movq %%mm2,%%mm5\n\t"
+    "pxor %%mm6,%%mm6\n\t"
+    "movq %%mm0,%%mm7\n\t"
+    "psubw %%mm0,%%mm6\n\t"
+    "psllw $1,%%mm7\n\t"
+    "psllw $1,%%mm6\n\t"
+    /*mm2==R_3 R_2 R_1 R_0*/
+    /*mm5==R_3 R_2 R_1 R_0*/
+    /*mm6==-2L -2L -2L -2L*/
+    /*mm7==2L 2L 2L 2L*/
+    "pcmpgtw %%mm2,%%mm7\n\t"
+    "pcmpgtw %%mm6,%%mm5\n\t"
+    "pand %%mm7,%%mm2\n\t"
+    "movq %%mm0,%%mm7\n\t"
+    "pand %%mm5,%%mm2\n\t"
+    "psllw $1,%%mm7\n\t"
+    "movq %%mm3,%%mm5\n\t"
+    /*mm3==R_7 R_6 R_5 R_4*/
+    /*mm5==R_7 R_6 R_5 R_4*/
+    /*mm6==-2L -2L -2L -2L*/
+    /*mm7==2L 2L 2L 2L*/
+    "pcmpgtw %%mm3,%%mm7\n\t"
+    "pcmpgtw %%mm6,%%mm5\n\t"
+    "pand %%mm7,%%mm3\n\t"
+    "movq %%mm0,%%mm7\n\t"
+    "pand %%mm5,%%mm3\n\t"
+    /*if(R_i<-L)R_i'=R_i+2L;
+      if(R_i>L)R_i'=R_i-2L;
+      if(R_i<-L||R_i>L)R_i=-R_i':*/
+    "psraw $1,%%mm6\n\t"
+    "movq %%mm2,%%mm5\n\t"
+    "psllw $1,%%mm7\n\t"
+    /*mm2==R_3 R_2 R_1 R_0*/
+    /*mm5==R_3 R_2 R_1 R_0*/
+    /*mm6==-L -L -L -L*/
+    /*mm0==L L L L*/
+    /*mm5=R_i>L?FF:00*/
+    "pcmpgtw %%mm0,%%mm5\n\t"
+    /*mm6=-L>R_i?FF:00*/
+    "pcmpgtw %%mm2,%%mm6\n\t"
+    /*mm7=R_i>L?2L:0*/
+    "pand %%mm5,%%mm7\n\t"
+    /*mm2=R_i>L?R_i-2L:R_i*/
+    "psubw %%mm7,%%mm2\n\t"
+    "movq %%mm0,%%mm7\n\t"
+    /*mm5=-L>R_i||R_i>L*/
+    "por %%mm6,%%mm5\n\t"
+    "psllw $1,%%mm7\n\t"
+    /*mm7=-L>R_i?2L:0*/
+    "pand %%mm6,%%mm7\n\t"
+    "pxor %%mm6,%%mm6\n\t"
+    /*mm2=-L>R_i?R_i+2L:R_i*/
+    "paddw %%mm7,%%mm2\n\t"
+    "psubw %%mm0,%%mm6\n\t"
+    /*mm5=-L>R_i||R_i>L?-R_i':0*/
+    "pand %%mm2,%%mm5\n\t"
+    "movq %%mm0,%%mm7\n\t"
+    /*mm2=-L>R_i||R_i>L?0:R_i*/
+    "psubw %%mm5,%%mm2\n\t"
+    "psllw $1,%%mm7\n\t"
+    /*mm2=-L>R_i||R_i>L?-R_i':R_i*/
+    "psubw %%mm5,%%mm2\n\t"
+    "movq %%mm3,%%mm5\n\t"
+    /*mm3==R_7 R_6 R_5 R_4*/
+    /*mm5==R_7 R_6 R_5 R_4*/
+    /*mm6==-L -L -L -L*/
+    /*mm0==L L L L*/
+    /*mm6=-L>R_i?FF:00*/
+    "pcmpgtw %%mm3,%%mm6\n\t"
+    /*mm5=R_i>L?FF:00*/
+    "pcmpgtw %%mm0,%%mm5\n\t"
+    /*mm7=R_i>L?2L:0*/
+    "pand %%mm5,%%mm7\n\t"
+    /*mm2=R_i>L?R_i-2L:R_i*/
+    "psubw %%mm7,%%mm3\n\t"
+    "psllw $1,%%mm0\n\t"
+    /*mm5=-L>R_i||R_i>L*/
+    "por %%mm6,%%mm5\n\t"
+    /*mm0=-L>R_i?2L:0*/
+    "pand %%mm6,%%mm0\n\t"
+    /*mm3=-L>R_i?R_i+2L:R_i*/
+    "paddw %%mm0,%%mm3\n\t"
+    /*mm5=-L>R_i||R_i>L?-R_i':0*/
+    "pand %%mm3,%%mm5\n\t"
+    /*mm2=-L>R_i||R_i>L?0:R_i*/
+    "psubw %%mm5,%%mm3\n\t"
+    /*mm2=-L>R_i||R_i>L?-R_i':R_i*/
+    "psubw %%mm5,%%mm3\n\t"
+    /*Unfortunately, there's no unsigned byte+signed byte with unsigned
+       saturation op code, so we have to promote things back 16 bits.*/
+    "pxor %%mm0,%%mm0\n\t"
+    "movq %%mm4,%%mm5\n\t"
+    "punpcklbw %%mm0,%%mm4\n\t"
+    "punpckhbw %%mm0,%%mm5\n\t"
+    "movq %%mm1,%%mm6\n\t"
+    "punpcklbw %%mm0,%%mm1\n\t"
+    "punpckhbw %%mm0,%%mm6\n\t"
+    /*_pix[0...8+_ystride]+=R_i*/
+    "paddw %%mm2,%%mm4\n\t"
+    "paddw %%mm3,%%mm5\n\t"
+    /*_pix[0...8+_ystride*2]-=R_i*/
+    "psubw %%mm2,%%mm1\n\t"
+    "psubw %%mm3,%%mm6\n\t"
+    "packuswb %%mm5,%%mm4\n\t"
+    "packuswb %%mm6,%%mm1\n\t"
+    /*Write it back out.*/
+    "movq %%mm4,(%[pix],%[ystride])\n\t"
+    "movq %%mm1,(%[pix],%[ystride],2)\n\t"
+    :[s]"=&S"(esi)
+    :[pix]"r"(_pix),[ystride]"r"((long)_ystride),[ll]"r"(_ll)
+    :"memory"
+  );
+}
+
+/*This code implements the bulk of loop_filter_h().
+  Data are striped p0 p1 p2 p3 ... p0 p1 p2 p3 ..., so in order to load all
+   four p0's to one register we must transpose the values in four mmx regs.
+  When half is done we repeat this for the rest.*/
+static void loop_filter_h4(unsigned char *_pix,long _ystride,
+ const ogg_int16_t *_ll){
+  long esi;
+  long edi;
+  __asm__ __volatile__(
+    /*x x x x 3 2 1 0*/
+    "movd (%[pix]),%%mm0\n\t"
+    /*esi=_ystride*3*/
+    "lea (%[ystride],%[ystride],2),%[s]\n\t"
+    /*x x x x 7 6 5 4*/
+    "movd (%[pix],%[ystride]),%%mm1\n\t"
+    /*x x x x B A 9 8*/
+    "movd (%[pix],%[ystride],2),%%mm2\n\t"
+    /*x x x x F E D C*/
+    "movd (%[pix],%[s]),%%mm3\n\t"
+    /*mm0=7 3 6 2 5 1 4 0*/
+    "punpcklbw %%mm1,%%mm0\n\t"
+    /*mm2=F B E A D 9 C 8*/
+    "punpcklbw %%mm3,%%mm2\n\t"
+    /*mm1=7 3 6 2 5 1 4 0*/
+    "movq %%mm0,%%mm1\n\t"
+    /*mm0=F B 7 3 E A 6 2*/
+    "punpckhwd %%mm2,%%mm0\n\t"
+    /*mm1=D 9 5 1 C 8 4 0*/
+    "punpcklwd %%mm2,%%mm1\n\t"
+    "pxor %%mm7,%%mm7\n\t"
+    /*mm5=D 9 5 1 C 8 4 0*/
+    "movq %%mm1,%%mm5\n\t"
+    /*mm1=x C x 8 x 4 x 0==pix[0]*/
+    "punpcklbw %%mm7,%%mm1\n\t"
+    /*mm5=x D x 9 x 5 x 1==pix[1]*/
+    "punpckhbw %%mm7,%%mm5\n\t"
+    /*mm3=F B 7 3 E A 6 2*/
+    "movq %%mm0,%%mm3\n\t"
+    /*mm0=x E x A x 6 x 2==pix[2]*/
+    "punpcklbw %%mm7,%%mm0\n\t"
+    /*mm3=x F x B x 7 x 3==pix[3]*/
+    "punpckhbw %%mm7,%%mm3\n\t"
+    /*mm1=mm1-mm3==pix[0]-pix[3]*/
+    "psubw %%mm3,%%mm1\n\t"
+    /*Save a copy of pix[2] for later.*/
+    "movq %%mm0,%%mm4\n\t"
+    /*mm2=3 3 3 3
+      mm0=mm0-mm5==pix[2]-pix[1]*/
+    "pcmpeqw %%mm2,%%mm2\n\t"
+    "psubw %%mm5,%%mm0\n\t"
+    "psrlw $14,%%mm2\n\t"
+    /*Scale by 3.*/
+    "pmullw %%mm2,%%mm0\n\t"
+    /*mm2=4 4 4 4
+      f=mm1==_pix[0]-_pix[3]+ 3*(_pix[2]-_pix[1])*/
+    "psrlw $1,%%mm2\n\t"
+    "paddw %%mm1,%%mm0\n\t"
+    "psllw $2,%%mm2\n\t"
+    /*Add 4.*/
+    "paddw %%mm2,%%mm0\n\t"
+    /*"Divide" by 8, producing the residuals R_i.*/
+    "psraw $3,%%mm0\n\t"
+    /*Now compute lflim of mm0 cf. Section 7.10 of the sepc.*/
+    /*mm6=L L L L*/
+    "movq (%[ll]),%%mm6\n\t"
+    /*if(R_i<-2L||R_i>2L)R_i=0:*/
+    "movq %%mm0,%%mm1\n\t"
+    "pxor %%mm2,%%mm2\n\t"
+    "movq %%mm6,%%mm3\n\t"
+    "psubw %%mm6,%%mm2\n\t"
+    "psllw $1,%%mm3\n\t"
+    "psllw $1,%%mm2\n\t"
+    /*mm0==R_3 R_2 R_1 R_0*/
+    /*mm1==R_3 R_2 R_1 R_0*/
+    /*mm2==-2L -2L -2L -2L*/
+    /*mm3==2L 2L 2L 2L*/
+    "pcmpgtw %%mm0,%%mm3\n\t"
+    "pcmpgtw %%mm2,%%mm1\n\t"
+    "pand %%mm3,%%mm0\n\t"
+    "pand %%mm1,%%mm0\n\t"
+    /*if(R_i<-L)R_i'=R_i+2L;
+      if(R_i>L)R_i'=R_i-2L;
+      if(R_i<-L||R_i>L)R_i=-R_i':*/
+    "psraw $1,%%mm2\n\t"
+    "movq %%mm0,%%mm1\n\t"
+    "movq %%mm6,%%mm3\n\t"
+    /*mm0==R_3 R_2 R_1 R_0*/
+    /*mm1==R_3 R_2 R_1 R_0*/
+    /*mm2==-L -L -L -L*/
+    /*mm6==L L L L*/
+    /*mm2=-L>R_i?FF:00*/
+    "pcmpgtw %%mm0,%%mm2\n\t"
+    /*mm1=R_i>L?FF:00*/
+    "pcmpgtw %%mm6,%%mm1\n\t"
+    /*mm3=2L 2L 2L 2L*/
+    "psllw $1,%%mm3\n\t"
+    /*mm6=2L 2L 2L 2L*/
+    "psllw $1,%%mm6\n\t"
+    /*mm3=R_i>L?2L:0*/
+    "pand %%mm1,%%mm3\n\t"
+    /*mm6=-L>R_i?2L:0*/
+    "pand %%mm2,%%mm6\n\t"
+    /*mm0=R_i>L?R_i-2L:R_i*/
+    "psubw %%mm3,%%mm0\n\t"
+    /*mm1=-L>R_i||R_i>L*/
+    "por %%mm2,%%mm1\n\t"
+    /*mm0=-L>R_i?R_i+2L:R_i*/
+    "paddw %%mm6,%%mm0\n\t"
+    /*mm1=-L>R_i||R_i>L?R_i':0*/
+    "pand %%mm0,%%mm1\n\t"
+    /*mm0=-L>R_i||R_i>L?0:R_i*/
+    "psubw %%mm1,%%mm0\n\t"
+    /*mm0=-L>R_i||R_i>L?-R_i':R_i*/
+    "psubw %%mm1,%%mm0\n\t"
+    /*_pix[1]+=R_i;*/
+    "paddw %%mm0,%%mm5\n\t"
+    /*_pix[2]-=R_i;*/
+    "psubw %%mm0,%%mm4\n\t"
+    /*mm5=x x x x D 9 5 1*/
+    "packuswb %%mm7,%%mm5\n\t"
+    /*mm4=x x x x E A 6 2*/
+    "packuswb %%mm7,%%mm4\n\t"
+    /*mm5=E D A 9 6 5 2 1*/
+    "punpcklbw %%mm4,%%mm5\n\t"
+    /*edi=6 5 2 1*/
+    "movd %%mm5,%%edi\n\t"
+    "movw %%di,1(%[pix])\n\t"
+    /*Why is there such a big stall here?*/
+    "psrlq $32,%%mm5\n\t"
+    "shrl $16,%%edi\n\t"
+    "movw %%di,1(%[pix],%[ystride])\n\t"
+    /*edi=E D A 9*/
+    "movd %%mm5,%%edi\n\t"
+    "movw %%di,1(%[pix],%[ystride],2)\n\t"
+    "shrl $16,%%edi\n\t"
+    "movw %%di,1(%[pix],%[s])\n\t"
+    :[s]"=&S"(esi),[d]"=&D"(edi),
+     [pix]"+r"(_pix),[ystride]"+r"(_ystride),[ll]"+r"(_ll)
+    :
+    :"memory"
+  );
+}
+
+static void loop_filter_h(unsigned char *_pix,int _ystride,
+ const ogg_int16_t *_ll){
+  _pix-=2;
+  loop_filter_h4(_pix,_ystride,_ll);
+  loop_filter_h4(_pix+(_ystride<<2),_ystride,_ll);
+}
+
+/*We copy the whole function because the MMX routines will be inlined 4 times,
+   and we can do just a single emms call at the end this way.
+  We also do not use the _bv lookup table, instead computing the values that
+   would lie in it on the fly.*/
+
+/*Apply the loop filter to a given set of fragment rows in the given plane.
+  The filter may be run on the bottom edge, affecting pixels in the next row of
+   fragments, so this row also needs to be available.
+  _bv:        The bounding values array.
+  _refi:      The index of the frame buffer to filter.
+  _pli:       The color plane to filter.
+  _fragy0:    The Y coordinate of the first fragment row to filter.
+  _fragy_end: The Y coordinate of the fragment row to stop filtering at.*/
+void oc_state_loop_filter_frag_rows_mmx(oc_theora_state *_state,int *_bv,
+ int _refi,int _pli,int _fragy0,int _fragy_end){
+  ogg_int16_t __attribute__((aligned(8)))  ll[4];
+  th_img_plane                            *iplane;
+  oc_fragment_plane                       *fplane;
+  oc_fragment                             *frag_top;
+  oc_fragment                             *frag0;
+  oc_fragment                             *frag;
+  oc_fragment                             *frag_end;
+  oc_fragment                             *frag0_end;
+  oc_fragment                             *frag_bot;
+  ll[0]=ll[1]=ll[2]=ll[3]=
+   (ogg_int16_t)_state->loop_filter_limits[_state->qis[0]];
+  iplane=_state->ref_frame_bufs[_refi]+_pli;
+  fplane=_state->fplanes+_pli;
+  /*The following loops are constructed somewhat non-intuitively on purpose.
+    The main idea is: if a block boundary has at least one coded fragment on
+     it, the filter is applied to it.
+    However, the order that the filters are applied in matters, and VP3 chose
+     the somewhat strange ordering used below.*/
+  frag_top=_state->frags+fplane->froffset;
+  frag0=frag_top+_fragy0*fplane->nhfrags;
+  frag0_end=frag0+(_fragy_end-_fragy0)*fplane->nhfrags;
+  frag_bot=_state->frags+fplane->froffset+fplane->nfrags;
+  while(frag0<frag0_end){
+    frag=frag0;
+    frag_end=frag+fplane->nhfrags;
+    while(frag<frag_end){
+      if(frag->coded){
+        if(frag>frag0){
+          loop_filter_h(frag->buffer[_refi],iplane->ystride,ll);
+        }
+        if(frag0>frag_top){
+          loop_filter_v(frag->buffer[_refi],iplane->ystride,ll);
+        }
+        if(frag+1<frag_end&&!(frag+1)->coded){
+          loop_filter_h(frag->buffer[_refi]+8,iplane->ystride,ll);
+        }
+        if(frag+fplane->nhfrags<frag_bot&&!(frag+fplane->nhfrags)->coded){
+          loop_filter_v((frag+fplane->nhfrags)->buffer[_refi],
+           iplane->ystride,ll);
+        }
+      }
+      frag++;
+    }
+    frag0+=fplane->nhfrags;
+  }
+  /*This needs to be removed when decode specific functions are implemented:*/
+  __asm__ __volatile__("emms\n\t");
+}
+
+#endif

Added: trunk/theora-exp/lib/x86/x86int.h
===================================================================
--- trunk/theora-exp/lib/x86/x86int.h	                        (rev 0)
+++ trunk/theora-exp/lib/x86/x86int.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,26 @@
+#if !defined(_x86_x86int_H)
+# define _x86_x86int_H (1)
+# include "../internal.h"
+
+void oc_state_vtable_init_x86(oc_theora_state *_state);
+
+void oc_frag_recon_intra_mmx(unsigned char *_dst,int _dst_ystride,
+ const ogg_int16_t *_residue);
+void oc_frag_recon_inter_mmx(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src,int _src_ystride,const ogg_int16_t *_residue);
+void oc_frag_recon_inter2_mmx(unsigned char *_dst,int _dst_ystride,
+ const unsigned char *_src1,int _src1_ystride,const unsigned char *_src2,
+ int _src2_ystride,const ogg_int16_t *_residue);
+void oc_state_frag_copy_mmx(const oc_theora_state *_state,const int *_fragis,
+ int _nfragis,int _dst_frame,int _src_frame,int _pli);
+void oc_state_frag_recon_mmx(oc_theora_state *_state,const oc_fragment *_frag,                                               
+ int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,int _ncoefs,                                                             
+ ogg_uint16_t _dc_iquant,const ogg_uint16_t _ac_iquant[64]);
+void oc_state_loop_filter_frag_rows_mmx(oc_theora_state *_state,int *_bv,
+ int _refi,int _pli,int _fragy0,int _fragy_end);
+void oc_restore_fpu_mmx(void);
+void oc_idct8x8_mmx(ogg_int16_t _y[64]);
+void oc_idct8x8_10_mmx(ogg_int16_t _y[64]);
+void oc_fill_idct_constants_mmx(void);
+
+#endif

Added: trunk/theora-exp/lib/x86/x86state.c
===================================================================
--- trunk/theora-exp/lib/x86/x86state.c	                        (rev 0)
+++ trunk/theora-exp/lib/x86/x86state.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,21 @@
+#include "x86int.h"
+
+#if defined(OC_X86ASM)
+
+#include "cpu.h"
+
+void oc_state_vtable_init_x86(oc_theora_state *_state){
+  _state->cpu_flags=oc_cpu_flags_get();  
+  if(_state->cpu_flags&OC_CPU_X86_MMX){
+    _state->opt_vtable.frag_recon_intra=oc_frag_recon_intra_mmx;
+    _state->opt_vtable.frag_recon_inter=oc_frag_recon_inter_mmx;
+    _state->opt_vtable.frag_recon_inter2=oc_frag_recon_inter2_mmx;
+    _state->opt_vtable.state_frag_copy=oc_state_frag_copy_mmx;
+    _state->opt_vtable.state_frag_recon=oc_state_frag_recon_mmx;
+    _state->opt_vtable.state_loop_filter_frag_rows=
+     oc_state_loop_filter_frag_rows_mmx;
+    _state->opt_vtable.restore_fpu=oc_restore_fpu_mmx;
+  }
+  else oc_state_vtable_init_c(_state);
+}
+#endif

Added: trunk/theora-exp/m4/as-ac-expand.m4
===================================================================
--- trunk/theora-exp/m4/as-ac-expand.m4	                        (rev 0)
+++ trunk/theora-exp/m4/as-ac-expand.m4	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,43 @@
+dnl as-ac-expand.m4 0.2.0
+dnl autostars m4 macro for expanding directories using configure's prefix
+dnl thomas at apestaart.org
+
+dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
+dnl example
+dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
+dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
+
+AC_DEFUN([AS_AC_EXPAND],
+[
+  EXP_VAR=[$1]
+  FROM_VAR=[$2]
+
+  dnl first expand prefix and exec_prefix if necessary
+  prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+  dnl if no prefix given, then use /usr/local, the default prefix
+  if test "x$prefix" = "xNONE"; then
+    prefix="$ac_default_prefix"
+  fi
+  dnl if no exec_prefix given, then use prefix
+  if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+  dnl loop until it doesn't change anymore
+  while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var" = "x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+  dnl clean up
+  full_var=$new_full_var
+  AC_SUBST([$1], "$full_var")
+
+  dnl restore prefix and exec_prefix
+  prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+])

Added: trunk/theora-exp/m4/ogg.m4
===================================================================
--- trunk/theora-exp/m4/ogg.m4	                        (rev 0)
+++ trunk/theora-exp/m4/ogg.m4	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,116 @@
+# Configure paths for libogg
+# Jack Moffitt <jack at icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+
+dnl XIPH_PATH_OGG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libogg, and define OGG_CFLAGS and OGG_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_OGG],
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(ogg,AC_HELP_STRING([--with-ogg=PFX],[Prefix where libogg is installed (optional)]), ogg_prefix="$withval", ogg_prefix="")
+AC_ARG_WITH(ogg-libraries,AC_HELP_STRING([--with-ogg-libraries=DIR],[Directory where libogg library is installed (optional)]), ogg_libraries="$withval", ogg_libraries="")
+AC_ARG_WITH(ogg-includes,AC_HELP_STRING([--with-ogg-includes=DIR],[Directory where libogg header files are installed (optional)]), ogg_includes="$withval", ogg_includes="")
+AC_ARG_ENABLE(oggtest,AC_HELP_STRING([--disable-oggtest],[Do not try to compile and run a test Ogg program]),, enable_oggtest=yes)
+
+  if test "x$ogg_libraries" != "x" ; then
+    OGG_LIBS="-L$ogg_libraries"
+  elif test "x$ogg_prefix" = "xno" || test "x$ogg_prefix" = "xyes" ; then
+    OGG_LIBS=""
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_LIBS="-L$ogg_prefix/lib"
+  elif test "x$prefix" != "xNONE" ; then
+    OGG_LIBS="-L$libdir"
+  fi
+
+  if test "x$ogg_prefix" != "xno" ; then
+    OGG_LIBS="$OGG_LIBS -logg"
+  fi
+
+  if test "x$ogg_includes" != "x" ; then
+    OGG_CFLAGS="-I$ogg_includes"
+  elif test "x$ogg_prefix" = "xno" || test "x$ogg_prefix" = "xyes" ; then
+    OGG_CFLAGS=""
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_CFLAGS="-I$ogg_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    OGG_CFLAGS=""
+  fi
+
+  AC_MSG_CHECKING(for Ogg)
+  if test "x$ogg_prefix" = "xno" ; then
+    no_ogg="disabled"
+    enable_oggtest="no"
+  else
+    no_ogg=""
+  fi
+
+
+  if test "x$enable_oggtest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Ogg is sufficiently new.
+dnl
+      rm -f conf.oggtest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+
+int main ()
+{
+  system("touch conf.oggtest");
+  return 0;
+}
+
+],, no_ogg=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_ogg" = "xdisabled" ; then
+     AC_MSG_RESULT(no)
+     ifelse([$2], , :, [$2])
+  elif test "x$no_ogg" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.oggtest ; then
+       :
+     else
+       echo "*** Could not run Ogg test program, checking why..."
+       CFLAGS="$CFLAGS $OGG_CFLAGS"
+       LIBS="$LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <ogg/ogg.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Ogg or finding the wrong"
+       echo "*** version of Ogg. If it is not finding Ogg, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Ogg was incorrectly installed"
+       echo "*** or that you have moved Ogg since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     OGG_CFLAGS=""
+     OGG_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(OGG_CFLAGS)
+  AC_SUBST(OGG_LIBS)
+  rm -f conf.oggtest
+])

Added: trunk/theora-exp/m4/pkg.m4
===================================================================
--- trunk/theora-exp/m4/pkg.m4	                        (rev 0)
+++ trunk/theora-exp/m4/pkg.m4	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,57 @@
+
+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+dnl also defines GSTUFF_PKG_ERRORS on error
+AC_DEFUN([PKG_CHECK_MODULES], [
+  succeeded=no
+
+  if test -z "$PKG_CONFIG"; then
+    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+  fi
+
+  if test "$PKG_CONFIG" = "no" ; then
+     echo "*** The pkg-config script could not be found. Make sure it is"
+     echo "*** in your path, or set the PKG_CONFIG environment variable"
+     echo "*** to the full path to pkg-config."
+     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+  else
+     PKG_CONFIG_MIN_VERSION=0.9.0
+     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+        AC_MSG_CHECKING(for $2)
+
+        if $PKG_CONFIG --exists "$2" ; then
+            AC_MSG_RESULT(yes)
+            succeeded=yes
+
+            AC_MSG_CHECKING($1_CFLAGS)
+            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+            AC_MSG_RESULT($$1_CFLAGS)
+
+            AC_MSG_CHECKING($1_LIBS)
+            $1_LIBS=`$PKG_CONFIG --libs "$2"`
+            AC_MSG_RESULT($$1_LIBS)
+        else
+            $1_CFLAGS=""
+            $1_LIBS=""
+            ## If we have a custom action on failure, don't print errors, but 
+            ## do set a variable so people can do so.
+            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+            ifelse([$4], ,echo $$1_PKG_ERRORS,)
+        fi
+
+        AC_SUBST($1_CFLAGS)
+        AC_SUBST($1_LIBS)
+     else
+        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+        echo "*** See http://www.freedesktop.org/software/pkgconfig"
+     fi
+  fi
+
+  if test $succeeded = yes; then
+     ifelse([$3], , :, [$3])
+  else
+     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+  fi
+])
+
+

Added: trunk/theora-exp/m4/sdl.m4
===================================================================
--- trunk/theora-exp/m4/sdl.m4	                        (rev 0)
+++ trunk/theora-exp/m4/sdl.m4	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,180 @@
+# Configure paths for SDL
+# Sam Lantinga 9/21/99
+# stolen from Manish Singh
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
+dnl
+AC_DEFUN([AM_PATH_SDL],
+[dnl 
+dnl Get the cflags and libraries from the sdl-config script
+dnl
+AC_ARG_WITH(sdl-prefix,[  --with-sdl-prefix=PFX   Prefix where SDL is installed (optional)],
+            sdl_prefix="$withval", sdl_prefix="")
+AC_ARG_WITH(sdl-exec-prefix,[  --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
+            sdl_exec_prefix="$withval", sdl_exec_prefix="")
+AC_ARG_ENABLE(sdltest, [  --disable-sdltest       Do not try to compile and run a test SDL program],
+		    , enable_sdltest=yes)
+
+  if test x$sdl_exec_prefix != x ; then
+     sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
+     if test x${SDL_CONFIG+set} != xset ; then
+        SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+     fi
+  fi
+  if test x$sdl_prefix != x ; then
+     sdl_args="$sdl_args --prefix=$sdl_prefix"
+     if test x${SDL_CONFIG+set} != xset ; then
+        SDL_CONFIG=$sdl_prefix/bin/sdl-config
+     fi
+  fi
+
+  AC_REQUIRE([AC_CANONICAL_TARGET])
+  PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+  AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
+  min_sdl_version=ifelse([$1], ,0.11.0,$1)
+  AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
+  no_sdl=""
+  if test "$SDL_CONFIG" = "no" ; then
+    no_sdl=yes
+  else
+    SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
+    SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
+
+    sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    if test "x$enable_sdltest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_CXXFLAGS="$CXXFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $SDL_CFLAGS"
+      CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+      LIBS="$LIBS $SDL_LIBS"
+dnl
+dnl Now check if the installed SDL is sufficiently new. (Also sanity
+dnl checks the results of sdl-config to some extent
+dnl
+      rm -f conf.sdltest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+  char *new_str;
+  
+  if (str)
+    {
+      new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+      strcpy (new_str, str);
+    }
+  else
+    new_str = NULL;
+  
+  return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  /* This hangs on some systems (?)
+  system ("touch conf.sdltest");
+  */
+  { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = my_strdup("$min_sdl_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_sdl_version");
+     exit(1);
+   }
+
+   if (($sdl_major_version > major) ||
+      (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+      (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+    {
+      return 0;
+    }
+  else
+    {
+      printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+      printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+      printf("*** best to upgrade to the required version.\n");
+      printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+      printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+      printf("*** config.cache before re-running configure\n");
+      return 1;
+    }
+}
+
+],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       CXXFLAGS="$ac_save_CXXFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_sdl" = x ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$2], , :, [$2])     
+  else
+     AC_MSG_RESULT(no)
+     if test "$SDL_CONFIG" = "no" ; then
+       echo "*** The sdl-config script installed by SDL could not be found"
+       echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+       echo "*** your path, or set the SDL_CONFIG environment variable to the"
+       echo "*** full path to sdl-config."
+     else
+       if test -f conf.sdltest ; then
+        :
+       else
+          echo "*** Could not run SDL test program, checking why..."
+          CFLAGS="$CFLAGS $SDL_CFLAGS"
+          CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+          LIBS="$LIBS $SDL_LIBS"
+          AC_TRY_LINK([
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef  main
+#define main K_and_R_C_main
+],      [ return 0; ],
+        [ echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding SDL or finding the wrong"
+          echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+	  echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+        [ echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+          echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+          echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
+          CFLAGS="$ac_save_CFLAGS"
+          CXXFLAGS="$ac_save_CXXFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     SDL_CFLAGS=""
+     SDL_LIBS=""
+     ifelse([$3], , :, [$3])
+  fi
+  AC_SUBST(SDL_CFLAGS)
+  AC_SUBST(SDL_LIBS)
+  rm -f conf.sdltest
+])

Added: trunk/theora-exp/m4/vorbis.m4
===================================================================
--- trunk/theora-exp/m4/vorbis.m4	                        (rev 0)
+++ trunk/theora-exp/m4/vorbis.m4	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,122 @@
+# Configure paths for libvorbis
+# Jack Moffitt <jack at icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+# thomasvs added check for vorbis_bitrate_addblock which is new in rc3
+
+dnl XIPH_PATH_VORBIS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libvorbis, and define VORBIS_CFLAGS and VORBIS_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_VORBIS],
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(vorbis,[  --with-vorbis=PFX   Prefix where libvorbis is installed (optional)], vorbis_prefix="$withval", vorbis_prefix="")
+AC_ARG_WITH(vorbis-libraries,[  --with-vorbis-libraries=DIR   Directory where libvorbis library is installed (optional)], vorbis_libraries="$withval", vorbis_libraries="")
+AC_ARG_WITH(vorbis-includes,[  --with-vorbis-includes=DIR   Directory where libvorbis header files are installed (optional)], vorbis_includes="$withval", vorbis_includes="")
+AC_ARG_ENABLE(vorbistest, [  --disable-vorbistest       Do not try to compile and run a test Vorbis program],, enable_vorbistest=yes)
+
+  if test "x$vorbis_libraries" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_libraries"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_LIBS="-L$libdir"
+  fi
+
+  VORBIS_LIBS="$VORBIS_LIBS -lvorbis -lm"
+  VORBISFILE_LIBS="-lvorbisfile"
+  VORBISENC_LIBS="-lvorbisenc"
+
+  if test "x$vorbis_includes" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_includes"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_CFLAGS=""
+  fi
+
+
+  AC_MSG_CHECKING(for Vorbis)
+  no_vorbis=""
+
+
+  if test "x$enable_vorbistest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $VORBIS_CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $VORBIS_LIBS $VORBISENC_LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Vorbis is sufficiently new.
+dnl
+      rm -f conf.vorbistest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <vorbis/codec.h>
+#include <vorbis/vorbisenc.h>
+
+int main ()
+{
+    vorbis_block 	vb;
+    vorbis_dsp_state	vd;
+    vorbis_info		vi;
+
+    vorbis_info_init (&vi);
+    vorbis_encode_init (&vi, 2, 44100, -1, 128000, -1);
+    vorbis_analysis_init (&vd, &vi);
+    vorbis_block_init (&vd, &vb);
+    /* this function was added in 1.0rc3, so this is what we're testing for */
+    vorbis_bitrate_addblock (&vb);
+
+    system("touch conf.vorbistest");
+    return 0;
+}
+
+],, no_vorbis=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_vorbis" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.vorbistest ; then
+       :
+     else
+       echo "*** Could not run Vorbis test program, checking why..."
+       CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+       LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <vorbis/codec.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Vorbis or finding the wrong"
+       echo "*** version of Vorbis. If it is not finding Vorbis, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Vorbis was incorrectly installed"
+       echo "*** or that you have moved Vorbis since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     VORBIS_CFLAGS=""
+     VORBIS_LIBS=""
+     VORBISFILE_LIBS=""
+     VORBISENC_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(VORBIS_CFLAGS)
+  AC_SUBST(VORBIS_LIBS)
+  AC_SUBST(VORBISFILE_LIBS)
+  AC_SUBST(VORBISENC_LIBS)
+  rm -f conf.vorbistest
+])

Added: trunk/theora-exp/macosx/English.lproj/InfoPlist.strings
===================================================================
(Binary files differ)


Property changes on: trunk/theora-exp/macosx/English.lproj/InfoPlist.strings
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/theora-exp/macosx/Info.plist
===================================================================
--- trunk/theora-exp/macosx/Info.plist	                        (rev 0)
+++ trunk/theora-exp/macosx/Info.plist	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>CFBundleExecutable</key>
+    <string>TheoraExp</string>
+    <key>CFBundleGetInfoString</key>
+    <string>Theora-exp framework 0.1svn, Copyright © 2003-2006 Xiph.Org Foundation</string>
+    <key>CFBundleIconFile</key>
+    <string></string>
+    <key>CFBundleIdentifier</key>
+    <string>org.xiph.exp.theora</string>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>FMWK</string>
+    <key>CFBundleSignature</key>
+    <string>????</string>
+    <key>CFBundleVersion</key>
+    <string>0.1</string>
+    <key>CFBundleShortVersionString</key>
+    <string>0.1svn</string>
+    <key>NSHumanReadableCopyright</key>
+    <string>Theora-exp framework 0.1svn, Copyright © 2003-2006 Xiph.Org Foundation</string>
+    <key>CSResourcesFileMapped</key>
+    <true/>
+</dict>
+</plist>

Added: trunk/theora-exp/macosx/TheoraExp.xcodeproj/project.pbxproj
===================================================================
--- trunk/theora-exp/macosx/TheoraExp.xcodeproj/project.pbxproj	                        (rev 0)
+++ trunk/theora-exp/macosx/TheoraExp.xcodeproj/project.pbxproj	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,540 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		09AFFECB0A5833DE0043DDB1 /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC40A5833DE0043DDB1 /* cpu.c */; };
+		09AFFECC0A5833DE0043DDB1 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 09AFFEC50A5833DE0043DDB1 /* cpu.h */; };
+		09AFFECD0A5833DE0043DDB1 /* mmxfrag.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC60A5833DE0043DDB1 /* mmxfrag.c */; };
+		09AFFECE0A5833DE0043DDB1 /* mmxidct.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC70A5833DE0043DDB1 /* mmxidct.c */; };
+		09AFFECF0A5833DE0043DDB1 /* mmxstate.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC80A5833DE0043DDB1 /* mmxstate.c */; };
+		09AFFED00A5833DE0043DDB1 /* x86int.h in Headers */ = {isa = PBXBuildFile; fileRef = 09AFFEC90A5833DE0043DDB1 /* x86int.h */; };
+		09AFFED10A5833DE0043DDB1 /* x86state.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFECA0A5833DE0043DDB1 /* x86state.c */; };
+		731DDD120A0157CB00CAD2C4 /* codec.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD100A0157CB00CAD2C4 /* codec.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		731DDD130A0157CB00CAD2C4 /* theoradec.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD110A0157CB00CAD2C4 /* theoradec.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		731DDD290A01586000CAD2C4 /* dct.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD170A01586000CAD2C4 /* dct.h */; };
+		731DDD2A0A01586000CAD2C4 /* decinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD180A01586000CAD2C4 /* decinfo.c */; };
+		731DDD2B0A01586000CAD2C4 /* decint.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD190A01586000CAD2C4 /* decint.h */; };
+		731DDD2C0A01586000CAD2C4 /* decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1A0A01586000CAD2C4 /* decode.c */; };
+		731DDD2D0A01586000CAD2C4 /* dequant.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1B0A01586000CAD2C4 /* dequant.c */; };
+		731DDD2E0A01586000CAD2C4 /* dequant.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD1C0A01586000CAD2C4 /* dequant.h */; };
+		731DDD2F0A01586000CAD2C4 /* fragment.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1D0A01586000CAD2C4 /* fragment.c */; };
+		731DDD300A01586000CAD2C4 /* huffdec.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1E0A01586000CAD2C4 /* huffdec.c */; };
+		731DDD310A01586000CAD2C4 /* huffdec.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD1F0A01586000CAD2C4 /* huffdec.h */; };
+		731DDD320A01586000CAD2C4 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD200A01586000CAD2C4 /* huffman.h */; };
+		731DDD330A01586000CAD2C4 /* idct.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD210A01586000CAD2C4 /* idct.c */; };
+		731DDD340A01586000CAD2C4 /* idct.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD220A01586000CAD2C4 /* idct.h */; };
+		731DDD350A01586000CAD2C4 /* internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD230A01586000CAD2C4 /* internal.c */; };
+		731DDD360A01586000CAD2C4 /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD240A01586000CAD2C4 /* internal.h */; };
+		731DDD370A01586000CAD2C4 /* ocintrin.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD250A01586000CAD2C4 /* ocintrin.h */; };
+		731DDD380A01586000CAD2C4 /* quant.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD260A01586000CAD2C4 /* quant.c */; };
+		731DDD390A01586000CAD2C4 /* quant.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DDD270A01586000CAD2C4 /* quant.h */; };
+		731DDD3A0A01586000CAD2C4 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD280A01586000CAD2C4 /* state.c */; };
+		731DDD3C0A01586E00CAD2C4 /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 731DDD3B0A01586E00CAD2C4 /* Ogg.framework */; };
+		731DDD4B0A0159AF00CAD2C4 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD4A0A0159AF00CAD2C4 /* info.c */; };
+		738836DB0B1916C9005C7A69 /* decinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD180A01586000CAD2C4 /* decinfo.c */; };
+		738836DC0B1916CB005C7A69 /* decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1A0A01586000CAD2C4 /* decode.c */; };
+		738836DD0B1916CC005C7A69 /* dequant.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1B0A01586000CAD2C4 /* dequant.c */; };
+		738836DE0B1916CE005C7A69 /* fragment.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1D0A01586000CAD2C4 /* fragment.c */; };
+		738836DF0B1916CF005C7A69 /* huffdec.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD1E0A01586000CAD2C4 /* huffdec.c */; };
+		738836E00B1916D1005C7A69 /* idct.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD210A01586000CAD2C4 /* idct.c */; };
+		738836E10B1916D3005C7A69 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD4A0A0159AF00CAD2C4 /* info.c */; };
+		738836E20B1916D5005C7A69 /* internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD230A01586000CAD2C4 /* internal.c */; };
+		738836E30B1916D9005C7A69 /* quant.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD260A01586000CAD2C4 /* quant.c */; };
+		738836E40B1916DC005C7A69 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = 731DDD280A01586000CAD2C4 /* state.c */; };
+		738836E50B1916ED005C7A69 /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC40A5833DE0043DDB1 /* cpu.c */; };
+		738836E60B1916EF005C7A69 /* mmxfrag.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC60A5833DE0043DDB1 /* mmxfrag.c */; };
+		738836E70B1916F0005C7A69 /* mmxidct.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC70A5833DE0043DDB1 /* mmxidct.c */; };
+		738836E80B1916F1005C7A69 /* mmxstate.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFEC80A5833DE0043DDB1 /* mmxstate.c */; };
+		738836E90B1916F4005C7A69 /* x86state.c in Sources */ = {isa = PBXBuildFile; fileRef = 09AFFECA0A5833DE0043DDB1 /* x86state.c */; };
+		8D07F2BE0486CC7A007CD1D0 /* TheoraExp_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32BAE0B70371A74B00C91783 /* TheoraExp_Prefix.pch */; };
+		8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		09AFFEC40A5833DE0043DDB1 /* cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cpu.c; sourceTree = "<group>"; };
+		09AFFEC50A5833DE0043DDB1 /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = "<group>"; };
+		09AFFEC60A5833DE0043DDB1 /* mmxfrag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mmxfrag.c; sourceTree = "<group>"; };
+		09AFFEC70A5833DE0043DDB1 /* mmxidct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mmxidct.c; sourceTree = "<group>"; };
+		09AFFEC80A5833DE0043DDB1 /* mmxstate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mmxstate.c; sourceTree = "<group>"; };
+		09AFFEC90A5833DE0043DDB1 /* x86int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x86int.h; sourceTree = "<group>"; };
+		09AFFECA0A5833DE0043DDB1 /* x86state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = x86state.c; sourceTree = "<group>"; };
+		32BAE0B70371A74B00C91783 /* TheoraExp_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TheoraExp_Prefix.pch; sourceTree = "<group>"; };
+		731DDD100A0157CB00CAD2C4 /* codec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = codec.h; path = ../include/theora/codec.h; sourceTree = SOURCE_ROOT; };
+		731DDD110A0157CB00CAD2C4 /* theoradec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = theoradec.h; path = ../include/theora/theoradec.h; sourceTree = SOURCE_ROOT; };
+		731DDD170A01586000CAD2C4 /* dct.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dct.h; path = ../lib/dct.h; sourceTree = SOURCE_ROOT; };
+		731DDD180A01586000CAD2C4 /* decinfo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = decinfo.c; path = ../lib/decinfo.c; sourceTree = SOURCE_ROOT; };
+		731DDD190A01586000CAD2C4 /* decint.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = decint.h; path = ../lib/decint.h; sourceTree = SOURCE_ROOT; };
+		731DDD1A0A01586000CAD2C4 /* decode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = decode.c; path = ../lib/decode.c; sourceTree = SOURCE_ROOT; };
+		731DDD1B0A01586000CAD2C4 /* dequant.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dequant.c; path = ../lib/dequant.c; sourceTree = SOURCE_ROOT; };
+		731DDD1C0A01586000CAD2C4 /* dequant.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dequant.h; path = ../lib/dequant.h; sourceTree = SOURCE_ROOT; };
+		731DDD1D0A01586000CAD2C4 /* fragment.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fragment.c; path = ../lib/fragment.c; sourceTree = SOURCE_ROOT; };
+		731DDD1E0A01586000CAD2C4 /* huffdec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = huffdec.c; path = ../lib/huffdec.c; sourceTree = SOURCE_ROOT; };
+		731DDD1F0A01586000CAD2C4 /* huffdec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = huffdec.h; path = ../lib/huffdec.h; sourceTree = SOURCE_ROOT; };
+		731DDD200A01586000CAD2C4 /* huffman.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = huffman.h; path = ../lib/huffman.h; sourceTree = SOURCE_ROOT; };
+		731DDD210A01586000CAD2C4 /* idct.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = idct.c; path = ../lib/idct.c; sourceTree = SOURCE_ROOT; };
+		731DDD220A01586000CAD2C4 /* idct.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = idct.h; path = ../lib/idct.h; sourceTree = SOURCE_ROOT; };
+		731DDD230A01586000CAD2C4 /* internal.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = internal.c; path = ../lib/internal.c; sourceTree = SOURCE_ROOT; };
+		731DDD240A01586000CAD2C4 /* internal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = internal.h; path = ../lib/internal.h; sourceTree = SOURCE_ROOT; };
+		731DDD250A01586000CAD2C4 /* ocintrin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ocintrin.h; path = ../lib/ocintrin.h; sourceTree = SOURCE_ROOT; };
+		731DDD260A01586000CAD2C4 /* quant.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = quant.c; path = ../lib/quant.c; sourceTree = SOURCE_ROOT; };
+		731DDD270A01586000CAD2C4 /* quant.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = quant.h; path = ../lib/quant.h; sourceTree = SOURCE_ROOT; };
+		731DDD280A01586000CAD2C4 /* state.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = state.c; path = ../lib/state.c; sourceTree = SOURCE_ROOT; };
+		731DDD3B0A01586E00CAD2C4 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = "<absolute>"; };
+		731DDD4A0A0159AF00CAD2C4 /* info.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = info.c; path = ../lib/info.c; sourceTree = SOURCE_ROOT; };
+		738836400B191426005C7A69 /* libtheoradec.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtheoradec.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+		8D07F2C80486CC7A007CD1D0 /* TheoraExp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TheoraExp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		7388363E0B191426005C7A69 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		8D07F2C30486CC7A007CD1D0 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				731DDD3C0A01586E00CAD2C4 /* Ogg.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		034768DDFF38A45A11DB9C8B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8D07F2C80486CC7A007CD1D0 /* TheoraExp.framework */,
+				738836400B191426005C7A69 /* libtheoradec.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		0867D691FE84028FC02AAC07 /* TheoraExp */ = {
+			isa = PBXGroup;
+			children = (
+				08FB77ACFE841707C02AAC07 /* Source */,
+				089C1665FE841158C02AAC07 /* Resources */,
+				0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
+				034768DDFF38A45A11DB9C8B /* Products */,
+			);
+			name = TheoraExp;
+			sourceTree = "<group>";
+		};
+		0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				731DDD3B0A01586E00CAD2C4 /* Ogg.framework */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+		089C1665FE841158C02AAC07 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				8D07F2C70486CC7A007CD1D0 /* Info.plist */,
+				089C1666FE841158C02AAC07 /* InfoPlist.strings */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		08FB77ACFE841707C02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				09AFFEC30A5833DE0043DDB1 /* x86 */,
+				731DDD4A0A0159AF00CAD2C4 /* info.c */,
+				731DDD170A01586000CAD2C4 /* dct.h */,
+				731DDD180A01586000CAD2C4 /* decinfo.c */,
+				731DDD190A01586000CAD2C4 /* decint.h */,
+				731DDD1A0A01586000CAD2C4 /* decode.c */,
+				731DDD1B0A01586000CAD2C4 /* dequant.c */,
+				731DDD1C0A01586000CAD2C4 /* dequant.h */,
+				731DDD1D0A01586000CAD2C4 /* fragment.c */,
+				731DDD1E0A01586000CAD2C4 /* huffdec.c */,
+				731DDD1F0A01586000CAD2C4 /* huffdec.h */,
+				731DDD200A01586000CAD2C4 /* huffman.h */,
+				731DDD210A01586000CAD2C4 /* idct.c */,
+				731DDD220A01586000CAD2C4 /* idct.h */,
+				731DDD230A01586000CAD2C4 /* internal.c */,
+				731DDD240A01586000CAD2C4 /* internal.h */,
+				731DDD250A01586000CAD2C4 /* ocintrin.h */,
+				731DDD260A01586000CAD2C4 /* quant.c */,
+				731DDD270A01586000CAD2C4 /* quant.h */,
+				731DDD280A01586000CAD2C4 /* state.c */,
+				731DDD100A0157CB00CAD2C4 /* codec.h */,
+				731DDD110A0157CB00CAD2C4 /* theoradec.h */,
+				32BAE0B70371A74B00C91783 /* TheoraExp_Prefix.pch */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		09AFFEC30A5833DE0043DDB1 /* x86 */ = {
+			isa = PBXGroup;
+			children = (
+				09AFFEC40A5833DE0043DDB1 /* cpu.c */,
+				09AFFEC50A5833DE0043DDB1 /* cpu.h */,
+				09AFFEC60A5833DE0043DDB1 /* mmxfrag.c */,
+				09AFFEC70A5833DE0043DDB1 /* mmxidct.c */,
+				09AFFEC80A5833DE0043DDB1 /* mmxstate.c */,
+				09AFFEC90A5833DE0043DDB1 /* x86int.h */,
+				09AFFECA0A5833DE0043DDB1 /* x86state.c */,
+			);
+			name = x86;
+			path = ../lib/x86;
+			sourceTree = SOURCE_ROOT;
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		7388363C0B191426005C7A69 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		8D07F2BD0486CC7A007CD1D0 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D07F2BE0486CC7A007CD1D0 /* TheoraExp_Prefix.pch in Headers */,
+				731DDD120A0157CB00CAD2C4 /* codec.h in Headers */,
+				731DDD130A0157CB00CAD2C4 /* theoradec.h in Headers */,
+				731DDD290A01586000CAD2C4 /* dct.h in Headers */,
+				731DDD2B0A01586000CAD2C4 /* decint.h in Headers */,
+				731DDD2E0A01586000CAD2C4 /* dequant.h in Headers */,
+				731DDD310A01586000CAD2C4 /* huffdec.h in Headers */,
+				731DDD320A01586000CAD2C4 /* huffman.h in Headers */,
+				731DDD340A01586000CAD2C4 /* idct.h in Headers */,
+				731DDD360A01586000CAD2C4 /* internal.h in Headers */,
+				731DDD370A01586000CAD2C4 /* ocintrin.h in Headers */,
+				731DDD390A01586000CAD2C4 /* quant.h in Headers */,
+				09AFFECC0A5833DE0043DDB1 /* cpu.h in Headers */,
+				09AFFED00A5833DE0043DDB1 /* x86int.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		7388363F0B191426005C7A69 /* libtheoradec (static) */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 738836410B19144F005C7A69 /* Build configuration list for PBXNativeTarget "libtheoradec (static)" */;
+			buildPhases = (
+				7388363C0B191426005C7A69 /* Headers */,
+				7388363D0B191426005C7A69 /* Sources */,
+				7388363E0B191426005C7A69 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "libtheoradec (static)";
+			productName = theoradec;
+			productReference = 738836400B191426005C7A69 /* libtheoradec.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		8D07F2BC0486CC7A007CD1D0 /* TheoraExp */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "TheoraExp" */;
+			buildPhases = (
+				8D07F2BD0486CC7A007CD1D0 /* Headers */,
+				8D07F2BF0486CC7A007CD1D0 /* Resources */,
+				8D07F2C10486CC7A007CD1D0 /* Sources */,
+				8D07F2C30486CC7A007CD1D0 /* Frameworks */,
+				8D07F2C50486CC7A007CD1D0 /* Rez */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = TheoraExp;
+			productInstallPath = "$(HOME)/Library/Frameworks";
+			productName = TheoraExp;
+			productReference = 8D07F2C80486CC7A007CD1D0 /* TheoraExp.framework */;
+			productType = "com.apple.product-type.framework";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		0867D690FE84028FC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "TheoraExp" */;
+			hasScannedForEncodings = 1;
+			mainGroup = 0867D691FE84028FC02AAC07 /* TheoraExp */;
+			productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
+			projectDirPath = "";
+			targets = (
+				8D07F2BC0486CC7A007CD1D0 /* TheoraExp */,
+				7388363F0B191426005C7A69 /* libtheoradec (static) */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D07F2BF0486CC7A007CD1D0 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+		8D07F2C50486CC7A007CD1D0 /* Rez */ = {
+			isa = PBXRezBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		7388363D0B191426005C7A69 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				738836DB0B1916C9005C7A69 /* decinfo.c in Sources */,
+				738836DC0B1916CB005C7A69 /* decode.c in Sources */,
+				738836DD0B1916CC005C7A69 /* dequant.c in Sources */,
+				738836DE0B1916CE005C7A69 /* fragment.c in Sources */,
+				738836DF0B1916CF005C7A69 /* huffdec.c in Sources */,
+				738836E00B1916D1005C7A69 /* idct.c in Sources */,
+				738836E10B1916D3005C7A69 /* info.c in Sources */,
+				738836E20B1916D5005C7A69 /* internal.c in Sources */,
+				738836E30B1916D9005C7A69 /* quant.c in Sources */,
+				738836E40B1916DC005C7A69 /* state.c in Sources */,
+				738836E50B1916ED005C7A69 /* cpu.c in Sources */,
+				738836E60B1916EF005C7A69 /* mmxfrag.c in Sources */,
+				738836E70B1916F0005C7A69 /* mmxidct.c in Sources */,
+				738836E80B1916F1005C7A69 /* mmxstate.c in Sources */,
+				738836E90B1916F4005C7A69 /* x86state.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		8D07F2C10486CC7A007CD1D0 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				731DDD2A0A01586000CAD2C4 /* decinfo.c in Sources */,
+				731DDD2C0A01586000CAD2C4 /* decode.c in Sources */,
+				731DDD2D0A01586000CAD2C4 /* dequant.c in Sources */,
+				731DDD2F0A01586000CAD2C4 /* fragment.c in Sources */,
+				731DDD300A01586000CAD2C4 /* huffdec.c in Sources */,
+				731DDD330A01586000CAD2C4 /* idct.c in Sources */,
+				731DDD350A01586000CAD2C4 /* internal.c in Sources */,
+				731DDD380A01586000CAD2C4 /* quant.c in Sources */,
+				731DDD3A0A01586000CAD2C4 /* state.c in Sources */,
+				731DDD4B0A0159AF00CAD2C4 /* info.c in Sources */,
+				09AFFECB0A5833DE0043DDB1 /* cpu.c in Sources */,
+				09AFFECD0A5833DE0043DDB1 /* mmxfrag.c in Sources */,
+				09AFFECE0A5833DE0043DDB1 /* mmxidct.c in Sources */,
+				09AFFECF0A5833DE0043DDB1 /* mmxstate.c in Sources */,
+				09AFFED10A5833DE0043DDB1 /* x86state.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		089C1666FE841158C02AAC07 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				089C1667FE841158C02AAC07 /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		4FADC24308B4156D00ABE55E /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_VERSION = A;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = TheoraExp_Prefix.pch;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = /Library/Frameworks;
+				LIBRARY_STYLE = DYNAMIC;
+				MACH_O_TYPE = mh_dylib;
+				PRODUCT_NAME = TheoraExp;
+				WRAPPER_EXTENSION = framework;
+				ZERO_LINK = YES;
+			};
+			name = Debug;
+		};
+		4FADC24408B4156D00ABE55E /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = (
+					ppc,
+					i386,
+				);
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_VERSION = A;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = TheoraExp_Prefix.pch;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = /Library/Frameworks;
+				LIBRARY_STYLE = DYNAMIC;
+				MACH_O_TYPE = mh_dylib;
+				PRODUCT_NAME = TheoraExp;
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Release;
+		};
+		4FADC24708B4156D00ABE55E /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(FRAMEWORK_SEARCH_PATHS)",
+					/Library/Frameworks,
+				);
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(GCC_PREPROCESSOR_DEFINITIONS)",
+					__MACOSX__,
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(HEADER_SEARCH_PATHS)",
+					../include,
+				);
+				PER_ARCH_CFLAGS_i386 = "";
+				PER_ARCH_CFLAGS_ppc = "";
+				PREBINDING = NO;
+				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+			};
+			name = Debug;
+		};
+		4FADC24808B4156D00ABE55E /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = (
+					ppc,
+					i386,
+				);
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(FRAMEWORK_SEARCH_PATHS)",
+					/Library/Frameworks,
+				);
+				GCC_OPTIMIZATION_LEVEL = 3;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(GCC_PREPROCESSOR_DEFINITIONS)",
+					__MACOSX__,
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(HEADER_SEARCH_PATHS)",
+					../include,
+				);
+				OTHER_CFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-falign-loops=16",
+					"-fforce-addr",
+					"-fomit-frame-pointer",
+				);
+				PER_ARCH_CFLAGS_i386 = "-DOC_X86ASM";
+				PER_ARCH_CFLAGS_ppc = "";
+				PREBINDING = NO;
+				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+			};
+			name = Release;
+		};
+		738836420B19144F005C7A69 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					../../ogg/include,
+				);
+				INSTALL_PATH = /usr/local/lib;
+				PER_ARCH_CFLAGS_i386 = "";
+				PER_ARCH_CFLAGS_ppc = "";
+				PREBINDING = NO;
+				PRODUCT_NAME = theoradec;
+				ZERO_LINK = YES;
+			};
+			name = Debug;
+		};
+		738836430B19144F005C7A69 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					../../ogg/include,
+				);
+				INSTALL_PATH = /usr/local/lib;
+				PER_ARCH_CFLAGS_i386 = "-DOC_X86ASM";
+				PER_ARCH_CFLAGS_ppc = "";
+				PREBINDING = NO;
+				PRODUCT_NAME = theoradec;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "TheoraExp" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				4FADC24308B4156D00ABE55E /* Debug */,
+				4FADC24408B4156D00ABE55E /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "TheoraExp" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				4FADC24708B4156D00ABE55E /* Debug */,
+				4FADC24808B4156D00ABE55E /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		738836410B19144F005C7A69 /* Build configuration list for PBXNativeTarget "libtheoradec (static)" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				738836420B19144F005C7A69 /* Debug */,
+				738836430B19144F005C7A69 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}

Added: trunk/theora-exp/macosx/TheoraExp_Prefix.pch
===================================================================
--- trunk/theora-exp/macosx/TheoraExp_Prefix.pch	                        (rev 0)
+++ trunk/theora-exp/macosx/TheoraExp_Prefix.pch	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'Theora' target in the 'Theora' project.
+//
+
+#include <Carbon/Carbon.h>

Added: trunk/theora-exp/tests/Makefile.am
===================================================================
--- trunk/theora-exp/tests/Makefile.am	                        (rev 0)
+++ trunk/theora-exp/tests/Makefile.am	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,25 @@
+INCLUDES = -I$(top_srcdir)/include
+
+noinst_HEADERS = tests.h
+
+AM_CFLAGS = $(OGG_CFLAGS)
+
+THEORADIR = ../lib
+THEORA_LIBS = $(THEORADIR)/libtheoradec.la $(OGG_LIBS)
+
+test: check
+
+TESTS_ENVIRONMENT = $(VALGRIND_ENVIRONMENT)
+
+#TESTS = noop comment-test
+TESTS = comment-test
+
+noinst_PROGRAMS = $(TESTS)
+
+#noop_SOURCES = noop.c
+#noop_LDADD = $(THEORA_LIBS)  $(THEORADIR)/libtheoraenc.la
+#noop_CFLAGS = $(OGG_CFLAGS)
+
+comment_test_SOURCES = comment-test.c
+comment_test_LDADD = $(THEORA_LIBS)
+comment_test_CFLAGS = $(OGG_CFLAGS)

Added: trunk/theora-exp/tests/comment-test.c
===================================================================
--- trunk/theora-exp/tests/comment-test.c	                        (rev 0)
+++ trunk/theora-exp/tests/comment-test.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,72 @@
+#include <theora/theoradec.h>
+
+#include <string.h>
+#include "tests.h"
+
+#define ARTIST1 "Bug-eyed Fish"
+#define ARTIST2 "VJ Fugu"
+#define COPYRIGHT "Copyright (C) 2005. Some Rights Reserved."
+#define LICENSE "Creative Commons Attribution-ShareAlike 2.5"
+
+static int
+test_comments ()
+{
+  th_comment tc;
+  int i, n;
+  char * value;
+
+  INFO ("+ Initializing th_comment");
+  th_comment_init (&tc);
+
+  INFO ("+ Adding ARTIST1");
+  th_comment_add (&tc, "ARTIST=" ARTIST1);
+
+  INFO ("+ Adding LICENSE by tag");
+  th_comment_add_tag (&tc, "LICENSE", LICENSE);
+
+  INFO ("+ Adding ARTIST2 by tag");
+  th_comment_add_tag (&tc, "ARTIST", ARTIST2);
+
+  INFO ("+ Querying value of LICENSE");
+  value = th_comment_query (&tc, "LICENSE", 0);
+  if (strcmp (value, LICENSE))
+    FAIL ("Incorrect value for LICENSE");
+
+  INFO ("+ Querying count of ARTIST comments");
+  n = th_comment_query_count (&tc, "ARTIST");
+
+  if (n != 2)
+    FAIL ("Incorrect count of ARTIST comments");
+
+  INFO ("+ Querying value of ARTIST index 0");
+  value = th_comment_query (&tc, "ARTIST", 0);
+  if (strcmp (value, ARTIST1))
+    FAIL ("Incorrect value for ARTIST index 0");
+
+  INFO ("+ Querying value of ARTIST index 1");
+  value = th_comment_query (&tc, "ARTIST", 1);
+  if (strcmp (value, ARTIST2))
+    FAIL ("Incorrect value for ARTIST index 1");
+
+  INFO ("+ Querying value of ARTIST index 2 (out of bounds)");
+  value = th_comment_query (&tc, "ARTIST", 2);
+  if (value != NULL)
+    FAIL ("Non-NULL value for ARTIST index 2 (out of bounds)");
+
+  INFO ("+ Querying value of UNDEF index 7 (tag not defined)");
+  value = th_comment_query (&tc, "UNDEF", 7);
+  if (value != NULL)
+    FAIL ("Non-NULL value for UNDEF index 7 (tag not defined)");
+
+  INFO ("+ Clearing th_comment");
+  th_comment_clear (&tc);
+
+  return 0;
+}
+
+int main(int argc, char *argv[])
+{
+  test_comments ();
+
+  exit (0);
+}

Added: trunk/theora-exp/tests/noop.c
===================================================================
--- trunk/theora-exp/tests/noop.c	                        (rev 0)
+++ trunk/theora-exp/tests/noop.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,69 @@
+#include <theora/theoradec.h>
+#include <theora/theoraenc.h>
+
+#include "tests.h"
+
+static int
+noop_test_encode ()
+{
+  th_info ti;
+  th_enc_ctx th;
+
+  INFO ("+ Initializing th_info struct");
+  th_info_init (&ti);
+
+  INFO ("+ Initializing th_state for encoding");
+  th = th_encode_alloc(&ti);
+  if (th != NULL) {
+    INFO ("+ Clearing th_state");
+    th_clear (&th);
+  }
+
+  INFO ("+ Clearing th_info struct");
+  th_info_clear (&ti);
+
+  return 0;
+}
+
+static int
+noop_test_decode ()
+{
+  th_info ti;
+  th_dec_ctx th;
+
+  INFO ("+ Initializing th_info struct");
+  th_info_init (&ti);
+
+  INFO ("+ Initializing th_state for decoding");
+  th_decode_init (&th, &ti);
+
+  INFO ("+ Clearing th_state");
+  th_clear (&th);
+
+  INFO ("+ Clearing th_info struct");
+  th_info_clear (&ti);
+
+  return 0;
+}
+
+static int
+noop_test_comments ()
+{
+  th_comment tc;
+
+  th_comment_init (&tc);
+  th_comment_clear (&tc);
+
+  return 0;
+}
+
+int main(int argc, char *argv[])
+{
+  /*noop_test_decode ();*/
+
+  noop_test_encode ();
+
+  noop_test_comments ();
+
+  exit (0);
+}

Added: trunk/theora-exp/tests/tests.h
===================================================================
--- trunk/theora-exp/tests/tests.h	                        (rev 0)
+++ trunk/theora-exp/tests/tests.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,16 @@
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define INFO(str) \
+  { printf ("----  %s ...\n", (str)); }
+
+#define WARN(str) \
+  { printf ("%s:%d: warning: %s\n", __FILE__, __LINE__, (str)); }
+
+#define FAIL(str) \
+  { printf ("%s:%d: %s\n", __FILE__, __LINE__, (str)); exit(1); }
+
+#undef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))

Added: trunk/theora-exp/theoracompat-uninstalled.pc.in
===================================================================
--- trunk/theora-exp/theoracompat-uninstalled.pc.in	                        (rev 0)
+++ trunk/theora-exp/theoracompat-uninstalled.pc.in	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,14 @@
+# theora installed pkg-config file
+
+prefix=
+exec_prefix=
+libdir=${pcfiledir}/lib
+includedir=${pcfiledir}/include
+
+Name: theoracompat
+Description: Theora video codec compatibility layer (uninstalled)
+Version: @VERSION@
+Requires: ogg >= 1.1.1 theoradec
+Conflicts:
+Libs: ${libdir}/libtheoracompat.la
+Cflags: -I${includedir} I${includedir}/theora/compat

Added: trunk/theora-exp/theoracompat.pc.in
===================================================================
--- trunk/theora-exp/theoracompat.pc.in	                        (rev 0)
+++ trunk/theora-exp/theoracompat.pc.in	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,14 @@
+# theora installed pkg-config file
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: theoracompat
+Description: Theora video codec compatibility layer
+Version: @VERSION@
+Requires: ogg >= 1.1.1 theoradec
+Conflicts:
+Libs: -L${libdir} -ltheoracompat
+Cflags: -I${includedir} -I${includedir}/theora/compat

Added: trunk/theora-exp/theoradec-uninstalled.pc.in
===================================================================
--- trunk/theora-exp/theoradec-uninstalled.pc.in	                        (rev 0)
+++ trunk/theora-exp/theoradec-uninstalled.pc.in	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,14 @@
+# theora installed pkg-config file
+
+prefix=
+exec_prefix=
+libdir=${pcfiledir}/lib
+includedir=${pcfiledir}/include
+
+Name: theoradec
+Description: Theora video codec decoder (uninstalled)
+Version: @VERSION@
+Requires: ogg >= 1.1.1
+Conflicts:
+Libs: ${libdir}/libtheoradec.la
+Cflags: -I${includedir}

Added: trunk/theora-exp/theoradec.pc.in
===================================================================
--- trunk/theora-exp/theoradec.pc.in	                        (rev 0)
+++ trunk/theora-exp/theoradec.pc.in	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,14 @@
+# theora installed pkg-config file
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: theoradec
+Description: Theora experimental video codec
+Version: @VERSION@
+Requires: ogg >= 1.1.1
+Conflicts:
+Libs: -L${libdir} -ltheoradec
+Cflags: -I${includedir}

Added: trunk/theora-exp/theoraenc-uninstalled.pc.in
===================================================================
--- trunk/theora-exp/theoraenc-uninstalled.pc.in	                        (rev 0)
+++ trunk/theora-exp/theoraenc-uninstalled.pc.in	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,14 @@
+# theora installed pkg-config file
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: theoraenc
+Description: Theora video codec encoder (uninstalled)
+Version: @VERSION@
+Requires: ogg >= 1.1.1 theoradec
+Conflicts:
+Libs: ${libdir}/libtheoraenc.la
+Cflags: -I${includedir}

Added: trunk/theora-exp/theoraenc.pc.in
===================================================================
--- trunk/theora-exp/theoraenc.pc.in	                        (rev 0)
+++ trunk/theora-exp/theoraenc.pc.in	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,14 @@
+# theora installed pkg-config file
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: theoraenc
+Description: Theora experimental video codec
+Version: @VERSION@
+Requires: ogg >= 1.1.1
+Conflicts:
+Libs: -L${libdir} -ltheoraenc -ltheoradec
+Cflags: -I${includedir}

Added: trunk/theora-exp/tools/colorreg.c
===================================================================
--- trunk/theora-exp/tools/colorreg.c	                        (rev 0)
+++ trunk/theora-exp/tools/colorreg.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,378 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+typedef struct{
+  /*The Y'CbCr values corresponding to pure black.*/
+  double ycbcr_offset[3];
+  /*The extent of each Y'CbCr value.*/
+  double ycbcr_scale[3];
+  /*The coefficients of R'G'B's contribution to Y'.*/
+  double ypbpr_coeffs[3];
+  /*Output device gamma.*/
+  /*Note: The recommended transfer function for the output device is used
+     here, not the inverse of the transfer function of the camera.
+    This means we use the model L=(E'+epsilon)^gamma' instead of inverting
+     E'={alpha*L,L<=epsilon; beta*L^gamma-delta, L>epsilon}.
+    Note gamma' is usually intentionally not defined as 1/gamma, to produce
+     an expansion of contrast on the output device which is generally more
+     pleasing.
+    We want to use the gamma of the output device, since that is what people
+     will actually see.*/
+  double disp_gamma;
+  /*Low-voltage offset.*/
+  /*The epsilon here is just made up.
+    It is used in output models to reduce instability near the black ranges,
+     since real output devices do not have a linear response segment, and
+     the slope of the power function is infinite at 0.*/
+  double disp_gamma_eps;
+  /*CIE xyz coordinates for red, green, blue and white.
+    This is how manufacturers and standards describe RGB color spaces.
+    If only x and y are given z=1-x-y.*/
+  double chromaticity[4][3];
+  /*The RGB to CIE XYZ conversion martix.
+    This is derived from the chromaticity values.*/
+  double rgb2xyz[3][3];
+}colorspace;
+
+/*ITU-R BT Rec. 470-6 System M (Usually NTSC).*/
+colorspace ITUREC470M={
+  {16,128,128},
+  {219,224,224},
+  {0.299,0.587,0.114},
+  2.2,0.001,
+  {
+    {0.67,0.33,0},
+    {0.21,0.71,0.08},
+    {0.14,0.08,0.78},
+    /*Illuminant C.*/
+    {0.31006,0.31616,0.37378}
+  }
+};
+
+/*ITU-R BT Rec. 470-6 System B,G (Most PALs, and SECAM with scaled inputs).*/
+colorspace ITUREC470BG={
+  {16,128,128},
+  {219,224,224},
+  {0.299,0.587,0.114},
+  /*Rec 470 claims an assumed output gamma of 2.8, but this is too high to use
+     in practice.
+    The document claims the overall gamma is assumed to be approximately 1.2.
+    They do not specify an input gamma value, but 0.45 is typical.
+    The resulting gamma value is 2.666....*/
+  1.2/0.45,0.001,
+  {
+    {0.64,0.33,0.03},
+    {0.29,0.60,0.11},
+    {0.15,0.06,0.79},
+    /*D65 white point.*/
+    {0.312713,0.329016,0.358271}
+  }
+};
+
+/*CCIR/ITU-R BT/CIE Rec 709-5 (HDTV).*/
+colorspace CIEREC709={
+  {16,128,128},
+  {219,224,224},
+  {0.2126,0.7152,0.0722},
+  /*Rec 709 does not specify a gamma for the output device.
+    Only the gamma of the input device (0.45) is given.
+    Typical CRTs have a gamma value of 2.5, which yields an overall gamma of
+     1.125, within the 1.1 to 1.2 range usually used with the dim viewing
+     environment assumed for television.*/
+  2.5,0.001,
+  {
+    {0.64,0.33,0.03},
+    {0.30,0.60,0.10},
+    {0.15,0.06,0.79},
+    /*D65 white point.*/
+    {0.312713,0.329016,0.358271}
+  }
+};
+
+void matrix_invert_3x3d(double _dst[3][3],double _src[3][3]){
+  double t[3][3];
+  double det;
+  /*TODO: look for a more numerically stable method.*/
+  t[0][0]=(_src[1][1]*_src[2][2]-_src[1][2]*_src[2][1]);
+  t[1][0]=(_src[1][2]*_src[2][0]-_src[1][0]*_src[2][2]);
+  t[2][0]=(_src[1][0]*_src[2][1]-_src[1][1]*_src[2][0]);
+  t[0][1]=(_src[2][1]*_src[0][2]-_src[2][2]*_src[0][1]);
+  t[1][1]=(_src[2][2]*_src[0][0]-_src[2][0]*_src[0][2]);
+  t[2][1]=(_src[2][0]*_src[0][1]-_src[2][1]*_src[0][0]);
+  t[0][2]=(_src[0][1]*_src[1][2]-_src[0][2]*_src[1][1]);
+  t[1][2]=(_src[0][2]*_src[1][0]-_src[0][0]*_src[1][2]);
+  t[2][2]=(_src[0][0]*_src[1][1]-_src[0][1]*_src[1][0]);
+  det=_src[0][0]*t[0][0]+_src[0][1]*t[1][0]+_src[0][2]*t[2][0];
+  _dst[0][0]=t[0][0]/det;
+  _dst[0][1]=t[0][1]/det;
+  _dst[0][2]=t[0][2]/det;
+  _dst[1][0]=t[1][0]/det;
+  _dst[1][1]=t[1][1]/det;
+  _dst[1][2]=t[1][2]/det;
+  _dst[2][0]=t[2][0]/det;
+  _dst[2][1]=t[2][1]/det;
+  _dst[2][2]=t[2][2]/det;
+}
+
+/*Convert the chromaticity values for this color space into a transformation
+   from RGB to CIE XYZ.*/
+void cs_fill_rgb2xyz(colorspace *_cs){
+  double frgb2xyz[3][3];
+  double irgb2xyz[3][3];
+  double x_white;
+  double z_white;
+  double scale[3];
+  int    i;
+  for(i=0;i<3;i++){
+    frgb2xyz[0][i]=_cs->chromaticity[i][0]/_cs->chromaticity[i][1];
+    frgb2xyz[1][i]=1;
+    frgb2xyz[2][i]=_cs->chromaticity[i][2]/_cs->chromaticity[i][1];
+  }
+  matrix_invert_3x3d(irgb2xyz,frgb2xyz);
+  x_white=_cs->chromaticity[3][0]/_cs->chromaticity[3][1];
+  z_white=_cs->chromaticity[3][2]/_cs->chromaticity[3][1];
+  for(i=0;i<3;i++){
+    scale[i]=irgb2xyz[i][0]*x_white+irgb2xyz[i][1]+irgb2xyz[i][2]*z_white;
+  }
+  for(i=0;i<3;i++){
+    int j;
+    for(j=0;j<3;j++){
+      _cs->rgb2xyz[i][j]=frgb2xyz[i][j]*scale[j];
+    }
+  }
+}
+
+/*Conversion from XYZ to L*a*b with the given X and Z values of white
+   (Y of white is assumed to be 1.0).*/
+void xyz2lab(double _lab[3],const double _xyz[3],double _x_white,
+ double _z_white){
+  double x;
+  double y;
+  double z;
+  double y3r;
+  x=_xyz[0]/_x_white;
+  if(x<=0.008856)x=7.787*x+16/116;
+  z=_xyz[2]/_z_white;
+  if(z<=0.008856)z=7.787*z+16/116;
+  y=_xyz[1];
+  if(y<=0.008856){
+    y=7.787*y+16/116;
+    _lab[0]=903.3*y;
+    y3r=pow(y,1.0/3);
+  }
+  else{
+    y3r=pow(y,1.0/3);
+    _lab[0]=116*y3r-16;
+  }
+  _lab[1]=500*(pow(x,1.0/3)-y3r);
+  _lab[2]=200*(y3r-pow(z,1.0/3));
+}
+
+/*Converts colors from some Y'CbCr space into the perceptually uniform L*a*b.
+  Unforunately, due to the way these spaces are defined in the various
+   standards, this requires going through a lot of intermediate color
+   spaces.*/
+int ycbcr2lab(const colorspace *_cs,double _lab[3],const double _ycbcr[3]){
+  double ypbpr[3];
+  double rgb[3];
+  double xyz[3];
+  int    i;
+  /*Convert Y'CbCr to Y'PbPr.*/
+  for(i=0;i<3;i++){
+    ypbpr[i]=(_ycbcr[i]-_cs->ycbcr_offset[i])/_cs->ycbcr_scale[i];
+  }
+  ypbpr[1]*=2*(1-_cs->ypbpr_coeffs[2]);
+  ypbpr[2]*=2*(1-_cs->ypbpr_coeffs[0]);
+  /*Convert Y'PbPr to non-linear R'G'B'.*/
+  rgb[0]=ypbpr[0]+ypbpr[2];
+  rgb[1]=ypbpr[0]-(ypbpr[1]*_cs->ypbpr_coeffs[2]+
+   ypbpr[2]*_cs->ypbpr_coeffs[0])/_cs->ypbpr_coeffs[1];
+  rgb[2]=ypbpr[0]+ypbpr[1];
+  /*Convert non-linear R'G'B' to linear RGB.*/
+  for(i=0;i<3;i++){
+    double e;
+    if(rgb[i]<0||rgb[i]>1)return -1;
+    e=rgb[i]+_cs->disp_gamma_eps;
+    if(e<=0)e=0;
+    else rgb[i]=pow(e,_cs->disp_gamma);
+  }
+  /*Convert linear RGB to CIE XYZ.*/
+  for(i=0;i<3;i++){
+    xyz[i]=_cs->rgb2xyz[i][0]*rgb[0]+_cs->rgb2xyz[i][1]*rgb[1]+
+     _cs->rgb2xyz[i][2]*rgb[2];
+  }
+  /*Convert CIE XYZ to L*a*b*.*/
+  xyz2lab(_lab,xyz,_cs->chromaticity[3][0]/_cs->chromaticity[3][1],
+   _cs->chromaticity[3][2]/_cs->chromaticity[3][1]);
+  return 0;
+}
+
+double dist2(double _a[3],double _b[3]){
+  return sqrt((_a[0]-_b[0])*(_a[0]-_b[0])+(_a[1]-_b[1])*(_a[1]-_b[1])+
+   (_a[2]-_b[2])*(_a[2]-_b[2]));
+}
+
+#define RES1    (8)
+#define NSAMPS1 (256/RES1)
+#define RES2    (1)
+#define RANGE   (16)
+#define NSAMPS2 (2*RANGE/RES2+1)
+
+/*This is the level of a Just Noticable Difference in L*a*b space.
+  We wish to map this to contrast level 1.
+  L*a*b is not truly a uniform color space, but only an approximation.
+  The Euclidean distance in that space yields JND values from 1 to 3.
+  Under certain test conditions, the JND can be lowered to as much as 0.5.
+  Newer equations like CIE94 attempt to derive local distortions of the space,
+   but we don't go for that much precision.
+  1.0 is probably a safe lower bound for video.*/
+#define JND     (1.0)
+
+/*Video is normally coded in some form of YUV color space.
+  What exactly the Y, U and V means vary from system to system.
+  Y is usually a non-linear (gamma corrected) luminance value, denoted Y' to
+   indicate the non-linearity.
+  U and V are usually differences between Y' and two of the primary colors,
+   usually R' and B', called chrominance values, scaled and potentially offset.
+  Y'CbCr is one example.
+  I don't know why Cb and Cr don't get prime symbols, despite being the
+   difference of two non-linear values.
+
+  The reason for decomposing video into a luminance channel and two chrominance
+   channels is that, for natural imagery, there is very little correlation
+   between the channels, which yields good compression.
+  The reason for using non-linear values is due to the non-linear nature of
+   the light receptors in human eyes, which makes Y'CbCr spaces nearly
+   perceptually uniform in each channel.
+
+  The goal of this program is to compute the relative importance of each
+   individual channel in the various Y'CbCr spaces, as well as locate the
+   Just Noticeable Difference (JND) value for each channel.
+  This is accomplished by converting to the device-independent and perceptually
+   uniform CIE L*a*b color space, and measuring color distances there.
+
+  A linear regression is then performed on the distance measurements, producing
+   an offset and a slope to apply to each color channel such that the JND
+   value is 1.
+  This is an approximation to a perceptually uniform distance metric for the
+   Y'CbCr space.
+  Finally, equation is inverted and the JND value for each channel is
+   computed.*/
+int main(int _argc,char **_argv){
+  static const int NEXT[3]={1,2,0};
+  static double *de[3];
+  static double *dc[3];
+  colorspace *cs;
+  double      ycbcr0[3];
+  double      ycbcra[3];
+  double      ycbcrb[3];
+  double      ycbcr_jnd1[3];
+  double      ycbcrs[3];
+  double      ycbcr_jnd2[3];
+  int         nsamps[3];
+  int         csamps[3];
+  int         c;
+  if(_argc!=2){
+    fprintf(stderr,"Specify a color space: \n"
+     " Rec470M\n"
+     " Rec470BG\n");
+    exit(-1);
+  }
+  if(strcmp(_argv[1],"Rec470M")==0)cs=&ITUREC470M;
+  else if(strcmp(_argv[1],"Rec470BG")==0)cs=&ITUREC470BG;
+  else if(strcmp(_argv[1],"Rec709")==0)cs=&CIEREC709;
+  else{
+    fprintf(stderr,"Invalid color space.\n"
+     "Run with no options for help.\n");
+    exit(-1);
+  }
+  cs_fill_rgb2xyz(cs);
+  /*Sample the color difference in L*a*b space over the range of Y'CbCr
+     values.*/
+  nsamps[0]=nsamps[1]=nsamps[2]=0;
+  csamps[0]=csamps[1]=csamps[2]=0;
+  for(ycbcr0[0]=0;ycbcr0[0]<256;ycbcr0[0]+=RES1){
+    for(ycbcr0[1]=0;ycbcr0[1]<256;ycbcr0[1]+=RES1){
+      for(ycbcr0[2]=0;ycbcr0[2]<256;ycbcr0[2]+=RES1){
+        double lab0[3];
+        double ycbcr1[3];
+        if(ycbcr2lab(cs,lab0,ycbcr0)<0)continue;
+        for(c=0;c<3;c++){
+          ycbcr1[NEXT[c]]=ycbcr0[NEXT[c]];
+          ycbcr1[NEXT[NEXT[c]]]=ycbcr0[NEXT[NEXT[c]]];
+          ycbcr1[c]=ycbcr0[c]-RANGE;
+          if(ycbcr1[c]<0)ycbcr1[c]=0;
+          for(;ycbcr1[c]<256&&ycbcr1[c]<=ycbcr0[c]+RANGE;ycbcr1[c]+=RES2){
+            double lab1[3];
+            if(ycbcr2lab(cs,lab1,ycbcr1)<0)continue;
+            if(nsamps[c]>=csamps[c]){
+              double *nde;
+              double *ndc;
+              int ncsamps;
+              ncsamps=csamps[c]<<1|1;
+              nde=realloc(de[c],sizeof(double)*ncsamps);
+              ndc=realloc(dc[c],sizeof(double)*ncsamps);
+              if(nde==NULL||ndc==NULL){
+                fprintf(stderr,"Out of memory.\n");
+                exit(-1);
+              }
+              de[c]=nde;
+              dc[c]=ndc;
+              csamps[c]=ncsamps;
+            }
+            de[c][nsamps[c]]=dist2(lab0,lab1)/JND;
+            dc[c][nsamps[c]]=fabs(ycbcr0[c]-ycbcr1[c]);
+            /*printf("(%lf,%lf)\n",dc[c][nsamps[c]],de[c][nsamps[c]]);*/
+            nsamps[c]++;
+          }
+        }
+      }
+    }
+  }
+  /*Compute a linear regression from the sampled errors.*/
+  for(c=0;c<3;c++){
+    double ysum;
+    double xsum;
+    double x2sum;
+    double xysum;
+    double d;
+    int i;
+    ysum=xsum=x2sum=xysum=0;
+    for(i=0;i<nsamps[c];i++){
+      ysum+=de[c][i];
+      xsum+=dc[c][i];
+      x2sum+=dc[c][i]*dc[c][i];
+      xysum+=dc[c][i]*de[c][i];
+    }
+    d=nsamps[c]*x2sum-xsum*xsum;
+    ycbcra[c]=(x2sum*ysum-xsum*xysum)/d;
+    ycbcrs[c]=xysum/x2sum;
+    ycbcr_jnd2[c]=1/ycbcrs[c];
+    if(ycbcra[c]<0){
+      ycbcra[c]=0;
+      ycbcrb[c]=ycbcrs[c];
+    }
+    else ycbcrb[c]=(nsamps[c]*xysum-xsum*ysum)/d;
+    ycbcr_jnd1[c]=(1-ycbcra[c])/ycbcrb[c];
+  }
+  /*Print the non-0-intercept regressions.*/
+  /*Print the offsets.*/
+  printf("{%0.23lf,%0.23lf,%0.23lf}\n",ycbcra[0],ycbcra[1],ycbcra[2]);
+  /*And the slopes.*/
+  printf("{%0.23lf,%0.23lf,%0.23lf}\n",ycbcrb[0],ycbcrb[1],ycbcrb[2]);
+  printf("\n");
+  /*Print the JND values.*/
+  printf("{%0.23lf,%0.23lf,%0.23lf}\n",ycbcr_jnd1[0],ycbcr_jnd1[1],
+   ycbcr_jnd1[2]);
+  printf("\n\n");
+  /*Print the 0-intercept regressions.*/
+  /*Print the slopes of the 0-intercept regressions.*/
+  printf("{%0.23lf,%0.23lf,%0.23lf}\n",ycbcrs[0],ycbcrs[1],ycbcrs[2]);
+  printf("\n");
+  /*Print the JND values.*/
+  printf("{%0.23lf,%0.23lf,%0.23lf}\n",ycbcr_jnd2[0],ycbcr_jnd2[1],
+   ycbcr_jnd2[2]);
+  return 0;
+}

Added: trunk/theora-exp/tools/csfgen.c
===================================================================
--- trunk/theora-exp/tools/csfgen.c	                        (rev 0)
+++ trunk/theora-exp/tools/csfgen.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,586 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#if !defined(M_PI)
+# define M_PI (3.1415926535897932384626433832795)
+#endif
+
+/*Nadenau computes the transfer function of the HVS with respect to a
+   particular wavelet coefficient by mapping a small region of the frequency
+   domain to that region.
+  This, of course, assumes that the wavelet function has a uniform impulse
+   response to frequencies within that range, and 0 response to any frequencies
+   outside of it, which is of course hogwash.
+  He then uses Fourier series of this transfer function to develop a set of FIR
+   filters which approximate it.
+
+  We, of course, are not using wavelet functions, but there is a nice
+   partitioning of the frequency domain that is normally assumed with the DCT
+   that would allow us to do the same thing.
+  However, in the future, we may wish to use transforms other than the DCT, in
+   which case Nadenau's idealized frequency responses would no longer be a
+   reasonable approximation.
+  The process we actually want to approximate is:
+
+    Image -> FFT -> Scale by CSF -> iFFT -> Block transform (DCT)
+
+  We would like to do this by manipulating the DCT coefficients directly,
+   without the transformation into the frequency domain and back.
+
+  Therefore we posit that a set of symmetric FIR filters exist which
+   approximate the above process, and proceed to set up a numerical
+   optimization problem to solve for their coefficients.
+  This is done by applying the above process to a set of simple cosine curves
+   with varying frequencies and phases, and evaluating what the proper output
+   of the filters should be.
+  A least-squares problem is then set up to find the filter coefficients which
+   yield the closest results.
+  There is, of course, no need to translate a cosine curve into the frequency
+   domain and back, so the process is relatively straightforward, and would
+   work for any block transform.*/
+
+/*The number of phases to sample at each frequency.*/
+#define NPHASES   (16)
+/*The number of frequencies to sample (in the interval [0,pi)).*/
+#define NFREQS    (1024)
+/*The maximum half-length of a filter, rounded up.
+  The actual filter length is 2*NTAPS-1, but there are only NTAPS unique filter
+   coefficients, since the filters are symmetric.
+  The value 4 here is sufficient to guarantee that any chopped-off coefficients
+   account for less than 1/255th of the magnitude of coefficient 0.*/
+#define NTAPS     (4)
+/*The actual maximum size of the filters.*/
+#define FILT_SIZE ((NTAPS<<1)-1)
+
+/*The magnitude of each DCT basis vector.
+  For a non-orthogonal transform, one per coefficient will be needed.
+  The Theora DCT function scales its ouput by 2 in each dimension.*/
+#define DCT_SCALE (2.0)
+
+/*Allocates a 2-dimesional array of the given size.
+  _height: The number of columns.
+  _row:    The number of rows.
+  _sz:     The size of each element.*/
+static void **alloc_2d(size_t _height,size_t _width,size_t _sz){
+  size_t  colsz;
+  size_t  datsz;
+  char   *ret;
+  colsz=_height*sizeof(void *);
+  datsz=_sz*_width*_height;
+  ret=(char *)malloc(datsz+colsz);
+  if(ret!=NULL){
+    size_t   rowsz;
+    size_t   i;
+    void   **p;
+    char    *datptr;
+    p=(void **)ret;
+    i=_height;
+    rowsz=_sz*_width;
+    for(datptr=ret+colsz;i-->0;p++,datptr+=rowsz)*p=(void *)datptr;
+  }
+  return (void **)ret;
+}
+
+/*cos(n*pi/2) (resp. sin(m*pi/2)) accurate to 16 bits.*/
+#define OC_C1S7D (64277.0/65536)
+#define OC_C2S6D (60547.0/65536)
+#define OC_C3S5D (54491.0/65536)
+#define OC_C4S4D (46341.0/65536)
+#define OC_C5S3D (36410.0/65536)
+#define OC_C6S2D (25080.0/65536)
+#define OC_C7S1D (12785.0/65536)
+
+/*A floating-point implementation of the Theora DCT.
+  Here we pretend that the transform is linear, and ignore the non-linearities
+   introduced by rounding and truncation in the integer version.*/
+static void fdct8d(double _y[8],double _x[8]){
+  double t[8];
+  double u;
+  double v;
+  t[0]=_x[0]+_x[7];
+  t[1]=_x[1]+_x[2];
+  t[2]=_x[3]+_x[4];
+  t[3]=_x[5]+_x[6];
+  t[4]=_x[5]-_x[6];
+  t[5]=_x[3]-_x[4];
+  t[6]=_x[1]-_x[2];
+  t[7]=_x[0]-_x[7];
+  /*Butterflies for ouputs 0 and 4.*/
+  u=t[0]+t[2];
+  v=t[1]+t[3];
+  _y[0]=OC_C4S4D*(u+v);
+  _y[4]=OC_C4S4D*(u-v);
+  /*Apply rotation for outputs 2 and 6.*/
+  u=t[0]-t[2];
+  v=t[6]-t[4];
+  _y[2]=OC_C2S6D*u+OC_C6S2D*v;
+  _y[6]=OC_C6S2D*u-OC_C2S6D*v;
+  /*Compute some common terms.*/
+  t[3]=OC_C4S4D*(t[1]-t[3]);
+  t[4]=-OC_C4S4D*(t[6]+t[4]);
+  /*Apply rotation for outputs 1 and 7.*/
+  u=t[7]+t[3];
+  v=t[4]-t[5];
+  _y[1]=OC_C1S7D*u-OC_C7S1D*v;
+  _y[7]=OC_C7S1D*u+OC_C1S7D*v;
+  /*Apply rotation for outputs 3 and 5.*/
+  u=t[7]-t[3];
+  v=t[4]+t[5];
+  _y[3]=OC_C3S5D*u-OC_C5S3D*v;
+  _y[5]=OC_C5S3D*u+OC_C3S5D*v;
+}
+
+/*Solves a linear system Ax=b for x by Gaussian elimination with partial
+   pivoting.
+  _x:   Will contain the solution vector.
+  _a:   The _n by _n matrix of coefficients on the left-hand side.
+  _b:   The right hand side.
+  _ips: Scratch space in which to store pivot points.
+  _n:   The size of the system.
+  Return: 0 if the system has a solution, or a negative value on error.*/
+static int lin_solve(double _x[],double **_a,double _b[],int _ips[],int _n){
+  double sum;
+  int    nm1;
+  int    ip;
+  int    i;
+  int    j;
+  int    k;
+  if(_n==0)return 0;
+  /*Initialize pivot list.*/
+  for(i=0;i<_n;i++){
+    double row_norm;
+    _ips[i]=i;
+    row_norm=0;
+    for(j=0;j<_n;j++){
+      double q;
+      q=fabs(_a[i][j]);
+      if(row_norm<q)row_norm=q;
+    }
+    if(row_norm==0)return -1;
+    _x[i]=1/row_norm;
+  }
+  /*Gaussian elimination.*/
+  nm1=_n-1;
+  for(k=0;k<nm1;k++){
+    double big;
+    double pivot;
+    int    pivi;
+    int    kp;
+    int    kp1;
+    big=0;
+    for(i=k;i<_n;i++){
+      double size;
+      ip=_ips[i];
+      size=fabs(_a[ip][k])*_x[ip];
+      if(size>big){
+        big=size;
+        pivi=i;
+      }
+    }
+    if(big==0)return -2;
+    if(pivi!=k){
+      j=_ips[k];
+      _ips[k]=_ips[pivi];
+      _ips[pivi]=j;
+    }
+    kp=_ips[k];
+    pivot=_a[kp][k];
+    kp1=k+1;
+    for(i=kp1;i<_n;i++){
+      double em;
+      ip=_ips[i];
+      em=-_a[ip][k]/pivot;
+      _a[ip][k]=-em;
+      for(j=kp1;j<_n;j++)_a[ip][j]+=em*_a[kp][j];
+    }
+  }
+  /*Last element of _ips[n]th row.*/
+  if(_a[_ips[nm1]][nm1]==0)return -3;
+  /*Back substitution.*/
+  ip=_ips[0];
+  _x[0]=_b[ip];
+  for(i=1;i<_n;i++){
+    double sum;
+    ip=_ips[i];
+    sum=0;
+    for(j=0;j<i;j++)sum+=_a[ip][j]*_x[j];
+    _x[i]=_b[ip]-sum;
+  }
+  _x[nm1]=_x[nm1]/_a[_ips[nm1]][nm1];
+  for(i=nm1;i-->0;){
+    ip=_ips[i];
+    sum=0;
+    for(j=i+1;j<_n;j++)sum+=_a[ip][j]*_x[j];
+    _x[i]=(_x[i]-sum)/_a[ip][i];
+  }
+  return 0;
+}
+
+/*A Contrast Sensitivity Function.*/
+typedef double (*csf_func)(const void *_ctx,double _f);
+
+/*A single CSF filter.*/
+typedef double     csf_filter[NTAPS];
+/*A set of CSF filters, one for each DCT coefficient.*/
+typedef csf_filter csf_filter_bank[8];
+
+/*Finds a filter bank for a given CSF function.
+  _filters: Will contain the optimal filter bank.
+  _csf:     The CSF function.
+  _csf_ctx: The parameters of the CSF function.
+  _scratch: An NFREQS*NPHASES*8 by NTAPS array of scratch space.*/
+static void find_csf_filters(csf_filter_bank _filters,csf_func _csf,
+ const void *_csf_ctx,double **_scratch){
+  double  ata[NTAPS][NTAPS];
+  double  ata_scratch[NTAPS][NTAPS];
+  double  atb[NTAPS];
+  double *atap[NTAPS];
+  double *ata_scratchp[NTAPS];
+  double  x[8*FILT_SIZE];
+  double  y[8*FILT_SIZE];
+  int     aoff[8];
+  int     ips[NTAPS];
+  int     row;
+  int     f;
+  int     p;
+  int     c;
+  int     i;
+  int     j;
+  int     k;
+  /*Set up offsets into _scratch, and the local 2D arrays.*/
+  aoff[0]=0;
+  for(i=1;i<8;i++)aoff[i]=aoff[i-1]+NFREQS*NPHASES;
+  for(i=0;i<NTAPS;i++){
+    atap[i]=ata[i];
+    ata_scratchp[i]=ata_scratch[i];
+  }
+  /*Find the response of each coefficient for each frequency and phase, and
+     the expected response of CSF-sensitive coefficients.*/
+  for(row=f=0;f<NFREQS;f++){
+    double cs;
+    /*Compute the CSF weight at this frequency.*/
+    cs=_csf(_csf_ctx,f/(double)NFREQS)/DCT_SCALE;
+    for(p=0;p<NPHASES;p++,row++){
+      double theta;
+      double dtheta;
+      dtheta=f*M_PI/NFREQS;
+      theta=p*(2*M_PI)/NPHASES-8*(NTAPS-1)*dtheta;
+      /*Fill in a perfect cosine curve at this frequency/phase.*/
+      for(i=0;i<8*FILT_SIZE;i++){
+        x[i]=cos(theta);
+        theta+=dtheta;
+      }
+      /*Find the transformed coefficient values of this curve.*/
+      for(i=0;i<FILT_SIZE;i++){
+        fdct8d(y+(i<<3),x+(i<<3));
+      }
+      /*Add the equation for each coefficient to our linear systems.*/
+      for(c=0;c<8;c++){
+        _scratch[aoff[c]+row][0]=y[(NTAPS-1<<3)+c];
+        for(j=1;j<NTAPS;j++){
+          _scratch[aoff[c]+row][j]=y[(NTAPS-1-j<<3)+c]+y[(NTAPS-1+j<<3)+c];
+        }
+        _scratch[aoff[c]+row][NTAPS]=y[(NTAPS-1<<3)+c]*cs;
+      }
+    }
+  }
+  /*We now have the system Ax=b, where x is the filter coefficients we want to
+     solve for, and each row of A is a set of actual coefficients, and b is the
+     CSF-scaled coefficient we actually want as output.
+    There is a row of A for each frequency and phase, but we only have NTAPS
+     filter coefficients, so we find the solution which minimizes (Ax-b)^2.
+    This is done by solving (A^T A)x = A^T b, which conveniently is a 5x5
+     system, and thus easy to solve.*/
+  for(c=0;c<8;c++){
+    for(i=0;i<NTAPS;i++){
+      for(j=0;j<NTAPS;j++)ata[i][j]=0;
+      atb[i]=0;
+    }
+    for(k=0;k<NFREQS*NPHASES;k++){
+      for(i=0;i<NTAPS;i++){
+        for(j=0;j<NTAPS;j++){
+          ata[i][j]+=_scratch[aoff[c]+k][i]*_scratch[aoff[c]+k][j];
+        }
+        atb[i]+=_scratch[aoff[c]+k][i]*_scratch[aoff[c]+k][NTAPS];
+      }
+    }
+    /*We're paranoid: On the off chance the system has no solution, we reduce
+       the dimensionality of the filter and pad with 0's.
+      That, of course, never actually happens.*/
+    for(k=NTAPS;k>0;k--){
+      memcpy(ata_scratch,ata,sizeof(ata_scratch));
+      if(!lin_solve(_filters[c],ata_scratchp,atb,ips,k)){
+        for(;k<NTAPS;k++)_filters[c][k]=0;
+        break;
+      }
+    }
+  }
+}
+
+/*CSF function parameters.
+  All values are derived from the measurements in Chapter 5 of Nadenau's Ph.D.
+   thesis \cite{Nad00}.
+  We use his measurements because they were actually performed in a Y'CbCr
+   space, though he does not specify which one.
+
+  The extensions to supra-threshold levels use the model proposed by Mark
+   Cannon Jr. \cite{Can85}.
+  There is no clear theory for how supra-threshold contrast should be handled.
+  The law of contrast constancy \cite{GS75} suggests that quantization should
+   be uniform at high levels of contrast.
+  However, recent experiments on wavelet compression suggest that, although the
+   effect of the CSF is reduced at supra-threshold levels, it still provides
+   better perceptual quality than uniform quantization \cite{CH03}.
+  Purported reasons for this are the better preservation of edge structure when
+   details are removed from the fine scales (highest frequencies) first.
+
+  When Cannon's results are adapted to our framework, correcting for the change
+   from Michelson contrast to our model, the result is that the shape of the
+   CSF curve is preserved, though to a lesser amplitude, throughout the entire
+   useful contrast range.
+  This corresponds very well with the findings of Chandler and Hemami.
+  The advantage of using Cannon's scheme over theirs is that Cannon's is very
+   simple, and contains no unexplained magic constants.
+  Current results from Chandler and Hemami give only a small benefit over
+   JPEG200.
+
+  @ARTICLE{Can85,
+    author="Mark W. Cannon, Jr.",
+    title="Perceived contrast in the fovea and periphery",
+    journal="Journal of the Optical Society of America A",
+    volume=2,
+    number=10,
+    pages="1760--1758",
+    month="Oct.",
+    year=1985
+  }
+
+  @ARTICLE{GS75,
+    author="M. A. Georgeson and G. D. Sullivan",
+    title="Contrast constancy: Deblurring in human vision by spatial frequency
+     channels",
+    journal="The Journal of Physiology",
+    volume=252,
+    number=3,
+    pages="627--656",
+    month="Nov.",
+    year=1975
+  }
+
+  @INPROCEEDINGS{CH03,
+    author="Damon M. Chandler and Sheila S. Hemami",
+    title="Suprathreshold image compression based on contrast allocation and
+     global precedence",
+    booktitle="Proc. Human Vision and Electronic Imaging 2003",
+    address="Santa Clara, CA",
+    month="Jan.",
+    year=2003
+  }
+
+  @PHDTHESIS{Nad00,
+    author="Marcus Nadenau",
+    title="Integration of Human Color Visual Models into High
+     Quality Image Compression",
+    school="\'{E}cole Polytechnique F\'{e}d\'{e}rale de Lausanne",
+    year=2000,
+    URL="http://ltswww.epfl.ch/pub_files/nadenau/Thesis_Marcus_LQ.pdf"
+  }*/
+
+typedef struct csfl_ctx csfl_ctx;
+typedef struct csfc_ctx csfc_ctx;
+typedef struct csf_ctx  csf_ctx;
+
+/*The luma CSF function context.*/
+struct csfl_ctx{
+  /*The frequency where the CSF attains its maximum.*/
+  double peakf;
+  /*The global scale factor.
+    This accounts for small rounding errors in the parameters Nadenau reports
+     so that the function maximum is actually 1.0.*/
+  double s;
+  /*The actual parameters from Table 5.3 on page 83 of Nadenau's thesis.
+    There is an error in this table: the roles of a1 and a2 are reversed.
+    Simply swapping the data for these two parameters yields correct results.*/
+  double a1;
+  double a2;
+  double b1;
+  double b2;
+  double c1;
+  double c2;
+};
+
+/*The luma CSF function.*/
+static double csfl(csfl_ctx *_ctx,double _f){
+  return _f<_ctx->peakf?1:
+   _ctx->s*(_ctx->a1*(_f*_f)*exp(_ctx->b1*pow(_f,_ctx->c1))+
+   _ctx->a2*exp(_ctx->b2*pow(_f,_ctx->c2)));
+}
+
+/*The actual luma CSF parameters.*/
+static const csfl_ctx Y_CTX={
+  3.74695975597140362,
+  0.999941996555815748,
+  0.9973,0.221,
+  -0.9699,-0.800,
+  0.7578,1.999
+};
+
+/*The chroma CSF function context.*/
+struct csfc_ctx{
+  /*The actual parameters from Table 5.4 on page 83 of Nadenau's thesis.*/
+  double a1;
+  double b1;
+  double c1;
+};
+
+/*The chroma CSF function.*/
+static double csfc(csfc_ctx *_ctx,double _f){
+  return _ctx->a1*exp(_ctx->b1*pow(_f,_ctx->c1));
+}
+
+/*The actual Cr CSF parameters.*/
+static const csfc_ctx CR_CTX={
+  1.000,-0.1521,0.893
+};
+
+/*The actual Cb CSF parameters.*/
+static const csfc_ctx CB_CTX={
+  1.000,-0.2041,0.900
+};
+
+/*A general contrast-dependent CSF function context.*/
+struct csf_ctx{
+  /*The threshold-level CSF function.*/
+  csf_func    c0csf;
+  /*The threshold-level CSF function parameters.*/
+  const void *c0csf_ctx;
+  /*The Nyquist frequency of this channel.*/
+  double      fmax;
+  /*The frequency where the threshold-level CSF funtion attains its maximum.*/
+  double      peakf;
+  /*A scale parameter used to normalize the curve to have a maximum of 1.0.*/
+  double      scale;
+  /*The contrast level.*/
+  double      contrast;
+};
+
+/*The exponent parameter in the supra-threshold model.
+  Values between 0.4 and 0.6 are reasonable.*/
+#define CONTRAST_EXP (0.5)
+/*The scale parameter of the contrast level.
+  Cannon does not report values for this parameter, and it would differ for us
+   anyway since we do not use Michelson contrast
+   ((L_max-L_min)/(L_max+L_min)).
+  It must be sufficiently small so that physical contrast does not actually
+   decrease as perceptual contrast increases.*/
+#define CONTRAST_SCALE (1.0/64)
+
+/*The main contrast-dependent CSF function.*/
+static double csf(csf_ctx *_ctx,double _f){
+  double f;
+  double s0;
+  f=_f*_ctx->fmax;
+  s0=_ctx->c0csf(_ctx->c0csf_ctx,f);
+  return _ctx->scale/(_ctx->contrast+1/s0);
+}
+
+/*This is the Nyquist frequency for a 45 dpi screen viewed from 50 cm out.
+  This is assumed to be the closest reasonable viewing distance.*/
+#define FREQUENCY_MAX (7.558704385696589)
+
+/*The various contrast levels for which we will compute filters.*/
+static const double CONTRASTS[8]={0,1,2,4,8,16,32,64};
+
+/*Builds the CSF filter banks for each channel and contrast level.*/
+static void build_csf_tables(csf_filter_bank _filters[5][8]){
+  csf_ctx   csf_ctxs[5]={
+    {
+      (csf_func)csfl,
+      &Y_CTX,
+      FREQUENCY_MAX,
+      3.74695975597140362
+    },
+    {
+      (csf_func)csfc,
+      &CR_CTX,
+      FREQUENCY_MAX,
+      0
+    },
+    {
+      (csf_func)csfc,
+      &CR_CTX,
+      0.5*FREQUENCY_MAX,
+      0
+    },
+    {
+      (csf_func)csfc,
+      &CB_CTX,
+      FREQUENCY_MAX,
+      0
+    },
+    {
+      (csf_func)csfc,
+      &CB_CTX,
+      0.5*FREQUENCY_MAX,
+      0
+    }
+  };
+  double  **scratch;
+  int       chi;
+  int       ci;
+  /*Allocate the scratch space needed for our least-squares problem.*/
+  scratch=(double **)alloc_2d(NFREQS*NPHASES*8,NTAPS+1,sizeof(double));
+  for(chi=0;chi<5;chi++){
+    for(ci=0;ci<8;ci++){
+      csf_ctxs[chi].contrast=pow(CONTRASTS[ci]*CONTRAST_SCALE,1.0/CONTRAST_EXP);
+      /*Find the normalization constant for this contrast level.*/
+      csf_ctxs[chi].scale=csf_ctxs[chi].contrast+
+       1/csf_ctxs[chi].c0csf(csf_ctxs[chi].c0csf_ctx,csf_ctxs[chi].peakf);
+      find_csf_filters(_filters[chi][ci],(csf_func)csf,csf_ctxs+chi,scratch);
+    }
+  }
+}
+
+int main(void){
+  /*The names of each channel: these get inserted as comments in the generated
+     code.*/
+  static const char *CHANNEL_NAMES[5]={
+    "Y channel filters.",
+    "Cr channel filters at full resolution.",
+    "Cr channel filters at half resolution.",
+    "Cb channel filters at full resolution.",
+    "Cb channel filters at half resolution."
+  };
+  int i;
+  int j;
+  int k;
+  csf_filter_bank filters[5][8];
+  /*Compute all the CSF filters.*/
+  build_csf_tables(filters);
+  /*Dump the generated tables as C code for inclusion in lib/psych.c.*/
+  printf("static const oc_csf_filter_bank OC_CSF_FILTERS[5][8]={");
+  for(i=0;i<5;i++){
+    printf("\n  /*%s*/",CHANNEL_NAMES[i]);
+    printf("\n  {");
+    for(j=0;j<8;j++){
+      printf("\n    /*Contrast level %g filters.*/",CONTRASTS[j]);
+      printf("\n    {");
+      for(k=0;k<8;k++){
+        printf("\n      {");
+        printf("\n        %+28.25fF,%+28.25fF,",filters[i][j][k][0],
+         filters[i][j][k][1]);
+        printf("\n        %+28.25fF,%+28.25fF",filters[i][j][k][2],
+         filters[i][j][k][3]);
+        printf("\n      }");
+        if(k+1<8)printf(",");
+      }
+      printf("\n    }");
+      if(j+1<8)printf(",");
+    }
+    printf("\n  }");
+    if(i+1<5)printf(",");
+  }
+  printf("\n};");
+  return 0;
+}

Added: trunk/theora-exp/tools/dumpstats.c
===================================================================
--- trunk/theora-exp/tools/dumpstats.c	                        (rev 0)
+++ trunk/theora-exp/tools/dumpstats.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <string.h>
+#include <ogg/ogg.h>
+
+#define OC_NMODES (8)
+#define OC_MINI(_a,_b) ((_a)>(_b)?(_b):(_a))
+
+ogg_uint16_t OC_RES_BITRATES[64][3][OC_NMODES][16];
+
+static ogg_int64_t OC_RES_BITRATE_ACCUM[64][3][OC_NMODES][16];
+static int         OC_RES_BITRATE_SAMPLES[64][3][OC_NMODES][16];
+
+
+int main(void){
+  static const char *pl_names[3]={"Y'","Cb","Cr"};
+  static const char *mode_names[OC_NMODES]={
+    "OC_MODE_INTRA",
+    "OC_MODE_INTER_NOMV",
+    "OC_MODE_INTER_MV",
+    "OC_MDOE_INTER_MV_LAST",
+    "OC_MODE_INTER_MV_LAST2",
+    "OC_MODE_INTER_MV_FOUR",
+    "OC_MODE_GOLDEN_NOMV",
+    "OC_MODE_GOLDEN_MV"
+  };
+  FILE *in;
+  int   qi;
+  int   pli;
+  int   modei;
+  int   erri;
+  in=fopen("modedec.stats","rb");
+  if(in==NULL)return -1;
+  fread(OC_RES_BITRATE_ACCUM,sizeof(OC_RES_BITRATE_ACCUM),1,in);
+  fread(OC_RES_BITRATE_SAMPLES,sizeof(OC_RES_BITRATE_SAMPLES),1,in);
+  /*Update the current bitrate statistics in use.*/
+  printf("ogg_uint16_t OC_RES_BITRATES[64][3][OC_NMODES][16]={\n");
+  for(qi=0;qi<64;qi++){
+    printf("  {\n");
+    for(pli=0;pli<3;pli++){
+      printf("    {\n");
+      for(modei=0;modei<OC_NMODES;modei++){
+        printf("      /*%s  qi=%i  %s*/\n",pl_names[pli],qi,
+         mode_names[modei]);
+        printf("      {\n");
+        printf("        ");
+        for(erri=0;erri<16;erri++){
+          int n;
+          if(erri==8)printf("\n        ");
+          n=OC_RES_BITRATE_SAMPLES[qi][pli][modei][erri];
+          if(!n)printf("%5i",0);
+          else{
+            OC_RES_BITRATES[qi][pli][modei][erri]=(ogg_uint16_t)OC_MINI(65535,
+             ((OC_RES_BITRATE_ACCUM[qi][pli][modei][erri]<<1)+n)/(n<<1));
+            printf("%5i",OC_RES_BITRATES[qi][pli][modei][erri]);
+          }
+          if(erri<15)printf(",");
+        }
+        printf("\n");
+        if(modei<OC_NMODES-1)printf("      },\n");
+        else printf("      }\n");
+      }
+      if(pli<2)printf("    },\n");
+      else printf("    }\n");
+    }
+    if(qi<63)printf("  },\n");
+    else printf("  }\n");
+  }
+  printf("};\n");
+  return 0;
+}

Added: trunk/theora-exp/tools/extgen.c
===================================================================
--- trunk/theora-exp/tools/extgen.c	                        (rev 0)
+++ trunk/theora-exp/tools/extgen.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,407 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <float.h>
+#include <math.h>
+#include <string.h>
+
+
+
+/*This utility generates the extrapolation matrices used to pad incomplete
+   blocks when given frame sizes that are not a multiple of two.
+  Although the technique used here is generalizable to non-rectangular shapes,
+   the storage needed for the matrices becomes larger (exactly 13.75K, if we
+   discount the superfluous mask, na, pi, and ci members of the
+   oc_coeffcient_info structure and use a 256-byte mask-padding lookup table
+   instead).*/
+
+
+
+/*The matrix representation of the Theora's actual iDCT.
+  This is computed using the 16-bit approximations of the sines and cosines
+   that Theora uses, but using floating point values and assuming that no
+   truncation occurs after division (i.e., pretending that the transform is
+   linear like the real DCT).*/
+static const double OC_IDCT_MATRIX[8][8]={
+  {
+    +0.7071075439453125,+0.9807891845703125,
+    +0.9238739013671875,+0.8314666748046875,
+    +0.7071075439453125,+0.555572509765625,
+    +0.3826904296875,   +0.1950836181640625
+  },
+  {
+    +0.7071075439453125,+0.8314685295335948,
+    +0.3826904296875,   -0.1950868454296142,
+    -0.7071075439453125,-0.9807858711574227,
+    -0.9238739013671875,-0.5555783333256841
+  },
+  {
+    +0.7071075439453125,+0.5555783333256841,
+    -0.3826904296875,   -0.9807858711574227,
+    -0.7071075439453125,+0.1950868454296142,
+     0.9238739013671875,+0.8314685295335948
+  },
+  {
+    +0.7071075439453125,+0.1950836181640625,
+    -0.9238739013671875,-0.555572509765625,
+    +0.7071075439453125,+0.8314666748046875,
+    -0.3826904296875,   -0.9807891845703125
+  },
+  {
+    +0.7071075439453125,-0.1950836181640625,
+    -0.9238739013671875,+0.555572509765625,
+    +0.7071075439453125,-0.8314666748046875,
+    -0.3826904296875,   +0.9807891845703125
+  },
+  {
+    +0.7071075439453125,-0.5555783333256841,
+    -0.3826904296875,    0.9807858711574227,
+    -0.7071075439453125,-0.1950868454296142,
+    +0.9238739013671875,-0.8314685295335948
+  },
+  {
+    +0.7071075439453125,-0.8314685295335948,
+    +0.3826904296875,    +0.1950868454296142,
+    -0.7071075439453125,+0.9807858711574227,
+    -0.9238739013671875,+0.5555783333256841
+  },
+  {
+    +0.7071075439453125,-0.9807891845703125,
+    +0.9238739013671875,-0.8314666748046875,
+    +0.7071075439453125,-0.555572509765625,
+    +0.3826904296875,   -0.1950836181640625
+  }
+};
+
+/*A table of the non-zero coefficients to keep for each possible shape.
+  Our basis selection is chosen to optimize the coding gain.
+  This gives us marginally better performance than other optimization criteria
+   for the border extension case (and significantly better performance in the
+   general case).*/
+static const unsigned char OC_PAD_MASK_GAIN[256]={
+  0x00,0x01,0x01,0x11,0x01,0x11,0x05,0x49,
+  0x01,0x05,0x11,0x15,0x11,0x15,0xA1,0x55,
+  0x01,0x05,0x11,0x15,0x11,0x29,0x51,0x55,
+  0x03,0x85,0x19,0xA5,0x61,0x35,0xB1,0xAD,
+  0x01,0x11,0x05,0x23,0x03,0x85,0x0D,0x2B,
+  0x11,0x15,0x61,0x55,0x13,0x1B,0xA3,0x5B,
+  0x11,0x83,0x83,0x55,0x13,0x93,0xC3,0xCB,
+  0x61,0xC3,0x33,0x3B,0x99,0xCB,0xB3,0xDB,
+  0x01,0x11,0x03,0x0B,0x05,0x0B,0x07,0x4B,
+  0x11,0x07,0x07,0x1B,0x83,0x8B,0x87,0x57,
+  0x11,0x23,0x07,0x33,0x61,0x2B,0x0F,0x57,
+  0x19,0x87,0x1B,0x2F,0x33,0x8F,0x8F,0xB7,
+  0x05,0x83,0x07,0x63,0x0D,0x87,0x87,0x6B,
+  0x51,0x47,0x0F,0x67,0xC3,0xCB,0xE3,0xD7,
+  0xA1,0xA3,0x87,0x73,0xA3,0x6B,0xE3,0xCF,
+  0xB1,0x8F,0x8F,0xE7,0xB3,0xCF,0xE7,0xF7,
+  0x01,0x03,0x11,0x43,0x11,0x31,0x83,0x93,
+  0x05,0x07,0x23,0x27,0x83,0x87,0xA3,0x57,
+  0x05,0x07,0x07,0xC3,0x15,0x0F,0x47,0x4F,
+  0x85,0x87,0x87,0xA7,0xC3,0x8F,0x8F,0xAF,
+  0x11,0x31,0x0B,0x1B,0x85,0x1B,0x87,0x2F,
+  0x29,0x0F,0x2B,0x1F,0x93,0x1F,0x6B,0x5F,
+  0x15,0x87,0x8B,0x57,0x1B,0x1F,0xCB,0x5F,
+  0x35,0x8F,0x8F,0x3F,0xCB,0x9F,0xCF,0xDF,
+  0x11,0x43,0x0B,0x33,0x23,0x1B,0x63,0x9B,
+  0x15,0xC3,0x33,0x37,0x55,0x57,0x73,0x77,
+  0x15,0x27,0x1B,0x37,0x55,0x1F,0x67,0x3F,
+  0xA5,0xA7,0x2F,0xB7,0x3B,0x3F,0xE7,0xBF,
+  0x49,0x93,0x4B,0x9B,0x2B,0x2F,0x6B,0x7B,
+  0x55,0x4F,0x57,0x3F,0xCB,0x5F,0xCF,0x7F,
+  0x55,0x57,0x57,0x77,0x5B,0x5F,0xD7,0x7F,
+  0xAD,0xAF,0xB7,0xBF,0xDB,0xDF,0xF7,0xFF
+};
+
+
+
+/*Computes the Cholesky factorization L L^T of the matrix G^T G, where G is the
+   currently selected bass functions restricted to the region of spatial
+   support.
+  The reciprocal of the diagonal element is stored instead of the diagonal
+   itself, so that the division only needs to be done once.
+  _l:   The L matrix to compute.
+  _ac:  The set of basis functions used for each row.
+  _ap:  The set of pixels that are not padding.
+  _na:  The number of active pixels/coefficients.*/
+static void oc_cholesky8(double _l[8][8],int _ac[8],int _ap[8],int _na){
+  int aci;
+  int acj;
+  int ack;
+  int api;
+  int ci;
+  int cj;
+  int pi;
+  for(aci=0;aci<_na;aci++){
+    /*Step 1: Add the next row/column of G^T G.*/
+    ci=_ac[aci];
+    for(acj=0;acj<=aci;acj++){
+      cj=_ac[acj];
+      _l[aci][acj]=0;
+      for(api=0;api<_na;api++){
+        pi=_ap[api];
+        _l[aci][acj]+=OC_IDCT_MATRIX[pi][cj]*OC_IDCT_MATRIX[pi][ci];
+      }
+    }
+    /*Step 2: Convert the newly added row to the corresponding row of the
+       Cholesky factorization.*/
+    for(acj=0;acj<aci;acj++){
+      for(ack=0;ack<acj;ack++)_l[aci][acj]-=_l[aci][ack]*_l[acj][ack];
+      _l[aci][acj]*=_l[acj][acj];
+    }
+    for(ack=0;ack<aci;ack++)_l[aci][aci]-=_l[aci][ack]*_l[aci][ack];
+    _l[aci][aci]=1/sqrt(_l[aci][aci]);
+  }
+}
+
+/*Computes the padding extrapolation matrix for a single 1-D 8-point DCT.*/
+int oc_calc_ext8(double _e[8][8],int _ap[8],int _ac[8],int _mask,int _pad){
+  double b[8];
+  double l[8][8];
+  double w;
+  int   api;
+  int   zpi;
+  int   aci;
+  int   acj;
+  int   ci;
+  int   pi;
+  int   na;
+  int   nz;
+  na=nz=0;
+  for(pi=0;pi<8;pi++){
+    if(_mask&1<<pi)_ap[na++]=pi;
+    else _ap[8-++nz]=pi;
+  }
+  na=nz=0;
+  for(ci=0;ci<8;ci++){
+    if(_pad&1<<ci)_ac[na++]=ci;
+    else _ac[8-++nz]=ci;
+  }
+  oc_cholesky8(l,_ac,_ap,na);
+  for(api=0;api<na;api++){
+    pi=_ap[api];
+    for(aci=0;aci<na;aci++){
+      b[aci]=OC_IDCT_MATRIX[pi][_ac[aci]];
+      for(acj=0;acj<aci;acj++)b[aci]-=l[aci][acj]*b[acj];
+      b[aci]*=l[aci][aci];
+    }
+    for(aci=na;aci-->0;){
+      for(acj=aci+1;acj<na;acj++)b[aci]-=l[acj][aci]*b[acj];
+      b[aci]*=l[aci][aci];
+    }
+    for(zpi=na;zpi<8;zpi++){
+      pi=_ap[zpi];
+      w=0;
+      for(aci=0;aci<na;aci++)w+=OC_IDCT_MATRIX[pi][_ac[aci]]*b[aci];
+      _e[zpi][api]=w;
+    }
+  }
+  return na;
+}
+
+/*The precision at which the matrix coefficients are stored.*/
+#define OC_EXT_SHIFT (19)
+
+/*The number of shapes we need.*/
+#define OC_NSHAPES   (35)
+
+/*These are all the possible shapes that could be encountered in border
+   extension.
+  The first 14 correspond to the left and right borders (or top and bottom when
+   considered vertically), and the next 21 arise from the combination of the
+   two, to handle the case of a video less than 8 pixels wide (or tall).
+  Order matters here, because we will search this array linearly for the entry
+   to use during the actual transform.*/
+static int masks[OC_NSHAPES]={
+  0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x01,0x80,
+  0x7E,
+  0x7C,0x3E,
+  0x78,0x3C,0x1E,
+  0x70,0x38,0x1C,0x0E,
+  0x60,0x30,0x18,0x0C,0x06,
+  0x40,0x20,0x10,0x08,0x04,0x02
+};
+
+int main(void){
+  int   coeffs[8192];
+  int   ncoeffs;
+  int   ci;
+  int   crstart[OC_NSHAPES*8];
+  int   crend[OC_NSHAPES*8];
+  int   ncr;
+  int   cri;
+  int   offsets[1024];
+  int   noffsets;
+  int   oi;
+  int   orstart[OC_NSHAPES*8];
+  int   orend[OC_NSHAPES*8];
+  int   nor;
+  int   ori;
+  int   ap[OC_NSHAPES][8];
+  int   ac[OC_NSHAPES][8];
+  int   na[OC_NSHAPES];
+  int   zpi;
+  int   mi;
+  ncoeffs=ncr=0;
+  /*We store all the coefficients from the extension matrices in one large
+     table.
+    This lets us exploit the repetitiveness and overlap of many of the rows to
+     reduce the size of the tables by about 49%.
+    Our overlap search strategy is pretty simple, so we could probably do even
+     better, but further improvement would be small.*/
+  for(mi=0;mi<OC_NSHAPES;mi++){
+    double e[8][8];
+    int    api;
+    na[mi]=oc_calc_ext8(e,ap[mi],ac[mi],masks[mi],OC_PAD_MASK_GAIN[masks[mi]]);
+    for(zpi=na[mi];zpi<8;zpi++){
+      int cr[8];
+      int best_ci;
+      int best_cre;
+      int cj;
+      for(api=0;api<na[mi];api++){
+        cr[api]=(int)(e[zpi][api]*(1<<OC_EXT_SHIFT)+(e[zpi][api]<0?-0.5F:0.5F));
+      }
+      best_ci=ncoeffs;
+      best_cre=0;
+      for(ci=0;ci<ncoeffs;ci++){
+        for(cj=ci;cj<ncoeffs&&cj-ci<na[mi]&&coeffs[cj]==cr[cj-ci];cj++);
+        if(cj-ci>best_cre){
+          if(cj-ci<na[mi]){
+            /*If we need to extend the range, check to make sure we aren't
+               interrupting any other range.*/
+            for(cri=0;cri<ncr&&(crstart[cri]>=cj||crend[cri]<=cj);cri++);
+            if(cri>=ncr){
+              /*No conflicting ranges were found, so we can insert the
+                 necessary coefficients.*/
+              best_ci=ci;
+              best_cre=cj-ci;
+            }
+          }
+          else{
+            /*Otherwise, we have a complete match, so we can stop searching.*/
+            best_ci=ci;
+            best_cre=cj-ci;
+            break;
+          }
+        }
+      }
+      if(best_cre<na[mi]){
+        /*We don't have a complete match, so we need to insert the remaining
+           coefficients.*/
+        memmove(coeffs+best_ci+na[mi],coeffs+best_ci+best_cre,
+         sizeof(coeffs[0])*(ncoeffs-best_ci-best_cre));
+        /*And now we need to update all the ranges that start after the
+           insertion point.*/
+        for(cri=0;cri<ncr;cri++){
+          if(crstart[cri]>=best_ci+best_cre){
+            crstart[cri]+=na[mi]-best_cre;
+            crend[cri]+=na[mi]-best_cre;
+          }
+        }
+      }
+      /*Actually add the coefficients.*/
+      for(cj=best_cre;cj<na[mi];cj++)coeffs[best_ci+cj]=cr[cj];
+      ncoeffs+=na[mi]-best_cre;
+      /*Store the endpoints of the range.*/
+      crstart[ncr]=best_ci;
+      crend[ncr]=best_ci+na[mi];
+      ncr++;
+    }
+
+  }
+  printf("/*The precision at which the matrix coefficients are stored.*/\n");
+  printf("#define OC_EXT_SHIFT (%i)\n\n",OC_EXT_SHIFT);
+  printf("/*The number of shapes we need.*/\n");
+  printf("#define OC_NSHAPES   (%i)\n\n",OC_NSHAPES);
+  printf("static const ogg_int32_t OC_EXT_COEFFS[%i]={",ncoeffs);
+  for(ci=0;ci<ncoeffs;ci++){
+    if((ci&7)==0)printf("\n  ");
+    printf("%c0x%05X",coeffs[ci]<0?'-':' ',abs(coeffs[ci]));
+    if(ci+1<ncoeffs)printf(",");
+  }
+  printf("\n};\n\n");
+  /*Now we repeat the same overlap strategy on the row pointers.
+    This only gets us around 45% space reduction, but that's still worth it.*/
+  noffsets=nor=0;
+  for(cri=mi=0;mi<OC_NSHAPES;mi++){
+    int best_oi;
+    int best_ore;
+    int oj;
+    int nz;
+    best_oi=noffsets;
+    best_ore=0;
+    nz=8-na[mi];
+    for(oi=0;oi<noffsets;oi++){
+      for(oj=oi;oj<noffsets&&oj-oi<nz&&offsets[oj]==crstart[cri+oj-oi];
+       oj++);
+      if(oj-oi>best_ore){
+        if(oj-oi<nz){
+          /*If we need to extend the range, check to make sure we aren't
+             interrupting any other range.*/
+          for(ori=0;ori<nor&&(orstart[ori]>=oj||orend[ori]<=oj);ori++);
+          if(ori>=nor){
+            /*No conflicting ranges were found, so we can insert the
+               necessary coefficients.*/
+            best_oi=oi;
+            best_ore=oj-oi;
+          }
+        }
+        else{
+          /*Otherwise, we have a complete match, so we can stop searching.*/
+          best_oi=oi;
+          best_ore=oj-oi;
+          break;
+        }
+      }
+    }
+    if(best_ore<nz){
+      /*We don't have a complete match, so we need to insert the remaining
+         offsets.*/
+      memmove(offsets+best_oi+nz,offsets+best_oi+best_ore,
+       sizeof(offsets[0])*(noffsets-best_oi-best_ore));
+      /*And now we need to update all the ranges that start after the
+         insertion point.*/
+      for(ori=0;ori<nor;ori++){
+        if(orstart[ori]>=best_oi+best_ore){
+          orstart[ori]+=nz-best_ore;
+          orend[ori]+=nz-best_ore;
+        }
+      }
+    }
+    /*Actually add the offsets.*/
+    for(oj=best_ore;oj<nz;oj++)offsets[best_oi+oj]=crstart[cri+oj];
+    noffsets+=nz-best_ore;
+    /*Store the endpoints of the range.*/
+    orstart[nor]=best_oi;
+    orend[nor]=best_oi+nz;
+    nor++;
+    cri+=nz;
+  }
+  printf("static const ogg_int32_t *const OC_EXT_ROWS[%i]={",noffsets);
+  for(oi=0;oi<noffsets;oi++){
+    if((oi&3)==0)printf("\n  ");
+    printf("OC_EXT_COEFFS+%4i",offsets[oi]);
+    if(oi+1<noffsets)printf(",");
+  }
+  printf("\n};\n\n");
+  printf("static const oc_extension_info OC_EXTENSION_INFO[OC_NSHAPES]={\n");
+  for(mi=0;mi<OC_NSHAPES;mi++){
+    int i;
+    printf("  {");
+    printf("0x%02X,%i,OC_EXT_ROWS+%3i,",masks[mi],na[mi],orstart[mi]);
+    printf("{");
+    for(i=0;i<8;i++){
+      printf("%i",ap[mi][i]);
+      if(i<7)printf(",");
+    }
+    printf("},{");
+    for(i=0;i<8;i++){
+      printf("%i",ac[mi][i]);
+      if(i<7)printf(",");
+    }
+    printf("}}");
+    if(mi+1<OC_NSHAPES)printf(",");
+    printf("\n");
+  }
+  printf("};\n");
+  return 0;
+}

Added: trunk/theora-exp/tools/filec.c
===================================================================
--- trunk/theora-exp/tools/filec.c	                        (rev 0)
+++ trunk/theora-exp/tools/filec.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,74 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int _argc,char **_argv){
+  FILE          *f1;
+  FILE          *f2;
+  unsigned char *buf1;
+  unsigned char *buf2;
+  int            w;
+  int            h;
+  int            frame;
+  if(_argc!=5){
+    fprintf(stderr,"Usage %s <file1> <file2> <width> <height>\n",_argv[0]);
+    return 2;
+  }
+  w=atoi(_argv[3]);
+  h=atoi(_argv[4]);
+  f1=fopen(_argv[1],"rb");
+  f2=fopen(_argv[2],"rb");
+  buf1=(unsigned char *)malloc(sizeof(char)*(w*h*3/2));
+  buf2=(unsigned char *)malloc(sizeof(char)*(w*h*3/2));
+  for(frame=0;;frame++){
+    unsigned char *p1;
+    unsigned char *p2;
+    int pli;
+    int bx;
+    int by;
+    int bi;
+    if(fread(buf1,w*h*3/2,1,f1)<1)break;
+    if(fread(buf2,w*h*3/2,1,f2)<1)break;
+    p1=buf1;
+    p2=buf2;
+    for(bi=pli=0;pli<3;pli++){
+      for(by=0;by<(h>>(pli>0));by+=8){
+        for(bx=0;bx<(w>>(pli>0));bx+=8){
+          int x;
+          int y;
+          for(y=0;y<8;y++){
+            for(x=0;x<8;x++){
+              if(p1[((h>>(pli>0))-1-by-y)*(w>>(pli>0))+bx+x]!=
+               p2[((h>>(pli>0))-1-by-y)*(w>>(pli>0))+bx+x]){
+                break;
+              }
+            }
+            if(x<8)break;
+          }
+          if(y<8){
+            printf("Files differ at frame %i, block %i (%i,%i,%i)\n",
+             frame,bi,pli,bx,by);
+            for(y=0;y<8;y++){
+              for(x=0;x<8;x++){
+                printf("%02X%c",p1[((h>>(pli>0))-1-by-y)*(w>>(pli>0))+bx+x],
+                 x<7?' ':'\n');
+              }
+            }
+            printf("\n");
+            for(y=0;y<8;y++){
+              for(x=0;x<8;x++){
+                printf("%02X%c",p2[((h>>(pli>0))-1-by-y)*(w>>(pli>0))+bx+x],
+                 x<7?' ':'\n');
+              }
+            }
+            printf("\n");
+          }
+          bi++;
+        }
+      }
+      p1+=(w>>(pli>0))*(h>>(pli>0));
+      p2+=(w>>(pli>0))*(h>>(pli>0));
+    }
+  }
+  printf("Files are identical up to frame %i.\n",frame);
+  return 0;
+}

Added: trunk/theora-exp/tools/huffgen.c
===================================================================
--- trunk/theora-exp/tools/huffgen.c	                        (rev 0)
+++ trunk/theora-exp/tools/huffgen.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,715 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+
+
+typedef struct OCHuffCode OCHuffCode;
+typedef struct OCHuffEntry OCHuffEntry;
+
+
+
+struct OCHuffEntry{
+  OCHuffEntry *next;
+  OCHuffEntry *children[2];
+  int          value;
+  int          freq;
+};
+
+
+
+struct OCHuffCode{
+  int value;
+  int len;
+};
+
+
+
+/*The frequency tables used to build the default VP3.1 Huffman codes.*/
+const int VP31_FREQ_TABLES[80][32]={
+  /*DC Intra bias.*/
+  {
+     198,  62,  22,  31,  14,   6,   6, 205,   3,
+     843, 843, 415, 516,
+     660, 509, 412, 347, 560, 779, 941, 930, 661, 377,
+     170, 155,  39,   2,   9,  15,  11,
+     128,  86
+  },
+  {
+     299,  92,  34,  39,  15,   6,   6, 132,   1,
+     851, 851, 484, 485,
+     666, 514, 416, 351, 567, 788, 953, 943, 670, 383,
+     117, 119,  26,   4,  17,   7,   1,
+      93,  56
+  },
+  {
+     367, 115,  42,  47,  16,   6,   6, 105,   1,
+     896, 896, 492, 493,
+     667, 510, 408, 342, 547, 760, 932, 927, 656, 379,
+     114, 103,  10,   3,   6,   2,   1,
+      88,  49
+  },
+  {
+     462, 158,  63,  76,  28,   9,   8, 145,   1,
+    1140,1140, 573, 574,
+     754, 562, 435, 357, 555, 742, 793, 588, 274,  81,
+     154, 117,  13,   6,  12,   2,   1,
+     104,  62
+  },
+  {
+     558, 196,  81,  99,  36,  11,   9, 135,   1,
+    1300,1301, 606, 607,
+     779, 560, 429, 349, 536, 680, 644, 405, 153,  30,
+     171, 120,  12,   5,  14,   3,   1,
+     104,  53
+  },
+  {
+     635, 233, 100, 122,  46,  14,  12, 113,   1,
+    1414,1415, 631, 631,
+     785, 555, 432, 335, 513, 611, 521, 284,  89,  13,
+     170, 113,  10,   5,  14,   3,   1,
+     102,  62
+  },
+  {
+     720, 276, 119, 154,  62,  20,  16, 101,   1,
+    1583,1583, 661, 661,
+     794, 556, 407, 318, 447, 472, 343, 153,  35,   1,
+     172, 115,  11,   7,  14,   3,   1,
+     112,  70
+  },
+  {
+     853, 326, 144, 184,  80,  27,  19,  52,   1,
+    1739,1740, 684, 685,
+     800, 540, 381, 277, 364, 352, 218,  78,  13,   1,
+     139, 109,   9,   6,  20,   2,   1,
+      94,  50
+  },
+  /*DC Inter Bias.*/
+  {
+     490, 154,  57,  53,  10,   2,   1, 238, 160,
+    1391,1390, 579, 578,
+     491, 273, 172, 118, 152, 156, 127,  79,  41,  39,
+     712, 547, 316, 125, 183, 306, 237,
+     451, 358
+  },
+  {
+     566, 184,  70,  65,  11,   2,   1, 235,  51,
+    1414,1414, 599, 598,
+     510, 285, 180, 124, 157, 161, 131,  82,  42,  40,
+     738, 551, 322, 138, 195, 188,  93,
+     473, 365
+  },
+  {  711, 261, 111, 126,  27,   4,   1, 137,  52,
+    1506,1505, 645, 645,
+     567, 316, 199, 136, 172, 175, 142,  88,  45,  48,
+     548, 449, 255, 145, 184, 174, 121,
+     260, 227
+  },
+  {
+     823, 319, 144, 175,  43,   7,   1,  53,  42,
+    1648,1648, 653, 652,
+     583, 329, 205, 139, 175, 176, 139,  84,  44,  34,
+     467, 389, 211, 137, 181, 186, 107,
+     106,  85
+  },
+  {
+     948, 411, 201, 276,  85,  16,   2,  39,  33,
+    1778,1777, 584, 583,
+     489, 265, 162, 111, 140, 140, 108,  64,  38,  23,
+     428, 356, 201, 139, 186, 165,  94,
+      78,  63
+  },
+  {
+    1002, 470, 248, 386, 153,  39,   6,  23,  23,
+    1866,1866, 573, 573,
+     467, 249, 155, 103, 130, 128,  94,  60,  38,  14,
+     323, 263, 159, 111, 156, 153,  74,
+      46,  34
+  },
+  {
+    1020, 518, 291, 504, 242,  78,  18,  14,  14,
+    1980,1979, 527, 526,
+     408, 219, 132,  87, 110, 104,  79,  55,  31,   7,
+     265, 213, 129,  91, 131, 111,  50,
+      31,  20
+  },
+  {
+    1018, 544, 320, 591, 338, 139,  47,   5,   2,
+    2123,2123, 548, 547,
+     414, 212, 126,  83, 101,  96,  79,  60,  23,   1,
+     120,  97,  55,  39,  60,  38,  15,
+      11,   8
+  },
+  /*AC INTRA Tables.*/
+  /*AC Intra bias group 0 tables.*/
+  {
+     242,  62,  22,  20,   4,   1,   1, 438,   1,
+     593, 593, 489, 490,
+     657, 580, 471, 374, 599, 783, 869, 770, 491, 279,
+     358, 144,  82,  54,  49,  70,   5,
+     289, 107
+  },
+  { 
+     317,  95,  38,  41,   8,   1,   1, 479,   1,
+     653, 654, 500, 501,
+     682, 611, 473, 376, 582, 762, 806, 656, 358, 155,
+     419, 162,  86,  58,  36,  34,   1,
+     315, 126
+  },
+  {
+     382, 121,  49,  59,  15,   3,   1, 496,   1,
+     674, 674, 553, 554,
+     755, 636, 487, 391, 576, 718, 701, 488, 221,  72,
+     448, 161, 107,  56,  37,  29,   1,
+     362, 156
+  },
+  {
+     415, 138,  57,  73,  21,   5,   1, 528,   1,
+     742, 741, 562, 563,
+     753, 669, 492, 388, 563, 664, 589, 340, 129,  26,
+     496, 184, 139,  71,  48,  33,   2,
+     387, 166
+  },
+  {
+     496, 170,  73,  94,  31,   8,   2, 513,   1,
+     855, 855, 604, 604,
+     769, 662, 477, 356, 486, 526, 381, 183,  51,   5,
+     590, 214, 160,  85,  60,  39,   3,
+     427, 203
+  },
+  {
+     589, 207,  89, 116,  40,  13,   3, 491,   1,
+     919, 919, 631, 631,
+     769, 633, 432, 308, 408, 378, 247,  94,  17,   1,
+     659, 247, 201, 105,  73,  51,   3,
+     466, 242
+  },
+  {
+     727, 266, 115, 151,  49,  17,   6, 439,   1,
+     977, 977, 642, 642,
+     718, 572, 379, 243, 285, 251, 133,  40,   1,   1,
+     756, 287, 253, 126,  94,  66,   4,
+     492, 280
+  },
+  {
+     940, 392, 180, 247,  82,  30,  14, 343,   1,
+    1064,1064, 615, 616,
+     596, 414, 235, 146, 149, 108,  41,   1,   1,   1,
+     882, 314, 346, 172, 125,  83,   6,
+     489, 291
+  },
+  /*AC Inter bias group 0 tables.*/
+  {
+     440, 102,  33,  23,   2,   1,   1, 465,  85,
+     852, 852, 744, 743,
+     701, 496, 297, 193, 225, 200, 129,  58,  18,   2,
+     798, 450, 269, 202, 145, 308, 154,
+     646, 389
+  },
+  {
+     592, 151,  53,  43,   6,   1,   1, 409,  34,
+     875, 875, 748, 747,
+     723, 510, 305, 196, 229, 201, 130,  59,  18,   2,
+     800, 436, 253, 185, 115, 194,  88,
+     642, 368
+  },
+  {
+     759, 222,  86,  85,  17,   2,   1, 376,  46,
+     888, 888, 689, 688,
+     578, 408, 228, 143, 165, 141,  84,  35,   7,   1,
+     878, 488, 321, 244, 147, 266, 124,
+     612, 367
+  },
+  {
+     912, 298, 122, 133,  34,   7,   1, 261,  44,
+    1092,1091, 496, 496,
+     409, 269, 150,  95, 106,  87,  49,  16,   1,   1,
+    1102, 602, 428, 335, 193, 323, 157,
+     423, 253
+  },
+  {
+    1072, 400, 180, 210,  60,  16,   3, 210,  40,
+    1063,1063, 451, 451,
+     345, 221, 121,  73,  79,  64,  31,   6,   1,   1,
+    1105, 608, 462, 358, 202, 330, 155,
+     377, 228
+  },
+  {
+    1164, 503, 254, 330, 109,  34,   9, 167,  35,
+    1038,1037, 390, 390,
+     278, 170,  89,  54,  56,  40,  13,   1,   1,   1,
+    1110, 607, 492, 401, 218, 343, 141,
+     323, 192
+  },
+  {
+    1173, 583, 321, 486, 196,  68,  23, 124,  23,
+    1037,1037, 347, 346,
+     232, 139,  69,  40,  37,  20,   2,   1,   1,   1,
+    1128, 584, 506, 410, 199, 301, 113,
+     283, 159
+  },
+  {
+    1023, 591, 366, 699, 441, 228, 113,  79,   5,
+    1056,1056, 291, 291,
+     173,  96,  38,  19,   8,   1,   1,   1,   1,   1,
+    1187, 527, 498, 409, 147, 210,  56,
+     263, 117
+  },
+  /*AC Intra bias group 1 tables.*/
+  {
+     311,  74,  27,  27,   5,   1,   1, 470,  24,
+     665, 667, 637, 638,
+     806, 687, 524, 402, 585, 679, 609, 364, 127,  20,
+     448, 210, 131,  76,  52, 111,  19,
+     393, 195
+  },
+  {
+     416, 104,  39,  38,   8,   1,   1, 545,  33,
+     730, 731, 692, 692,
+     866, 705, 501, 365, 495, 512, 387, 168,  39,   2,
+     517, 240, 154,  86,  64, 127,  19,
+     461, 247
+  },
+  {
+     474, 117,  43,  42,   9,   1,   1, 560,  40,
+     783, 783, 759, 760,
+     883, 698, 466, 318, 404, 377, 215,  66,   7,   1,
+     559, 259, 176, 110,  87, 170,  22,
+     520, 278
+  },
+  {
+     582, 149,  53,  53,  12,   2,   1, 473,  39,
+     992, 993, 712, 713,
+     792, 593, 373, 257, 299, 237, 114,  25,   1,   1,
+     710, 329, 221, 143, 116, 226,  26,
+     490, 259
+  },
+  {
+     744, 210,  78,  77,  16,   2,   1, 417,  37,
+    1034,1035, 728, 728,
+     718, 509, 296, 175, 184, 122,  42,   3,   1,   1,
+     791, 363, 255, 168, 145, 311,  35,
+     492, 272
+  },
+  {
+     913, 291, 121, 128,  28,   4,   1,  334,  40,
+    1083,1084, 711, 712,
+     624, 378, 191, 107,  95,  50,   7,   1,   1,   1,
+     876, 414, 288, 180, 164, 382,  39,
+     469, 275
+  },
+  {
+    1065, 405, 184, 216,  53,   8,   1, 236,  36,
+    1134,1134, 685, 686,
+     465, 253, 113,  48,  41,   9,   1,   1,   1,   1,
+     965, 451, 309, 179, 166, 429,  53,
+     414, 249
+  },
+  {
+    1148, 548, 301, 438, 160,  42,   6,  84,  17,
+    1222,1223, 574, 575,
+     272, 111,  23,   6,   2,   1,   1,   1,   1,   1,
+    1060, 502, 328, 159, 144, 501,  54,
+     302, 183
+  },
+  /*AC Inter bias group 1 tables.*/
+  {
+     403,  80,  24,  17,   1,   1,   1, 480,  90,
+     899, 899, 820, 819,
+     667, 413, 228, 133, 139,  98,  42,  10,   1,   1,
+     865, 470, 316, 222, 171, 419, 213,
+     645, 400
+  },
+  {
+     698, 169,  59,  49,   6,   1,   1, 414, 101,
+     894, 893, 761, 761,
+     561, 338, 171,  96,  97,  64,  26,   6,   1,   1,
+     896, 494, 343, 239, 192, 493, 215,
+     583, 366
+  },
+  {
+     914, 255,  94,  80,  10,   1,   1, 345, 128,
+     935, 935, 670, 671,
+     415, 222, 105,  55,  51,  30,  10,   1,   1,   1,
+     954, 530, 377, 274, 232, 641, 295,
+     456, 298
+  },
+  {
+    1103, 359, 146, 135,  20,   1,   1, 235, 119,
+    1042,1042, 508, 507,
+     293, 146,  65,  33,  30,  16,   4,   1,   1,   1,
+    1031, 561, 407, 296, 265, 813, 317,
+     301, 192
+  },
+  {
+    1255, 504, 238, 265,  51,   5,   1, 185, 113,
+    1013,1013, 437, 438,
+     212,  92,  41,  18,  15,   6,   1,   1,   1,   1,
+     976, 530, 386, 276, 260, 927, 357,
+     224, 148
+  },
+  {
+    1292, 610, 332, 460, 127,  16,   1, 136,  99,
+    1014,1015, 384, 384,
+     153,  65,  25,  11,   6,   1,   1,   1,   1,   1,
+     942, 487, 343, 241, 238, 970, 358,
+     174, 103
+  },
+  {
+    1219, 655, 407, 700, 280,  55,   2, 100,  60,
+    1029,1029, 337, 336,
+     119,  43,  11,   3,   2,   1,   1,   1,   1,   1,
+     894, 448, 305, 199, 213,1005, 320,
+     136,  77
+  },
+  {
+    1099, 675, 435, 971, 581, 168,  12,  37,  16,
+    1181,1081, 319, 318,
+      66,  11,   6,   1,   1,   1,   1,   1,   1,   1,
+     914, 370, 235, 138, 145, 949, 128,
+      94,  41
+  },
+  /*AC Intra bias group 2 tables.*/
+  {
+     486, 112,  39,  34,   6,   1,   1, 541,  67,
+     819, 818, 762, 763,
+     813, 643, 403, 280, 332, 295, 164,  53,   6,   1,
+     632, 294, 180, 131, 105, 208, 109,
+     594, 295
+  },
+  {
+     723, 191,  69,  65,  12,   1,   1, 445,  79,
+     865, 865, 816, 816,
+     750, 515, 290, 172, 184, 122,  46,   5,   1,   1,
+     740, 340, 213, 165, 129, 270, 168,
+     603, 326
+  },
+  {
+     884, 264, 102, 103,  21,   3,   1, 382,  68,
+     897, 897, 836, 836,
+     684, 427, 227, 119, 119,  70,  16,   1,   1,   1,
+     771, 367, 234, 184, 143, 272, 178,
+     555, 326
+  },
+  {
+    1028, 347, 153, 161,  36,   8,   1, 251,  44,
+    1083,1084, 735, 735,
+     541, 289, 144,  77,  57,  23,   3,   1,   1,   1,
+     926, 422, 270, 215, 176, 301, 183,
+     443, 248
+  },
+  {
+    1155, 465, 224, 264,  71,  14,   3, 174,  27,
+    1110,1111, 730, 731,
+     429, 206,  79,  30,  19,   4,   1,   1,   1,   1,
+     929, 443, 279, 225, 194, 298, 196,
+     354, 223
+  },
+  {
+    1191, 576, 296, 415, 144,  36,   8, 114,  16,
+    1162,1162, 749, 749,
+     338, 108,  29,   8,   5,   1,   1,   1,   1,   1,
+     947, 458, 273, 207, 194, 248, 145,
+     258, 152
+  },
+  {
+    1169, 619, 366, 603, 247,  92,  23,  46,   1,
+    1236,1236, 774, 775,
+     191,  35,  14,   1,   1,   1,   1,   1,   1,   1,
+     913, 449, 260, 214, 194, 180,  82,
+     174,  98
+  },
+  {
+    1006, 537, 381, 897, 504, 266, 101,  39,   1,
+    1307,1307, 668, 667,
+     116,   3,   1,   1,   1,   1,   1,   1,   1,   1,
+    1175, 261, 295,  70, 164, 107,  31,
+      10,  76
+  },
+  /*AC Inter bias group 2 tables.*/
+  {
+     652, 156,  53,  43,   5,   1,   1, 368, 128,
+     983, 984, 825, 825,
+     583, 331, 163,  88,  84,  48,  15,   1,   1,   1,
+     870, 480, 316, 228, 179, 421, 244,
+     562, 349
+  },
+  {
+     988, 280, 104,  87,  12,   1,   1, 282, 194,
+     980, 981, 738, 739,
+     395, 189,  80,  37,  31,  12,   2,   1,   1,   1,
+     862, 489, 333, 262, 214, 600, 446,
+     390, 260
+  },
+  {
+    1176, 399, 165, 154,  24,   2,   1, 218, 224,
+    1017,1018, 651, 651,
+     280, 111,  42,  16,   9,   3,   1,   1,   1,   1,
+     787, 469, 324, 269, 229, 686, 603,
+     267, 194
+  },
+  {
+    1319, 530, 255, 268,  47,   4,   1, 113, 183,
+    1149,1150, 461, 461,
+     173,  58,  17,   5,   3,   1,   1,   1,   1,   1,
+     768, 450, 305, 261, 221, 716, 835,
+     136,  97
+  },
+  {
+    1362, 669, 355, 465, 104,   9,   1,  76, 153,
+    1253,1253, 398, 397,
+     102,  21,   5,   1,   1,   1,   1,   1,   1,   1,
+     596, 371, 238, 228, 196, 660, 954,
+      68,  53
+  },
+  {
+    1354, 741, 446, 702, 174,  15,   1,  38,  87,
+    1498,1498, 294, 294,
+      43,   7,   1,   1,   1,   1,   1,   1,   1,   1,
+     381, 283, 165, 181, 155, 544,1039,
+      25,  21
+  },
+  {
+    1262, 885, 546, 947, 263,  18,   1,  18,  27,
+    1908,1908, 163, 162,
+      14,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+     195, 152,  83, 125, 109, 361, 827,
+       7,   5
+  },
+  {
+    2539, 951, 369, 554, 212,  18,   1,   1,   1,
+    2290,2289,  64,  64,
+       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+      18,  18,   9,  55,  36, 184, 323,
+       1,   1
+  },
+  /*AC Intra bias group 3 tables.*/
+  {
+     921, 264, 101, 100,  19,   2,   1, 331,  98,
+    1015,1016, 799, 799,
+     512, 269, 119,  60,  50,  17,   1,   1,   1,   1,
+     841, 442, 307, 222, 182, 493, 256,
+     438, 310
+  },
+  {
+    1147, 412, 184, 206,  50,   6,   1, 242, 141,
+     977, 976, 808, 807,
+     377, 135,  40,  10,   7,   1,   1,   1,   1,   1,
+     788, 402, 308, 223, 205, 584, 406,
+     316, 227
+  },
+  {
+    1243, 504, 238, 310,  79,  11,   1, 184, 150,
+     983, 984, 814, 813,
+     285,  56,  10,   1,   1,   1,   1,   1,   1,   1,
+     713, 377, 287, 217, 180, 615, 558,
+     208, 164
+  },
+  {
+    1266, 606, 329, 484, 161,  27,   1,  79,  92,
+    1187,1188, 589, 588,
+     103,  10,   1,   1,   1,   1,   1,   1,   1,   1,
+     680, 371, 278, 221, 244, 614, 728,
+      80,  62
+  },
+  {
+    1126, 828, 435, 705, 443,  90,   8,  10,  55,
+    1220,1219, 350, 350,
+      28,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+     602, 330, 222, 168, 158, 612, 919,
+     104,   5
+  },
+  {
+    1210, 506,1014, 926, 474, 240,   4,   1,  44,
+    1801,1801, 171, 171,
+       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+     900, 132,  36,  11,  47, 191, 316,
+       2,   1
+  },
+  {
+    1210, 506,1014, 926, 474, 240,   4,   1,  44,
+    1801,1801, 171, 171,
+       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+     900, 132,  36,  11,  47, 191, 316,
+       2,   1
+  },
+  {
+    1210, 506,1014, 926, 474, 240,   4,   1,  44,
+    1801,1801, 171, 171,
+       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+     900, 132,  36,  11,  47, 191, 316,
+       2,   1
+  },
+  /*AC Inter bias group 3 tables.*/
+  {
+    1064, 325, 129, 117,  20,   2,   1, 266, 121,
+    1000,1000, 706, 706,
+     348, 162,  67,  32,  25,  11,   1,   1,   1,   1,
+     876, 513, 363, 274, 225, 627, 384,
+     370, 251
+  },
+  {
+    1311, 517, 238, 254,  45,   3,   1, 188, 160,
+    1070,1070, 635, 635,
+     239,  85,  30,  11,   6,   1,   1,   1,   1,   1,
+     744, 420, 313, 239, 206, 649, 541,
+     221, 155
+  },
+  {
+    1394, 632, 322, 385,  78,   7,   1, 134, 152,
+    1163,1164, 607, 607,
+     185,  51,  12,   3,   1,   1,   1,   1,   1,   1,
+     631, 331, 275, 203, 182, 604, 620,
+     146,  98
+  },
+  {
+    1410, 727, 407, 546, 146,  19,   1,  67,  88,
+    1485,1486, 419, 418,
+     103,  18,   3,   1,   1,   1,   1,   1,   1,   1,
+     555, 261, 234, 164, 148, 522, 654,
+      67,  39
+  },
+  {
+    1423, 822, 492, 719, 216,  22,   1,  28,  59,
+    1793,1793, 323, 324,
+      37,   2,   1,   1,   1,   1,   1,   1,   1,   1,
+     376, 138, 158, 102, 119, 400, 604,
+      28,   9
+  },
+  {
+    1585, 923, 563, 918, 207,  25,   1,   5,  20,
+    2229,2230, 172, 172,
+       7,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+     191,  40,  56,  22,  65, 243, 312,
+       2,   1
+  },
+  {
+    2225,1100, 408, 608, 133,   8,   1,   1,   1,
+    2658,2658,  25,  24,
+       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+       8,   1,   1,   1,   1, 125,  16,
+       1,   1
+  },
+  {
+    2539, 951, 369, 554, 212,  18,   1,   1,   1,
+    2290,2289,  64,  64,
+       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+      18,  18,   9,  55,  36, 184, 323,
+       1,   1
+  }
+};
+
+
+
+/*Inserts an element into a singly linked list of Huffman tree nodes.
+  The element is inserted in ascending order by frequency.
+  _root:  The start of the list.
+  _entry: The entry to insert.
+  Return: The new head of the list. */
+static OCHuffEntry *huff_list_ins(OCHuffEntry *_root,OCHuffEntry *_entry){
+  OCHuffEntry **pnext;
+  OCHuffEntry  *search;
+  for(pnext=&_root,search=_root;search!=NULL&&search->freq<_entry->freq;
+   pnext=&search->next,search=search->next);
+  _entry->next=search;
+  *pnext=_entry;
+  return _root;
+}
+
+/*Creates a list of Huffman tree nodes for the given frequency table, sorted in
+   ascending order.
+  _freqs: A list of frequency counts.
+          All counts less than 1 will be upgraded to 1.
+  Return: A pointer to the first tree node in the list.
+          At this point, the nodes just form a list, and are not arranged in a
+           single tree.*/
+static OCHuffEntry *huff_list_create(const int _freqs[32]){
+  OCHuffEntry *root;
+  int          i;
+  root=NULL;
+  for(i=0;i<32;i++){
+    OCHuffEntry *entry;
+    /*Create a new entry for this value.*/
+    entry=(OCHuffEntry *)calloc(1,sizeof(*root));
+    entry->children[0]=entry->children[1]=NULL;
+    entry->value=i;
+    entry->freq=_freqs[i];
+    if(entry->freq<=0)entry->freq=1;
+    root=huff_list_ins(root,entry);
+  }
+  return root;
+}
+
+/*Fills in an array of Huffman codes given a Huffman tree.
+  _entry: The root of the current branch of the tree.
+  _codes: The array in which to store the codes.
+  _value: The prefix required to reach the current branch of the tree.
+  _len:   The number of bits in the prefix.*/
+static void huff_codes_create(OCHuffEntry *_entry,OCHuffCode _codes[32],
+ int _value,int _len){
+  if(_entry->children[0]==NULL&&_entry->children[1]==NULL){
+    OCHuffCode *code;
+    code=_codes+_entry->value;
+    code->value=_value;
+    code->len=_len;
+  }
+  else{
+    _len++;
+    huff_codes_create(_entry->children[0],_codes,_value<<1,_len);
+    huff_codes_create(_entry->children[1],_codes,_value<<1|1,_len);
+  }
+}
+
+/*Builds a complete Huffman tree for a given frequency table, as well as the
+   array of Huffman codes for each token.
+  _codes: The array to store the Huffman codes in.
+  _freqs: The frequency table to build the tree from.
+  Return: The root of the Huffman tree.*/
+static OCHuffEntry *huff_tree_build(OCHuffCode _codes[32],const int _freqs[32]){
+  OCHuffEntry *root;
+  /*Create an initial sorted list of what will become the leaf nodes of the
+     tree.*/
+  root=huff_list_create(_freqs);
+  /*Merge pairs of nodes until the tree is complete.*/
+  while(root->next!=NULL){
+    OCHuffEntry *entry;
+    entry=(OCHuffEntry *)calloc(1,sizeof(*entry));
+    entry->children[0]=root;
+    entry->children[1]=root->next;
+    entry->value=-1;
+    entry->freq=root->freq+root->next->freq;
+    root=huff_list_ins(root->next->next,entry);
+  }
+  /*Create the Huffman codes corresponding to the generated tree.*/
+  huff_codes_create(root,_codes,0,0);
+  return root;
+}
+
+/*Prints C code for an array containing the Huffman codes for the VP3.1
+   frequency counts.
+  TODO: Allow alternate frequency tables to be read as input.*/
+int main(void){
+  OCHuffEntry *roots[80];
+  OCHuffCode   codes[80][32];
+  int          maxlen;
+  int          i;
+  int          j;
+  maxlen=0;
+  printf("OCHuffCode %s[80][32]={","VP31_HUFF_CODES");
+  for(i=0;i<80;i++){
+    roots[i]=huff_tree_build(codes[i],VP31_FREQ_TABLES[i]);
+    for(j=0;j<32;j++)if(codes[i][j].len>maxlen)maxlen=codes[i][j].len;
+  }
+  maxlen=maxlen+3>>2;
+  for(i=0;i<80;i++){
+    if(i>0)printf(",");
+    printf("\n  {");
+    for(j=0;j<32;j++){
+      if(j>0)printf(",");
+      if((j&3)==0)printf("\n    ");
+      printf("{0x%0*X,%2i}",maxlen,codes[i][j].value,codes[i][j].len);
+    }
+    printf("\n  }");
+  }
+  printf("\n};");
+  return 0;
+}

Added: trunk/theora-exp/tools/quantgen.c
===================================================================
--- trunk/theora-exp/tools/quantgen.c	                        (rev 0)
+++ trunk/theora-exp/tools/quantgen.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,660 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#if !defined(M_PI)
+# define M_PI (3.1415926535897932384626433832795)
+#endif
+
+/*This program computes a set of quantization matrices using the same CSF
+   functions that were used to generate the CSF filters in the psychovisual
+   model.
+  The main difference is that instead of a full FIR filter, only a single
+   scale factor for each coefficient is derived.
+
+  The same quantization matrices are used for both inter and intra modes.
+  The reason is that human sensitivity to errors is the same regardless of
+   what mode happened to be used to code a macro block.
+  This assumption ignores statistical correlation between the use of intra
+   mode and scene changes or other high frequency temporal effects which could
+   actually have an effect on perception, because our current psychovisual
+   model does not take these into account.*/
+
+/*The number of phases to sample at each frequency.*/
+#define NPHASES   (16)
+/*The number of frequencies to sample (in the interval [0,pi)).*/
+#define NFREQS    (1024)
+
+/*The magnitude of each DCT basis vector.
+  For a non-orthogonal transform, one per coefficient will be needed.
+  The Theora DCT function scales its ouput by 2 in each dimension.*/
+#define DCT_SCALE (2.0)
+
+/*The relative sensitivity to changes in each color channel.
+  This is derived by making small changes in each color channel individually
+   and measuring the distance to the new color in L*a*b space.
+  A linear regression with an intercept of 0 was then fit to the measured
+   distances.
+  These are the slopes of the fit lines.
+  See colorreg.c for details.
+
+  These values depend on the particular color space one is using, but we'd like
+   to derive generic quantization matrices.
+  Therefore we use the geometric average over all color spaces (currently only
+   two).
+  Minor mismatches in the fit of the matrices to actual CSF curves will not
+   harm the encoder, since it uses adaptive thresholding and amplitude
+   reduction based on per-coefficient sensitivity measurements.*/
+const float OC_YCbCr_SCALE[3]={
+  0.62660577006129702908501F,
+  1.33082085846485050021660F,1.08759046924374083944404F
+  /*JND values:
+  1.59589976310332425729864F,
+  0.75141593523980064237395F,0.91946373959616699828994F
+  */
+};
+
+
+
+/*cos(n*pi/2) (resp. sin(m*pi/2)) accurate to 16 bits.*/
+#define OC_C1S7D (64277.0/65536)
+#define OC_C2S6D (60547.0/65536)
+#define OC_C3S5D (54491.0/65536)
+#define OC_C4S4D (46341.0/65536)
+#define OC_C5S3D (36410.0/65536)
+#define OC_C6S2D (25080.0/65536)
+#define OC_C7S1D (12785.0/65536)
+
+/*A floating-point implementation of the Theora DCT.
+  Here we pretend that the transform is linear, and ignore the non-linearities
+   introduced by rounding and truncation in the integer version.*/
+static void fdct8d(double _y[8],double _x[8]){
+  double t[8];
+  double u;
+  double v;
+  t[0]=_x[0]+_x[7];
+  t[1]=_x[1]+_x[2];
+  t[2]=_x[3]+_x[4];
+  t[3]=_x[5]+_x[6];
+  t[4]=_x[5]-_x[6];
+  t[5]=_x[3]-_x[4];
+  t[6]=_x[1]-_x[2];
+  t[7]=_x[0]-_x[7];
+  /*Butterflies for ouputs 0 and 4.*/
+  u=t[0]+t[2];
+  v=t[1]+t[3];
+  _y[0]=OC_C4S4D*(u+v);
+  _y[4]=OC_C4S4D*(u-v);
+  /*Apply rotation for outputs 2 and 6.*/
+  u=t[0]-t[2];
+  v=t[6]-t[4];
+  _y[2]=OC_C2S6D*u+OC_C6S2D*v;
+  _y[6]=OC_C6S2D*u-OC_C2S6D*v;
+  /*Compute some common terms.*/
+  t[3]=OC_C4S4D*(t[1]-t[3]);
+  t[4]=-OC_C4S4D*(t[6]+t[4]);
+  /*Apply rotation for outputs 1 and 7.*/
+  u=t[7]+t[3];
+  v=t[4]-t[5];
+  _y[1]=OC_C1S7D*u-OC_C7S1D*v;
+  _y[7]=OC_C7S1D*u+OC_C1S7D*v;
+  /*Apply rotation for outputs 3 and 5.*/
+  u=t[7]-t[3];
+  v=t[4]+t[5];
+  _y[3]=OC_C3S5D*u-OC_C5S3D*v;
+  _y[5]=OC_C5S3D*u+OC_C3S5D*v;
+}
+
+/*A Contrast Sensitivity Function.*/
+typedef double (*csf_func)(const void *_ctx,double _f);
+
+/*A set of CSF filters, one for each DCT coefficient.*/
+typedef double csf_filter_bank[8];
+
+/*Finds a filter bank for a given CSF function.
+  _filters: Will contain the optimal filter bank.
+  _csf:     The CSF function.
+  _csf_ctx: The parameters of the CSF function.
+  _scratch: An NFREQS*NPHASES*8 array of scratch space.*/
+static void find_csf_filters(csf_filter_bank _filters,csf_func _csf,
+ const void *_csf_ctx){
+  double  ata[8];
+  double  atb[8];
+  double  x[8];
+  double  y[8];
+  int     row;
+  int     f;
+  int     p;
+  int     c;
+  int     i;
+  memset(ata,0,sizeof(ata));
+  memset(atb,0,sizeof(atb));
+  /*Find the response of each coefficient for each frequency and phase, and
+     the expected response of CSF-sensitive coefficients.*/
+  for(row=f=0;f<NFREQS;f++){
+    double cs;
+    /*Compute the CSF weight at this frequency.*/
+    cs=_csf(_csf_ctx,f/(double)NFREQS)/DCT_SCALE;
+    for(p=0;p<NPHASES;p++,row++){
+      double theta;
+      double dtheta;
+      dtheta=f*M_PI/NFREQS;
+      theta=p*(2*M_PI)/NPHASES;
+      /*Fill in a perfect cosine curve at this frequency/phase.*/
+      for(i=0;i<8;i++){
+        x[i]=cos(theta);
+        theta+=dtheta;
+      }
+      /*Find the transformed coefficient values of this curve.*/
+      fdct8d(y,x);
+      /*Add the equation for each coefficient to our linear systems.*/
+      for(c=0;c<8;c++){
+        ata[c]+=y[c]*y[c];
+        atb[c]+=y[c]*y[c]*cs;
+      }
+    }
+  }
+  /*We now have the system Ax=b, where x is the filter coefficients we want to
+     solve for, and each row of A is a set of actual coefficients, and b is the
+     CSF-scaled coefficient we actually want as output.
+    There is a row of A for each frequency and phase, but we only have 1
+     filter coefficient, so we find the solution which minimizes (Ax-b)^2.
+    This is done by solving (A^T A)x = A^T b, which conveniently is a 1x1
+     system, and thus easy to solve.*/
+  for(c=0;c<8;c++)_filters[c]=atb[c]/ata[c];
+}
+
+/*CSF function parameters.
+  All values are derived from the measurements in Chapter 5 of Nadenau's Ph.D.
+   thesis \cite{Nad00}.
+  We use his measurements because they were actually performed in a Y'CbCr
+   space, though he does not specify which one.
+
+  The extensions to supra-threshold levels use the model proposed by Mark
+   Cannon Jr. \cite{Can85}.
+  There is no clear theory for how supra-threshold contrast should be handled.
+  The law of contrast constancy \cite{GS75} suggests that quantization should
+   be uniform at high levels of contrast.
+  However, recent experiments on wavelet compression suggest that, although the
+   effect of the CSF is reduced at supra-threshold levels, it still provides
+   better perceptual quality than uniform quantization \cite{CH03}.
+  Purported reasons for this are the better preservation of edge structure when
+   details are removed from the fine scales (highest frequencies) first.
+
+  When Cannon's results are adapted to our framework, correcting for the change
+   from Michelson contrast to our model, the result is that the shape of the
+   CSF curve is preserved, though to a lesser amplitude, throughout the entire
+   useful contrast range.
+  This corresponds very well with the findings of Chandler and Hemami.
+  The advantage of using Cannon's scheme over theirs is that Cannon's is very
+   simple, and contains no unexplained magic constants.
+  Current results from Chandler and Hemami give only a small benefit over
+   JPEG200.
+
+  @ARTICLE{Can85,
+    author="Mark W. Cannon, Jr.",
+    title="Perceived contrast in the fovea and periphery",
+    journal="Journal of the Optical Society of America A",
+    volume=2,
+    number=10,
+    pages="1760--1758",
+    month="Oct.",
+    year=1985
+  }
+
+  @ARTICLE{GS75,
+    author="M. A. Georgeson and G. D. Sullivan",
+    title="Contrast constancy: Deblurring in human vision by spatial frequency
+     channels",
+    journal="The Journal of Physiology",
+    volume=252,
+    number=3,
+    pages="627--656",
+    month="Nov.",
+    year=1975
+  }
+
+  @INPROCEEDINGS{CH03,
+    author="Damon M. Chandler and Sheila S. Hemami",
+    title="Suprathreshold image compression based on contrast allocation and
+     global precedence",
+    booktitle="Proc. Human Vision and Electronic Imaging 2003",
+    address="Santa Clara, CA",
+    month="Jan.",
+    year=2003
+  }
+
+  @PHDTHESIS{Nad00,
+    author="Marcus Nadenau",
+    title="Integration of Human Color Visual Models into High
+     Quality Image Compression",
+    school="\'{E}cole Polytechnique F\'{e}d\'{e}rale de Lausanne",
+    year=2000,
+    URL="http://ltswww.epfl.ch/pub_files/nadenau/Thesis_Marcus_LQ.pdf"
+  }*/
+
+typedef struct csfl_ctx csfl_ctx;
+typedef struct csfc_ctx csfc_ctx;
+typedef struct csf_ctx  csf_ctx;
+
+/*The luma CSF function context.*/
+struct csfl_ctx{
+  /*The frequency where the CSF attains its maximum.*/
+  double peakf;
+  /*The global scale factor.
+    This accounts for small rounding errors in the parameters Nadenau reports
+     so that the function maximum is actually 1.0.*/
+  double s;
+  /*The actual parameters from Table 5.3 on page 83 of Nadenau's thesis.
+    There is an error in this table: the roles of a1 and a2 are reversed.
+    Simply swapping the data for these two parameters yields correct results.*/
+  double a1;
+  double a2;
+  double b1;
+  double b2;
+  double c1;
+  double c2;
+};
+
+/*The luma CSF function.*/
+static double csfl(csfl_ctx *_ctx,double _f){
+  return _f<_ctx->peakf?1:
+   _ctx->s*(_ctx->a1*(_f*_f)*exp(_ctx->b1*pow(_f,_ctx->c1))+
+   _ctx->a2*exp(_ctx->b2*pow(_f,_ctx->c2)));
+}
+
+/*The actual luma CSF parameters.*/
+static const csfl_ctx Y_CTX={
+  3.74695975597140362,
+  0.999941996555815748,
+  0.9973,0.221,
+  -0.9699,-0.800,
+  0.7578,1.999
+};
+
+/*The chroma CSF function context.*/
+struct csfc_ctx{
+  /*The actual parameters from Table 5.4 on page 83 of Nadenau's thesis.*/
+  double a1;
+  double b1;
+  double c1;
+};
+
+/*The chroma CSF function.*/
+static double csfc(csfc_ctx *_ctx,double _f){
+  return _ctx->a1*exp(_ctx->b1*pow(_f,_ctx->c1));
+}
+
+/*The actual Cr CSF parameters.*/
+static const csfc_ctx CR_CTX={
+  1.000,-0.1521,0.893
+};
+
+/*The actual Cb CSF parameters.*/
+static const csfc_ctx CB_CTX={
+  1.000,-0.2041,0.900
+};
+
+/*A general contrast-dependent CSF function context.*/
+struct csf_ctx{
+  /*The threshold-level CSF function.*/
+  csf_func    c0csf;
+  /*The threshold-level CSF function parameters.*/
+  const void *c0csf_ctx;
+  /*The Nyquist frequency of this channel.*/
+  double      fmax;
+  /*The frequency where the threshold-level CSF funtion attains its maximum.*/
+  double      peakf;
+  /*A scale parameter used to normalize the curve to have a maximum of 1.0.*/
+  double      scale;
+  /*The contrast level.*/
+  double      contrast;
+};
+
+/*The exponent parameter in the supra-threshold model.
+  Values between 0.4 and 0.6 are reasonable.*/
+#define CONTRAST_EXP (0.5)
+/*The scale parameter of the contrast level.
+  Cannon does not report values for this parameter, and it would differ for us
+   anyway since we do not use Michelson contrast
+   ((L_max-L_min)/(L_max+L_min)).
+  It must be sufficiently small so that physical contrast does not actually
+   decrease as perceptual contrast increases.*/
+#define CONTRAST_SCALE (1.0/64)
+
+/*The main contrast-dependent CSF function.*/
+static double csf(csf_ctx *_ctx,double _f){
+  double f;
+  double s0;
+  f=_f*_ctx->fmax;
+  s0=_ctx->c0csf(_ctx->c0csf_ctx,f);
+  return _ctx->scale/(_ctx->contrast+1/s0);
+}
+
+/*This is the Nyquist frequency for a 45 dpi screen viewed from 50 cm out.
+  This is assumed to be the closest reasonable viewing distance.*/
+#define FREQUENCY_MAX (7.558704385696589)
+
+/*Builds the CSF filter banks for each channel and contrast level.*/
+static void build_csf_tables(csf_filter_bank _filters[5][64],
+ double _qscale[64]){
+  csf_ctx   csf_ctxs[5]={
+    {
+      (csf_func)csfl,
+      &Y_CTX,
+      FREQUENCY_MAX,
+      3.74695975597140362,
+    },
+    {
+      (csf_func)csfc,
+      &CR_CTX,
+      FREQUENCY_MAX,
+      0,
+    },
+    {
+      (csf_func)csfc,
+      &CR_CTX,
+      0.5*FREQUENCY_MAX,
+      0,
+    },
+    {
+      (csf_func)csfc,
+      &CB_CTX,
+      FREQUENCY_MAX,
+      0,
+    },
+    {
+      (csf_func)csfc,
+      &CB_CTX,
+      0.5*FREQUENCY_MAX,
+      0,
+    }
+  };
+  int chi;
+  int qi;
+  for(chi=0;chi<5;chi++){
+    for(qi=0;qi<64;qi++){
+      csf_ctxs[chi].contrast=pow(_qscale[qi]*CONTRAST_SCALE,1.0/CONTRAST_EXP);
+      /*Find the normalization constant for this contrast level.*/
+      csf_ctxs[chi].scale=csf_ctxs[chi].contrast+
+       1/csf_ctxs[chi].c0csf(csf_ctxs[chi].c0csf_ctx,csf_ctxs[chi].peakf);
+      find_csf_filters(_filters[chi][qi],(csf_func)csf,csf_ctxs+chi);
+    }
+  }
+}
+
+/*The resolution at which the base matrices are sampled over the range of qi
+   values.*/
+#define NQRANGES (3)
+
+int main(void){
+  static const int   QSIZES[NQRANGES]={15,16,32};
+  static const int   QOFFS[NQRANGES+1]={0,15,31,63};
+  /*The names of each pixel format.*/
+  static const char *FORMAT_NAMES[4]={
+    "4:4:4 subsampling",
+    "4:2:2 subsampling",
+    "subsampling in the Y direction",
+    "4:2:0 subsampling"
+  };
+  /*The names of each color plane.*/
+  static const char *CHANNEL_NAMES[3]={
+    "Y'",
+    "Cb",
+    "Cr"
+  };
+  csf_filter_bank filters[5][64];
+  double          fbase_matrices[9][64][64];
+  unsigned char   base_matrices[9][64][64];
+  int             ac_scale[64];
+  int             dc_scale[64];
+  double          qscales[64];
+  double          bscale[NQRANGES+1][2];
+  double          bmax[NQRANGES+1][2];
+  double          bmin[NQRANGES+1][2];
+  int             pci;
+  int             pfi;
+  int             qti;
+  int             pli;
+  int             chx;
+  int             chy;
+  int             qri;
+  int             qi;
+  int             ci;
+  for(qi=0;qi<64;qi++){
+    qscales[qi]=qi>=63?0.5F:1.5*pow(2,0.0625*(64-qi));
+    ac_scale[qi]=65535;
+    dc_scale[qi]=65535;
+  }
+  /*Compute all the CSF filters.*/
+  build_csf_tables(filters,qscales);
+  /*Build the base matrices.*/
+  for(pci=0;pci<9;pci++){
+    if(pci==0)chx=chy=pli=pfi=0;
+    else{
+       pli=(pci-1>>2)+1;
+       pfi=pci-1&3;
+       chx=(pli<<1)-1+(pfi&1);
+       chy=(pli<<1)-1+(pfi>>1);
+    }
+    for(qi=0;qi<64;qi++)for(ci=0;ci<64;ci++){
+      fbase_matrices[pci][qi][ci]=
+       1/(OC_YCbCr_SCALE[pli]*filters[chx][qi][ci&7]*filters[chy][qi][ci>>3]);
+    }
+  }
+  /*Scale the base matrices to be in the range of a single byte.*/
+  for(qri=0;qri<=NQRANGES;qri++){
+    qi=QOFFS[qri];
+    bmax[qri][0]=bmax[qri][1]=1;
+    bmin[qri][0]=bmin[qri][1]=65536*256;
+    for(pci=0;pci<9;pci++)for(ci=0;ci<64;ci++){
+      if(fbase_matrices[pci][qi][ci]>bmax[qri][ci!=0]){
+        bmax[qri][ci!=0]=fbase_matrices[pci][qi][ci];
+      }
+      if(fbase_matrices[pci][qi][ci]<bmin[qri][ci!=0]){
+        bmin[qri][ci!=0]=fbase_matrices[pci][qi][ci];
+      }
+    }
+    for(ci=0;ci<2;ci++){
+      double scale;
+      scale=bmin[qri][ci]*qscales[qi]*100;
+      if(scale>255/bmax[qri][ci])scale=255/bmax[qri][ci];
+      bscale[qri][ci]=scale;
+    }
+  }
+  /*Quantize the base matrices to integers at our sample points.*/
+  for(pci=0;pci<9;pci++){
+    for(qri=0;qri<=NQRANGES;qri++){
+      qi=QOFFS[qri];
+      for(ci=0;ci<64;ci++){
+        base_matrices[pci][qi][ci]=(unsigned char)(
+         fbase_matrices[pci][qi][ci]*bscale[qri][ci!=0]+0.5);
+      }
+    }
+  }
+  /*Interpolate the remaining base matrices.*/
+  for(pci=0;pci<9;pci++){
+    for(qri=0;qri<NQRANGES;qri++){
+      for(qi=QOFFS[qri]+1;qi<QOFFS[qri+1];qi++)for(ci=0;ci<64;ci++){
+        base_matrices[pci][qi][ci]=(unsigned char)(
+         (2*((QOFFS[qri+1]-qi)*base_matrices[pci][QOFFS[qri]][ci]+
+         (qi-QOFFS[qri])*base_matrices[pci][QOFFS[qri+1]][ci])+QSIZES[qri])/
+         (2*QSIZES[qri]));
+      }
+    }
+  }
+  /*Select scale factors for every matrix.*/
+  for(qi=64;qi-->0;){
+    /*In general, we want to slightly underestimate the scale factor, so we
+       take the minimum scale factor over all color channels and coefficients.*/
+    for(pci=0;pci<9;pci++){
+      int scale;
+      scale=(int)(fbase_matrices[pci][qi][0]*qscales[qi]*
+       (100/(DCT_SCALE*DCT_SCALE))/base_matrices[pci][qi][0]);
+      if(scale<1)scale=1;
+      if(scale<dc_scale[qi])dc_scale[qi]=scale;
+      for(ci=1;ci<64;ci++){
+        scale=(int)(fbase_matrices[pci][qi][ci]*qscales[qi]*
+         (100/(DCT_SCALE*DCT_SCALE))/base_matrices[pci][qi][ci]);
+        if(scale<1)scale=1;
+        if(scale<ac_scale[qi])ac_scale[qi]=scale;
+      }
+    }
+    /*But we must keep the quantizer monotonic.*/
+    if(qi<63){
+      for(pci=0;pci<9;pci++){
+        while(base_matrices[pci][qi][0]<base_matrices[pci][qi+1][0]||
+         dc_scale[qi]<dc_scale[qi+1]){
+          /*dc_scale[qi]++;*/
+          if(base_matrices[pci][qi][0]<255&&dc_scale[qi]>=dc_scale[qi+1]){
+            base_matrices[pci][qi][0]++;
+          }
+          else dc_scale[qi]++;
+        }
+        for(ci=1;ci<64;ci++){
+          while(base_matrices[pci][qi][ci]<base_matrices[pci][qi+1][ci]||
+           ac_scale[qi]<ac_scale[qi+1]){
+            /*ac_scale[qi]++;*/
+            if(base_matrices[pci][qi][ci]<255&&ac_scale[qi]>=ac_scale[qi+1]){
+              base_matrices[pci][qi][ci]++;
+            }
+            else ac_scale[qi]++;
+          }
+        }
+      }
+    }
+  }
+  /*Print the quantization matrices and their integer, interpolated
+     approximations.*/
+#if 0
+  for(pci=0;pci<9;pci++)for(ci=0;ci<64;ci++){
+    fprintf(stderr,"[%i][%i]=",pci,ci);
+    for(qi=0;qi<64;qi++){
+      if(!(qi&3))fprintf(stderr,"\n  ");
+      fprintf(stderr,"%3i-%5.2lf",
+       (base_matrices[pci][qi][ci]*(ci==0?dc_scale[qi]:ac_scale[qi])/100)<<2,
+       fbase_matrices[pci][qi][ci]*qscales[qi]);
+      if(qi<63)fprintf(stderr,",");
+    }
+    fprintf(stderr,"\n\n");
+  }
+#endif
+  /*Check to make sure that the coefficients always decrease as the qi rises.
+    This is assumed by the current encoder.*/
+#if 0
+  /*First check to make sure it is not a flaw in the computed matrices
+     themselves.*/
+  for(pci=0;pci<9;pci++)for(qi=0;qi<63;qi++)for(ci=0;ci<64;ci++){
+    if(fbase_matrices[pci][qi][ci]*qscales[qi]<
+     fbase_matrices[pci][qi+1][ci]*qscales[qi+1]){
+      fprintf(stderr,"Monotonicity failure: [%i][%i][%i]-[%i][%i][%i]: %lf\n",
+       pci,qi,ci,pci,qi+1,ci,
+       fbase_matrices[pci][qi+1][ci]*qscales[qi+1]-
+       fbase_matrices[pci][qi][ci]*qscales[qi]);
+    }
+  }
+  /*Then check the approximations.*/
+  for(pci=0;pci<9;pci++)for(qi=0;qi<63;qi++){
+    if(base_matrices[pci][qi][0]*dc_scale[qi]<
+     base_matrices[pci][qi+1][0]*dc_scale[qi+1]){
+      fprintf(stderr,"Monotonicity failure: [%i][%i][0]-[%i][%i][0]\n",
+       pci,qi,pci,qi+1);
+    }
+    for(ci=1;ci<64;ci++){
+      if(base_matrices[pci][qi][ci]*ac_scale[qi]<
+       base_matrices[pci][qi+1][ci]*ac_scale[qi+1]){
+        fprintf(stderr,"Monotonicity failure: [%i][%i][%i]-[%i][%i][%i]\n",
+         pci,qi,ci,pci,qi+1,ci);
+      }
+    }
+  }
+#endif
+  /*Dump the generated tables as C code.*/
+  printf("static const int OC_DEF_QRANGE_SIZES[%i]={",NQRANGES);
+  for(qri=0;qri<NQRANGES;qri++){
+    printf("%i",QSIZES[qri]);
+    if(qri+1<NQRANGES)printf(",");
+  }
+  printf("};\n");
+  printf("\nstatic const th_quant_base OC_DEF_BASE_MATRICES[9][%i]={",
+   NQRANGES+1);
+  for(pci=0;pci<9;pci++){
+    if(pci==0)chx=chy=pli=pfi=0;
+    else{
+       pli=(pci-1>>2)+1;
+       pfi=pci-1&3;
+       chx=(pli<<1)-1+(pfi&1);
+       chy=(pli<<1)-1+(pfi>>1);
+    }
+    printf("\n  /*%s matrices, %s.*/",CHANNEL_NAMES[pli],FORMAT_NAMES[pfi]);
+    printf("\n  {");
+    for(qri=0;qri<=NQRANGES;qri++){
+      qi=QOFFS[qri];
+      printf("\n    /*qi=%i.*/",qi);
+      printf("\n    {");
+      for(ci=0;ci<64;ci++){
+         if(!(ci&7))printf("\n      ");
+         printf("%3i",base_matrices[pci][qi][ci]);
+         if(ci<63)printf(",");
+      }
+      printf("\n    }");
+      if(qri<NQRANGES)printf(",");
+    }
+    printf("\n  }");
+    if(pci<8)printf(",");
+  }
+  printf("\n};\n");
+  printf("\nconst th_quant_info OC_DEF_QUANT_INFO[4]={");
+  for(pfi=0;pfi<4;pfi++){
+    printf("\n  {");
+    printf("\n    {");
+    for(qi=0;qi<64;qi++){
+      if(!(qi&7))printf("\n      ");
+      printf("%4i",dc_scale[qi]);
+      if(qi<63)printf(",");
+    }
+    printf("\n    },");
+    printf("\n    {");
+    for(qi=0;qi<64;qi++){
+      if(!(qi&7))printf("\n      ");
+      printf("%4i",ac_scale[qi]);
+      if(qi<63)printf(",");
+    }
+    printf("\n    },");
+    printf("\n    {");
+    /*There's really no obvious guidance on how to set the loop filter limits
+       from the VP3 source code.
+      Setting them to half the luma DC quantizer value is at least the obvious
+       choice, and that's what we do here.
+      This doesn't quite match what VP3 did: their values were larger for
+       larger quantizers, and smaller for smaller quantizers, but it matches
+       pretty closely for all intermediate quantizers.
+      This also doesn't take into account the minimum quantizer limits, because
+       those change depending on whether blocks are coded in intra or inter
+       mode, while the loop filter must span the boundaries of all different
+       block types.
+      Perhaps using the smaller of the limits is still appropriate, though.*/
+    for(qi=0;qi<64;qi++){
+      if(!(qi&7))printf("\n      ");
+      printf("%4i",(int)(qscales[qi]*fbase_matrices[0][qi][0]*0.5+0.5));
+      if(qi<63)printf(",");
+    }
+    printf("\n    },");
+    printf("\n    {");
+    for(qti=0;qti<2;qti++){
+       printf("\n      {");
+       for(pli=0;pli<3;pli++){
+         printf("\n        {%i,OC_DEF_QRANGE_SIZES,OC_DEF_BASE_MATRICES[%i]}",
+          NQRANGES,pli==0?0:(pli-1<<2)+1+(~pfi&3));
+         if(pli<2)printf(",");
+       }
+       printf("\n      }");
+       if(qti<1)printf(",");
+    }
+    printf("\n    }");
+    printf("\n  }");
+    if(pfi<3)printf(",");
+  }
+  printf("\n};\n");
+  return 0;
+}

Added: trunk/theora-exp/tools/yuv2yuv4mpeg.c
===================================================================
--- trunk/theora-exp/tools/yuv2yuv4mpeg.c	                        (rev 0)
+++ trunk/theora-exp/tools/yuv2yuv4mpeg.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,303 @@
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE64_SOURCE
+#define _FILE_OFFSET_BITS 64
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*This is a small utility used to convert many of the standard test sequences
+   into a common format, the YUV4MPEG format used by mjpegtools.
+  This is the format that the example encoder takes as input.
+
+  The set of file name patterns/extentions it supports is intentionally very
+   limited to keep the code simple.
+  However, it is not too difficult to rename existing file names to fit these
+   patterns.
+  E.g., to add leading 0's to 1- and 2-digit frame numbers with /bin/sh,
+    for i in tennis?.yuv ; do mv "$i" "tennis00${i##tennis}" ; done
+    for i in tennis??.yuv ; do mv "$i" "tennis0${i##tennis}" ; done*/
+int main(int _argc,char *_argv[]){
+  FILE          *in_y;
+  FILE          *in_u;
+  FILE          *in_v;
+  FILE          *in_a;
+  FILE          *in_f;
+  FILE          *out_y4m;
+  int            y_w;
+  int            y_h;
+  int            c_w;
+  int            c_h;
+  char           ip;
+  int            fps_n;
+  int            fps_d;
+  int            par_n;
+  int            par_d;
+  char          *chroma;
+  int            have_chroma;
+  int            have_alpha;
+  int            frame_digits;
+  int            separate_planes;
+  unsigned char *buf;
+  char           fname[8192];
+  int            frame_num;
+  int            argi;
+  if(_argc<2){
+    fprintf(stderr,
+     "Usage: yuv2yuv4mpeg <sequence_qcif> [-p | -d<digits>] [<options>]\n"
+     "Converts one or more raw data files in a sequence into a single\n"
+     " YUV4MPEG file with appropriate headers to describe the video format.\n"
+     "\n"
+     "The type of input read is controlled by one or more of:\n"
+     " -p              Input is split by component.\n"
+     "                 Opens up three files, <sequence>.y, <sequence>.u,\n"
+     "                  and <sequence>.v containing raw, unpadded image\n"
+     "                  data for each component, respectively.\n"
+     "                 If only a Y' component is present, <sequence>.y is\n"
+     "                  used.\n"
+     "                 If an alpha component is present, <sequence>.a is\n"
+     "                  used.\n"
+     "                 Which components are present is determined from the\n"
+     "                  -c flag described below.\n"
+     " -d<digits>      Input is split by frame.\n"
+     "                 Opens up <sequence><ddd>.yuv for frame <ddd>\n"
+     "                  containing raw, unpadded image data for all three\n"
+     "                  components.\n"
+     "                 <digits> specifies the number of decimal digits in\n"
+     "                  the frame number <ddd>.\n"
+     " If both of these options are be specified, the three files\n"
+     "  <sequence><ddd>.y, <sequence><ddd>.u, and <sequence><ddd>.v are\n"
+     "  opened for each frame.\n"
+     " If neither of these options are specified, a single <sequence>.yuv\n"
+     "  file is opened, containing, the raw, unpadded image data for all\n"
+     "  components of all frames.\n"
+     " This must be organized in a planar fashion, with each complete frame\n"
+     "  in one block, in the order Y, U (Cb), V (Cr), alpha.\n"
+     " Which components are present is determined from the -c flag described\n"
+     "  below.\n"
+     "\n"
+     "The default input video format is 29.97 fps progressive QCIF.\n"
+     "Options:\n"
+     " -w<width>\n"
+     " -h<height>\n"
+     " -fn<frame rate numerator>\n"
+     " -fd<frame rate denominator>\n"
+     " -i<p|t|b>       Progressive or Top-field first or Bottom-field first.\n"
+     " -c<chroma>      Chroma subsampling format. One of:\n"
+     "                   420jpeg\n"
+     "                   420mpeg2\n"
+     "                   420paldv\n"
+     "                   411\n"
+     "                   422\n"
+     "                   444\n"
+     "                   444alpha\n"
+     "                   mono\n"
+     " -an<pixel aspect numerator>\n"
+     " -ad<pixel aspect denominator>\n"
+     " Note: Most common frame sizes do not use square pixels:\n"
+     "  Name  Width  Height  -an   -ad\n"
+     "        720    576     128   117\n"
+     "  CIF   352    288     128   117\n"
+     "  QCIF  144    176     128   117\n"
+     "        720    480     4320  4739\n"
+     "  SIF   352    240     4320  4739\n"
+     " The HD TV sizes (1920x1080, 1280x720), really do use square pixels.\n"
+     " -o<offset>      The first frame number to use in -d mode.\n"
+     "                 If unspecified, 0 is used.\n");
+    return -1;
+  }
+  frame_digits=frame_num=separate_planes=0;
+  in_y=in_u=in_v=in_a=in_f=NULL;
+  y_w=176;
+  y_h=144;
+  fps_n=30000;
+  fps_d=1001;
+  ip='p';
+  par_n=128;
+  par_d=117;
+  chroma="420jpeg";
+  for(argi=2;argi<_argc;argi++){
+    if(_argv[argi][0]!='-'){
+      fprintf(stderr,"Error parsing arguments: must start with '-'.\n");
+      return -1;
+    }
+    switch(_argv[argi][1]){
+      case 'p':separate_planes=1;break;
+      case 'd':frame_digits=atoi(_argv[argi]+2);break;
+      case 'w':y_w=atoi(_argv[argi]+2);break;
+      case 'h':y_h=atoi(_argv[argi]+2);break;
+      case 'i':ip=_argv[argi][2];break;
+      case 'c':chroma=_argv[argi]+2;break;
+      case 'f':{
+        if(_argv[argi][2]=='n'){
+          fps_n=atoi(_argv[argi]+3);
+          break;
+        }
+        else if(_argv[argi][2]=='d'){
+          fps_d=atoi(_argv[argi]+3);
+          break;
+        }
+      }
+      case 'a':{
+        if(_argv[argi][2]=='n'){
+          par_n=atoi(_argv[argi]+3);
+          break;
+        }
+        else if(_argv[argi][2]=='d'){
+          par_d=atoi(_argv[argi]+3);
+          break;
+        }
+      }
+      case 'o':frame_num=atoi(_argv[argi]+2);break;
+      default:{
+        fprintf(stderr,"Error parsing arguments: unknown switch '%c'.\n",
+         _argv[argi][1]);
+        return -1;
+      }
+    }
+  }
+  if(strncmp(chroma,"420",3)==0){
+    c_w=y_w+1>>1;
+    c_h=y_h+1>>1;
+    have_chroma=1;
+  }
+  else if(strncmp(chroma,"411",3)==0){
+    c_w=y_w+3>>2;
+    c_h=y_h;
+    have_chroma=1;
+  }
+  else if(strcmp(chroma,"422")==0){
+    c_w=y_w+1>>1;
+    c_h=y_h;
+    have_chroma=1;
+  }
+  else if(strncmp(chroma,"444",3)==0){
+    c_w=y_w;
+    c_h=y_h;
+    have_chroma=1;
+  }
+  else if(strncmp(chroma,"mono",4)==0){
+    c_w=c_h=0;
+    have_chroma=0;
+  }
+  else{
+    fprintf(stderr,"Error parsing arguments: Unsupported chroma mode: %s.\n",
+     chroma);
+    return -1;
+  }
+  have_alpha=strstr(chroma,"alpha")!=NULL;
+  if(frame_digits<0)frame_digits=0;
+  if(strlen(_argv[1])>8178-frame_digits){
+    fprintf(stderr,"File name too long.\n");
+    return -1;
+  }
+  /*Open input and output files.*/
+  if(separate_planes){
+    if(frame_digits>0){
+      sprintf(fname,"%s%0*d.y",_argv[1],frame_digits,frame_num);
+      in_y=fopen(fname,"rb");
+      if(have_chroma){
+         sprintf(fname,"%s%0*d.u",_argv[1],frame_digits,frame_num);
+         in_u=fopen(fname,"rb");
+         sprintf(fname,"%s%0*d.v",_argv[1],frame_digits,frame_num);
+         in_v=fopen(fname,"rb");
+      }
+      if(have_alpha){
+         sprintf(fname,"%s%0*d.a",_argv[1],frame_digits,frame_num);
+         in_a=fopen(fname,"rb");
+      }
+    }
+    else{
+      sprintf(fname,"%s.y",_argv[1]);
+      in_y=fopen(fname,"rb");
+      if(have_chroma){
+        sprintf(fname,"%s.u",_argv[1]);
+        in_u=fopen(fname,"rb");
+        sprintf(fname,"%s.v",_argv[1]);
+        in_v=fopen(fname,"rb");
+      }
+      if(have_alpha){
+        sprintf(fname,"%s.a",_argv[1]);
+        in_a=fopen(fname,"rb");
+      }
+    }
+  }
+  else{
+    if(frame_digits>0){
+      sprintf(fname,"%s%0*d.yuv",_argv[1],frame_digits,frame_num);
+      in_f=fopen(fname,"rb");
+    }
+    else{
+      sprintf(fname,"%s.yuv",_argv[1]);
+      in_f=fopen(fname,"rb");
+    }
+    in_y=in_f;
+    if(have_chroma)in_u=in_v=in_f;
+    if(have_alpha)in_a=in_f;
+  }
+  if(in_y==NULL||have_chroma&&(in_u==NULL||in_v==NULL)||
+   have_alpha&&in_a==NULL){
+    fprintf(stderr,"Error opening input file(s).\n");
+    return -1;
+  }
+  sprintf(fname,"%s.y4m",_argv[1]);
+  out_y4m=fopen(fname,"wb");
+  if(out_y4m==NULL){
+    fprintf(stderr,"Error opening output file.\n");
+    return -1;
+  }
+  /*Start output.*/
+  fprintf(out_y4m,"YUV4MPEG2 W%i H%i F%i:%i I%c A%i:%i",
+   y_w,y_h,fps_n,fps_d,ip,par_n,par_d);
+  if(strcmp(chroma,"420jpeg")!=0)fprintf(out_y4m," C%s",chroma);
+  fprintf(out_y4m,"\n");
+  buf=(unsigned char *)malloc((size_t)(y_w*y_h));
+  for(;;){
+    if(fread(buf,y_w,y_h,in_y)<y_h)break;
+    fprintf(out_y4m,"FRAME\n");
+    fwrite(buf,y_w,y_h,out_y4m);
+    if(have_chroma){
+      fread(buf,c_w,c_h,in_u);
+      fwrite(buf,c_w,c_h,out_y4m);
+      fread(buf,c_w,c_h,in_v);
+      fwrite(buf,c_w,c_h,out_y4m);
+    }
+    if(have_alpha){
+      fread(buf,y_w,y_h,in_a);
+      fwrite(buf,y_w,y_h,out_y4m);
+    }
+    if(frame_digits>0){
+      frame_num++;
+      if(separate_planes){
+        sprintf(fname,"%s%0*d.y",_argv[1],frame_digits,frame_num);
+        fclose(in_y);
+        in_y=fopen(fname,"rb");
+        if(have_chroma){
+          sprintf(fname,"%s%0*d.u",_argv[1],frame_digits,frame_num);
+          fclose(in_u);
+          in_u=fopen(fname,"rb");
+          sprintf(fname,"%s%0*d.v",_argv[1],frame_digits,frame_num);
+          fclose(in_v);
+          in_v=fopen(fname,"rb");
+        }
+        if(have_alpha){
+          sprintf(fname,"%s%0*d.a",_argv[1],frame_digits,frame_num);
+          fclose(in_a);
+          in_a=fopen(fname,"rb");
+        }
+      }
+      else{
+        sprintf(fname,"%s%0*d.yuv",_argv[1],frame_digits,frame_num);
+        fclose(in_f);
+        in_f=fopen(fname,"rb");
+        in_y=in_f;
+        if(have_chroma)in_u=in_v=in_f;
+        if(have_alpha)in_a=in_f;
+      }
+      if(in_y==NULL||have_chroma&&(in_u==NULL||in_v==NULL)||
+       have_alpha&&in_a==NULL){
+        break;
+      }
+    }
+  }
+  return 0;
+}

Added: trunk/theora-exp/unix/Makefile
===================================================================
--- trunk/theora-exp/unix/Makefile	                        (rev 0)
+++ trunk/theora-exp/unix/Makefile	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,245 @@
+# NOTE: This Makefile requires GNU make
+# Location to put the targets.
+TARGETBINDIR = .
+TARGETLIBDIR = .
+# Name of the targets
+LIBTHEORAENC_TARGET = libtheoraenc.a
+LIBTHEORADEC_TARGET = libtheoradec.a
+DUMP_VIDEO_TARGET = dump_video
+PLAYER_EXAMPLE_TARGET = player_example
+ENCODER_EXAMPLE_TARGET = encoder_example
+REHUFF_EXAMPLE_TARGET = rehuff
+# The compiler to use
+CC = gcc
+# The command to use to generate dependency information
+MAKEDEPEND = gcc -MM
+#MAKEDEPEND = makedepend -f- -Y --
+# The location of include files.
+# Modify these to point to your Ogg and Vorbis include directories if they are
+#  not installed in a standard location.
+CINCLUDE = `sdl-config --cflags` -D_REENTRANT
+# Extra compilation flags.
+# You may get speed increases by including flags such as -O2 or -O3 or
+#  -ffast-math, or additional flags, depending on your system and compiler.
+# The correct -march=<architecture> flag will also generate much better code
+#  on newer architectures.
+CFLAGS = -Wall -Wno-parentheses
+CFLAGS += -DOC_X86ASM
+CFLAGS += -O3 -fomit-frame-pointer -fforce-addr -finline-functions
+#CFLAGS += -ftree-vectorize -ftree-vectorizer-verbose=9
+#CFLAGS += -march=core2
+# The -g flag will generally include debugging information.
+#CFLAGS += -g
+# Libraries to link with, and the location of library files.
+# Add -lpng -lz if you want to use -DOC_DUMP_IMAGES.
+LIBS = -logg -lvorbis -lvorbisenc `sdl-config --libs`
+
+# ANYTHING BELOW THIS LINE PROBABLY DOES NOT NEED EDITING
+CINCLUDE := -I../include ${CINCLUDE}
+LIBSRCDIR = ../lib
+BINSRCDIR = ../examples
+WORKDIR = objs
+
+# C source file lists
+
+LIBTHEORABASE_CHEADERS = \
+apiwrapper.h \
+dct.h \
+idct.h \
+huffman.h \
+internal.h \
+ocintrin.h \
+quant.h \
+../include/theora/theora.h \
+
+LIBTHEORADEC_CSOURCES = \
+apiwrapper.c \
+decapiwrapper.c \
+decinfo.c \
+decode.c \
+dequant.c \
+fragment.c \
+huffdec.c \
+idct.c \
+info.c \
+internal.c \
+quant.c \
+state.c \
+$(if $(findstring -DOC_X86ASM,${CFLAGS}), \
+x86/mmxstate.c \
+x86/x86state.c \
+x86/mmxidct.c \
+x86/mmxfrag.c \
+x86/cpu.c \
+)
+
+LIBTHEORADEC_CHEADERS =   \
+${LIBTHEORABASE_CHEADERS} \
+decint.h \
+dequant.h \
+huffdec.h \
+
+LIBTHEORAENC_CSOURCES = \
+bitrate.c \
+encapiwrapper.c \
+encinfo.c \
+encode.c \
+enquant.c \
+fdct.c \
+huffenc.c \
+mcenc.c \
+encmsc.c \
+encvbr.c \
+impmap.c \
+psych.c \
+
+LIBTHEORAENC_CHEADERS =   \
+${LIBTHEORABASE_CHEADERS} \
+encint.h \
+enquant.h \
+fdct.h \
+huffenc.h \
+encvbr.h \
+psych.h \
+
+DUMP_VIDEO_CSOURCES = dump_video.c
+ENCODER_EXAMPLE_CSOURCES = encoder_example.c
+PLAYER_EXAMPLE_CSOURCES = player_example.c
+#rehuff links staticaly directly to these objects, since it uses symbols which
+# we may not want to publicly export from the libraries.
+#This is pretty ugly; feel free to try to clean it up.
+REHUFF_EXAMPLE_CSOURCES = rehuff.c
+REHUFF_CSOURCES = \
+decinfo.c \
+decode.c \
+dequant.c \
+encinfo.c \
+enquant.c \
+fragment.c \
+huffdec.c \
+huffenc.c \
+idct.c \
+info.c \
+internal.c \
+quant.c \
+recode.c \
+state.c \
+$(if $(findstring -DOC_X86ASM,${CFLAGS}), \
+x86/mmxstate.c \
+x86/x86state.c \
+x86/mmxidct.c \
+x86/mmxfrag.c \
+x86/cpu.c \
+)
+
+# Create object file list.
+LIBTHEORADEC_OBJS:= ${LIBTHEORADEC_CSOURCES:%.c=${WORKDIR}/%.o}
+LIBTHEORAENC_OBJS:= ${LIBTHEORAENC_CSOURCES:%.c=${WORKDIR}/%.o}
+DUMP_VIDEO_OBJS:= ${DUMP_VIDEO_CSOURCES:%.c=${WORKDIR}/%.o}
+ENCODER_EXAMPLE_OBJS:= ${ENCODER_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
+PLAYER_EXAMPLE_OBJS:= ${PLAYER_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
+REHUFF_EXAMPLE_OBJS:= ${REHUFF_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o} \
+ ${REHUFF_CSOURCES:%.c=${WORKDIR}/%.o}
+ALL_OBJS:= ${LIBTHEORADEC_OBJS} ${LIBTHEORAENC_OBJS} \
+ ${DUMP_VIDEO_OBJS} ${ENCODER_EXAMPLE_OBJS} ${PLAYER_EXAMPLE_OBJS} \
+ ${REHUFF_EXAMPLE_OBJS}
+# Create the dependency file list
+ALL_DEPS:= ${ALL_OBJS:%.o=%.d}
+# Prepend source path to file names.
+LIBTHEORADEC_CSOURCES:= ${LIBTHEORADEC_CSOURCES:%=${LIBSRCDIR}/%}
+LIBTHEORADEC_CHEADERS:= ${LIBTHEORADEC_CHEADERS:%=${LIBSRCDIR}/%}
+LIBTHEORAENC_CSOURCES:= ${LIBTHEORAENC_CSOURCES:%=${LIBSRCDIR}/%}
+LIBTHEORAENC_CHEADERS:= ${LIBTHEORAENC_CHEADERS:%=${LIBSRCDIR}/%}
+DUMP_VIDEO_CSOURCES:= ${DUMP_VIDEO_CSOURCES:%=${BINSRCDIR}/%}
+ENCODER_EXAMPLE_CSOURCES:= ${ENCODER_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
+PLAYER_EXAMPLE_CSOURCES:= ${PLAYER_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
+REHUFF_EXAMPLE_CSOURCES:= ${REHUFF_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%} \
+ ${REHUFF_CSOURCES:%=${LIBSRCDIR}/%}
+ALL_CSOURCES:= ${LIBTHEORADEC_CSOURCES} ${LIBTHEORAENC_CSOURCES} \
+ ${DUMP_VIDEO_CSOURCES} ${ENCODER_EXAMPLE_CSOURCES} \
+ ${PLAYER_EXAMPLE_CSOURCES} ${REHUFF_EXAMPLE_CSOURCES}
+# Prepand target path to file names.
+LIBTHEORADEC_TARGET:= ${TARGETLIBDIR}/${LIBTHEORADEC_TARGET}
+LIBTHEORAENC_TARGET:= ${TARGETLIBDIR}/${LIBTHEORAENC_TARGET}
+DUMP_VIDEO_TARGET:= ${TARGETBINDIR}/${DUMP_VIDEO_TARGET}
+ENCODER_EXAMPLE_TARGET:= ${TARGETBINDIR}/${ENCODER_EXAMPLE_TARGET}
+PLAYER_EXAMPLE_TARGET:= ${TARGETBINDIR}/${PLAYER_EXAMPLE_TARGET}
+REHUFF_EXAMPLE_TARGET:= ${TARGETBINDIR}/${REHUFF_EXAMPLE_TARGET}
+ALL_TARGETS:= ${LIBTHEORADEC_TARGET} ${LIBTHEORAENC_TARGET} \
+ ${DUMP_VIDEO_TARGET} ${ENCODER_EXAMPLE_TARGET} ${PLAYER_EXAMPLE_TARGET} \
+ ${REHUFF_EXAMPLE_TARGET}
+
+# Targets:
+# Everything (default)
+all: ${ALL_TARGETS}
+
+# libtheoradec
+${LIBTHEORADEC_TARGET}: ${LIBTHEORADEC_OBJS}
+	mkdir -p ${TARGETLIBDIR}
+	ar cqs $@ ${LIBTHEORADEC_OBJS}
+# libtheoraenc
+${LIBTHEORAENC_TARGET}: ${LIBTHEORAENC_OBJS}
+	mkdir -p ${TARGETLIBDIR}
+	ar cqs $@ ${LIBTHEORAENC_OBJS}
+
+# dump_video
+${DUMP_VIDEO_TARGET}: ${DUMP_VIDEO_OBJS} ${LIBTHEORADEC_TARGET}
+	mkdir -p ${TARGETBINDIR}
+	${CC} ${CFLAGS} -o $@ ${DUMP_VIDEO_OBJS} ${LIBS} \
+         ${LIBTHEORADEC_TARGET}
+
+# encoder_example
+${ENCODER_EXAMPLE_TARGET}: ${ENCODER_EXAMPLE_OBJS} ${LIBTHEORADEC_TARGET} \
+                            ${LIBTHEORAENC_TARGET}
+	mkdir -p ${TARGETBINDIR}
+	${CC} ${CFLAGS} -o $@ ${ENCODER_EXAMPLE_OBJS} ${LIBS} \
+         ${LIBTHEORAENC_TARGET} ${LIBTHEORADEC_TARGET}
+
+# player_example
+${PLAYER_EXAMPLE_TARGET}: ${PLAYER_EXAMPLE_OBJS} ${LIBTHEORADEC_TARGET}
+	mkdir -p ${TARGETBINDIR}
+	${CC} ${CFLAGS} -o $@ ${PLAYER_EXAMPLE_OBJS} ${LIBS} \
+         ${LIBTHEORADEC_TARGET}
+
+# rehuff
+${REHUFF_EXAMPLE_TARGET}: ${REHUFF_EXAMPLE_OBJS}
+	mkdir -p ${TARGETBINDIR}
+	${CC} ${CFLAGS} -o $@ ${REHUFF_EXAMPLE_OBJS} ${LIBS}
+
+# Assembly listing
+ALL_ASM := ${ALL_OBJS:%.o=%.s}
+asm: ${ALL_ASM}
+
+# Remove all targets.
+clean:
+	-rm ${ALL_OBJS} ${ALL_DEPS} ${ALL_TARGETS}
+	-rmdir ${WORKDIR}
+
+# Make everything depend on changes in the Makefile
+${ALL_OBJS} ${ALL_DEPS} ${ALL_TARGETS} ${ALL_ASM} : Makefile
+
+# Specify which targets are phony for GNU make
+.PHONY : all clean
+
+# Rules
+${WORKDIR}/%.d : ${LIBSRCDIR}/%.c
+	mkdir -p ${dir $@}
+	${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
+${WORKDIR}/%.d : ${BINSRCDIR}/%.c
+	mkdir -p ${dir $@}
+	${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
+${WORKDIR}/%.s : ${LIBSRCDIR}/%.c
+	mkdir -p ${dir $@}
+	${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
+${WORKDIR}/%.o : ${LIBSRCDIR}/%.c
+	mkdir -p ${dir $@}
+	${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
+${WORKDIR}/%.s : ${BINSRCDIR}/%.c
+	mkdir -p ${dir $@}
+	${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
+${WORKDIR}/%.o : ${BINSRCDIR}/%.c
+	mkdir -p ${dir $@}
+	${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
+
+# Include header file dependencies
+-include ${ALL_DEPS}

Added: trunk/theora-exp/win32/VS2005/libtheora-exp_dec/libtheora-exp_dec.vcproj
===================================================================
--- trunk/theora-exp/win32/VS2005/libtheora-exp_dec/libtheora-exp_dec.vcproj	                        (rev 0)
+++ trunk/theora-exp/win32/VS2005/libtheora-exp_dec/libtheora-exp_dec.vcproj	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,937 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libtheora-exp_dec"
+	ProjectGUID="{A95E7EE6-21EB-4D62-A26F-95A2F5F069C5}"
+	RootNamespace="libtheoraexp_dec"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+		<Platform
+			Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_WM5_PPC_ARM|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug_WM5_PPC_ARM|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_WM5_PPC_ARM|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug_WM5_PPC_ARM|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_WM5_PPC_ARM|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;$(ARCHFAM);$(_ARCHFAM_)"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug_WM5_PPC_ARM|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;$(ARCHFAM);$(_ARCHFAM_)"
+				MinimalRebuild="true"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\lib\decinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\decode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dequant.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\fragment.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffdec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\idct.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\info.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\internal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\quant.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\state.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\..\include\theora\codec.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\decint.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dequant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffdec.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffman.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\idct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\internal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\ocintrin.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\quant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\include\theora\theoradec.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+		<File
+			RelativePath=".\ReadMe.txt"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Added: trunk/theora-exp/win32/VS2005/libtheora-exp_enc/libtheora-exp_enc.vcproj
===================================================================
--- trunk/theora-exp/win32/VS2005/libtheora-exp_enc/libtheora-exp_enc.vcproj	                        (rev 0)
+++ trunk/theora-exp/win32/VS2005/libtheora-exp_enc/libtheora-exp_enc.vcproj	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libtheora-exp_enc"
+	ProjectGUID="{DFD5C331-7555-4FE7-A861-A6A753106769}"
+	RootNamespace="libtheoraexp_enc"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\lib\bitrate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encmsc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encvbr.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\enquant.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\fdct.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffenc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\impmap.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\psych.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\..\include\theora\codec.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encint.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encvbr.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\enquant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\fdct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffenc.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffman.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\internal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\ocintrin.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\psych.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\quant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\include\theora\theoraenc.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+		<File
+			RelativePath=".\ReadMe.txt"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Added: trunk/theora-exp/win32/VS2008/libtheora-exp_dec/libtheora-exp_dec.vcproj
===================================================================
--- trunk/theora-exp/win32/VS2008/libtheora-exp_dec/libtheora-exp_dec.vcproj	                        (rev 0)
+++ trunk/theora-exp/win32/VS2008/libtheora-exp_dec/libtheora-exp_dec.vcproj	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,677 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="libtheora-exp_dec"
+	ProjectGUID="{A95E7EE6-21EB-4D62-A26F-95A2F5F069C5}"
+	RootNamespace="libtheoraexp_dec"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_WM5_PPC_ARM|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug_WM5_PPC_ARM|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release_WM5_PPC_ARM|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;NDEBUG;_LIB;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;$(ARCHFAM);$(_ARCHFAM_)"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug_WM5_PPC_ARM|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			OutputDirectory="$(SolutionDir)Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="1"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				ExecutionBucket="7"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;_DEBUG;_LIB;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;$(ARCHFAM);$(_ARCHFAM_)"
+				MinimalRebuild="true"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\lib\decinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\decode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dequant.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\fragment.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffdec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\idct.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\info.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\internal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\quant.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\state.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\..\include\theora\codec.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\decint.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dequant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffdec.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffman.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\idct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\internal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\ocintrin.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\quant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\include\theora\theoradec.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+		<File
+			RelativePath=".\ReadMe.txt"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Added: trunk/theora-exp/win32/VS2008/libtheora-exp_enc/libtheora-exp_enc.vcproj
===================================================================
--- trunk/theora-exp/win32/VS2008/libtheora-exp_enc/libtheora-exp_enc.vcproj	                        (rev 0)
+++ trunk/theora-exp/win32/VS2008/libtheora-exp_enc/libtheora-exp_enc.vcproj	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="libtheora-exp_enc"
+	ProjectGUID="{DFD5C331-7555-4FE7-A861-A6A753106769}"
+	RootNamespace="libtheoraexp_enc"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\..\..\include;..\..\..\..\libogg\include"
+				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_BIND_TO_CURRENT_CRT_VERSION;WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\lib\bitrate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encmsc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encvbr.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\enquant.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\fdct.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffenc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\impmap.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\psych.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\..\include\theora\codec.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\dct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encint.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\encvbr.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\enquant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\fdct.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffenc.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\huffman.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\internal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\ocintrin.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\psych.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\lib\quant.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\include\theora\theoraenc.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+		<File
+			RelativePath=".\ReadMe.txt"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Added: trunk/theora-exp/win32/compatibility/README.txt
===================================================================
--- trunk/theora-exp/win32/compatibility/README.txt	                        (rev 0)
+++ trunk/theora-exp/win32/compatibility/README.txt	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1 @@
+GetOpt routines ported from BSD-licensed sources, see comments.
\ No newline at end of file

Added: trunk/theora-exp/win32/compatibility/getopt.c
===================================================================
--- trunk/theora-exp/win32/compatibility/getopt.c	                        (rev 0)
+++ trunk/theora-exp/win32/compatibility/getopt.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 1987, 1993, 1994
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getopt.c	8.3 (Berkeley) 4/27/95";
+#endif /* LIBC_SCCS and not lint
+#include <sys/cdefs.h>
+//__FBSDID("$FreeBSD: src/lib/libc/stdlib/getopt.c,v 1.6 2002/03/29 22:43:42 markm Exp $");
+
+#include "namespace.h"*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+/*#include "un-namespace.h"*/
+
+/*#include "libc_private.h"*/
+
+int	opterr = 1,		/* if error message should be printed */
+	optind = 1,		/* index into parent argv vector */
+	optopt,			/* character checked for validity */
+	optreset;		/* reset getopt */
+char	*optarg;		/* argument associated with option */
+
+#define	BADCH	(int)'?'
+#define	BADARG	(int)':'
+#define	EMSG	""
+
+/*
+ * getopt --
+ *	Parse argc/argv argument vector.
+ */
+int
+getopt(nargc, nargv, ostr)
+	int nargc;
+	char * const *nargv;
+	const char *ostr;
+{
+	static char *place = EMSG;		/* option letter processing */
+	char *oli;				/* option letter list index */
+
+	if (optreset || !*place) {		/* update scanning pointer */
+		optreset = 0;
+		if (optind >= nargc || *(place = nargv[optind]) != '-') {
+			place = EMSG;
+			return (-1);
+		}
+		if (place[1] && *++place == '-') {	/* found "--" */
+			++optind;
+			place = EMSG;
+			return (-1);
+		}
+	}					/* option letter okay? */
+	if ((optopt = (int)*place++) == (int)':' ||
+	    !(oli = strchr(ostr, optopt))) {
+		/*
+		 * if the user didn't specify '-' as an option,
+		 * assume it means -1.
+		 */
+		if (optopt == (int)'-')
+			return (-1);
+		if (!*place)
+			++optind;
+		if (opterr && *ostr != ':' && optopt != BADCH)
+			(void)fprintf(stderr, "%s: illegal option -- %c\n",
+			    "progname", optopt);
+		return (BADCH);
+	}
+	if (*++oli != ':') {			/* don't need argument */
+		optarg = NULL;
+		if (!*place)
+			++optind;
+	}
+	else {					/* need an argument */
+		if (*place)			/* no white space */
+			optarg = place;
+		else if (nargc <= ++optind) {	/* no arg */
+			place = EMSG;
+			if (*ostr == ':')
+				return (BADARG);
+			if (opterr)
+				(void)fprintf(stderr,
+				    "%s: option requires an argument -- %c\n",
+				    "progname", optopt);
+			return (BADCH);
+		}
+	 	else				/* white space */
+			optarg = nargv[optind];
+		place = EMSG;
+		++optind;
+	}
+	return (optopt);			/* dump back option letter */
+}

Added: trunk/theora-exp/win32/compatibility/getopt.h
===================================================================
--- trunk/theora-exp/win32/compatibility/getopt.h	                        (rev 0)
+++ trunk/theora-exp/win32/compatibility/getopt.h	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,110 @@
+/*      $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $    */
+/*      $FreeBSD: src/include/getopt.h,v 1.1 2002/09/29 04:14:30 eric Exp $ */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Dieter Baron and Thomas Klausner.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _GETOPT_H_
+#define _GETOPT_H_
+
+#ifdef _WIN32
+/* from <sys/cdefs.h> */
+# ifdef  __cplusplus
+#  define __BEGIN_DECLS  extern "C" {
+#  define __END_DECLS    }
+# else
+#  define __BEGIN_DECLS
+#  define __END_DECLS
+# endif
+# define __P(args)      args
+#endif
+
+/*#ifndef _WIN32
+#include <sys/cdefs.h>
+#include <unistd.h>
+#endif*/
+
+#ifdef _WIN32
+# if !defined(GETOPT_API)
+#  define GETOPT_API __declspec(dllimport)
+# endif
+#endif
+
+/*
+ * Gnu like getopt_long() and BSD4.4 getsubopt()/optreset extensions
+ */
+#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
+#define no_argument        0
+#define required_argument  1
+#define optional_argument  2
+
+struct option {
+        /* name of long option */
+        const char *name;
+        /*
+         * one of no_argument, required_argument, and optional_argument:
+         * whether option takes an argument
+         */
+        int has_arg;
+        /* if not NULL, set *flag to val when option found */
+        int *flag;
+        /* if flag not NULL, value to set *flag to; else return value */
+        int val;
+};
+
+__BEGIN_DECLS
+GETOPT_API int getopt_long __P((int, char * const *, const char *,
+    const struct option *, int *));
+__END_DECLS
+#endif
+
+#ifdef _WIN32
+/* These are global getopt variables */
+__BEGIN_DECLS
+
+GETOPT_API extern int   opterr,   /* if error message should be printed */
+                        optind,   /* index into parent argv vector */
+                        optopt,   /* character checked for validity */
+                        optreset; /* reset getopt */
+GETOPT_API extern char* optarg;   /* argument associated with option */
+
+/* Original getopt */
+GETOPT_API int getopt __P((int, char * const *, const char *));
+
+__END_DECLS
+#endif
+ 
+#endif /* !_GETOPT_H_ */

Added: trunk/theora-exp/win32/compatibility/getopt_long.c
===================================================================
--- trunk/theora-exp/win32/compatibility/getopt_long.c	                        (rev 0)
+++ trunk/theora-exp/win32/compatibility/getopt_long.c	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,547 @@
+/*	$NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $	*/
+/*	$FreeBSD: src/lib/libc/stdlib/getopt_long.c,v 1.2 2002/10/16 22:18:42 alfred Exp $ */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Dieter Baron and Thomas Klausner.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <getopt.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+
+/* Windows needs warnx().  We change the definition though:
+ *  1. (another) global is defined, opterrmsg, which holds the error message
+ *  2. errors are always printed out on stderr w/o the program name
+ * Note that opterrmsg always gets set no matter what opterr is set to.  The
+ * error message will not be printed if opterr is 0 as usual.
+ */
+
+#include <stdio.h>
+#include <stdarg.h>
+
+GETOPT_API extern char opterrmsg[128];
+char opterrmsg[128]; /* last error message is stored here */
+
+static void warnx(int print_error, const char *fmt, ...)
+{
+	va_list ap;
+	va_start(ap, fmt);
+	if (fmt != NULL)
+		_vsnprintf(opterrmsg, 128, fmt, ap);
+	else
+		opterrmsg[0]='\0';
+	va_end(ap);
+	if (print_error) {
+		fprintf(stderr, opterrmsg);
+		fprintf(stderr, "\n");
+	}
+}
+
+#endif /*_WIN32*/
+
+/* not part of the original file */
+#ifndef _DIAGASSERT
+#define _DIAGASSERT(X)
+#endif
+
+#if HAVE_CONFIG_H && !HAVE_GETOPT_LONG && !HAVE_DECL_OPTIND
+#define REPLACE_GETOPT
+#endif
+
+#ifdef REPLACE_GETOPT
+#ifdef __weak_alias
+__weak_alias(getopt,_getopt)
+#endif
+int	opterr = 1;		/* if error message should be printed */
+int	optind = 1;		/* index into parent argv vector */
+int	optopt = '?';		/* character checked for validity */
+int	optreset;		/* reset getopt */
+char    *optarg;		/* argument associated with option */
+#elif HAVE_CONFIG_H && !HAVE_DECL_OPTRESET
+static int optreset;
+#endif
+
+#ifdef __weak_alias
+__weak_alias(getopt_long,_getopt_long)
+#endif
+
+#if !HAVE_GETOPT_LONG
+#define IGNORE_FIRST	(*options == '-' || *options == '+')
+#define PRINT_ERROR	((opterr) && ((*options != ':') \
+				      || (IGNORE_FIRST && options[1] != ':')))
+#define IS_POSIXLY_CORRECT (getenv("POSIXLY_CORRECT") != NULL)
+#define PERMUTE         (!IS_POSIXLY_CORRECT && !IGNORE_FIRST)
+/* XXX: GNU ignores PC if *options == '-' */
+#define IN_ORDER        (!IS_POSIXLY_CORRECT && *options == '-')
+
+/* return values */
+#define	BADCH	(int)'?'
+#define	BADARG		((IGNORE_FIRST && options[1] == ':') \
+			 || (*options == ':') ? (int)':' : (int)'?')
+#define INORDER (int)1
+
+#define	EMSG	""
+
+static int getopt_internal(int, char * const *, const char *);
+static int gcd(int, int);
+static void permute_args(int, int, int, char * const *);
+
+static char *place = EMSG; /* option letter processing */
+
+/* XXX: set optreset to 1 rather than these two */
+static int nonopt_start = -1; /* first non option argument (for permute) */
+static int nonopt_end = -1;   /* first option after non options (for permute) */
+
+/* Error messages */
+static const char recargchar[] = "option requires an argument -- %c";
+static const char recargstring[] = "option requires an argument -- %s";
+static const char ambig[] = "ambiguous option -- %.*s";
+static const char noarg[] = "option doesn't take an argument -- %.*s";
+static const char illoptchar[] = "unknown option -- %c";
+static const char illoptstring[] = "unknown option -- %s";
+
+
+/*
+ * Compute the greatest common divisor of a and b.
+ */
+static int
+gcd(a, b)
+	int a;
+	int b;
+{
+	int c;
+
+	c = a % b;
+	while (c != 0) {
+		a = b;
+		b = c;
+		c = a % b;
+	}
+	   
+	return b;
+}
+
+/*
+ * Exchange the block from nonopt_start to nonopt_end with the block
+ * from nonopt_end to opt_end (keeping the same order of arguments
+ * in each block).
+ */
+static void
+permute_args(panonopt_start, panonopt_end, opt_end, nargv)
+	int panonopt_start;
+	int panonopt_end;
+	int opt_end;
+	char * const *nargv;
+{
+	int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos;
+	char *swap;
+
+	_DIAGASSERT(nargv != NULL);
+
+	/*
+	 * compute lengths of blocks and number and size of cycles
+	 */
+	nnonopts = panonopt_end - panonopt_start;
+	nopts = opt_end - panonopt_end;
+	ncycle = gcd(nnonopts, nopts);
+	cyclelen = (opt_end - panonopt_start) / ncycle;
+
+	for (i = 0; i < ncycle; i++) {
+		cstart = panonopt_end+i;
+		pos = cstart;
+		for (j = 0; j < cyclelen; j++) {
+			if (pos >= panonopt_end)
+				pos -= nnonopts;
+			else
+				pos += nopts;
+			swap = nargv[pos];
+			/* LINTED const cast */
+			((char **) nargv)[pos] = nargv[cstart];
+			/* LINTED const cast */
+			((char **)nargv)[cstart] = swap;
+		}
+	}
+}
+
+/*
+ * getopt_internal --
+ *	Parse argc/argv argument vector.  Called by user level routines.
+ *  Returns -2 if -- is found (can be long option or end of options marker).
+ */
+static int
+getopt_internal(nargc, nargv, options)
+	int nargc;
+	char * const *nargv;
+	const char *options;
+{
+	char *oli;				/* option letter list index */
+	int optchar;
+
+	_DIAGASSERT(nargv != NULL);
+	_DIAGASSERT(options != NULL);
+
+	optarg = NULL;
+
+	/*
+	 * XXX Some programs (like rsyncd) expect to be able to
+	 * XXX re-initialize optind to 0 and have getopt_long(3)
+	 * XXX properly function again.  Work around this braindamage.
+	 */
+	if (optind == 0)
+		optind = 1;
+
+	if (optreset)
+		nonopt_start = nonopt_end = -1;
+start:
+	if (optreset || !*place) {		/* update scanning pointer */
+		optreset = 0;
+		if (optind >= nargc) {          /* end of argument vector */
+			place = EMSG;
+			if (nonopt_end != -1) {
+				/* do permutation, if we have to */
+				permute_args(nonopt_start, nonopt_end,
+				    optind, nargv);
+				optind -= nonopt_end - nonopt_start;
+			}
+			else if (nonopt_start != -1) {
+				/*
+				 * If we skipped non-options, set optind
+				 * to the first of them.
+				 */
+				optind = nonopt_start;
+			}
+			nonopt_start = nonopt_end = -1;
+			return -1;
+		}
+		if ((*(place = nargv[optind]) != '-')
+		    || (place[1] == '\0')) {    /* found non-option */
+			place = EMSG;
+			if (IN_ORDER) {
+				/*
+				 * GNU extension: 
+				 * return non-option as argument to option 1
+				 */
+				optarg = nargv[optind++];
+				return INORDER;
+			}
+			if (!PERMUTE) {
+				/*
+				 * if no permutation wanted, stop parsing
+				 * at first non-option
+				 */
+				return -1;
+			}
+			/* do permutation */
+			if (nonopt_start == -1)
+				nonopt_start = optind;
+			else if (nonopt_end != -1) {
+				permute_args(nonopt_start, nonopt_end,
+				    optind, nargv);
+				nonopt_start = optind -
+				    (nonopt_end - nonopt_start);
+				nonopt_end = -1;
+			}
+			optind++;
+			/* process next argument */
+			goto start;
+		}
+		if (nonopt_start != -1 && nonopt_end == -1)
+			nonopt_end = optind;
+		if (place[1] && *++place == '-') {	/* found "--" */
+			place++;
+			return -2;
+		}
+	}
+	if ((optchar = (int)*place++) == (int)':' ||
+	    (oli = strchr(options + (IGNORE_FIRST ? 1 : 0), optchar)) == NULL) {
+		/* option letter unknown or ':' */
+		if (!*place)
+			++optind;
+#ifndef _WIN32
+		if (PRINT_ERROR)
+			warnx(illoptchar, optchar);
+#else
+			warnx(PRINT_ERROR, illoptchar, optchar);
+#endif
+		optopt = optchar;
+		return BADCH;
+	}
+	if (optchar == 'W' && oli[1] == ';') {		/* -W long-option */
+		/* XXX: what if no long options provided (called by getopt)? */
+		if (*place) 
+			return -2;
+
+		if (++optind >= nargc) {	/* no arg */
+			place = EMSG;
+#ifndef _WIN32
+			if (PRINT_ERROR)
+				warnx(recargchar, optchar);
+#else
+				warnx(PRINT_ERROR, recargchar, optchar);
+#endif
+			optopt = optchar;
+			return BADARG;
+		} else				/* white space */
+			place = nargv[optind];
+		/*
+		 * Handle -W arg the same as --arg (which causes getopt to
+		 * stop parsing).
+		 */
+		return -2;
+	}
+	if (*++oli != ':') {			/* doesn't take argument */
+		if (!*place)
+			++optind;
+	} else {				/* takes (optional) argument */
+		optarg = NULL;
+		if (*place)			/* no white space */
+			optarg = place;
+		/* XXX: disable test for :: if PC? (GNU doesn't) */
+		else if (oli[1] != ':') {	/* arg not optional */
+			if (++optind >= nargc) {	/* no arg */
+				place = EMSG;
+#ifndef _WIN32
+				if (PRINT_ERROR)
+					warnx(recargchar, optchar);
+#else
+					warnx(PRINT_ERROR, recargchar, optchar);
+#endif
+				optopt = optchar;
+				return BADARG;
+			} else
+				optarg = nargv[optind];
+		}
+		place = EMSG;
+		++optind;
+	}
+	/* dump back option letter */
+	return optchar;
+}
+
+#ifdef REPLACE_GETOPT
+/*
+ * getopt --
+ *	Parse argc/argv argument vector.
+ *
+ * [eventually this will replace the real getopt]
+ */
+int
+getopt(nargc, nargv, options)
+	int nargc;
+	char * const *nargv;
+	const char *options;
+{
+	int retval;
+
+	_DIAGASSERT(nargv != NULL);
+	_DIAGASSERT(options != NULL);
+
+	if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
+		++optind;
+		/*
+		 * We found an option (--), so if we skipped non-options,
+		 * we have to permute.
+		 */
+		if (nonopt_end != -1) {
+			permute_args(nonopt_start, nonopt_end, optind,
+				       nargv);
+			optind -= nonopt_end - nonopt_start;
+		}
+		nonopt_start = nonopt_end = -1;
+		retval = -1;
+	}
+	return retval;
+}
+#endif
+
+/*
+ * getopt_long --
+ *	Parse argc/argv argument vector.
+ */
+int
+getopt_long(nargc, nargv, options, long_options, idx)
+	int nargc;
+	char * const *nargv;
+	const char *options;
+	const struct option *long_options;
+	int *idx;
+{
+	int retval;
+
+	_DIAGASSERT(nargv != NULL);
+	_DIAGASSERT(options != NULL);
+	_DIAGASSERT(long_options != NULL);
+	/* idx may be NULL */
+
+	if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
+		char *current_argv, *has_equal;
+		size_t current_argv_len;
+		int i, match;
+
+		current_argv = place;
+		match = -1;
+
+		optind++;
+		place = EMSG;
+
+		if (*current_argv == '\0') {		/* found "--" */
+			/*
+			 * We found an option (--), so if we skipped
+			 * non-options, we have to permute.
+			 */
+			if (nonopt_end != -1) {
+				permute_args(nonopt_start, nonopt_end,
+				    optind, nargv);
+				optind -= nonopt_end - nonopt_start;
+			}
+			nonopt_start = nonopt_end = -1;
+			return -1;
+		}
+		if ((has_equal = strchr(current_argv, '=')) != NULL) {
+			/* argument found (--option=arg) */
+			current_argv_len = has_equal - current_argv;
+			has_equal++;
+		} else
+			current_argv_len = strlen(current_argv);
+	    
+		for (i = 0; long_options[i].name; i++) {
+			/* find matching long option */
+			if (strncmp(current_argv, long_options[i].name,
+			    current_argv_len))
+				continue;
+
+			if (strlen(long_options[i].name) ==
+			    (unsigned)current_argv_len) {
+				/* exact match */
+				match = i;
+				break;
+			}
+			if (match == -1)		/* partial match */
+				match = i;
+			else {
+				/* ambiguous abbreviation */
+#ifndef _WIN32
+				if (PRINT_ERROR)
+					warnx(ambig, (int)current_argv_len,
+					     current_argv);
+#else
+					warnx(PRINT_ERROR, ambig, (int)current_argv_len,
+					     current_argv);
+#endif
+				optopt = 0;
+				return BADCH;
+			}
+		}
+		if (match != -1) {			/* option found */
+		        if (long_options[match].has_arg == no_argument
+			    && has_equal) {
+#ifndef _WIN32
+				if (PRINT_ERROR)
+					warnx(noarg, (int)current_argv_len,
+					     current_argv);
+#else
+					warnx(PRINT_ERROR, noarg, (int)current_argv_len,
+					     current_argv);
+#endif
+				/*
+				 * XXX: GNU sets optopt to val regardless of
+				 * flag
+				 */
+				if (long_options[match].flag == NULL)
+					optopt = long_options[match].val;
+				else
+					optopt = 0;
+				return BADARG;
+			}
+			if (long_options[match].has_arg == required_argument ||
+			    long_options[match].has_arg == optional_argument) {
+				if (has_equal)
+					optarg = has_equal;
+				else if (long_options[match].has_arg ==
+				    required_argument) {
+					/*
+					 * optional argument doesn't use
+					 * next nargv
+					 */
+					optarg = nargv[optind++];
+				}
+			}
+			if ((long_options[match].has_arg == required_argument)
+			    && (optarg == NULL)) {
+				/*
+				 * Missing argument; leading ':'
+				 * indicates no error should be generated
+				 */
+#ifndef _WIN32
+				if (PRINT_ERROR)
+					warnx(recargstring, current_argv);
+#else
+					warnx(PRINT_ERROR, recargstring, current_argv);
+#endif
+				/*
+				 * XXX: GNU sets optopt to val regardless
+				 * of flag
+				 */
+				if (long_options[match].flag == NULL)
+					optopt = long_options[match].val;
+				else
+					optopt = 0;
+				--optind;
+				return BADARG;
+			}
+		} else {			/* unknown option */
+#ifndef _WIN32
+			if (PRINT_ERROR)
+				warnx(illoptstring, current_argv);
+#else
+				warnx(PRINT_ERROR, illoptstring, current_argv);
+#endif
+			optopt = 0;
+			return BADCH;
+		}
+		if (long_options[match].flag) {
+			*long_options[match].flag = long_options[match].val;
+			retval = 0;
+		} else 
+			retval = long_options[match].val;
+		if (idx)
+			*idx = match;
+	}
+	return retval;
+}
+#endif /* !GETOPT_LONG */

Added: trunk/theora-exp/win32/msvc60/dump_video.dsp
===================================================================
--- trunk/theora-exp/win32/msvc60/dump_video.dsp	                        (rev 0)
+++ trunk/theora-exp/win32/msvc60/dump_video.dsp	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,110 @@
+# Microsoft Developer Studio Project File - Name="dump_video" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=dump_video - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "dump_video.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "dump_video.mak" CFG="dump_video - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "dump_video - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "dump_video - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "dump_video - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_dump_video"
+# PROP Intermediate_Dir "Release_dump_video"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../../../../trunk/ogg/include" /I "../../../../../trunk/vorbis/include" /I "../../include" /I "../compatibility" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D GETOPT_API= /U "OC_444_MODE" /U "OC_422_MODE" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /profile /machine:I386
+
+!ELSEIF  "$(CFG)" == "dump_video - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_dump_video"
+# PROP Intermediate_Dir "Debug_dump_video"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../../../../../trunk/ogg/include" /I "../../../../../trunk/vorbis/include" /I "../../include" /I "../compatibility" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D GETOPT_API= /U "OC_444_MODE" /U "OC_422_MODE" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libpngd.lib zlibd_static.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "dump_video - Win32 Release"
+# Name "dump_video - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\examples\dump_video.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\compatibility\getopt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\compatibility\getopt_long.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project

Added: trunk/theora-exp/win32/msvc60/encoder_example.dsp
===================================================================
--- trunk/theora-exp/win32/msvc60/encoder_example.dsp	                        (rev 0)
+++ trunk/theora-exp/win32/msvc60/encoder_example.dsp	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,110 @@
+# Microsoft Developer Studio Project File - Name="encoder_example" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=encoder_example - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "encoder_example.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "encoder_example.mak" CFG="encoder_example - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "encoder_example - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "encoder_example - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "encoder_example - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_encoder_example"
+# PROP Intermediate_Dir "Release_encoder_example"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../../trunk/ogg/include" /I "../../../../../trunk/vorbis/include" /I "../../include" /I "../compatibility" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D GETOPT_API= /U "OC_444_MODE" /U "OC_422_MODE" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF  "$(CFG)" == "encoder_example - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_encoder_example"
+# PROP Intermediate_Dir "Debug_encoder_example"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../../../../../trunk/ogg/include" /I "../../../../../trunk/vorbis/include" /I "../../include" /I "../compatibility" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D GETOPT_API= /U "OC_444_MODE" /U "OC_422_MODE" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libpngd.lib zlibd_static.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "encoder_example - Win32 Release"
+# Name "encoder_example - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\examples\encoder_example.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\compatibility\getopt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\compatibility\getopt_long.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project

Added: trunk/theora-exp/win32/msvc60/theora_static.dsw
===================================================================
--- trunk/theora-exp/win32/msvc60/theora_static.dsw	                        (rev 0)
+++ trunk/theora-exp/win32/msvc60/theora_static.dsw	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,152 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "dump_video"=".\dump_video.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name ogg_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name vorbis_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name theorabase_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name theoradec_static
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "encoder_example"=".\encoder_example.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name ogg_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name vorbisenc_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name vorbis_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name theorabase_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name theoraenc_static
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ogg_static"="..\..\..\..\..\trunk\ogg\win32\ogg_static.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "theorabase_static"=".\theorabase_static.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "theoradec_static"=".\theoradec_static.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name ogg_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name theorabase_static
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "theoraenc_static"=".\theoraenc_static.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name ogg_static
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name theorabase_static
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "vorbis_static"="..\..\..\..\..\trunk\vorbis\win32\vorbis_static.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "vorbisenc_static"="..\..\..\..\..\trunk\vorbis\win32\vorbisenc_static.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+

Added: trunk/theora-exp/win32/msvc60/theorabase_static.dsp
===================================================================
--- trunk/theora-exp/win32/msvc60/theorabase_static.dsp	                        (rev 0)
+++ trunk/theora-exp/win32/msvc60/theorabase_static.dsp	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,148 @@
+# Microsoft Developer Studio Project File - Name="theorabase_static" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=theorabase_static - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "theorabase_static.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "theorabase_static.mak" CFG="theorabase_static - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "theorabase_static - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "theorabase_static - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "theorabase_static - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_theorabase_static"
+# PROP Intermediate_Dir "Release_theorabase_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../../../../trunk/ogg/include" /I "../../include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /U "OC_DUMP_IMAGES" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF  "$(CFG)" == "theorabase_static - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_theorabase_static"
+# PROP Intermediate_Dir "Debug_theorabase_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../../../../../trunk/ogg/include" /I "../../include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /U "OC_DUMP_IMAGES" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Debug_theorabase_static\theorabase_static_d.lib"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "theorabase_static - Win32 Release"
+# Name "theorabase_static - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\lib\fragment.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\idct.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\info.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\internal.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\quant.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\state.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\include\theora\codec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\dct.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\huffman.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\idct.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\internal.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\ocintrin.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\quant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\theora\theora.h
+# End Source File
+# End Group
+# End Target
+# End Project

Added: trunk/theora-exp/win32/msvc60/theoradec_static.dsp
===================================================================
--- trunk/theora-exp/win32/msvc60/theoradec_static.dsp	                        (rev 0)
+++ trunk/theora-exp/win32/msvc60/theoradec_static.dsp	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,148 @@
+# Microsoft Developer Studio Project File - Name="theoradec_static" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=theoradec_static - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "theoradec_static.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "theoradec_static.mak" CFG="theoradec_static - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "theoradec_static - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "theoradec_static - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "theoradec_static - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_theoradec_static"
+# PROP Intermediate_Dir "Release_theoradec_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../../../../trunk/ogg/include" /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /U "OC_DUMP_IMAGES" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF  "$(CFG)" == "theoradec_static - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_theoradec_static"
+# PROP Intermediate_Dir "Debug_theoradec_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../../../../../trunk/ogg/include" /I "../../include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /U "OC_DUMP_IMAGES" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Debug_theoradec_static\theoradec_static_d.lib"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "theoradec_static - Win32 Release"
+# Name "theoradec_static - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\lib\decinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\decode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\dequant.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\huffdec.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\include\theora\codec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\decint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\dequant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\huffdec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\huffman.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\idct.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\internal.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\ocintrin.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\quant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\theora\theoradec.h
+# End Source File
+# End Group
+# End Target
+# End Project

Added: trunk/theora-exp/win32/msvc60/theoraenc_static.dsp
===================================================================
--- trunk/theora-exp/win32/msvc60/theoraenc_static.dsp	                        (rev 0)
+++ trunk/theora-exp/win32/msvc60/theoraenc_static.dsp	2009-09-25 21:45:30 UTC (rev 16580)
@@ -0,0 +1,188 @@
+# Microsoft Developer Studio Project File - Name="theoraenc_static" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=theoraenc_static - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "theoraenc_static.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "theoraenc_static.mak" CFG="theoraenc_static - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "theoraenc_static - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "theoraenc_static - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "theoraenc_static - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_theoraenc_static"
+# PROP Intermediate_Dir "Release_theoraenc_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../../../../trunk/ogg/include" /I "../../include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /U "OC_DUMP_IMAGES" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF  "$(CFG)" == "theoraenc_static - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_theoraenc_static"
+# PROP Intermediate_Dir "Debug_theoraenc_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../../../../../trunk/ogg/include" /I "../../include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /U "OC_DUMP_IMAGES" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Debug_theoraenc_static\theoraenc_static_d.lib"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "theoraenc_static - Win32 Release"
+# Name "theoraenc_static - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\lib\bitrate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\encinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\encmsc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\encode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\encvbr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\enquant.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\fdct.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\huffenc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\impmap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\mcenc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\psych.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\include\theora\codec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\dct.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\encint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\encvbr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\enquant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\fdct.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\huffenc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\huffman.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\internal.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\ocintrin.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\psych.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\lib\quant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\theora\theoraenc.h
+# End Source File
+# End Group
+# End Target
+# End Project



More information about the commits mailing list