[med-svn] [khmer] 01/01: New upstream version 2.1.2+dfsg

Michael Crusoe misterc-guest at moszumanska.debian.org
Sat Oct 7 17:04:05 UTC 2017


This is an automated email from the git hooks/post-receive script.

misterc-guest pushed a commit to annotated tag upstream/2.1.2+dfsg
in repository khmer.

commit 5744859184e534a7cd484b98fa1cdf1bc069e8b9
Author: Michael R. Crusoe <michael.crusoe at gmail.com>
Date:   Thu Oct 5 09:09:07 2017 -0700

    New upstream version 2.1.2+dfsg
---
 .gitignore                                         |    1 +
 CHANGELOG.md                                       |   18 +
 Doxyfile.in                                        |    6 +-
 MANIFEST.in                                        |    1 +
 Makefile                                           |   52 +-
 doc/dev/a-quick-guide-to-testing.rst               |    2 +-
 doc/dev/codebase-guide.rst                         |    9 +-
 doc/dev/development.rst                            |   48 +-
 doc/dev/guidelines-continued-dev.rst               |   28 +
 doc/requirements.txt                               |    1 +
 examples/c++-api/Makefile                          |   19 +-
 examples/c++-api/bloom.cc                          |    6 +-
 examples/c++-api/consume.cc                        |    6 +-
 examples/c++-api/exact-counting.cc                 |    7 +-
 {lib => include/khmer}/.gitignore                  |    0
 include/khmer/_cpy_countgraph.hh                   |   35 +
 .../khmer/_cpy_counttable.hh                       |   30 +-
 include/khmer/_cpy_graphlabels.hh                  |   87 +
 include/khmer/_cpy_hashgraph.hh                    |  274 +
 include/khmer/_cpy_hashset.hh                      |   73 +
 include/khmer/_cpy_hashtable.hh                    |  145 +
 include/khmer/_cpy_hllcounter.hh                   |   81 +
 include/khmer/_cpy_khmer.hh                        |  114 +
 include/khmer/_cpy_nodegraph.hh                    |   42 +
 .../khmer/_cpy_nodetable.hh                        |   35 +-
 include/khmer/_cpy_readaligner.hh                  |   43 +
 include/khmer/_cpy_readparsers.hh                  |  140 +
 .../khmer/_cpy_smallcountgraph.hh                  |   41 +-
 .../khmer/_cpy_smallcounttable.hh                  |   33 +-
 include/khmer/_cpy_subsetpartition.hh              |   58 +
 include/khmer/_cpy_utils.hh                        |   67 +
 {lib => include/oxli}/.gitignore                   |    0
 {lib => include/oxli}/alphabets.hh                 |    4 +-
 {lib => include/oxli}/assembler.hh                 |    6 +-
 {lib => include/oxli}/hashgraph.hh                 |   12 +-
 {lib => include/oxli}/hashtable.hh                 |  109 +-
 {lib => include/oxli}/hllcounter.hh                |    4 +-
 {lib => include/oxli}/kmer_filters.hh              |    4 +-
 {lib => include/oxli}/kmer_hash.hh                 |    8 +-
 {lib => include/oxli}/labelhash.hh                 |    8 +-
 {lib => include/oxli}/magic                        |    6 +-
 lib/khmer.hh => include/oxli/oxli.hh               |   10 +-
 .../oxli/oxli_exception.hh                         |   50 +-
 {lib => include/oxli}/read_aligner.hh              |   10 +-
 {lib => include/oxli}/read_parsers.hh              |   48 +-
 {lib => include/oxli}/storage.hh                   |   16 +-
 {lib => include/oxli}/subset.hh                    |    4 +-
 {lib => include/oxli}/traversal.hh                 |    4 +-
 khmer/__init__.py                                  |    7 +-
 khmer/_khmer.cc                                    | 4959 ------------
 khmer/_oxli/__init__.py                            |    6 +
 khmer/_oxli/assembly.pxd                           |   75 +
 khmer/_oxli/assembly.pyx                           |  134 +
 khmer/_oxli/graphs.pxd                             |  182 +
 khmer/_oxli/graphs.pyx                             |   20 +
 khmer/_oxli/hashing.pxd                            |   67 +
 khmer/_oxli/hashing.pyx                            |   66 +
 khmer/_oxli/hllcounter.pxd                         |   38 +
 khmer/_oxli/oxli_types.pxd                         |   19 +
 khmer/_oxli/parsing.pxd                            |  164 +
 khmer/_oxli/parsing.pyx                            |  532 ++
 khmer/_oxli/traversal.pxd                          |   19 +
 khmer/_oxli/utils.pxd                              |   14 +
 khmer/_oxli/utils.pyx                              |   42 +
 khmer/_version.py                                  |    6 +-
 khmer/khmer_args.py                                |    5 +-
 khmer/thread_utils.py                              |    1 +
 khmer/utils.py                                     |  119 +-
 oxli/__init__.py                                   |    1 +
 oxli/build_graph.py                                |    1 +
 pytest.ini                                         |    4 +
 scripts/abundance-dist-single.py                   |    3 +-
 scripts/annotate-partitions.py                     |    1 +
 scripts/count-median.py                            |    1 +
 scripts/do-partition.py                            |    1 +
 scripts/extract-partitions.py                      |    1 +
 scripts/fastq-to-fasta.py                          |    1 +
 scripts/filter-abund-single.py                     |    2 +-
 scripts/filter-stoptags.py                         |    1 +
 scripts/find-knots.py                              |    1 +
 scripts/interleave-reads.py                        |    1 +
 scripts/load-into-counting.py                      |    2 +-
 scripts/make-initial-stoptags.py                   |    1 +
 scripts/partition-graph.py                         |    1 +
 scripts/sample-reads-randomly.py                   |    1 +
 scripts/split-paired-reads.py                      |    1 +
 scripts/unique-kmers.py                            |    1 +
 setup.cfg                                          |    4 +-
 setup.py                                           |   97 +-
 {lib => src/khmer}/.gitignore                      |    0
 .../khmer/_cpy_countgraph.cc                       |  220 +-
 .../khmer/_cpy_counttable.cc                       |   56 +-
 src/khmer/_cpy_graphlabels.cc                      |  510 ++
 .../khmer/_cpy_hashgraph.cc                        |  833 +-
 src/khmer/_cpy_hashset.cc                          |  355 +
 src/khmer/_cpy_hashtable.cc                        | 1016 +++
 src/khmer/_cpy_hllcounter.cc                       |  364 +
 src/khmer/_cpy_khmer.cc                            |  441 ++
 src/khmer/_cpy_nodegraph.cc                        |  162 +
 .../khmer/_cpy_nodetable.cc                        |   65 +-
 src/khmer/_cpy_readaligner.cc                      |  242 +
 src/khmer/_cpy_readparsers.cc                      |  639 ++
 .../khmer/_cpy_smallcountgraph.cc                  |  133 +-
 .../khmer/_cpy_smallcounttable.cc                  |   52 +-
 src/khmer/_cpy_subsetpartition.cc                  |  263 +
 src/khmer/_cpy_utils.cc                            |  177 +
 {lib => src/oxli}/.check_openmp.cc                 |    0
 {lib => src/oxli}/.gitignore                       |    0
 {lib => src/oxli}/Makefile                         |   55 +-
 {lib => src/oxli}/alphabets.cc                     |    4 +-
 {lib => src/oxli}/assembler.cc                     |    4 +-
 {lib => src/oxli}/hashgraph.cc                     |   96 +-
 {lib => src/oxli}/hashtable.cc                     |  179 +-
 {lib => src/oxli}/hllcounter.cc                    |   19 +-
 {lib => src/oxli}/kmer_filters.cc                  |   10 +-
 {lib => src/oxli}/kmer_hash.cc                     |   45 +-
 {lib => src/oxli}/labelhash.cc                     |   95 +-
 {lib => src/oxli}/oxli.pc.in                       |    0
 {lib => src/oxli}/read_aligner.cc                  |   10 +-
 {lib => src/oxli}/read_parsers.cc                  |   38 +-
 {lib => src/oxli}/storage.cc                       |  102 +-
 {lib => src/oxli}/subset.cc                        |  146 +-
 {lib => src/oxli}/test-Colors.cc                   |   14 +-
 {lib => src/oxli}/test-compile.cc                  |    4 +-
 {lib => src/oxli}/traversal.cc                     |   14 +-
 tests/{test_assembly.py => graph_features.py}      |  389 +-
 tests/khmer_tst_utils.py                           |    1 +
 tests/test-data/banding-reads.fq                   | 8000 ++++++++++++++++++++
 tests/test-data/bogus.fa                           |    2 +
 tests/test_banding.py                              |  158 +
 tests/test_countgraph.py                           |    6 -
 tests/test_cython_assembly.py                      |  441 ++
 tests/test_cython_parsing.py                       |  442 ++
 tests/test_filter_abund.py                         |    2 +
 tests/test_functions.py                            |  295 +-
 tests/test_scripts.py                              |   25 +
 tests/test_sequence_validation.py                  |   83 +-
 tests/test_subset_graph.py                         |    2 +
 tests/test_tabletype.py                            |    5 +-
 tests/test_threaded_sequence_processor.py          |    1 +
 140 files changed, 17454 insertions(+), 7168 deletions(-)

diff --git a/.gitignore b/.gitignore
index c0ec73d..300b2c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,4 +52,5 @@ pylint_report.txt
 pep8_report.txt
 pep257_report.txt
 .cache/
+khmer/_oxli/*.cpp
 .eggs
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8fca9e9..283bd4f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,24 @@ The khmer project's command line scripts adhere to
 [Semantic Versioning](http://semver.org/). The Python and C++ APIs are not yet
 under semantic versioning, but will be in future versions of khmer.
 
+## [Unreleased]
+
+### Added
+- Cython wrapper for liboxli.
+- Cython containers for parsing, assembly, and hashing.
+- Header install for liboxli.
+- New function `consume_fasta_banding` for bulk loading of sequences into
+  hashtables. Only k-mers whose hashed values fall within a specified range are
+  counted.
+
+### Changed
+- Non-ACTG handling significantly changed so that only bulk-loading functions
+  "clean" sequences of non-DNA characters. See #1590 for details.
+- Split CPython wrapper file into per-class files under `src/khmer` and
+  `include/khmer`.
+- Moved liboxli headers to include/oxli and implementations to src/oxli.
+- Removed CPython assembler wrappers.
+
 ## [2.1.1] - 2017-05-25
 ### Added
 - Document for submission to the Journal of Open Source Software.
diff --git a/Doxyfile.in b/Doxyfile.in
index 3e358cc..92f2702 100644
--- a/Doxyfile.in
+++ b/Doxyfile.in
@@ -753,8 +753,10 @@ WARN_LOGFILE           =
 # spaces.
 # Note: If this tag is empty the current directory is searched.
 
-INPUT                  = lib \
-                         khmer \
+INPUT                  = include/oxli \
+                         include/khmer \
+                         src/oxli \
+                         src/khmer \
                          scripts
 
 # This tag can be used to specify the character encoding of the source files
diff --git a/MANIFEST.in b/MANIFEST.in
index b88b08a..6a317ff 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -3,6 +3,7 @@ include versioneer.py MANIFEST.in CITATION CONTRIBUTING.md Doxyfile.in
 include LICENSE TODO .ycm_extra_conf.py authors.csv
 recursive-include lib *.hh *.cc [Mm]akefile* get_version.py
 recursive-include khmer *.hh
+recursive-include khmer/_oxli *.pxd *.cpp
 recursive-include third-party *.cc *.1 *.xsl README* sample* words* *.sh *.c
 recursive-include third-party manual* [Mm]akefile* *.pl *.dsp CHANGES *.txt *.h
 recursive-include third-party ChangeLog FAQ INDEX configure *.xsl
diff --git a/Makefile b/Makefile
index 05afbfb..7ce926e 100644
--- a/Makefile
+++ b/Makefile
@@ -37,13 +37,17 @@
 
 # `SHELL=bash` Will break Titus's laptop, so don't use BASH-isms like
 # `[[` conditional expressions.
-CPPSOURCES=$(wildcard lib/*.cc lib/*.hh khmer/_khmer.cc khmer/*.hh) setup.py
+#
+PREFIX=/usr/local
+CPPSOURCES=$(wildcard src/oxli/*.cc include/oxli/*.hh src/khmer/_cpy_*.cc include/khmer/_cpy_*.hh) setup.py
+CYSOURCES=$(wildcard khmer/_oxli/*.pxd khmer/_oxli/*.pyx)
 PYSOURCES=$(filter-out khmer/_version.py, \
 	  $(wildcard khmer/*.py scripts/*.py oxli/*.py) )
-SOURCES=$(PYSOURCES) $(CPPSOURCES) setup.py
+SOURCES=$(PYSOURCES) $(CPPSOURCES) $(CYSOURCES) setup.py
 
 DEVPKGS=pep8==1.6.2 diff_cover autopep8 pylint coverage gcovr pytest \
-	pydocstyle pyenchant
+	'pytest-runner>=2.0,<3dev' pydocstyle pyenchant
+
 GCOVRURL=git+https://github.com/nschum/gcovr.git@never-executed-branches
 
 VERSION=$(shell ./setup.py version | grep Version | awk '{print $$4}' \
@@ -58,6 +62,7 @@ INCLUDESTRING=$(shell gcc -E -x c++ - -v < /dev/null 2>&1 >/dev/null \
 	    | grep '^ /' | grep -v cc1plus)
 INCLUDEOPTS=$(shell gcc -E -x c++ - -v < /dev/null 2>&1 >/dev/null \
 	    | grep '^ /' | grep -v cc1plus | awk '{print "-I" $$1 " "}')
+
 PYINCLUDE=$(shell python -c "from __future__ import print_function; \
 	    import sysconfig; flags = ['-I' + sysconfig.get_path('include'), \
 	    '-I' + sysconfig.get_path('platinclude')]; print(' '.join(flags))")
@@ -82,6 +87,7 @@ endif
 MODEXT=$(shell python -c \
        "import sysconfig;print(sysconfig.get_config_var('SO'))")
 EXTENSION_MODULE = khmer/_khmer$(MODEXT)
+CY_MODULES = $($(wildcard khmer/_oxli/*.pyx): .pyx=.$(MODEXT))
 
 PYLINT_TEMPLATE="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}"
 
@@ -102,7 +108,7 @@ install-dependencies:
 ## sharedobj   : build khmer shared object file
 sharedobj: $(EXTENSION_MODULE)
 
-$(EXTENSION_MODULE): $(CPPSOURCES)
+$(EXTENSION_MODULE): $(CPPSOURCES) $(CYSOURCES)
 	./setup.py build_ext --inplace
 
 coverage-debug: $(CPPSOURCES)
@@ -122,18 +128,21 @@ dist/khmer-$(VERSION).tar.gz: $(SOURCES)
 
 ## clean       : clean up all temporary / machine-generated files
 clean: FORCE
-	cd lib && $(MAKE) clean || true
+	cd src/oxli && $(MAKE) clean || true
 	cd tests && rm -rf khmertest_* || true
-	rm -f pytest_runner-*.egg pytests.xml
+	rm -f pytests.xml
 	rm -f $(EXTENSION_MODULE)
-	rm -f khmer/*.pyc lib/*.pyc scripts/*.pyc tests/*.pyc oxli/*.pyc \
-		sandbox/*.pyc khmer/__pycache__/* sandbox/__pycache__/*
+	rm -f khmer/*.pyc scripts/*.pyc tests/*.pyc oxli/*.pyc \
+		sandbox/*.pyc khmer/__pycache__/* sandbox/__pycache__/* \
+		khmer/_oxli/*.cpp
 	./setup.py clean --all || true
 	rm -f coverage-debug
 	rm -Rf .coverage coverage-gcovr.xml coverage.xml
 	rm -f diff-cover.html
 	rm -Rf build dist
-	rm -rf __pycache__/ .eggs/ khmer.egg-info/
+	rm -rf __pycache__/ khmer.egg-info/
+	@find ./ -type d -name __pycache__ -exec rm -rf {} +
+	@find ./khmer/ -type f -name *$(MODEXT) -exec rm -f {} +
 	-rm -f *.gcov
 
 debug: FORCE
@@ -263,32 +272,37 @@ doxygen: doc/doxygen/html/index.html
 
 doc/doxygen/html/index.html: $(CPPSOURCES) $(PYSOURCES)
 	mkdir -p doc/doxygen
-	sed "s=\$${VERSION}=$$(python ./lib/get_version.py)=" Doxyfile.in | \
+	sed "s=\$${VERSION}=$(VERSION)=" Doxyfile.in | \
 		sed "s=\$${INCLUDES}=$(INCLUDESTRING)=" > Doxyfile
 	doxygen
 
-lib: FORCE
-	cd lib && \
+liboxli: FORCE
+	cd src/oxli && \
 	$(MAKE)
 
-# Runs a test of ./lib
+install-liboxli: liboxli
+	cd src/oxli && $(MAKE) install PREFIX=$(PREFIX)
+	mkdir -p $(PREFIX)/include/khmer
+	cp -r include/khmer/_cpy_*.hh $(PREFIX)/include/khmer/
+
+# Runs a test of liboxli
 libtest: FORCE
 	rm -rf install_target
 	mkdir -p install_target
-	cd lib && \
+	cd src/oxli && \
 	 $(MAKE) clean && \
 	 $(MAKE) all && \
 	 $(MAKE) install PREFIX=../install_target
 	test -d install_target/include
-	test -f install_target/include/oxli/khmer.hh
+	test -f install_target/include/oxli/oxli.hh
 	test -d install_target/lib
 	test -f install_target/lib/liboxli.a
 	$(CXX) -std=c++11 -o install_target/test-prog-static \
-		-I install_target/include lib/test-compile.cc \
+		-I install_target/include src/oxli/test-compile.cc \
 		install_target/lib/liboxli.a
 	$(CXX) -std=c++11 -o install_target/test-prog-dynamic \
 		-I install_target/include -L install_target/lib \
-		lib/test-compile.cc -loxli
+		src/oxli/test-compile.cc -loxli
 	rm -rf install_target
 
 ## test        : run the khmer test suite
@@ -297,12 +311,12 @@ test: FORCE
 	py.test -m ${TESTATTR}
 
 sloccount.sc: $(CPPSOURCES) $(PYSOURCES) $(wildcard tests/*.py) Makefile
-	sloccount --duplicates --wide --details lib khmer scripts tests \
+	sloccount --duplicates --wide --details include src khmer scripts tests \
 		setup.py Makefile > sloccount.sc
 
 ## sloccount   : count lines of code
 sloccount:
-	sloccount lib khmer scripts tests setup.py Makefile
+	sloccount src include khmer scripts tests setup.py Makefile
 
 coverity-build:
 	if [ -x "${cov_analysis_dir}/bin/cov-build" ]; \
diff --git a/doc/dev/a-quick-guide-to-testing.rst b/doc/dev/a-quick-guide-to-testing.rst
index 0539ff9..aef91bc 100644
--- a/doc/dev/a-quick-guide-to-testing.rst
+++ b/doc/dev/a-quick-guide-to-testing.rst
@@ -51,7 +51,7 @@ working!
 
 * We maintain fairly complete test coverage of our code.  What this
   means is that we have automated tests that, when run, execute most
-  of the lines of Python and C++ code in our lib/, khmer/ and scripts/
+  of the lines of Python and C++ code in our src/, khmer/ and scripts/
   directories.  This doesn't *guarantee* things are correct, but it
   does mean that at least most of the code works at some basic level.
 
diff --git a/doc/dev/codebase-guide.rst b/doc/dev/codebase-guide.rst
index 167aea6..f110a3f 100644
--- a/doc/dev/codebase-guide.rst
+++ b/doc/dev/codebase-guide.rst
@@ -42,10 +42,15 @@ A quick guide to the khmer codebase
 The ``CHANGELOG.md`` file lists major changes to the codebase with each version,
 with the most recent version first.
 
-The ``lib/`` directory contains all of the C++ code.
+The ``include/`` directory contains all C++ and C headers. The core C++ library
+is under ``include/oxli``, and the CPython wrapper is under ``include/khmer``.
+
+The ``src`` directory contains all of the C++ and CPython code. This structure
+corresponds to the one in ``include``. The main CPython module is built in
+``src/khmer/_cpy_khmer.hh``.
 
 The ``khmer/`` directory contains the `khmer` package (``khmer/__init__.py``,
-etc) and the C++-to-Python bridge (``khmer/_khmer.cc``).
+etc) and experimental Cython bindings under ``khmer/_oxli``.
 
 The ``scripts/`` and ``sandbox/`` directory contain Python command-line scripts.
 
diff --git a/doc/dev/development.rst b/doc/dev/development.rst
index 1c964c4..f455d90 100644
--- a/doc/dev/development.rst
+++ b/doc/dev/development.rst
@@ -36,8 +36,8 @@
 
    Contact: khmer-project at idyll.org
 
-Development miscellany
-======================
+Development Nuts and Bolts
+==========================
 
 Third-party use
 ---------------
@@ -127,7 +127,7 @@ Python / C integration
 ----------------------
 
 The Python extension that wraps the C++ core of khmer lives in
-``khmer/_khmer.cc``
+``src/khmer/_cpy_khmer.cc``
 
 This wrapper code is tedious and annoying so we use a static analysis tool to
 check for correctness.
@@ -151,13 +151,13 @@ Errors to ignore: "Unhandled Python exception raised calling 'execute' method",
 
 Warnings to address: ::
 
-        khmer/_khmer.cc:3109:1: note: this function is too complicated
+        src/khmer/_cpy_khmer.cc:3109:1: note: this function is too complicated
         for the reference-count checker to fully analyze: not all paths were
         analyzed
 
 Adjust --maxtrans and re-run. ::
 
-	khmer/_khmer.cc:2191:61: warning: Mismatching type in call to
+	src/khmer/_cpy_khmer.cc:2191:61: warning: Mismatching type in call to
 	Py_BuildValue with format code "i" [enabled by default]
 	  argument 2 ("D.68937") had type
 	    "long long unsigned int"
@@ -169,7 +169,43 @@ See below for a format string cheat sheet One also benefits by matching C type
 with the function signature used later.
 
 "I" for unsigned int
-"K" for unsigned long long a.k.a khmer::HashIntoType.
+"K" for unsigned long long a.k.a oxli::HashIntoType.
+
+Linking Against liboxli
+-----------------------
+
+The C++ library can be installed as a shared library and linked against from external projects.
+To build and install it, run: ::
+
+    make install-liboxli
+
+This command can be given an optional ``PREFIX`` variable to control where the library and headers are
+installed (by default, in ``/usr/local``. Code can then include the headers by prefixing their paths 
+with ``oxli/``. For example, to use ``Hashgraph``, use ``#include "oxli/hashgraph.hh"``. To compile,
+add ``-Ioxli`` to your compiler invocation.
+    
+
+Experimental Cython Bindings
+----------------------------
+
+khmer includes experimental Cython bindings in ``khmer/_oxli``. ``wrapper.pxd`` contains all the C++
+library declarations. To use extension classes in regular Python code, simply ``import`` them: for
+example, to get the wrapped ``ReadParser``, use ``from khmer._oxli.parsing import FastxParser``.
+Extension classes can all be used in external Cython code by using `cimport`; the declarations in
+``wrapper.pxd`` can also be used, meaning you have access to liboxli. Note that for any ``cimport``'ed code
+to work, you'll need to install liboxli and include ``oxli`` in your Cython project's ``Extension``
+class. This is done by adding ``oxli`` to the ``libraries`` argument of your ``Extension`` object in
+``setup.py``, which instructs setuptools to add ``-Ioxli`` to its compiler invocation.
+
+ An example: ::
+
+   
+    cy_ext = Extension('mypackage.example',
+                       sources = 'mypackage/example.pyx',
+                       extra_compile_args = ['-arch', 'x86_64', '-stdlib=libc++'],
+                       libraries = ['oxli'],
+                       include_dirs = [],
+                       language = 'c++')
 
 Read handling
 -------------
diff --git a/doc/dev/guidelines-continued-dev.rst b/doc/dev/guidelines-continued-dev.rst
index e7958e5..56f4d97 100644
--- a/doc/dev/guidelines-continued-dev.rst
+++ b/doc/dev/guidelines-continued-dev.rst
@@ -142,6 +142,34 @@ GNU `aspell` can also be used to check the spelling in a single file::
 
         aspell check --mode ccpp $filename
 
+Cython Style
+~~~~~~~~~~~~
+
+Cython code can become messy very quickly, and as such, we have guidelines
+for style and structure.
+
+When wrapping code from liboxli:
+
+- `extern` definition should begin with `Cp`; for example, `CpHashtable` wraps
+  `oxli::Hashtable`.
+- If the extension class wrapping the liboxli class stores it as a pointer,
+  it should be named `_this`. If it wraps a stack object directly, it should
+  be named `_obj`.
+
+For imports,
+
+- `__future__` imports at the top, as usual.
+- `libc` cimports next,
+- then `libcpp` imports and cimports.
+- followed by cimports
+- and finally, regular imports.
+
+Generally,
+
+- Pure C methods should be underscore prefixed.
+- `cpdef` methods do not need to be underscore prefixed.
+
+
 Resolving merge conflicts
 -------------------------
 
diff --git a/doc/requirements.txt b/doc/requirements.txt
index e1b9440..f56137b 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,3 +1,4 @@
 sphinxcontrib-autoprogram==0.1.2
 setuptools>=3.4.1
 guzzle_sphinx_theme==0.7.11
+Cython>=0.25.2
diff --git a/examples/c++-api/Makefile b/examples/c++-api/Makefile
index 982053a..4cd0641 100644
--- a/examples/c++-api/Makefile
+++ b/examples/c++-api/Makefile
@@ -1,20 +1,23 @@
-CFLAGS=--std=c++11 \
-       -I ../../lib \
+CXXFLAGS=--std=c++11 \
+       -I ../../include/ \
 	   -I ../../third-party/smhasher \
 	   -I ../../third-party/seqan/core/include/
 
+TESTS=exact-counting bloom consume
+
+%: %.cc ../../src/oxli/liboxli.a
+	$(CXX) $(CXXFLAGS) $< ../../src/oxli/liboxli.a -o $@ 
+
+../../src/oxli/liboxli.a:
+	cd ../../src/oxli && make
+
 run: all
 	./exact-counting
 	./bloom
 	./consume reads.fastq
 
-all: exact-counting bloom consume
+all: $(TESTS)
 
 clean:
 	-rm -f exact-counting bloom consume
 
-%: %.cc ../../lib/liboxli.a
-	$(CXX) $(CFLAGS) -o $* $*.cc ../../lib/liboxli.a
-
-../../lib/liboxli.a:
-	cd ../../lib && make
diff --git a/examples/c++-api/bloom.cc b/examples/c++-api/bloom.cc
index 5657839..cbf829a 100644
--- a/examples/c++-api/bloom.cc
+++ b/examples/c++-api/bloom.cc
@@ -3,10 +3,10 @@
 // memory requirements.
 
 #include <vector>
-#include "khmer.hh"
-#include "hashtable.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashtable.hh"
 
-using namespace khmer;
+using namespace oxli;
 
 int main()
 {
diff --git a/examples/c++-api/consume.cc b/examples/c++-api/consume.cc
index 8d805e2..3b2ad22 100644
--- a/examples/c++-api/consume.cc
+++ b/examples/c++-api/consume.cc
@@ -1,10 +1,10 @@
 // A demonstration of khmer's primary sequence loading function.
 
 #include <vector>
-#include "khmer.hh"
-#include "hashtable.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashtable.hh"
 
-using namespace khmer;
+using namespace oxli;
 using namespace read_parsers;
 
 int main(int argc, char **argv)
diff --git a/examples/c++-api/exact-counting.cc b/examples/c++-api/exact-counting.cc
index a42549d..36eff62 100644
--- a/examples/c++-api/exact-counting.cc
+++ b/examples/c++-api/exact-counting.cc
@@ -3,10 +3,11 @@
 
 #include <vector>
 #include <cmath>
-#include "khmer.hh"
-#include "hashgraph.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashgraph.hh"
 
-using namespace khmer;
+
+using namespace oxli;
 
 int main()
 {
diff --git a/lib/.gitignore b/include/khmer/.gitignore
similarity index 100%
copy from lib/.gitignore
copy to include/khmer/.gitignore
diff --git a/include/khmer/_cpy_countgraph.hh b/include/khmer/_cpy_countgraph.hh
new file mode 100644
index 0000000..acef8a7
--- /dev/null
+++ b/include/khmer/_cpy_countgraph.hh
@@ -0,0 +1,35 @@
+#ifndef _CPY_COUNTGRAPH_HH
+#define _CPY_COUNTGRAPH_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "_cpy_hashgraph.hh"
+
+
+namespace khmer {
+
+typedef struct {
+    khmer_KHashgraph_Object khashgraph;
+    oxli::Countgraph * countgraph;
+} khmer_KCountgraph_Object;
+
+extern PyTypeObject khmer_KCountgraph_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountgraph_Object");
+
+extern PyMethodDef khmer_countgraph_methods[];
+
+PyObject* khmer_countgraph_new(PyTypeObject * type, PyObject * args,
+                                      PyObject * kwds);
+
+void khmer_countgraph_dealloc(khmer_KCountgraph_Object * obj);
+
+PyObject *
+count_get_raw_tables(khmer_KCountgraph_Object * self, PyObject * args);
+
+PyObject *
+count_do_subset_partition_with_abundance(khmer_KCountgraph_Object * me,
+        PyObject * args);
+
+}
+
+#endif
diff --git a/lib/alphabets.hh b/include/khmer/_cpy_counttable.hh
similarity index 76%
copy from lib/alphabets.hh
copy to include/khmer/_cpy_counttable.hh
index 58b7129..81a9803 100644
--- a/lib/alphabets.hh
+++ b/include/khmer/_cpy_counttable.hh
@@ -1,5 +1,6 @@
 /*
 This file is part of khmer, https://github.com/dib-lab/khmer/, and is
+Copyright (C) 2010-2015, Michigan State University.
 Copyright (C) 2015-2016, The Regents of the University of California.
 
 Redistribution and use in source and binary forms, with or without
@@ -34,19 +35,26 @@ LICENSE (END)
 
 Contact: khmer-project at idyll.org
 */
-#ifndef SYMBOLS_HH
-#define SYMBOLS_HH
+#ifndef _CPY_COUNTTABLE_HH
+#define _CPY_COUNTTABLE_HH
 
-namespace khmer
-{
-namespace alphabets
-{
+#include <Python.h>
+#include "_cpy_khmer.hh"
 
-extern std::string DNA_SIMPLE;
-extern std::string DNAN_SIMPLE;
-extern std::string IUPAC_NUCL;
-extern std::string IUPAC_AA;
+namespace khmer {
+
+typedef struct {
+    khmer_KHashtable_Object khashtable;
+    oxli::Counttable * counttable;
+} khmer_KCounttable_Object;
+
+extern PyTypeObject khmer_KCounttable_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCounttable_Object");
+
+PyObject* khmer_counttable_new(PyTypeObject * type, PyObject * args,
+                                      PyObject * kwds);
 
 }
-}
+
+
 #endif
diff --git a/include/khmer/_cpy_graphlabels.hh b/include/khmer/_cpy_graphlabels.hh
new file mode 100644
index 0000000..454fca7
--- /dev/null
+++ b/include/khmer/_cpy_graphlabels.hh
@@ -0,0 +1,87 @@
+#ifndef _CPY_GRAPHLABELS_HH
+#define _CPY_GRAPHLABELS_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "oxli/labelhash.hh"
+
+
+namespace khmer {
+
+typedef struct {
+    PyObject_HEAD
+    oxli::LabelHash * labelhash;
+} khmer_KGraphLabels_Object;
+
+
+extern PyTypeObject khmer_KGraphLabels_Type;
+
+extern PyMethodDef khmer_graphlabels_methods[];
+
+PyObject * khmer_graphlabels_new(PyTypeObject * type, PyObject *args,
+                                        PyObject *kwds);
+
+void khmer_graphlabels_dealloc(khmer_KGraphLabels_Object * obj);
+
+
+PyObject *
+labelhash_get_all_labels(khmer_KGraphLabels_Object * me, PyObject * args);
+
+
+PyObject *
+labelhash_consume_seqfile_and_tag_with_labels(khmer_KGraphLabels_Object * me,
+        PyObject * args);
+
+
+PyObject *
+labelhash_consume_partitioned_fasta_and_tag_with_labels(
+    khmer_KGraphLabels_Object * me, PyObject * args);
+
+
+PyObject *
+labelhash_consume_sequence_and_tag_with_labels(khmer_KGraphLabels_Object * me,
+        PyObject * args);
+
+
+PyObject *
+labelhash_sweep_label_neighborhood(khmer_KGraphLabels_Object * me,
+                                   PyObject * args);
+
+// Similar to find_all_tags, but returns tags in a way actually usable by python
+// need a tags_in_sequence iterator or function in c++ land for reuse in all
+// these functions
+
+
+PyObject *
+labelhash_sweep_tag_neighborhood(khmer_KGraphLabels_Object * me,
+                                 PyObject * args);
+
+
+PyObject *
+labelhash_get_tag_labels(khmer_KGraphLabels_Object * me, PyObject * args);
+
+
+PyObject *
+labelhash_n_labels(khmer_KGraphLabels_Object * me, PyObject * args);
+
+
+PyObject *
+labelhash_label_across_high_degree_nodes(khmer_KGraphLabels_Object * me,
+        PyObject * args);
+
+
+PyObject *
+labelhash_assemble_labeled_path(khmer_KGraphLabels_Object * me,
+                                PyObject * args);
+
+
+PyObject *
+labelhash_save_labels_and_tags(khmer_KGraphLabels_Object * me, PyObject * args);
+
+
+PyObject *
+labelhash_load_labels_and_tags(khmer_KGraphLabels_Object * me, PyObject * args);
+
+}
+
+#endif
diff --git a/include/khmer/_cpy_hashgraph.hh b/include/khmer/_cpy_hashgraph.hh
new file mode 100644
index 0000000..a2ba39b
--- /dev/null
+++ b/include/khmer/_cpy_hashgraph.hh
@@ -0,0 +1,274 @@
+/*
+This file is part of khmer, https://github.com/dib-lab/khmer/, and is
+Copyright (C) 2010-2015, Michigan State University.
+Copyright (C) 2015-2016, The Regents of the University of California.
+
+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 Michigan State 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 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 COPYRIGHT
+HOLDER 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.
+LICENSE (END)
+
+Contact: khmer-project at idyll.org
+*/
+#ifndef _CPY_HASHGRAPH_HH
+#define _CPY_HASHGRAPH_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "_cpy_hashtable.hh"
+#include "oxli/hashgraph.hh"
+
+
+namespace khmer {
+
+
+typedef struct {
+    khmer_KHashtable_Object khashtable;
+    oxli::Hashgraph * hashgraph;
+} khmer_KHashgraph_Object;
+
+
+extern PyTypeObject khmer_KHashgraph_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashgraph_Object");
+
+
+extern PyMethodDef khmer_hashgraph_methods[];
+
+
+//
+// Method definitions
+//
+
+
+PyObject *
+hashgraph_find_high_degree_nodes(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_neighbors(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_traverse_linear_path(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_assemble_linear_path(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_n_tags(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_print_stop_tags(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_print_tagset(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_load_stop_tags(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+
+PyObject *
+hashgraph_save_stop_tags(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+
+PyObject *
+hashgraph_repartition_largest_partition(khmer_KHashgraph_Object * me,
+                                        PyObject * args);
+
+
+PyObject *
+hashgraph_calc_connected_graph_size(khmer_KHashgraph_Object * me,
+                                    PyObject * args);
+
+
+PyObject *
+hashgraph_kmer_degree(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_trim_on_stoptags(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_do_subset_partition(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+
+PyObject *
+hashgraph_merge_subset(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_merge_from_disk(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_consume_seqfile_and_tag_with_reads_parser(khmer_KHashgraph_Object * me,
+        PyObject * args);
+
+
+PyObject *
+hashgraph_consume_partitioned_fasta(khmer_KHashgraph_Object * me,
+                                    PyObject * args);
+
+
+PyObject *
+hashgraph_find_all_tags(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_assign_partition_id(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_add_tag(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_add_stop_tag(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_get_stop_tags(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_get_tagset(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_output_partitions(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_save_partitionmap(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_load_partitionmap(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph__validate_partitionmap(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_count_partitions(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_subset_count_partitions(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_subset_partition_size_distribution(khmer_KHashgraph_Object * me,
+        PyObject * args);
+
+
+PyObject *
+hashgraph_load_tagset(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_save_tagset(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_save_subset_partitionmap(khmer_KHashgraph_Object * me,
+                                   PyObject * args);
+
+
+PyObject *
+hashgraph_load_subset_partitionmap(khmer_KHashgraph_Object * me,
+                                   PyObject * args);
+
+
+PyObject *
+hashgraph__set_tag_density(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph__get_tag_density(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph__validate_subset_partitionmap(khmer_KHashgraph_Object * me,
+                                        PyObject * args);
+
+
+PyObject *
+hashgraph_set_partition_id(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_join_partitions(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_get_partition_id(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_divide_tags_into_subsets(khmer_KHashgraph_Object * me,
+                                   PyObject * args);
+
+
+PyObject *
+hashgraph_count_kmers_within_radius(khmer_KHashgraph_Object * me,
+                                    PyObject * args);
+
+
+PyObject *
+hashgraph_extract_unique_paths(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_consume_and_tag(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_get_tags_and_positions(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_find_all_tags_list(khmer_KHashgraph_Object * me, PyObject * args);
+
+
+PyObject *
+hashgraph_consume_seqfile_and_tag(khmer_KHashgraph_Object * me, PyObject * args);
+
+}
+
+#endif
diff --git a/include/khmer/_cpy_hashset.hh b/include/khmer/_cpy_hashset.hh
new file mode 100644
index 0000000..10f063b
--- /dev/null
+++ b/include/khmer/_cpy_hashset.hh
@@ -0,0 +1,73 @@
+
+#ifndef _CPY_HASHSET_HH
+#define _CPY_HASHSET_HH
+
+#include <Python.h>
+#include "oxli/oxli.hh"
+#include "_cpy_utils.hh"
+
+
+namespace khmer {
+
+typedef struct {
+    PyObject_HEAD
+    oxli::SeenSet * hashes;
+    oxli::WordLength ksize;
+} khmer_HashSet_Object;
+
+
+typedef struct {
+    PyObject_HEAD
+    khmer_HashSet_Object * parent;
+    oxli::SeenSet::iterator * it;
+} _HashSet_iterobj;
+
+extern PyMethodDef khmer_HashSet_methods[]; 
+
+extern PySequenceMethods khmer_HashSet_seqmethods[];
+
+extern PyTypeObject khmer_HashSet_Type;
+
+extern PyTypeObject _HashSet_iter_Type;
+
+
+khmer_HashSet_Object * create_HashSet_Object(oxli::SeenSet * h, 
+                                             oxli::WordLength k);
+
+void
+khmer_HashSet_dealloc(khmer_HashSet_Object * obj);
+
+PyObject* khmer_HashSet_new(PyTypeObject * type, PyObject * args,
+                                   PyObject * kwds);
+
+void _HashSet_iter_dealloc(_HashSet_iterobj * obj);
+
+
+PyObject * _HashSet_iter(PyObject * self);
+
+PyObject * _HashSet_iternext(PyObject * self);
+
+PyObject * khmer_HashSet_iter(PyObject * self);
+
+
+int khmer_HashSet_len(khmer_HashSet_Object * o);
+
+PyObject * khmer_HashSet_concat(khmer_HashSet_Object * o,
+                                       khmer_HashSet_Object * o2);
+
+PyObject * khmer_HashSet_concat_inplace(khmer_HashSet_Object * o,
+        khmer_HashSet_Object * o2);
+
+int khmer_HashSet_contains(khmer_HashSet_Object * o, PyObject * val);
+
+PyObject *
+hashset_add(khmer_HashSet_Object * me, PyObject * args);
+
+PyObject *
+hashset_remove(khmer_HashSet_Object * me, PyObject * args);
+
+PyObject *
+hashset_update(khmer_HashSet_Object * me, PyObject * args);
+}
+
+#endif
diff --git a/include/khmer/_cpy_hashtable.hh b/include/khmer/_cpy_hashtable.hh
new file mode 100644
index 0000000..a80f897
--- /dev/null
+++ b/include/khmer/_cpy_hashtable.hh
@@ -0,0 +1,145 @@
+#ifndef _CPY_HASHTABLE_HH
+#define _CPY_HASHTABLE_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashtable.hh"
+
+
+namespace khmer {
+
+typedef struct {
+    PyObject_HEAD
+    oxli::Hashtable * hashtable;
+} khmer_KHashtable_Object;
+
+extern PyMethodDef khmer_hashtable_methods[];
+
+extern PyTypeObject khmer_KHashtable_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashtable_Object");
+
+
+PyObject *
+hashtable_ksize(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_hash(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_reverse_hash(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_n_occupied(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_n_unique_kmers(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_count(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_consume_seqfile(khmer_KHashtable_Object * me, PyObject * args);
+
+PyObject *
+hashtable_consume_seqfile_banding(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_consume_seqfile_with_reads_parser(khmer_KHashtable_Object * me,
+        PyObject * args);
+
+
+PyObject *
+hashtable_consume(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_set_use_bigcount(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get_use_bigcount(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get_min_count(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get_max_count(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject * hashtable_abundance_distribution_with_reads_parser(khmer_KHashtable_Object * me, PyObject * args);
+PyObject * hashtable_abundance_distribution(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_trim_on_abundance(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_trim_below_abundance(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_find_spectral_error_positions(khmer_KHashtable_Object * me,
+                                        PyObject * args);
+
+
+PyObject *
+hashtable_abundance_distribution(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_load(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_save(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get_hashsizes(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get_median_count(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_median_at_least(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get_kmers(khmer_KHashtable_Object * me, PyObject * args);
+
+
+PyObject *
+hashtable_get_kmer_counts(khmer_KHashtable_Object * me, PyObject * args);
+
+
+
+PyObject *
+hashtable_get_kmer_hashes(khmer_KHashtable_Object * me, PyObject * args);
+
+
+
+PyObject *
+hashtable_get_kmer_hashes_as_hashset(khmer_KHashtable_Object * me,
+                                     PyObject * args);
+
+
+}
+
+#endif
diff --git a/include/khmer/_cpy_hllcounter.hh b/include/khmer/_cpy_hllcounter.hh
new file mode 100644
index 0000000..a50f50e
--- /dev/null
+++ b/include/khmer/_cpy_hllcounter.hh
@@ -0,0 +1,81 @@
+#ifndef _CPY_HLLCOUNTER_HH
+#define _CPY_HLLCOUNTER_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "oxli/hllcounter.hh"
+
+namespace khmer {
+
+typedef struct {
+    PyObject_HEAD
+    oxli::HLLCounter * hllcounter;
+} khmer_KHLLCounter_Object;
+
+
+//
+// KHLLCounter object
+//
+
+extern PyMethodDef khmer_hllcounter_methods[];
+
+extern PyGetSetDef khmer_hllcounter_getseters[];
+
+extern PyTypeObject khmer_KHLLCounter_Type;
+
+
+PyObject* khmer_hllcounter_new(PyTypeObject * type, PyObject * args,
+                                      PyObject * kwds);
+
+
+void khmer_hllcounter_dealloc(khmer_KHLLCounter_Object * obj);
+
+
+PyObject *
+hllcounter_add(khmer_KHLLCounter_Object * me, PyObject * args);
+
+PyObject *
+hllcounter_estimate_cardinality(khmer_KHLLCounter_Object * me, PyObject * args);
+
+PyObject *
+hllcounter_consume_string(khmer_KHLLCounter_Object * me, PyObject * args);
+
+
+PyObject * hllcounter_consume_seqfile(khmer_KHLLCounter_Object * me,
+                                      PyObject * args, PyObject * kwds);
+
+PyObject * hllcounter_merge(khmer_KHLLCounter_Object * me,
+                                   PyObject * args);
+
+PyObject *
+hllcounter_get_erate(khmer_KHLLCounter_Object * me);
+
+
+PyObject *
+hllcounter_get_ksize(khmer_KHLLCounter_Object * me);
+
+
+int
+hllcounter_set_ksize(khmer_KHLLCounter_Object * me, PyObject *value,
+                     void *closure);
+
+
+int
+hllcounter_set_erate(khmer_KHLLCounter_Object * me, PyObject *value,
+                     void *closure);
+
+
+PyObject *
+hllcounter_getalpha(khmer_KHLLCounter_Object * me);
+
+
+PyObject *
+hllcounter_getcounters(khmer_KHLLCounter_Object * me);
+
+
+PyObject * hllcounter_merge(khmer_KHLLCounter_Object * me,
+                                   PyObject * args);
+
+}
+
+#endif
diff --git a/include/khmer/_cpy_khmer.hh b/include/khmer/_cpy_khmer.hh
new file mode 100644
index 0000000..5dcbad0
--- /dev/null
+++ b/include/khmer/_cpy_khmer.hh
@@ -0,0 +1,114 @@
+/*
+This file is part of khmer, https://github.com/dib-lab/khmer/, and is
+Copyright (C) 2010-2015, Michigan State University.
+Copyright (C) 2015-2016, The Regents of the University of California.
+
+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 Michigan State 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 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 COPYRIGHT
+HOLDER 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.
+LICENSE (END)
+
+Contact: khmer-project at idyll.org
+*/
+
+//
+// A module for Python that exports khmer C++ library functions.
+//
+#ifndef _CPY_KHMER_HH
+#define _CPY_KHMER_HH
+
+#include <Python.h>
+
+#include <iostream>
+
+#include "_cpy_utils.hh"
+
+
+//
+// Python 2/3 compatibility: Module initialization
+// http://python3porting.com/cextensions.html#module-initialization
+//
+
+#if PY_MAJOR_VERSION >= 3
+#define MOD_ERROR_VAL NULL
+#define MOD_SUCCESS_VAL(val) val
+#define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void)
+#define MOD_DEF(ob, name, doc, methods) \
+          static struct PyModuleDef moduledef = { \
+            PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \
+          ob = PyModule_Create(&moduledef);
+#else
+#define MOD_ERROR_VAL
+#define MOD_SUCCESS_VAL(val)
+#define MOD_INIT(name) void init##name(void)
+#define MOD_DEF(ob, name, doc, methods) \
+          ob = Py_InitModule3(name, methods, doc);
+#endif
+
+
+
+#include "_cpy_readparsers.hh"
+
+#include "_cpy_hashtable.hh" 
+#include "_cpy_nodetable.hh"
+#include "_cpy_counttable.hh"
+#include "_cpy_smallcounttable.hh"
+
+#include "_cpy_hashgraph.hh"
+#include "_cpy_subsetpartition.hh"
+#include "_cpy_countgraph.hh"
+#include "_cpy_nodegraph.hh"
+#include "_cpy_smallcountgraph.hh"
+
+#include "_cpy_graphlabels.hh" 
+#include "_cpy_hashset.hh" 
+#include "_cpy_hllcounter.hh" 
+#include "_cpy_readaligner.hh"
+ 
+
+namespace khmer {
+
+PyObject * forward_hash(PyObject * self, PyObject * args);
+
+PyObject * forward_hash_no_rc(PyObject * self, PyObject * args);
+
+PyObject * reverse_hash(PyObject * self, PyObject * args);
+
+PyObject * murmur3_forward_hash(PyObject * self, PyObject * args);
+
+PyObject * murmur3_forward_hash_no_rc(PyObject * self, PyObject * args);
+
+PyObject * reverse_complement(PyObject * self, PyObject * args);
+
+PyObject * get_version_cpp( PyObject * self, PyObject * args );
+
+extern PyMethodDef KhmerMethods[];
+
+}
+
+#endif
diff --git a/include/khmer/_cpy_nodegraph.hh b/include/khmer/_cpy_nodegraph.hh
new file mode 100644
index 0000000..7cad990
--- /dev/null
+++ b/include/khmer/_cpy_nodegraph.hh
@@ -0,0 +1,42 @@
+#ifndef _CPY_NODEGRAPH_HH
+#define _CPY_NODEGRAPH_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "_cpy_hashgraph.hh"
+#include "oxli/hashgraph.hh"
+
+
+namespace khmer {
+
+typedef struct {
+    khmer_KHashgraph_Object khashgraph;
+    oxli::Nodegraph * nodegraph;
+} khmer_KNodegraph_Object;
+
+void khmer_nodegraph_dealloc(khmer_KNodegraph_Object * obj);
+
+// __new__ for nodegraph; necessary for proper subclassing
+// This will essentially do what the old factory function did. Unlike many __new__
+// methods, we take our arguments here, because there's no "uninitialized" nodegraph
+// object; we have to have k and the table sizes before creating the new objects
+PyObject* khmer_nodegraph_new(PyTypeObject * type, PyObject * args,
+                                    PyObject * kwds);
+
+extern PyTypeObject khmer_KNodegraph_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KNodegraph_Object");
+
+extern PyMethodDef khmer_nodegraph_methods[];
+
+PyObject *
+nodegraph_update(khmer_KNodegraph_Object * me, PyObject * args);
+
+
+PyObject *
+nodegraph_get_raw_tables(khmer_KNodegraph_Object * self, PyObject * args);
+
+
+
+}
+
+#endif
diff --git a/lib/alphabets.hh b/include/khmer/_cpy_nodetable.hh
similarity index 73%
copy from lib/alphabets.hh
copy to include/khmer/_cpy_nodetable.hh
index 58b7129..301cae2 100644
--- a/lib/alphabets.hh
+++ b/include/khmer/_cpy_nodetable.hh
@@ -1,5 +1,6 @@
 /*
 This file is part of khmer, https://github.com/dib-lab/khmer/, and is
+Copyright (C) 2010-2015, Michigan State University.
 Copyright (C) 2015-2016, The Regents of the University of California.
 
 Redistribution and use in source and binary forms, with or without
@@ -34,19 +35,31 @@ LICENSE (END)
 
 Contact: khmer-project at idyll.org
 */
-#ifndef SYMBOLS_HH
-#define SYMBOLS_HH
+#ifndef _CPY_NODETABLE_HH
+#define _CPY_NODETABLE_HH
 
-namespace khmer
-{
-namespace alphabets
-{
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "_cpy_hashtable.hh"
+#include "oxli/hashtable.hh"
 
-extern std::string DNA_SIMPLE;
-extern std::string DNAN_SIMPLE;
-extern std::string IUPAC_NUCL;
-extern std::string IUPAC_AA;
+
+namespace khmer {
+
+typedef struct {
+    khmer_KHashtable_Object khashtable;
+    oxli::Nodetable * nodetable;
+} khmer_KNodetable_Object;
+
+
+extern PyMethodDef khmer_nodetable_methods[];
+
+extern PyTypeObject khmer_KNodetable_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KNodetable_Object");
+
+PyObject* khmer_nodetable_new(PyTypeObject * type, PyObject * args,
+                                     PyObject * kwds);
 
 }
-}
+
 #endif
diff --git a/include/khmer/_cpy_readaligner.hh b/include/khmer/_cpy_readaligner.hh
new file mode 100644
index 0000000..8a1d4b9
--- /dev/null
+++ b/include/khmer/_cpy_readaligner.hh
@@ -0,0 +1,43 @@
+#ifndef _CPY_READALIGNER_HH
+#define _CPY_READALIGNER_HH
+
+#include <Python.h>
+#include "oxli/read_aligner.hh"
+
+namespace khmer {
+
+typedef struct {
+    PyObject_HEAD
+    oxli::ReadAligner * aligner;
+} khmer_ReadAligner_Object;
+
+extern PyTypeObject khmer_ReadAlignerType;
+
+extern PyMethodDef khmer_ReadAligner_methods[];
+
+
+PyObject* khmer_ReadAligner_new(PyTypeObject *type, PyObject * args,
+                                       PyObject *kwds);
+
+
+void khmer_readaligner_dealloc(khmer_ReadAligner_Object* obj);
+
+
+PyObject * readaligner_align(khmer_ReadAligner_Object * me,
+                                    PyObject * args);
+
+
+PyObject * readaligner_align_forward(khmer_ReadAligner_Object * me,
+        PyObject * args);
+
+
+PyObject* khmer_ReadAligner_get_scoring_matrix(
+    khmer_ReadAligner_Object * me, PyObject * args);
+
+
+PyObject* khmer_ReadAligner_get_transition_probabilities(
+    khmer_ReadAligner_Object * me, PyObject * args);
+
+}
+
+#endif
diff --git a/include/khmer/_cpy_readparsers.hh b/include/khmer/_cpy_readparsers.hh
new file mode 100644
index 0000000..6b4c016
--- /dev/null
+++ b/include/khmer/_cpy_readparsers.hh
@@ -0,0 +1,140 @@
+
+#ifndef _CPY_READPARSERS_HH
+#define _CPY_READPARSERS_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "oxli/read_parsers.hh"
+
+namespace khmer
+{
+
+typedef struct {
+    PyObject_HEAD
+    //! Pointer to the low-level genomic read object.
+    oxli::read_parsers::Read *   read;
+} khmer_Read_Object;
+
+
+typedef struct {
+    PyObject_HEAD
+    oxli::read_parsers::FastxParserPtr parser;
+} khmer_ReadParser_Object;
+
+
+typedef struct {
+    PyObject_HEAD
+    //! Pointer to Python parser object for reference counting purposes.
+    PyObject * parent;
+    //! Persistent value of pair mode across invocations.
+    int pair_mode;
+} khmer_ReadPairIterator_Object;
+
+
+
+PyObject* 
+khmer_Read_new(PyTypeObject * type, PyObject * args, PyObject * kwds);
+
+
+int
+khmer_Read_init(khmer_Read_Object *self, PyObject *args, PyObject *kwds);
+
+
+void
+khmer_Read_dealloc(khmer_Read_Object * obj);
+
+
+Py_ssize_t
+khmer_Read_len(khmer_Read_Object* obj);
+
+
+extern PySequenceMethods khmer_Read_sequence_methods;
+
+
+PyObject *
+Read_get_name(khmer_Read_Object * obj, void * closure );
+
+
+PyObject *
+Read_get_sequence(khmer_Read_Object * obj, void * closure);
+
+
+PyObject *
+Read_get_quality(khmer_Read_Object * obj, void * closure);
+
+
+PyObject *
+Read_get_description(khmer_Read_Object * obj, void * closure);
+
+
+PyObject *
+Read_get_cleaned_seq(khmer_Read_Object * obj, void * closure);
+
+
+int
+Read_set_cleaned_seq(khmer_Read_Object *obj, PyObject *value, void *closure);
+
+
+extern PyGetSetDef khmer_Read_accessors [];
+
+
+extern PyTypeObject khmer_Read_Type;
+
+
+void
+_ReadParser_dealloc(khmer_ReadParser_Object * obj);
+
+
+void
+khmer_ReadPairIterator_dealloc(khmer_ReadPairIterator_Object * obj);
+
+
+PyObject *
+_ReadParser_new( PyTypeObject * subtype, PyObject * args, PyObject * kwds );
+
+
+PyObject *
+_ReadParser_iternext( PyObject * self );
+
+
+PyObject *
+_ReadPairIterator_iternext(khmer_ReadPairIterator_Object * myself);
+
+
+extern PyTypeObject khmer_ReadPairIterator_Type;
+
+
+PyObject *
+ReadParser_iter_reads(PyObject * self, PyObject * args );
+
+
+PyObject *
+ReadParser_get_num_reads(khmer_ReadParser_Object * me);
+
+
+PyObject *
+ReadParser_iter_read_pairs(PyObject * self, PyObject * args );
+
+
+PyObject *
+ReadParser_close(PyObject * self, PyObject * args);
+
+
+extern PyMethodDef _ReadParser_methods [];
+
+
+extern PyGetSetDef khmer_ReadParser_accessors[];
+
+
+extern PyTypeObject khmer_ReadParser_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_ReadParser_Object");
+
+
+void _init_ReadParser_Type_constants();
+
+
+oxli::read_parsers::FastxParserPtr& _PyObject_to_khmer_ReadParser(PyObject * py_object);
+
+} // namespace khmer
+
+#endif
diff --git a/lib/alphabets.hh b/include/khmer/_cpy_smallcountgraph.hh
similarity index 66%
copy from lib/alphabets.hh
copy to include/khmer/_cpy_smallcountgraph.hh
index 58b7129..495bea5 100644
--- a/lib/alphabets.hh
+++ b/include/khmer/_cpy_smallcountgraph.hh
@@ -1,6 +1,6 @@
 /*
 This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2015-2016, The Regents of the University of California.
+Copyright (C) 2016, The Regents of the University of California.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -34,19 +34,36 @@ LICENSE (END)
 
 Contact: khmer-project at idyll.org
 */
-#ifndef SYMBOLS_HH
-#define SYMBOLS_HH
 
-namespace khmer
-{
-namespace alphabets
-{
+#ifndef _CPY_SMALLCOUNTGRAPH_HH
+#define _CPY_SMALLCOUNTGRAPH_HH
 
-extern std::string DNA_SIMPLE;
-extern std::string DNAN_SIMPLE;
-extern std::string IUPAC_NUCL;
-extern std::string IUPAC_AA;
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "_cpy_hashgraph.hh"
+#include "oxli/hashgraph.hh"
+
+namespace khmer {
+
+typedef struct {
+    khmer_KHashgraph_Object khashgraph;
+    oxli::SmallCountgraph * countgraph;
+} khmer_KSmallCountgraph_Object;
+
+
+extern PyTypeObject khmer_KSmallCountgraph_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCountgraph_Object");
+
+extern PyMethodDef khmer_smallcountgraph_methods[];
+
+void khmer_smallcountgraph_dealloc(khmer_KSmallCountgraph_Object * obj);
+
+PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
+        PyObject * kwds);
+
+PyObject *
+smallcount_get_raw_tables(khmer_KSmallCountgraph_Object * self, PyObject * args);
 
 }
-}
+
 #endif
diff --git a/lib/alphabets.hh b/include/khmer/_cpy_smallcounttable.hh
similarity index 72%
copy from lib/alphabets.hh
copy to include/khmer/_cpy_smallcounttable.hh
index 58b7129..82dc3e3 100644
--- a/lib/alphabets.hh
+++ b/include/khmer/_cpy_smallcounttable.hh
@@ -1,6 +1,6 @@
 /*
 This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2015-2016, The Regents of the University of California.
+Copyright (C) 2016, The Regents of the University of California.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -34,19 +34,28 @@ LICENSE (END)
 
 Contact: khmer-project at idyll.org
 */
-#ifndef SYMBOLS_HH
-#define SYMBOLS_HH
 
-namespace khmer
-{
-namespace alphabets
-{
+#ifndef _CPY_SMALLCOUNTTABLE_HH
+#define _CPY_SMALLCOUNTTABLE_HH
 
-extern std::string DNA_SIMPLE;
-extern std::string DNAN_SIMPLE;
-extern std::string IUPAC_NUCL;
-extern std::string IUPAC_AA;
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "_cpy_hashtable.hh"
+#include "oxli/hashtable.hh"
+
+namespace khmer {
+
+typedef struct {
+    khmer_KHashtable_Object khashtable;
+    oxli::SmallCounttable * counttable;
+} khmer_KSmallCounttable_Object;
+
+extern PyTypeObject khmer_KSmallCounttable_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCounttable_Object");
+
+PyObject* khmer_smallcounttable_new(PyTypeObject * type, PyObject * args,
+        PyObject * kwds);
 
 }
-}
+
 #endif
diff --git a/include/khmer/_cpy_subsetpartition.hh b/include/khmer/_cpy_subsetpartition.hh
new file mode 100644
index 0000000..e65ddd2
--- /dev/null
+++ b/include/khmer/_cpy_subsetpartition.hh
@@ -0,0 +1,58 @@
+#ifndef _CPY_SUBSET_HH
+#define _CPY_SUBSET_HH
+
+#include <Python.h>
+#include "_cpy_utils.hh"
+#include "oxli/subset.hh"
+
+namespace khmer {
+
+typedef struct {
+    PyObject_HEAD
+    oxli::pre_partition_info *   PrePartitionInfo;
+} khmer_PrePartitionInfo_Object;
+
+typedef struct {
+    PyObject_HEAD
+    oxli::SubsetPartition * subset;
+} khmer_KSubsetPartition_Object;
+
+
+
+extern PyTypeObject khmer_PrePartitionInfo_Type;
+
+void khmer_PrePartitionInfo_dealloc(khmer_PrePartitionInfo_Object * obj);
+
+
+extern PyTypeObject khmer_KSubsetPartition_Type;
+
+extern PyMethodDef khmer_subset_methods[];
+
+
+void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj);
+
+PyObject *
+subset_count_partitions(khmer_KSubsetPartition_Object * me, PyObject * args);
+
+
+PyObject *
+subset_report_on_partitions(khmer_KSubsetPartition_Object * me, PyObject * args);
+
+
+PyObject *
+subset_partition_size_distribution(khmer_KSubsetPartition_Object * me,
+                                   PyObject * args);
+
+
+PyObject *
+subset_partition_sizes(khmer_KSubsetPartition_Object * me, PyObject * args);
+
+
+PyObject *
+subset_partition_average_coverages(khmer_KSubsetPartition_Object * me,
+                                   PyObject * args);
+
+
+}
+
+#endif
diff --git a/include/khmer/_cpy_utils.hh b/include/khmer/_cpy_utils.hh
new file mode 100644
index 0000000..471a33a
--- /dev/null
+++ b/include/khmer/_cpy_utils.hh
@@ -0,0 +1,67 @@
+#ifndef _CPY_UTILS_HH
+#define _CPY_UTILS_HH
+
+
+#include <Python.h>
+#include <vector>
+#include "oxli/oxli.hh"
+#include "oxli/kmer_hash.hh"
+#include "oxli/hashtable.hh"
+#include "oxli/oxli_exception.hh"
+
+//
+// Python 2/3 compatibility: PyInt and PyLong
+//
+
+#if (PY_MAJOR_VERSION >= 3)
+#define PyInt_Check(arg) PyLong_Check(arg)
+#define PyInt_AsLong(arg) PyLong_AsLong(arg)
+#define PyInt_FromLong(arg) PyLong_FromLong(arg)
+#define Py_TPFLAGS_HAVE_ITER 0
+#endif
+
+//
+// Python 2/3 compatibility: PyBytes and PyString
+// https://docs.python.org/2/howto/cporting.html#str-unicode-unification
+//
+
+#include "bytesobject.h"
+
+
+namespace khmer {
+
+
+bool 
+convert_HashIntoType_to_PyObject(const oxli::HashIntoType &hashval, 
+                                 PyObject **value);
+
+
+bool 
+convert_PyLong_to_HashIntoType(PyObject * value,
+                               oxli::HashIntoType &hashval);
+
+
+bool 
+convert_PyObject_to_HashIntoType(PyObject * value, 
+                                 oxli::HashIntoType& hashval, 
+                                 oxli::WordLength ksize);
+
+
+bool 
+ht_convert_PyObject_to_HashIntoType(PyObject * value, 
+                                    oxli::HashIntoType& hashval, 
+                                    const oxli::Hashtable * ht);
+
+
+bool 
+ht_convert_PyObject_to_Kmer(PyObject * value, 
+                            oxli::Kmer& kmer, 
+                            const oxli::Hashtable * ht);
+
+
+bool convert_Pytablesizes_to_vector(PyListObject * sizes_list_o,
+                                    std::vector<uint64_t>& sizes);
+
+}
+
+#endif
diff --git a/lib/.gitignore b/include/oxli/.gitignore
similarity index 100%
copy from lib/.gitignore
copy to include/oxli/.gitignore
diff --git a/lib/alphabets.hh b/include/oxli/alphabets.hh
similarity index 96%
rename from lib/alphabets.hh
rename to include/oxli/alphabets.hh
index 58b7129..982b8c6 100644
--- a/lib/alphabets.hh
+++ b/include/oxli/alphabets.hh
@@ -37,13 +37,15 @@ Contact: khmer-project at idyll.org
 #ifndef SYMBOLS_HH
 #define SYMBOLS_HH
 
-namespace khmer
+namespace oxli
 {
 namespace alphabets
 {
 
 extern std::string DNA_SIMPLE;
 extern std::string DNAN_SIMPLE;
+extern std::string RNA_SIMPLE;
+extern std::string RNAN_SIMPLE;
 extern std::string IUPAC_NUCL;
 extern std::string IUPAC_AA;
 
diff --git a/lib/assembler.hh b/include/oxli/assembler.hh
similarity index 99%
rename from lib/assembler.hh
rename to include/oxli/assembler.hh
index b7e142a..48bbe91 100644
--- a/lib/assembler.hh
+++ b/include/oxli/assembler.hh
@@ -39,7 +39,7 @@ Contact: khmer-project at idyll.org
 
 #include <functional>
 
-#include "khmer.hh"
+#include "oxli.hh"
 #include "kmer_hash.hh"
 #include "hashgraph.hh"
 #include "kmer_filters.hh"
@@ -47,7 +47,7 @@ Contact: khmer-project at idyll.org
 #include "labelhash.hh"
 
 
-namespace khmer
+namespace oxli
 {
 
 class Hashgraph;
@@ -173,5 +173,5 @@ public:
                             StringVector& paths) const;
 
 };
-} //namespace khmer
+} //namespace oxli
 #endif
diff --git a/lib/hashgraph.hh b/include/oxli/hashgraph.hh
similarity index 97%
rename from lib/hashgraph.hh
rename to include/oxli/hashgraph.hh
index b8bb805..e41fdaa 100644
--- a/lib/hashgraph.hh
+++ b/include/oxli/hashgraph.hh
@@ -53,7 +53,7 @@ Contact: khmer-project at idyll.org
 #include "traversal.hh"
 #include "subset.hh"
 
-namespace khmer
+namespace oxli
 {
     namespace read_parsers
     {
@@ -74,7 +74,7 @@ namespace khmer
 
 #define CALLBACK_PERIOD 100000
 
-namespace khmer
+namespace oxli
 {
 //
 // Hashgraph: Extension of Hashtable to support graph operations.
@@ -95,7 +95,7 @@ protected:
     {
         _tag_density = DEFAULT_TAG_DENSITY;
         if (!(_tag_density % 2 == 0)) {
-            throw khmer_exception();
+            throw oxli_exception();
         }
         partition = new SubsetPartition(this);
         _all_tags_spin_lock = 0;
@@ -134,7 +134,7 @@ public:
     {
         // must be odd; can't be set if tags exist.
         if (!(d % 2 == 0) || !all_tags.empty()) {
-            throw khmer_exception();
+            throw oxli_exception();
         }
         _tag_density = d;
     }
@@ -262,7 +262,7 @@ public:
 };
 
 // Hashgraph-derived class with ByteStorage.
-class Countgraph : public khmer::Hashgraph
+class Countgraph : public oxli::Hashgraph
 {
 public:
     explicit Countgraph(WordLength ksize, std::vector<uint64_t> sizes)
@@ -270,7 +270,7 @@ public:
 };
 
 // Hashgraph-derived class with NibbleStorage.
-class SmallCountgraph : public khmer::Hashgraph
+class SmallCountgraph : public oxli::Hashgraph
 {
 public:
     explicit SmallCountgraph(WordLength ksize, std::vector<uint64_t> sizes)
diff --git a/lib/hashtable.hh b/include/oxli/hashtable.hh
similarity index 84%
rename from lib/hashtable.hh
rename to include/oxli/hashtable.hh
index 66ea2c4..0d91b06 100644
--- a/lib/hashtable.hh
+++ b/include/oxli/hashtable.hh
@@ -52,16 +52,17 @@ Contact: khmer-project at idyll.org
 #include <memory>
 #include "MurmurHash3.h"
 
-#include "khmer.hh"
-#include "khmer_exception.hh"
+#include "oxli.hh"
+#include "oxli_exception.hh"
 #include "kmer_hash.hh"
 #include "read_parsers.hh"
 #include "storage.hh"
 #include "subset.hh"
 
+
 using namespace std;
 
-namespace khmer
+namespace oxli
 {
 namespace read_parsers
 {
@@ -72,9 +73,56 @@ class FastxReader;
 
 #define CALLBACK_PERIOD 100000
 
-namespace khmer
+namespace oxli
 {
 
+
+inline bool is_prime(uint64_t n)
+{
+    if (n < 2) {
+        return false;
+    }
+    if (n == 2) {
+        return true;
+    }
+    if (n % 2 == 0) {
+        return false;
+    }
+    for (unsigned long long i=3; i < sqrt(n) + 1; i += 2) {
+        if (n % i == 0) {
+            return false;
+        }
+    }
+    return true;
+}
+
+
+inline std::vector<uint64_t> get_n_primes_near_x(uint32_t n, uint64_t x)
+{
+    std::vector<uint64_t> primes;
+    if (x == 1 && n == 1) {
+        primes.push_back(1);
+        return primes;
+    }
+
+    uint64_t i = x - 1;
+    if (i % 2 == 0) {
+        i--;
+    }
+    while (primes.size() != n && i > 0) {
+        if (is_prime(i)) {
+            primes.push_back(i);
+        }
+        if (i == 1) {
+            break;
+        }
+        i -= 2;
+    }
+
+    // might return < n primes if x is too small
+    return primes;
+}
+
 typedef std::unique_ptr<KmerHashIterator> KmerHashIteratorPtr;
 
 class Hashtable: public
@@ -180,13 +228,13 @@ public:
     {
         store->add(khash);
     }
-    void add(const char * kmer)
+    bool add(const char * kmer)
     {
-        store->add(hash_dna(kmer));
+        return store->add(hash_dna(kmer));
     }
-    void add(HashIntoType khash)
+    bool add(HashIntoType khash)
     {
-        store->add(khash);
+        return store->add(khash);
     }
 
     // get the count for the given k-mer.
@@ -212,13 +260,6 @@ public:
     // count every k-mer in the string.
     unsigned int consume_string(const std::string &s);
 
-    // checks each read for non-ACGT characters
-    bool check_and_normalize_read(std::string &read) const;
-
-    // check each read for non-ACGT characters, and then consume it.
-    unsigned int check_and_process_read(std::string &read,
-                                        bool &is_valid);
-
     // Count every k-mer in a file containing nucleotide sequences.
     template<typename SeqIO>
     void consume_seqfile(
@@ -236,6 +277,26 @@ public:
         unsigned long long &n_consumed
     );
 
+    // Consume sequences in k-mer banding mode.
+    template<typename SeqIO>
+    void consume_seqfile_banding(
+        std::string const &filename,
+        unsigned int num_bands,
+        unsigned int band,
+        unsigned int &total_reads,
+        unsigned long long &n_consumed
+    );
+
+    // Consume sequences in k-mer banding mode.
+    template<typename SeqIO>
+    void consume_seqfile_banding(
+        read_parsers::ReadParserPtr<SeqIO>& parser,
+        unsigned int num_bands,
+        unsigned int band,
+        unsigned int &total_reads,
+        unsigned long long &n_consumed
+    );
+
     void set_use_bigcount(bool b)
     {
         store->set_use_bigcount(b);
@@ -356,7 +417,7 @@ public:
         }
 
         if (done()) {
-            throw khmer_exception("past end of iterator");
+            throw oxli_exception("past end of iterator");
         }
 
         std::string kmer;
@@ -387,7 +448,7 @@ public:
 };
 
 
-class MurmurHashtable : public khmer::Hashtable
+class MurmurHashtable : public oxli::Hashtable
 {
 public:
     explicit MurmurHashtable(WordLength ksize, Storage * s)
@@ -399,7 +460,7 @@ public:
     hash_dna(const char * kmer) const
     {
         if (!(strlen(kmer) >= _ksize)) {
-            throw khmer_exception("Supplied kmer string doesn't match the underlying k-size.");
+            throw oxli_exception("Supplied kmer string doesn't match the underlying k-size.");
         }
         return _hash_murmur(kmer, _ksize);
     }
@@ -407,19 +468,19 @@ public:
     inline virtual HashIntoType
     hash_dna_top_strand(const char * kmer) const
     {
-        throw khmer_exception("not implemented");
+        throw oxli_exception("not implemented");
     }
 
     inline virtual HashIntoType
     hash_dna_bottom_strand(const char * kmer) const
     {
-        throw khmer_exception("not implemented");
+        throw oxli_exception("not implemented");
     }
 
     inline virtual std::string
     unhash_dna(HashIntoType hashval) const
     {
-        throw khmer_exception("not implemented");
+        throw oxli_exception("not implemented");
     }
 
     virtual KmerHashIteratorPtr new_kmer_iterator(const char * sp) const
@@ -440,7 +501,7 @@ public:
 };
 
 // Hashtable-derived class with ByteStorage.
-class Counttable : public khmer::MurmurHashtable
+class Counttable : public oxli::MurmurHashtable
 {
 public:
     explicit Counttable(WordLength ksize, std::vector<uint64_t> sizes)
@@ -448,7 +509,7 @@ public:
 };
 
 // Hashtable-derived class with NibbleStorage.
-class SmallCounttable : public khmer::MurmurHashtable
+class SmallCounttable : public oxli::MurmurHashtable
 {
 public:
     explicit SmallCounttable(WordLength ksize, std::vector<uint64_t> sizes)
@@ -456,7 +517,7 @@ public:
 };
 
 // Hashtable-derived class with BitStorage.
-class Nodetable : public khmer::MurmurHashtable
+class Nodetable : public oxli::MurmurHashtable
 {
 public:
     explicit Nodetable(WordLength ksize, std::vector<uint64_t> sizes)
diff --git a/lib/hllcounter.hh b/include/oxli/hllcounter.hh
similarity index 99%
rename from lib/hllcounter.hh
rename to include/oxli/hllcounter.hh
index 8720f6f..fecea3e 100644
--- a/lib/hllcounter.hh
+++ b/include/oxli/hllcounter.hh
@@ -41,10 +41,10 @@ Contact: khmer-project at idyll.org
 #include <string>
 #include <vector>
 
-#include "khmer.hh"
+#include "oxli.hh"
 #include "read_parsers.hh"
 
-namespace khmer
+namespace oxli
 {
 
 namespace read_parsers
diff --git a/lib/kmer_filters.hh b/include/oxli/kmer_filters.hh
similarity index 98%
rename from lib/kmer_filters.hh
rename to include/oxli/kmer_filters.hh
index 3c6ad58..3511324 100644
--- a/lib/kmer_filters.hh
+++ b/include/oxli/kmer_filters.hh
@@ -39,12 +39,12 @@ Contact: khmer-project at idyll.org
 
 #include <functional>
 
-#include "khmer.hh"
+#include "oxli.hh"
 #include "kmer_hash.hh"
 #include "labelhash.hh"
 
 
-namespace khmer
+namespace oxli
 {
 
 class Hashtable;
diff --git a/lib/kmer_hash.hh b/include/oxli/kmer_hash.hh
similarity index 98%
rename from lib/kmer_hash.hh
rename to include/oxli/kmer_hash.hh
index caf98a6..da1228d 100644
--- a/lib/kmer_hash.hh
+++ b/include/oxli/kmer_hash.hh
@@ -44,7 +44,7 @@ Contact: khmer-project at idyll.org
 #include <string.h>
 #include <string>
 
-#include "khmer.hh"
+#include "oxli.hh"
 
 // test validity
 #ifdef KHMER_EXTRA_SANITY_CHECKS
@@ -94,7 +94,7 @@ Contact: khmer-project at idyll.org
 #endif
 
 
-namespace khmer
+namespace oxli
 {
 // two-way hash functions.
 HashIntoType _hash(const char * kmer, const WordLength k);
@@ -115,6 +115,10 @@ HashIntoType _hash_murmur(const std::string& kmer, const WordLength k,
 HashIntoType _hash_murmur_forward(const std::string& kmer,
                                   const WordLength k);
 
+// Function to support k-mer banding.
+std::pair<uint64_t, uint64_t> compute_band_interval(unsigned int num_bands,
+                                                    unsigned int band);
+
 /**
  * \class Kmer
  *
diff --git a/lib/labelhash.hh b/include/oxli/labelhash.hh
similarity index 98%
rename from lib/labelhash.hh
rename to include/oxli/labelhash.hh
index 3fe371b..f6cec0e 100644
--- a/lib/labelhash.hh
+++ b/include/oxli/labelhash.hh
@@ -45,10 +45,10 @@ Contact: khmer-project at idyll.org
 #include <utility>
 
 #include "hashgraph.hh"
-#include "khmer.hh"
+#include "oxli.hh"
 #include "read_parsers.hh"
 
-namespace khmer
+namespace oxli
 {
     class Hashgraph;
 
@@ -123,7 +123,7 @@ protected:
     uint32_t _tag_labels_spin_lock;
 
 public:
-    khmer::Hashgraph * graph;
+    oxli::Hashgraph * graph;
 
     explicit LabelHash(Hashgraph * ht) : graph(ht)
     {
@@ -195,7 +195,7 @@ public:
                                         const Label label);
 };
 
-} // namespace khmer
+} // namespace oxli
 
 #define ACQUIRE_TAG_COLORS_SPIN_LOCK \
   while(!__sync_bool_compare_and_swap( &_tag_labels_spin_lock, 0, 1));
diff --git a/lib/magic b/include/oxli/magic
similarity index 91%
rename from lib/magic
rename to include/oxli/magic
index 9b7f580..0262364 100644
--- a/lib/magic
+++ b/include/oxli/magic
@@ -37,13 +37,13 @@
 #
 # Example:
 #
-# $ file --magic-file lib/magic tests/test-data/normC20k20.ct
+# $ file --magic-file include/oxli/magic tests/test-data/normC20k20.ct
 # tests/test-data/normC20k20.ct: Binary from the khmer project, file format version 4, k-mer countgraph
 #
-# $ file --magic-file lib/magic --mime-type tests/test-data/normC20k20.ct
+# $ file --magic-file include/oxli/magic --mime-type tests/test-data/normC20k20.ct
 # tests/test-data/normC20k20.ct: application/vnd.oxli.countgraph
 #
-# $ file --magic-file lib/magic --extension tests/test-data/normC20k20.ct
+# $ file --magic-file include/oxli/magic --extension tests/test-data/normC20k20.ct
 # tests/test-data/normC20k20.ct: oxlicg
 #
 # See also:
diff --git a/lib/khmer.hh b/include/oxli/oxli.hh
similarity index 98%
rename from lib/khmer.hh
rename to include/oxli/oxli.hh
index e1af0d7..ac89236 100644
--- a/lib/khmer.hh
+++ b/include/oxli/oxli.hh
@@ -35,8 +35,8 @@ LICENSE (END)
 
 Contact: khmer-project at idyll.org
 */
-#ifndef KHMER_HH
-#   define KHMER_HH
+#ifndef OXLI_HH
+#   define OXLI_HH
 
 // C standard integer types are used almost ubiquitously.
 #   if (__cplusplus >= 201103L)
@@ -75,7 +75,7 @@ private:\
 #include <list>
 #include <functional>
 
-#include "khmer_exception.hh"
+#include "oxli_exception.hh"
 
 #   define MAX_KCOUNT 255
 #   define MAX_BIGCOUNT 65535
@@ -103,7 +103,7 @@ private:\
 #   define MIN( a, b )	(((a) > (b)) ? (b) : (a))
 #   define MAX( a, b )	(((a) < (b)) ? (b) : (a))
 
-namespace khmer
+namespace oxli
 {
 
 // largest number we can count up to, exactly. (8 bytes)
@@ -169,4 +169,4 @@ typedef std::list<KmerFilter> KmerFilterList;
 typedef std::vector<std::string> StringVector;
 }
 
-#endif // KHMER_HH
+#endif // OXLI_HH
diff --git a/lib/khmer_exception.hh b/include/oxli/oxli_exception.hh
similarity index 71%
rename from lib/khmer_exception.hh
rename to include/oxli/oxli_exception.hh
index 3e4b40d..8cde430 100644
--- a/lib/khmer_exception.hh
+++ b/include/oxli/oxli_exception.hh
@@ -41,7 +41,7 @@ Contact: khmer-project at idyll.org
 #include <exception>
 #include <string>
 
-namespace khmer
+namespace oxli
 {
 
 ///
@@ -49,13 +49,13 @@ namespace khmer
 //
 // All exceptions should be derived from this base class or a sub-class
 //
-class khmer_exception : public std::exception
+class oxli_exception : public std::exception
 {
 public:
-    explicit khmer_exception(const std::string& msg = "Generic khmer exception")
+    explicit oxli_exception(const std::string& msg = "Generic oxli exception")
         : _msg(msg) { }
 
-    virtual ~khmer_exception() throw() { }
+    virtual ~oxli_exception() throw() { }
     virtual const char* what() const throw ()
     {
         return _msg.c_str();
@@ -71,39 +71,47 @@ protected:
 ///
 // A base class for file exceptions.
 //
-class khmer_file_exception : public khmer_exception
+class oxli_file_exception : public oxli_exception
 {
 public:
-    explicit khmer_file_exception(const std::string& msg)
-        : khmer_exception(msg) { }
+    explicit oxli_file_exception(const std::string& msg)
+        : oxli_exception(msg) { }
 };
 
 // A base exception for value exceptions
-class khmer_value_exception : public khmer_exception
+class oxli_value_exception : public oxli_exception
 {
 public:
-    explicit khmer_value_exception(const std::string& msg)
-        : khmer_exception(msg) { }
+    explicit oxli_value_exception(const std::string& msg)
+        : oxli_exception(msg) { }
+};
+
+
+class oxli_ptr_exception : public oxli_exception
+{
+public:
+    explicit oxli_ptr_exception(const std::string& msg)
+        : oxli_exception(msg) { }
 };
 
 /////// Specialised Exceptions /////
 
-class InvalidStream : public khmer_file_exception
+class InvalidStream : public oxli_file_exception
 {
 public:
     InvalidStream()
-        : khmer_file_exception("Generic InvalidStream error") {}
+        : oxli_file_exception("Generic InvalidStream error") {}
     explicit InvalidStream(const std::string& msg)
-        : khmer_file_exception(msg) {}
+        : oxli_file_exception(msg) {}
 };
 
-class StreamReadError : public khmer_file_exception
+class StreamReadError : public oxli_file_exception
 {
 public:
     StreamReadError()
-        : khmer_file_exception("Generic StreamReadError error") {}
+        : oxli_file_exception("Generic StreamReadError error") {}
     explicit StreamReadError(const std::string& msg)
-        : khmer_file_exception(msg) {}
+        : oxli_file_exception(msg) {}
 };
 
 
@@ -111,25 +119,25 @@ public:
 // An exception for invalid arguments to functions
 //
 
-class InvalidValue : public khmer_value_exception
+class InvalidValue : public oxli_value_exception
 {
 public:
     explicit InvalidValue(const std::string& msg)
-        : khmer_value_exception(msg) { }
+        : oxli_value_exception(msg) { }
 };
 
 ///
 // An exception for trying to change a read-only attributes
 //
 
-class ReadOnlyAttribute : public khmer_exception
+class ReadOnlyAttribute : public oxli_exception
 {
 public:
     explicit ReadOnlyAttribute(const std::string& msg)
-        : khmer_exception(msg) { }
+        : oxli_exception(msg) { }
 };
 
-} // end namespace khmer
+} // end namespace oxli
 
 #endif // KHMER_EXCEPTION_HH
 
diff --git a/lib/read_aligner.hh b/include/oxli/read_aligner.hh
similarity index 98%
rename from lib/read_aligner.hh
rename to include/oxli/read_aligner.hh
index cb0c456..150f9ac 100644
--- a/lib/read_aligner.hh
+++ b/include/oxli/read_aligner.hh
@@ -48,13 +48,13 @@ Contact: khmer-project at idyll.org
 #include <string>
 #include <vector>
 
-#include "khmer.hh"
+#include "oxli.hh"
 #include "hashgraph.hh"
 #include "kmer_hash.hh"
 
 #define READ_ALIGNER_DEBUG 0
 
-namespace khmer
+namespace oxli
 {
 
 enum State { MATCH, INSERT_READ, INSERT_GRAPH,
@@ -226,7 +226,7 @@ private:
     const HashIntoType bitmask;
     const size_t rc_left_shift;
 
-    khmer::Countgraph* m_ch;
+    oxli::Countgraph* m_ch;
     ScoringMatrix m_sm;
 
     size_t m_trusted_cutoff;
@@ -244,7 +244,7 @@ public:
     Alignment* Align(const std::string&);
     Alignment* AlignForward(const std::string&);
 
-    ReadAligner(khmer::Countgraph* ch,
+    ReadAligner(oxli::Countgraph* ch,
                 BoundedCounterType trusted_cutoff, double bits_theta)
         : bitmask(comp_bitmask(ch->ksize())),
           rc_left_shift(ch->ksize() * 2 - 2),
@@ -265,7 +265,7 @@ public:
 #endif
     }
 
-    ReadAligner(khmer::Countgraph* ch,
+    ReadAligner(oxli::Countgraph* ch,
                 BoundedCounterType trusted_cutoff, double bits_theta,
                 double* scoring_matrix, double* transitions)
         : bitmask(comp_bitmask(ch->ksize())),
diff --git a/lib/read_parsers.hh b/include/oxli/read_parsers.hh
similarity index 84%
rename from lib/read_parsers.hh
rename to include/oxli/read_parsers.hh
index 04a9bdb..69dbc37 100644
--- a/lib/read_parsers.hh
+++ b/include/oxli/read_parsers.hh
@@ -38,10 +38,6 @@ Contact: khmer-project at idyll.org
 #ifndef READ_PARSERS_HH
 #define READ_PARSERS_HH
 
-#include <seqan/seq_io.h> // IWYU pragma: keep
-#include <seqan/sequence.h> // IWYU pragma: keep
-#include <seqan/stream.h> // IWYU pragma: keep
-
 #include <regex.h>
 #include <stddef.h>
 #include <stdint.h>
@@ -52,41 +48,47 @@ Contact: khmer-project at idyll.org
 #include <utility>
 #include <memory>
 
-#include "khmer.hh"
-#include "khmer_exception.hh"
+#include "oxli.hh"
+#include "oxli_exception.hh"
+
+
+namespace seqan
+{
+    class SequenceStream; // forward dec seqan dep
+}
 
-namespace khmer
+namespace oxli
 {
 
 namespace read_parsers
 {
 
-struct NoMoreReadsAvailable : public  khmer_file_exception {
+struct NoMoreReadsAvailable : public  oxli_file_exception {
     explicit NoMoreReadsAvailable(const std::string& msg) :
-        khmer_file_exception(msg) {}
+        oxli_file_exception(msg) {}
     NoMoreReadsAvailable() :
-        khmer_file_exception("No more reads available in this stream.") {}
+        oxli_file_exception("No more reads available in this stream.") {}
 };
 
-struct InvalidRead : public  khmer_value_exception {
+struct InvalidRead : public  oxli_value_exception {
     explicit InvalidRead(const std::string& msg) :
-        khmer_value_exception(msg) {}
+        oxli_value_exception(msg) {}
     InvalidRead() :
-        khmer_value_exception("Invalid FASTA/Q read") {}
+        oxli_value_exception("Invalid FASTA/Q read") {}
 };
 
-struct UnknownPairReadingMode : public  khmer_value_exception {
+struct UnknownPairReadingMode : public  oxli_value_exception {
     explicit UnknownPairReadingMode(const std::string& msg) :
-        khmer_value_exception(msg) {}
+        oxli_value_exception(msg) {}
     UnknownPairReadingMode() :
-        khmer_value_exception("Unknown pair reading mode supplied.") {}
+        oxli_value_exception("Unknown pair reading mode supplied.") {}
 };
 
-struct InvalidReadPair : public  khmer_value_exception {
+struct InvalidReadPair : public  oxli_value_exception {
     explicit InvalidReadPair(const std::string& msg) :
-        khmer_value_exception(msg) {}
+        oxli_value_exception(msg) {}
     InvalidReadPair() :
-        khmer_value_exception("Invalid read pair detected.") {}
+        oxli_value_exception("Invalid read pair detected.") {}
 };
 
 
@@ -174,7 +176,7 @@ class FastxReader
 {
 private:
     std::string _filename;
-    seqan::SequenceStream _stream;
+    std::unique_ptr<seqan::SequenceStream> _stream;
     uint32_t _spin_lock;
     size_t _num_reads;
     bool _have_qualities;
@@ -198,7 +200,7 @@ inline PartitionID _parse_partition_id(std::string name)
     PartitionID p = 0;
     const char * s = name.c_str() + name.length() - 1;
     if (!(*(s + 1) == (unsigned int) NULL)) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
     while(*s != '\t' && s >= name.c_str()) {
@@ -212,7 +214,7 @@ inline PartitionID _parse_partition_id(std::string name)
         err = "consume_partitioned_fasta cannot find partition ID for read ";
         err += name;
 
-        throw khmer_value_exception(err);
+        throw oxli_value_exception(err);
     }
 
     return p;
@@ -230,6 +232,6 @@ typedef std::unique_ptr<ReadParser<FastxReader>> FastxParserPtr;
 
 } // namespace read_parsers
 
-} // namespace khmer
+} // namespace oxli
 
 #endif // READ_PARSERS_HH
diff --git a/lib/storage.hh b/include/oxli/storage.hh
similarity index 98%
rename from lib/storage.hh
rename to include/oxli/storage.hh
index 4228a35..944d82b 100644
--- a/lib/storage.hh
+++ b/include/oxli/storage.hh
@@ -43,8 +43,7 @@ Contact: khmer-project at idyll.org
 #include <mutex>
 using MuxGuard = std::lock_guard<std::mutex>;
 
-namespace khmer
-{
+namespace oxli {
 typedef std::map<HashIntoType, BoundedCounterType> KmerCountMap;
 
 //
@@ -67,7 +66,7 @@ public:
     virtual const uint64_t n_occupied() const = 0;
     virtual const uint64_t n_unique_kmers() const = 0;
     virtual BoundedCounterType test_and_set_bits( HashIntoType khash ) = 0;
-    virtual void add(HashIntoType khash) = 0;
+    virtual bool add(HashIntoType khash) = 0;
     virtual const BoundedCounterType get_count(HashIntoType khash) const = 0;
     virtual Byte ** get_raw_tables() = 0;
 
@@ -196,9 +195,9 @@ public:
         return 0; // kmer already seen
     } // test_and_set_bits
 
-    inline void add(HashIntoType khash)
+    inline bool add(HashIntoType khash)
     {
-        test_and_set_bits(khash);
+        return test_and_set_bits(khash);
     }
 
     // get the count for the given k-mer hash.
@@ -315,7 +314,7 @@ public:
         return !x;
     }
 
-    void add(HashIntoType khash)
+    bool add(HashIntoType khash)
     {
         bool is_new_kmer = false;
 
@@ -352,6 +351,8 @@ public:
         if (is_new_kmer) {
             __sync_add_and_fetch(&_n_unique_kmers, 1);
         }
+
+        return is_new_kmer;
     }
 
     // get the count for the given k-mer hash.
@@ -511,7 +512,7 @@ public:
         return !x;
     }
 
-    inline void add(HashIntoType khash)
+    inline bool add(HashIntoType khash)
     {
         bool is_new_kmer = false;
         unsigned int  n_full	  = 0;
@@ -563,6 +564,7 @@ public:
             __sync_add_and_fetch(&_n_unique_kmers, 1);
         }
 
+        return is_new_kmer;
     }
 
     // get the count for the given k-mer hash.
diff --git a/lib/subset.hh b/include/oxli/subset.hh
similarity index 99%
rename from lib/subset.hh
rename to include/oxli/subset.hh
index 02a710b..67f3e94 100644
--- a/lib/subset.hh
+++ b/include/oxli/subset.hh
@@ -42,9 +42,9 @@ Contact: khmer-project at idyll.org
 #include <queue>
 #include <string>
 
-#include "khmer.hh"
+#include "oxli.hh"
 
-namespace khmer
+namespace oxli
 {
 class Countgraph;
 class Hashgraph;
diff --git a/lib/traversal.hh b/include/oxli/traversal.hh
similarity index 99%
rename from lib/traversal.hh
rename to include/oxli/traversal.hh
index ded14fa..4b96ea2 100644
--- a/lib/traversal.hh
+++ b/include/oxli/traversal.hh
@@ -40,12 +40,12 @@ Contact: khmer-project at idyll.org
 #include <queue>
 #include <functional>
 
-#include "khmer.hh"
+#include "oxli.hh"
 #include "hashtable.hh"
 #include "kmer_hash.hh"
 #include "kmer_filters.hh"
 
-namespace khmer
+namespace oxli
 {
 
 #ifndef TRAVERSAL_LEFT
diff --git a/khmer/__init__.py b/khmer/__init__.py
index f3c9996..f4d2fa6 100644
--- a/khmer/__init__.py
+++ b/khmer/__init__.py
@@ -50,9 +50,7 @@ from khmer._khmer import Nodegraph as _Nodegraph
 from khmer._khmer import Nodetable as _Nodetable
 from khmer._khmer import HLLCounter as _HLLCounter
 from khmer._khmer import ReadAligner as _ReadAligner
-from khmer._khmer import LinearAssembler
-from khmer._khmer import SimpleLabeledAssembler
-from khmer._khmer import JunctionCountAssembler
+
 from khmer._khmer import HashSet
 from khmer._khmer import Read
 from khmer._khmer import forward_hash
@@ -515,3 +513,6 @@ class ReadAligner(_ReadAligner):
         the traditional way.
         """
         _ReadAligner.__init__(self)
+
+from khmer._oxli.assembly import (LinearAssembler, SimpleLabeledAssembler,
+                                  JunctionCountAssembler)
diff --git a/khmer/_khmer.cc b/khmer/_khmer.cc
deleted file mode 100644
index 04633fe..0000000
--- a/khmer/_khmer.cc
+++ /dev/null
@@ -1,4959 +0,0 @@
-/*
-This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2010-2015, Michigan State University.
-Copyright (C) 2015-2016, The Regents of the University of California.
-
-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 Michigan State 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 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 COPYRIGHT
-HOLDER 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.
-LICENSE (END)
-
-Contact: khmer-project at idyll.org
-*/
-
-//
-// A module for Python that exports khmer C++ library functions.
-//
-
-// Must be first.
-#include <Python.h>
-
-#include <iostream>
-
-#include "khmer.hh"
-#include "kmer_hash.hh"
-#include "hashtable.hh"
-#include "hashgraph.hh"
-#include "assembler.hh"
-#include "read_aligner.hh"
-#include "labelhash.hh"
-#include "khmer_exception.hh"
-#include "hllcounter.hh"
-
-using namespace khmer;
-using namespace read_parsers;
-
-//
-// Python 2/3 compatibility: PyInt and PyLong
-//
-
-#if (PY_MAJOR_VERSION >= 3)
-#define PyInt_Check(arg) PyLong_Check(arg)
-#define PyInt_AsLong(arg) PyLong_AsLong(arg)
-#define PyInt_FromLong(arg) PyLong_FromLong(arg)
-#define Py_TPFLAGS_HAVE_ITER 0
-#endif
-
-//
-// Python 2/3 compatibility: PyBytes and PyString
-// https://docs.python.org/2/howto/cporting.html#str-unicode-unification
-//
-
-#include "bytesobject.h"
-
-//
-// Python 2/3 compatibility: Module initialization
-// http://python3porting.com/cextensions.html#module-initialization
-//
-
-#if PY_MAJOR_VERSION >= 3
-#define MOD_ERROR_VAL NULL
-#define MOD_SUCCESS_VAL(val) val
-#define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void)
-#define MOD_DEF(ob, name, doc, methods) \
-          static struct PyModuleDef moduledef = { \
-            PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \
-          ob = PyModule_Create(&moduledef);
-#else
-#define MOD_ERROR_VAL
-#define MOD_SUCCESS_VAL(val)
-#define MOD_INIT(name) void init##name(void)
-#define MOD_DEF(ob, name, doc, methods) \
-          ob = Py_InitModule3(name, methods, doc);
-#endif
-
-using namespace khmer;
-
-//
-// Function necessary for Python loading:
-//
-
-extern "C" {
-    MOD_INIT(_khmer);
-}
-
-/***********************************************************************/
-
-// Convert a hash to a python long object.
-static bool convert_HashIntoType_to_PyObject(const HashIntoType &hashval,
-        PyObject **value)
-{
-    *value = PyLong_FromUnsignedLongLong(hashval);
-    return true;
-}
-
-
-// Convert a python long to a hash
-static bool convert_PyLong_to_HashIntoType(PyObject * value,
-        HashIntoType &hashval)
-{
-    if (PyLong_Check(value)) {
-        //(PyLongObject *)
-        hashval = PyLong_AsUnsignedLongLong(value);
-        return true;
-    } else if (PyInt_Check(value)) {
-        hashval = PyInt_AsLong(value);
-        return true;
-    } else {
-        PyErr_SetString(PyExc_ValueError, "could not convert to hash");
-        return false;
-    }
-}
-
-
-// Take a Python object and (try to) convert it to a HashIntoType.
-// Note: will set error condition and return false if cannot do.
-
-static bool convert_PyObject_to_HashIntoType(PyObject * value,
-        HashIntoType& hashval,
-        WordLength ksize)
-{
-    if (PyInt_Check(value) || PyLong_Check(value)) {
-        return convert_PyLong_to_HashIntoType(value, hashval);
-    } else {
-        PyErr_SetString(PyExc_ValueError,
-                        "must use a hash");
-        return false;
-    }
-}
-
-// Take a Python object and (try to) convert it to a HashIntoType.
-// Note: will set error condition and return false if cannot do.
-// Further note: the main difference between this and
-// ht_convert_PyObject_to_Kmer is that this will not pass HashIntoType
-// numbers through the Kmer class, which means reverse complements
-// will not be calculated.  There is a test in test_nodegraph.py
-// that checks this.
-
-static bool ht_convert_PyObject_to_HashIntoType(PyObject * value,
-        HashIntoType& hashval,
-        const Hashtable * ht)
-{
-    if (PyInt_Check(value) || PyLong_Check(value)) {
-        return convert_PyLong_to_HashIntoType(value, hashval);
-    } else if (PyUnicode_Check(value))  {
-        PyObject* val_as_str = PyUnicode_AsEncodedString(value,
-                               "utf-8", "strict");
-        std::string s = PyBytes_AsString(val_as_str);
-        if (strlen(s.c_str()) != ht->ksize()) {
-            Py_DECREF(val_as_str);
-            PyErr_SetString(PyExc_ValueError,
-                            "k-mer length must equal the k-mer size");
-            return false;
-        }
-
-        try {
-            hashval = ht->hash_dna(s.c_str());
-        } catch (khmer_exception &e) {
-            PyErr_SetString(PyExc_ValueError, e.what());
-            Py_DECREF(val_as_str);
-            return false;
-        }
-
-        Py_DECREF(val_as_str);
-        return true;
-
-    } else if (PyBytes_Check(value)) {
-        std::string s = PyBytes_AsString(value);
-        if (strlen(s.c_str()) != ht->ksize()) {
-            PyErr_SetString(PyExc_ValueError,
-                            "k-mer length must equal the k-mer size");
-            return false;
-        }
-        try {
-            hashval = ht->hash_dna(s.c_str());
-        } catch (khmer_exception &e) {
-            PyErr_SetString(PyExc_ValueError, e.what());
-            return false;
-        }
-        return true;
-    } else {
-        PyErr_SetString(PyExc_ValueError,
-                        "k-mers must be either a hash or a string");
-        return false;
-    }
-}
-
-// Take a Python object and (try to) convert it to a khmer::Kmer.
-// Note: will set error condition and return false if cannot do.
-
-static bool ht_convert_PyObject_to_Kmer(PyObject * value,
-                                        Kmer& kmer, const Hashtable * ht)
-{
-    if (PyInt_Check(value) || PyLong_Check(value)) {
-        HashIntoType h;
-        if (!convert_PyLong_to_HashIntoType(value, h)) {
-            return false;
-        }
-        kmer.set_from_unique_hash(h, ht->ksize());
-        return true;
-    } else if (PyUnicode_Check(value))  {
-        std::string s = PyBytes_AsString(PyUnicode_AsEncodedString(
-                                             value, "utf-8", "strict"));
-        if (strlen(s.c_str()) != ht->ksize()) {
-            PyErr_SetString(PyExc_ValueError,
-                            "k-mer length must equal the k-mer size");
-            return false;
-        }
-        kmer = Kmer(s, ht->ksize());
-        return true;
-
-    } else if (PyBytes_Check(value)) {
-        std::string s = PyBytes_AsString(value);
-        if (strlen(s.c_str()) != ht->ksize()) {
-            PyErr_SetString(PyExc_ValueError,
-                            "k-mer length must equal the k-mer size");
-            return false;
-        }
-        kmer = Kmer(s, ht->ksize());
-        return true;
-    } else {
-        PyErr_SetString(PyExc_ValueError,
-                        "k-mers must be either a hash or a string");
-        return false;
-    }
-}
-
-
-static bool convert_Pytablesizes_to_vector(PyListObject * sizes_list_o,
-        std::vector<uint64_t>& sizes)
-{
-    Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o);
-    if (sizes_list_o_length < 1) {
-        PyErr_SetString(PyExc_ValueError,
-                        "tablesizes needs to be one or more numbers");
-        return false;
-    }
-    for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) {
-        PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i);
-        if (PyLong_Check(size_o)) {
-            sizes.push_back(PyLong_AsUnsignedLongLong(size_o));
-        } else if (PyInt_Check(size_o)) {
-            sizes.push_back(PyInt_AsLong(size_o));
-        } else if (PyFloat_Check(size_o)) {
-            sizes.push_back(PyFloat_AS_DOUBLE(size_o));
-        } else {
-            PyErr_SetString(PyExc_TypeError,
-                            "2nd argument must be a list of ints, longs, or floats");
-            return false;
-        }
-    }
-    return true;
-}
-
-
-static FastxParserPtr& _PyObject_to_khmer_ReadParser(PyObject * py_object);
-
-/***********************************************************************/
-
-//
-// Read object -- name, sequence, and FASTQ stuff
-//
-
-namespace khmer
-{
-
-namespace python
-{
-
-typedef struct {
-    PyObject_HEAD
-    //! Pointer to the low-level genomic read object.
-    read_parsers:: Read *   read;
-} khmer_Read_Object;
-
-
-static
-PyObject*
-khmer_Read_new(PyTypeObject * type, PyObject * args, PyObject * kwds)
-{
-    khmer_Read_Object * self;
-    self = (khmer_Read_Object *)type->tp_alloc(type, 0);
-    if (self != NULL) {
-        try {
-            self->read = new Read;
-        } catch (std::bad_alloc &exc) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-    }
-    return (PyObject *)self;
-}
-
-static
-int
-khmer_Read_init(khmer_Read_Object *self, PyObject *args, PyObject *kwds)
-{
-    const char * name{};
-    const char * description{};
-    const char * sequence{};
-    const char * quality{};
-    char *kwlist[5] = {
-        const_cast<char *>("name"), const_cast<char *>("sequence"),
-        const_cast<char *>("quality"), const_cast<char *>("description"), NULL
-    };
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|zz", kwlist,
-                                     &name, &sequence, &quality, &description)) {
-        return -1;
-    }
-
-    if (name != NULL) {
-        self->read->name = name;
-    }
-    if (sequence != NULL) {
-        self->read->sequence = sequence;
-        self->read->set_clean_seq();
-    }
-    if (quality != NULL) {
-        self->read->quality = quality;
-    }
-    if (description != NULL) {
-        self->read->description = description;
-    }
-    return 0;
-}
-
-static
-void
-khmer_Read_dealloc(khmer_Read_Object * obj)
-{
-    delete obj->read;
-    obj->read = NULL;
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-
-static Py_ssize_t
-khmer_Read_len(khmer_Read_Object* obj)
-{
-    return obj->read->sequence.size();
-}
-
-static PySequenceMethods khmer_Read_sequence_methods = {
-    (lenfunc)khmer_Read_len,                  /* sq_length */
-};
-
-
-static
-PyObject *
-Read_get_name(khmer_Read_Object * obj, void * closure )
-{
-    if (obj->read->name.size() > 0) {
-        return PyUnicode_FromString(obj->read->name.c_str());
-    } else {
-        PyErr_SetString(PyExc_AttributeError,
-                        "'Read' object has no attribute 'name'.");
-        return NULL;
-    }
-}
-
-
-static
-PyObject *
-Read_get_sequence(khmer_Read_Object * obj, void * closure)
-{
-    if (obj->read->sequence.size() > 0) {
-        return PyUnicode_FromString(obj->read->sequence.c_str());
-    } else {
-        PyErr_SetString(PyExc_AttributeError,
-                        "'Read' object has no attribute 'sequence'.");
-        return NULL;
-    }
-}
-
-
-static
-PyObject *
-Read_get_quality(khmer_Read_Object * obj, void * closure)
-{
-    if (obj->read->quality.size() > 0) {
-        return PyUnicode_FromString(obj->read->quality.c_str());
-    } else {
-        PyErr_SetString(PyExc_AttributeError,
-                        "'Read' object has no attribute 'quality'.");
-        return NULL;
-    }
-}
-
-
-static
-PyObject *
-Read_get_description(khmer_Read_Object * obj, void * closure)
-{
-    if (obj->read->description.size() > 0) {
-        return PyUnicode_FromString(obj->read->description.c_str());
-    } else {
-        PyErr_SetString(PyExc_AttributeError,
-                        "'Read' object has no attribute 'description'.");
-        return NULL;
-    }
-}
-
-
-static
-PyObject *
-Read_get_cleaned_seq(khmer_Read_Object * obj, void * closure)
-{
-    if (obj->read->cleaned_seq.size() > 0) {
-        return PyUnicode_FromString(obj->read->cleaned_seq.c_str());
-    } else if (obj->read->sequence.size() > 0) {
-        obj->read->set_clean_seq();
-        return PyUnicode_FromString(obj->read->cleaned_seq.c_str());
-    } else {
-        PyErr_SetString(PyExc_AttributeError,
-                        "'Read' object has no attribute 'cleaned_seq'.");
-        return NULL;
-    }
-}
-
-
-// TODO? Implement setters.
-
-
-static PyGetSetDef khmer_Read_accessors [ ] = {
-    {
-        (char *)"name",
-        (getter)Read_get_name, (setter)NULL,
-        (char *)"Read identifier.", NULL
-    },
-    {
-        (char *)"sequence",
-        (getter)Read_get_sequence, (setter)NULL,
-        (char *)"Genomic sequence.", NULL
-    },
-    {
-        (char *)"quality",
-        (getter)Read_get_quality, (setter)NULL,
-        (char *)"Quality scores.", NULL
-    },
-    {
-        (char *)"description",
-        (getter)Read_get_description, (setter)NULL,
-        (char *)"Description.", NULL
-    },
-    {
-        (char *)"cleaned_seq",
-        (getter)Read_get_cleaned_seq, (setter)NULL,
-        (char *)"Cleaned sequence.", NULL
-    },
-
-    { NULL, NULL, NULL, NULL, NULL } // sentinel
-};
-
-
-static PyTypeObject khmer_Read_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
-    "khmer.Read",                         /* tp_name */
-    sizeof(khmer_Read_Object),            /* tp_basicsize */
-    0,                                    /* tp_itemsize */
-    (destructor)khmer_Read_dealloc,       /* tp_dealloc */
-    0,                                    /* tp_print */
-    0,                                    /* tp_getattr */
-    0,                                    /* tp_setattr */
-    0,                                    /* tp_compare */
-    0,                                    /* tp_repr */
-    0,                                    /* tp_as_number */
-    &khmer_Read_sequence_methods,         /* tp_as_sequence */
-    0,                                    /* tp_as_mapping */
-    0,                                    /* tp_hash */
-    0,                                    /* tp_call */
-    0,                                    /* tp_str */
-    0,                                    /* tp_getattro */
-    0,                                    /* tp_setattro */
-    0,                                    /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                   /* tp_flags */
-    "A FASTQ record plus some metadata.", /* tp_doc */
-    0,                                    /* tp_traverse */
-    0,                                    /* tp_clear */
-    0,                                    /* tp_richcompare */
-    0,                                    /* tp_weaklistoffset */
-    0,                                    /* tp_iter */
-    0,                                    /* tp_iternext */
-    0,                                    /* tp_methods */
-    0,                                    /* tp_members */
-    (PyGetSetDef *)khmer_Read_accessors,  /* tp_getset */
-    0,                                    /* tp_base */
-    0,                                    /* tp_dict */
-    0,                                    /* tp_descr_get */
-    0,                                    /* tp_descr_set */
-    0,                                    /* tp_dictoffset */
-    (initproc)khmer_Read_init,            /* tp_init */
-    0,                                    /* tp_alloc */
-    khmer_Read_new,                       /* tp_new */
-};
-
-
-/***********************************************************************/
-
-//
-// ReadParser object -- parse reads directly from streams
-// ReadPairIterator -- return pairs of Read objects
-//
-
-
-typedef struct {
-    PyObject_HEAD
-    FastxParserPtr parser;
-} khmer_ReadParser_Object;
-
-
-typedef struct {
-    PyObject_HEAD
-    //! Pointer to Python parser object for reference counting purposes.
-    PyObject * parent;
-    //! Persistent value of pair mode across invocations.
-    int pair_mode;
-} khmer_ReadPairIterator_Object;
-
-
-static
-void
-_ReadParser_dealloc(khmer_ReadParser_Object * obj)
-{
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-
-static
-void
-khmer_ReadPairIterator_dealloc(khmer_ReadPairIterator_Object * obj)
-{
-    Py_DECREF(obj->parent);
-    obj->parent = NULL;
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-
-static PyObject *
-_ReadParser_new( PyTypeObject * subtype, PyObject * args, PyObject * kwds )
-{
-    const char *      ifile_name_CSTR;
-
-    if (!PyArg_ParseTuple(args, "s", &ifile_name_CSTR )) {
-        return NULL;
-    }
-    std:: string    ifile_name( ifile_name_CSTR );
-
-    PyObject * self     = subtype->tp_alloc( subtype, 1 );
-    if (self == NULL) {
-        return NULL;
-    }
-    khmer_ReadParser_Object * myself  = (khmer_ReadParser_Object *)self;
-
-    // Wrap the low-level parser object.
-    try {
-        myself->parser = get_parser<FastxReader>(ifile_name);
-    } catch (khmer_file_exception &exc) {
-        PyErr_SetString( PyExc_OSError, exc.what() );
-        return NULL;
-    }
-    return self;
-}
-
-
-static
-PyObject *
-_ReadParser_iternext( PyObject * self )
-{
-    khmer_ReadParser_Object * myself  = (khmer_ReadParser_Object *)self;
-    FastxParserPtr& parser = myself->parser;
-    std::string exc_string;
-
-    bool        stop_iteration  = false;
-    const char *value_exception = NULL;
-    const char *file_exception  = NULL;
-    Read       *the_read_PTR    = NULL;
-    try {
-        the_read_PTR = new Read( );
-    } catch (std::bad_alloc &exc) {
-        return PyErr_NoMemory();
-    }
-
-    Py_BEGIN_ALLOW_THREADS
-    stop_iteration = parser->is_complete( );
-    if (!stop_iteration) {
-        try {
-            *the_read_PTR = parser->get_next_read();
-        } catch (NoMoreReadsAvailable &exc) {
-            stop_iteration = true;
-        } catch (khmer_file_exception &exc) {
-            exc_string = exc.what();
-            file_exception = exc_string.c_str();
-        } catch (khmer_value_exception &exc) {
-            exc_string = exc.what();
-            value_exception = exc_string.c_str();
-        }
-    }
-    Py_END_ALLOW_THREADS
-
-    // Note: Can simply return NULL instead of setting the StopIteration
-    //       exception.
-    if (stop_iteration) {
-        delete the_read_PTR;
-        return NULL;
-    }
-
-    if (file_exception != NULL) {
-        delete the_read_PTR;
-        PyErr_SetString(PyExc_OSError, file_exception);
-        return NULL;
-    }
-    if (value_exception != NULL) {
-        delete the_read_PTR;
-        PyErr_SetString(PyExc_ValueError, value_exception);
-        return NULL;
-    }
-
-    PyObject * the_read_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 );
-    ((khmer_Read_Object *)the_read_OBJECT)->read = the_read_PTR;
-    return the_read_OBJECT;
-}
-
-
-static
-PyObject *
-_ReadPairIterator_iternext(khmer_ReadPairIterator_Object * myself)
-{
-    khmer_ReadParser_Object * parent = (khmer_ReadParser_Object*)myself->parent;
-    FastxParserPtr& parser = parent->parser;
-    uint8_t     pair_mode = myself->pair_mode;
-
-    ReadPair    the_read_pair;
-    bool        stop_iteration  = false;
-    const char *value_exception = NULL;
-    const char *file_exception  = NULL;
-    std::string exc_string;
-
-    Py_BEGIN_ALLOW_THREADS
-    stop_iteration = parser->is_complete( );
-    if (!stop_iteration) {
-        try {
-            the_read_pair = parser->get_next_read_pair(pair_mode);
-        } catch (NoMoreReadsAvailable &exc) {
-            stop_iteration = true;
-        } catch (khmer_file_exception &exc) {
-            exc_string = exc.what();
-            file_exception = exc_string.c_str();
-        } catch (khmer_value_exception &exc) {
-            exc_string = exc.what();
-            value_exception = exc_string.c_str();
-        }
-    }
-    Py_END_ALLOW_THREADS
-
-    // Note: Can return NULL instead of setting the StopIteration exception.
-    if (stop_iteration) {
-        return NULL;
-    }
-    if (file_exception != NULL) {
-        PyErr_SetString(PyExc_OSError, file_exception);
-        return NULL;
-    }
-    if (value_exception != NULL) {
-        PyErr_SetString(PyExc_ValueError, value_exception);
-        return NULL;
-    }
-
-    // Copy elements of 'ReadPair' object into Python tuple.
-    // TODO? Replace dummy reads with 'None' object.
-    PyObject * read_1_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 );
-    try {
-        ((khmer_Read_Object *)read_1_OBJECT)->read = new Read( the_read_pair.first );
-    } catch (std::bad_alloc &e) {
-        return PyErr_NoMemory();
-    }
-    PyObject * read_2_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 );
-    try {
-        ((khmer_Read_Object *)read_2_OBJECT)->read = new Read( the_read_pair.second );
-    } catch (std::bad_alloc &e) {
-        delete ((khmer_Read_Object *)read_1_OBJECT)->read;
-        return PyErr_NoMemory();
-    }
-    PyObject * tup = PyTuple_Pack( 2, read_1_OBJECT, read_2_OBJECT );
-    Py_XDECREF(read_1_OBJECT);
-    Py_XDECREF(read_2_OBJECT);
-    return tup;
-}
-
-static PyTypeObject khmer_ReadPairIterator_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)              /* init & ob_size */
-    "_khmer.ReadPairIterator",                   /* tp_name */
-    sizeof(khmer_ReadPairIterator_Object),      /* tp_basicsize */
-    0,                                          /* tp_itemsize */
-    (destructor)khmer_ReadPairIterator_dealloc, /* tp_dealloc */
-    0,                                          /* tp_print */
-    0,                                          /* tp_getattr */
-    0,                                          /* tp_setattr */
-    0,                                          /* tp_compare */
-    0,                                          /* tp_repr */
-    0,                                          /* tp_as_number */
-    0,                                          /* tp_as_sequence */
-    0,                                          /* tp_as_mapping */
-    0,                                          /* tp_hash */
-    0,                                          /* tp_call */
-    0,                                          /* tp_str */
-    0,                                          /* tp_getattro */
-    0,                                          /* tp_setattro */
-    0,                                          /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                         /* tp_flags */
-    "Iterates over 'ReadParser' objects and returns read pairs.", /* tp_doc */
-    0,                                          /* tp_traverse */
-    0,                                          /* tp_clear */
-    0,                                          /* tp_richcompare */
-    0,                                          /* tp_weaklistoffset */
-    PyObject_SelfIter,                          /* tp_iter */
-    (iternextfunc)_ReadPairIterator_iternext,   /* tp_iternext */
-};
-
-
-
-static
-PyObject *
-ReadParser_iter_reads(PyObject * self, PyObject * args )
-{
-    return PyObject_SelfIter( self );
-}
-
-static
-PyObject *
-ReadParser_get_num_reads(khmer_ReadParser_Object * me)
-{
-    return PyLong_FromLong(me->parser->get_num_reads());
-}
-
-static
-PyObject *
-ReadParser_iter_read_pairs(PyObject * self, PyObject * args )
-{
-    int pair_mode = ReadParser<FastxReader>::PAIR_MODE_ERROR_ON_UNPAIRED;
-
-    if (!PyArg_ParseTuple( args, "|i", &pair_mode )) {
-        return NULL;
-    }
-
-    // Capture existing read parser.
-    PyObject * obj = khmer_ReadPairIterator_Type.tp_alloc(
-                         &khmer_ReadPairIterator_Type, 1
-                     );
-    if (obj == NULL) {
-        return NULL;
-    }
-    khmer_ReadPairIterator_Object * rpi   = (khmer_ReadPairIterator_Object *)obj;
-    rpi->parent             = self;
-    rpi->pair_mode          = pair_mode;
-
-    // Increment reference count on existing ReadParser object so that it
-    // will not go away until all ReadPairIterator instances have gone away.
-    Py_INCREF( self );
-
-    return obj;
-}
-
-
-PyObject *
-ReadParser_close(PyObject * self, PyObject * args)
-{
-    FastxParserPtr& rparser = _PyObject_to_khmer_ReadParser(self);
-    rparser->close();
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static PyMethodDef _ReadParser_methods [ ] = {
-    {
-        "iter_reads",       (PyCFunction)ReadParser_iter_reads,
-        METH_NOARGS,        "Iterates over reads."
-    },
-    {
-        "iter_read_pairs",  (PyCFunction)ReadParser_iter_read_pairs,
-        METH_VARARGS,       "Iterates over paired reads as pairs."
-    },
-    {
-        "close",  (PyCFunction)ReadParser_close,
-        METH_NOARGS,       "Close associated files."
-    },
-    { NULL, NULL, 0, NULL } // sentinel
-};
-
-static PyGetSetDef khmer_ReadParser_accessors[] = {
-    {
-        (char *)"num_reads",
-        (getter)ReadParser_get_num_reads, NULL,
-        (char *)"count of reads processed thus far.",
-        NULL
-    },
-    {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
-};
-
-static PyTypeObject khmer_ReadParser_Type
-CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_ReadParser_Object")
-= {
-    PyVarObject_HEAD_INIT(NULL, 0)             /* init & ob_size */
-    "_khmer.ReadParser",                        /* tp_name */
-    sizeof(khmer_ReadParser_Object),           /* tp_basicsize */
-    0,                                         /* tp_itemsize */
-    (destructor)_ReadParser_dealloc,           /* tp_dealloc */
-    0,                                         /* tp_print */
-    0,                                         /* tp_getattr */
-    0,                                         /* tp_setattr */
-    0,                                         /* tp_compare */
-    0,                                         /* tp_repr */
-    0,                                         /* tp_as_number */
-    0,                                         /* tp_as_sequence */
-    0,                                         /* tp_as_mapping */
-    0,                                         /* tp_hash */
-    0,                                         /* tp_call */
-    0,                                         /* tp_str */
-    0,                                         /* tp_getattro */
-    0,                                         /* tp_setattro */
-    0,                                         /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                        /* tp_flags */
-    "Parses streams from various file formats, " \
-    "such as FASTA and FASTQ.",                /* tp_doc */
-    0,                                         /* tp_traverse */
-    0,                                         /* tp_clear */
-    0,                                         /* tp_richcompare */
-    0,                                         /* tp_weaklistoffset */
-    PyObject_SelfIter,                         /* tp_iter */
-    (iternextfunc)_ReadParser_iternext,        /* tp_iternext */
-    _ReadParser_methods,                       /* tp_methods */
-    0,                                         /* tp_members */
-    khmer_ReadParser_accessors,                /* tp_getset */
-    0,                                         /* tp_base */
-    0,                                         /* tp_dict */
-    0,                                         /* tp_descr_get */
-    0,                                         /* tp_descr_set */
-    0,                                         /* tp_dictoffset */
-    0,                                         /* tp_init */
-    0,                                         /* tp_alloc */
-    _ReadParser_new,                           /* tp_new */
-};
-
-void _init_ReadParser_Type_constants()
-{
-    PyObject * cls_attrs_DICT = PyDict_New( );
-    if (cls_attrs_DICT == NULL) {
-        return;
-    }
-
-    // Place pair mode constants into class dictionary.
-    int result;
-    PyObject *value = PyLong_FromLong(
-                          ReadParser<FastxReader>::PAIR_MODE_IGNORE_UNPAIRED);
-    if (value == NULL) {
-        Py_DECREF(cls_attrs_DICT);
-        return;
-    }
-    result = PyDict_SetItemString(cls_attrs_DICT,
-                                  "PAIR_MODE_IGNORE_UNPAIRED", value );
-    Py_XDECREF(value);
-    if (!result) {
-        Py_DECREF(cls_attrs_DICT);
-        return;
-    }
-
-    value = PyLong_FromLong(ReadParser<FastxReader>::PAIR_MODE_ERROR_ON_UNPAIRED);
-    if (value == NULL) {
-        Py_DECREF(cls_attrs_DICT);
-        return;
-    }
-    result = PyDict_SetItemString(cls_attrs_DICT,
-                                  "PAIR_MODE_ERROR_ON_UNPAIRED", value);
-    Py_XDECREF(value);
-    if (!result) {
-        Py_DECREF(cls_attrs_DICT);
-        return;
-    }
-
-    khmer_ReadParser_Type.tp_dict     = cls_attrs_DICT;
-}
-
-} // namespace python
-
-} // namespace khmer
-
-
-static FastxParserPtr& _PyObject_to_khmer_ReadParser(PyObject * py_object)
-{
-    // TODO: Add type-checking.
-
-    return ((python:: khmer_ReadParser_Object *)py_object)->parser;
-}
-
-typedef struct {
-    PyObject_HEAD
-    pre_partition_info *   PrePartitionInfo;
-} khmer_PrePartitionInfo_Object;
-
-static
-void
-khmer_PrePartitionInfo_dealloc(khmer_PrePartitionInfo_Object * obj)
-{
-    delete obj->PrePartitionInfo;
-    obj->PrePartitionInfo = NULL;
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static PyTypeObject khmer_PrePartitionInfo_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
-    "_khmer.PrePartitionInfo",            /* tp_name */
-    sizeof(khmer_PrePartitionInfo_Object),/* tp_basicsize */
-    0,                                    /* tp_itemsize */
-    (destructor)khmer_PrePartitionInfo_dealloc,       /* tp_dealloc */
-    0,                                    /* tp_print */
-    0,                                    /* tp_getattr */
-    0,                                    /* tp_setattr */
-    0,                                    /* tp_compare */
-    0,                                    /* tp_repr */
-    0,                                    /* tp_as_number */
-    0,                                    /* tp_as_sequence */
-    0,                                    /* tp_as_mapping */
-    0,                                    /* tp_hash */
-    0,                                    /* tp_call */
-    0,                                    /* tp_str */
-    0,                                    /* tp_getattro */
-    0,                                    /* tp_setattro */
-    0,                                    /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                   /* tp_flags */
-    "Stores a k-kmer and a set of tagged seen k-mers.", /* tp_doc */
-};
-
-
-/***********************************************************************/
-/***********************************************************************/
-
-typedef struct {
-    PyObject_HEAD
-    SeenSet * hashes;
-    WordLength ksize;
-} khmer_HashSet_Object;
-
-static khmer_HashSet_Object * create_HashSet_Object(SeenSet * h, WordLength k);
-
-static
-void
-khmer_HashSet_dealloc(khmer_HashSet_Object * obj)
-{
-    delete obj->hashes;
-    obj->hashes = NULL;
-    obj->ksize = 0;
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static PyObject* khmer_HashSet_new(PyTypeObject * type, PyObject * args,
-                                   PyObject * kwds)
-{
-    khmer_HashSet_Object * self;
-
-    self = (khmer_HashSet_Object *)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        PyObject * list_o = NULL;
-        WordLength k;
-        if (!PyArg_ParseTuple(args, "b|O!", &k, &PyList_Type, &list_o)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->hashes = new SeenSet;
-            self->ksize = k;
-        } catch (std::bad_alloc &e) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-
-        if (list_o) {
-            Py_ssize_t size = PyList_Size(list_o);
-            for (Py_ssize_t i = 0; i < size; i++) {
-                PyObject * item = PyList_GET_ITEM(list_o, i);
-                HashIntoType h;
-
-                if (!convert_PyObject_to_HashIntoType(item, h, self->ksize)) {
-                    return NULL;
-                }
-                self->hashes->insert(h);
-            }
-        }
-    }
-    return (PyObject *) self;
-}
-
-/***********************************************************************/
-
-typedef struct {
-    PyObject_HEAD
-    khmer_HashSet_Object * parent;
-    SeenSet::iterator * it;
-} _HashSet_iterobj;
-
-static
-void
-_HashSet_iter_dealloc(_HashSet_iterobj * obj)
-{
-    delete obj->it;
-    obj->it = NULL;
-    Py_DECREF(obj->parent);
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static PyObject * _HashSet_iter(PyObject * self)
-{
-    Py_INCREF(self);
-    return self;
-}
-
-static PyObject * _HashSet_iternext(PyObject * self)
-{
-    _HashSet_iterobj * iter_obj = (_HashSet_iterobj *) self;
-    SeenSet * hashes = iter_obj->parent->hashes;
-    if (*iter_obj->it != hashes->end()) {
-        PyObject * ret = nullptr;
-        convert_HashIntoType_to_PyObject((**iter_obj->it), &ret);
-        (*(iter_obj->it))++;
-        return ret;
-    }
-
-    PyErr_SetString(PyExc_StopIteration, "end of HashSet");
-    return NULL;
-}
-
-static PyTypeObject _HashSet_iter_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
-    "_khmer.HashSet_iter",                /* tp_name */
-    sizeof(_HashSet_iterobj),             /* tp_basicsize */
-    0,                                    /* tp_itemsize */
-    (destructor)_HashSet_iter_dealloc,    /* tp_dealloc */
-    0,                                    /* tp_print */
-    0,                                    /* tp_getattr */
-    0,                                    /* tp_setattr */
-    0,                                    /* tp_compare */
-    0,                                    /* tp_repr */
-    0,                                    /* tp_as_number */
-    0,                                    /* tp_as_sequence */
-    0,                                    /* tp_as_mapping */
-    0,                                    /* tp_hash */
-    0,                                    /* tp_call */
-    0,                                    /* tp_str */
-    0,                                    /* tp_getattro */
-    0,                                    /* tp_setattro */
-    0,                                    /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /* tp_flags */
-    "iterator object for HashSet objects.", /* tp_doc */
-    0,                                    /* tp_traverse */
-    0,                                    /* tp_clear */
-    0,                                    /* tp_richcompare */
-    0,                                    /* tp_weaklistoffset */
-    _HashSet_iter,                        /* tp_iter */
-    _HashSet_iternext,                    /* tp_iternext */
-    0,                                    /* tp_methods */
-    0,                                    /* tp_members */
-    0,                                    /* tp_getset */
-    0,                                    /* tp_base */
-    0,                                    /* tp_dict */
-    0,                                    /* tp_descr_get */
-    0,                                    /* tp_descr_set */
-    0,                                    /* tp_dictoffset */
-    0,                                    /* tp_init */
-    0,                                    /* tp_alloc */
-    0,                                    /* tp_new */
-};
-
-static PyObject * khmer_HashSet_iter(PyObject * self)
-{
-    khmer_HashSet_Object * me = (khmer_HashSet_Object *) self;
-    _HashSet_iterobj * iter_obj = (_HashSet_iterobj *)
-                                  _HashSet_iter_Type.tp_alloc(&_HashSet_iter_Type, 0);
-    if (iter_obj != NULL) {
-        Py_INCREF(me);
-        iter_obj->parent = me;
-
-        iter_obj->it = new SeenSet::iterator;
-        *iter_obj->it = me->hashes->begin();
-    }
-    return (PyObject *) iter_obj;
-}
-
-static int khmer_HashSet_len(khmer_HashSet_Object * o)
-{
-    return (Py_ssize_t) o->hashes->size();
-}
-
-static PyObject * khmer_HashSet_concat(khmer_HashSet_Object * o,
-                                       khmer_HashSet_Object * o2)
-{
-    if (o->ksize != o2->ksize) {
-        PyErr_SetString(PyExc_ValueError,
-                        "cannot add HashSets with different ksizes");
-        return NULL;
-    }
-    khmer_HashSet_Object * no = create_HashSet_Object(new SeenSet,
-                                o->ksize);
-    no->hashes->insert(o->hashes->begin(), o->hashes->end());
-    no->hashes->insert(o2->hashes->begin(), o2->hashes->end());
-
-    return (PyObject *) no;
-}
-
-static PyObject * khmer_HashSet_concat_inplace(khmer_HashSet_Object * o,
-        khmer_HashSet_Object * o2)
-{
-    if (o->ksize != o2->ksize) {
-        PyErr_SetString(PyExc_ValueError,
-                        "cannot add HashSets with different ksizes");
-        return NULL;
-    }
-    o->hashes->insert(o2->hashes->begin(), o2->hashes->end());
-
-    Py_INCREF(o);
-    return (PyObject *) o;
-}
-
-static int khmer_HashSet_contains(khmer_HashSet_Object * o, PyObject * val)
-{
-    HashIntoType v;
-
-    if (convert_PyObject_to_HashIntoType(val, v, 0)) {
-        if (set_contains(*o->hashes, v)) {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-static PyObject *
-hashset_add(khmer_HashSet_Object * me, PyObject * args)
-{
-    PyObject * hash_obj;
-    HashIntoType h;
-    if (!PyArg_ParseTuple(args, "O", &hash_obj)) {
-        return NULL;
-    }
-
-    if (!convert_PyObject_to_HashIntoType(hash_obj, h, 0)) {
-        return NULL;
-    }
-    me->hashes->insert(h);
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static PyObject *
-hashset_remove(khmer_HashSet_Object * me, PyObject * args)
-{
-    PyObject * hash_obj;
-    HashIntoType h;
-    if (!PyArg_ParseTuple(args, "O", &hash_obj)) {
-        return NULL;
-    }
-
-    if (!convert_PyObject_to_HashIntoType(hash_obj, h, 0)) {
-        return NULL;
-    }
-    SeenSet::iterator it = me->hashes->find(h);
-    if (it == me->hashes->end()) {
-        PyErr_SetString(PyExc_ValueError, "h not in list");
-        return NULL;
-    }
-    me->hashes->erase(it);
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static PyObject *
-hashset_update(khmer_HashSet_Object * me, PyObject * args)
-{
-    PyObject * obj;
-    if (!PyArg_ParseTuple(args, "O", &obj)) {
-        return NULL;
-    }
-
-    PyObject * iterator = PyObject_GetIter(obj);
-    if (iterator == NULL) {
-        return NULL;
-    }
-    PyObject * item = PyIter_Next(iterator);
-    while(item) {
-        HashIntoType h;
-
-        if (!convert_PyObject_to_HashIntoType(item, h, 0)) {
-            PyErr_SetString(PyExc_ValueError, "unknown item type for update");
-            Py_DECREF(item);
-            return NULL;
-        }
-        me->hashes->insert(h);
-
-        Py_DECREF(item);
-        item = PyIter_Next(iterator);
-    }
-    Py_DECREF(iterator);
-    if (PyErr_Occurred()) {
-        return NULL;
-    }
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static PyMethodDef khmer_HashSet_methods[] = {
-    {
-        "add",
-        (PyCFunction)hashset_add, METH_VARARGS,
-        "Add element to the HashSet."
-    },
-    {
-        "remove",
-        (PyCFunction)hashset_remove, METH_VARARGS,
-        "Remove an element from the HashSet."
-    },
-    {
-        "update",
-        (PyCFunction)hashset_update, METH_VARARGS,
-        "Add a list of elements to the HashSet."
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PySequenceMethods khmer_HashSet_seqmethods[] = {
-    (lenfunc)khmer_HashSet_len, /* sq_length */
-    (binaryfunc)khmer_HashSet_concat,      /* sq_concat */
-    0,                          /* sq_repeat */
-    0,                          /* sq_item */
-    0,                          /* sq_slice */
-    0,                          /* sq_ass_item */
-    0,                          /* sq_ass_slice */
-    (objobjproc)khmer_HashSet_contains, /* sq_contains */
-    (binaryfunc)khmer_HashSet_concat_inplace,      /* sq_inplace_concat */
-    0                           /* sq_inplace_repeat */
-};
-
-static PyTypeObject khmer_HashSet_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
-    "_khmer.HashSet",                     /* tp_name */
-    sizeof(khmer_HashSet_Object),         /* tp_basicsize */
-    0,                                    /* tp_itemsize */
-    (destructor)khmer_HashSet_dealloc,    /* tp_dealloc */
-    0,                                    /* tp_print */
-    0,                                    /* tp_getattr */
-    0,                                    /* tp_setattr */
-    0,                                    /* tp_compare */
-    0,                                    /* tp_repr */
-    0,                                    /* tp_as_number */
-    khmer_HashSet_seqmethods,             /* tp_as_sequence */
-    0,                                    /* tp_as_mapping */
-    0,                                    /* tp_hash */
-    0,                                    /* tp_call */
-    0,                                    /* tp_str */
-    0,                                    /* tp_getattro */
-    0,                                    /* tp_setattro */
-    0,                                    /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /* tp_flags */
-    "Stores a set of hashed k-mers.",     /* tp_doc */
-    0,                                    /* tp_traverse */
-    0,                                    /* tp_clear */
-    0,                                    /* tp_richcompare */
-    0,                                    /* tp_weaklistoffset */
-    khmer_HashSet_iter,                   /* tp_iter */
-    0,                                    /* tp_iternext */
-    khmer_HashSet_methods,                /* tp_methods */
-    0,                                    /* tp_members */
-    0,                                    /* tp_getset */
-    0,                                    /* tp_base */
-    0,                                    /* tp_dict */
-    0,                                    /* tp_descr_get */
-    0,                                    /* tp_descr_set */
-    0,                                    /* tp_dictoffset */
-    0,                                    /* tp_init */
-    0,                                    /* tp_alloc */
-    khmer_HashSet_new,                    /* tp_new */
-};
-
-static khmer_HashSet_Object * create_HashSet_Object(SeenSet * h, WordLength k)
-{
-    khmer_HashSet_Object * self;
-
-    self = (khmer_HashSet_Object *)
-           khmer_HashSet_Type.tp_alloc(&khmer_HashSet_Type, 0);
-    if (self != NULL) {
-        self->hashes = h;
-        self->ksize = k;
-    }
-    return self;
-}
-
-/***********************************************************************/
-
-typedef struct {
-    PyObject_HEAD
-    Hashtable * hashtable;
-} khmer_KHashtable_Object;
-
-typedef struct {
-    khmer_KHashtable_Object khashtable;
-    Hashgraph * hashgraph;
-} khmer_KHashgraph_Object;
-
-typedef struct {
-    PyObject_HEAD
-    SubsetPartition * subset;
-} khmer_KSubsetPartition_Object;
-
-static void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj);
-
-static PyTypeObject khmer_KSubsetPartition_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)         /* init & ob_size */
-    "_khmer.KSubsetPartition",              /* tp_name */
-    sizeof(khmer_KSubsetPartition_Object), /* tp_basicsize */
-    0,                                     /* tp_itemsize */
-    (destructor)khmer_subset_dealloc,      /*tp_dealloc*/
-    0,                                     /*tp_print*/
-    0,                                     /*tp_getattr*/
-    0,                                     /*tp_setattr*/
-    0,                                     /*tp_compare*/
-    0,                                     /*tp_repr*/
-    0,                                     /*tp_as_number*/
-    0,                                     /*tp_as_sequence*/
-    0,                                     /*tp_as_mapping*/
-    0,                                     /*tp_hash */
-    0,                                     /*tp_call*/
-    0,                                     /*tp_str*/
-    0,                                     /*tp_getattro*/
-    0,                                     /*tp_setattro*/
-    0,                                     /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,                    /*tp_flags*/
-    "subset object",                       /* tp_doc */
-};
-
-typedef struct {
-    khmer_KHashgraph_Object khashgraph;
-    Nodegraph * nodegraph;
-} khmer_KNodegraph_Object;
-
-static void khmer_nodegraph_dealloc(khmer_KNodegraph_Object * obj);
-static PyObject* khmer_nodegraph_new(PyTypeObject * type, PyObject * args,
-                                     PyObject * kwds);
-
-static PyTypeObject khmer_KNodegraph_Type
-CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KNodegraph_Object")
-= {
-    PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
-    "_khmer.Nodegraph",             /* tp_name */
-    sizeof(khmer_KNodegraph_Object), /* tp_basicsize */
-    0,                             /* tp_itemsize */
-    (destructor)khmer_nodegraph_dealloc, /*tp_dealloc*/
-    0,              /*tp_print*/
-    0,              /*tp_getattr*/
-    0,              /*tp_setattr*/
-    0,              /*tp_compare*/
-    0,              /*tp_repr*/
-    0,              /*tp_as_number*/
-    0,              /*tp_as_sequence*/
-    0,              /*tp_as_mapping*/
-    0,              /*tp_hash */
-    0,              /*tp_call*/
-    0,              /*tp_str*/
-    0,              /*tp_getattro*/
-    0,              /*tp_setattro*/
-    0,              /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,       /*tp_flags*/
-    "nodegraph object",           /* tp_doc */
-    0,                       /* tp_traverse */
-    0,                       /* tp_clear */
-    0,                       /* tp_richcompare */
-    0,                       /* tp_weaklistoffset */
-    0,                       /* tp_iter */
-    0,                       /* tp_iternext */
-    0,  /* tp_methods */
-    0,                       /* tp_members */
-    0,                       /* tp_getset */
-    0,                       /* tp_base */
-    0,                       /* tp_dict */
-    0,                       /* tp_descr_get */
-    0,                       /* tp_descr_set */
-    0,                       /* tp_dictoffset */
-    0,                       /* tp_init */
-    0,                       /* tp_alloc */
-    khmer_nodegraph_new,                  /* tp_new */
-};
-
-
-static
-PyObject *
-hashtable_ksize(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    unsigned int k = hashtable->ksize();
-
-    return PyLong_FromLong(k);
-}
-
-static
-PyObject *
-hashtable_hash(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    char * kmer;
-    if (!PyArg_ParseTuple(args, "s", &kmer)) {
-        return NULL;
-    }
-
-    if (strlen(kmer) != hashtable->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "provided k-mer is wrong length");
-        return NULL;
-    }
-
-    try {
-        PyObject * hash = nullptr;
-        const HashIntoType h(hashtable->hash_dna(kmer));
-        convert_HashIntoType_to_PyObject(h, &hash);
-        return hash;
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-}
-
-static
-PyObject *
-hashtable_reverse_hash(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    PyObject * val_o;
-    HashIntoType val;
-    if (!PyArg_ParseTuple(args, "O", &val_o)) {
-        return NULL;
-    }
-
-    if (!ht_convert_PyObject_to_HashIntoType(val_o, val, hashtable)) {
-        return NULL;
-    }
-
-    try {
-        return PyUnicode_FromString(hashtable->unhash_dna(val).c_str());
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-}
-
-static
-PyObject *
-hashtable_n_occupied(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    uint64_t n = hashtable->n_occupied();
-
-    return PyLong_FromUnsignedLongLong(n);
-}
-
-static
-PyObject *
-hashtable_n_unique_kmers(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    uint64_t n = hashtable->n_unique_kmers();
-
-    return PyLong_FromUnsignedLongLong(n);
-}
-
-static
-PyObject *
-hashtable_count(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    PyObject * v;
-    if (!PyArg_ParseTuple(args, "O", &v)) {
-        return NULL;
-    }
-
-    HashIntoType hashval;
-
-    if (!ht_convert_PyObject_to_HashIntoType(v, hashval, hashtable)) {
-        return NULL;
-    }
-
-    hashtable->count(hashval);
-
-    return PyLong_FromLong(1);
-}
-
-static
-PyObject *
-hashtable_consume_seqfile(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable  = me->hashtable;
-
-    const char * filename;
-
-    if (!PyArg_ParseTuple(args, "s", &filename)) {
-        return NULL;
-    }
-
-    // call the C++ function, and trap signals => Python
-    unsigned long long  n_consumed    = 0;
-    unsigned int          total_reads   = 0;
-    try {
-        hashtable->consume_seqfile<FastxReader>(filename, total_reads, n_consumed);
-    } catch (khmer_file_exception &exc) {
-        PyErr_SetString(PyExc_OSError, exc.what());
-        return NULL;
-    } catch (khmer_value_exception &exc) {
-        PyErr_SetString(PyExc_ValueError, exc.what());
-        return NULL;
-    }
-
-    return Py_BuildValue("IK", total_reads, n_consumed);
-}
-
-static
-PyObject *
-hashtable_consume_seqfile_with_reads_parser(khmer_KHashtable_Object * me,
-        PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    PyObject * rparser_obj = NULL;
-
-    if (!PyArg_ParseTuple(args, "O", &rparser_obj)) {
-        return NULL;
-    }
-
-    FastxParserPtr& rparser = _PyObject_to_khmer_ReadParser( rparser_obj );
-
-    // call the C++ function, and trap signals => Python
-    unsigned long long  n_consumed      = 0;
-    unsigned int        total_reads     = 0;
-    const char         *value_exception = NULL;
-    const char         *file_exception  = NULL;
-    std::string exc_string;
-
-    Py_BEGIN_ALLOW_THREADS
-    try {
-        hashtable->consume_seqfile<FastxReader>(rparser, total_reads, n_consumed);
-    } catch (khmer_file_exception &exc) {
-        exc_string = exc.what();
-        file_exception = exc_string.c_str();
-    } catch (khmer_value_exception &exc) {
-        exc_string = exc.what();
-        value_exception = exc_string.c_str();
-    }
-    Py_END_ALLOW_THREADS
-
-    if (file_exception != NULL) {
-        PyErr_SetString(PyExc_OSError, file_exception);
-        return NULL;
-    }
-    if (value_exception != NULL) {
-        PyErr_SetString(PyExc_ValueError, value_exception);
-        return NULL;
-    }
-
-    return Py_BuildValue("IK", total_reads, n_consumed);
-}
-
-static
-PyObject *
-hashtable_consume(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * long_str;
-
-    if (!PyArg_ParseTuple(args, "s", &long_str)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < hashtable->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }
-
-    unsigned int n_consumed;
-    n_consumed = hashtable->consume_string(long_str);
-
-    return PyLong_FromLong(n_consumed);
-}
-
-static
-PyObject *
-hashtable_get(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    PyObject * arg;
-
-    if (!PyArg_ParseTuple(args, "O", &arg)) {
-        return NULL;
-    }
-
-    HashIntoType hashval;
-
-    if (!ht_convert_PyObject_to_HashIntoType(arg, hashval, hashtable)) {
-        return NULL;
-    }
-
-    unsigned int count = hashtable->get_count(hashval);
-    return PyLong_FromLong(count);
-}
-
-static
-PyObject *
-hashtable_set_use_bigcount(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    PyObject * x;
-    if (!PyArg_ParseTuple(args, "O", &x)) {
-        return NULL;
-    }
-    int setme = PyObject_IsTrue(x);
-    if (setme < 0) {
-        return NULL;
-    }
-    try {
-        hashtable->set_use_bigcount((bool)setme);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-static
-PyObject *
-hashtable_get_use_bigcount(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    bool val = hashtable->get_use_bigcount();
-
-    return PyBool_FromLong((int)val);
-}
-
-static
-PyObject *
-hashtable_get_min_count(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * long_str;
-
-    if (!PyArg_ParseTuple(args, "s", &long_str)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < hashtable->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }
-
-    BoundedCounterType c = hashtable->get_min_count(long_str);
-    unsigned int N = c;
-
-    return PyLong_FromLong(N);
-}
-
-static
-PyObject *
-hashtable_get_max_count(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * long_str;
-
-    if (!PyArg_ParseTuple(args, "s", &long_str)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < hashtable->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }
-
-    BoundedCounterType c = hashtable->get_max_count(long_str);
-    unsigned int N = c;
-
-    return PyLong_FromLong(N);
-}
-
-// fwd decls to replace function definitions
-static PyObject * hashtable_abundance_distribution_with_reads_parser(khmer_KHashtable_Object * me, PyObject * args);
-static PyObject * hashtable_abundance_distribution(khmer_KHashtable_Object * me, PyObject * args);
-
-static
-PyObject *
-hashtable_trim_on_abundance(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * seq = NULL;
-    unsigned int min_count_i = 0;
-
-    if (!PyArg_ParseTuple(args, "sI", &seq, &min_count_i)) {
-        return NULL;
-    }
-
-    unsigned long trim_at;
-    Py_BEGIN_ALLOW_THREADS
-
-    BoundedCounterType min_count = min_count_i;
-
-    trim_at = hashtable->trim_on_abundance(seq, min_count);
-
-    Py_END_ALLOW_THREADS;
-
-    PyObject * trim_seq = PyUnicode_FromStringAndSize(seq, trim_at);
-    if (trim_seq == NULL) {
-        return NULL;
-    }
-    PyObject * ret = Py_BuildValue("Ok", trim_seq, trim_at);
-    Py_DECREF(trim_seq);
-
-    return ret;
-}
-
-static
-PyObject *
-hashtable_trim_below_abundance(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * seq = NULL;
-    BoundedCounterType max_count_i = 0;
-
-    if (!PyArg_ParseTuple(args, "sH", &seq, &max_count_i)) {
-        return NULL;
-    }
-
-    unsigned long trim_at;
-    Py_BEGIN_ALLOW_THREADS
-
-    BoundedCounterType max_count = max_count_i;
-
-    trim_at = hashtable->trim_below_abundance(seq, max_count);
-
-    Py_END_ALLOW_THREADS;
-
-    PyObject * trim_seq = PyUnicode_FromStringAndSize(seq, trim_at);
-    if (trim_seq == NULL) {
-        return NULL;
-    }
-    PyObject * ret = Py_BuildValue("Ok", trim_seq, trim_at);
-    Py_DECREF(trim_seq);
-
-    return ret;
-}
-
-static
-PyObject *
-hashtable_find_spectral_error_positions(khmer_KHashtable_Object * me,
-                                        PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * seq = NULL;
-    BoundedCounterType max_count = 0; // unsigned short int
-
-    if (!PyArg_ParseTuple(args, "sH", &seq, &max_count)) {
-        return NULL;
-    }
-
-    std::vector<unsigned int> posns;
-
-    try {
-        posns = hashtable->find_spectral_error_positions(seq, max_count);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    Py_ssize_t posns_size = posns.size();
-
-    PyObject * x = PyList_New(posns_size);
-    if (x == NULL) {
-        return NULL;
-    }
-    for (Py_ssize_t i = 0; i < posns_size; i++) {
-        PyList_SET_ITEM(x, i, PyLong_FromLong(posns[i]));
-    }
-
-    return x;
-}
-
-static
-PyObject *
-hashtable_load(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * filename = NULL;
-
-    if (!PyArg_ParseTuple(args, "s", &filename)) {
-        return NULL;
-    }
-
-    try {
-        hashtable->load(filename);
-    } catch (khmer_file_exception &e) {
-        PyErr_SetString(PyExc_OSError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-static
-PyObject *
-hashtable_save(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * filename = NULL;
-
-    if (!PyArg_ParseTuple(args, "s", &filename)) {
-        return NULL;
-    }
-
-    try {
-        hashtable->save(filename);
-    } catch (khmer_file_exception &e) {
-        PyErr_SetString(PyExc_OSError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-static
-PyObject *
-hashtable_get_hashsizes(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    std::vector<uint64_t> ts = hashtable->get_tablesizes();
-
-    PyObject * x = PyList_New(ts.size());
-    for (size_t i = 0; i < ts.size(); i++) {
-        PyList_SET_ITEM(x, i, PyLong_FromUnsignedLongLong(ts[i]));
-    }
-
-    return x;
-}
-
-static
-PyObject *
-hashtable_get_median_count(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * long_str;
-
-    if (!PyArg_ParseTuple(args, "s", &long_str)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < hashtable->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }
-
-    BoundedCounterType med = 0;
-    float average = 0, stddev = 0;
-
-    hashtable->get_median_count(long_str, med, average, stddev);
-
-    return Py_BuildValue("iff", med, average, stddev);
-}
-
-static
-PyObject *
-hashtable_median_at_least(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * long_str;
-    unsigned int cutoff;
-
-    if (!PyArg_ParseTuple(args, "sI", &long_str, &cutoff)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < hashtable->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }
-
-    if (hashtable->median_at_least(long_str, cutoff)) {
-        Py_RETURN_TRUE;
-    }
-    Py_RETURN_FALSE;
-
-}
-
-static
-PyObject *
-hashtable_get_kmers(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-    const char * sequence;
-
-    if (!PyArg_ParseTuple(args, "s", &sequence)) {
-        return NULL;
-    }
-
-    std::vector<std::string> kmers;
-
-    hashtable->get_kmers(sequence, kmers);
-
-    PyObject * x = PyList_New(kmers.size());
-    for (unsigned int i = 0; i < kmers.size(); i++) {
-        PyObject * obj = PyUnicode_FromString(kmers[i].c_str());
-        PyList_SET_ITEM(x, i, obj);
-    }
-
-    return x;
-}
-
-static
-PyObject *
-hashtable_get_kmer_counts(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-    const char * sequence;
-
-    if (!PyArg_ParseTuple(args, "s", &sequence)) {
-        return NULL;
-    }
-
-    std::vector<BoundedCounterType> counts;
-    try {
-        hashtable->get_kmer_counts(sequence, counts);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    PyObject * x = PyList_New(counts.size());
-    for (unsigned int i = 0; i <counts.size(); i++) {
-        PyObject * obj = PyInt_FromLong(counts[i]);
-        PyList_SET_ITEM(x, i, obj);
-    }
-
-    return x;
-}
-
-
-static
-PyObject *
-hashtable_get_kmer_hashes(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-    const char * sequence;
-
-    if (!PyArg_ParseTuple(args, "s", &sequence)) {
-        return NULL;
-    }
-
-    std::vector<HashIntoType> hashes;
-    try {
-        hashtable->get_kmer_hashes(sequence, hashes);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    PyObject * x = PyList_New(hashes.size());
-    for (unsigned int i = 0; i < hashes.size(); i++) {
-        PyObject * obj = nullptr;
-        convert_HashIntoType_to_PyObject(hashes[i], &obj);
-        PyList_SET_ITEM(x, i, obj);
-    }
-
-    return x;
-}
-
-
-static
-PyObject *
-hashtable_get_kmer_hashes_as_hashset(khmer_KHashtable_Object * me,
-                                     PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-    const char * sequence;
-
-    if (!PyArg_ParseTuple(args, "s", &sequence)) {
-        return NULL;
-    }
-
-    SeenSet * hashes = new SeenSet;
-    try {
-        hashtable->get_kmer_hashes_as_hashset(sequence, *hashes);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    PyObject * x = (PyObject *) create_HashSet_Object(hashes,
-                   hashtable->ksize());
-
-    return x;
-}
-
-
-static PyMethodDef khmer_hashtable_methods[] = {
-    //
-    // Basic methods
-    //
-
-    {
-        "ksize",
-        (PyCFunction)hashtable_ksize, METH_VARARGS,
-        "Returns the k-mer size of this graph."
-    },
-    {
-        "hash",
-        (PyCFunction)hashtable_hash, METH_VARARGS,
-        "Returns the hash of this k-mer. For Nodetables and Counttables, this "
-        "function will fail if the supplied k-mer contains non-ACGT "
-        "characters."
-    },
-    {
-        "reverse_hash",
-        (PyCFunction)hashtable_reverse_hash, METH_VARARGS,
-        "Turns a k-mer hash back into a DNA k-mer, if possible."
-    },
-    {
-        "hashsizes",
-        (PyCFunction)hashtable_get_hashsizes, METH_VARARGS,
-        "" },
-    {
-        "n_unique_kmers",
-        (PyCFunction)hashtable_n_unique_kmers, METH_VARARGS,
-        "Count the number of unique kmers in this graph."
-    },
-    {
-        "n_occupied", (PyCFunction)hashtable_n_occupied, METH_VARARGS,
-        "Count the number of occupied bins."
-    },
-    {
-        "count",
-        (PyCFunction)hashtable_count, METH_VARARGS,
-        "Increment the count of this k-mer."
-    },
-    {
-        "add",
-        (PyCFunction)hashtable_count, METH_VARARGS,
-        "Increment the count of this k-mer. (Synonym for 'count'.)"
-    },
-    {
-        "consume",
-        (PyCFunction)hashtable_consume, METH_VARARGS,
-        "Increment the counts of all of the k-mers in the string."
-    },
-    {
-        "consume_seqfile",
-        (PyCFunction)hashtable_consume_seqfile, METH_VARARGS,
-        "Increment the counts of all the k-mers in the sequences in the "
-        "given file"
-    },
-    {
-        "consume_seqfile_with_reads_parser",
-        (PyCFunction)hashtable_consume_seqfile_with_reads_parser, METH_VARARGS,
-        "Count all k-mers retrieved with this reads parser object."
-    },
-    {
-        "get",
-        (PyCFunction)hashtable_get, METH_VARARGS,
-        "Retrieve the count for the given k-mer. For Nodetables and "
-        "Counttables, this function will fail if the supplied k-mer contains "
-        "non-ACGT characters."
-    },
-    {
-        "load",
-        (PyCFunction)hashtable_load, METH_VARARGS,
-        "Load the graph from the specified file."
-    },
-    {
-        "save",
-        (PyCFunction)hashtable_save, METH_VARARGS,
-        "Save the graph to the specified file."
-    },
-    {
-        "get_kmers",
-        (PyCFunction)hashtable_get_kmers, METH_VARARGS,
-        "Generate an ordered list of all substrings of length k in the string."
-    },
-    {
-        "get_kmer_hashes",
-        (PyCFunction)hashtable_get_kmer_hashes, METH_VARARGS,
-        "Retrieve an ordered list of all hashes of all k-mers in the string."
-    },
-    {
-        "get_kmer_hashes_as_hashset",
-        (PyCFunction)hashtable_get_kmer_hashes_as_hashset, METH_VARARGS,
-        "Retrieve a HashSet containing all the k-mers in the string."
-    },
-    {
-        "get_kmer_counts",
-        (PyCFunction)hashtable_get_kmer_counts, METH_VARARGS,
-        "Retrieve an ordered list of the counts of all k-mers in the string."
-    },
-
-    {
-        "set_use_bigcount",
-        (PyCFunction)hashtable_set_use_bigcount, METH_VARARGS,
-        "Count past maximum binsize of hashtable (set to T/F)"
-    },
-    {
-        "get_use_bigcount",
-        (PyCFunction)hashtable_get_use_bigcount, METH_VARARGS,
-        "Get value of bigcount flag (T/F)"
-    },
-    {
-        "get_min_count",
-        (PyCFunction)hashtable_get_min_count, METH_VARARGS,
-        "Get the smallest count of all the k-mers in the string"
-    },
-    {
-        "get_max_count",
-        (PyCFunction)hashtable_get_max_count, METH_VARARGS,
-        "Get the largest count of all the k-mers in the string"
-    },
-    {
-        "trim_on_abundance",
-        (PyCFunction)hashtable_trim_on_abundance, METH_VARARGS,
-        "Trim string at first k-mer below the given abundance"
-    },
-    {
-        "trim_below_abundance",
-        (PyCFunction)hashtable_trim_below_abundance, METH_VARARGS,
-        "Trim string at first k-mer above the given abundance"
-    },
-    {
-        "find_spectral_error_positions",
-        (PyCFunction)hashtable_find_spectral_error_positions, METH_VARARGS,
-        "Identify positions of low-abundance k-mers"
-    },
-    {
-        "abundance_distribution",
-        (PyCFunction)hashtable_abundance_distribution, METH_VARARGS,
-        "Calculate the k-mer abundance distribution of the given file"
-    },
-    {
-        "abundance_distribution_with_reads_parser",
-        (PyCFunction)hashtable_abundance_distribution_with_reads_parser,
-        METH_VARARGS,
-        "Calculate the k-mer abundance distribution for a reads parser handle"
-    },
-    {
-        "get_median_count",
-        (PyCFunction)hashtable_get_median_count, METH_VARARGS,
-        "Get the median, average, and stddev of the k-mer counts in the string"
-    },
-    {
-        "median_at_least",
-        (PyCFunction)hashtable_median_at_least, METH_VARARGS,
-        "Return true if the median is at least the given cutoff"
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyTypeObject khmer_KHashtable_Type
-CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashtable_Object")
-= {
-    PyVarObject_HEAD_INIT(NULL, 0)       /* init & ob_size */
-    "_khmer.KHashtable   ",              /*tp_name*/
-    sizeof(khmer_KHashtable_Object),     /*tp_basicsize*/
-    0,                                   /*tp_itemsize*/
-    0,                                   /*tp_dealloc*/
-    0,                                   /*tp_print*/
-    0,                                   /*tp_getattr*/
-    0,                                   /*tp_setattr*/
-    0,                                   /*tp_compare*/
-    0,                                   /*tp_repr*/
-    0,                                   /*tp_as_number*/
-    0,                                   /*tp_as_sequence*/
-    0,                                   /*tp_as_mapping*/
-    0,                                   /*tp_hash */
-    0,                                   /*tp_call*/
-    0,                                   /*tp_str*/
-    0,                                   /*tp_getattro*/
-    0,                                   /*tp_setattro*/
-    0,                                   /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,                  /*tp_flags*/
-    "base hashtable object",             /* tp_doc */
-    0,                                   /* tp_traverse */
-    0,                                   /* tp_clear */
-    0,                                   /* tp_richcompare */
-    0,                                   /* tp_weaklistoffset */
-    0,                                   /* tp_iter */
-    0,                                   /* tp_iternext */
-    khmer_hashtable_methods,             /* tp_methods */
-    0,                                   /* tp_members */
-    0,                                   /* tp_getset */
-    0,                                   /* tp_base */
-    0,                                   /* tp_dict */
-    0,                                   /* tp_descr_get */
-    0,                                   /* tp_descr_set */
-    0,                                   /* tp_dictoffset */
-    0,                                   /* tp_init */
-    0,                                   /* tp_alloc */
-    0,                                   /* tp_new */
-};
-
-#include "_cpy_nodetable.hh"
-#include "_cpy_counttable.hh"
-#include "_cpy_smallcounttable.hh"
-#include "_cpy_hashgraph.hh"
-#include "_cpy_smallcountgraph.hh"
-
-//
-// KCountgraph object
-//
-
-typedef struct {
-    khmer_KHashgraph_Object khashgraph;
-    Countgraph * countgraph;
-} khmer_KCountgraph_Object;
-
-typedef struct {
-    PyObject_HEAD
-    ReadAligner * aligner;
-} khmer_ReadAligner_Object;
-
-static void khmer_countgraph_dealloc(khmer_KCountgraph_Object * obj);
-
-static
-PyObject *
-count_get_raw_tables(khmer_KCountgraph_Object * self, PyObject * args)
-{
-    Countgraph * countgraph = self->countgraph;
-
-    khmer::Byte ** table_ptrs = countgraph->get_raw_tables();
-    std::vector<uint64_t> sizes = countgraph->get_tablesizes();
-
-    PyObject * raw_tables = PyList_New(sizes.size());
-    for (unsigned int i=0; i<sizes.size(); ++i) {
-        Py_buffer buffer;
-        int res = PyBuffer_FillInfo(&buffer, NULL, table_ptrs[i], sizes[i], 0,
-                                    PyBUF_FULL_RO);
-        if (res == -1) {
-            return NULL;
-        }
-        PyObject * buf = PyMemoryView_FromBuffer(&buffer);
-        if(!PyMemoryView_Check(buf)) {
-            return NULL;
-        }
-        PyList_SET_ITEM(raw_tables, i, buf);
-    }
-
-    return raw_tables;
-}
-
-static
-PyObject *
-count_do_subset_partition_with_abundance(khmer_KCountgraph_Object * me,
-        PyObject * args)
-{
-    Countgraph * countgraph = me->countgraph;
-
-    HashIntoType start_kmer = 0, end_kmer = 0;
-    PyObject * break_on_stop_tags_o = NULL;
-    PyObject * stop_big_traversals_o = NULL;
-    BoundedCounterType min_count, max_count;
-
-    if (!PyArg_ParseTuple(args, "HH|KKOO",
-                          &min_count, &max_count,
-                          &start_kmer, &end_kmer,
-                          &break_on_stop_tags_o,
-                          &stop_big_traversals_o)) {
-        return NULL;
-    }
-
-    bool break_on_stop_tags = false;
-    if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) {
-        break_on_stop_tags = true;
-    }
-    bool stop_big_traversals = false;
-    if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) {
-        stop_big_traversals = true;
-    }
-
-    SubsetPartition * subset_p = NULL;
-    try {
-        Py_BEGIN_ALLOW_THREADS
-        subset_p = new SubsetPartition(countgraph);
-        subset_p->do_partition_with_abundance(start_kmer, end_kmer,
-                                              min_count, max_count,
-                                              break_on_stop_tags,
-                                              stop_big_traversals);
-        Py_END_ALLOW_THREADS
-    } catch (std::bad_alloc &e) {
-        return PyErr_NoMemory();
-    }
-
-    khmer_KSubsetPartition_Object * subset_obj = (khmer_KSubsetPartition_Object *)\
-            PyObject_New(khmer_KSubsetPartition_Object, &khmer_KSubsetPartition_Type);
-
-    if (subset_obj == NULL) {
-        delete subset_p;
-        return NULL;
-    }
-
-    subset_obj->subset = subset_p;
-
-    return (PyObject *) subset_obj;
-}
-
-static PyMethodDef khmer_countgraph_methods[] = {
-    {
-        "get_raw_tables",
-        (PyCFunction)count_get_raw_tables, METH_VARARGS,
-        "Get a list of the raw storage tables as memoryview objects."
-    },
-    { "do_subset_partition_with_abundance", (PyCFunction)count_do_subset_partition_with_abundance, METH_VARARGS, "" },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyObject* khmer_countgraph_new(PyTypeObject * type, PyObject * args,
-                                      PyObject * kwds);
-
-static PyTypeObject khmer_KCountgraph_Type
-CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountgraph_Object")
-= {
-    PyVarObject_HEAD_INIT(NULL, 0)       /* init & ob_size */
-    "_khmer.Countgraph",                 /*tp_name*/
-    sizeof(khmer_KCountgraph_Object),  /*tp_basicsize*/
-    0,                                   /*tp_itemsize*/
-    (destructor)khmer_countgraph_dealloc,  /*tp_dealloc*/
-    0,                                   /*tp_print*/
-    0,                                   /*tp_getattr*/
-    0,                                   /*tp_setattr*/
-    0,                                   /*tp_compare*/
-    0,                                   /*tp_repr*/
-    0,                                   /*tp_as_number*/
-    0,                                   /*tp_as_sequence*/
-    0,                                   /*tp_as_mapping*/
-    0,                                   /*tp_hash */
-    0,                                   /*tp_call*/
-    0,                                   /*tp_str*/
-    0,                                   /*tp_getattro*/
-    0,                                   /*tp_setattro*/
-    0,                                   /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,                  /*tp_flags*/
-    "countgraph hash object",              /* tp_doc */
-    0,                                   /* tp_traverse */
-    0,                                   /* tp_clear */
-    0,                                   /* tp_richcompare */
-    0,                                   /* tp_weaklistoffset */
-    0,                                   /* tp_iter */
-    0,                                   /* tp_iternext */
-    khmer_countgraph_methods,              /* tp_methods */
-    0,                                   /* tp_members */
-    0,                                   /* tp_getset */
-    0,                                   /* tp_base */
-    0,                                   /* tp_dict */
-    0,                                   /* tp_descr_get */
-    0,                                   /* tp_descr_set */
-    0,                                   /* tp_dictoffset */
-    0,                                   /* tp_init */
-    0,                                   /* tp_alloc */
-    khmer_countgraph_new,                /* tp_new */
-};
-
-//
-// khmer_countgraph_new
-//
-
-static PyObject* khmer_countgraph_new(PyTypeObject * type, PyObject * args,
-                                      PyObject * kwds)
-{
-    khmer_KCountgraph_Object * self;
-
-    self = (khmer_KCountgraph_Object *)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        WordLength k = 0;
-        PyListObject * sizes_list_o = NULL;
-
-        if (!PyArg_ParseTuple(args, "bO!", &k, &PyList_Type, &sizes_list_o)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        std::vector<uint64_t> sizes;
-        if (!convert_Pytablesizes_to_vector(sizes_list_o, sizes)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->countgraph = new Countgraph(k, sizes);
-        } catch (std::bad_alloc &e) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-        self->khashgraph.khashtable.hashtable =
-            dynamic_cast<Hashtable*>(self->countgraph);
-        self->khashgraph.hashgraph = dynamic_cast<Hashgraph*>(self->countgraph);
-    }
-
-    return (PyObject *) self;
-}
-
-static
-PyObject *
-nodegraph_update(khmer_KNodegraph_Object * me, PyObject * args)
-{
-    Nodegraph * nodegraph = me->nodegraph;
-    Nodegraph * other;
-    khmer_KNodegraph_Object * other_o;
-
-    if (!PyArg_ParseTuple(args, "O!", &khmer_KNodegraph_Type, &other_o)) {
-        return NULL;
-    }
-
-    other = other_o->nodegraph;
-
-    try {
-        nodegraph->update_from(*other);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-static
-PyObject *
-nodegraph_get_raw_tables(khmer_KNodegraph_Object * self, PyObject * args)
-{
-    Nodegraph * countgraph = self->nodegraph;
-
-    khmer::Byte ** table_ptrs = countgraph->get_raw_tables();
-    std::vector<uint64_t> sizes = countgraph->get_tablesizes();
-
-    PyObject * raw_tables = PyList_New(sizes.size());
-    for (unsigned int i=0; i<sizes.size(); ++i) {
-        Py_buffer buffer;
-        int res = PyBuffer_FillInfo(&buffer, NULL, table_ptrs[i], sizes[i], 0,
-                                    PyBUF_FULL_RO);
-        if (res == -1) {
-            return NULL;
-        }
-        PyObject * buf = PyMemoryView_FromBuffer(&buffer);
-        if(!PyMemoryView_Check(buf)) {
-            return NULL;
-        }
-        PyList_SET_ITEM(raw_tables, i, buf);
-    }
-
-    return raw_tables;
-}
-
-static PyMethodDef khmer_nodegraph_methods[] = {
-    {
-        "update",
-        (PyCFunction) nodegraph_update, METH_VARARGS,
-        "a set update: update this nodegraph with all the entries from the other"
-    },
-    {
-        "get_raw_tables",
-        (PyCFunction) nodegraph_get_raw_tables, METH_VARARGS,
-        "Get a list of the raw tables as memoryview objects"
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-// __new__ for nodegraph; necessary for proper subclassing
-// This will essentially do what the old factory function did. Unlike many __new__
-// methods, we take our arguments here, because there's no "uninitialized" nodegraph
-// object; we have to have k and the table sizes before creating the new objects
-static PyObject* khmer_nodegraph_new(PyTypeObject * type, PyObject * args,
-                                     PyObject * kwds)
-{
-    khmer_KNodegraph_Object * self;
-    self = (khmer_KNodegraph_Object *)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        WordLength k = 0;
-        PyListObject* sizes_list_o = NULL;
-
-        if (!PyArg_ParseTuple(args, "bO!", &k, &PyList_Type, &sizes_list_o)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        std::vector<uint64_t> sizes;
-        if (!convert_Pytablesizes_to_vector(sizes_list_o, sizes)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->nodegraph = new Nodegraph(k, sizes);
-        } catch (std::bad_alloc &e) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-        self->khashgraph.khashtable.hashtable =
-            dynamic_cast<Hashtable*>(self->nodegraph);
-        self->khashgraph.hashgraph = dynamic_cast<Hashgraph*>(self->nodegraph);
-    }
-    return (PyObject *) self;
-}
-
-////////////////////////////////////////////////////////////////////////////
-
-static
-PyObject *
-subset_count_partitions(khmer_KSubsetPartition_Object * me, PyObject * args)
-{
-    SubsetPartition * subset_p = me->subset;
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    size_t n_partitions = 0, n_unassigned = 0;
-    subset_p->count_partitions(n_partitions, n_unassigned);
-
-    return Py_BuildValue("nn", (Py_ssize_t) n_partitions,
-                         (Py_ssize_t) n_unassigned);
-}
-
-static
-PyObject *
-subset_report_on_partitions(khmer_KSubsetPartition_Object * me, PyObject * args)
-{
-    SubsetPartition * subset_p = me->subset;
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    subset_p->report_on_partitions();
-
-    Py_RETURN_NONE;
-}
-
-static
-PyObject *
-subset_partition_size_distribution(khmer_KSubsetPartition_Object * me,
-                                   PyObject * args)
-{
-    SubsetPartition * subset_p = me->subset;
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    PartitionCountDistribution d;
-
-    unsigned int n_unassigned = 0;
-    subset_p->partition_size_distribution(d, n_unassigned);
-
-    PyObject * x = PyList_New(d.size());
-    if (x == NULL) {
-        return NULL;
-    }
-    PartitionCountDistribution::iterator di;
-
-    unsigned int i;
-    for (i = 0, di = d.begin(); di != d.end(); ++di, i++) {
-        PyObject * tup = Py_BuildValue("KK", di->first, di->second);
-        if (tup != NULL) {
-            PyList_SET_ITEM(x, i, tup);
-        }
-        Py_XDECREF(tup);
-    }
-    if (!(i == d.size())) {
-        throw khmer_exception();
-    }
-
-    PyObject * ret = Py_BuildValue("OI", x, n_unassigned);
-    Py_DECREF(x);
-    return ret;
-}
-
-static
-PyObject *
-subset_partition_sizes(khmer_KSubsetPartition_Object * me, PyObject * args)
-{
-    SubsetPartition * subset_p = me->subset;
-
-    unsigned int min_size = 0;
-
-    if (!PyArg_ParseTuple(args, "|I", &min_size)) {
-        return NULL;
-    }
-
-    PartitionCountMap cm;
-    unsigned int n_unassigned = 0;
-    subset_p->partition_sizes(cm, n_unassigned);
-
-    unsigned int i = 0;
-    PartitionCountMap::const_iterator mi;
-    for (mi = cm.begin(); mi != cm.end(); ++mi) {
-        if (mi->second >= min_size) {
-            i++;
-        }
-    }
-
-    PyObject * x = PyList_New(i);
-    if (x == NULL) {
-        return NULL;
-    }
-
-    // this should probably be a dict. @CTB
-    for (i = 0, mi = cm.begin(); mi != cm.end(); ++mi) {
-        if (mi->second >= min_size) {
-            PyObject * tup = Py_BuildValue("II", mi->first, mi->second);
-            if (tup != NULL) {
-                PyList_SET_ITEM(x, i, tup);
-            }
-            i++;
-        }
-    }
-
-    PyObject * ret = Py_BuildValue("OI", x, n_unassigned);
-    Py_DECREF(x);
-
-    return ret;
-}
-
-static
-PyObject *
-subset_partition_average_coverages(khmer_KSubsetPartition_Object * me,
-                                   PyObject * args)
-{
-    SubsetPartition * subset_p = me->subset;
-
-    khmer_KCountgraph_Object * countgraph_o;
-
-    if (!PyArg_ParseTuple(args, "O!", &khmer_KCountgraph_Type, &countgraph_o)) {
-        return NULL;
-    }
-
-    PartitionCountMap cm;
-    subset_p->partition_average_coverages(cm, countgraph_o -> countgraph);
-
-    unsigned int i;
-    PartitionCountMap::iterator mi;
-
-    PyObject * x = PyList_New(cm.size());
-    if (x == NULL) {
-        return NULL;
-    }
-
-    // this should probably be a dict. @CTB
-    for (i = 0, mi = cm.begin(); mi != cm.end(); ++mi, i++) {
-        PyObject * tup = Py_BuildValue("II", mi->first, mi->second);
-        if (tup != NULL) {
-            PyList_SET_ITEM(x, i, tup);
-        }
-    }
-
-    return x;
-}
-
-static PyMethodDef khmer_subset_methods[] = {
-    {
-        "count_partitions",
-        (PyCFunction)subset_count_partitions,
-        METH_VARARGS,
-        ""
-    },
-    {
-        "report_on_partitions",
-        (PyCFunction)subset_report_on_partitions,
-        METH_VARARGS,
-        ""
-    },
-    {
-        "partition_size_distribution",
-        (PyCFunction)subset_partition_size_distribution,
-        METH_VARARGS,
-        ""
-    },
-    {
-        "partition_sizes",
-        (PyCFunction)subset_partition_sizes,
-        METH_VARARGS,
-        ""
-    },
-    {
-        "partition_average_coverages",
-        (PyCFunction)subset_partition_average_coverages,
-        METH_VARARGS,
-        ""
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-typedef struct {
-    PyObject_HEAD
-    LabelHash * labelhash;
-} khmer_KGraphLabels_Object;
-
-static PyObject * khmer_graphlabels_new(PyTypeObject * type, PyObject *args,
-                                        PyObject *kwds);
-
-static void khmer_graphlabels_dealloc(khmer_KGraphLabels_Object * obj)
-{
-    delete obj->labelhash;
-    obj->labelhash = NULL;
-
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static PyObject * khmer_graphlabels_new(PyTypeObject *type, PyObject *args,
-                                        PyObject *kwds)
-{
-    khmer_KGraphLabels_Object *self;
-    self = (khmer_KGraphLabels_Object*)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        PyObject * hashgraph_o;
-        khmer::Hashgraph * hashgraph = NULL; // @CTB
-
-        if (!PyArg_ParseTuple(args, "O", &hashgraph_o)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        if (PyObject_TypeCheck(hashgraph_o, &khmer_KNodegraph_Type)) {
-            khmer_KNodegraph_Object * kho = (khmer_KNodegraph_Object *) hashgraph_o;
-            hashgraph = kho->nodegraph;
-        } else if (PyObject_TypeCheck(hashgraph_o, &khmer_KCountgraph_Type)) {
-            khmer_KCountgraph_Object * cho = (khmer_KCountgraph_Object *) hashgraph_o;
-            hashgraph = cho->countgraph;
-        } else {
-            PyErr_SetString(PyExc_ValueError,
-                            "graph object must be a NodeGraph or CountGraph");
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->labelhash = new LabelHash(hashgraph);
-        } catch (std::bad_alloc &e) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-    }
-
-    return (PyObject *) self;
-}
-
-static
-PyObject *
-labelhash_get_all_labels(khmer_KGraphLabels_Object * me, PyObject * args)
-{
-    LabelHash * hb = me->labelhash;
-
-    PyObject * d = PyList_New(hb->all_labels.size());
-    if (d == NULL) {
-        return NULL;
-    }
-    LabelSet::iterator it;
-
-    unsigned long long i = 0;
-    for (it = hb->all_labels.begin(); it != hb->all_labels.end(); ++it) {
-        PyObject * val = Py_BuildValue("K", *it);
-        if (val != NULL) {
-            PyList_SetItem(d, i, val);
-        }
-        i++;
-    }
-
-    return d;
-}
-
-static
-PyObject *
-labelhash_consume_seqfile_and_tag_with_labels(khmer_KGraphLabels_Object * me,
-        PyObject * args)
-{
-    LabelHash * hb = me->labelhash;
-
-    const char * filename;
-
-    if (!PyArg_ParseTuple(args, "s", &filename)) {
-        return NULL;
-    }
-
-    const char         *value_exception = NULL;
-    const char         *file_exception  = NULL;
-    unsigned long long  n_consumed      = 0;
-    unsigned int        total_reads     = 0;
-    std::string exc_string;
-
-    //Py_BEGIN_ALLOW_THREADS
-    try {
-        hb->consume_seqfile_and_tag_with_labels<FastxReader>(filename, total_reads,
-                n_consumed);
-    } catch (khmer_file_exception &exc) {
-        exc_string = exc.what();
-        file_exception = exc_string.c_str();
-    } catch (khmer_value_exception &exc) {
-        exc_string = exc.what();
-        value_exception = exc_string.c_str();
-    }
-    //Py_END_ALLOW_THREADS
-
-    if (file_exception != NULL) {
-        PyErr_SetString(PyExc_OSError, file_exception);
-        return NULL;
-    }
-    if (value_exception != NULL) {
-        PyErr_SetString(PyExc_ValueError, value_exception);
-        return NULL;
-    }
-
-    return Py_BuildValue("IK", total_reads, n_consumed);
-}
-
-static
-PyObject *
-labelhash_consume_partitioned_fasta_and_tag_with_labels(
-    khmer_KGraphLabels_Object * me, PyObject * args)
-{
-    LabelHash * labelhash = me->labelhash;
-
-    const char * filename;
-
-    if (!PyArg_ParseTuple(args, "s", &filename)) {
-        return NULL;
-    }
-
-    // call the C++ function, and trap signals => Python
-
-    unsigned long long  n_consumed  = 0;
-    unsigned int        total_reads = 0;
-
-    try {
-        labelhash->consume_partitioned_fasta_and_tag_with_labels<FastxReader>(filename,
-                total_reads, n_consumed);
-    } catch (khmer_file_exception &exc) {
-        PyErr_SetString(PyExc_OSError, exc.what());
-        return NULL;
-    } catch (khmer_value_exception &exc) {
-        PyErr_SetString(PyExc_ValueError, exc.what());
-        return NULL;
-    }
-
-    return Py_BuildValue("IK", total_reads, n_consumed);
-}
-
-static
-PyObject *
-labelhash_consume_sequence_and_tag_with_labels(khmer_KGraphLabels_Object * me,
-        PyObject * args)
-{
-    LabelHash * hb = me->labelhash;
-    const char * seq = NULL;
-    unsigned long long c = 0;
-    if (!PyArg_ParseTuple(args, "sK", &seq, &c)) {
-        return NULL;
-    }
-    unsigned long long n_consumed = 0;
-
-    hb->consume_sequence_and_tag_with_labels(seq, n_consumed, c);
-    return Py_BuildValue("K", n_consumed);
-}
-
-static
-PyObject *
-labelhash_sweep_label_neighborhood(khmer_KGraphLabels_Object * me,
-                                   PyObject * args)
-{
-    LabelHash * hb = me->labelhash;
-
-    const char * seq = NULL;
-    int r = 0;
-    PyObject * break_on_stop_tags_o = NULL;
-    PyObject * stop_big_traversals_o = NULL;
-
-    if (!PyArg_ParseTuple(args, "s|iOO", &seq, &r,
-                          &break_on_stop_tags_o,
-                          &stop_big_traversals_o)) {
-        return NULL;
-    }
-
-    unsigned int range = (2 * hb->graph->_get_tag_density()) + 1;
-    if (r >= 0) {
-        range = r;
-    }
-
-    bool break_on_stop_tags = false;
-    if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) {
-        break_on_stop_tags = true;
-    }
-    bool stop_big_traversals = false;
-    if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) {
-        stop_big_traversals = true;
-    }
-
-    if (strlen(seq) < hb->graph->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }
-
-    //std::pair<TagLabelPair::iterator, TagLabelPair::iterator> ret;
-    LabelSet found_labels;
-
-    //unsigned int num_traversed = 0;
-    //Py_BEGIN_ALLOW_THREADS
-    hb->sweep_label_neighborhood(seq, found_labels, range, break_on_stop_tags,
-                                 stop_big_traversals);
-    //Py_END_ALLOW_THREADS
-
-    //printf("...%u kmers traversed\n", num_traversed);
-
-    PyObject * x =  PyList_New(found_labels.size());
-    LabelSet::const_iterator si;
-    unsigned long long i = 0;
-    for (si = found_labels.begin(); si != found_labels.end(); ++si) {
-        PyList_SET_ITEM(x, i, Py_BuildValue("K", *si));
-        i++;
-    }
-
-    return x;
-}
-
-// Similar to find_all_tags, but returns tags in a way actually usable by python
-// need a tags_in_sequence iterator or function in c++ land for reuse in all
-// these functions
-
-static
-PyObject *
-labelhash_sweep_tag_neighborhood(khmer_KGraphLabels_Object * me,
-                                 PyObject * args)
-{
-    LabelHash * labelhash = me->labelhash;
-
-    const char * seq = NULL;
-    int r = 0;
-    PyObject * break_on_stop_tags_o = NULL;
-    PyObject * stop_big_traversals_o = NULL;
-
-    if (!PyArg_ParseTuple(args, "s|iOO", &seq, &r,
-                          &break_on_stop_tags_o,
-                          &stop_big_traversals_o)) {
-        return NULL;
-    }
-
-    unsigned int range = (2 * labelhash->graph->_get_tag_density()) + 1;
-    if (r >= 0) {
-        range = r;
-    }
-
-    bool break_on_stop_tags = false;
-    if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) {
-        break_on_stop_tags = true;
-    }
-    bool stop_big_traversals = false;
-    if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) {
-        stop_big_traversals = true;
-    }
-
-    if (strlen(seq) < labelhash->graph->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }
-
-    SeenSet * tagged_kmers = new SeenSet;
-
-    //Py_BEGIN_ALLOW_THREADS
-
-    labelhash->graph->partition->sweep_for_tags(seq, *tagged_kmers,
-            labelhash->graph->all_tags,
-            range, break_on_stop_tags,
-            stop_big_traversals);
-
-    //Py_END_ALLOW_THREADS
-
-    PyObject * x = (PyObject *) create_HashSet_Object(tagged_kmers,
-                   labelhash->graph->ksize());
-    return x;
-}
-
-static
-PyObject *
-labelhash_get_tag_labels(khmer_KGraphLabels_Object * me, PyObject * args)
-{
-    LabelHash * labelhash = me->labelhash;
-
-    PyObject * tag_o;
-    HashIntoType tag;
-
-    if (!PyArg_ParseTuple(args, "O", &tag_o)) {
-        return NULL;
-    }
-    if (!ht_convert_PyObject_to_HashIntoType(tag_o, tag,
-            labelhash->graph)) {
-        return NULL;
-    }
-
-    LabelSet labels;
-    labelhash->get_tag_labels(tag, labels);
-
-    PyObject * x =  PyList_New(labels.size());
-    LabelSet::const_iterator si;
-    unsigned long long i = 0;
-    for (si = labels.begin(); si != labels.end(); ++si) {
-        PyList_SET_ITEM(x, i, Py_BuildValue("K", *si));
-        i++;
-    }
-
-    return x;
-}
-
-static
-PyObject *
-labelhash_n_labels(khmer_KGraphLabels_Object * me, PyObject * args)
-{
-    LabelHash * labelhash = me->labelhash;
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-
-    return PyLong_FromSize_t(labelhash->n_labels());
-}
-
-static
-PyObject *
-labelhash_label_across_high_degree_nodes(khmer_KGraphLabels_Object * me,
-        PyObject * args)
-{
-    LabelHash * labelhash = me->labelhash;
-
-    const char * long_str;
-    khmer_HashSet_Object * hdn_o = NULL;
-    Label label;
-
-    if (!PyArg_ParseTuple(args, "sO!K", &long_str,
-                          &khmer_HashSet_Type, &hdn_o, &label)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < labelhash->graph->ksize()) {
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    labelhash->label_across_high_degree_nodes(long_str, *hdn_o->hashes, label);
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static
-PyObject *
-labelhash_assemble_labeled_path(khmer_KGraphLabels_Object * me,
-                                PyObject * args)
-{
-    LabelHash* labelhash = me->labelhash;
-
-    PyObject * val_o;
-    khmer_KNodegraph_Object * nodegraph_o = NULL;
-    Nodegraph * stop_bf = NULL;
-
-    if (!PyArg_ParseTuple(args, "O|O!", &val_o,
-                          &khmer_KNodegraph_Type, &nodegraph_o)) {
-        return NULL;
-    }
-
-    Kmer start_kmer;
-    if (!ht_convert_PyObject_to_Kmer(val_o, start_kmer, labelhash->graph)) {
-        return NULL;
-    }
-
-    if (nodegraph_o) {
-        stop_bf = nodegraph_o->nodegraph;
-    }
-
-    SimpleLabeledAssembler assembler(labelhash);
-    std::vector<std::string> contigs = assembler.assemble(start_kmer, stop_bf);
-
-    PyObject * ret = PyList_New(contigs.size());
-    for (unsigned int i = 0; i < contigs.size(); i++) {
-        PyList_SET_ITEM(ret, i, PyUnicode_FromString(contigs[i].c_str()));
-    }
-
-    return ret;
-}
-
-static
-PyObject *
-labelhash_save_labels_and_tags(khmer_KGraphLabels_Object * me, PyObject * args)
-{
-    const char * filename = NULL;
-    LabelHash * labelhash = me->labelhash;
-
-    if (!PyArg_ParseTuple(args, "s", &filename)) {
-        return NULL;
-    }
-
-    try {
-        labelhash->save_labels_and_tags(filename);
-    } catch (khmer_file_exception &e) {
-        PyErr_SetString(PyExc_OSError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-static
-PyObject *
-labelhash_load_labels_and_tags(khmer_KGraphLabels_Object * me, PyObject * args)
-{
-    const char * filename = NULL;
-    LabelHash * labelhash = me->labelhash;
-
-    if (!PyArg_ParseTuple(args, "s", &filename)) {
-        return NULL;
-    }
-
-    try {
-        labelhash->load_labels_and_tags(filename);
-    } catch (khmer_file_exception &e) {
-        PyErr_SetString(PyExc_OSError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-static PyMethodDef khmer_graphlabels_methods[] = {
-    { "consume_seqfile_and_tag_with_labels", (PyCFunction)labelhash_consume_seqfile_and_tag_with_labels, METH_VARARGS, "" },
-    { "sweep_label_neighborhood", (PyCFunction)labelhash_sweep_label_neighborhood, METH_VARARGS, "" },
-    {"consume_partitioned_fasta_and_tag_with_labels", (PyCFunction)labelhash_consume_partitioned_fasta_and_tag_with_labels, METH_VARARGS, "" },
-    {"sweep_tag_neighborhood", (PyCFunction)labelhash_sweep_tag_neighborhood, METH_VARARGS, "" },
-    {"get_tag_labels", (PyCFunction)labelhash_get_tag_labels, METH_VARARGS, ""},
-    {"consume_sequence_and_tag_with_labels", (PyCFunction)labelhash_consume_sequence_and_tag_with_labels, METH_VARARGS, "" },
-    {"n_labels", (PyCFunction)labelhash_n_labels, METH_VARARGS, ""},
-    {"get_all_labels", (PyCFunction)labelhash_get_all_labels, METH_VARARGS, "" },
-    {
-        "label_across_high_degree_nodes",
-        (PyCFunction)labelhash_label_across_high_degree_nodes, METH_VARARGS,
-        "Connect graph across high degree nodes using labels.",
-    },
-    {
-        "assemble_labeled_path",
-        (PyCFunction)labelhash_assemble_labeled_path, METH_VARARGS,
-        "Assemble all paths, using labels to negotiate tricky bits."
-    },
-    { "save_labels_and_tags", (PyCFunction)labelhash_save_labels_and_tags, METH_VARARGS, "" },
-    { "load_labels_and_tags", (PyCFunction)labelhash_load_labels_and_tags, METH_VARARGS, "" },    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyTypeObject khmer_KGraphLabels_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)  /* init & ob_size */
-    "_khmer.LabelHash",            /* tp_name */
-    sizeof(khmer_KGraphLabels_Object), /* tp_basicsize */
-    0,                       /* tp_itemsize */
-    (destructor)khmer_graphlabels_dealloc, /* tp_dealloc */
-    0,                       /* tp_print */
-    0,                       /* tp_getattr */
-    0,                       /* tp_setattr */
-    0,                       /* tp_compare */
-    0,                       /* tp_repr */
-    0,                       /* tp_as_number */
-    0,                       /* tp_as_sequence */
-    0,                       /* tp_as_mapping */
-    0,                       /* tp_hash */
-    0,                       /* tp_call */
-    0,                       /* tp_str */
-    0,                       /* tp_getattro */
-    0,                       /* tp_setattro */
-    0,                       /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
-    0,                       /* tp_doc */
-    0,                       /* tp_traverse */
-    0,                       /* tp_clear */
-    0,                       /* tp_richcompare */
-    0,                       /* tp_weaklistoffset */
-    0,                       /* tp_iter */
-    0,                       /* tp_iternext */
-    khmer_graphlabels_methods, /* tp_methods */
-    0,                       /* tp_members */
-    0,                       /* tp_getset */
-    0,                       /* tp_base */
-    0,                       /* tp_dict */
-    0,                       /* tp_descr_get */
-    0,                       /* tp_descr_set */
-    0,                       /* tp_dictoffset */
-    0,                       /* tp_init */
-    0,                       /* tp_alloc */
-    khmer_graphlabels_new,      /* tp_new */
-};
-
-static
-PyObject *
-hashgraph_repartition_largest_partition(khmer_KHashgraph_Object * me,
-                                        PyObject * args)
-{
-    Hashgraph * hashgraph = me->hashgraph;
-    khmer_KCountgraph_Object * countgraph_o = NULL;
-    PyObject * subset_o = NULL;
-    SubsetPartition * subset_p;
-    unsigned int distance, threshold, frequency;
-
-    if (!PyArg_ParseTuple(args, "OO!III",
-                          &subset_o,
-                          &khmer_KCountgraph_Type, &countgraph_o,
-                          &distance, &threshold, &frequency)) {
-        return NULL;
-    }
-
-    if (PyObject_TypeCheck(subset_o, &khmer_KSubsetPartition_Type)) {
-        subset_p = ((khmer_KSubsetPartition_Object *) subset_o)->subset;
-    } else {
-        subset_p = hashgraph->partition;
-    }
-
-    Countgraph * countgraph = countgraph_o->countgraph;
-
-    unsigned long next_largest;
-    try {
-        next_largest = subset_p->repartition_largest_partition(distance,
-                       threshold, frequency, *countgraph);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_RuntimeError, e.what());
-        return NULL;
-    }
-
-    return PyLong_FromLong(next_largest);
-}
-
-static PyObject * readaligner_align(khmer_ReadAligner_Object * me,
-                                    PyObject * args)
-{
-    const char * read;
-
-    if (!PyArg_ParseTuple(args, "s", &read)) {
-        return NULL;
-    }
-
-    /*if (strlen(read) < (unsigned int)aligner->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }*/
-
-    Alignment * aln = me->aligner->Align(read);
-
-    const char* alignment = aln->graph_alignment.c_str();
-    const char* readAlignment = aln->read_alignment.c_str();
-    PyObject * ret = Py_BuildValue("dssO", aln->score, alignment,
-                                   readAlignment, (aln->truncated)? Py_True : Py_False);
-    delete aln;
-
-    return ret;
-}
-
-static PyObject * readaligner_align_forward(khmer_ReadAligner_Object * me,
-        PyObject * args)
-{
-    ReadAligner * aligner = me->aligner;
-
-    const char * read;
-
-    if (!PyArg_ParseTuple(args, "s", &read)) {
-        return NULL;
-    }
-
-    /*if (strlen(read) < (unsigned int)aligner->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashtable k-mer size");
-        return NULL;
-    }*/
-
-    Alignment * aln;
-    aln = aligner->AlignForward(read);
-
-    const char* alignment = aln->graph_alignment.c_str();
-    const char* readAlignment = aln->read_alignment.c_str();
-    PyObject * x = PyList_New(aln->covs.size());
-    for (size_t i = 0; i < aln->covs.size(); i++ ) {
-        PyList_SET_ITEM(x, i, PyLong_FromLong(aln->covs[i]));
-    }
-
-    PyObject * ret = Py_BuildValue("dssOO", aln->score, alignment,
-                                   readAlignment,
-                                   (aln->truncated)? Py_True : Py_False,
-                                   x);
-    delete aln;
-    Py_DECREF(x);
-
-    return ret;
-}
-
-static PyObject* khmer_ReadAligner_get_scoring_matrix(
-    khmer_ReadAligner_Object * me, PyObject * args)
-{
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-    ScoringMatrix matrix = me->aligner->getScoringMatrix();
-
-    return Py_BuildValue( "dddd", matrix.trusted_match, matrix.trusted_mismatch,
-                          matrix.untrusted_match, matrix.untrusted_mismatch);
-}
-
-static PyObject* khmer_ReadAligner_get_transition_probabilities(
-    khmer_ReadAligner_Object * me, PyObject * args)
-{
-
-    if (!PyArg_ParseTuple(args, "")) {
-        return NULL;
-    }
-    ScoringMatrix matrix = me->aligner->getScoringMatrix();
-
-    return Py_BuildValue( "(dddddd)(dddd)(dddd)(dddddd)(dddd)(dddd)",
-                          matrix.tsc[0], matrix.tsc[1], matrix.tsc[2],
-                          matrix.tsc[3], matrix.tsc[4], matrix.tsc[5],
-                          matrix.tsc[6], matrix.tsc[7], matrix.tsc[8],
-                          matrix.tsc[9], matrix.tsc[10], matrix.tsc[11],
-                          matrix.tsc[12], matrix.tsc[13], matrix.tsc[14],
-                          matrix.tsc[15], matrix.tsc[16], matrix.tsc[17],
-                          matrix.tsc[18], matrix.tsc[19], matrix.tsc[20],
-                          matrix.tsc[21], matrix.tsc[22], matrix.tsc[23],
-                          matrix.tsc[24], matrix.tsc[25], matrix.tsc[26],
-                          matrix.tsc[27]);
-}
-
-static PyMethodDef khmer_ReadAligner_methods[] = {
-    {"align", (PyCFunction)readaligner_align, METH_VARARGS, ""},
-    {"align_forward", (PyCFunction)readaligner_align_forward, METH_VARARGS, ""},
-    {
-        "get_scoring_matrix", (PyCFunction)khmer_ReadAligner_get_scoring_matrix,
-        METH_VARARGS,
-        "Get the scoring matrix in use.\n\n\
-Returns a tuple of floats: (trusted_match, trusted_mismatch, untrusted_match, \
-untrusted_mismatch)"
-    },
-    {
-        "get_transition_probabilities",
-        (PyCFunction)khmer_ReadAligner_get_transition_probabilities,
-        METH_VARARGS,
-        "Get the transition probabilties in use.\n\n\
-HMM state notation abbreviations:\n\
-    M_t - trusted match; M_u - untrusted match\n\
-    Ir_t - trusted read insert; Ir_u - untrusted read insert\n\
-    Ig_t - trusted graph insert; Ig_u - untrusted graph insert\n\
-\
-Returns a sparse matrix as a tuple of six tuples.\n\
-The inner tuples contain 6, 4, 4, 6, 4, and 4 floats respectively.\n\
-Transition are notated as 'StartState-NextState':\n\
-(\n\
-  ( M_t-M_t,  M_t-Ir_t,  M_t-Ig_t,  M_t-M_u,  M_t-Ir_u,  M_t-Ig_u),\n\
-  (Ir_t-M_t, Ir_t-Ir_t,            Ir_t-M_u, Ir_t-Ir_u           ),\n\
-  (Ig_t-M_t,          , Ig_t-Ig_t, Ig_t-M_u,            Ig_t-Ig_u),\n\
-  ( M_u-M_t,  M_u-Ir_t,  M_u-Ig_t,  M_u-M_u,  M_u-Ir_u,  M_u-Ig_u),\n\
-  (Ir_u-M_t, Ir_u-Ir_t,            Ir_u-M_u, Ir_u-Ir_u           ),\n\
-  (Ig_u-M_t,          , Ig_u-Ig_t, Ig_u-M_u,            Ig_u-Ig_u)\n\
-)"
-    },
-    {NULL} /* Sentinel */
-};
-
-//
-// khmer_readaligner_dealloc -- clean up readaligner object
-// GRAPHALIGN addition
-//
-static void khmer_readaligner_dealloc(khmer_ReadAligner_Object* obj)
-{
-    delete obj->aligner;
-    obj->aligner = NULL;
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-//
-// new_readaligner
-//
-static PyObject* khmer_ReadAligner_new(PyTypeObject *type, PyObject * args,
-                                       PyObject *kwds)
-{
-    khmer_ReadAligner_Object * self;
-
-    self = (khmer_ReadAligner_Object *)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        khmer_KCountgraph_Object * ch = NULL;
-        unsigned short int trusted_cov_cutoff = 2;
-        double bits_theta = 1;
-        double scoring_matrix[] = { 0, 0, 0, 0 };
-        double * transitions = new double[28];
-
-        if(!PyArg_ParseTuple(
-                    args,
-                    "O!Hd|(dddd)((dddddd)(dddd)(dddd)(dddddd)(dddd)(dddd))",
-                    &khmer_KCountgraph_Type, &ch, &trusted_cov_cutoff,
-                    &bits_theta, &scoring_matrix[0], &scoring_matrix[1],
-                    &scoring_matrix[2], &scoring_matrix[3], &transitions[0],
-                    &transitions[1], &transitions[2], &transitions[3],
-                    &transitions[4], &transitions[5], &transitions[6],
-                    &transitions[7], &transitions[8], &transitions[9],
-                    &transitions[10], &transitions[11], &transitions[12],
-                    &transitions[13], &transitions[14], &transitions[15],
-                    &transitions[16], &transitions[17], &transitions[18],
-                    &transitions[19], &transitions[20], &transitions[21],
-                    &transitions[22], &transitions[23], &transitions[24],
-                    &transitions[25], &transitions[26], &transitions[27])) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        self->aligner = new ReadAligner(ch->countgraph, trusted_cov_cutoff,
-                                        bits_theta, scoring_matrix,
-                                        transitions);
-    }
-
-    return (PyObject *) self;
-}
-
-static PyTypeObject khmer_ReadAlignerType = {
-    PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
-    "_khmer.ReadAligner",		    /*tp_name*/
-    sizeof(khmer_ReadAligner_Object),	    /*tp_basicsize*/
-    0,					    /*tp_itemsize*/
-    (destructor)khmer_readaligner_dealloc,  /*tp_dealloc*/
-    0,                          /*tp_print*/
-    0,                          /*tp_getattr*/
-    0,                          /*tp_setattr*/
-    0,                          /*tp_compare*/
-    0,                          /*tp_repr*/
-    0,                          /*tp_as_number*/
-    0,                          /*tp_as_sequence*/
-    0,                          /*tp_as_mapping*/
-    0,                          /*tp_hash */
-    0,                          /*tp_call*/
-    0,                          /*tp_str*/
-    0,                          /*tp_getattro*/
-    0,                          /*tp_setattro*/
-    0,                          /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,         /*tp_flags*/
-    "ReadAligner object",           /* tp_doc */
-    0,                         /* tp_traverse */
-    0,                         /* tp_clear */
-    0,                         /* tp_richcompare */
-    0,                         /* tp_weaklistoffset */
-    0,                         /* tp_iter */
-    0,                         /* tp_iternext */
-    khmer_ReadAligner_methods, /* tp_methods */
-    0,                         /* tp_members */
-    0,                         /* tp_getset */
-    0,                         /* tp_base */
-    0,                         /* tp_dict */
-    0,                         /* tp_descr_get */
-    0,                         /* tp_descr_set */
-    0,                         /* tp_dictoffset */
-    0,			               /* tp_init */
-    0,                         /* tp_alloc */
-    khmer_ReadAligner_new,     /* tp_new */
-};
-
-//
-// khmer_countgraph_dealloc -- clean up a countgraph hash object.
-//
-
-static void khmer_countgraph_dealloc(khmer_KCountgraph_Object * obj)
-{
-    delete obj->countgraph;
-    obj->countgraph = NULL;
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-//
-// khmer_nodegraph_dealloc -- clean up a nodegraph object.
-//
-static void khmer_nodegraph_dealloc(khmer_KNodegraph_Object * obj)
-{
-    delete obj->nodegraph;
-    obj->nodegraph = NULL;
-
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-
-//
-// khmer_subset_dealloc -- clean up a subset object.
-//
-
-static void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj)
-{
-    delete obj->subset;
-    obj->subset = NULL;
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-
-/***********************************************************************/
-
-//
-// KHLLCounter object
-//
-
-typedef struct {
-    PyObject_HEAD
-    HLLCounter * hllcounter;
-} khmer_KHLLCounter_Object;
-
-static PyObject* khmer_hllcounter_new(PyTypeObject * type, PyObject * args,
-                                      PyObject * kwds)
-{
-    khmer_KHLLCounter_Object * self;
-    self = (khmer_KHLLCounter_Object *)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        double error_rate = 0.01;
-        WordLength ksize = 20;
-
-        if (!PyArg_ParseTuple(args, "|db", &error_rate, &ksize)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->hllcounter = new HLLCounter(error_rate, ksize);
-        } catch (InvalidValue &e) {
-            Py_DECREF(self);
-            PyErr_SetString(PyExc_ValueError, e.what());
-            return NULL;
-        }
-    }
-
-    return (PyObject *) self;
-}
-
-//
-// khmer_hllcounter_dealloc -- clean up a hllcounter object.
-//
-
-static void khmer_hllcounter_dealloc(khmer_KHLLCounter_Object * obj)
-{
-    delete obj->hllcounter;
-    obj->hllcounter = NULL;
-
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static
-PyObject *
-hllcounter_add(khmer_KHLLCounter_Object * me, PyObject * args)
-{
-    const char * kmer_str;
-
-    if (!PyArg_ParseTuple(args, "s", &kmer_str)) {
-        return NULL;
-    }
-
-    try {
-        me->hllcounter->add(kmer_str);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-static
-PyObject *
-hllcounter_estimate_cardinality(khmer_KHLLCounter_Object * me, PyObject * args)
-{
-    if (!PyArg_ParseTuple( args, "" )) {
-        return NULL;
-    }
-
-    return PyLong_FromLong(me->hllcounter->estimate_cardinality());
-}
-
-static
-PyObject *
-hllcounter_consume_string(khmer_KHLLCounter_Object * me, PyObject * args)
-{
-    const char * kmer_str;
-    unsigned long long n_consumed;
-
-    if (!PyArg_ParseTuple(args, "s", &kmer_str)) {
-        return NULL;
-    }
-
-    try {
-        n_consumed = me->hllcounter->consume_string(kmer_str);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    return PyLong_FromLong(n_consumed);
-}
-
-static PyObject * hllcounter_consume_seqfile(khmer_KHLLCounter_Object * me,
-        PyObject * args, PyObject * kwds)
-{
-    const char * filename;
-    PyObject * stream_records_o = NULL;
-
-    static const char* const_kwlist[] = {"filename", "stream_records", NULL};
-    static char** kwlist = const_cast<char**>(const_kwlist);
-
-    bool stream_records = false;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|O", kwlist,
-                                     &filename, &stream_records_o)) {
-        return NULL;
-    }
-
-    if (stream_records_o != NULL && PyObject_IsTrue(stream_records_o)) {
-        stream_records = true;
-    }
-
-    // call the C++ function, and trap signals => Python
-    unsigned long long  n_consumed    = 0;
-    unsigned int        total_reads   = 0;
-    try {
-        me->hllcounter->consume_seqfile<FastxReader>(filename, stream_records,
-                total_reads,
-                n_consumed);
-    } catch (khmer_file_exception &exc) {
-        PyErr_SetString(PyExc_OSError, exc.what());
-        return NULL;
-    } catch (khmer_value_exception &exc) {
-        PyErr_SetString(PyExc_ValueError, exc.what());
-        return NULL;
-    }
-
-    return Py_BuildValue("IK", total_reads, n_consumed);
-}
-
-static PyObject * hllcounter_merge(khmer_KHLLCounter_Object * me,
-                                   PyObject * args);
-
-static
-PyObject *
-hllcounter_get_erate(khmer_KHLLCounter_Object * me)
-{
-    return PyFloat_FromDouble(me->hllcounter->get_erate());
-}
-
-static
-PyObject *
-hllcounter_get_ksize(khmer_KHLLCounter_Object * me)
-{
-    return PyLong_FromLong(me->hllcounter->get_ksize());
-}
-
-static
-int
-hllcounter_set_ksize(khmer_KHLLCounter_Object * me, PyObject *value,
-                     void *closure)
-{
-    if (value == NULL) {
-        PyErr_SetString(PyExc_TypeError, "Cannot delete attribute");
-        return -1;
-    }
-
-    long ksize = 0;
-    if (PyLong_Check(value)) {
-        ksize = PyLong_AsLong(value);
-    } else if (PyInt_Check(value)) {
-        ksize = PyInt_AsLong(value);
-    } else {
-        PyErr_SetString(PyExc_TypeError,
-                        "Please use an integer value for k-mer size");
-        return -1;
-    }
-
-    if (ksize <= 0) {
-        PyErr_SetString(PyExc_ValueError, "Please set k-mer size to a value "
-                        "greater than zero");
-        return -1;
-    }
-
-    try {
-        me->hllcounter->set_ksize(ksize);
-    } catch (ReadOnlyAttribute &e) {
-        PyErr_SetString(PyExc_AttributeError, e.what());
-        return -1;
-    }
-
-    return 0;
-}
-
-static
-int
-hllcounter_set_erate(khmer_KHLLCounter_Object * me, PyObject *value,
-                     void *closure)
-{
-    if (value == NULL) {
-        PyErr_SetString(PyExc_TypeError, "Cannot delete attribute");
-        return -1;
-    }
-
-    if (!PyFloat_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "Please use a float value for k-mer size");
-        return -1;
-    }
-
-    double erate = PyFloat_AsDouble(value);
-    try {
-        me->hllcounter->set_erate(erate);
-    } catch (InvalidValue &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return -1;
-    } catch (ReadOnlyAttribute &e) {
-        PyErr_SetString(PyExc_AttributeError, e.what());
-        return -1;
-    }
-
-    return 0;
-}
-
-static
-PyObject *
-hllcounter_getalpha(khmer_KHLLCounter_Object * me)
-{
-    return PyFloat_FromDouble(me->hllcounter->get_alpha());
-}
-
-static
-PyObject *
-hllcounter_getcounters(khmer_KHLLCounter_Object * me)
-{
-    std::vector<int> counters = me->hllcounter->get_M();
-
-    PyObject * x = PyList_New(counters.size());
-    for (size_t i = 0; i < counters.size(); i++) {
-        PyList_SET_ITEM(x, i, PyLong_FromLong(counters[i]));
-    }
-
-    return x;
-}
-
-static PyMethodDef khmer_hllcounter_methods[] = {
-    {
-        "add", (PyCFunction)hllcounter_add,
-        METH_VARARGS,
-        "Add a k-mer to the counter."
-    },
-    {
-        "estimate_cardinality", (PyCFunction)hllcounter_estimate_cardinality,
-        METH_VARARGS,
-        "Return the current estimation."
-    },
-    {
-        "consume_string", (PyCFunction)hllcounter_consume_string,
-        METH_VARARGS,
-        "Break a sequence into k-mers and add each k-mer to the counter."
-    },
-    {
-        "consume_seqfile", (PyCFunction)hllcounter_consume_seqfile,
-        METH_VARARGS | METH_KEYWORDS,
-        "Read sequences from file, break into k-mers, "
-        "and add each k-mer to the counter. If optional keyword 'stream_out' "
-        "is True, also prints each sequence to stdout."
-    },
-    {
-        "merge", (PyCFunction)hllcounter_merge,
-        METH_VARARGS,
-        "Merge other counter into this one."
-    },
-    {NULL} /* Sentinel */
-};
-
-static PyGetSetDef khmer_hllcounter_getseters[] = {
-    {
-        (char *)"alpha",
-        (getter)hllcounter_getalpha, NULL,
-        (char *)"alpha constant for this HLL counter.",
-        NULL
-    },
-    {
-        (char *)"error_rate",
-        (getter)hllcounter_get_erate, (setter)hllcounter_set_erate,
-        (char *)"Error rate for this HLL counter. "
-        "Can be changed prior to first counting, but becomes read-only after "
-        "that (raising AttributeError)",
-        NULL
-    },
-    {
-        (char *)"ksize",
-        (getter)hllcounter_get_ksize, (setter)hllcounter_set_ksize,
-        (char *)"k-mer size for this HLL counter."
-        "Can be changed prior to first counting, but becomes read-only after "
-        "that (raising AttributeError)",
-        NULL
-    },
-    {
-        (char *)"counters",
-        (getter)hllcounter_getcounters, NULL,
-        (char *)"Read-only internal counters.",
-        NULL
-    },
-    {NULL} /* Sentinel */
-};
-
-static PyTypeObject khmer_KHLLCounter_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "_khmer.KHLLCounter",                       /* tp_name */
-    sizeof(khmer_KHLLCounter_Object),          /* tp_basicsize */
-    0,                                         /* tp_itemsize */
-    (destructor)khmer_hllcounter_dealloc,      /* tp_dealloc */
-    0,                                         /* tp_print */
-    0,                                         /* tp_getattr */
-    0,                                         /* tp_setattr */
-    0,                                         /* tp_compare */
-    0,                                         /* tp_repr */
-    0,                                         /* tp_as_number */
-    0,                                         /* tp_as_sequence */
-    0,                                         /* tp_as_mapping */
-    0,                                         /* tp_hash */
-    0,                                         /* tp_call */
-    0,                                         /* tp_str */
-    0,                                         /* tp_getattro */
-    0,                                         /* tp_setattro */
-    0,                                         /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,  /* tp_flags */
-    "HyperLogLog counter",                     /* tp_doc */
-    0,                                         /* tp_traverse */
-    0,                                         /* tp_clear */
-    0,                                         /* tp_richcompare */
-    0,                                         /* tp_weaklistoffset */
-    0,                                         /* tp_iter */
-    0,                                         /* tp_iternext */
-    khmer_hllcounter_methods,                  /* tp_methods */
-    0,                                         /* tp_members */
-    khmer_hllcounter_getseters,                /* tp_getset */
-    0,                                         /* tp_base */
-    0,                                         /* tp_dict */
-    0,                                         /* tp_descr_get */
-    0,                                         /* tp_descr_set */
-    0,                                         /* tp_dictoffset */
-    0,                                         /* tp_init */
-    0,                                         /* tp_alloc */
-    khmer_hllcounter_new,                      /* tp_new */
-};
-
-static PyObject * hllcounter_merge(khmer_KHLLCounter_Object * me,
-                                   PyObject * args)
-{
-    khmer_KHLLCounter_Object * other;
-
-    if (!PyArg_ParseTuple(args, "O!", &khmer_KHLLCounter_Type, &other)) {
-        return NULL;
-    }
-
-    try {
-        me->hllcounter->merge(*(other->hllcounter));
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
-/********************************
- * Assembler classes
- ********************************/
-
-
-typedef struct {
-    PyObject_HEAD
-    LinearAssembler * assembler;
-} khmer_KLinearAssembler_Object;
-
-static void khmer_linearassembler_dealloc(khmer_KLinearAssembler_Object * obj)
-{
-    delete obj->assembler;
-    obj->assembler = NULL;
-
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static PyObject * khmer_linearassembler_new(PyTypeObject *type, PyObject *args,
-        PyObject *kwds)
-{
-    khmer_KLinearAssembler_Object *self;
-    self = (khmer_KLinearAssembler_Object*)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        PyObject * hashgraph_o;
-        Hashgraph * hashgraph = NULL;
-
-        if (!PyArg_ParseTuple(args, "O", &hashgraph_o)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        if (PyObject_TypeCheck(hashgraph_o, &khmer_KNodegraph_Type)) {
-            khmer_KNodegraph_Object * kho = (khmer_KNodegraph_Object *) hashgraph_o;
-            hashgraph = kho->nodegraph;
-        } else if (PyObject_TypeCheck(hashgraph_o, &khmer_KCountgraph_Type)) {
-            khmer_KCountgraph_Object * cho = (khmer_KCountgraph_Object *) hashgraph_o;
-            hashgraph = cho->countgraph;
-        } else {
-            PyErr_SetString(PyExc_ValueError,
-                            "graph object must be a NodeGraph or CountGraph");
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->assembler = new LinearAssembler(hashgraph);
-        } catch (std::bad_alloc &e) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-
-    }
-
-    return (PyObject *) self;
-}
-
-
-static
-PyObject *
-linearassembler_assemble(khmer_KLinearAssembler_Object * me,
-                         PyObject * args, PyObject *kwargs)
-{
-    LinearAssembler * assembler= me->assembler;
-
-    PyObject * val_o;
-    khmer_KNodegraph_Object * nodegraph_o = NULL;
-    Nodegraph * stop_bf = NULL;
-    const char * dir_str = NULL;
-    char dir = NULL;
-
-    const char *kwnames[] = {"seed_kmer", "stop_filter", "direction", NULL};
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O!s",
-                                     const_cast<char **>(kwnames),
-                                     &val_o, &khmer_KNodegraph_Type,
-                                     &nodegraph_o, &dir_str)) {
-        return NULL;
-    }
-    if (dir_str != NULL) {
-        dir = dir_str[0];
-    } else {
-        dir = 'B';
-    }
-
-    Kmer start_kmer;
-    if (!ht_convert_PyObject_to_Kmer(val_o, start_kmer, assembler->graph)) {
-        return NULL;
-    }
-
-    if (nodegraph_o) {
-        stop_bf = nodegraph_o->nodegraph;
-    }
-
-    std::string contig;
-    if (dir == 'B') {
-        contig = assembler->assemble(start_kmer, stop_bf);
-    } else if (dir == 'L') {
-        contig = assembler->assemble_left(start_kmer, stop_bf);
-    } else if (dir == 'R') {
-        contig = assembler->assemble_right(start_kmer, stop_bf);
-    } else {
-        PyErr_SetString(PyExc_ValueError, "Direction must be B (both), L (left),"
-                        " or R (right).");
-        return NULL;
-    }
-
-    PyObject * ret = Py_BuildValue("s", contig.c_str());
-    return ret;
-}
-
-
-static PyMethodDef khmer_linearassembler_methods[] = {
-    {
-        "assemble",
-        (PyCFunction)linearassembler_assemble, METH_VARARGS | METH_KEYWORDS,
-        "Assemble a path linearly until a branch is reached."
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyTypeObject khmer_KLinearAssembler_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)  /* init & ob_size */
-    "_khmer.LinearAssembler",            /* tp_name */
-    sizeof(khmer_KLinearAssembler_Object), /* tp_basicsize */
-    0,                       /* tp_itemsize */
-    (destructor)khmer_linearassembler_dealloc, /* tp_dealloc */
-    0,                       /* tp_print */
-    0,                       /* tp_getattr */
-    0,                       /* tp_setattr */
-    0,                       /* tp_compare */
-    0,                       /* tp_repr */
-    0,                       /* tp_as_number */
-    0,                       /* tp_as_sequence */
-    0,                       /* tp_as_mapping */
-    0,                       /* tp_hash */
-    0,                       /* tp_call */
-    0,                       /* tp_str */
-    0,                       /* tp_getattro */
-    0,                       /* tp_setattro */
-    0,                       /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
-    0,                       /* tp_doc */
-    0,                       /* tp_traverse */
-    0,                       /* tp_clear */
-    0,                       /* tp_richcompare */
-    0,                       /* tp_weaklistoffset */
-    0,                       /* tp_iter */
-    0,                       /* tp_iternext */
-    khmer_linearassembler_methods, /* tp_methods */
-    0,                       /* tp_members */
-    0,                       /* tp_getset */
-    0,                       /* tp_base */
-    0,                       /* tp_dict */
-    0,                       /* tp_descr_get */
-    0,                       /* tp_descr_set */
-    0,                       /* tp_dictoffset */
-    0,                       /* tp_init */
-    0,                       /* tp_alloc */
-    khmer_linearassembler_new,      /* tp_new */
-};
-
-
-
-typedef struct {
-    PyObject_HEAD
-    SimpleLabeledAssembler * assembler;
-} khmer_KSimpleLabeledAssembler_Object;
-
-
-static void khmer_simplelabeledassembler_dealloc(khmer_KLinearAssembler_Object *
-        obj)
-{
-    delete obj->assembler;
-    obj->assembler = NULL;
-
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static PyObject * khmer_simplelabeledassembler_new(PyTypeObject *type,
-        PyObject *args,
-        PyObject *kwds)
-{
-    khmer_KSimpleLabeledAssembler_Object *self;
-    self = (khmer_KSimpleLabeledAssembler_Object*)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        PyObject * labelhash_o;
-        LabelHash * labelhash = NULL;
-
-        if (!PyArg_ParseTuple(args, "O", &labelhash_o)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        if (PyObject_TypeCheck(labelhash_o, &khmer_KGraphLabels_Type)) {
-            khmer_KGraphLabels_Object * klo = (khmer_KGraphLabels_Object *) labelhash_o;
-            labelhash = klo->labelhash;
-        } else {
-            PyErr_SetString(PyExc_ValueError,
-                            "SimpleLabeledAssembler needs a GraphLabels object.");
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->assembler = new SimpleLabeledAssembler(labelhash);
-        } catch (std::bad_alloc &e) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-
-    }
-
-    return (PyObject *) self;
-}
-
-
-static
-PyObject *
-simplelabeledassembler_assemble(khmer_KSimpleLabeledAssembler_Object * me,
-                                PyObject * args, PyObject *kwargs)
-{
-    SimpleLabeledAssembler * assembler = me->assembler;
-
-    PyObject * val_o;
-    khmer_KNodegraph_Object * nodegraph_o = NULL;
-    Nodegraph * stop_bf = NULL;
-
-    const char *kwnames[] = {"seed_kmer", "stop_filter", NULL};
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O!",
-                                     const_cast<char **>(kwnames),
-                                     &val_o, &khmer_KNodegraph_Type,
-                                     &nodegraph_o)) {
-        return NULL;
-    }
-
-
-    Kmer start_kmer;
-    if (!ht_convert_PyObject_to_Kmer(val_o, start_kmer, assembler->graph)) {
-        return NULL;
-    }
-
-    if (nodegraph_o) {
-        stop_bf = nodegraph_o->nodegraph;
-    }
-
-    std::vector<std::string> contigs = assembler->assemble(start_kmer, stop_bf);
-
-    PyObject * ret = PyList_New(contigs.size());
-    for (unsigned int i = 0; i < contigs.size(); i++) {
-        PyList_SET_ITEM(ret, i, PyUnicode_FromString(contigs[i].c_str()));
-    }
-
-    return ret;
-}
-
-
-static PyMethodDef khmer_simplelabeledassembler_methods[] = {
-    {
-        "assemble",
-        (PyCFunction)simplelabeledassembler_assemble, METH_VARARGS | METH_KEYWORDS,
-        "Assemble paths, using labels to jump branches."
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyTypeObject khmer_KSimpleLabeledAssembler_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)  /* init & ob_size */
-    "_khmer.SimpleLabeledAssembler",            /* tp_name */
-    sizeof(khmer_KSimpleLabeledAssembler_Object), /* tp_basicsize */
-    0,                       /* tp_itemsize */
-    (destructor)khmer_simplelabeledassembler_dealloc, /* tp_dealloc */
-    0,                       /* tp_print */
-    0,                       /* tp_getattr */
-    0,                       /* tp_setattr */
-    0,                       /* tp_compare */
-    0,                       /* tp_repr */
-    0,                       /* tp_as_number */
-    0,                       /* tp_as_sequence */
-    0,                       /* tp_as_mapping */
-    0,                       /* tp_hash */
-    0,                       /* tp_call */
-    0,                       /* tp_str */
-    0,                       /* tp_getattro */
-    0,                       /* tp_setattro */
-    0,                       /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
-    0,                       /* tp_doc */
-    0,                       /* tp_traverse */
-    0,                       /* tp_clear */
-    0,                       /* tp_richcompare */
-    0,                       /* tp_weaklistoffset */
-    0,                       /* tp_iter */
-    0,                       /* tp_iternext */
-    khmer_simplelabeledassembler_methods, /* tp_methods */
-    0,                       /* tp_members */
-    0,                       /* tp_getset */
-    0,                       /* tp_base */
-    0,                       /* tp_dict */
-    0,                       /* tp_descr_get */
-    0,                       /* tp_descr_set */
-    0,                       /* tp_dictoffset */
-    0,                       /* tp_init */
-    0,                       /* tp_alloc */
-    khmer_simplelabeledassembler_new,      /* tp_new */
-};
-
-
-
-/********************************
- * JunctionCountAssembler
- ********************************/
-
-
-typedef struct {
-    PyObject_HEAD
-    JunctionCountAssembler * assembler;
-} khmer_KJunctionCountAssembler_Object;
-
-static void khmer_junctioncountassembler_dealloc(
-    khmer_KJunctionCountAssembler_Object * obj)
-{
-    delete obj->assembler;
-    obj->assembler = NULL;
-
-    Py_TYPE(obj)->tp_free((PyObject*)obj);
-}
-
-static PyObject * khmer_junctioncountassembler_new(PyTypeObject *type,
-        PyObject *args,
-        PyObject *kwds)
-{
-    khmer_KJunctionCountAssembler_Object *self;
-    self = (khmer_KJunctionCountAssembler_Object*)type->tp_alloc(type, 0);
-
-    if (self != NULL) {
-        PyObject * hashgraph_o;
-        Hashgraph * hashgraph = NULL;
-
-        if (!PyArg_ParseTuple(args, "O", &hashgraph_o)) {
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        if (PyObject_TypeCheck(hashgraph_o, &khmer_KNodegraph_Type)) {
-            khmer_KNodegraph_Object * kho = (khmer_KNodegraph_Object *) hashgraph_o;
-            hashgraph = kho->nodegraph;
-        } else if (PyObject_TypeCheck(hashgraph_o, &khmer_KCountgraph_Type)) {
-            khmer_KCountgraph_Object * cho = (khmer_KCountgraph_Object *) hashgraph_o;
-            hashgraph = cho->countgraph;
-        } else {
-            PyErr_SetString(PyExc_ValueError,
-                            "graph object must be a NodeGraph or CountGraph");
-            Py_DECREF(self);
-            return NULL;
-        }
-
-        try {
-            self->assembler = new JunctionCountAssembler(hashgraph);
-        } catch (std::bad_alloc &e) {
-            Py_DECREF(self);
-            return PyErr_NoMemory();
-        }
-
-    }
-
-    return (PyObject *) self;
-}
-
-
-static
-PyObject *
-junctioncountassembler_assemble(khmer_KJunctionCountAssembler_Object * me,
-                                PyObject * args, PyObject *kwargs)
-{
-    JunctionCountAssembler * assembler = me->assembler;
-
-    PyObject * val_o;
-    khmer_KNodegraph_Object * nodegraph_o = NULL;
-    Nodegraph * stop_bf = NULL;
-
-    const char *kwnames[] = {"seed_kmer", "stop_filter", NULL};
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O!",
-                                     const_cast<char **>(kwnames),
-                                     &val_o, &khmer_KNodegraph_Type,
-                                     &nodegraph_o)) {
-        return NULL;
-    }
-
-    Kmer start_kmer;
-    if (!ht_convert_PyObject_to_Kmer(val_o, start_kmer, assembler->graph)) {
-        return NULL;
-    }
-
-    if (nodegraph_o) {
-        stop_bf = nodegraph_o->nodegraph;
-    }
-
-    std::vector<std::string> contigs = assembler->assemble(start_kmer, stop_bf);
-
-    PyObject * ret = PyList_New(contigs.size());
-    for (unsigned int i = 0; i < contigs.size(); i++) {
-        PyList_SET_ITEM(ret, i, PyUnicode_FromString(contigs[i].c_str()));
-    }
-
-    return ret;
-}
-
-
-static
-PyObject *
-junctioncountassembler_consume(khmer_KJunctionCountAssembler_Object * me,
-                               PyObject * args)
-{
-    JunctionCountAssembler * assembler = me->assembler;
-    const char * long_str;
-
-    if (!PyArg_ParseTuple(args, "s", &long_str)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < assembler->_ksize) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashgraph k-mer size");
-        return NULL;
-    }
-
-    uint16_t n_junctions = assembler->consume(long_str);
-
-    return PyLong_FromLong((HashIntoType) n_junctions);
-}
-
-
-static PyMethodDef khmer_junctioncountassembler_methods[] = {
-    {
-        "assemble",
-        (PyCFunction)junctioncountassembler_assemble, METH_VARARGS | METH_KEYWORDS,
-        "Assemble paths, using recorded junctions to jump branches."
-    },
-    {
-        "consume",
-        (PyCFunction)junctioncountassembler_consume, METH_VARARGS,
-        "Consume a string and count its branch junctions."
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyTypeObject khmer_KJunctionCountAssembler_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)  /* init & ob_size */
-    "_khmer.JunctionCountAssembler",            /* tp_name */
-    sizeof(khmer_KJunctionCountAssembler_Object), /* tp_basicsize */
-    0,                       /* tp_itemsize */
-    (destructor)khmer_junctioncountassembler_dealloc, /* tp_dealloc */
-    0,                       /* tp_print */
-    0,                       /* tp_getattr */
-    0,                       /* tp_setattr */
-    0,                       /* tp_compare */
-    0,                       /* tp_repr */
-    0,                       /* tp_as_number */
-    0,                       /* tp_as_sequence */
-    0,                       /* tp_as_mapping */
-    0,                       /* tp_hash */
-    0,                       /* tp_call */
-    0,                       /* tp_str */
-    0,                       /* tp_getattro */
-    0,                       /* tp_setattro */
-    0,                       /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
-    0,                       /* tp_doc */
-    0,                       /* tp_traverse */
-    0,                       /* tp_clear */
-    0,                       /* tp_richcompare */
-    0,                       /* tp_weaklistoffset */
-    0,                       /* tp_iter */
-    0,                       /* tp_iternext */
-    khmer_junctioncountassembler_methods, /* tp_methods */
-    0,                       /* tp_members */
-    0,                       /* tp_getset */
-    0,                       /* tp_base */
-    0,                       /* tp_dict */
-    0,                       /* tp_descr_get */
-    0,                       /* tp_descr_set */
-    0,                       /* tp_dictoffset */
-    0,                       /* tp_init */
-    0,                       /* tp_alloc */
-    khmer_junctioncountassembler_new,      /* tp_new */
-};
-
-////
-
-static
-PyObject *
-hashtable_abundance_distribution_with_reads_parser(khmer_KHashtable_Object * me,
-        PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    khmer :: python :: khmer_ReadParser_Object * rparser_obj = NULL;
-    khmer_KHashtable_Object * tracking_obj = NULL;
-
-    if (!PyArg_ParseTuple(args, "O!O!", &python::khmer_ReadParser_Type,
-                          &rparser_obj, &khmer_KHashtable_Type, &tracking_obj)) {
-        return NULL;
-    }
-
-    FastxParserPtr& rparser = rparser_obj->parser;
-    Hashtable          *tracking        = tracking_obj->hashtable;
-    uint64_t           *dist            = NULL;
-    const char         *value_exception = NULL;
-    const char         *file_exception  = NULL;
-    std::string exc_string;
-
-    Py_BEGIN_ALLOW_THREADS
-    try {
-        dist = hashtable->abundance_distribution<FastxReader>(rparser, tracking);
-    } catch (khmer_file_exception &exc) {
-        exc_string = exc.what();
-        file_exception = exc_string.c_str();
-    } catch (khmer_value_exception &exc) {
-        exc_string = exc.what();
-        value_exception = exc_string.c_str();
-    }
-    Py_END_ALLOW_THREADS
-
-    if (file_exception != NULL) {
-        PyErr_SetString(PyExc_OSError, file_exception);
-        return NULL;
-    }
-    if (value_exception != NULL) {
-        PyErr_SetString(PyExc_ValueError, value_exception);
-        return NULL;
-    }
-
-    PyObject * x = PyList_New(MAX_BIGCOUNT + 1);
-    if (x == NULL) {
-        delete[] dist;
-        return NULL;
-    }
-    for (int i = 0; i < MAX_BIGCOUNT + 1; i++) {
-        PyList_SET_ITEM(x, i, PyLong_FromUnsignedLongLong(dist[i]));
-    }
-
-    delete[] dist;
-    return x;
-}
-
-static
-PyObject *
-hashtable_abundance_distribution(khmer_KHashtable_Object * me, PyObject * args)
-{
-    Hashtable * hashtable = me->hashtable;
-
-    const char * filename = NULL;
-    khmer_KHashtable_Object * tracking_obj = NULL;
-    if (!PyArg_ParseTuple(args, "sO!", &filename, &khmer_KHashtable_Type,
-                          &tracking_obj)) {
-        return NULL;
-    }
-
-    Hashtable          *tracking       = tracking_obj->hashtable;
-    uint64_t           *dist            = NULL;
-    const char         *value_exception = NULL;
-    const char         *file_exception  = NULL;
-    std::string exc_string;
-
-    Py_BEGIN_ALLOW_THREADS
-    try {
-        dist = hashtable->abundance_distribution<FastxReader>(filename, tracking);
-    } catch (khmer_file_exception &exc) {
-        exc_string = exc.what();
-        file_exception = exc_string.c_str();
-    } catch (khmer_value_exception &exc) {
-        exc_string = exc.what();
-        value_exception = exc_string.c_str();
-    }
-    Py_END_ALLOW_THREADS
-
-    if (file_exception != NULL) {
-        PyErr_SetString(PyExc_OSError, file_exception);
-        if (dist != NULL) {
-            delete []dist;
-        }
-        return NULL;
-    }
-    if (value_exception != NULL) {
-        PyErr_SetString(PyExc_ValueError, value_exception);
-        if (dist != NULL) {
-            delete []dist;
-        }
-        return NULL;
-    }
-
-    PyObject * x = PyList_New(MAX_BIGCOUNT + 1);
-    if (x == NULL) {
-        if (dist != NULL) {
-            delete []dist;
-        }
-        return NULL;
-    }
-    for (int i = 0; i < MAX_BIGCOUNT + 1; i++) {
-        PyList_SET_ITEM(x, i, PyLong_FromUnsignedLongLong(dist[i]));
-    }
-
-    if (dist != NULL) {
-        delete []dist;
-    }
-
-    return x;
-}
-
-//////////////////////////////
-// standalone functions
-
-static PyObject * forward_hash(PyObject * self, PyObject * args)
-{
-    const char * kmer;
-    WordLength ksize;
-
-    if (!PyArg_ParseTuple(args, "sb", &kmer, &ksize)) {
-        return NULL;
-    }
-
-    if (ksize > KSIZE_MAX) {
-        PyErr_Format(PyExc_ValueError, "k-mer size must be <= %u", KSIZE_MAX);
-        return NULL;
-    }
-
-    if (strlen(kmer) != ksize) {
-        PyErr_Format(PyExc_ValueError, "k-mer size different from ksize");
-        return NULL;
-    }
-
-    try {
-        PyObject * hash = nullptr;
-        const HashIntoType h(_hash(kmer, ksize));
-        convert_HashIntoType_to_PyObject(h, &hash);
-        return hash;
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_ValueError, e.what());
-        return NULL;
-    }
-
-}
-
-static PyObject * forward_hash_no_rc(PyObject * self, PyObject * args)
-{
-    const char * kmer;
-    WordLength ksize;
-
-    if (!PyArg_ParseTuple(args, "sb", &kmer, &ksize)) {
-        return NULL;
-    }
-
-    if (ksize > KSIZE_MAX) {
-        PyErr_Format(PyExc_ValueError, "k-mer size must be <= %u", KSIZE_MAX);
-        return NULL;
-    }
-
-    if (strlen(kmer) != ksize) {
-        PyErr_SetString(PyExc_ValueError,
-                        "k-mer length must equal the k-size");
-        return NULL;
-    }
-
-    PyObject * hash = nullptr;
-    const HashIntoType h(_hash_forward(kmer, ksize));
-    convert_HashIntoType_to_PyObject(h, &hash);
-    return hash;
-}
-
-static PyObject * reverse_hash(PyObject * self, PyObject * args)
-{
-    PyObject * val;
-    HashIntoType hash;
-    WordLength ksize;
-
-    if (!PyArg_ParseTuple(args, "Ob", &val, &ksize)) {
-        return NULL;
-    }
-
-    if (PyLong_Check(val) || PyInt_Check(val)) {
-        if (!convert_PyLong_to_HashIntoType(val, hash)) {
-            return NULL;
-        }
-    } else {
-        PyErr_SetString(PyExc_TypeError,
-                        "Hash value must be an integer.");
-        return NULL;
-    }
-
-    if (ksize > KSIZE_MAX) {
-        PyErr_Format(PyExc_ValueError, "k-mer size must be <= %u", KSIZE_MAX);
-        return NULL;
-    }
-
-    return PyUnicode_FromString(_revhash(hash, ksize).c_str());
-}
-
-static PyObject * murmur3_forward_hash(PyObject * self, PyObject * args)
-{
-    const char * kmer;
-
-    if (!PyArg_ParseTuple(args, "s", &kmer)) {
-        return NULL;
-    }
-
-    PyObject * hash = nullptr;
-    const HashIntoType h(_hash_murmur(kmer, strlen(kmer)));
-    convert_HashIntoType_to_PyObject(h, &hash);
-    return hash;
-}
-
-static PyObject * murmur3_forward_hash_no_rc(PyObject * self, PyObject * args)
-{
-    const char * kmer;
-
-    if (!PyArg_ParseTuple(args, "s", &kmer)) {
-        return NULL;
-    }
-
-    PyObject * hash = nullptr;
-    const HashIntoType h(_hash_murmur_forward(kmer, strlen(kmer)));
-    convert_HashIntoType_to_PyObject(h, &hash);
-    return hash;
-}
-
-static PyObject * reverse_complement(PyObject * self, PyObject * args)
-{
-    const char * sequence;
-    if (!PyArg_ParseTuple(args, "s", &sequence)) {
-        return NULL;
-    }
-
-    std::string s(sequence);
-    try {
-        s = _revcomp(s);
-    } catch (khmer_exception &e) {
-        PyErr_SetString(PyExc_RuntimeError, e.what());
-        return NULL;
-    }
-    return PyUnicode_FromString(s.c_str());
-}
-
-//
-// technique for resolving literal below found here:
-// https://gcc.gnu.org/onlinedocs/gcc-4.9.1/cpp/Stringification.html
-//
-
-static
-PyObject *
-get_version_cpp( PyObject * self, PyObject * args )
-{
-#define xstr(s) str(s)
-#define str(s) #s
-    std::string dVersion = xstr(VERSION);
-    return PyUnicode_FromString(dVersion.c_str());
-}
-
-
-//
-// Module machinery.
-//
-
-static PyMethodDef KhmerMethods[] = {
-    {
-        "forward_hash",     forward_hash,
-        METH_VARARGS,       "",
-    },
-    {
-        "forward_hash_no_rc",   forward_hash_no_rc,
-        METH_VARARGS,       "",
-    },
-    {
-        "reverse_hash",     reverse_hash,
-        METH_VARARGS,       "",
-    },
-    {
-        "hash_murmur3",
-        murmur3_forward_hash,
-        METH_VARARGS,
-        "Calculate the hash value of a k-mer using MurmurHash3 "
-        "(with reverse complement)",
-    },
-    {
-        "hash_no_rc_murmur3",
-        murmur3_forward_hash_no_rc,
-        METH_VARARGS,
-        "Calculate the hash value of a k-mer using MurmurHash3 "
-        "(no reverse complement)",
-    },
-    {
-        "reverse_complement",
-        reverse_complement,
-        METH_VARARGS,
-        "Calculate the reverse-complement of the DNA sequence "
-        "with alphabet ACGT",
-    },
-    {
-        "get_version_cpp", get_version_cpp,
-        METH_VARARGS, "return the VERSION c++ compiler option"
-    },
-    { NULL, NULL, 0, NULL } // sentinel
-};
-
-MOD_INIT(_khmer)
-{
-    using namespace python;
-
-    if (PyType_Ready(&khmer_KHashtable_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KCounttable_Type.tp_base = &khmer_KHashtable_Type;
-    if (PyType_Ready(&khmer_KCounttable_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KSmallCounttable_Type.tp_base = &khmer_KHashtable_Type;
-    if (PyType_Ready(&khmer_KSmallCounttable_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KNodetable_Type.tp_base = &khmer_KHashtable_Type;
-    if (PyType_Ready(&khmer_KNodetable_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KHashgraph_Type.tp_base = &khmer_KHashtable_Type;
-    khmer_KHashgraph_Type.tp_methods = khmer_hashgraph_methods;
-    if (PyType_Ready(&khmer_KHashgraph_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KCountgraph_Type.tp_base = &khmer_KHashgraph_Type;
-    if (PyType_Ready(&khmer_KCountgraph_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KSmallCountgraph_Type.tp_base = &khmer_KHashgraph_Type;
-    if (PyType_Ready(&khmer_KSmallCountgraph_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    if (PyType_Ready(&khmer_PrePartitionInfo_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KSubsetPartition_Type.tp_methods = khmer_subset_methods;
-    if (PyType_Ready(&khmer_KSubsetPartition_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KNodegraph_Type.tp_base = &khmer_KHashgraph_Type;
-    khmer_KNodegraph_Type.tp_methods = khmer_nodegraph_methods;
-    if (PyType_Ready(&khmer_KNodegraph_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    if (PyType_Ready(&khmer_KLinearAssembler_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-    if (PyType_Ready(&khmer_KSimpleLabeledAssembler_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-    if (PyType_Ready(&khmer_KJunctionCountAssembler_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_KGraphLabels_Type.tp_base = &khmer_KNodegraph_Type;
-    khmer_KGraphLabels_Type.tp_methods = khmer_graphlabels_methods;
-    khmer_KGraphLabels_Type.tp_new = khmer_graphlabels_new;
-    if (PyType_Ready(&khmer_KGraphLabels_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    if (PyType_Ready(&khmer_KHLLCounter_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-    if (PyType_Ready(&khmer_ReadAlignerType) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    _init_ReadParser_Type_constants();
-    if (PyType_Ready( &khmer_ReadParser_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    if (PyType_Ready(&khmer_Read_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    if (PyType_Ready(&khmer_ReadPairIterator_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    PyObject * m;
-
-    MOD_DEF(m, "_khmer", "interface for the khmer module low-level extensions",
-            KhmerMethods);
-
-    if (m == NULL) {
-        return MOD_ERROR_VAL;
-    }
-
-    PyObject * filetype_dict = Py_BuildValue("{s,i,s,i,s,i,s,i,s,i,s,i,s,i}",
-                               "COUNTING_HT", SAVED_COUNTING_HT,
-                               "HASHBITS", SAVED_HASHBITS,
-                               "TAGS", SAVED_TAGS,
-                               "STOPTAGS", SAVED_STOPTAGS,
-                               "SUBSET", SAVED_SUBSET,
-                               "LABELSET", SAVED_LABELSET,
-                               "SMALLCOUNT", SAVED_SMALLCOUNT);
-    if (PyModule_AddObject( m, "FILETYPES", filetype_dict ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_Read_Type);
-    if (PyModule_AddObject( m, "Read",
-                            (PyObject *)&khmer_Read_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_ReadParser_Type);
-    if (PyModule_AddObject( m, "ReadParser",
-                            (PyObject *)&khmer_ReadParser_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KCounttable_Type);
-    if (PyModule_AddObject( m, "Counttable",
-                            (PyObject *)&khmer_KCounttable_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KSmallCounttable_Type);
-    if (PyModule_AddObject( m, "SmallCounttable",
-                            (PyObject *)&khmer_KSmallCounttable_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KNodetable_Type);
-    if (PyModule_AddObject( m, "Nodetable",
-                            (PyObject *)&khmer_KNodetable_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KCountgraph_Type);
-    if (PyModule_AddObject( m, "Countgraph",
-                            (PyObject *)&khmer_KCountgraph_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KSmallCountgraph_Type);
-    if (PyModule_AddObject( m, "SmallCountgraph",
-                            (PyObject *)&khmer_KSmallCountgraph_Type ) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KNodegraph_Type);
-    if (PyModule_AddObject(m, "Nodegraph",
-                           (PyObject *)&khmer_KNodegraph_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KGraphLabels_Type);
-    if (PyModule_AddObject(m, "GraphLabels",
-                           (PyObject *)&khmer_KGraphLabels_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KLinearAssembler_Type);
-    if (PyModule_AddObject(m, "LinearAssembler",
-                           (PyObject *)&khmer_KLinearAssembler_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KSimpleLabeledAssembler_Type);
-    if (PyModule_AddObject(m, "SimpleLabeledAssembler",
-                           (PyObject *)&khmer_KSimpleLabeledAssembler_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KJunctionCountAssembler_Type);
-    if (PyModule_AddObject(m, "JunctionCountAssembler",
-                           (PyObject *)&khmer_KJunctionCountAssembler_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    if (PyType_Ready(&_HashSet_iter_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    khmer_HashSet_Type.tp_new = khmer_HashSet_new;
-    if (PyType_Ready(&khmer_HashSet_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_KHLLCounter_Type);
-    if (PyModule_AddObject(m, "HLLCounter",
-                           (PyObject *)&khmer_KHLLCounter_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_ReadAlignerType);
-    if (PyModule_AddObject(m, "ReadAligner",
-                           (PyObject *)&khmer_ReadAlignerType) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    Py_INCREF(&khmer_HashSet_Type);
-    if (PyModule_AddObject(m, "HashSet",
-                           (PyObject *)&khmer_HashSet_Type) < 0) {
-        return MOD_ERROR_VAL;
-    }
-
-    return MOD_SUCCESS_VAL(m);
-}
-
-// vim: set ft=cpp sts=4 sw=4 tw=79:
diff --git a/khmer/_oxli/__init__.py b/khmer/_oxli/__init__.py
new file mode 100644
index 0000000..06d02cd
--- /dev/null
+++ b/khmer/_oxli/__init__.py
@@ -0,0 +1,6 @@
+from .assembly import LinearAssembler
+from .hashing import Kmer
+from .parsing import Alphabets, Sequence, ReadBundle, UnpairedReadsError
+from .parsing import FastxParser, SanitizedFastxParser, SplitPairedReader
+from .parsing import BrokenPairedReader, _split_left_right
+from .parsing import check_is_left, check_is_right, check_is_pair
diff --git a/khmer/_oxli/assembly.pxd b/khmer/_oxli/assembly.pxd
new file mode 100644
index 0000000..7292243
--- /dev/null
+++ b/khmer/_oxli/assembly.pxd
@@ -0,0 +1,75 @@
+from libcpp.memory cimport unique_ptr
+from libcpp.string cimport string
+from libcpp.vector cimport vector
+from libc.stdint cimport uint16_t
+
+from oxli_types cimport *
+from hashing cimport CpKmer, Kmer
+from graphs cimport (CpHashgraph, CpHashtable, CpLabelHash, 
+                     get_hashgraph_ptr, get_labelhash_ptr)
+
+
+cdef extern from "oxli/assembler.hh" namespace "oxli":
+    cdef cppclass CpLinearAssembler "oxli::LinearAssembler":
+        CpLinearAssembler(CpHashgraph *)
+    
+        string assemble(const CpKmer, const CpHashgraph *) const
+        string assemble_left(const CpKmer, const CpHashgraph *) const     
+        string assemble_right(const CpKmer, const CpHashgraph *) const
+
+        string assemble(const CpKmer) const
+        string assemble_left(const CpKmer) const     
+        string assemble_right(const CpKmer) const
+
+    cdef cppclass CpSimpleLabeledAssembler "oxli::SimpleLabeledAssembler":
+        CpSimpleLabeledAssembler(const CpLabelHash *)
+
+        vector[string] assemble(const CpKmer)
+        vector[string] assemble(const CpKmer, const CpHashgraph *) const
+
+    cdef cppclass CpJunctionCountAssembler "oxli::JunctionCountAssembler":
+        CpJunctionCountAssembler(CpHashgraph *)
+
+        vector[string] assemble(const CpKmer) const
+        vector[string] assemble(const CpKmer, const CpHashtable *) const
+        uint16_t consume(string)
+        void count_junction(CpKmer, CpKmer)
+        BoundedCounterType get_junction_count(CpKmer, CpKmer) const
+
+
+cdef class LinearAssembler:
+    cdef unique_ptr[CpLinearAssembler] _this
+
+    cdef public object graph
+    cdef CpHashgraph * _graph_ptr
+
+    cdef public object stop_filter
+    cdef CpHashgraph * _stop_filter_ptr
+    
+    cdef str _assemble(self, Kmer start)
+    cdef str _assemble_left(self, Kmer start)
+    cdef str _assemble_right(self, Kmer start)
+
+
+cdef class SimpleLabeledAssembler:
+    cdef unique_ptr[CpSimpleLabeledAssembler] _this
+
+    cdef public object labels
+    cdef CpLabelHash * _label_ptr
+
+    cdef public object stop_filter
+    cdef CpHashgraph * _stop_filter_ptr
+    
+    cdef vector[string] _assemble(self, Kmer start)
+
+
+cdef class JunctionCountAssembler:
+    cdef unique_ptr[CpJunctionCountAssembler] _this
+
+    cdef public object graph
+    cdef CpHashgraph * _graph_ptr
+
+    cdef public object stop_filter
+    cdef CpHashgraph * _stop_filter_ptr
+    
+    cdef vector[string] _assemble(self, Kmer)
diff --git a/khmer/_oxli/assembly.pyx b/khmer/_oxli/assembly.pyx
new file mode 100644
index 0000000..be745e4
--- /dev/null
+++ b/khmer/_oxli/assembly.pyx
@@ -0,0 +1,134 @@
+# -*- coding: UTF-8 -*-
+# cython: c_string_type=unicode, c_string_encoding=utf8
+
+from cython.operator cimport dereference as deref
+
+from utils cimport _bstring
+
+
+cdef class LinearAssembler:
+
+    def __cinit__(self, graph, stop_filter=None):
+        self._graph_ptr = get_hashgraph_ptr(graph)
+        if self._graph_ptr == NULL:
+            raise ValueError('Must take an object with Hashgraph *')
+        self.graph = graph
+        self.set_stop_filter(stop_filter=stop_filter)
+        
+        if type(self) is LinearAssembler:
+            self._this.reset(new CpLinearAssembler(self._graph_ptr))
+
+    def set_stop_filter(self, stop_filter=None):
+        self.stop_filter = stop_filter
+        if stop_filter is not None:
+            self._stop_filter_ptr = get_hashgraph_ptr(stop_filter)
+            if self._stop_filter_ptr == NULL:
+                raise ValueError('Must take an object with Hashgraph *')
+        else:
+            self._stop_filter_ptr = NULL
+
+    cdef str _assemble(self, Kmer kmer):
+        if self.stop_filter is None:
+            return deref(self._this).assemble(deref(kmer._this))
+        else:
+            return deref(self._this).assemble(deref(kmer._this), self._stop_filter_ptr)
+
+    def assemble(self, seed):
+        if isinstance(seed, Kmer):
+            return self._assemble(seed)
+        else:
+            return self._assemble(Kmer(str(seed)))
+
+
+    cdef str _assemble_left(self, Kmer kmer):
+        if self.stop_filter is None:
+            return deref(self._this).assemble_left(deref(kmer._this))
+        else:
+            return deref(self._this).assemble_left(deref(kmer._this), self._stop_filter_ptr)
+
+    def assemble_left(self, seed):
+        if isinstance(seed, Kmer):
+            return self._assemble_left(seed)
+        else:
+            return self._assemble_left(Kmer(str(seed)))
+
+
+    cdef str _assemble_right(self, Kmer kmer):
+        if self.stop_filter is None:
+            return deref(self._this).assemble_right(deref(kmer._this))
+        else:
+            return deref(self._this).assemble_right(deref(kmer._this), self._stop_filter_ptr)
+
+    def assemble_right(self, seed):
+        if isinstance(seed, Kmer):
+            return self._assemble_right(seed)
+        else:
+            return self._assemble_right(Kmer(str(seed)))
+
+
+cdef class SimpleLabeledAssembler:
+
+    def __cinit__(self, labels, stop_filter=None):
+        self._label_ptr = get_labelhash_ptr(labels)
+        self.labels = labels
+        self.set_stop_filter(stop_filter=stop_filter)
+        
+        if type(self) is SimpleLabeledAssembler:
+            self._this.reset(new CpSimpleLabeledAssembler(self._label_ptr))
+
+    def set_stop_filter(self, stop_filter=None):
+        self.stop_filter = stop_filter
+        if stop_filter is not None:
+            self._stop_filter_ptr = get_hashgraph_ptr(stop_filter)
+            if self._stop_filter_ptr == NULL:
+                raise ValueError('Must take an object with Hashgraph *')
+        else:
+            self._stop_filter_ptr = NULL
+
+    cdef vector[string] _assemble(self, Kmer kmer):
+        if self.stop_filter is None:
+            return deref(self._this).assemble(deref(kmer._this))
+        else:
+            return deref(self._this).assemble(deref(kmer._this), self._stop_filter_ptr)
+
+    def assemble(self, seed):
+        if isinstance(seed, Kmer):
+            return self._assemble(seed)
+        else:
+            return self._assemble(Kmer(str(seed)))
+
+cdef class JunctionCountAssembler:
+
+    def __cinit__(self, graph, stop_filter=None):
+        self._graph_ptr = get_hashgraph_ptr(graph)
+        if self._graph_ptr == NULL:
+            raise ValueError('Must take an object with Hashgraph *')
+        self.graph = graph
+        self.set_stop_filter(stop_filter=stop_filter)
+        
+        if type(self) is JunctionCountAssembler:
+            self._this.reset(new CpJunctionCountAssembler(self._graph_ptr))
+
+    def set_stop_filter(self, stop_filter=None):
+        self.stop_filter = stop_filter
+        if stop_filter is not None:
+            self._stop_filter_ptr = get_hashgraph_ptr(stop_filter)
+            if self._stop_filter_ptr == NULL:
+                raise ValueError('Must take an object with Hashgraph *')
+        else:
+            self._stop_filter_ptr = NULL
+
+    cdef vector[string] _assemble(self, Kmer kmer):
+        if self.stop_filter is None:
+            return deref(self._this).assemble(deref(kmer._this))
+        else:
+            return deref(self._this).assemble(deref(kmer._this), self._stop_filter_ptr)
+
+    def consume(self, sequence):
+        return deref(self._this).consume(_bstring(sequence))
+
+    def assemble(self, seed):
+        if isinstance(seed, Kmer):
+            return self._assemble(seed)
+        else:
+            return self._assemble(Kmer(str(seed)))
diff --git a/khmer/_oxli/graphs.pxd b/khmer/_oxli/graphs.pxd
new file mode 100644
index 0000000..0b7f49b
--- /dev/null
+++ b/khmer/_oxli/graphs.pxd
@@ -0,0 +1,182 @@
+from libcpp cimport bool
+from libcpp.string cimport string
+from libcpp.vector cimport vector
+from libcpp.set cimport set
+from libcpp.memory cimport unique_ptr
+from libc.stdint cimport uint8_t, uint32_t, uint64_t, uintptr_t 
+
+from oxli_types cimport *
+from hashing cimport CpKmer, KmerSet
+from parsing cimport CpReadParser, CpSequence
+
+# All we really need are the PyObject struct definitions
+# for our extension objects.
+cdef extern from "khmer/_cpy_khmer.hh":
+
+    ctypedef struct CPyHashtable_Object "khmer::khmer_KHashtable_Object":
+        CpHashtable * hashtable
+
+    ctypedef struct CPyHashgraph_Object "khmer::khmer_KHashgraph_Object":
+        CPyHashtable_Object khashtable
+        CpHashgraph * hashgraph
+
+    ctypedef struct CPyNodegraph_Object "khmer::khmer_KNodegraph_Object":
+        CPyHashgraph_Object khashgraph
+        CpNodegraph * nodegraph
+
+    ctypedef struct CPyCountgraph_Object "khmer::khmer_KCountgraph_Object":
+        CPyHashgraph_Object khashgraph
+        CpCountgraph * countgraph
+
+    ctypedef struct CPyGraphLabels_Object "khmer::khmer_KGraphLabels_Object":
+        CpLabelHash * labelhash
+
+
+cdef extern from "oxli/hashtable.hh" namespace "oxli":
+    cdef cppclass CpHashtable "oxli::Hashtable":
+        const WordLength ksize() const
+        HashIntoType hash_dna(const char *) const
+        HashIntoType hash_dna_top_strand(const char *) const
+        HashIntoType hash_dna_bottom_strand(const char *) const
+        string unhash_dna(HashIntoType) const
+        void count(const char *)
+        void count(HashIntoType)
+        bool add(const char *)
+        bool add(HashIntoType)
+        const BoundedCounterType get_count(const char *) const
+        const BoundedCounterType get_count(HashIntoType) const
+        void save(string)
+        void load(string)
+        uint32_t consume_string(const string &)
+        bool check_and_normalize_read(string &) const
+        uint32_t check_and_process_read(string &, bool &)
+        void consume_seqfile[SeqIO](const string &, uint32_t &, uint64_t &)
+        void consume_seqfile[SeqIO](unique_ptr[CpReadParser[SeqIO]]&, 
+                                    uint32_t &, uint64_t &)
+        void set_use_bigcount(bool)
+        bool get_use_bigcount()
+        bool median_at_least(const string &, uint32_t cutoff)
+        void get_median_count(const string &, BoundedCounterType &,
+                              float &, float &)
+        const uint64_t n_unique_kmers() const
+        const uint64_t n_occupied() const
+        vector[uint64_t] get_tablesizes() const
+        const uintptr_t n_tables() const
+        void get_kmers(const string &, vector[string] &)
+        void get_kmer_hashes(const string &, vector[HashIntoType] &) const
+        void get_kmer_hashes_as_hashset(const string &, 
+                                        set[HashIntoType]) const
+        void get_kmer_counts(const string &, 
+                             vector[BoundedCounterType] &) const
+        uint8_t ** get_raw_tables()
+        BoundedCounterType get_min_count(const string &)
+        BoundedCounterType get_max_count(const string &)
+        uint64_t * abundance_distribution[SeqIO](unique_ptr[CpReadParser[SeqIO]]&, 
+                                          CpHashtable *)
+        uint64_t * abundance_distribution[SeqIO](string, CpHashtable *)
+        uint64_t trim_on_abundance(string, BoundedCounterType) const
+        uint64_t trim_below_abundance(string, BoundedCounterType) const
+        vector[uint32_t] find_spectral_error_positions(string, 
+                                                       BoundedCounterType)
+
+    cdef cppclass CpCounttable "oxli::Counttable" (CpHashtable):
+        CpCounttable(WordLength, vector[uint64_t])
+
+    cdef cppclass CpNodetable "oxli::Nodetable" (CpHashtable):
+        CpNodetable(WordLength, vector[uint64_t])
+
+
+cdef extern from "oxli/hashgraph.hh" namespace "oxli":
+    cdef cppclass CpHashgraph "oxli::Hashgraph" (CpHashtable):
+        void _set_tag_density(unsigned int)
+        unsigned int _get_tag_density() const
+        void add_tag(HashIntoType)
+        void add_stop_tag(HashIntoType)
+        uintptr_t n_tags() const
+        void divide_tags_into_subsets(unsigned int, set[HashIntoType] &)
+        void add_kmer_to_tags(HashIntoType)
+        void clear_tags()
+        void consume_seqfile_and_tag[SeqIO](unique_ptr[CpReadParser[SeqIO]]&, 
+                                   unsigned int &, 
+                                   unsigned long long)
+        void consume_seqfile_and_tag[SeqIO](const string &,
+                                   unsigned int &,
+                                   unsigned long long &)
+        void consume_sequence_and_tag(const string &,
+                                      unsigned long long &,
+                                      set[HashIntoType] &)
+        void consume_partitioned_fasta[SeqIO](const string &,
+                                       unsigned int &,
+                                       unsigned long long &)
+        uintptr_t trim_on_stoptags(string) const
+        unsigned int traverse_from_kmer(CpKmer, 
+                                        uint32_t, 
+                                        KmerSet&, 
+                                        uint32_t) const
+        void print_tagset(string)
+        void save_tagset(string)
+        void load_tagset(string)
+        void print_stop_tags(string)
+        void save_stop_tags(string)
+        void load_stop_tags(string)
+        void load_stop_tags(string, bool)
+        void extract_unique_paths(string, uint32_t, float, vector[string])
+        void calc_connected_graph_size(CpKmer, uint64_t&, KmerSet&,
+                                       const uint64_t, bool) const
+        uint32_t kmer_degree(HashIntoType, HashIntoType)
+        uint32_t kmer_degree(const char *)
+        void find_high_degree_nodes(const char *, set[HashIntoType] &) const
+        unsigned int traverse_linear_path(const CpKmer,
+                                          set[HashIntoType] &,
+                                          set[HashIntoType] &,
+                                          CpHashtable &,
+                                          set[HashIntoType] &) const
+        void _validate_pmap()
+
+    cdef cppclass CpCountgraph "oxli::Countgraph" (CpHashgraph):
+        CpCountgraph(WordLength, vector[uint64_t])
+
+    cdef cppclass CpNodegraph "oxli::Nodegraph" (CpHashgraph):
+        CpNodegraph(WordLength, vector[uint64_t])
+
+
+cdef extern from "oxli/labelhash.hh" namespace "oxli":
+    cdef cppclass CpLabelHash "oxli::LabelHash":
+        CpLabelHash(CpHashgraph *)
+        uintptr_t n_labels() const
+        void consume_seqfile_and_tag_with_labels[SeqIO](const string &,
+                                               uint32_t &,
+                                               uint64_t &,
+                                               CallbackFn,
+                                               void *)
+        void consume_seqfile_and_tag_with_labels[SeqIO](const string &,
+                                               uint32_t &,
+                                               uint64_t &)
+        void consume_seqfile_and_tag_with_labels[SeqIO](
+                               unique_ptr[CpReadParser[SeqIO]]&,
+                               uint32_t &,
+                               uint64_t &,
+                               CallbackFn,
+                               void *)
+        void consume_seqfile_and_tag_with_labels[SeqIO](
+                               unique_ptr[CpReadParser[SeqIO]]&,
+                               uint32_t &,
+                               uint64_t &)
+        void get_tag_labels(const HashIntoType, LabelSet &)
+        void get_tags_from_label(const Label,
+                                  TagSet&)
+        void link_tag_and_label(const HashIntoType, const Label)
+        uint32_t sweep_label_neighborhood(const string &,
+                                           LabelSet &,
+                                           uint32_t,
+                                           bool,
+                                           bool)
+        void save_labels_and_tags(string)
+        void load_labels_and_tags(string)
+        void label_across_high_degree_nodes(const char *,
+                                             set[HashIntoType] &,
+                                             const Label)
+
+cdef CpHashgraph * get_hashgraph_ptr(object graph)
+cdef CpLabelHash * get_labelhash_ptr(object graph)
+
diff --git a/khmer/_oxli/graphs.pyx b/khmer/_oxli/graphs.pyx
new file mode 100644
index 0000000..2d3b02c
--- /dev/null
+++ b/khmer/_oxli/graphs.pyx
@@ -0,0 +1,20 @@
+# cython: c_string_type=unicode, c_string_encoding=utf8
+from cython.operator cimport dereference as deref
+
+from .._khmer import Countgraph, Nodegraph, GraphLabels 
+
+
+cdef CpHashgraph * get_hashgraph_ptr(object graph):
+    if not (isinstance(graph, Countgraph) or isinstance(graph, Nodegraph)):
+        return NULL
+    
+    cdef CPyHashgraph_Object* ptr = <CPyHashgraph_Object*> graph
+    return deref(ptr).hashgraph
+    
+
+cdef CpLabelHash * get_labelhash_ptr(object labels):
+    if not isinstance(labels, GraphLabels):
+        return NULL
+    
+    cdef CPyGraphLabels_Object * ptr = <CPyGraphLabels_Object*> labels
+    return deref(ptr).labelhash
diff --git a/khmer/_oxli/hashing.pxd b/khmer/_oxli/hashing.pxd
new file mode 100644
index 0000000..092d704
--- /dev/null
+++ b/khmer/_oxli/hashing.pxd
@@ -0,0 +1,67 @@
+from libcpp cimport bool
+from libcpp.memory cimport shared_ptr
+from libcpp.queue cimport queue
+from libcpp.set cimport set
+from libcpp.string cimport string
+
+from oxli_types cimport *
+
+cdef extern from "oxli/kmer_hash.hh" namespace "oxli":
+    cdef cppclass CpKmer "oxli::Kmer":
+        HashIntoType kmer_f
+        HashIntoType kmer_r
+        HashIntoType kmer_u
+
+        CpKmer(HashIntoType, HashIntoType, HashIntoType)
+        CpKmer(string, WordLength)
+        CpKmer(const CpKmer&)
+        CpKmer()
+
+        bool is_forward() const
+        void set_from_unique_hash(HashIntoType, WordLength)
+
+    cdef cppclass CpKmerFactory "oxli::KmerFactory":
+        KmerFactory(WordLength)
+
+        CpKmer build_kmer(HashIntoType) const
+        CpKmer build_kmer(HashIntoType, HashIntoType) const
+        CpKmer build_kmer(string &) const
+        CpKmer build_kmer(const char *) const
+
+    cdef cppclass CpKmerIterator "oxli::KmerIterator" (CpKmerFactory):
+        CpKmerIterator(const char *, unsigned char)
+        CpKmer first(HashIntoType &, HashIntoType &)
+        CpKmer next(HashIntoType &, HashIntoType &)
+        CpKmer first()
+        CpKmer next()
+        bool done()
+        unsigned int get_start_pos() const
+        unsigned int get_end_pos() const
+
+    HashIntoType _hash(const string, const WordLength)
+    HashIntoType _hash(const string, const WordLength, 
+                       HashIntoType &, HashIntoType &)
+    HashIntoType _hash(const char *, const WordLength)
+    HashIntoType _hash(const char *, const WordLength,
+                       HashIntoType &, HashIntoType &)
+    HashIntoType _hash_forward(const char *, WordLength)
+    string _revhash(HashIntoType, WordLength)
+    string _revcomp(const string&)
+    HashIntoType _hash_murmur(const string&, const WordLength)
+    HashIntoType _hash_murmur(const string&,
+                              HashIntoType&, HashIntoType&)
+    HashIntoType _hash_murmur_forward(const string&)
+
+
+cdef extern from "oxli/oxli.hh" namespace "oxli":
+    ctypedef queue[CpKmer] KmerQueue
+    ctypedef set[CpKmer] KmerSet
+    ctypedef bool (*KmerFilter) (CpKmer kmer)
+
+
+cdef class Kmer:
+    cdef shared_ptr[CpKmer] _this
+    cdef readonly str kmer
+
+    @staticmethod
+    cdef Kmer wrap(CpKmer * cpkmer, WordLength K)
diff --git a/khmer/_oxli/hashing.pyx b/khmer/_oxli/hashing.pyx
new file mode 100644
index 0000000..c0ef69d
--- /dev/null
+++ b/khmer/_oxli/hashing.pyx
@@ -0,0 +1,66 @@
+# -*- coding: UTF-8 -*-
+# cython: c_string_type=unicode, c_string_encoding=utf8
+
+from libcpp.string cimport string
+from libcpp.memory cimport make_shared
+from libc.stdint cimport uint64_t
+from cython.operator cimport dereference as deref
+
+from oxli_types cimport *
+
+cdef class Kmer:
+
+    def __cinit__(self, str kmer=None):
+        self.kmer = kmer
+        if self.kmer is not None:
+            self._this.reset(new CpKmer(kmer.encode('utf-8'), len(kmer)))
+        else:
+            self._this.reset(new CpKmer())
+
+    def __len__(self):
+        return len(self.kmer)
+
+    def __str__(self):
+        return self.kmer
+
+    def __hash__(self):
+        return self.kmer_u
+
+    def __repr__(self):
+        return self.kmer
+
+    @property
+    def kmer_f(self):
+        return deref(self._this).kmer_f
+
+    @property
+    def kmer_r(self):
+        return deref(self._this).kmer_r
+
+    @property
+    def kmer_u(self):
+        return deref(self._this).kmer_u
+
+    def reverse_complement(self):
+        cdef HashIntoType tmp = deref(self._this).kmer_f
+        deref(self._this).kmer_f = deref(self._this).kmer_r
+        deref(self._this).kmer_r = tmp
+        self.kmer = _revcomp(self.kmer.encode('utf-8'))
+
+    @property
+    def is_forward(self):
+        return deref(self._this).is_forward()
+
+    @staticmethod
+    cdef Kmer wrap(CpKmer * cpkmer, WordLength K):
+        cdef Kmer kmer = Kmer()
+        kmer._this.reset(cpkmer)
+        kmer.kmer = _revhash(kmer.kmer_u, K)
+        return kmer
+
+    @staticmethod
+    def create(HashIntoType tag, WordLength K):
+        cdef Kmer kmer = Kmer()
+        deref(kmer._this).set_from_unique_hash(tag, K)
+        kmer.kmer = _revhash(kmer.kmer_u, K)
+        return kmer
diff --git a/khmer/_oxli/hllcounter.pxd b/khmer/_oxli/hllcounter.pxd
new file mode 100644
index 0000000..d3a8a29
--- /dev/null
+++ b/khmer/_oxli/hllcounter.pxd
@@ -0,0 +1,38 @@
+from libcpp cimport bool
+from libcpp.memory cimport unique_ptr
+from libcpp.sting cimport string
+from libcpp.vector cimport vector
+from libc.stdint cimport uint64_t
+
+from oxli_types cimport *
+from parsing cimport CpReadParser
+
+cdef extern from "oxli/hllcounter.hh" namespace "oxli":
+    cdef cppclass CpHLLCounter "oxli::HLLCounter":
+        CpHLLCounter(double, WordLength)
+        CpHLLCounter(int, WordLength)
+
+        void add(const string &)
+        unsigned int consume_string(const string &)
+        void consume_seqfile[SeqIO](const string &,
+                                    bool,
+                                    unsigned int &,
+                                    unsigned long long &)
+
+        void consume_seqfile[SeqIO](unique_ptr[CpReadParser[SeqIO]]&,
+                                    bool,
+                                    unsigned int &,
+                                    unsigned long long &)
+        unsigned int check_and_process_read(string &, bool &)
+        bool check_and_normalize_read(string &) const
+        uint64_t estimate_cardinality()
+        void merge(CpHLLCounter &)
+        double get_alpha()
+        int get_p()
+        int get_m()
+        void set_ksize(WordLegth)
+        int get_ksize()
+        vector[int] get_M()
+        double get_erate()
+        void set_erate(double)
+
diff --git a/khmer/_oxli/oxli_types.pxd b/khmer/_oxli/oxli_types.pxd
new file mode 100644
index 0000000..bbff596
--- /dev/null
+++ b/khmer/_oxli/oxli_types.pxd
@@ -0,0 +1,19 @@
+from libcpp cimport bool
+from libcpp.set cimport set
+from libcpp.string cimport string
+
+
+cdef extern from "oxli/oxli.hh" namespace "oxli":
+
+    ctypedef unsigned long long int HashIntoType
+    ctypedef set[HashIntoType] HashIntoTypeSet
+    ctypedef unsigned char WordLength
+    ctypedef unsigned short int BoundedCounterType
+
+    ctypedef unsigned long long int Label
+    ctypedef set[Label] LabelSet
+    ctypedef set[HashIntoType] TagSet
+
+    ctypedef void (*CallbackFn)(const char *, void *, uint64_t, uint64_t)
+
+
diff --git a/khmer/_oxli/parsing.pxd b/khmer/_oxli/parsing.pxd
new file mode 100644
index 0000000..fe02565
--- /dev/null
+++ b/khmer/_oxli/parsing.pxd
@@ -0,0 +1,164 @@
+# -*- coding: UTF-8 -*-
+# cython: c_string_type=unicode, c_string_encoding=utf8
+
+from __future__ import unicode_literals
+
+from libc.stdint cimport uintptr_t 
+
+from libcpp cimport bool
+from libcpp.memory cimport unique_ptr
+from libcpp.utility cimport pair
+from libcpp.string cimport string
+
+#from .wrapper cimport *
+
+'''
+extern declarations for liboxli.
+'''
+
+# C++ ostream wrapper code stolen shamelessly from stackoverflow
+# http://stackoverflow.com/questions/30984078/cython-working-with-c-streams
+# We need ostream to wrap ReadParser
+cdef extern from "<iostream>" namespace "std":
+    cdef cppclass ostream:
+        ostream& write(const char*, int) except +
+
+# obviously std::ios_base isn't a namespace, but this lets
+# Cython generate the connect C++ code
+cdef extern from "<iostream>" namespace "std::ios_base":
+    cdef cppclass open_mode:
+        pass
+    cdef open_mode binary
+    # you can define other constants as needed
+
+
+cdef extern from "<fstream>" namespace "std":
+    cdef cppclass ofstream(ostream):
+        # constructors
+        ofstream(const char*) except +
+        ofstream(const char*, open_mode) except+
+
+
+cdef extern from  "oxli/read_parsers.hh" namespace "oxli::read_parsers":
+    cdef cppclass CpSequence "oxli::read_parsers::Read":
+        string name
+        string description
+        string sequence
+        string quality
+        string cleaned_seq
+
+        void reset()
+        void write_fastx(ostream&)
+        void set_cleaned_seq()        
+
+    ctypedef pair[CpSequence,CpSequence] CpSequencePair \
+        "oxli::read_parsers::ReadPair"
+
+    cdef cppclass CpReadParser "oxli::read_parsers::ReadParser" [SeqIO]:
+        CpReadParser(unique_ptr[SeqIO])
+        CpReadParser(CpReadParser&)
+
+        CpSequence get_next_read()
+        CpSequencePair get_next_read_pair()
+        CpSequencePair get_next_read_pair(uint8_t)
+
+        uintptr_t get_num_reads()
+        bool is_complete()
+        void close()
+
+    cdef cppclass CpFastxReader "oxli::read_parsers::FastxReader":
+        CpFastxReader()
+        CpFastxReader(const string&)
+        CpFastxReader(CpFastxReader&)
+
+        CpSequence get_next_read()
+        bool is_complete()
+        uintptr_t get_num_reads()
+        void close()
+
+    unique_ptr[CpReadParser[SeqIO]] get_parser[SeqIO](const string&) 
+    ctypedef unique_ptr[CpReadParser[CpFastxReader]] FastxParserPtr
+
+
+cdef extern from "oxli/alphabets.hh" namespace "oxli":
+    cdef string DNA_SIMPLE "oxli::alphabets::DNA_SIMPLE"
+    cdef string DNAN_SIMPLE "oxli::alphabets::DNAN_SIMPLE"
+    cdef string RNA_SIMPLE "oxli::alphabets::RNA_SIMPLE"
+    cdef string RNAN_SIMPLE "oxli::alphabets::RNAN_SIMPLE"
+    cdef string IUPAC_NUCL "oxli::alphabets::IUPAC_NUCL"
+    cdef string IUPAC_AA "oxli::alphabets::IUPAC_AA"
+
+'''
+Extension Classes wrapping liboxli.
+'''
+
+cdef class Alphabets:
+
+    @staticmethod
+    cdef string _get(string name)
+
+
+cdef class Sequence:
+    cdef CpSequence _obj
+
+    @staticmethod
+    cdef Sequence _wrap(CpSequence cseq)
+
+
+cdef class ReadBundle:
+    cdef list reads
+
+
+cdef class FastxParser:
+    cdef unique_ptr[CpReadParser[CpFastxReader]] _this
+
+    cpdef bool is_complete(self)
+    cdef Sequence _next(self)
+
+
+cdef class SanitizedFastxParser(FastxParser):
+    cdef readonly int n_bad
+    cdef readonly string _alphabet
+    cdef bool convert_n
+
+    cpdef bool is_complete(self)
+    cdef Sequence _next(self)
+
+
+cdef class SplitPairedReader:
+
+    cdef FastxParser left_parser
+    cdef FastxParser right_parser
+    cdef readonly int min_length
+    cdef readonly bool force_name_match
+
+    cdef tuple _next(self)
+
+
+cdef class BrokenPairedReader:
+
+    cdef FastxParser parser
+    cdef readonly int min_length
+    cdef readonly bool force_single
+    cdef readonly bool require_paired
+    cdef readonly Sequence record
+
+    cdef tuple _next(self)
+
+
+cpdef tuple _split_left_right(unicode s)
+
+cdef tuple _cppstring_split_left_right(string& s)
+
+cdef int _check_is_pair(Sequence first, Sequence second)
+
+cpdef bool check_is_left(s)
+
+cpdef bool check_is_right(s)
+
+cdef inline bool is_valid(const char base, string& alphabet)
+
+cdef inline bool sanitize_sequence(string& sequence,
+                                   string& alphabet,
+                                   bool convert_n)
+
diff --git a/khmer/_oxli/parsing.pyx b/khmer/_oxli/parsing.pyx
new file mode 100644
index 0000000..4936761
--- /dev/null
+++ b/khmer/_oxli/parsing.pyx
@@ -0,0 +1,532 @@
+# -*- coding: UTF-8 -*-
+# cython: c_string_type=unicode, c_string_encoding=utf8
+
+from __future__ import print_function
+from __future__ import unicode_literals
+
+from cython.operator cimport dereference as deref
+cimport cython
+from libcpp cimport bool
+from libcpp.string cimport string
+
+import sys
+
+from .utils cimport _bstring, _ustring
+
+
+cdef class Alphabets:
+    
+    @staticmethod
+    def get(name):
+        cdef unicode alphabet = _ustring(Alphabets._get(_bstring(name)))
+        if not alphabet:
+            raise ValueError('No alphabet with name {0}'.format(name))
+        return alphabet
+
+    @staticmethod
+    cdef string _get(string name):
+        if name == b'DNA_SIMPLE':
+            return DNA_SIMPLE
+        elif name == b'DNAN_SIMPLE':
+            return DNAN_SIMPLE
+        elif name == b'RNA_SIMPLE':
+            return RNA_SIMPLE
+        elif name == b'RNAN_SIMPLE':
+            return RNAN_SIMPLE
+        elif name == b'IUPAC_NUCL':
+            return IUPAC_NUCL
+        elif name == b'IUPAC_AA':
+            return IUPAC_AA
+        else:
+            return string()
+
+
+ at cython.freelist(100)
+cdef class Sequence:
+
+    def __cinit__(self, name=None, sequence=None,
+                        quality=None, description=None,
+                        cleaned_seq=None):
+
+        if name is not None and sequence is not None:
+            self._obj.sequence = _bstring(sequence)
+            self._obj.name = _bstring(name)
+            if description is not None:
+                self._obj.description = _bstring(description)
+            if quality is not None:
+                self._obj.quality = _bstring(quality)
+            if cleaned_seq is not None:
+                self._obj.cleaned_seq = _bstring(cleaned_seq)
+            else:
+                self._obj.cleaned_seq = self._obj.sequence
+
+    def __str__(self):
+        return repr(self)
+
+    def __repr__(self):
+        return 'Sequence(name="{0}", sequence="{1}")'.format(self.name, self.sequence)
+
+    def __len__(self):
+        return self._obj.sequence.length()
+
+    def __richcmp__(x, y, op):
+        if op == 2:
+            return x.name == y.name and x.sequence == y.sequence
+        else:
+            raise NotImplementedError('Operator not available')
+
+    def kmers(self, int K):
+        cdef int i = 0
+        cdef unicode sequence = self.sequence
+        for i in range(0, len(self)-K+1):
+            yield sequence[i:i+K]
+
+    def __getitem__(self, x):
+        # Definitely optimize this.
+        return self.sequence[x]
+
+    @property
+    def name(self):
+        cdef unicode name = self._obj.name
+        return self._obj.name if name else None
+
+    @property
+    def sequence(self):
+        cdef unicode sequence = self._obj.sequence
+        return self._obj.sequence if sequence else None
+
+    @property
+    def description(self):
+        cdef unicode description = self._obj.description
+        return description if description else None
+
+    @property
+    def quality(self):
+        cdef unicode quality = self._obj.quality
+        return quality if quality else None
+
+    @property
+    def cleaned_seq(self):
+        cdef unicode cleaned_seq = self._obj.cleaned_seq
+        return cleaned_seq if cleaned_seq else None
+
+    @staticmethod
+    def from_screed_record(record):
+        cdef Sequence seq = Sequence(name=record.name,
+                                     sequence=record.sequence)
+        if hasattr(record, 'quality'):
+            seq._obj.quality = _bstring(record.quality)
+
+        for attr in ('annotations', 'description'):
+            if hasattr(record, attr):
+                seq._obj.description = _bstring(getattr(record, attr))
+
+        return seq
+
+    @staticmethod
+    cdef Sequence _wrap(CpSequence cseq):
+        cdef Sequence seq = Sequence()
+        seq._obj = cseq
+        return seq
+
+
+cdef class ReadBundle:
+
+    def __cinit__(self, *raw_records):
+        self.reads = [r for r in raw_records if r]
+
+    @property
+    def num_reads(self):
+        return len(self.reads)
+
+    @property
+    def total_length(self):
+        return sum([len(r.sequence) for r in self.reads])
+
+
+def print_error(msg):
+    """Print the given message to 'stderr'."""
+
+    print(msg, file=sys.stderr)
+
+
+class UnpairedReadsError(ValueError):
+    """ValueError with refs to the read pair in question."""
+
+    def __init__(self, msg, r1, r2):
+        r1_name = "<no read>"
+        r2_name = "<no read>"
+        if r1:
+            r1_name = r1.name
+        if r2:
+            r2_name = r2.name
+
+        msg = msg + '\n"{0}"\n"{1}"'.format(r1_name, r2_name)
+        ValueError.__init__(self, msg)
+        self.read1 = r1
+        self.read2 = r2
+
+
+cdef inline bool is_valid(const char base, string& alphabet):
+    cdef char b
+    for b in alphabet:
+        if b == base:
+            return True
+    return False
+
+
+cdef inline bool sanitize_sequence(string& sequence,
+                                   string& alphabet,
+                                   bool convert_n):
+    cdef int i = 0
+    for i in range(sequence.length()):
+        sequence[i] &= 0xdf
+        if not is_valid(sequence[i], alphabet):
+            return False
+        if convert_n and sequence[i] == b'N':
+            sequence[i] = b'A'
+    return True
+
+
+cdef class FastxParser:
+
+    def __cinit__(self, filename, *args, **kwargs):
+        self._this = get_parser[CpFastxReader](_bstring(filename))
+
+    cdef Sequence _next(self):
+        if not self.is_complete():
+            return Sequence._wrap(deref(self._this).get_next_read())
+        else:
+            return None
+
+    cpdef bool is_complete(self):
+        return deref(self._this).is_complete()
+
+    def __iter__(self):
+        cdef Sequence seq
+        while not self.is_complete():
+            seq = self._next()
+            yield seq
+
+
+cdef class SanitizedFastxParser(FastxParser):
+
+    def __cinit__(self, filename, alphabet='DNAN_SIMPLE',
+                        bool convert_n=True):
+        self.n_bad = 0
+        self.convert_n = convert_n
+        self._alphabet = Alphabets._get(_bstring(alphabet))
+
+    cdef Sequence _next(self):
+        cdef Sequence seq
+        cdef bool good
+
+        if not self.is_complete():
+            seq = FastxParser._next(self)
+            good = sanitize_sequence(seq._obj.sequence,
+                                     self._alphabet,
+                                     self.convert_n)
+            if not good:
+                self.n_bad += 1
+                return None
+            else:
+                return seq
+        else:
+            return None
+
+    def __iter__(self):
+        cdef Sequence seq
+        while not self.is_complete():
+            seq = self._next()
+            if seq is not None:
+                yield seq
+
+
+cdef class SplitPairedReader:
+
+    def __cinit__(self, FastxParser left_parser,
+                         FastxParser right_parser,
+                         int min_length=-1,
+                         bool force_name_match=False):
+
+        self.left_parser = left_parser
+        self.right_parser = right_parser
+        self.min_length = min_length
+        self.force_name_match = force_name_match
+
+    def __iter__(self):
+        cdef Sequence first, second
+        cdef object err
+        cdef read_num = 0
+        cdef int found
+
+        found, first, second, err = self._next()
+        while found != 0:
+            if err is not None:
+                raise err
+            
+            if self.min_length > 0:
+                if len(first) >= self.min_length and \
+                   len(second) >= self.min_length:
+
+                    yield read_num, True, first, second
+            else:
+                yield read_num, True, first, second
+
+            read_num += found
+            found, first, second, err = self._next()
+
+    cdef tuple _next(self):
+        cdef Sequence first = self.left_parser._next()
+        cdef bool first_complete = self.left_parser.is_complete()
+
+        cdef Sequence second = self.right_parser._next()
+        cdef bool second_complete = self.right_parser.is_complete()
+        
+
+        if first_complete is not second_complete:
+            err = UnpairedReadsError('Differing lengths of left '\
+                                     'and right files!')
+            return -1, None, None, err
+
+        if first_complete:
+            return 0, None, None, None
+
+        if first is None or second is None:
+            return 1, first, second, None
+
+        if self.force_name_match:
+            if _check_is_pair(first, second):
+                return 2, first, second, None
+            else:
+                err =  UnpairedReadsError('', first, second)
+                return -1, None, None, err
+        else:
+            return 2, first, second, None
+
+
+cdef class BrokenPairedReader:
+
+    def __cinit__(self, FastxParser parser, 
+                  int min_length=-1,
+                  bool force_single=False, 
+                  bool require_paired=False):
+        
+        if force_single and require_paired:
+            raise ValueError("force_single and require_paired cannot both be set!")
+
+        self.parser = parser
+        self.min_length = min_length
+        self.force_single = force_single
+        self.require_paired = require_paired
+
+        self.record = None
+
+    def __iter__(self):
+        cdef Sequence first
+        cdef Sequence second
+        cdef object err
+        cdef int found
+        cdef int read_num = 0
+
+        found, first, second, err = self._next()
+        while (found != 0):
+            if err is not None:
+                raise err
+
+            if self.min_length > 0:
+                if first is not None and len(first) < self.min_length:
+                    first = None
+                    found -= 1
+                if second is not None and len(second) < self.min_length:
+                    second = None
+                    found -= 1
+
+            if self.force_single:
+                if first is not None:
+                    yield read_num, found == 2, first, None
+                    read_num += found
+                if second is not None:
+                    yield read_num, found == 2, second, None
+                    read_num += found
+            elif self.require_paired:
+                if first is not None and second is not None:
+                    yield read_num, found == 2, first, second
+                    read_num += found
+            else:
+                if first is not None or second is not None:
+                    yield read_num, found == 2, first, second
+                    read_num += found
+            found, first, second, err = self._next()
+
+    cdef tuple _next(self):
+        cdef Sequence first, second
+        cdef int is_pair
+
+        if self.record is None:
+            first = self.parser._next()
+            if first is None:
+                if self.parser.is_complete():
+                    return 0, None, None, None
+                else:
+                    if self.require_paired:
+                        err = UnpairedReadsError(
+                            "Uneven number of reads when require_paired is set!",
+                            first)
+                        return -1, None, None, err
+                    return 1, first, None, None
+        else:
+            first = self.record
+        
+        second = self.parser._next()
+        
+        # check if paired
+        if second is not None and first is not None:
+            is_pair = _check_is_pair(first, second)
+            if is_pair == -1:
+                err = ValueError("records must be same type (FASTA or FASTQ)")
+                return -1, None, None, err
+            if is_pair and not self.force_single:
+                self.record = None
+                return 2, first, second, None    # found 2 proper records
+            else:   # orphan.
+                if self.require_paired:
+                    err = UnpairedReadsError(
+                        "Unpaired reads when require_paired is set!",
+                        first, second)
+                    return -1, None, None, err
+                self.record = second
+                return 1, first, None, None
+        elif self.parser.is_complete():
+            # ran out of reads getting second, handle last record
+            if self.require_paired:
+                err =  UnpairedReadsError("Unpaired reads when require_paired "
+                                          "is set!", first, None)
+                return -1, None, None, err
+            self.record = None
+            return 1, first, second, None
+        else: # one read was invalid, but that doesn't mean they were unpaired
+            return 1, first, second, None
+
+
+cpdef tuple _split_left_right(unicode s):
+    cdef string cppstr = s.encode('UTF-8')
+    return _cppstring_split_left_right(cppstr)
+
+
+cdef tuple _cppstring_split_left_right(string& s):
+    """Split record name at the first whitespace and return both parts.
+
+    RHS is set to an empty string if not present.
+    """
+    cdef unsigned int i
+    cdef const char * c_str = s.c_str()
+    cdef unicode lhs, rhs
+    lhs = u''
+    rhs = u''
+    for i in range(len(s)):
+        if lhs == u'':
+            if (c_str[i] == b' ' or c_str[i] == b'\t'):
+                lhs = _ustring(c_str[0:i])
+        else:
+            if c_str[i] != b' ' or c_str[i] != b'\t':
+                rhs = _ustring(c_str[i:len(s)])
+                break
+    lhs = _ustring(c_str[0:len(s)])  if lhs == u'' else lhs
+    return lhs, rhs
+
+
+cdef int _check_is_pair(Sequence first, Sequence second):
+    """Check if the two sequence records belong to the same fragment.
+
+    In an matching pair the records are left and right pairs
+    of each other, respectively.  Returns True or False as appropriate.
+
+    Handles both Casava formats: seq/1 and seq/2, and 'seq::... 1::...'
+    and 'seq::... 2::...'.
+
+    Also handles the default format of the SRA toolkit's fastq-dump:
+    'Accession seq/1'
+    """
+    if first.quality is None or second.quality is None:
+        if first.quality is not second.quality:
+            return -1
+
+    cdef unicode lhs1, rhs1, lhs2, rhs2
+    lhs1, rhs1 = _cppstring_split_left_right(first._obj.name)
+    lhs2, rhs2 = _cppstring_split_left_right(second._obj.name)
+
+    # handle 'name/1'
+    cdef unicode subpart1, subpart2
+    if lhs1.endswith('/1') and lhs2.endswith('/2'):
+        subpart1 = lhs1.split('/', 1)[0]
+        subpart2 = lhs2.split('/', 1)[0]
+
+        if subpart1 and subpart1 == subpart2:
+            return 1
+
+    # handle '@name 1:rst'
+    elif lhs1 == lhs2 and rhs1.startswith('1:') and rhs2.startswith('2:'):
+        return 1
+
+    # handle @name seq/1
+    elif lhs1 == lhs2 and rhs1.endswith('/1') and rhs2.endswith('/2'):
+        subpart1 = rhs1.split('/', 1)[0]
+        subpart2 = rhs2.split('/', 1)[0]
+
+        if subpart1 and subpart1 == subpart2:
+            return 1
+
+    return 0
+
+
+def check_is_pair(first, second):
+    if type(first) is not Sequence:
+        first = Sequence.from_screed_record(first)
+    if type(second) is not Sequence:
+        second = Sequence.from_screed_record(second)
+    cdef int ret = _check_is_pair(first, second)
+    if ret == -1:
+        raise ValueError("both records must be same type (FASTA or FASTQ)")
+    return ret == 1
+
+
+cpdef bool check_is_left(s):
+    """Check if the name belongs to a 'left' sequence (/1).
+
+    Returns True or False.
+
+    Handles both Casava formats: seq/1 and 'seq::... 1::...'
+    """
+    cdef unicode lhs, rhs
+    lhs, rhs = _split_left_right(_ustring(s))
+    if lhs.endswith('/1'):              # handle 'name/1'
+        return True
+    elif rhs.startswith('1:'):          # handle '@name 1:rst'
+        return True
+
+    elif rhs.endswith('/1'):            # handles '@name seq/1'
+        return True
+
+    return False
+
+
+cpdef bool check_is_right(s):
+    """Check if the name belongs to a 'right' sequence (/2).
+
+    Returns True or False.
+
+    Handles both Casava formats: seq/2 and 'seq::... 2::...'
+    """
+    cdef unicode lhs, rhs
+    lhs, rhs = _split_left_right(_ustring(s))
+    if lhs.endswith('/2'):              # handle 'name/2'
+        return True
+    elif rhs.startswith('2:'):          # handle '@name 2:rst'
+        return True
+
+    elif rhs.endswith('/2'):            # handles '@name seq/2'
+        return True
+
+    return False
+
diff --git a/khmer/_oxli/traversal.pxd b/khmer/_oxli/traversal.pxd
new file mode 100644
index 0000000..7417166
--- /dev/null
+++ b/khmer/_oxli/traversal.pxd
@@ -0,0 +1,19 @@
+from libc.stdint cimport uint32_t
+
+from hashing cimport CpKmer, KmerFilter, KmerQueue
+from graphs cimport CpHashgraph
+
+cdef extern from "oxli/traversal.hh" namespace "oxli":
+    cdef cppclass CpTraverser "oxli::Traverser":
+        CpTraverser(CpHashgraph *)
+
+        void push_filter(KmerFilter)
+        KmerFilter pop_filter()
+    
+        uint32_t traverse(const CpKmer&, KmerQueue&) const
+        uint32_t traverse_left(const CpKmer&, KmerQueue&) const     
+        uint32_t traverse_right(const CpKmer&, KmerQueue&) const
+
+        uint32_t degree(const CpKmer&) const
+        uint32_t degree_left(const CpKmer&) const
+        uint32_t degree_right(const CpKmer&) const
diff --git a/khmer/_oxli/utils.pxd b/khmer/_oxli/utils.pxd
new file mode 100644
index 0000000..885ba81
--- /dev/null
+++ b/khmer/_oxli/utils.pxd
@@ -0,0 +1,14 @@
+# -*- coding: UTF-8 -*-
+# cython: c_string_type=unicode, c_string_encoding=utf8
+from libcpp.vector cimport vector
+from libc.stdint cimport uint32_t, uint64_t
+from libcpp cimport bool
+
+
+cdef extern from "oxli/hashtable.hh" namespace "oxli":
+    cdef bool _is_prime "oxli::is_prime" (uint64_t n)
+    cdef vector[uint64_t] _get_n_primes_near_x "oxli::get_n_primes_near_x" (uint32_t, uint64_t)
+
+cdef bytes _bstring(s)
+
+cdef unicode _ustring(s)
diff --git a/khmer/_oxli/utils.pyx b/khmer/_oxli/utils.pyx
new file mode 100644
index 0000000..ad5439f
--- /dev/null
+++ b/khmer/_oxli/utils.pyx
@@ -0,0 +1,42 @@
+# -*- coding: UTF-8 -*-
+# cython: c_string_type=unicode, c_string_encoding=utf8
+
+from __future__ import unicode_literals
+from cpython.version cimport PY_MAJOR_VERSION
+
+
+def is_prime(n):
+    return _is_prime(n)
+
+
+def get_n_primes_near_x(n_primes, x):
+    primes = _get_n_primes_near_x(n_primes, x)
+    if len(primes) != n_primes:
+        msg = "unable to find {0} prime numbers < {1}".format(n_primes, x)
+        raise RuntimeError(msg)
+    return primes 
+
+
+cdef bytes _bstring(s):
+    if not isinstance(s, (basestring, bytes)):
+        raise TypeError("Requires a string-like sequence")
+
+    if isinstance(s, unicode):
+        s = s.encode('utf-8')
+    return s
+
+
+cdef unicode _ustring(s):
+    if type(s) is unicode:
+        # fast path for most common case(s)
+        return <unicode>s
+    elif PY_MAJOR_VERSION < 3 and isinstance(s, bytes):
+        # only accept byte strings in Python 2.x, not in Py3
+        return (<bytes>s).decode('UTF-8')
+    elif isinstance(s, unicode):
+        # an evil cast to <unicode> might work here in some(!) cases,
+        # depending on what the further processing does.  to be safe,
+        # we can always create a copy instead
+        return unicode(s)
+    else:
+        raise TypeError(...)
diff --git a/khmer/_version.py b/khmer/_version.py
index 67a9eed..adebb45 100644
--- a/khmer/_version.py
+++ b/khmer/_version.py
@@ -23,9 +23,9 @@ def get_keywords():
     # setup.py/versioneer.py will grep for the variable names, so they must
     # each be defined on a line of their own. _version.py will just call
     # get_keywords().
-    git_refnames = " (tag: v2.1.1)"
-    git_full = "c46dbedecb2e9789501d5f68601ac72aac0cd74b"
-    git_date = "2017-05-25 17:10:21 -0700"
+    git_refnames = " (tag: v2.1.2)"
+    git_full = "024abc378212c75fc25d1798f63e805dfe289284"
+    git_date = "2017-07-03 14:55:34 +0200"
     keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
     return keywords
 
diff --git a/khmer/khmer_args.py b/khmer/khmer_args.py
index e9b8d1c..c072984 100644
--- a/khmer/khmer_args.py
+++ b/khmer/khmer_args.py
@@ -569,7 +569,10 @@ def create_countgraph(args, ksize=None, multiplier=1.0, fp_rate=0.1):
     else:
         tablesize = calculate_graphsize(args, 'countgraph',
                                         multiplier=multiplier)
-        return khmer.Countgraph(ksize, tablesize, args.n_tables)
+        cg = khmer.Countgraph(ksize, tablesize, args.n_tables)
+        if hasattr(args, 'bigcount'):
+            cg.set_use_bigcount(args.bigcount)
+        return cg
 
 
 def create_matching_nodegraph(countgraph):
diff --git a/khmer/thread_utils.py b/khmer/thread_utils.py
index 63b8e8d..55c15ea 100644
--- a/khmer/thread_utils.py
+++ b/khmer/thread_utils.py
@@ -60,6 +60,7 @@ def verbose_loader(filename):
             log_info('... filtering {num}', num=num)
         yield record
 
+
 verbose_fasta_iter = verbose_loader  # pylint: disable=invalid-name
 
 
diff --git a/khmer/utils.py b/khmer/utils.py
index d318417..cee1704 100644
--- a/khmer/utils.py
+++ b/khmer/utils.py
@@ -34,6 +34,9 @@
 # Contact: khmer-project at idyll.org
 """Helpful methods for performing common argument-checking tasks in scripts."""
 from __future__ import print_function, unicode_literals
+from khmer._oxli.parsing import (check_is_left, check_is_right, check_is_pair,
+                                 UnpairedReadsError, _split_left_right)
+import itertools
 
 
 def print_error(msg):
@@ -43,113 +46,6 @@ def print_error(msg):
     print(msg, file=sys.stderr)
 
 
-def _split_left_right(name):
-    """Split record name at the first whitespace and return both parts.
-
-    RHS is set to an empty string if not present.
-    """
-    parts = name.split(None, 1)
-    lhs, rhs = [parts[0], parts[1] if len(parts) > 1 else '']
-    return lhs, rhs
-
-
-def check_is_pair(record1, record2):
-    """Check if the two sequence records belong to the same fragment.
-
-    In an matching pair the records are left and right pairs
-    of each other, respectively.  Returns True or False as appropriate.
-
-    Handles both Casava formats: seq/1 and seq/2, and 'seq::... 1::...'
-    and 'seq::... 2::...'.
-
-    Also handles the default format of the SRA toolkit's fastq-dump:
-    'Accession seq/1'
-    """
-    if hasattr(record1, 'quality') or hasattr(record2, 'quality'):
-        if not (hasattr(record1, 'quality') and hasattr(record2, 'quality')):
-            raise ValueError("both records must be same type (FASTA or FASTQ)")
-
-    lhs1, rhs1 = _split_left_right(record1.name)
-    lhs2, rhs2 = _split_left_right(record2.name)
-
-    # handle 'name/1'
-    if lhs1.endswith('/1') and lhs2.endswith('/2'):
-        subpart1 = lhs1.split('/', 1)[0]
-        subpart2 = lhs2.split('/', 1)[0]
-
-        if subpart1 and subpart1 == subpart2:
-            return True
-
-    # handle '@name 1:rst'
-    elif lhs1 == lhs2 and rhs1.startswith('1:') and rhs2.startswith('2:'):
-        return True
-
-    # handle @name seq/1
-    elif lhs1 == lhs2 and rhs1.endswith('/1') and rhs2.endswith('/2'):
-        subpart1 = rhs1.split('/', 1)[0]
-        subpart2 = rhs2.split('/', 1)[0]
-
-        if subpart1 and subpart1 == subpart2:
-            return True
-
-    return False
-
-
-def check_is_left(name):
-    """Check if the name belongs to a 'left' sequence (/1).
-
-    Returns True or False.
-
-    Handles both Casava formats: seq/1 and 'seq::... 1::...'
-    """
-    lhs, rhs = _split_left_right(name)
-    if lhs.endswith('/1'):              # handle 'name/1'
-        return True
-    elif rhs.startswith('1:'):          # handle '@name 1:rst'
-        return True
-
-    elif rhs.endswith('/1'):            # handles '@name seq/1'
-        return True
-
-    return False
-
-
-def check_is_right(name):
-    """Check if the name belongs to a 'right' sequence (/2).
-
-    Returns True or False.
-
-    Handles both Casava formats: seq/2 and 'seq::... 2::...'
-    """
-    lhs, rhs = _split_left_right(name)
-    if lhs.endswith('/2'):              # handle 'name/2'
-        return True
-    elif rhs.startswith('2:'):          # handle '@name 2:rst'
-        return True
-
-    elif rhs.endswith('/2'):            # handles '@name seq/2'
-        return True
-
-    return False
-
-
-class UnpairedReadsError(ValueError):
-    """ValueError with refs to the read pair in question."""
-
-    def __init__(self, msg, r1, r2):
-        r1_name = "<no read>"
-        r2_name = "<no read>"
-        if r1:
-            r1_name = r1.name
-        if r2:
-            r2_name = r2.name
-
-        msg = msg + '\n"{0}"\n"{1}"'.format(r1_name, r2_name)
-        ValueError.__init__(self, msg)
-        self.read1 = r1
-        self.read2 = r2
-
-
 def broken_paired_reader(screed_iter, min_length=None,
                          force_single=False, require_paired=False):
     """Read pairs from a stream.
@@ -224,7 +120,7 @@ def broken_paired_reader(screed_iter, min_length=None,
 
 def write_record(record, fileobj):
     """Write sequence record to 'fileobj' in FASTA/FASTQ format."""
-    if hasattr(record, 'quality'):
+    if hasattr(record, 'quality') and record.quality is not None:
         recstr = '@{name}\n{sequence}\n+\n{quality}\n'.format(
             name=record.name,
             sequence=record.sequence,
@@ -245,7 +141,7 @@ def write_record_pair(read1, read2, fileobj):
     _rec_pair = '@%s\n%s\n+\n%s\n' * 2
     _rec_pair_no_qual = '>%s\n%s\n' * 2
 
-    if hasattr(read1, 'quality'):
+    if hasattr(read1, 'quality') and read1.quality is not None:
         assert hasattr(read2, 'quality')
         recstr = _rec_pair % (read1.name, read1.sequence, read1.quality,
                               read2.name, read2.sequence, read2.quality)
@@ -293,5 +189,10 @@ class ReadBundle(object):
         return sum([len(r.sequence) for r in self.reads])
 
 
+def grouper(n, iterable):
+    iterable = iter(iterable)
+    return iter(lambda: list(itertools.islice(iterable, n)), [])
+
+
 # vim: set filetype=python tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
 # vim: set textwidth=79:
diff --git a/oxli/__init__.py b/oxli/__init__.py
index caf0e99..f998575 100755
--- a/oxli/__init__.py
+++ b/oxli/__init__.py
@@ -73,5 +73,6 @@ def main():
         args = get_parser().parse_args()
     args.func(args)
 
+
 if __name__ == '__main__':
     main()
diff --git a/oxli/build_graph.py b/oxli/build_graph.py
index 2cd12df..5867419 100755
--- a/oxli/build_graph.py
+++ b/oxli/build_graph.py
@@ -129,6 +129,7 @@ def main(args):
 
     sys.exit(0)
 
+
 if __name__ == '__main__':
     main(None)
 
diff --git a/pytest.ini b/pytest.ini
index 81ba721..2d83ca1 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -2,3 +2,7 @@
 addopts = -m "not known_failing and not jenkins and not huge" -v
 norecursedirs = third-party
 testpaths = tests
+# ignore all warnings, once khmer stops supporting python2 we can change
+# this to the more specific "ignore::ResourceWarning" to ignore only that
+# one as it is the only one known to be a false positive
+filterwarnings = ignore
diff --git a/scripts/abundance-dist-single.py b/scripts/abundance-dist-single.py
index 3cf77e8..56278cb 100755
--- a/scripts/abundance-dist-single.py
+++ b/scripts/abundance-dist-single.py
@@ -131,8 +131,7 @@ def main():  # pylint: disable=too-many-locals,too-many-branches
     # In case the user specified a maximum memory usage, use 8/(9+eps) of that
     # for the countgraph and 1/(9+eps) for the tracking nodegraph
     # `eps` is used to account for the memory used by the python interpreter
-    countgraph = khmer_args.create_countgraph(args, multiplier=8/(9. + 0.3))
-    countgraph.set_use_bigcount(args.bigcount)
+    countgraph = khmer_args.create_countgraph(args, multiplier=8 / (9. + 0.3))
 
     log_info('building k-mer tracking graph')
     tracking = khmer_args.create_matching_nodegraph(countgraph)
diff --git a/scripts/annotate-partitions.py b/scripts/annotate-partitions.py
index fd2b41e..91f9996 100755
--- a/scripts/annotate-partitions.py
+++ b/scripts/annotate-partitions.py
@@ -111,5 +111,6 @@ def main():
             part_count, infile), file=sys.stderr)
         print('partitions are in', outfile, file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/count-median.py b/scripts/count-median.py
index ab3a4cc..b99f934 100755
--- a/scripts/count-median.py
+++ b/scripts/count-median.py
@@ -125,5 +125,6 @@ def main():
             ave, stdev = [round(x, 9) for x in (ave, stdev)]
             output.writerow([record.name, medn, ave, stdev, len(seq)])
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/do-partition.py b/scripts/do-partition.py
index 4dfa7e8..231c0bb 100755
--- a/scripts/do-partition.py
+++ b/scripts/do-partition.py
@@ -225,6 +225,7 @@ def main():  # pylint: disable=too-many-locals,too-many-statements
             part_count, infile), file=sys.stderr)
         print('partitions are in', outfile, file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
 
diff --git a/scripts/extract-partitions.py b/scripts/extract-partitions.py
index a918489..48e8240 100755
--- a/scripts/extract-partitions.py
+++ b/scripts/extract-partitions.py
@@ -352,5 +352,6 @@ def main():
            args.prefix,
            suffix), file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/fastq-to-fasta.py b/scripts/fastq-to-fasta.py
index 6e61b37..36ab823 100755
--- a/scripts/fastq-to-fasta.py
+++ b/scripts/fastq-to-fasta.py
@@ -102,5 +102,6 @@ def main():
     print('Wrote output to', describe_file_handle(args.output),
           file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/filter-abund-single.py b/scripts/filter-abund-single.py
index efc3547..a2e44c3 100755
--- a/scripts/filter-abund-single.py
+++ b/scripts/filter-abund-single.py
@@ -176,7 +176,6 @@ def main():
                                         args.variable_coverage,
                                         args.normalize_to)
         if trimmed_record:
-            print((trimmed_record,))
             write_record(trimmed_record, outfp)
 
     log_info('output in {outfile}', outfile=outfile)
@@ -186,5 +185,6 @@ def main():
                  graph=args.savegraph)
         graph.save(args.savegraph)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/filter-stoptags.py b/scripts/filter-stoptags.py
index ee37fea..7d0f744 100755
--- a/scripts/filter-stoptags.py
+++ b/scripts/filter-stoptags.py
@@ -116,5 +116,6 @@ def main():
 
         print('output in', outfile, file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/find-knots.py b/scripts/find-knots.py
index 59495c6..c695dc5 100755
--- a/scripts/find-knots.py
+++ b/scripts/find-knots.py
@@ -182,5 +182,6 @@ def main():
 
     print('done!', file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/interleave-reads.py b/scripts/interleave-reads.py
index ece85e8..fdecd7c 100755
--- a/scripts/interleave-reads.py
+++ b/scripts/interleave-reads.py
@@ -147,5 +147,6 @@ def main():
     print('final: interleaved %d pairs' % counter, file=sys.stderr)
     print('output written to', describe_file_handle(outfp), file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/load-into-counting.py b/scripts/load-into-counting.py
index 3e3502b..8164f4e 100755
--- a/scripts/load-into-counting.py
+++ b/scripts/load-into-counting.py
@@ -136,7 +136,6 @@ def main():
 
     log_info('making countgraph')
     countgraph = khmer_args.create_countgraph(args)
-    countgraph.set_use_bigcount(args.bigcount)
 
     filename = None
 
@@ -217,6 +216,7 @@ def main():
     log_info('DONE.')
     log_info('wrote to: {filename}', filename=info_filename)
 
+
 if __name__ == '__main__':
     main()
 
diff --git a/scripts/make-initial-stoptags.py b/scripts/make-initial-stoptags.py
index 2e63517..a766043 100755
--- a/scripts/make-initial-stoptags.py
+++ b/scripts/make-initial-stoptags.py
@@ -149,5 +149,6 @@ def main():
     nodegraph.save_stop_tags(graphbase + '.stoptags')
     print('wrote to:', graphbase + '.stoptags', file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/partition-graph.py b/scripts/partition-graph.py
index 2780a21..61b957c 100755
--- a/scripts/partition-graph.py
+++ b/scripts/partition-graph.py
@@ -171,5 +171,6 @@ def main():
     print('done making subsets! see %s.subset.*.pmap' %
           (basename,), file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/sample-reads-randomly.py b/scripts/sample-reads-randomly.py
index 5d1fa6e..5ec2fbb 100755
--- a/scripts/sample-reads-randomly.py
+++ b/scripts/sample-reads-randomly.py
@@ -223,5 +223,6 @@ def main():
                 if records[1] is not None:
                     write_record(records[1], output_file)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/split-paired-reads.py b/scripts/split-paired-reads.py
index 6efa4f9..22d99ee 100755
--- a/scripts/split-paired-reads.py
+++ b/scripts/split-paired-reads.py
@@ -197,5 +197,6 @@ def main():
     if args.output_orphaned:
         print("orphans in %s" % out0, file=sys.stderr)
 
+
 if __name__ == '__main__':
     main()
diff --git a/scripts/unique-kmers.py b/scripts/unique-kmers.py
index 263a313..61b07c2 100755
--- a/scripts/unique-kmers.py
+++ b/scripts/unique-kmers.py
@@ -161,5 +161,6 @@ def main():
         print(to_print, file=report_fp)
         report_fp.flush()
 
+
 if __name__ == "__main__":
     main()
diff --git a/setup.cfg b/setup.cfg
index 2293a7d..a82c22c 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -3,7 +3,7 @@ define = SEQAN_HAS_BZIP2,SEQAN_HAS_ZLIB
 undef = NO_UNIQUE_RC
 # libraries = z,bz2
 ## if using system libraries
-include-dirs = lib:third-party/zlib:third-party/bzip2:third-party/seqan/core/include:third-party/smhasher
+include-dirs = include:third-party/zlib:third-party/bzip2:third-party/seqan/core/include:third-party/smhasher
 # include-dirs = lib
 ## if using system libraries (broken)
 
@@ -31,4 +31,4 @@ parentdir_prefix = .
 
 [pep8]
 exclude = _version.py
-ignore = E309,E226
+ignore = E309,E226,E402
diff --git a/setup.py b/setup.py
index 7c59116..ef9b6c1 100755
--- a/setup.py
+++ b/setup.py
@@ -38,12 +38,16 @@
 
 import ez_setup
 
+import glob
 import os
 import sys
 from os import listdir as os_listdir
 from os.path import join as path_join
+from os.path import splitext
 import shutil
 import subprocess
+import sys
+import sysconfig
 import tempfile
 import csv
 
@@ -60,6 +64,14 @@ ez_setup.use_setuptools(version="3.4.1")
 
 CMDCLASS = versioneer.get_cmdclass()
 
+HAS_CYTHON = False
+try:
+    import Cython
+    HAS_CYTHON = True
+except ImportError:
+    pass
+cy_ext = 'pyx' if HAS_CYTHON else 'cpp'
+
 # strip out -Wstrict-prototypes; a hack suggested by
 # http://stackoverflow.com/a/9740721
 # proper fix coming in http://bugs.python.org/issue1222585
@@ -119,24 +131,34 @@ def check_for_openmp():
 
     return exit_code == 0
 
+
+def distutils_dir_name(dname):
+    """Returns the name of a distutils build directory"""
+    f = "{dirname}.{platform}-{version[0]}.{version[1]}"
+    return f.format(dirname=dname,
+                    platform=sysconfig.get_platform(),
+                    version=sys.version_info)
+
+
+def build_dir():
+    return path_join("build", distutils_dir_name("temp"))
+
 # We bundle tested versions of zlib & bzip2. To use the system zlib and bzip2
 # change setup.cfg or use the `--libraries z,bz2` parameter which will make our
 # custom build_ext command strip out the bundled versions.
 
+
 ZLIBDIR = 'third-party/zlib'
 BZIP2DIR = 'third-party/bzip2'
 
-BUILD_DEPENDS = []
-BUILD_DEPENDS.extend(path_join("lib", bn + ".hh") for bn in [
+BUILD_DEPENDS = glob.glob(path_join("include", "khmer", "_cpy_*.hh"))
+BUILD_DEPENDS.extend(path_join("include", "oxli", bn + ".hh") for bn in [
     "khmer", "kmer_hash", "hashtable", "labelhash", "hashgraph",
     "hllcounter", "khmer_exception", "read_aligner", "subset", "read_parsers",
     "kmer_filters", "traversal", "assembler", "alphabets", "storage"])
-BUILD_DEPENDS.extend(path_join("khmer", bn + ".hh") for bn in [
-    "_cpy_counttable", "_cpy_hashgraph", "_cpy_nodetable",
-    "_cpy_smallcounttable", "_cpy_smallcountgraph"])
 
-SOURCES = ["khmer/_khmer.cc"]
-SOURCES.extend(path_join("lib", bn + ".cc") for bn in [
+SOURCES = glob.glob(path_join("src", "khmer", "_cpy_*.cc"))
+SOURCES.extend(path_join("src", "oxli", bn + ".cc") for bn in [
     "read_parsers", "kmer_hash", "hashtable", "hashgraph",
     "labelhash", "subset", "read_aligner",
     "hllcounter", "traversal", "kmer_filters", "assembler", "alphabets",
@@ -153,22 +175,45 @@ if sys.platform == 'darwin':
     # force 64bit only builds
     EXTRA_COMPILE_ARGS.extend(['-arch', 'x86_64', '-mmacosx-version-min=10.7',
                                '-stdlib=libc++'])
+    EXTRA_LINK_ARGS.append('-mmacosx-version-min=10.7')
 
 if check_for_openmp():
     EXTRA_COMPILE_ARGS.extend(['-fopenmp'])
     EXTRA_LINK_ARGS.extend(['-fopenmp'])
 
-EXTENSION_MOD_DICT = \
+CP_EXTENSION_MOD_DICT = \
     {
         "sources": SOURCES,
         "extra_compile_args": EXTRA_COMPILE_ARGS,
         "extra_link_args": EXTRA_LINK_ARGS,
         "depends": BUILD_DEPENDS,
+        "include_dirs": ["include", "."],
         "language": "c++",
         "define_macros": [("VERSION", versioneer.get_version()), ],
     }
 
-EXTENSION_MOD = Extension("khmer._khmer", ** EXTENSION_MOD_DICT)
+EXTENSION_MODS = [Extension("khmer._khmer", ** CP_EXTENSION_MOD_DICT)]
+
+for cython_ext in glob.glob(os.path.join("khmer", "_oxli",
+                                         "*.{0}".format(cy_ext))):
+
+    CY_EXTENSION_MOD_DICT = \
+        {
+            "sources": [cython_ext],
+            "extra_compile_args": EXTRA_COMPILE_ARGS,
+            "extra_link_args": EXTRA_LINK_ARGS,
+            "extra_objects": [path_join(build_dir(), splitext(p)[0] + '.o')
+                              for p in SOURCES],
+            "depends": [],
+            "include_dirs": ["include", "."],
+            "language": "c++",
+            "define_macros": [("VERSION", versioneer.get_version()), ],
+        }
+
+    ext_name = "khmer._oxli.{0}".format(
+        splitext(os.path.basename(cython_ext))[0])
+    EXTENSION_MODS.append(Extension(ext_name, ** CY_EXTENSION_MOD_DICT))
+
 SCRIPTS = []
 SCRIPTS.extend([path_join("scripts", script)
                 for script in os_listdir("scripts")
@@ -218,10 +263,11 @@ SETUP_METADATA = \
         # http://docs.python.org/2/distutils/setupscript.html
         # additional-meta-data note #3
         "url": 'https://khmer.readthedocs.io/',
-        "packages": ['khmer', 'khmer.tests', 'oxli'],
+        "packages": ['khmer', 'khmer.tests', 'oxli', 'khmer._oxli'],
+        "package_data": {'khmer/_oxli': ['*.pxd']},
         "package_dir": {'khmer.tests': 'tests'},
-        "install_requires": ['screed >= 1.0', 'bz2file'],
-        "setup_requires": ["pytest-runner>=2.0,<3dev"],
+        "install_requires": ['screed >= 1.0', 'bz2file', 'Cython>=0.25.2'],
+        "setup_requires": ["pytest-runner>=2.0,<3dev", "setuptools>=18.0"],
         "extras_require": {':python_version=="2.6"': ['argparse>=1.2.1'],
                            'docs': ['sphinx', 'sphinxcontrib-autoprogram'],
                            'tests': ['pytest>=2.9'],
@@ -232,7 +278,7 @@ SETUP_METADATA = \
         #        "oxli = oxli:main"
         #    ]
         # },
-        "ext_modules": [EXTENSION_MOD, ],
+        "ext_modules": EXTENSION_MODS,
         # "platforms": '', # empty as is conveyed by the classifiers below
         # "license": '', # empty as is conveyed by the classifier below
         "include_package_data": True,
@@ -264,21 +310,26 @@ class KhmerBuildExt(_build_ext):  # pylint: disable=R0904
                     ' configure || bash ./configure --static ) && make -f '
                     'Makefile.pic PIC']
             spawn(cmd=zcmd, dry_run=self.dry_run)
-            self.extensions[0].extra_objects.extend(
-                path_join("third-party", "zlib", bn + ".lo") for bn in [
-                    "adler32", "compress", "crc32", "deflate", "gzclose",
-                    "gzlib", "gzread", "gzwrite", "infback", "inffast",
-                    "inflate", "inftrees", "trees", "uncompr", "zutil"])
+            # self.extensions[0].extra_objects.extend(
+            for ext in self.extensions:
+                ext.extra_objects.extend(
+                    path_join("third-party", "zlib", bn + ".lo") for bn in [
+                        "adler32", "compress", "crc32", "deflate", "gzclose",
+                        "gzlib", "gzread", "gzwrite", "infback", "inffast",
+                        "inflate", "inftrees", "trees", "uncompr", "zutil"])
         if "bz2" not in self.libraries:
             bz2cmd = ['bash', '-c', 'cd ' + BZIP2DIR + ' && make -f '
                       'Makefile-libbz2_so all']
             spawn(cmd=bz2cmd, dry_run=self.dry_run)
-            self.extensions[0].extra_objects.extend(
-                path_join("third-party", "bzip2", bn + ".o") for bn in [
-                    "blocksort", "huffman", "crctable", "randtable",
-                    "compress", "decompress", "bzlib"])
+            # self.extensions[0].extra_objects.extend(
+            for ext in self.extensions:
+                ext.extra_objects.extend(
+                    path_join("third-party", "bzip2", bn + ".o") for bn in [
+                        "blocksort", "huffman", "crctable", "randtable",
+                        "compress", "decompress", "bzlib"])
         _build_ext.run(self)
 
+
 CMDCLASS.update({'build_ext': KhmerBuildExt})
 
 _DISTUTILS_REINIT = Distribution.reinitialize_command
@@ -298,6 +349,8 @@ def reinitialize_command(self, command, reinit_subcommands):
         self._set_command_options(  # pylint: disable=protected-access
             cmd_obj, options)
     return cmd_obj
+
+
 Distribution.reinitialize_command = reinitialize_command
 
 
diff --git a/lib/.gitignore b/src/khmer/.gitignore
similarity index 100%
copy from lib/.gitignore
copy to src/khmer/.gitignore
diff --git a/khmer/_cpy_smallcountgraph.hh b/src/khmer/_cpy_countgraph.cc
similarity index 51%
copy from khmer/_cpy_smallcountgraph.hh
copy to src/khmer/_cpy_countgraph.cc
index 40c18f3..7b805db 100644
--- a/khmer/_cpy_smallcountgraph.hh
+++ b/src/khmer/_cpy_countgraph.cc
@@ -1,99 +1,20 @@
-/*
-This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2016, The Regents of the University of California.
-
-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 Michigan State 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 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 COPYRIGHT
-HOLDER 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.
-LICENSE (END)
-
-Contact: khmer-project at idyll.org
-*/
+#include "khmer/_cpy_countgraph.hh"
+#include "khmer/_cpy_subsetpartition.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashgraph.hh"
 
-//
-// KSmallCountgraph object
-//
-
-typedef struct {
-    khmer_KHashgraph_Object khashgraph;
-    SmallCountgraph * countgraph;
-} khmer_KSmallCountgraph_Object;
+using namespace oxli;
 
-static void khmer_smallcountgraph_dealloc(khmer_KSmallCountgraph_Object * obj);
-
-static
-PyObject *
-smallcount_get_raw_tables(khmer_KSmallCountgraph_Object * self, PyObject * args)
-{
-    SmallCountgraph * countgraph = self->countgraph;
-
-    khmer::Byte ** table_ptrs = countgraph->get_raw_tables();
-    std::vector<uint64_t> sizes = countgraph->get_tablesizes();
-
-    PyObject * raw_tables = PyList_New(sizes.size());
-    for (unsigned int i=0; i<sizes.size(); ++i) {
-        Py_buffer buffer;
-        int res = PyBuffer_FillInfo(&buffer, NULL, table_ptrs[i],
-                                    sizes[i] / 2 +1, 0,
-                                    PyBUF_FULL_RO);
-        if (res == -1) {
-            return NULL;
-        }
-        PyObject * buf = PyMemoryView_FromBuffer(&buffer);
-        if(!PyMemoryView_Check(buf)) {
-            return NULL;
-        }
-        PyList_SET_ITEM(raw_tables, i, buf);
-    }
+namespace khmer {
 
-    return raw_tables;
-}
-
-static PyMethodDef khmer_smallcountgraph_methods[] = {
-    {
-        "get_raw_tables",
-        (PyCFunction)smallcount_get_raw_tables, METH_VARARGS,
-        "Get a list of the raw storage tables as memoryview objects."
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
-        PyObject * kwds);
-
-static PyTypeObject khmer_KSmallCountgraph_Type
-CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCountgraph_Object")
+PyTypeObject khmer_KCountgraph_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountgraph_Object")
 = {
     PyVarObject_HEAD_INIT(NULL, 0)       /* init & ob_size */
-    "_khmer.SmallCountgraph",                 /*tp_name*/
-    sizeof(khmer_KSmallCountgraph_Object),  /*tp_basicsize*/
+    "_khmer.Countgraph",                 /*tp_name*/
+    sizeof(khmer_KCountgraph_Object),  /*tp_basicsize*/
     0,                                   /*tp_itemsize*/
-    (destructor)khmer_smallcountgraph_dealloc,  /*tp_dealloc*/
+    (destructor)khmer_countgraph_dealloc,  /*tp_dealloc*/
     0,                                   /*tp_print*/
     0,                                   /*tp_getattr*/
     0,                                   /*tp_setattr*/
@@ -109,14 +30,14 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCountgraph_Object")
     0,                                   /*tp_setattro*/
     0,                                   /*tp_as_buffer*/
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,                  /*tp_flags*/
-    "SmallCountgraph hash object",              /* tp_doc */
+    "countgraph hash object",              /* tp_doc */
     0,                                   /* tp_traverse */
     0,                                   /* tp_clear */
     0,                                   /* tp_richcompare */
     0,                                   /* tp_weaklistoffset */
     0,                                   /* tp_iter */
     0,                                   /* tp_iternext */
-    khmer_smallcountgraph_methods,              /* tp_methods */
+    khmer_countgraph_methods,              /* tp_methods */
     0,                                   /* tp_members */
     0,                                   /* tp_getset */
     0,                                   /* tp_base */
@@ -126,30 +47,121 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCountgraph_Object")
     0,                                   /* tp_dictoffset */
     0,                                   /* tp_init */
     0,                                   /* tp_alloc */
-    khmer_smallcountgraph_new,                /* tp_new */
+    khmer_countgraph_new,                /* tp_new */
+};
+
+
+PyMethodDef khmer_countgraph_methods[] = {
+    {
+        "get_raw_tables",
+        (PyCFunction)count_get_raw_tables, METH_VARARGS,
+        "Get a list of the raw storage tables as memoryview objects."
+    },
+    { "do_subset_partition_with_abundance", (PyCFunction)count_do_subset_partition_with_abundance, METH_VARARGS, "" },
+    {NULL, NULL, 0, NULL}           /* sentinel */
 };
 
-//
-// khmer_smallcountgraph_dealloc -- clean up a countgraph hash object.
-//
 
-static void khmer_smallcountgraph_dealloc(khmer_KSmallCountgraph_Object * obj)
+void khmer_countgraph_dealloc(khmer_KCountgraph_Object * obj)
 {
     delete obj->countgraph;
     obj->countgraph = NULL;
     Py_TYPE(obj)->tp_free((PyObject*)obj);
 }
 
+
+PyObject *
+count_get_raw_tables(khmer_KCountgraph_Object * self, PyObject * args)
+{
+    Countgraph * countgraph = self->countgraph;
+
+    Byte ** table_ptrs = countgraph->get_raw_tables();
+    std::vector<uint64_t> sizes = countgraph->get_tablesizes();
+
+    PyObject * raw_tables = PyList_New(sizes.size());
+    for (unsigned int i=0; i<sizes.size(); ++i) {
+        Py_buffer buffer;
+        int res = PyBuffer_FillInfo(&buffer, NULL, table_ptrs[i], sizes[i], 0,
+                                    PyBUF_FULL_RO);
+        if (res == -1) {
+            return NULL;
+        }
+        PyObject * buf = PyMemoryView_FromBuffer(&buffer);
+        if(!PyMemoryView_Check(buf)) {
+            return NULL;
+        }
+        PyList_SET_ITEM(raw_tables, i, buf);
+    }
+
+    return raw_tables;
+}
+
+
+PyObject *
+count_do_subset_partition_with_abundance(khmer_KCountgraph_Object * me,
+        PyObject * args)
+{
+    Countgraph * countgraph = me->countgraph;
+
+    HashIntoType start_kmer = 0, end_kmer = 0;
+    PyObject * break_on_stop_tags_o = NULL;
+    PyObject * stop_big_traversals_o = NULL;
+    BoundedCounterType min_count, max_count;
+
+    if (!PyArg_ParseTuple(args, "HH|KKOO",
+                          &min_count, &max_count,
+                          &start_kmer, &end_kmer,
+                          &break_on_stop_tags_o,
+                          &stop_big_traversals_o)) {
+        return NULL;
+    }
+
+    bool break_on_stop_tags = false;
+    if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) {
+        break_on_stop_tags = true;
+    }
+    bool stop_big_traversals = false;
+    if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) {
+        stop_big_traversals = true;
+    }
+
+    SubsetPartition * subset_p = NULL;
+    try {
+        Py_BEGIN_ALLOW_THREADS
+        subset_p = new SubsetPartition(countgraph);
+        subset_p->do_partition_with_abundance(start_kmer, end_kmer,
+                                              min_count, max_count,
+                                              break_on_stop_tags,
+                                              stop_big_traversals);
+        Py_END_ALLOW_THREADS
+    } catch (std::bad_alloc &e) {
+        return PyErr_NoMemory();
+    }
+
+    khmer_KSubsetPartition_Object * subset_obj = (khmer_KSubsetPartition_Object *)\
+            PyObject_New(khmer_KSubsetPartition_Object, &khmer_KSubsetPartition_Type);
+
+    if (subset_obj == NULL) {
+        delete subset_p;
+        return NULL;
+    }
+
+    subset_obj->subset = subset_p;
+
+    return (PyObject *) subset_obj;
+}
+
+
 //
-// khmer_smallcountgraph_new
+// khmer_countgraph_new
 //
 
-static PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
-        PyObject * kwds)
+ PyObject* khmer_countgraph_new(PyTypeObject * type, PyObject * args,
+                                      PyObject * kwds)
 {
-    khmer_KSmallCountgraph_Object * self;
+    khmer_KCountgraph_Object * self;
 
-    self = (khmer_KSmallCountgraph_Object *)type->tp_alloc(type, 0);
+    self = (khmer_KCountgraph_Object *)type->tp_alloc(type, 0);
 
     if (self != NULL) {
         WordLength k = 0;
@@ -167,7 +179,7 @@ static PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
         }
 
         try {
-            self->countgraph = new SmallCountgraph(k, sizes);
+            self->countgraph = new Countgraph(k, sizes);
         } catch (std::bad_alloc &e) {
             Py_DECREF(self);
             return PyErr_NoMemory();
@@ -179,3 +191,5 @@ static PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
 
     return (PyObject *) self;
 }
+
+}
diff --git a/khmer/_cpy_counttable.hh b/src/khmer/_cpy_counttable.cc
similarity index 55%
rename from khmer/_cpy_counttable.hh
rename to src/khmer/_cpy_counttable.cc
index 429e95e..8473ebc 100644
--- a/khmer/_cpy_counttable.hh
+++ b/src/khmer/_cpy_counttable.cc
@@ -1,50 +1,10 @@
-/*
-This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2010-2015, Michigan State University.
-Copyright (C) 2015-2016, The Regents of the University of California.
+#include "khmer/_cpy_counttable.hh"
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+using namespace oxli;
 
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
+namespace khmer {
 
-    * 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 Michigan State 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 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 COPYRIGHT
-HOLDER 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.
-LICENSE (END)
-
-Contact: khmer-project at idyll.org
-*/
-
-typedef struct {
-    khmer_KHashtable_Object khashtable;
-    Counttable * counttable;
-} khmer_KCounttable_Object;
-
-static PyObject* khmer_counttable_new(PyTypeObject * type, PyObject * args,
-                                      PyObject * kwds);
-
-static PyTypeObject khmer_KCounttable_Type
+PyTypeObject khmer_KCounttable_Type
 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCounttable_Object")
 = {
     PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
@@ -88,11 +48,7 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCounttable_Object")
 };
 
 
-//
-// khmer_counttable_new
-//
-
-static PyObject* khmer_counttable_new(PyTypeObject * type, PyObject * args,
+PyObject* khmer_counttable_new(PyTypeObject * type, PyObject * args,
                                       PyObject * kwds)
 {
     khmer_KCounttable_Object * self;
@@ -126,3 +82,5 @@ static PyObject* khmer_counttable_new(PyTypeObject * type, PyObject * args,
 
     return (PyObject *) self;
 }
+
+}
diff --git a/src/khmer/_cpy_graphlabels.cc b/src/khmer/_cpy_graphlabels.cc
new file mode 100644
index 0000000..84142ba
--- /dev/null
+++ b/src/khmer/_cpy_graphlabels.cc
@@ -0,0 +1,510 @@
+#include "khmer/_cpy_graphlabels.hh"
+#include "khmer/_cpy_nodegraph.hh"
+#include "khmer/_cpy_countgraph.hh"
+#include "khmer/_cpy_hashset.hh"
+#include "oxli/oxli.hh"
+#include "oxli/assembler.hh"
+
+using namespace oxli;
+using namespace oxli::read_parsers;
+
+namespace khmer {
+
+PyTypeObject khmer_KGraphLabels_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)  /* init & ob_size */
+    "_khmer.LabelHash",            /* tp_name */
+    sizeof(khmer_KGraphLabels_Object), /* tp_basicsize */
+    0,                       /* tp_itemsize */
+    (destructor)khmer_graphlabels_dealloc, /* tp_dealloc */
+    0,                       /* tp_print */
+    0,                       /* tp_getattr */
+    0,                       /* tp_setattr */
+    0,                       /* tp_compare */
+    0,                       /* tp_repr */
+    0,                       /* tp_as_number */
+    0,                       /* tp_as_sequence */
+    0,                       /* tp_as_mapping */
+    0,                       /* tp_hash */
+    0,                       /* tp_call */
+    0,                       /* tp_str */
+    0,                       /* tp_getattro */
+    0,                       /* tp_setattro */
+    0,                       /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    0,                       /* tp_doc */
+    0,                       /* tp_traverse */
+    0,                       /* tp_clear */
+    0,                       /* tp_richcompare */
+    0,                       /* tp_weaklistoffset */
+    0,                       /* tp_iter */
+    0,                       /* tp_iternext */
+    khmer_graphlabels_methods, /* tp_methods */
+    0,                       /* tp_members */
+    0,                       /* tp_getset */
+    0,                       /* tp_base */
+    0,                       /* tp_dict */
+    0,                       /* tp_descr_get */
+    0,                       /* tp_descr_set */
+    0,                       /* tp_dictoffset */
+    0,                       /* tp_init */
+    0,                       /* tp_alloc */
+    khmer_graphlabels_new,      /* tp_new */
+};
+
+
+PyMethodDef khmer_graphlabels_methods[] = {
+    { "consume_seqfile_and_tag_with_labels", (PyCFunction)labelhash_consume_seqfile_and_tag_with_labels, METH_VARARGS, "" },
+    { "sweep_label_neighborhood", (PyCFunction)labelhash_sweep_label_neighborhood, METH_VARARGS, "" },
+    {"consume_partitioned_fasta_and_tag_with_labels", (PyCFunction)labelhash_consume_partitioned_fasta_and_tag_with_labels, METH_VARARGS, "" },
+    {"sweep_tag_neighborhood", (PyCFunction)labelhash_sweep_tag_neighborhood, METH_VARARGS, "" },
+    {"get_tag_labels", (PyCFunction)labelhash_get_tag_labels, METH_VARARGS, ""},
+    {"consume_sequence_and_tag_with_labels", (PyCFunction)labelhash_consume_sequence_and_tag_with_labels, METH_VARARGS, "" },
+    {"n_labels", (PyCFunction)labelhash_n_labels, METH_VARARGS, ""},
+    {"get_all_labels", (PyCFunction)labelhash_get_all_labels, METH_VARARGS, "" },
+    {
+        "label_across_high_degree_nodes",
+        (PyCFunction)labelhash_label_across_high_degree_nodes, METH_VARARGS,
+        "Connect graph across high degree nodes using labels.",
+    },
+    {
+        "assemble_labeled_path",
+        (PyCFunction)labelhash_assemble_labeled_path, METH_VARARGS,
+        "Assemble all paths, using labels to negotiate tricky bits."
+    },
+    { "save_labels_and_tags", (PyCFunction)labelhash_save_labels_and_tags, METH_VARARGS, "" },
+    { "load_labels_and_tags", (PyCFunction)labelhash_load_labels_and_tags, METH_VARARGS, "" },    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+
+void khmer_graphlabels_dealloc(khmer_KGraphLabels_Object * obj)
+{
+    delete obj->labelhash;
+    obj->labelhash = NULL;
+
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+ PyObject * khmer_graphlabels_new(PyTypeObject *type, PyObject *args,
+                                        PyObject *kwds)
+{
+    khmer_KGraphLabels_Object *self;
+    self = (khmer_KGraphLabels_Object*)type->tp_alloc(type, 0);
+
+    if (self != NULL) {
+        PyObject * hashgraph_o;
+        Hashgraph * hashgraph = NULL; // @CTB
+
+        if (!PyArg_ParseTuple(args, "O", &hashgraph_o)) {
+            Py_DECREF(self);
+            return NULL;
+        }
+
+        if (PyObject_TypeCheck(hashgraph_o, &khmer_KNodegraph_Type)) {
+            khmer_KNodegraph_Object * kho = (khmer_KNodegraph_Object *) hashgraph_o;
+            hashgraph = kho->nodegraph;
+        } else if (PyObject_TypeCheck(hashgraph_o, &khmer_KCountgraph_Type)) {
+            khmer_KCountgraph_Object * cho = (khmer_KCountgraph_Object *) hashgraph_o;
+            hashgraph = cho->countgraph;
+        } else {
+            PyErr_SetString(PyExc_ValueError,
+                            "graph object must be a NodeGraph or CountGraph");
+            Py_DECREF(self);
+            return NULL;
+        }
+
+        try {
+            self->labelhash = new LabelHash(hashgraph);
+        } catch (std::bad_alloc &e) {
+            Py_DECREF(self);
+            return PyErr_NoMemory();
+        }
+    }
+
+    return (PyObject *) self;
+}
+
+
+PyObject *
+labelhash_get_all_labels(khmer_KGraphLabels_Object * me, PyObject * args)
+{
+    LabelHash * hb = me->labelhash;
+
+    PyObject * d = PyList_New(hb->all_labels.size());
+    if (d == NULL) {
+        return NULL;
+    }
+    LabelSet::iterator it;
+
+    unsigned long long i = 0;
+    for (it = hb->all_labels.begin(); it != hb->all_labels.end(); ++it) {
+        PyObject * val = Py_BuildValue("K", *it);
+        if (val != NULL) {
+            PyList_SetItem(d, i, val);
+        }
+        i++;
+    }
+
+    return d;
+}
+
+
+PyObject *
+labelhash_consume_seqfile_and_tag_with_labels(khmer_KGraphLabels_Object * me,
+        PyObject * args)
+{
+    LabelHash * hb = me->labelhash;
+
+    const char * filename;
+
+    if (!PyArg_ParseTuple(args, "s", &filename)) {
+        return NULL;
+    }
+
+    const char         *value_exception = NULL;
+    const char         *file_exception  = NULL;
+    unsigned long long  n_consumed      = 0;
+    unsigned int        total_reads     = 0;
+    std::string exc_string;
+
+    //Py_BEGIN_ALLOW_THREADS
+    try {
+        hb->consume_seqfile_and_tag_with_labels<FastxReader>(filename, total_reads,
+                n_consumed);
+    } catch (oxli_file_exception &exc) {
+        exc_string = exc.what();
+        file_exception = exc_string.c_str();
+    } catch (oxli_value_exception &exc) {
+        exc_string = exc.what();
+        value_exception = exc_string.c_str();
+    }
+    //Py_END_ALLOW_THREADS
+
+    if (file_exception != NULL) {
+        PyErr_SetString(PyExc_OSError, file_exception);
+        return NULL;
+    }
+    if (value_exception != NULL) {
+        PyErr_SetString(PyExc_ValueError, value_exception);
+        return NULL;
+    }
+
+    return Py_BuildValue("IK", total_reads, n_consumed);
+}
+
+
+PyObject *
+labelhash_consume_partitioned_fasta_and_tag_with_labels(
+    khmer_KGraphLabels_Object * me, PyObject * args)
+{
+    LabelHash * labelhash = me->labelhash;
+
+    const char * filename;
+
+    if (!PyArg_ParseTuple(args, "s", &filename)) {
+        return NULL;
+    }
+
+    // call the C++ function, and trap signals => Python
+
+    unsigned long long  n_consumed  = 0;
+    unsigned int        total_reads = 0;
+
+    try {
+        labelhash->consume_partitioned_fasta_and_tag_with_labels<FastxReader>(filename,
+                total_reads, n_consumed);
+    } catch (oxli_file_exception &exc) {
+        PyErr_SetString(PyExc_OSError, exc.what());
+        return NULL;
+    } catch (oxli_value_exception &exc) {
+        PyErr_SetString(PyExc_ValueError, exc.what());
+        return NULL;
+    }
+
+    return Py_BuildValue("IK", total_reads, n_consumed);
+}
+
+
+PyObject *
+labelhash_consume_sequence_and_tag_with_labels(khmer_KGraphLabels_Object * me,
+        PyObject * args)
+{
+    LabelHash * hb = me->labelhash;
+    const char * seq = NULL;
+    unsigned long long c = 0;
+    if (!PyArg_ParseTuple(args, "sK", &seq, &c)) {
+        return NULL;
+    }
+    unsigned long long n_consumed = 0;
+
+    hb->consume_sequence_and_tag_with_labels(seq, n_consumed, c);
+    return Py_BuildValue("K", n_consumed);
+}
+
+
+PyObject *
+labelhash_sweep_label_neighborhood(khmer_KGraphLabels_Object * me,
+                                   PyObject * args)
+{
+    LabelHash * hb = me->labelhash;
+
+    const char * seq = NULL;
+    int r = 0;
+    PyObject * break_on_stop_tags_o = NULL;
+    PyObject * stop_big_traversals_o = NULL;
+
+    if (!PyArg_ParseTuple(args, "s|iOO", &seq, &r,
+                          &break_on_stop_tags_o,
+                          &stop_big_traversals_o)) {
+        return NULL;
+    }
+
+    unsigned int range = (2 * hb->graph->_get_tag_density()) + 1;
+    if (r >= 0) {
+        range = r;
+    }
+
+    bool break_on_stop_tags = false;
+    if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) {
+        break_on_stop_tags = true;
+    }
+    bool stop_big_traversals = false;
+    if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) {
+        stop_big_traversals = true;
+    }
+
+    if (strlen(seq) < hb->graph->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }
+
+    //std::pair<TagLabelPair::iterator, TagLabelPair::iterator> ret;
+    LabelSet found_labels;
+
+    //unsigned int num_traversed = 0;
+    //Py_BEGIN_ALLOW_THREADS
+    hb->sweep_label_neighborhood(seq, found_labels, range, break_on_stop_tags,
+                                 stop_big_traversals);
+    //Py_END_ALLOW_THREADS
+
+    //printf("...%u kmers traversed\n", num_traversed);
+
+    PyObject * x =  PyList_New(found_labels.size());
+    LabelSet::const_iterator si;
+    unsigned long long i = 0;
+    for (si = found_labels.begin(); si != found_labels.end(); ++si) {
+        PyList_SET_ITEM(x, i, Py_BuildValue("K", *si));
+        i++;
+    }
+
+    return x;
+}
+
+// Similar to find_all_tags, but returns tags in a way actually usable by python
+// need a tags_in_sequence iterator or function in c++ land for reuse in all
+// these functions
+
+
+PyObject *
+labelhash_sweep_tag_neighborhood(khmer_KGraphLabels_Object * me,
+                                 PyObject * args)
+{
+    LabelHash * labelhash = me->labelhash;
+
+    const char * seq = NULL;
+    int r = 0;
+    PyObject * break_on_stop_tags_o = NULL;
+    PyObject * stop_big_traversals_o = NULL;
+
+    if (!PyArg_ParseTuple(args, "s|iOO", &seq, &r,
+                          &break_on_stop_tags_o,
+                          &stop_big_traversals_o)) {
+        return NULL;
+    }
+
+    unsigned int range = (2 * labelhash->graph->_get_tag_density()) + 1;
+    if (r >= 0) {
+        range = r;
+    }
+
+    bool break_on_stop_tags = false;
+    if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) {
+        break_on_stop_tags = true;
+    }
+    bool stop_big_traversals = false;
+    if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) {
+        stop_big_traversals = true;
+    }
+
+    if (strlen(seq) < labelhash->graph->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }
+
+    SeenSet * tagged_kmers = new SeenSet;
+
+    //Py_BEGIN_ALLOW_THREADS
+
+    labelhash->graph->partition->sweep_for_tags(seq, *tagged_kmers,
+            labelhash->graph->all_tags,
+            range, break_on_stop_tags,
+            stop_big_traversals);
+
+    //Py_END_ALLOW_THREADS
+
+    PyObject * x = (PyObject *) create_HashSet_Object(tagged_kmers,
+                   labelhash->graph->ksize());
+    return x;
+}
+
+
+PyObject *
+labelhash_get_tag_labels(khmer_KGraphLabels_Object * me, PyObject * args)
+{
+    LabelHash * labelhash = me->labelhash;
+
+    PyObject * tag_o;
+    HashIntoType tag;
+
+    if (!PyArg_ParseTuple(args, "O", &tag_o)) {
+        return NULL;
+    }
+    if (!ht_convert_PyObject_to_HashIntoType(tag_o, tag,
+            labelhash->graph)) {
+        return NULL;
+    }
+
+    LabelSet labels;
+    labelhash->get_tag_labels(tag, labels);
+
+    PyObject * x =  PyList_New(labels.size());
+    LabelSet::const_iterator si;
+    unsigned long long i = 0;
+    for (si = labels.begin(); si != labels.end(); ++si) {
+        PyList_SET_ITEM(x, i, Py_BuildValue("K", *si));
+        i++;
+    }
+
+    return x;
+}
+
+
+PyObject *
+labelhash_n_labels(khmer_KGraphLabels_Object * me, PyObject * args)
+{
+    LabelHash * labelhash = me->labelhash;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    return PyLong_FromSize_t(labelhash->n_labels());
+}
+
+
+PyObject *
+labelhash_label_across_high_degree_nodes(khmer_KGraphLabels_Object * me,
+        PyObject * args)
+{
+    LabelHash * labelhash = me->labelhash;
+
+    const char * long_str;
+    khmer_HashSet_Object * hdn_o = NULL;
+    Label label;
+
+    if (!PyArg_ParseTuple(args, "sO!K", &long_str,
+                          &khmer_HashSet_Type, &hdn_o, &label)) {
+        return NULL;
+    }
+
+    if (strlen(long_str) < labelhash->graph->ksize()) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    labelhash->label_across_high_degree_nodes(long_str, *hdn_o->hashes, label);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+PyObject *
+labelhash_assemble_labeled_path(khmer_KGraphLabels_Object * me,
+                                PyObject * args)
+{
+    LabelHash* labelhash = me->labelhash;
+
+    PyObject * val_o;
+    khmer_KNodegraph_Object * nodegraph_o = NULL;
+    Nodegraph * stop_bf = NULL;
+
+    if (!PyArg_ParseTuple(args, "O|O!", &val_o,
+                          &khmer_KNodegraph_Type, &nodegraph_o)) {
+        return NULL;
+    }
+
+    Kmer start_kmer;
+    if (!ht_convert_PyObject_to_Kmer(val_o, start_kmer, labelhash->graph)) {
+        return NULL;
+    }
+
+    if (nodegraph_o) {
+        stop_bf = nodegraph_o->nodegraph;
+    }
+
+    SimpleLabeledAssembler assembler(labelhash);
+    std::vector<std::string> contigs = assembler.assemble(start_kmer, stop_bf);
+
+    PyObject * ret = PyList_New(contigs.size());
+    for (unsigned int i = 0; i < contigs.size(); i++) {
+        PyList_SET_ITEM(ret, i, PyUnicode_FromString(contigs[i].c_str()));
+    }
+
+    return ret;
+}
+
+
+PyObject *
+labelhash_save_labels_and_tags(khmer_KGraphLabels_Object * me, PyObject * args)
+{
+    const char * filename = NULL;
+    LabelHash * labelhash = me->labelhash;
+
+    if (!PyArg_ParseTuple(args, "s", &filename)) {
+        return NULL;
+    }
+
+    try {
+        labelhash->save_labels_and_tags(filename);
+    } catch (oxli_file_exception &e) {
+        PyErr_SetString(PyExc_OSError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+
+PyObject *
+labelhash_load_labels_and_tags(khmer_KGraphLabels_Object * me, PyObject * args)
+{
+    const char * filename = NULL;
+    LabelHash * labelhash = me->labelhash;
+
+    if (!PyArg_ParseTuple(args, "s", &filename)) {
+        return NULL;
+    }
+
+    try {
+        labelhash->load_labels_and_tags(filename);
+    } catch (oxli_file_exception &e) {
+        PyErr_SetString(PyExc_OSError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+}
diff --git a/khmer/_cpy_hashgraph.hh b/src/khmer/_cpy_hashgraph.cc
similarity index 92%
rename from khmer/_cpy_hashgraph.hh
rename to src/khmer/_cpy_hashgraph.cc
index ea5ba1a..b9ee9f8 100644
--- a/khmer/_cpy_hashgraph.hh
+++ b/src/khmer/_cpy_hashgraph.cc
@@ -1,42 +1,23 @@
-/*
-This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2010-2015, Michigan State University.
-Copyright (C) 2015-2016, The Regents of the University of California.
-
-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 Michigan State 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 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 COPYRIGHT
-HOLDER 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.
-LICENSE (END)
-
-Contact: khmer-project at idyll.org
-*/
-
-static PyTypeObject khmer_KHashgraph_Type
+#include "khmer/_cpy_hashset.hh"
+#include "khmer/_cpy_hashgraph.hh"
+#include "khmer/_cpy_nodegraph.hh"
+#include "khmer/_cpy_countgraph.hh"
+#include "khmer/_cpy_subsetpartition.hh"
+#include "khmer/_cpy_readparsers.hh"
+
+#include <vector>
+#include "oxli/oxli.hh"
+#include "oxli/kmer_hash.hh"
+#include "oxli/read_parsers.hh"
+#include "oxli/assembler.hh"
+#include "oxli/traversal.hh"
+
+using namespace oxli;
+using namespace oxli::read_parsers;
+
+namespace khmer {
+
+PyTypeObject khmer_KHashgraph_Type
 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashgraph_Object")
 = {
     PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
@@ -62,45 +43,311 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashgraph_Object")
     "hashgraph object"            /* tp_doc */
 };
 
-//
-// Method definitions
-//
 
-static
-PyObject *
-hashgraph_find_high_degree_nodes(khmer_KHashgraph_Object * me, PyObject * args)
-{
-    Hashgraph * hashgraph = me->hashgraph;
-
-    const char * long_str;
-
-    if (!PyArg_ParseTuple(args, "s", &long_str)) {
-        return NULL;
-    }
-
-    if (strlen(long_str) < hashgraph->ksize()) {
-        PyErr_SetString(PyExc_ValueError,
-                        "string length must >= the hashgraph k-mer size");
-        return NULL;
-    }
+PyMethodDef khmer_hashgraph_methods[] = {
+    //
+    // graph/traversal functionality
+    //
 
-    SeenSet * hashes = new SeenSet;
-    hashgraph->find_high_degree_nodes(long_str, *hashes);
+    {
+        "neighbors",
+        (PyCFunction)hashgraph_neighbors, METH_VARARGS,
+        "Get a list of neighbor nodes for this k-mer.",
+    },
+    {
+        "calc_connected_graph_size",
+        (PyCFunction)hashgraph_calc_connected_graph_size, METH_VARARGS, ""
+    },
+    {
+        "kmer_degree",
+        (PyCFunction)hashgraph_kmer_degree, METH_VARARGS,
+        "Calculate the number of immediate neighbors this k-mer has in "
+        "the graph."
+    },
+    {
+        "count_kmers_within_radius",
+        (PyCFunction)hashgraph_count_kmers_within_radius, METH_VARARGS,
+        "Calculate the number of neighbors with given radius in the graph."
+    },
+    {
+        "find_high_degree_nodes",
+        (PyCFunction)hashgraph_find_high_degree_nodes, METH_VARARGS,
+        "Examine the given sequence for degree > 2 nodes and add to  "
+        "list; used in graph contraction.",
+    },
+    {
+        "traverse_linear_path",
+        (PyCFunction)hashgraph_traverse_linear_path, METH_VARARGS,
+        "Traverse the path through the graph starting with the given "
+        "k-mer and avoiding high-degree nodes, finding (and returning) "
+        "traversed k-mers and any encountered high-degree nodes.",
+    },
+    {
+        "assemble_linear_path",
+        (PyCFunction)hashgraph_assemble_linear_path, METH_VARARGS,
+        "Assemble a purely linear path starting with the given "
+        "k-mer, returning traversed k-mers and any encountered high-degree "
+        "nodes.",
+    },
 
-    khmer_HashSet_Object * o;
-    o = create_HashSet_Object(hashes, hashgraph->ksize());
+    //
+    // tagging / sparse graph functionality
+    //
 
-    return (PyObject *) o;
-}
+    {
+        "consume_and_tag",
+        (PyCFunction)hashgraph_consume_and_tag, METH_VARARGS,
+        "Consume a sequence and tag it."
+    },
+    {
+        "get_tags_and_positions",
+        (PyCFunction)hashgraph_get_tags_and_positions, METH_VARARGS,
+        "Retrieve tags and their positions in a sequence."
+    },
+    {
+        "find_all_tags_list",
+        (PyCFunction)hashgraph_find_all_tags_list, METH_VARARGS,
+        "Find all tags within range of the given k-mer, return as list"
+    },
+    {
+        "consume_seqfile_and_tag",
+        (PyCFunction)hashgraph_consume_seqfile_and_tag, METH_VARARGS,
+        "Consume all sequences in a FASTA/FASTQ file and tag the resulting "
+        "graph."
+    },
+    {
+        "extract_unique_paths",
+        (PyCFunction)hashgraph_extract_unique_paths, METH_VARARGS,
+        "@CTB remove."
+    },
+    {
+        "print_tagset",
+        (PyCFunction)hashgraph_print_tagset, METH_VARARGS,
+        "Print out all of the tags."
+    },
+    {
+        "add_tag",
+        (PyCFunction)hashgraph_add_tag, METH_VARARGS,
+        "Add a k-mer to the tagset."
+    },
+    {
+        "get_tagset",
+        (PyCFunction)hashgraph_get_tagset, METH_VARARGS,
+        "Get all tagged k-mers as DNA strings."
+    },
+    {
+        "load_tagset",
+        (PyCFunction)hashgraph_load_tagset, METH_VARARGS,
+        "Load tags from a file."
+    },
+    {
+        "save_tagset",
+        (PyCFunction)hashgraph_save_tagset, METH_VARARGS,
+        "Save tags to a file."
+    },
+    {
+        "n_tags",
+        (PyCFunction)hashgraph_n_tags, METH_VARARGS,
+        "Return the count of all tags."
+    },
+    {
+        "divide_tags_into_subsets",
+        (PyCFunction)hashgraph_divide_tags_into_subsets, METH_VARARGS,
+        "Divide tags equally up into subsets of given size."
+    },
+    {
+        "_get_tag_density",
+        (PyCFunction)hashgraph__get_tag_density, METH_VARARGS,
+        "Get the tagging density."
+    },
+    {
+        "_set_tag_density",
+        (PyCFunction)hashgraph__set_tag_density, METH_VARARGS,
+        "Set the tagging density."
+    },
 
-static
-PyObject *
-hashgraph_neighbors(khmer_KHashgraph_Object * me, PyObject * args)
-{
-    Hashgraph * hashgraph = me->hashgraph;
-    PyObject * val_obj;
+    //
+    // partitioning
+    //
+    {
+        "do_subset_partition",
+        (PyCFunction)hashgraph_do_subset_partition, METH_VARARGS,
+        "Partition the graph starting from a given subset of tags."
+    },
+    {
+        "find_all_tags",
+        (PyCFunction)hashgraph_find_all_tags, METH_VARARGS,
+        "Starting from the given k-mer, find all closely connected tags."
+    },
+    {
+        "assign_partition_id",
+        (PyCFunction)hashgraph_assign_partition_id, METH_VARARGS,
+        "Assign a partition ID to a given tag."
+    },
+    {
+        "output_partitions",
+        (PyCFunction)hashgraph_output_partitions, METH_VARARGS,
+        "Write out sequences in given filename to another file, annotating "
+        "with partition IDs."
+    },
+    {
+        "load_partitionmap",
+        (PyCFunction)hashgraph_load_partitionmap, METH_VARARGS,
+        "Load a partitionmap for a given subset."
+    },
+    {
+        "save_partitionmap",
+        (PyCFunction)hashgraph_save_partitionmap, METH_VARARGS,
+        "Save a partitionmap for the given subset."
+    },
+    {
+        "_validate_partitionmap",
+        (PyCFunction)hashgraph__validate_partitionmap, METH_VARARGS,
+        "Run internal validation checks."
+    },
+    {
+        "consume_seqfile_and_tag_with_reads_parser",
+        (PyCFunction)hashgraph_consume_seqfile_and_tag_with_reads_parser,
+        METH_VARARGS,
+        "Count all k-mers using the given reads parser"
+    },
+    {
+        "consume_partitioned_fasta",
+        (PyCFunction)hashgraph_consume_partitioned_fasta, METH_VARARGS,
+        "Count all k-mers in a given file"
+    },
+    {
+        "merge_subset",
+        (PyCFunction)hashgraph_merge_subset, METH_VARARGS,
+        "Merge the given subset into this one."
+    },
+    {
+        "merge_subset_from_disk",
+        (PyCFunction)hashgraph_merge_from_disk, METH_VARARGS,
+        "Merge the given subset (filename) into this one."
+    },
+    {
+        "count_partitions",
+        (PyCFunction)hashgraph_count_partitions, METH_VARARGS,
+        "Count the number of partitions in the master partitionmap."
+    },
+    {
+        "subset_count_partitions",
+        (PyCFunction)hashgraph_subset_count_partitions, METH_VARARGS,
+        "Count the number of partitions in this subset partitionmap."
+    },
+    {
+        "subset_partition_size_distribution",
+        (PyCFunction)hashgraph_subset_partition_size_distribution,
+        METH_VARARGS,
+        "Get the size distribution of partitions in this subset."
+    },
+    {
+        "save_subset_partitionmap",
+        (PyCFunction)hashgraph_save_subset_partitionmap, METH_VARARGS,
+        "Save the partition map for this subset."
+    },
+    {
+        "load_subset_partitionmap",
+        (PyCFunction)hashgraph_load_subset_partitionmap, METH_VARARGS,
+        "Save the partition map for this subset."
+    },
+    {
+        "_validate_subset_partitionmap",
+        (PyCFunction)hashgraph__validate_subset_partitionmap, METH_VARARGS,
+        "Run internal validation checks on this subset."
+    },
+    {
+        "set_partition_id",
+        (PyCFunction)hashgraph_set_partition_id, METH_VARARGS,
+        "Set the partition ID for this tag."
+    },
+    {
+        "join_partitions",
+        (PyCFunction)hashgraph_join_partitions, METH_VARARGS,
+        "Join the partitions of these two tags."
+    },
+    {
+        "get_partition_id",
+        (PyCFunction)hashgraph_get_partition_id, METH_VARARGS,
+        "Get the partition ID of this tag."
+    },
+    {
+        "repartition_largest_partition",
+        (PyCFunction)hashgraph_repartition_largest_partition, METH_VARARGS,
+        "Repartition the largest partition (in the face of stop tags)."
+    },
 
-    if (!PyArg_ParseTuple(args, "O", &val_obj)) {
+    // stop tags
+    {
+        "load_stop_tags",
+        (PyCFunction)hashgraph_load_stop_tags, METH_VARARGS,
+        "Load the set of stop tags."
+    },
+    {
+        "save_stop_tags",
+        (PyCFunction)hashgraph_save_stop_tags, METH_VARARGS,
+        "Save the set of stop tags."
+    },
+    {
+        "print_stop_tags",
+        (PyCFunction)hashgraph_print_stop_tags, METH_VARARGS,
+        "Print out the set of stop tags."
+    },
+    {
+        "trim_on_stoptags",
+        (PyCFunction)hashgraph_trim_on_stoptags, METH_VARARGS,
+        "Trim the reads on the given stop tags."
+    },
+    {
+        "add_stop_tag",
+        (PyCFunction)hashgraph_add_stop_tag, METH_VARARGS,
+        "Add this k-mer as a stop tag."
+    },
+    {
+        "get_stop_tags",
+        (PyCFunction)hashgraph_get_stop_tags, METH_VARARGS,
+        "Return a DNA list of all of the stop tags."
+    },
+    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+
+
+PyObject *
+hashgraph_find_high_degree_nodes(khmer_KHashgraph_Object * me, PyObject * args)
+{
+    Hashgraph * hashgraph = me->hashgraph;
+
+    const char * long_str;
+
+    if (!PyArg_ParseTuple(args, "s", &long_str)) {
+        return NULL;
+    }
+
+    if (strlen(long_str) < hashgraph->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashgraph k-mer size");
+        return NULL;
+    }
+
+    SeenSet * hashes = new SeenSet;
+    hashgraph->find_high_degree_nodes(long_str, *hashes);
+
+    khmer_HashSet_Object * o;
+    o = create_HashSet_Object(hashes, hashgraph->ksize());
+
+    return (PyObject *) o;
+}
+
+
+PyObject *
+hashgraph_neighbors(khmer_KHashgraph_Object * me, PyObject * args)
+{
+    Hashgraph * hashgraph = me->hashgraph;
+    PyObject * val_obj;
+
+    if (!PyArg_ParseTuple(args, "O", &val_obj)) {
         return NULL;
     }
 
@@ -131,7 +378,7 @@ hashgraph_neighbors(khmer_KHashgraph_Object * me, PyObject * args)
     return x;
 }
 
-static
+
 PyObject *
 hashgraph_traverse_linear_path(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -171,7 +418,7 @@ hashgraph_traverse_linear_path(khmer_KHashgraph_Object * me, PyObject * args)
     return ret;
 }
 
-static
+
 PyObject *
 hashgraph_assemble_linear_path(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -203,7 +450,7 @@ hashgraph_assemble_linear_path(khmer_KHashgraph_Object * me, PyObject * args)
     return ret;
 }
 
-static
+
 PyObject *
 hashgraph_n_tags(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -216,7 +463,7 @@ hashgraph_n_tags(khmer_KHashgraph_Object * me, PyObject * args)
     return PyLong_FromSize_t(hashgraph->n_tags());
 }
 
-static
+
 PyObject *
 hashgraph_print_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -233,7 +480,7 @@ hashgraph_print_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_print_tagset(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -250,7 +497,7 @@ hashgraph_print_tagset(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_load_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -271,7 +518,7 @@ hashgraph_load_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->load_stop_tags(filename, clear_tags);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -280,7 +527,7 @@ hashgraph_load_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
 }
 
 
-static
+
 PyObject *
 hashgraph_save_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -294,7 +541,7 @@ hashgraph_save_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->save_stop_tags(filename);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -302,11 +549,49 @@ hashgraph_save_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static PyObject * hashgraph_repartition_largest_partition(
-    khmer_KHashgraph_Object * me,
-    PyObject * args);
+// PyObject * hashgraph_repartition_largest_partition(
+//    khmer_KHashgraph_Object * me,
+//    PyObject * args);
+
+
+PyObject *
+hashgraph_repartition_largest_partition(khmer_KHashgraph_Object * me,
+                                        PyObject * args)
+{
+    Hashgraph * hashgraph = me->hashgraph;
+    khmer_KCountgraph_Object * countgraph_o = NULL;
+    PyObject * subset_o = NULL;
+    SubsetPartition * subset_p;
+    unsigned int distance, threshold, frequency;
+
+    if (!PyArg_ParseTuple(args, "OO!III",
+                          &subset_o,
+                          &khmer_KCountgraph_Type, &countgraph_o,
+                          &distance, &threshold, &frequency)) {
+        return NULL;
+    }
+
+    if (PyObject_TypeCheck(subset_o, &khmer_KSubsetPartition_Type)) {
+        subset_p = ((khmer_KSubsetPartition_Object *) subset_o)->subset;
+    } else {
+        subset_p = hashgraph->partition;
+    }
+
+    Countgraph * countgraph = countgraph_o->countgraph;
+
+    unsigned long next_largest;
+    try {
+        next_largest = subset_p->repartition_largest_partition(distance,
+                       threshold, frequency, *countgraph);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_RuntimeError, e.what());
+        return NULL;
+    }
+
+    return PyLong_FromLong(next_largest);
+}
+
 
-static
 PyObject *
 hashgraph_calc_connected_graph_size(khmer_KHashgraph_Object * me,
                                     PyObject * args)
@@ -337,7 +622,7 @@ hashgraph_calc_connected_graph_size(khmer_KHashgraph_Object * me,
     return PyLong_FromUnsignedLongLong(size);
 }
 
-static
+
 PyObject *
 hashgraph_kmer_degree(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -352,7 +637,7 @@ hashgraph_kmer_degree(khmer_KHashgraph_Object * me, PyObject * args)
     return PyLong_FromLong(hashgraph->kmer_degree(kmer_s));
 }
 
-static
+
 PyObject *
 hashgraph_trim_on_stoptags(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -381,7 +666,7 @@ hashgraph_trim_on_stoptags(khmer_KHashgraph_Object * me, PyObject * args)
     return ret;
 }
 
-static
+
 PyObject *
 hashgraph_do_subset_partition(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -441,7 +726,7 @@ hashgraph_do_subset_partition(khmer_KHashgraph_Object * me, PyObject * args)
 }
 
 
-static
+
 PyObject *
 hashgraph_merge_subset(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -460,7 +745,7 @@ hashgraph_merge_subset(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_merge_from_disk(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -473,7 +758,7 @@ hashgraph_merge_from_disk(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->partition->merge_from_disk(filename);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -481,16 +766,16 @@ hashgraph_merge_from_disk(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_consume_seqfile_and_tag_with_reads_parser(khmer_KHashgraph_Object * me,
         PyObject * args)
 {
     Hashgraph * hashgraph = me->hashgraph;
 
-    python::khmer_ReadParser_Object * rparser_obj = NULL;
+    khmer_ReadParser_Object * rparser_obj = NULL;
 
-    if (!PyArg_ParseTuple( args, "O!", &python::khmer_ReadParser_Type,
+    if (!PyArg_ParseTuple( args, "O!", &khmer_ReadParser_Type,
                            &rparser_obj)) {
         return NULL;
     }
@@ -507,10 +792,10 @@ hashgraph_consume_seqfile_and_tag_with_reads_parser(khmer_KHashgraph_Object * me
     Py_BEGIN_ALLOW_THREADS
     try {
         hashgraph->consume_seqfile_and_tag<FastxReader>(rparser, total_reads, n_consumed);
-    } catch (khmer_file_exception &exc) {
+    } catch (oxli_file_exception &exc) {
         exc_string = exc.what();
         file_exception = exc_string.c_str();
-    } catch (khmer_value_exception &exc) {
+    } catch (oxli_value_exception &exc) {
         exc_string = exc.what();
         value_exception = exc_string.c_str();
     }
@@ -527,7 +812,7 @@ hashgraph_consume_seqfile_and_tag_with_reads_parser(khmer_KHashgraph_Object * me
     return Py_BuildValue("IK", total_reads, n_consumed);
 }
 
-static
+
 PyObject *
 hashgraph_consume_partitioned_fasta(khmer_KHashgraph_Object * me,
                                     PyObject * args)
@@ -547,10 +832,10 @@ hashgraph_consume_partitioned_fasta(khmer_KHashgraph_Object * me,
 
     try {
         hashgraph->consume_partitioned_fasta<FastxReader>(filename, total_reads, n_consumed);
-    } catch (khmer_file_exception &exc) {
+    } catch (oxli_file_exception &exc) {
         PyErr_SetString(PyExc_OSError, exc.what());
         return NULL;
-    } catch (khmer_value_exception &exc) {
+    } catch (oxli_value_exception &exc) {
         PyErr_SetString(PyExc_ValueError, exc.what());
         return NULL;
     }
@@ -558,7 +843,7 @@ hashgraph_consume_partitioned_fasta(khmer_KHashgraph_Object * me,
     return Py_BuildValue("IK", total_reads, n_consumed);
 }
 
-static
+
 PyObject *
 hashgraph_find_all_tags(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -601,7 +886,7 @@ hashgraph_find_all_tags(khmer_KHashgraph_Object * me, PyObject * args)
     return (PyObject*)ppi_obj;
 }
 
-static
+
 PyObject *
 hashgraph_assign_partition_id(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -622,7 +907,7 @@ hashgraph_assign_partition_id(khmer_KHashgraph_Object * me, PyObject * args)
     return PyLong_FromLong(p);
 }
 
-static
+
 PyObject *
 hashgraph_add_tag(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -639,7 +924,7 @@ hashgraph_add_tag(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_add_stop_tag(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -656,7 +941,7 @@ hashgraph_add_stop_tag(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_get_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -680,7 +965,7 @@ hashgraph_get_stop_tags(khmer_KHashgraph_Object * me, PyObject * args)
     return x;
 }
 
-static
+
 PyObject *
 hashgraph_get_tagset(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -704,7 +989,7 @@ hashgraph_get_tagset(khmer_KHashgraph_Object * me, PyObject * args)
     return x;
 }
 
-static
+
 PyObject *
 hashgraph_output_partitions(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -731,10 +1016,10 @@ hashgraph_output_partitions(khmer_KHashgraph_Object * me, PyObject * args)
         n_partitions = subset_p->output_partitioned_file(filename,
                        output,
                        output_unassigned);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
-    } catch (khmer_value_exception &exc) {
+    } catch (oxli_value_exception &exc) {
         PyErr_SetString(PyExc_ValueError, exc.what());
         return NULL;
     }
@@ -742,7 +1027,7 @@ hashgraph_output_partitions(khmer_KHashgraph_Object * me, PyObject * args)
     return PyLong_FromLong(n_partitions);
 }
 
-static
+
 PyObject *
 hashgraph_save_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -756,7 +1041,7 @@ hashgraph_save_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->partition->save_partitionmap(filename);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -764,7 +1049,7 @@ hashgraph_save_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_load_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -778,7 +1063,7 @@ hashgraph_load_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->partition->load_partitionmap(filename);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -786,7 +1071,7 @@ hashgraph_load_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph__validate_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -801,7 +1086,7 @@ hashgraph__validate_partitionmap(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_count_partitions(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -818,7 +1103,7 @@ hashgraph_count_partitions(khmer_KHashgraph_Object * me, PyObject * args)
                          (Py_ssize_t) n_unassigned);
 }
 
-static
+
 PyObject *
 hashgraph_subset_count_partitions(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -837,7 +1122,7 @@ hashgraph_subset_count_partitions(khmer_KHashgraph_Object * me, PyObject * args)
                          (Py_ssize_t) n_unassigned);
 }
 
-static
+
 PyObject *
 hashgraph_subset_partition_size_distribution(khmer_KHashgraph_Object * me,
         PyObject * args)
@@ -871,7 +1156,7 @@ hashgraph_subset_partition_size_distribution(khmer_KHashgraph_Object * me,
         PyList_SET_ITEM(x, i, value);
     }
     if (!(i == d.size())) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
     PyObject * returnValue = Py_BuildValue("NI", x, n_unassigned);
@@ -882,7 +1167,7 @@ hashgraph_subset_partition_size_distribution(khmer_KHashgraph_Object * me,
     return returnValue;
 }
 
-static
+
 PyObject *
 hashgraph_load_tagset(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -902,7 +1187,7 @@ hashgraph_load_tagset(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->load_tagset(filename, clear_tags);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -910,7 +1195,7 @@ hashgraph_load_tagset(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_save_tagset(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -924,7 +1209,7 @@ hashgraph_save_tagset(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->save_tagset(filename);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -932,7 +1217,7 @@ hashgraph_save_tagset(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_save_subset_partitionmap(khmer_KHashgraph_Object * me,
                                    PyObject * args)
@@ -951,7 +1236,7 @@ hashgraph_save_subset_partitionmap(khmer_KHashgraph_Object * me,
 
     try {
         subset_p->save_partitionmap(filename);
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         PyErr_SetString(PyExc_OSError, e.what());
         return NULL;
     }
@@ -961,7 +1246,7 @@ hashgraph_save_subset_partitionmap(khmer_KHashgraph_Object * me,
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_load_subset_partitionmap(khmer_KHashgraph_Object * me,
                                    PyObject * args)
@@ -987,7 +1272,7 @@ hashgraph_load_subset_partitionmap(khmer_KHashgraph_Object * me,
     Py_BEGIN_ALLOW_THREADS
     try {
         subset_p->load_partitionmap(filename);
-    } catch (khmer_file_exception &exc) {
+    } catch (oxli_file_exception &exc) {
         exc_string = exc.what();
         file_exception = exc_string.c_str();
     }
@@ -1012,7 +1297,7 @@ hashgraph_load_subset_partitionmap(khmer_KHashgraph_Object * me,
     return (PyObject *) subset_obj;
 }
 
-static
+
 PyObject *
 hashgraph__set_tag_density(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1028,7 +1313,7 @@ hashgraph__set_tag_density(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph__get_tag_density(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1043,7 +1328,7 @@ hashgraph__get_tag_density(khmer_KHashgraph_Object * me, PyObject * args)
     return PyLong_FromLong(d);
 }
 
-static
+
 PyObject *
 hashgraph__validate_subset_partitionmap(khmer_KHashgraph_Object * me,
                                         PyObject * args)
@@ -1062,7 +1347,7 @@ hashgraph__validate_subset_partitionmap(khmer_KHashgraph_Object * me,
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_set_partition_id(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1080,7 +1365,7 @@ hashgraph_set_partition_id(khmer_KHashgraph_Object * me, PyObject * args)
     Py_RETURN_NONE;
 }
 
-static
+
 PyObject *
 hashgraph_join_partitions(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1097,7 +1382,7 @@ hashgraph_join_partitions(khmer_KHashgraph_Object * me, PyObject * args)
     return PyLong_FromLong(p1);
 }
 
-static
+
 PyObject *
 hashgraph_get_partition_id(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1115,7 +1400,7 @@ hashgraph_get_partition_id(khmer_KHashgraph_Object * me, PyObject * args)
     return PyLong_FromLong(partition_id);
 }
 
-static
+
 PyObject *
 hashgraph_divide_tags_into_subsets(khmer_KHashgraph_Object * me,
                                    PyObject * args)
@@ -1136,7 +1421,7 @@ hashgraph_divide_tags_into_subsets(khmer_KHashgraph_Object * me,
     return x;
 }
 
-static
+
 PyObject *
 hashgraph_count_kmers_within_radius(khmer_KHashgraph_Object * me,
                                     PyObject * args)
@@ -1164,7 +1449,7 @@ hashgraph_count_kmers_within_radius(khmer_KHashgraph_Object * me,
     return PyLong_FromUnsignedLong(n);
 }
 
-static
+
 PyObject *
 hashgraph_extract_unique_paths(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1192,7 +1477,7 @@ hashgraph_extract_unique_paths(khmer_KHashgraph_Object * me, PyObject * args)
     return x;
 }
 
-static
+
 PyObject *
 hashgraph_consume_and_tag(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1214,7 +1499,7 @@ hashgraph_consume_and_tag(khmer_KHashgraph_Object * me, PyObject * args)
     return Py_BuildValue("K", n_consumed);
 }
 
-static
+
 PyObject *
 hashgraph_get_tags_and_positions(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1254,7 +1539,7 @@ hashgraph_get_tags_and_positions(khmer_KHashgraph_Object * me, PyObject * args)
     return posns_list;
 }
 
-static
+
 PyObject *
 hashgraph_find_all_tags_list(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1288,7 +1573,7 @@ hashgraph_find_all_tags_list(khmer_KHashgraph_Object * me, PyObject * args)
     return x;
 }
 
-static
+
 PyObject *
 hashgraph_consume_seqfile_and_tag(khmer_KHashgraph_Object * me, PyObject * args)
 {
@@ -1307,10 +1592,10 @@ hashgraph_consume_seqfile_and_tag(khmer_KHashgraph_Object * me, PyObject * args)
 
     try {
         hashgraph->consume_seqfile_and_tag<FastxReader>(filename, total_reads, n_consumed);
-    } catch (khmer_file_exception &exc) {
+    } catch (oxli_file_exception &exc) {
         PyErr_SetString(PyExc_OSError, exc.what());
         return NULL;
-    } catch (khmer_value_exception &exc) {
+    } catch (oxli_value_exception &exc) {
         PyErr_SetString(PyExc_ValueError, exc.what());
         return NULL;
     }
@@ -1318,270 +1603,4 @@ hashgraph_consume_seqfile_and_tag(khmer_KHashgraph_Object * me, PyObject * args)
     return Py_BuildValue("IK", total_reads, n_consumed);
 }
 
-static PyMethodDef khmer_hashgraph_methods[] = {
-    //
-    // graph/traversal functionality
-    //
-
-    {
-        "neighbors",
-        (PyCFunction)hashgraph_neighbors, METH_VARARGS,
-        "Get a list of neighbor nodes for this k-mer.",
-    },
-    {
-        "calc_connected_graph_size",
-        (PyCFunction)hashgraph_calc_connected_graph_size, METH_VARARGS, ""
-    },
-    {
-        "kmer_degree",
-        (PyCFunction)hashgraph_kmer_degree, METH_VARARGS,
-        "Calculate the number of immediate neighbors this k-mer has in "
-        "the graph."
-    },
-    {
-        "count_kmers_within_radius",
-        (PyCFunction)hashgraph_count_kmers_within_radius, METH_VARARGS,
-        "Calculate the number of neighbors with given radius in the graph."
-    },
-    {
-        "find_high_degree_nodes",
-        (PyCFunction)hashgraph_find_high_degree_nodes, METH_VARARGS,
-        "Examine the given sequence for degree > 2 nodes and add to  "
-        "list; used in graph contraction.",
-    },
-    {
-        "traverse_linear_path",
-        (PyCFunction)hashgraph_traverse_linear_path, METH_VARARGS,
-        "Traverse the path through the graph starting with the given "
-        "k-mer and avoiding high-degree nodes, finding (and returning) "
-        "traversed k-mers and any encountered high-degree nodes.",
-    },
-    {
-        "assemble_linear_path",
-        (PyCFunction)hashgraph_assemble_linear_path, METH_VARARGS,
-        "Assemble a purely linear path starting with the given "
-        "k-mer, returning traversed k-mers and any encountered high-degree "
-        "nodes.",
-    },
-
-    //
-    // tagging / sparse graph functionality
-    //
-
-    {
-        "consume_and_tag",
-        (PyCFunction)hashgraph_consume_and_tag, METH_VARARGS,
-        "Consume a sequence and tag it."
-    },
-    {
-        "get_tags_and_positions",
-        (PyCFunction)hashgraph_get_tags_and_positions, METH_VARARGS,
-        "Retrieve tags and their positions in a sequence."
-    },
-    {
-        "find_all_tags_list",
-        (PyCFunction)hashgraph_find_all_tags_list, METH_VARARGS,
-        "Find all tags within range of the given k-mer, return as list"
-    },
-    {
-        "consume_seqfile_and_tag",
-        (PyCFunction)hashgraph_consume_seqfile_and_tag, METH_VARARGS,
-        "Consume all sequences in a FASTA/FASTQ file and tag the resulting "
-        "graph."
-    },
-    {
-        "extract_unique_paths",
-        (PyCFunction)hashgraph_extract_unique_paths, METH_VARARGS,
-        "@CTB remove."
-    },
-    {
-        "print_tagset",
-        (PyCFunction)hashgraph_print_tagset, METH_VARARGS,
-        "Print out all of the tags."
-    },
-    {
-        "add_tag",
-        (PyCFunction)hashgraph_add_tag, METH_VARARGS,
-        "Add a k-mer to the tagset."
-    },
-    {
-        "get_tagset",
-        (PyCFunction)hashgraph_get_tagset, METH_VARARGS,
-        "Get all tagged k-mers as DNA strings."
-    },
-    {
-        "load_tagset",
-        (PyCFunction)hashgraph_load_tagset, METH_VARARGS,
-        "Load tags from a file."
-    },
-    {
-        "save_tagset",
-        (PyCFunction)hashgraph_save_tagset, METH_VARARGS,
-        "Save tags to a file."
-    },
-    {
-        "n_tags",
-        (PyCFunction)hashgraph_n_tags, METH_VARARGS,
-        "Return the count of all tags."
-    },
-    {
-        "divide_tags_into_subsets",
-        (PyCFunction)hashgraph_divide_tags_into_subsets, METH_VARARGS,
-        "Divide tags equally up into subsets of given size."
-    },
-    {
-        "_get_tag_density",
-        (PyCFunction)hashgraph__get_tag_density, METH_VARARGS,
-        "Get the tagging density."
-    },
-    {
-        "_set_tag_density",
-        (PyCFunction)hashgraph__set_tag_density, METH_VARARGS,
-        "Set the tagging density."
-    },
-
-    //
-    // partitioning
-    //
-    {
-        "do_subset_partition",
-        (PyCFunction)hashgraph_do_subset_partition, METH_VARARGS,
-        "Partition the graph starting from a given subset of tags."
-    },
-    {
-        "find_all_tags",
-        (PyCFunction)hashgraph_find_all_tags, METH_VARARGS,
-        "Starting from the given k-mer, find all closely connected tags."
-    },
-    {
-        "assign_partition_id",
-        (PyCFunction)hashgraph_assign_partition_id, METH_VARARGS,
-        "Assign a partition ID to a given tag."
-    },
-    {
-        "output_partitions",
-        (PyCFunction)hashgraph_output_partitions, METH_VARARGS,
-        "Write out sequences in given filename to another file, annotating "
-        "with partition IDs."
-    },
-    {
-        "load_partitionmap",
-        (PyCFunction)hashgraph_load_partitionmap, METH_VARARGS,
-        "Load a partitionmap for a given subset."
-    },
-    {
-        "save_partitionmap",
-        (PyCFunction)hashgraph_save_partitionmap, METH_VARARGS,
-        "Save a partitionmap for the given subset."
-    },
-    {
-        "_validate_partitionmap",
-        (PyCFunction)hashgraph__validate_partitionmap, METH_VARARGS,
-        "Run internal validation checks."
-    },
-    {
-        "consume_seqfile_and_tag_with_reads_parser",
-        (PyCFunction)hashgraph_consume_seqfile_and_tag_with_reads_parser,
-        METH_VARARGS,
-        "Count all k-mers using the given reads parser"
-    },
-    {
-        "consume_partitioned_fasta",
-        (PyCFunction)hashgraph_consume_partitioned_fasta, METH_VARARGS,
-        "Count all k-mers in a given file"
-    },
-    {
-        "merge_subset",
-        (PyCFunction)hashgraph_merge_subset, METH_VARARGS,
-        "Merge the given subset into this one."
-    },
-    {
-        "merge_subset_from_disk",
-        (PyCFunction)hashgraph_merge_from_disk, METH_VARARGS,
-        "Merge the given subset (filename) into this one."
-    },
-    {
-        "count_partitions",
-        (PyCFunction)hashgraph_count_partitions, METH_VARARGS,
-        "Count the number of partitions in the master partitionmap."
-    },
-    {
-        "subset_count_partitions",
-        (PyCFunction)hashgraph_subset_count_partitions, METH_VARARGS,
-        "Count the number of partitions in this subset partitionmap."
-    },
-    {
-        "subset_partition_size_distribution",
-        (PyCFunction)hashgraph_subset_partition_size_distribution,
-        METH_VARARGS,
-        "Get the size distribution of partitions in this subset."
-    },
-    {
-        "save_subset_partitionmap",
-        (PyCFunction)hashgraph_save_subset_partitionmap, METH_VARARGS,
-        "Save the partition map for this subset."
-    },
-    {
-        "load_subset_partitionmap",
-        (PyCFunction)hashgraph_load_subset_partitionmap, METH_VARARGS,
-        "Save the partition map for this subset."
-    },
-    {
-        "_validate_subset_partitionmap",
-        (PyCFunction)hashgraph__validate_subset_partitionmap, METH_VARARGS,
-        "Run internal validation checks on this subset."
-    },
-    {
-        "set_partition_id",
-        (PyCFunction)hashgraph_set_partition_id, METH_VARARGS,
-        "Set the partition ID for this tag."
-    },
-    {
-        "join_partitions",
-        (PyCFunction)hashgraph_join_partitions, METH_VARARGS,
-        "Join the partitions of these two tags."
-    },
-    {
-        "get_partition_id",
-        (PyCFunction)hashgraph_get_partition_id, METH_VARARGS,
-        "Get the partition ID of this tag."
-    },
-    {
-        "repartition_largest_partition",
-        (PyCFunction)hashgraph_repartition_largest_partition, METH_VARARGS,
-        "Repartition the largest partition (in the face of stop tags)."
-    },
-
-    // stop tags
-    {
-        "load_stop_tags",
-        (PyCFunction)hashgraph_load_stop_tags, METH_VARARGS,
-        "Load the set of stop tags."
-    },
-    {
-        "save_stop_tags",
-        (PyCFunction)hashgraph_save_stop_tags, METH_VARARGS,
-        "Save the set of stop tags."
-    },
-    {
-        "print_stop_tags",
-        (PyCFunction)hashgraph_print_stop_tags, METH_VARARGS,
-        "Print out the set of stop tags."
-    },
-    {
-        "trim_on_stoptags",
-        (PyCFunction)hashgraph_trim_on_stoptags, METH_VARARGS,
-        "Trim the reads on the given stop tags."
-    },
-    {
-        "add_stop_tag",
-        (PyCFunction)hashgraph_add_stop_tag, METH_VARARGS,
-        "Add this k-mer as a stop tag."
-    },
-    {
-        "get_stop_tags",
-        (PyCFunction)hashgraph_get_stop_tags, METH_VARARGS,
-        "Return a DNA list of all of the stop tags."
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
+}
diff --git a/src/khmer/_cpy_hashset.cc b/src/khmer/_cpy_hashset.cc
new file mode 100644
index 0000000..a41eaa3
--- /dev/null
+++ b/src/khmer/_cpy_hashset.cc
@@ -0,0 +1,355 @@
+#include "khmer/_cpy_hashset.hh"
+#include "oxli/hashgraph.hh"
+
+using namespace oxli;
+
+namespace khmer {
+
+
+PyTypeObject _HashSet_iter_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
+    "_khmer.HashSet_iter",                /* tp_name */
+    sizeof(_HashSet_iterobj),             /* tp_basicsize */
+    0,                                    /* tp_itemsize */
+    (destructor)_HashSet_iter_dealloc,    /* tp_dealloc */
+    0,                                    /* tp_print */
+    0,                                    /* tp_getattr */
+    0,                                    /* tp_setattr */
+    0,                                    /* tp_compare */
+    0,                                    /* tp_repr */
+    0,                                    /* tp_as_number */
+    0,                                    /* tp_as_sequence */
+    0,                                    /* tp_as_mapping */
+    0,                                    /* tp_hash */
+    0,                                    /* tp_call */
+    0,                                    /* tp_str */
+    0,                                    /* tp_getattro */
+    0,                                    /* tp_setattro */
+    0,                                    /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /* tp_flags */
+    "iterator object for HashSet objects.", /* tp_doc */
+    0,                                    /* tp_traverse */
+    0,                                    /* tp_clear */
+    0,                                    /* tp_richcompare */
+    0,                                    /* tp_weaklistoffset */
+    _HashSet_iter,                        /* tp_iter */
+    _HashSet_iternext,                    /* tp_iternext */
+    0,                                    /* tp_methods */
+    0,                                    /* tp_members */
+    0,                                    /* tp_getset */
+    0,                                    /* tp_base */
+    0,                                    /* tp_dict */
+    0,                                    /* tp_descr_get */
+    0,                                    /* tp_descr_set */
+    0,                                    /* tp_dictoffset */
+    0,                                    /* tp_init */
+    0,                                    /* tp_alloc */
+    0,                                    /* tp_new */
+};
+
+PyTypeObject khmer_HashSet_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
+    "_khmer.HashSet",                     /* tp_name */
+    sizeof(khmer_HashSet_Object),         /* tp_basicsize */
+    0,                                    /* tp_itemsize */
+    (destructor)khmer_HashSet_dealloc,    /* tp_dealloc */
+    0,                                    /* tp_print */
+    0,                                    /* tp_getattr */
+    0,                                    /* tp_setattr */
+    0,                                    /* tp_compare */
+    0,                                    /* tp_repr */
+    0,                                    /* tp_as_number */
+    khmer_HashSet_seqmethods,             /* tp_as_sequence */
+    0,                                    /* tp_as_mapping */
+    0,                                    /* tp_hash */
+    0,                                    /* tp_call */
+    0,                                    /* tp_str */
+    0,                                    /* tp_getattro */
+    0,                                    /* tp_setattro */
+    0,                                    /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /* tp_flags */
+    "Stores a set of hashed k-mers.",     /* tp_doc */
+    0,                                    /* tp_traverse */
+    0,                                    /* tp_clear */
+    0,                                    /* tp_richcompare */
+    0,                                    /* tp_weaklistoffset */
+    khmer_HashSet_iter,                   /* tp_iter */
+    0,                                    /* tp_iternext */
+    khmer_HashSet_methods,                /* tp_methods */
+    0,                                    /* tp_members */
+    0,                                    /* tp_getset */
+    0,                                    /* tp_base */
+    0,                                    /* tp_dict */
+    0,                                    /* tp_descr_get */
+    0,                                    /* tp_descr_set */
+    0,                                    /* tp_dictoffset */
+    0,                                    /* tp_init */
+    0,                                    /* tp_alloc */
+    khmer_HashSet_new,                    /* tp_new */
+};
+
+PyMethodDef khmer_HashSet_methods[] = {
+    {
+        "add",
+        (PyCFunction)hashset_add, METH_VARARGS,
+        "Add element to the HashSet."
+    },
+    {
+        "remove",
+        (PyCFunction)hashset_remove, METH_VARARGS,
+        "Remove an element from the HashSet."
+    },
+    {
+        "update",
+        (PyCFunction)hashset_update, METH_VARARGS,
+        "Add a list of elements to the HashSet."
+    },
+    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+PySequenceMethods khmer_HashSet_seqmethods[] = {
+    (lenfunc)khmer_HashSet_len, /* sq_length */
+    (binaryfunc)khmer_HashSet_concat,      /* sq_concat */
+    0,                          /* sq_repeat */
+    0,                          /* sq_item */
+    0,                          /* sq_slice */
+    0,                          /* sq_ass_item */
+    0,                          /* sq_ass_slice */
+    (objobjproc)khmer_HashSet_contains, /* sq_contains */
+    (binaryfunc)khmer_HashSet_concat_inplace,      /* sq_inplace_concat */
+    0                           /* sq_inplace_repeat */
+};
+
+
+void khmer_HashSet_dealloc(khmer_HashSet_Object * obj)
+{
+    delete obj->hashes;
+    obj->hashes = NULL;
+    obj->ksize = 0;
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+PyObject* khmer_HashSet_new(PyTypeObject * type, PyObject * args,
+                                   PyObject * kwds)
+{
+    khmer_HashSet_Object * self;
+
+    self = (khmer_HashSet_Object *)type->tp_alloc(type, 0);
+
+    if (self != NULL) {
+        PyObject * list_o = NULL;
+        WordLength k;
+        if (!PyArg_ParseTuple(args, "b|O!", &k, &PyList_Type, &list_o)) {
+            Py_DECREF(self);
+            return NULL;
+        }
+
+        try {
+            self->hashes = new SeenSet;
+            self->ksize = k;
+        } catch (std::bad_alloc &e) {
+            Py_DECREF(self);
+            return PyErr_NoMemory();
+        }
+
+        if (list_o) {
+            Py_ssize_t size = PyList_Size(list_o);
+            for (Py_ssize_t i = 0; i < size; i++) {
+                PyObject * item = PyList_GET_ITEM(list_o, i);
+                HashIntoType h;
+
+                if (!convert_PyObject_to_HashIntoType(item, h, self->ksize)) {
+                    return NULL;
+                }
+                self->hashes->insert(h);
+            }
+        }
+    }
+    return (PyObject *) self;
+}
+
+
+void
+_HashSet_iter_dealloc(_HashSet_iterobj * obj)
+{
+    delete obj->it;
+    obj->it = NULL;
+    Py_DECREF(obj->parent);
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+PyObject * _HashSet_iter(PyObject * self)
+{
+    Py_INCREF(self);
+    return self;
+}
+
+PyObject * _HashSet_iternext(PyObject * self)
+{
+    _HashSet_iterobj * iter_obj = (_HashSet_iterobj *) self;
+    SeenSet * hashes = iter_obj->parent->hashes;
+    if (*iter_obj->it != hashes->end()) {
+        PyObject * ret = nullptr;
+        convert_HashIntoType_to_PyObject((**iter_obj->it), &ret);
+        (*(iter_obj->it))++;
+        return ret;
+    }
+
+    PyErr_SetString(PyExc_StopIteration, "end of HashSet");
+    return NULL;
+}
+
+
+PyObject * khmer_HashSet_iter(PyObject * self)
+{
+    khmer_HashSet_Object * me = (khmer_HashSet_Object *) self;
+    _HashSet_iterobj * iter_obj = (_HashSet_iterobj *)
+                                  _HashSet_iter_Type.tp_alloc(&_HashSet_iter_Type, 0);
+    if (iter_obj != NULL) {
+        Py_INCREF(me);
+        iter_obj->parent = me;
+
+        iter_obj->it = new SeenSet::iterator;
+        *iter_obj->it = me->hashes->begin();
+    }
+    return (PyObject *) iter_obj;
+}
+
+int khmer_HashSet_len(khmer_HashSet_Object * o)
+{
+    return (Py_ssize_t) o->hashes->size();
+}
+
+PyObject * khmer_HashSet_concat(khmer_HashSet_Object * o,
+                                       khmer_HashSet_Object * o2)
+{
+    if (o->ksize != o2->ksize) {
+        PyErr_SetString(PyExc_ValueError,
+                        "cannot add HashSets with different ksizes");
+        return NULL;
+    }
+    khmer_HashSet_Object * no = create_HashSet_Object(new SeenSet,
+                                o->ksize);
+    no->hashes->insert(o->hashes->begin(), o->hashes->end());
+    no->hashes->insert(o2->hashes->begin(), o2->hashes->end());
+
+    return (PyObject *) no;
+}
+
+PyObject * khmer_HashSet_concat_inplace(khmer_HashSet_Object * o,
+        khmer_HashSet_Object * o2)
+{
+    if (o->ksize != o2->ksize) {
+        PyErr_SetString(PyExc_ValueError,
+                        "cannot add HashSets with different ksizes");
+        return NULL;
+    }
+    o->hashes->insert(o2->hashes->begin(), o2->hashes->end());
+
+    Py_INCREF(o);
+    return (PyObject *) o;
+}
+
+int khmer_HashSet_contains(khmer_HashSet_Object * o, PyObject * val)
+{
+    HashIntoType v;
+
+    if (convert_PyObject_to_HashIntoType(val, v, 0)) {
+        if (set_contains(*o->hashes, v)) {
+            return 1;
+        }
+    }
+    return 0;
+}
+
+PyObject *
+hashset_add(khmer_HashSet_Object * me, PyObject * args)
+{
+    PyObject * hash_obj;
+    HashIntoType h;
+    if (!PyArg_ParseTuple(args, "O", &hash_obj)) {
+        return NULL;
+    }
+
+    if (!convert_PyObject_to_HashIntoType(hash_obj, h, 0)) {
+        return NULL;
+    }
+    me->hashes->insert(h);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+PyObject *
+hashset_remove(khmer_HashSet_Object * me, PyObject * args)
+{
+    PyObject * hash_obj;
+    HashIntoType h;
+    if (!PyArg_ParseTuple(args, "O", &hash_obj)) {
+        return NULL;
+    }
+
+    if (!convert_PyObject_to_HashIntoType(hash_obj, h, 0)) {
+        return NULL;
+    }
+    SeenSet::iterator it = me->hashes->find(h);
+    if (it == me->hashes->end()) {
+        PyErr_SetString(PyExc_ValueError, "h not in list");
+        return NULL;
+    }
+    me->hashes->erase(it);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+PyObject *
+hashset_update(khmer_HashSet_Object * me, PyObject * args)
+{
+    PyObject * obj;
+    if (!PyArg_ParseTuple(args, "O", &obj)) {
+        return NULL;
+    }
+
+    PyObject * iterator = PyObject_GetIter(obj);
+    if (iterator == NULL) {
+        return NULL;
+    }
+    PyObject * item = PyIter_Next(iterator);
+    while(item) {
+        HashIntoType h;
+
+        if (!convert_PyObject_to_HashIntoType(item, h, 0)) {
+            PyErr_SetString(PyExc_ValueError, "unknown item type for update");
+            Py_DECREF(item);
+            return NULL;
+        }
+        me->hashes->insert(h);
+
+        Py_DECREF(item);
+        item = PyIter_Next(iterator);
+    }
+    Py_DECREF(iterator);
+    if (PyErr_Occurred()) {
+        return NULL;
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+khmer_HashSet_Object * create_HashSet_Object(SeenSet * h, WordLength k)
+{
+    khmer_HashSet_Object * self;
+
+    self = (khmer_HashSet_Object *)
+           khmer_HashSet_Type.tp_alloc(&khmer_HashSet_Type, 0);
+    if (self != NULL) {
+        self->hashes = h;
+        self->ksize = k;
+    }
+    return self;
+}
+
+}
diff --git a/src/khmer/_cpy_hashtable.cc b/src/khmer/_cpy_hashtable.cc
new file mode 100644
index 0000000..053a20b
--- /dev/null
+++ b/src/khmer/_cpy_hashtable.cc
@@ -0,0 +1,1016 @@
+#include "khmer/_cpy_hashtable.hh"
+#include "khmer/_cpy_nodegraph.hh"
+#include "khmer/_cpy_countgraph.hh"
+#include "khmer/_cpy_hashset.hh"
+#include "khmer/_cpy_readparsers.hh"
+
+using namespace oxli;
+using namespace oxli::read_parsers;
+
+namespace khmer {
+
+PyTypeObject khmer_KHashtable_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashtable_Object")
+= {
+    PyVarObject_HEAD_INIT(NULL, 0)       /* init & ob_size */
+    "_khmer.KHashtable   ",              /*tp_name*/
+    sizeof(khmer_KHashtable_Object),     /*tp_basicsize*/
+    0,                                   /*tp_itemsize*/
+    0,                                   /*tp_dealloc*/
+    0,                                   /*tp_print*/
+    0,                                   /*tp_getattr*/
+    0,                                   /*tp_setattr*/
+    0,                                   /*tp_compare*/
+    0,                                   /*tp_repr*/
+    0,                                   /*tp_as_number*/
+    0,                                   /*tp_as_sequence*/
+    0,                                   /*tp_as_mapping*/
+    0,                                   /*tp_hash */
+    0,                                   /*tp_call*/
+    0,                                   /*tp_str*/
+    0,                                   /*tp_getattro*/
+    0,                                   /*tp_setattro*/
+    0,                                   /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT,                  /*tp_flags*/
+    "base hashtable object",             /* tp_doc */
+    0,                                   /* tp_traverse */
+    0,                                   /* tp_clear */
+    0,                                   /* tp_richcompare */
+    0,                                   /* tp_weaklistoffset */
+    0,                                   /* tp_iter */
+    0,                                   /* tp_iternext */
+    khmer_hashtable_methods,             /* tp_methods */
+    0,                                   /* tp_members */
+    0,                                   /* tp_getset */
+    0,                                   /* tp_base */
+    0,                                   /* tp_dict */
+    0,                                   /* tp_descr_get */
+    0,                                   /* tp_descr_set */
+    0,                                   /* tp_dictoffset */
+    0,                                   /* tp_init */
+    0,                                   /* tp_alloc */
+    0,                                   /* tp_new */
+};
+
+
+PyMethodDef khmer_hashtable_methods[] = {
+    //
+    // Basic methods
+    //
+
+    {
+        "ksize",
+        (PyCFunction)hashtable_ksize, METH_VARARGS,
+        "Returns the k-mer size of this graph."
+    },
+    {
+        "hash",
+        (PyCFunction)hashtable_hash, METH_VARARGS,
+        "Returns the hash of this k-mer. For Nodetables and Counttables, this "
+        "function will fail if the supplied k-mer contains non-ACGT "
+        "characters."
+    },
+    {
+        "reverse_hash",
+        (PyCFunction)hashtable_reverse_hash, METH_VARARGS,
+        "Turns a k-mer hash back into a DNA k-mer, if possible."
+    },
+    {
+        "hashsizes",
+        (PyCFunction)hashtable_get_hashsizes, METH_VARARGS,
+        "" },
+    {
+        "n_unique_kmers",
+        (PyCFunction)hashtable_n_unique_kmers, METH_VARARGS,
+        "Count the number of unique kmers in this graph."
+    },
+    {
+        "n_occupied", (PyCFunction)hashtable_n_occupied, METH_VARARGS,
+        "Count the number of occupied bins."
+    },
+    {
+        "count",
+        (PyCFunction)hashtable_count, METH_VARARGS,
+        "Increment the count of this k-mer."
+    },
+    {
+        "add",
+        (PyCFunction)hashtable_count, METH_VARARGS,
+        "Increment the count of this k-mer. (Synonym for 'count'.)"
+    },
+    {
+        "consume",
+        (PyCFunction)hashtable_consume, METH_VARARGS,
+        "Increment the counts of all of the k-mers in the string."
+    },
+    {
+        "consume_seqfile",
+        (PyCFunction)hashtable_consume_seqfile, METH_VARARGS,
+        "Increment the counts of all the k-mers in the sequences in the "
+        "given file"
+    },
+    {
+        "consume_seqfile_banding",
+        (PyCFunction)hashtable_consume_seqfile_banding, METH_VARARGS,
+        "Consume sequences in k-mer banding mode"
+    },
+    {
+        "consume_seqfile_with_reads_parser",
+        (PyCFunction)hashtable_consume_seqfile_with_reads_parser, METH_VARARGS,
+        "Count all k-mers retrieved with this reads parser object."
+    },
+    {
+        "get",
+        (PyCFunction)hashtable_get, METH_VARARGS,
+        "Retrieve the count for the given k-mer. For Nodetables and "
+        "Counttables, this function will fail if the supplied k-mer contains "
+        "non-ACGT characters."
+    },
+    {
+        "load",
+        (PyCFunction)hashtable_load, METH_VARARGS,
+        "Load the graph from the specified file."
+    },
+    {
+        "save",
+        (PyCFunction)hashtable_save, METH_VARARGS,
+        "Save the graph to the specified file."
+    },
+    {
+        "get_kmers",
+        (PyCFunction)hashtable_get_kmers, METH_VARARGS,
+        "Generate an ordered list of all substrings of length k in the string."
+    },
+    {
+        "get_kmer_hashes",
+        (PyCFunction)hashtable_get_kmer_hashes, METH_VARARGS,
+        "Retrieve an ordered list of all hashes of all k-mers in the string."
+    },
+    {
+        "get_kmer_hashes_as_hashset",
+        (PyCFunction)hashtable_get_kmer_hashes_as_hashset, METH_VARARGS,
+        "Retrieve a HashSet containing all the k-mers in the string."
+    },
+    {
+        "get_kmer_counts",
+        (PyCFunction)hashtable_get_kmer_counts, METH_VARARGS,
+        "Retrieve an ordered list of the counts of all k-mers in the string."
+    },
+
+    {
+        "set_use_bigcount",
+        (PyCFunction)hashtable_set_use_bigcount, METH_VARARGS,
+        "Count past maximum binsize of hashtable (set to T/F)"
+    },
+    {
+        "get_use_bigcount",
+        (PyCFunction)hashtable_get_use_bigcount, METH_VARARGS,
+        "Get value of bigcount flag (T/F)"
+    },
+    {
+        "get_min_count",
+        (PyCFunction)hashtable_get_min_count, METH_VARARGS,
+        "Get the smallest count of all the k-mers in the string"
+    },
+    {
+        "get_max_count",
+        (PyCFunction)hashtable_get_max_count, METH_VARARGS,
+        "Get the largest count of all the k-mers in the string"
+    },
+    {
+        "trim_on_abundance",
+        (PyCFunction)hashtable_trim_on_abundance, METH_VARARGS,
+        "Trim string at first k-mer below the given abundance"
+    },
+    {
+        "trim_below_abundance",
+        (PyCFunction)hashtable_trim_below_abundance, METH_VARARGS,
+        "Trim string at first k-mer above the given abundance"
+    },
+    {
+        "find_spectral_error_positions",
+        (PyCFunction)hashtable_find_spectral_error_positions, METH_VARARGS,
+        "Identify positions of low-abundance k-mers"
+    },
+    {
+        "abundance_distribution",
+        (PyCFunction)hashtable_abundance_distribution, METH_VARARGS,
+        "Calculate the k-mer abundance distribution of the given file"
+    },
+    {
+        "abundance_distribution_with_reads_parser",
+        (PyCFunction)hashtable_abundance_distribution_with_reads_parser,
+        METH_VARARGS,
+        "Calculate the k-mer abundance distribution for a reads parser handle"
+    },
+    {
+        "get_median_count",
+        (PyCFunction)hashtable_get_median_count, METH_VARARGS,
+        "Get the median, average, and stddev of the k-mer counts in the string"
+    },
+    {
+        "median_at_least",
+        (PyCFunction)hashtable_median_at_least, METH_VARARGS,
+        "Return true if the median is at least the given cutoff"
+    },
+    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+
+
+PyObject *
+hashtable_ksize(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    unsigned int k = hashtable->ksize();
+
+    return PyLong_FromLong(k);
+}
+
+
+PyObject *
+hashtable_hash(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    char * kmer;
+    if (!PyArg_ParseTuple(args, "s", &kmer)) {
+        return NULL;
+    }
+
+    if (strlen(kmer) != hashtable->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "provided k-mer is wrong length");
+        return NULL;
+    }
+
+    try {
+        PyObject * hash = nullptr;
+        const HashIntoType h(hashtable->hash_dna(kmer));
+        convert_HashIntoType_to_PyObject(h, &hash);
+        return hash;
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+}
+
+
+PyObject *
+hashtable_reverse_hash(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    PyObject * val_o;
+    HashIntoType val;
+    if (!PyArg_ParseTuple(args, "O", &val_o)) {
+        return NULL;
+    }
+
+    if (!ht_convert_PyObject_to_HashIntoType(val_o, val, hashtable)) {
+        return NULL;
+    }
+
+    try {
+        return PyUnicode_FromString(hashtable->unhash_dna(val).c_str());
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+}
+
+
+PyObject *
+hashtable_n_occupied(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    uint64_t n = hashtable->n_occupied();
+
+    return PyLong_FromUnsignedLongLong(n);
+}
+
+
+PyObject *
+hashtable_n_unique_kmers(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    uint64_t n = hashtable->n_unique_kmers();
+
+    return PyLong_FromUnsignedLongLong(n);
+}
+
+
+PyObject *
+hashtable_count(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    PyObject * v;
+    if (!PyArg_ParseTuple(args, "O", &v)) {
+        return NULL;
+    }
+
+    HashIntoType hashval;
+
+    if (!ht_convert_PyObject_to_HashIntoType(v, hashval, hashtable)) {
+        return NULL;
+    }
+
+    hashtable->count(hashval);
+
+    return PyLong_FromLong(1);
+}
+
+PyObject *
+hashtable_consume_seqfile(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable  = me->hashtable;
+
+    const char * filename;
+
+    if (!PyArg_ParseTuple(args, "s", &filename)) {
+        return NULL;
+    }
+
+    // call the C++ function, and trap signals => Python
+    unsigned long long  n_consumed    = 0;
+    unsigned int          total_reads   = 0;
+    try {
+        hashtable->consume_seqfile<FastxReader>(filename, total_reads, n_consumed);
+    } catch (oxli_file_exception &exc) {
+        PyErr_SetString(PyExc_OSError, exc.what());
+        return NULL;
+    } catch (oxli_value_exception &exc) {
+        PyErr_SetString(PyExc_ValueError, exc.what());
+        return NULL;
+    }
+
+    return Py_BuildValue("IK", total_reads, n_consumed);
+}
+
+PyObject *
+hashtable_consume_seqfile_banding(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable  = me->hashtable;
+
+    const char * filename;
+    unsigned int num_bands;
+    unsigned int band;
+
+    if (!PyArg_ParseTuple(args, "sII", &filename, &num_bands, &band)) {
+        return NULL;
+    }
+
+    // call the C++ function, and trap signals => Python
+    unsigned long long  n_consumed    = 0;
+    unsigned int          total_reads   = 0;
+    try {
+        hashtable->consume_seqfile_banding<FastxReader>(filename, num_bands, band, total_reads, n_consumed);
+    } catch (oxli_file_exception &exc) {
+        PyErr_SetString(PyExc_OSError, exc.what());
+        return NULL;
+    } catch (oxli_value_exception &exc) {
+        PyErr_SetString(PyExc_ValueError, exc.what());
+        return NULL;
+    }
+
+    return Py_BuildValue("IK", total_reads, n_consumed);
+}
+
+PyObject *
+hashtable_consume_seqfile_with_reads_parser(khmer_KHashtable_Object * me,
+        PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    PyObject * rparser_obj = NULL;
+
+    if (!PyArg_ParseTuple(args, "O", &rparser_obj)) {
+        return NULL;
+    }
+
+    FastxParserPtr& rparser = _PyObject_to_khmer_ReadParser( rparser_obj );
+
+    // call the C++ function, and trap signals => Python
+    unsigned long long  n_consumed      = 0;
+    unsigned int        total_reads     = 0;
+    const char         *value_exception = NULL;
+    const char         *file_exception  = NULL;
+    std::string exc_string;
+
+    Py_BEGIN_ALLOW_THREADS
+    try {
+        hashtable->consume_seqfile<FastxReader>(rparser, total_reads, n_consumed);
+    } catch (oxli_file_exception &exc) {
+        exc_string = exc.what();
+        file_exception = exc_string.c_str();
+    } catch (oxli_value_exception &exc) {
+        exc_string = exc.what();
+        value_exception = exc_string.c_str();
+    }
+    Py_END_ALLOW_THREADS
+
+    if (file_exception != NULL) {
+        PyErr_SetString(PyExc_OSError, file_exception);
+        return NULL;
+    }
+    if (value_exception != NULL) {
+        PyErr_SetString(PyExc_ValueError, value_exception);
+        return NULL;
+    }
+
+    return Py_BuildValue("IK", total_reads, n_consumed);
+}
+
+
+
+PyObject *
+hashtable_consume(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * long_str;
+
+    if (!PyArg_ParseTuple(args, "s", &long_str)) {
+        return NULL;
+    }
+
+    if (strlen(long_str) < hashtable->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }
+
+    unsigned int n_consumed;
+    n_consumed = hashtable->consume_string(long_str);
+
+    return PyLong_FromLong(n_consumed);
+}
+
+
+PyObject *
+hashtable_get(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    PyObject * arg;
+
+    if (!PyArg_ParseTuple(args, "O", &arg)) {
+        return NULL;
+    }
+
+    HashIntoType hashval;
+
+    if (!ht_convert_PyObject_to_HashIntoType(arg, hashval, hashtable)) {
+        return NULL;
+    }
+
+    unsigned int count = hashtable->get_count(hashval);
+    return PyLong_FromLong(count);
+}
+
+
+PyObject *
+hashtable_set_use_bigcount(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    PyObject * x;
+    if (!PyArg_ParseTuple(args, "O", &x)) {
+        return NULL;
+    }
+    int setme = PyObject_IsTrue(x);
+    if (setme < 0) {
+        return NULL;
+    }
+    try {
+        hashtable->set_use_bigcount((bool)setme);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+
+PyObject *
+hashtable_get_use_bigcount(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    bool val = hashtable->get_use_bigcount();
+
+    return PyBool_FromLong((int)val);
+}
+
+
+PyObject *
+hashtable_get_min_count(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * long_str;
+
+    if (!PyArg_ParseTuple(args, "s", &long_str)) {
+        return NULL;
+    }
+
+    if (strlen(long_str) < hashtable->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }
+
+    BoundedCounterType c = hashtable->get_min_count(long_str);
+    unsigned int N = c;
+
+    return PyLong_FromLong(N);
+}
+
+
+PyObject *
+hashtable_get_max_count(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * long_str;
+
+    if (!PyArg_ParseTuple(args, "s", &long_str)) {
+        return NULL;
+    }
+
+    if (strlen(long_str) < hashtable->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }
+
+    BoundedCounterType c = hashtable->get_max_count(long_str);
+    unsigned int N = c;
+
+    return PyLong_FromLong(N);
+}
+
+
+PyObject *
+hashtable_abundance_distribution_with_reads_parser(khmer_KHashtable_Object * me,
+        PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    khmer :: khmer_ReadParser_Object * rparser_obj = NULL;
+    khmer_KHashtable_Object * tracking_obj = NULL;
+
+    if (!PyArg_ParseTuple(args, "O!O!", &khmer_ReadParser_Type,
+                          &rparser_obj, &khmer_KHashtable_Type, &tracking_obj)) {
+        return NULL;
+    }
+
+    FastxParserPtr& rparser = rparser_obj->parser;
+    Hashtable          *tracking        = tracking_obj->hashtable;
+    uint64_t           *dist            = NULL;
+    const char         *value_exception = NULL;
+    const char         *file_exception  = NULL;
+    std::string exc_string;
+
+    Py_BEGIN_ALLOW_THREADS
+    try {
+        dist = hashtable->abundance_distribution<FastxReader>(rparser, tracking);
+    } catch (oxli_file_exception &exc) {
+        exc_string = exc.what();
+        file_exception = exc_string.c_str();
+    } catch (oxli_value_exception &exc) {
+        exc_string = exc.what();
+        value_exception = exc_string.c_str();
+    }
+    Py_END_ALLOW_THREADS
+
+    if (file_exception != NULL) {
+        PyErr_SetString(PyExc_OSError, file_exception);
+        return NULL;
+    }
+    if (value_exception != NULL) {
+        PyErr_SetString(PyExc_ValueError, value_exception);
+        return NULL;
+    }
+
+    PyObject * x = PyList_New(MAX_BIGCOUNT + 1);
+    if (x == NULL) {
+        delete[] dist;
+        return NULL;
+    }
+    for (int i = 0; i < MAX_BIGCOUNT + 1; i++) {
+        PyList_SET_ITEM(x, i, PyLong_FromUnsignedLongLong(dist[i]));
+    }
+
+    delete[] dist;
+    return x;
+}
+
+
+PyObject *
+hashtable_trim_on_abundance(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * seq = NULL;
+    unsigned int min_count_i = 0;
+
+    if (!PyArg_ParseTuple(args, "sI", &seq, &min_count_i)) {
+        return NULL;
+    }
+
+    unsigned long trim_at;
+    Py_BEGIN_ALLOW_THREADS
+
+    BoundedCounterType min_count = min_count_i;
+
+    trim_at = hashtable->trim_on_abundance(seq, min_count);
+
+    Py_END_ALLOW_THREADS;
+
+    PyObject * trim_seq = PyUnicode_FromStringAndSize(seq, trim_at);
+    if (trim_seq == NULL) {
+        return NULL;
+    }
+    PyObject * ret = Py_BuildValue("Ok", trim_seq, trim_at);
+    Py_DECREF(trim_seq);
+
+    return ret;
+}
+
+
+PyObject *
+hashtable_trim_below_abundance(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * seq = NULL;
+    BoundedCounterType max_count_i = 0;
+
+    if (!PyArg_ParseTuple(args, "sH", &seq, &max_count_i)) {
+        return NULL;
+    }
+
+    unsigned long trim_at;
+    Py_BEGIN_ALLOW_THREADS
+
+    BoundedCounterType max_count = max_count_i;
+
+    trim_at = hashtable->trim_below_abundance(seq, max_count);
+
+    Py_END_ALLOW_THREADS;
+
+    PyObject * trim_seq = PyUnicode_FromStringAndSize(seq, trim_at);
+    if (trim_seq == NULL) {
+        return NULL;
+    }
+    PyObject * ret = Py_BuildValue("Ok", trim_seq, trim_at);
+    Py_DECREF(trim_seq);
+
+    return ret;
+}
+
+
+PyObject *
+hashtable_find_spectral_error_positions(khmer_KHashtable_Object * me,
+                                        PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * seq = NULL;
+    BoundedCounterType max_count = 0; // unsigned short int
+
+    if (!PyArg_ParseTuple(args, "sH", &seq, &max_count)) {
+        return NULL;
+    }
+
+    std::vector<unsigned int> posns;
+
+    try {
+        posns = hashtable->find_spectral_error_positions(seq, max_count);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    Py_ssize_t posns_size = posns.size();
+
+    PyObject * x = PyList_New(posns_size);
+    if (x == NULL) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < posns_size; i++) {
+        PyList_SET_ITEM(x, i, PyLong_FromLong(posns[i]));
+    }
+
+    return x;
+}
+
+
+PyObject *
+hashtable_abundance_distribution(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * filename = NULL;
+    khmer_KHashtable_Object * tracking_obj = NULL;
+    if (!PyArg_ParseTuple(args, "sO!", &filename, &khmer_KHashtable_Type,
+                          &tracking_obj)) {
+        return NULL;
+    }
+
+    Hashtable          *tracking       = tracking_obj->hashtable;
+    uint64_t           *dist            = NULL;
+    const char         *value_exception = NULL;
+    const char         *file_exception  = NULL;
+    std::string exc_string;
+
+    Py_BEGIN_ALLOW_THREADS
+    try {
+        dist = hashtable->abundance_distribution<FastxReader>(filename, tracking);
+    } catch (oxli_file_exception &exc) {
+        exc_string = exc.what();
+        file_exception = exc_string.c_str();
+    } catch (oxli_value_exception &exc) {
+        exc_string = exc.what();
+        value_exception = exc_string.c_str();
+    }
+    Py_END_ALLOW_THREADS
+
+    if (file_exception != NULL) {
+        PyErr_SetString(PyExc_OSError, file_exception);
+        if (dist != NULL) {
+            delete []dist;
+        }
+        return NULL;
+    }
+    if (value_exception != NULL) {
+        PyErr_SetString(PyExc_ValueError, value_exception);
+        if (dist != NULL) {
+            delete []dist;
+        }
+        return NULL;
+    }
+
+    PyObject * x = PyList_New(MAX_BIGCOUNT + 1);
+    if (x == NULL) {
+        if (dist != NULL) {
+            delete []dist;
+        }
+        return NULL;
+    }
+    for (int i = 0; i < MAX_BIGCOUNT + 1; i++) {
+        PyList_SET_ITEM(x, i, PyLong_FromUnsignedLongLong(dist[i]));
+    }
+
+    if (dist != NULL) {
+        delete []dist;
+    }
+
+    return x;
+}
+
+
+PyObject *
+hashtable_load(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * filename = NULL;
+
+    if (!PyArg_ParseTuple(args, "s", &filename)) {
+        return NULL;
+    }
+
+    try {
+        hashtable->load(filename);
+    } catch (oxli_file_exception &e) {
+        PyErr_SetString(PyExc_OSError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+
+PyObject *
+hashtable_save(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * filename = NULL;
+
+    if (!PyArg_ParseTuple(args, "s", &filename)) {
+        return NULL;
+    }
+
+    try {
+        hashtable->save(filename);
+    } catch (oxli_file_exception &e) {
+        PyErr_SetString(PyExc_OSError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+
+PyObject *
+hashtable_get_hashsizes(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    std::vector<uint64_t> ts = hashtable->get_tablesizes();
+
+    PyObject * x = PyList_New(ts.size());
+    for (size_t i = 0; i < ts.size(); i++) {
+        PyList_SET_ITEM(x, i, PyLong_FromUnsignedLongLong(ts[i]));
+    }
+
+    return x;
+}
+
+
+PyObject *
+hashtable_get_median_count(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * long_str;
+
+    if (!PyArg_ParseTuple(args, "s", &long_str)) {
+        return NULL;
+    }
+
+    if (strlen(long_str) < hashtable->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }
+
+    BoundedCounterType med = 0;
+    float average = 0, stddev = 0;
+
+    hashtable->get_median_count(long_str, med, average, stddev);
+
+    return Py_BuildValue("iff", med, average, stddev);
+}
+
+
+PyObject *
+hashtable_median_at_least(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+
+    const char * long_str;
+    unsigned int cutoff;
+
+    if (!PyArg_ParseTuple(args, "sI", &long_str, &cutoff)) {
+        return NULL;
+    }
+
+    if (strlen(long_str) < hashtable->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }
+
+    if (hashtable->median_at_least(long_str, cutoff)) {
+        Py_RETURN_TRUE;
+    }
+    Py_RETURN_FALSE;
+
+}
+
+
+PyObject *
+hashtable_get_kmers(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+    const char * sequence;
+
+    if (!PyArg_ParseTuple(args, "s", &sequence)) {
+        return NULL;
+    }
+
+    std::vector<std::string> kmers;
+
+    hashtable->get_kmers(sequence, kmers);
+
+    PyObject * x = PyList_New(kmers.size());
+    for (unsigned int i = 0; i < kmers.size(); i++) {
+        PyObject * obj = PyUnicode_FromString(kmers[i].c_str());
+        PyList_SET_ITEM(x, i, obj);
+    }
+
+    return x;
+}
+
+
+PyObject *
+hashtable_get_kmer_counts(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+    const char * sequence;
+
+    if (!PyArg_ParseTuple(args, "s", &sequence)) {
+        return NULL;
+    }
+
+    std::vector<BoundedCounterType> counts;
+    try {
+        hashtable->get_kmer_counts(sequence, counts);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    PyObject * x = PyList_New(counts.size());
+    for (unsigned int i = 0; i <counts.size(); i++) {
+        PyObject * obj = PyInt_FromLong(counts[i]);
+        PyList_SET_ITEM(x, i, obj);
+    }
+
+    return x;
+}
+
+
+
+PyObject *
+hashtable_get_kmer_hashes(khmer_KHashtable_Object * me, PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+    const char * sequence;
+
+    if (!PyArg_ParseTuple(args, "s", &sequence)) {
+        return NULL;
+    }
+
+    std::vector<HashIntoType> hashes;
+    try {
+        hashtable->get_kmer_hashes(sequence, hashes);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    PyObject * x = PyList_New(hashes.size());
+    for (unsigned int i = 0; i < hashes.size(); i++) {
+        PyObject * obj = nullptr;
+        convert_HashIntoType_to_PyObject(hashes[i], &obj);
+        PyList_SET_ITEM(x, i, obj);
+    }
+
+    return x;
+}
+
+
+
+PyObject *
+hashtable_get_kmer_hashes_as_hashset(khmer_KHashtable_Object * me,
+                                     PyObject * args)
+{
+    Hashtable * hashtable = me->hashtable;
+    const char * sequence;
+
+    if (!PyArg_ParseTuple(args, "s", &sequence)) {
+        return NULL;
+    }
+
+    SeenSet * hashes = new SeenSet;
+    try {
+        hashtable->get_kmer_hashes_as_hashset(sequence, *hashes);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    PyObject * x = (PyObject *) create_HashSet_Object(hashes,
+                   hashtable->ksize());
+
+    return x;
+}
+
+}
diff --git a/src/khmer/_cpy_hllcounter.cc b/src/khmer/_cpy_hllcounter.cc
new file mode 100644
index 0000000..de793c5
--- /dev/null
+++ b/src/khmer/_cpy_hllcounter.cc
@@ -0,0 +1,364 @@
+#include "khmer/_cpy_hllcounter.hh"
+
+using namespace oxli;
+using namespace oxli::read_parsers;
+
+namespace khmer {
+
+
+PyTypeObject khmer_KHLLCounter_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "_khmer.KHLLCounter",                       /* tp_name */
+    sizeof(khmer_KHLLCounter_Object),          /* tp_basicsize */
+    0,                                         /* tp_itemsize */
+    (destructor)khmer_hllcounter_dealloc,      /* tp_dealloc */
+    0,                                         /* tp_print */
+    0,                                         /* tp_getattr */
+    0,                                         /* tp_setattr */
+    0,                                         /* tp_compare */
+    0,                                         /* tp_repr */
+    0,                                         /* tp_as_number */
+    0,                                         /* tp_as_sequence */
+    0,                                         /* tp_as_mapping */
+    0,                                         /* tp_hash */
+    0,                                         /* tp_call */
+    0,                                         /* tp_str */
+    0,                                         /* tp_getattro */
+    0,                                         /* tp_setattro */
+    0,                                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,  /* tp_flags */
+    "HyperLogLog counter",                     /* tp_doc */
+    0,                                         /* tp_traverse */
+    0,                                         /* tp_clear */
+    0,                                         /* tp_richcompare */
+    0,                                         /* tp_weaklistoffset */
+    0,                                         /* tp_iter */
+    0,                                         /* tp_iternext */
+    khmer_hllcounter_methods,                  /* tp_methods */
+    0,                                         /* tp_members */
+    khmer_hllcounter_getseters,                /* tp_getset */
+    0,                                         /* tp_base */
+    0,                                         /* tp_dict */
+    0,                                         /* tp_descr_get */
+    0,                                         /* tp_descr_set */
+    0,                                         /* tp_dictoffset */
+    0,                                         /* tp_init */
+    0,                                         /* tp_alloc */
+    khmer_hllcounter_new,                      /* tp_new */
+};
+
+
+PyMethodDef khmer_hllcounter_methods[] = {
+    {
+        "add", (PyCFunction)hllcounter_add,
+        METH_VARARGS,
+        "Add a k-mer to the counter."
+    },
+    {
+        "estimate_cardinality", (PyCFunction)hllcounter_estimate_cardinality,
+        METH_VARARGS,
+        "Return the current estimation."
+    },
+    {
+        "consume_string", (PyCFunction)hllcounter_consume_string,
+        METH_VARARGS,
+        "Break a sequence into k-mers and add each k-mer to the counter."
+    },
+    {
+        "consume_seqfile", (PyCFunction)hllcounter_consume_seqfile,
+        METH_VARARGS | METH_KEYWORDS,
+        "Read sequences from file, break into k-mers, "
+        "and add each k-mer to the counter. If optional keyword 'stream_out' "
+        "is True, also prints each sequence to stdout."
+    },
+    {
+        "merge", (PyCFunction)hllcounter_merge,
+        METH_VARARGS,
+        "Merge other counter into this one."
+    },
+    {NULL} /* Sentinel */
+};
+
+PyGetSetDef khmer_hllcounter_getseters[] = {
+    {
+        (char *)"alpha",
+        (getter)hllcounter_getalpha, NULL,
+        (char *)"alpha constant for this HLL counter.",
+        NULL
+    },
+    {
+        (char *)"error_rate",
+        (getter)hllcounter_get_erate, (setter)hllcounter_set_erate,
+        (char *)"Error rate for this HLL counter. "
+        "Can be changed prior to first counting, but becomes read-only after "
+        "that (raising AttributeError)",
+        NULL
+    },
+    {
+        (char *)"ksize",
+        (getter)hllcounter_get_ksize, (setter)hllcounter_set_ksize,
+        (char *)"k-mer size for this HLL counter."
+        "Can be changed prior to first counting, but becomes read-only after "
+        "that (raising AttributeError)",
+        NULL
+    },
+    {
+        (char *)"counters",
+        (getter)hllcounter_getcounters, NULL,
+        (char *)"Read-only internal counters.",
+        NULL
+    },
+    {NULL} /* Sentinel */
+};
+
+
+PyObject* khmer_hllcounter_new(PyTypeObject * type, PyObject * args,
+                                      PyObject * kwds)
+{
+    khmer_KHLLCounter_Object * self;
+    self = (khmer_KHLLCounter_Object *)type->tp_alloc(type, 0);
+
+    if (self != NULL) {
+        double error_rate = 0.01;
+        WordLength ksize = 20;
+
+        if (!PyArg_ParseTuple(args, "|db", &error_rate, &ksize)) {
+            Py_DECREF(self);
+            return NULL;
+        }
+
+        try {
+            self->hllcounter = new HLLCounter(error_rate, ksize);
+        } catch (InvalidValue &e) {
+            Py_DECREF(self);
+            PyErr_SetString(PyExc_ValueError, e.what());
+            return NULL;
+        }
+    }
+
+    return (PyObject *) self;
+}
+
+
+void khmer_hllcounter_dealloc(khmer_KHLLCounter_Object * obj)
+{
+    delete obj->hllcounter;
+    obj->hllcounter = NULL;
+
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+
+PyObject *
+hllcounter_add(khmer_KHLLCounter_Object * me, PyObject * args)
+{
+    const char * kmer_str;
+
+    if (!PyArg_ParseTuple(args, "s", &kmer_str)) {
+        return NULL;
+    }
+
+    try {
+        me->hllcounter->add(kmer_str);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+
+PyObject *
+hllcounter_estimate_cardinality(khmer_KHLLCounter_Object * me, PyObject * args)
+{
+    if (!PyArg_ParseTuple( args, "" )) {
+        return NULL;
+    }
+
+    return PyLong_FromLong(me->hllcounter->estimate_cardinality());
+}
+
+
+PyObject *
+hllcounter_consume_string(khmer_KHLLCounter_Object * me, PyObject * args)
+{
+    const char * kmer_str;
+    unsigned long long n_consumed;
+
+    if (!PyArg_ParseTuple(args, "s", &kmer_str)) {
+        return NULL;
+    }
+
+    try {
+        n_consumed = me->hllcounter->consume_string(kmer_str);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    return PyLong_FromLong(n_consumed);
+}
+
+PyObject * hllcounter_consume_seqfile(khmer_KHLLCounter_Object * me,
+        PyObject * args, PyObject * kwds)
+{
+    const char * filename;
+    PyObject * stream_records_o = NULL;
+
+    static const char* const_kwlist[] = {"filename", "stream_records", NULL};
+    static char** kwlist = const_cast<char**>(const_kwlist);
+
+    bool stream_records = false;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|O", kwlist,
+                                     &filename, &stream_records_o)) {
+        return NULL;
+    }
+
+    if (stream_records_o != NULL && PyObject_IsTrue(stream_records_o)) {
+        stream_records = true;
+    }
+
+    // call the C++ function, and trap signals => Python
+    unsigned long long  n_consumed    = 0;
+    unsigned int        total_reads   = 0;
+    try {
+        me->hllcounter->consume_seqfile<FastxReader>(filename, stream_records,
+                total_reads,
+                n_consumed);
+    } catch (oxli_file_exception &exc) {
+        PyErr_SetString(PyExc_OSError, exc.what());
+        return NULL;
+    } catch (oxli_value_exception &exc) {
+        PyErr_SetString(PyExc_ValueError, exc.what());
+        return NULL;
+    }
+
+    return Py_BuildValue("IK", total_reads, n_consumed);
+}
+
+ PyObject * hllcounter_merge(khmer_KHLLCounter_Object * me,
+                                   PyObject * args);
+
+
+PyObject *
+hllcounter_get_erate(khmer_KHLLCounter_Object * me)
+{
+    return PyFloat_FromDouble(me->hllcounter->get_erate());
+}
+
+
+PyObject *
+hllcounter_get_ksize(khmer_KHLLCounter_Object * me)
+{
+    return PyLong_FromLong(me->hllcounter->get_ksize());
+}
+
+
+int hllcounter_set_ksize(khmer_KHLLCounter_Object * me, PyObject *value,
+                     void *closure)
+{
+    if (value == NULL) {
+        PyErr_SetString(PyExc_TypeError, "Cannot delete attribute");
+        return -1;
+    }
+
+    long ksize = 0;
+    if (PyLong_Check(value)) {
+        ksize = PyLong_AsLong(value);
+    } else if (PyInt_Check(value)) {
+        ksize = PyInt_AsLong(value);
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+                        "Please use an integer value for k-mer size");
+        return -1;
+    }
+
+    if (ksize <= 0) {
+        PyErr_SetString(PyExc_ValueError, "Please set k-mer size to a value "
+                        "greater than zero");
+        return -1;
+    }
+
+    try {
+        me->hllcounter->set_ksize(ksize);
+    } catch (ReadOnlyAttribute &e) {
+        PyErr_SetString(PyExc_AttributeError, e.what());
+        return -1;
+    }
+
+    return 0;
+}
+
+
+int hllcounter_set_erate(khmer_KHLLCounter_Object * me, PyObject *value,
+                     void *closure)
+{
+    if (value == NULL) {
+        PyErr_SetString(PyExc_TypeError, "Cannot delete attribute");
+        return -1;
+    }
+
+    if (!PyFloat_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "Please use a float value for k-mer size");
+        return -1;
+    }
+
+    double erate = PyFloat_AsDouble(value);
+    try {
+        me->hllcounter->set_erate(erate);
+    } catch (InvalidValue &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return -1;
+    } catch (ReadOnlyAttribute &e) {
+        PyErr_SetString(PyExc_AttributeError, e.what());
+        return -1;
+    }
+
+    return 0;
+}
+
+
+PyObject *
+hllcounter_getalpha(khmer_KHLLCounter_Object * me)
+{
+    return PyFloat_FromDouble(me->hllcounter->get_alpha());
+}
+
+
+PyObject *
+hllcounter_getcounters(khmer_KHLLCounter_Object * me)
+{
+    std::vector<int> counters = me->hllcounter->get_M();
+
+    PyObject * x = PyList_New(counters.size());
+    for (size_t i = 0; i < counters.size(); i++) {
+        PyList_SET_ITEM(x, i, PyLong_FromLong(counters[i]));
+    }
+
+    return x;
+}
+
+
+PyObject * hllcounter_merge(khmer_KHLLCounter_Object * me,
+                                   PyObject * args)
+{
+    khmer_KHLLCounter_Object * other;
+
+    if (!PyArg_ParseTuple(args, "O!", &khmer_KHLLCounter_Type, &other)) {
+        return NULL;
+    }
+
+    try {
+        me->hllcounter->merge(*(other->hllcounter));
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+}
diff --git a/src/khmer/_cpy_khmer.cc b/src/khmer/_cpy_khmer.cc
new file mode 100644
index 0000000..c573a3f
--- /dev/null
+++ b/src/khmer/_cpy_khmer.cc
@@ -0,0 +1,441 @@
+/*
+This file is part of khmer, https://github.com/dib-lab/khmer/, and is
+Copyright (C) 2010-2015, Michigan State University.
+Copyright (C) 2015-2016, The Regents of the University of California.
+
+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 Michigan State 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 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 COPYRIGHT
+HOLDER 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.
+LICENSE (END)
+
+Contact: khmer-project at idyll.org
+*/
+
+//
+// A module for Python that exports khmer C++ library functions.
+//
+
+// Must be first.
+#include <Python.h>
+#include <string>
+
+#include "khmer/_cpy_khmer.hh"
+#include "khmer/_cpy_utils.hh"
+
+using namespace oxli;
+
+
+//
+// Function necessary for Python loading:
+//
+
+extern "C" {
+    MOD_INIT(_khmer);
+}
+
+namespace khmer {
+
+PyObject * forward_hash(PyObject * self, PyObject * args)
+{
+    const char * kmer;
+    WordLength ksize;
+
+    if (!PyArg_ParseTuple(args, "sb", &kmer, &ksize)) {
+        return NULL;
+    }
+
+    if (ksize > KSIZE_MAX) {
+        PyErr_Format(PyExc_ValueError, "k-mer size must be <= %u", KSIZE_MAX);
+        return NULL;
+    }
+
+    if (strlen(kmer) != ksize) {
+        PyErr_Format(PyExc_ValueError, "k-mer size different from ksize");
+        return NULL;
+    }
+
+    try {
+        PyObject * hash = nullptr;
+        const HashIntoType h(_hash(kmer, ksize));
+        convert_HashIntoType_to_PyObject(h, &hash);
+        return hash;
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+}
+
+PyObject * forward_hash_no_rc(PyObject * self, PyObject * args)
+{
+    const char * kmer;
+    WordLength ksize;
+
+    if (!PyArg_ParseTuple(args, "sb", &kmer, &ksize)) {
+        return NULL;
+    }
+
+    if (ksize > KSIZE_MAX) {
+        PyErr_Format(PyExc_ValueError, "k-mer size must be <= %u", KSIZE_MAX);
+        return NULL;
+    }
+
+    if (strlen(kmer) != ksize) {
+        PyErr_SetString(PyExc_ValueError,
+                        "k-mer length must equal the k-size");
+        return NULL;
+    }
+
+    PyObject * hash = nullptr;
+    const HashIntoType h(_hash_forward(kmer, ksize));
+    convert_HashIntoType_to_PyObject(h, &hash);
+    return hash;
+}
+
+PyObject * reverse_hash(PyObject * self, PyObject * args)
+{
+    PyObject * val;
+    HashIntoType hash;
+    WordLength ksize;
+
+    if (!PyArg_ParseTuple(args, "Ob", &val, &ksize)) {
+        return NULL;
+    }
+
+    if (PyLong_Check(val) || PyInt_Check(val)) {
+        if (!convert_PyLong_to_HashIntoType(val, hash)) {
+            return NULL;
+        }
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+                        "Hash value must be an integer.");
+        return NULL;
+    }
+
+    if (ksize > KSIZE_MAX) {
+        PyErr_Format(PyExc_ValueError, "k-mer size must be <= %u", KSIZE_MAX);
+        return NULL;
+    }
+
+    return PyUnicode_FromString(_revhash(hash, ksize).c_str());
+}
+
+PyObject * murmur3_forward_hash(PyObject * self, PyObject * args)
+{
+    const char * kmer;
+
+    if (!PyArg_ParseTuple(args, "s", &kmer)) {
+        return NULL;
+    }
+
+    PyObject * hash = nullptr;
+    const HashIntoType h(_hash_murmur(kmer, strlen(kmer)));
+    convert_HashIntoType_to_PyObject(h, &hash);
+    return hash;
+}
+
+PyObject * murmur3_forward_hash_no_rc(PyObject * self, PyObject * args)
+{
+    const char * kmer;
+
+    if (!PyArg_ParseTuple(args, "s", &kmer)) {
+        return NULL;
+    }
+
+    PyObject * hash = nullptr;
+    const HashIntoType h(_hash_murmur_forward(kmer, strlen(kmer)));
+    convert_HashIntoType_to_PyObject(h, &hash);
+    return hash;
+}
+
+PyObject * reverse_complement(PyObject * self, PyObject * args)
+{
+    const char * sequence;
+    if (!PyArg_ParseTuple(args, "s", &sequence)) {
+        return NULL;
+    }
+
+    std::string s(sequence);
+    try {
+        s = _revcomp(s);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_RuntimeError, e.what());
+        return NULL;
+    }
+    return PyUnicode_FromString(s.c_str());
+}
+
+//
+// technique for resolving literal below found here:
+// https://gcc.gnu.org/onlinedocs/gcc-4.9.1/cpp/Stringification.html
+//
+
+PyObject *
+get_version_cpp( PyObject * self, PyObject * args )
+{
+#define xstr(s) str(s)
+#define str(s) #s
+    std::string dVersion = xstr(VERSION);
+    return PyUnicode_FromString(dVersion.c_str());
+}
+
+PyMethodDef KhmerMethods[] = {
+    {
+        "forward_hash",     forward_hash,
+        METH_VARARGS,       "",
+    },
+    {
+        "forward_hash_no_rc",   forward_hash_no_rc,
+        METH_VARARGS,       "",
+    },
+    {
+        "reverse_hash",     reverse_hash,
+        METH_VARARGS,       "",
+    },
+    {
+        "hash_murmur3",
+        murmur3_forward_hash,
+        METH_VARARGS,
+        "Calculate the hash value of a k-mer using MurmurHash3 "
+        "(with reverse complement)",
+    },
+    {
+        "hash_no_rc_murmur3",
+        murmur3_forward_hash_no_rc,
+        METH_VARARGS,
+        "Calculate the hash value of a k-mer using MurmurHash3 "
+        "(no reverse complement)",
+    },
+    {
+        "reverse_complement",
+        reverse_complement,
+        METH_VARARGS,
+        "Calculate the reverse-complement of the DNA sequence "
+        "with alphabet ACGT",
+    },
+    {
+        "get_version_cpp", get_version_cpp,
+        METH_VARARGS, "return the VERSION c++ compiler option"
+    },
+    { NULL, NULL, 0, NULL } // sentinel
+};
+
+} // namespace khmer
+
+//
+// Module machinery.
+//
+
+MOD_INIT(_khmer)
+{
+    using namespace khmer;
+    using namespace oxli;
+    using namespace oxli::read_parsers;
+
+    if (PyType_Ready(&khmer_KHashtable_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KCounttable_Type.tp_base = &khmer_KHashtable_Type;
+    if (PyType_Ready(&khmer_KCounttable_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KSmallCounttable_Type.tp_base = &khmer_KHashtable_Type;
+    if (PyType_Ready(&khmer_KSmallCounttable_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KNodetable_Type.tp_base = &khmer_KHashtable_Type;
+    if (PyType_Ready(&khmer_KNodetable_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KHashgraph_Type.tp_base = &khmer_KHashtable_Type;
+    khmer_KHashgraph_Type.tp_methods = khmer_hashgraph_methods;
+    if (PyType_Ready(&khmer_KHashgraph_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KCountgraph_Type.tp_base = &khmer_KHashgraph_Type;
+    if (PyType_Ready(&khmer_KCountgraph_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KSmallCountgraph_Type.tp_base = &khmer_KHashgraph_Type;
+    if (PyType_Ready(&khmer_KSmallCountgraph_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    if (PyType_Ready(&khmer_PrePartitionInfo_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KSubsetPartition_Type.tp_methods = khmer_subset_methods;
+    if (PyType_Ready(&khmer_KSubsetPartition_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KNodegraph_Type.tp_base = &khmer_KHashgraph_Type;
+    khmer_KNodegraph_Type.tp_methods = khmer_nodegraph_methods;
+    if (PyType_Ready(&khmer_KNodegraph_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_KGraphLabels_Type.tp_base = &khmer_KNodegraph_Type;
+    khmer_KGraphLabels_Type.tp_methods = khmer_graphlabels_methods;
+    khmer_KGraphLabels_Type.tp_new = khmer_graphlabels_new;
+    if (PyType_Ready(&khmer_KGraphLabels_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    if (PyType_Ready(&khmer_KHLLCounter_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+    if (PyType_Ready(&khmer_ReadAlignerType) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    _init_ReadParser_Type_constants();
+    if (PyType_Ready( &khmer_ReadParser_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    if (PyType_Ready(&khmer_Read_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    if (PyType_Ready(&khmer_ReadPairIterator_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    PyObject * m;
+
+    MOD_DEF(m, "_khmer", "interface for the khmer module low-level extensions",
+            KhmerMethods);
+
+    if (m == NULL) {
+        return MOD_ERROR_VAL;
+    }
+
+    PyObject * filetype_dict = Py_BuildValue("{s,i,s,i,s,i,s,i,s,i,s,i,s,i}",
+                               "COUNTING_HT", SAVED_COUNTING_HT,
+                               "HASHBITS", SAVED_HASHBITS,
+                               "TAGS", SAVED_TAGS,
+                               "STOPTAGS", SAVED_STOPTAGS,
+                               "SUBSET", SAVED_SUBSET,
+                               "LABELSET", SAVED_LABELSET,
+                               "SMALLCOUNT", SAVED_SMALLCOUNT);
+    if (PyModule_AddObject( m, "FILETYPES", filetype_dict ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_Read_Type);
+    if (PyModule_AddObject( m, "Read",
+                            (PyObject *)&khmer_Read_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_ReadParser_Type);
+    if (PyModule_AddObject( m, "ReadParser",
+                            (PyObject *)&khmer_ReadParser_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KCounttable_Type);
+    if (PyModule_AddObject( m, "Counttable",
+                            (PyObject *)&khmer_KCounttable_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KSmallCounttable_Type);
+    if (PyModule_AddObject( m, "SmallCounttable",
+                            (PyObject *)&khmer_KSmallCounttable_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KNodetable_Type);
+    if (PyModule_AddObject( m, "Nodetable",
+                            (PyObject *)&khmer_KNodetable_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KCountgraph_Type);
+    if (PyModule_AddObject( m, "Countgraph",
+                            (PyObject *)&khmer_KCountgraph_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KSmallCountgraph_Type);
+    if (PyModule_AddObject( m, "SmallCountgraph",
+                            (PyObject *)&khmer_KSmallCountgraph_Type ) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KNodegraph_Type);
+    if (PyModule_AddObject(m, "Nodegraph",
+                           (PyObject *)&khmer_KNodegraph_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KGraphLabels_Type);
+    if (PyModule_AddObject(m, "GraphLabels",
+                           (PyObject *)&khmer_KGraphLabels_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    if (PyType_Ready(&_HashSet_iter_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    khmer_HashSet_Type.tp_new = khmer_HashSet_new;
+    if (PyType_Ready(&khmer_HashSet_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_KHLLCounter_Type);
+    if (PyModule_AddObject(m, "HLLCounter",
+                           (PyObject *)&khmer_KHLLCounter_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_ReadAlignerType);
+    if (PyModule_AddObject(m, "ReadAligner",
+                           (PyObject *)&khmer_ReadAlignerType) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    Py_INCREF(&khmer_HashSet_Type);
+    if (PyModule_AddObject(m, "HashSet",
+                           (PyObject *)&khmer_HashSet_Type) < 0) {
+        return MOD_ERROR_VAL;
+    }
+
+    return MOD_SUCCESS_VAL(m);
+}
+
+// vim: set ft=cpp sts=4 sw=4 tw=79:
diff --git a/src/khmer/_cpy_nodegraph.cc b/src/khmer/_cpy_nodegraph.cc
new file mode 100644
index 0000000..e8f446f
--- /dev/null
+++ b/src/khmer/_cpy_nodegraph.cc
@@ -0,0 +1,162 @@
+#include "khmer/_cpy_nodegraph.hh"
+#include "oxli/hashgraph.hh"
+
+using namespace oxli;
+
+namespace khmer {
+
+PyTypeObject khmer_KNodegraph_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KNodegraph_Object")
+= {
+    PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
+    "_khmer.Nodegraph",             /* tp_name */
+    sizeof(khmer_KNodegraph_Object), /* tp_basicsize */
+    0,                             /* tp_itemsize */
+    (destructor)khmer_nodegraph_dealloc, /*tp_dealloc*/
+    0,              /*tp_print*/
+    0,              /*tp_getattr*/
+    0,              /*tp_setattr*/
+    0,              /*tp_compare*/
+    0,              /*tp_repr*/
+    0,              /*tp_as_number*/
+    0,              /*tp_as_sequence*/
+    0,              /*tp_as_mapping*/
+    0,              /*tp_hash */
+    0,              /*tp_call*/
+    0,              /*tp_str*/
+    0,              /*tp_getattro*/
+    0,              /*tp_setattro*/
+    0,              /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,       /*tp_flags*/
+    "nodegraph object",           /* tp_doc */
+    0,                       /* tp_traverse */
+    0,                       /* tp_clear */
+    0,                       /* tp_richcompare */
+    0,                       /* tp_weaklistoffset */
+    0,                       /* tp_iter */
+    0,                       /* tp_iternext */
+    0,  /* tp_methods */
+    0,                       /* tp_members */
+    0,                       /* tp_getset */
+    0,                       /* tp_base */
+    0,                       /* tp_dict */
+    0,                       /* tp_descr_get */
+    0,                       /* tp_descr_set */
+    0,                       /* tp_dictoffset */
+    0,                       /* tp_init */
+    0,                       /* tp_alloc */
+    khmer_nodegraph_new,                  /* tp_new */
+};
+
+PyMethodDef khmer_nodegraph_methods[] = {
+    {
+        "update",
+        (PyCFunction) nodegraph_update, METH_VARARGS,
+        "a set update: update this nodegraph with all the entries from the other"
+    },
+    {
+        "get_raw_tables",
+        (PyCFunction) nodegraph_get_raw_tables, METH_VARARGS,
+        "Get a list of the raw tables as memoryview objects"
+    },
+    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+void khmer_nodegraph_dealloc(khmer_KNodegraph_Object * obj)
+{
+    delete obj->nodegraph;
+    obj->nodegraph = NULL;
+
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+
+PyObject *
+nodegraph_update(khmer_KNodegraph_Object * me, PyObject * args)
+{
+    Nodegraph * nodegraph = me->nodegraph;
+    Nodegraph * other;
+    khmer_KNodegraph_Object * other_o;
+
+    if (!PyArg_ParseTuple(args, "O!", &khmer_KNodegraph_Type, &other_o)) {
+        return NULL;
+    }
+
+    other = other_o->nodegraph;
+
+    try {
+        nodegraph->update_from(*other);
+    } catch (oxli_exception &e) {
+        PyErr_SetString(PyExc_ValueError, e.what());
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *
+nodegraph_get_raw_tables(khmer_KNodegraph_Object * self, PyObject * args)
+{
+    Nodegraph * countgraph = self->nodegraph;
+
+    Byte ** table_ptrs = countgraph->get_raw_tables();
+    std::vector<uint64_t> sizes = countgraph->get_tablesizes();
+
+    PyObject * raw_tables = PyList_New(sizes.size());
+    for (unsigned int i=0; i<sizes.size(); ++i) {
+        Py_buffer buffer;
+        int res = PyBuffer_FillInfo(&buffer, NULL, table_ptrs[i], sizes[i], 0,
+                                    PyBUF_FULL_RO);
+        if (res == -1) {
+            return NULL;
+        }
+        PyObject * buf = PyMemoryView_FromBuffer(&buffer);
+        if(!PyMemoryView_Check(buf)) {
+            return NULL;
+        }
+        PyList_SET_ITEM(raw_tables, i, buf);
+    }
+
+    return raw_tables;
+}
+
+
+// __new__ for nodegraph; necessary for proper subclassing
+// This will essentially do what the old factory function did. Unlike many __new__
+// methods, we take our arguments here, because there's no "uninitialized" nodegraph
+// object; we have to have k and the table sizes before creating the new objects
+PyObject* khmer_nodegraph_new(PyTypeObject * type, PyObject * args,
+                                    PyObject * kwds)
+{
+    khmer_KNodegraph_Object * self;
+    self = (khmer_KNodegraph_Object *)type->tp_alloc(type, 0);
+
+    if (self != NULL) {
+        WordLength k = 0;
+        PyListObject* sizes_list_o = NULL;
+
+        if (!PyArg_ParseTuple(args, "bO!", &k, &PyList_Type, &sizes_list_o)) {
+            Py_DECREF(self);
+            return NULL;
+        }
+
+        std::vector<uint64_t> sizes;
+        if (!convert_Pytablesizes_to_vector(sizes_list_o, sizes)) {
+            Py_DECREF(self);
+            return NULL;
+        }
+
+        try {
+            self->nodegraph = new Nodegraph(k, sizes);
+        } catch (std::bad_alloc &e) {
+            Py_DECREF(self);
+            return PyErr_NoMemory();
+        }
+        self->khashgraph.khashtable.hashtable =
+            dynamic_cast<Hashtable*>(self->nodegraph);
+        self->khashgraph.hashgraph = dynamic_cast<Hashgraph*>(self->nodegraph);
+    }
+    return (PyObject *) self;
+}
+
+}
diff --git a/khmer/_cpy_nodetable.hh b/src/khmer/_cpy_nodetable.cc
similarity index 55%
rename from khmer/_cpy_nodetable.hh
rename to src/khmer/_cpy_nodetable.cc
index 64956d5..53a1c59 100644
--- a/khmer/_cpy_nodetable.hh
+++ b/src/khmer/_cpy_nodetable.cc
@@ -1,54 +1,11 @@
-/*
-This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2010-2015, Michigan State University.
-Copyright (C) 2015-2016, The Regents of the University of California.
+#include "khmer/_cpy_nodetable.hh"
+#include <vector>
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+using namespace oxli;
 
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
+namespace khmer {
 
-    * 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 Michigan State 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 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 COPYRIGHT
-HOLDER 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.
-LICENSE (END)
-
-Contact: khmer-project at idyll.org
-*/
-
-typedef struct {
-    khmer_KHashtable_Object khashtable;
-    Nodetable * nodetable;
-} khmer_KNodetable_Object;
-
-static PyMethodDef khmer_nodetable_methods[] = {
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
-
-static PyObject* khmer_nodetable_new(PyTypeObject * type, PyObject * args,
-                                     PyObject * kwds);
-
-static PyTypeObject khmer_KNodetable_Type
+PyTypeObject khmer_KNodetable_Type
 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KNodetable_Object")
 = {
     PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
@@ -91,11 +48,12 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KNodetable_Object")
     khmer_nodetable_new,     /* tp_new */
 };
 
-//
-// khmer_nodetable_new
-//
 
-static PyObject* khmer_nodetable_new(PyTypeObject * type, PyObject * args,
+PyMethodDef khmer_nodetable_methods[] = {
+    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+PyObject* khmer_nodetable_new(PyTypeObject * type, PyObject * args,
                                      PyObject * kwds)
 {
     khmer_KNodetable_Object * self;
@@ -128,4 +86,7 @@ static PyObject* khmer_nodetable_new(PyTypeObject * type, PyObject * args,
     }
 
     return (PyObject *) self;
+
+}
+
 }
diff --git a/src/khmer/_cpy_readaligner.cc b/src/khmer/_cpy_readaligner.cc
new file mode 100644
index 0000000..5c6ad0b
--- /dev/null
+++ b/src/khmer/_cpy_readaligner.cc
@@ -0,0 +1,242 @@
+#include "khmer/_cpy_countgraph.hh"
+#include "khmer/_cpy_readaligner.hh"
+#include <string>
+
+using namespace oxli;
+
+namespace khmer {
+
+PyTypeObject khmer_ReadAlignerType = {
+    PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
+    "_khmer.ReadAligner",		    /*tp_name*/
+    sizeof(khmer_ReadAligner_Object),	    /*tp_basicsize*/
+    0,					    /*tp_itemsize*/
+    (destructor)khmer_readaligner_dealloc,  /*tp_dealloc*/
+    0,                          /*tp_print*/
+    0,                          /*tp_getattr*/
+    0,                          /*tp_setattr*/
+    0,                          /*tp_compare*/
+    0,                          /*tp_repr*/
+    0,                          /*tp_as_number*/
+    0,                          /*tp_as_sequence*/
+    0,                          /*tp_as_mapping*/
+    0,                          /*tp_hash */
+    0,                          /*tp_call*/
+    0,                          /*tp_str*/
+    0,                          /*tp_getattro*/
+    0,                          /*tp_setattro*/
+    0,                          /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,         /*tp_flags*/
+    "ReadAligner object",           /* tp_doc */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
+    khmer_ReadAligner_methods, /* tp_methods */
+    0,                         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    0,			               /* tp_init */
+    0,                         /* tp_alloc */
+    khmer_ReadAligner_new,     /* tp_new */
+};
+
+
+
+PyMethodDef khmer_ReadAligner_methods[] = {
+    {"align", (PyCFunction)readaligner_align, METH_VARARGS, ""},
+    {"align_forward", (PyCFunction)readaligner_align_forward, METH_VARARGS, ""},
+    {
+        "get_scoring_matrix", (PyCFunction)khmer_ReadAligner_get_scoring_matrix,
+        METH_VARARGS,
+        "Get the scoring matrix in use.\n\n\
+Returns a tuple of floats: (trusted_match, trusted_mismatch, untrusted_match, \
+untrusted_mismatch)"
+    },
+    {
+        "get_transition_probabilities",
+        (PyCFunction)khmer_ReadAligner_get_transition_probabilities,
+        METH_VARARGS,
+        "Get the transition probabilties in use.\n\n\
+HMM state notation abbreviations:\n\
+    M_t - trusted match; M_u - untrusted match\n\
+    Ir_t - trusted read insert; Ir_u - untrusted read insert\n\
+    Ig_t - trusted graph insert; Ig_u - untrusted graph insert\n\
+\
+Returns a sparse matrix as a tuple of six tuples.\n\
+The inner tuples contain 6, 4, 4, 6, 4, and 4 floats respectively.\n\
+Transition are notated as 'StartState-NextState':\n\
+(\n\
+  ( M_t-M_t,  M_t-Ir_t,  M_t-Ig_t,  M_t-M_u,  M_t-Ir_u,  M_t-Ig_u),\n\
+  (Ir_t-M_t, Ir_t-Ir_t,            Ir_t-M_u, Ir_t-Ir_u           ),\n\
+  (Ig_t-M_t,          , Ig_t-Ig_t, Ig_t-M_u,            Ig_t-Ig_u),\n\
+  ( M_u-M_t,  M_u-Ir_t,  M_u-Ig_t,  M_u-M_u,  M_u-Ir_u,  M_u-Ig_u),\n\
+  (Ir_u-M_t, Ir_u-Ir_t,            Ir_u-M_u, Ir_u-Ir_u           ),\n\
+  (Ig_u-M_t,          , Ig_u-Ig_t, Ig_u-M_u,            Ig_u-Ig_u)\n\
+)"
+    },
+    {NULL} /* Sentinel */
+};
+
+PyObject * readaligner_align(khmer_ReadAligner_Object * me,
+                                    PyObject * args)
+{
+    const char * read;
+
+    if (!PyArg_ParseTuple(args, "s", &read)) {
+        return NULL;
+    }
+
+    /*if (strlen(read) < (unsigned int)aligner->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }*/
+
+    Alignment * aln = me->aligner->Align(read);
+
+    const char* alignment = aln->graph_alignment.c_str();
+    const char* readAlignment = aln->read_alignment.c_str();
+    PyObject * ret = Py_BuildValue("dssO", aln->score, alignment,
+                                   readAlignment, (aln->truncated)? Py_True : Py_False);
+    delete aln;
+
+    return ret;
+}
+
+PyObject * readaligner_align_forward(khmer_ReadAligner_Object * me,
+        PyObject * args)
+{
+    ReadAligner * aligner = me->aligner;
+
+    const char * read;
+
+    if (!PyArg_ParseTuple(args, "s", &read)) {
+        return NULL;
+    }
+
+    /*if (strlen(read) < (unsigned int)aligner->ksize()) {
+        PyErr_SetString(PyExc_ValueError,
+                        "string length must >= the hashtable k-mer size");
+        return NULL;
+    }*/
+
+    Alignment * aln;
+    aln = aligner->AlignForward(read);
+
+    const char* alignment = aln->graph_alignment.c_str();
+    const char* readAlignment = aln->read_alignment.c_str();
+    PyObject * x = PyList_New(aln->covs.size());
+    for (size_t i = 0; i < aln->covs.size(); i++ ) {
+        PyList_SET_ITEM(x, i, PyLong_FromLong(aln->covs[i]));
+    }
+
+    PyObject * ret = Py_BuildValue("dssOO", aln->score, alignment,
+                                   readAlignment,
+                                   (aln->truncated)? Py_True : Py_False,
+                                   x);
+    delete aln;
+    Py_DECREF(x);
+
+    return ret;
+}
+
+PyObject* khmer_ReadAligner_get_scoring_matrix(
+    khmer_ReadAligner_Object * me, PyObject * args)
+{
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+    ScoringMatrix matrix = me->aligner->getScoringMatrix();
+
+    return Py_BuildValue( "dddd", matrix.trusted_match, matrix.trusted_mismatch,
+                          matrix.untrusted_match, matrix.untrusted_mismatch);
+}
+
+PyObject* khmer_ReadAligner_get_transition_probabilities(
+    khmer_ReadAligner_Object * me, PyObject * args)
+{
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+    ScoringMatrix matrix = me->aligner->getScoringMatrix();
+
+    return Py_BuildValue( "(dddddd)(dddd)(dddd)(dddddd)(dddd)(dddd)",
+                          matrix.tsc[0], matrix.tsc[1], matrix.tsc[2],
+                          matrix.tsc[3], matrix.tsc[4], matrix.tsc[5],
+                          matrix.tsc[6], matrix.tsc[7], matrix.tsc[8],
+                          matrix.tsc[9], matrix.tsc[10], matrix.tsc[11],
+                          matrix.tsc[12], matrix.tsc[13], matrix.tsc[14],
+                          matrix.tsc[15], matrix.tsc[16], matrix.tsc[17],
+                          matrix.tsc[18], matrix.tsc[19], matrix.tsc[20],
+                          matrix.tsc[21], matrix.tsc[22], matrix.tsc[23],
+                          matrix.tsc[24], matrix.tsc[25], matrix.tsc[26],
+                          matrix.tsc[27]);
+}
+
+
+
+//
+// khmer_readaligner_dealloc -- clean up readaligner object
+// GRAPHALIGN addition
+//
+void khmer_readaligner_dealloc(khmer_ReadAligner_Object* obj)
+{
+    delete obj->aligner;
+    obj->aligner = NULL;
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+//
+// new_readaligner
+//
+PyObject* khmer_ReadAligner_new(PyTypeObject *type, PyObject * args,
+                                       PyObject *kwds)
+{
+    khmer_ReadAligner_Object * self;
+
+    self = (khmer_ReadAligner_Object *)type->tp_alloc(type, 0);
+
+    if (self != NULL) {
+        khmer_KCountgraph_Object * ch = NULL;
+        unsigned short int trusted_cov_cutoff = 2;
+        double bits_theta = 1;
+        double scoring_matrix[] = { 0, 0, 0, 0 };
+        double * transitions = new double[28];
+
+        if(!PyArg_ParseTuple(
+                    args,
+                    "O!Hd|(dddd)((dddddd)(dddd)(dddd)(dddddd)(dddd)(dddd))",
+                    &khmer_KCountgraph_Type, &ch, &trusted_cov_cutoff,
+                    &bits_theta, &scoring_matrix[0], &scoring_matrix[1],
+                    &scoring_matrix[2], &scoring_matrix[3], &transitions[0],
+                    &transitions[1], &transitions[2], &transitions[3],
+                    &transitions[4], &transitions[5], &transitions[6],
+                    &transitions[7], &transitions[8], &transitions[9],
+                    &transitions[10], &transitions[11], &transitions[12],
+                    &transitions[13], &transitions[14], &transitions[15],
+                    &transitions[16], &transitions[17], &transitions[18],
+                    &transitions[19], &transitions[20], &transitions[21],
+                    &transitions[22], &transitions[23], &transitions[24],
+                    &transitions[25], &transitions[26], &transitions[27])) {
+            Py_DECREF(self);
+            return NULL;
+        }
+
+        self->aligner = new ReadAligner(ch->countgraph, trusted_cov_cutoff,
+                                        bits_theta, scoring_matrix,
+                                        transitions);
+    }
+
+    return (PyObject *) self;
+}
+
+}
diff --git a/src/khmer/_cpy_readparsers.cc b/src/khmer/_cpy_readparsers.cc
new file mode 100644
index 0000000..d80dd28
--- /dev/null
+++ b/src/khmer/_cpy_readparsers.cc
@@ -0,0 +1,639 @@
+#include "khmer/_cpy_readparsers.hh"
+#include <string>
+
+using namespace oxli;
+using namespace oxli::read_parsers;
+
+namespace khmer {
+
+PyTypeObject khmer_Read_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
+    "khmer.Read",                         /* tp_name */
+    sizeof(khmer_Read_Object),            /* tp_basicsize */
+    0,                                    /* tp_itemsize */
+    (destructor)khmer_Read_dealloc,       /* tp_dealloc */
+    0,                                    /* tp_print */
+    0,                                    /* tp_getattr */
+    0,                                    /* tp_setattr */
+    0,                                    /* tp_compare */
+    0,                                    /* tp_repr */
+    0,                                    /* tp_as_number */
+    &khmer_Read_sequence_methods,         /* tp_as_sequence */
+    0,                                    /* tp_as_mapping */
+    0,                                    /* tp_hash */
+    0,                                    /* tp_call */
+    0,                                    /* tp_str */
+    0,                                    /* tp_getattro */
+    0,                                    /* tp_setattro */
+    0,                                    /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                   /* tp_flags */
+    "A FASTQ record plus some metadata.", /* tp_doc */
+    0,                                    /* tp_traverse */
+    0,                                    /* tp_clear */
+    0,                                    /* tp_richcompare */
+    0,                                    /* tp_weaklistoffset */
+    0,                                    /* tp_iter */
+    0,                                    /* tp_iternext */
+    0,                                    /* tp_methods */
+    0,                                    /* tp_members */
+    (PyGetSetDef *)khmer_Read_accessors,  /* tp_getset */
+    0,                                    /* tp_base */
+    0,                                    /* tp_dict */
+    0,                                    /* tp_descr_get */
+    0,                                    /* tp_descr_set */
+    0,                                    /* tp_dictoffset */
+    (initproc)khmer_Read_init,            /* tp_init */
+    0,                                    /* tp_alloc */
+    khmer_Read_new,                       /* tp_new */
+};
+
+PyGetSetDef khmer_Read_accessors [ ] = {
+    {
+        (char *)"name",
+        (getter)Read_get_name, (setter)NULL,
+        (char *)"Read identifier.", NULL
+    },
+    {
+        (char *)"sequence",
+        (getter)Read_get_sequence, (setter)NULL,
+        (char *)"Genomic sequence.", NULL
+    },
+    {
+        (char *)"quality",
+        (getter)Read_get_quality, (setter)NULL,
+        (char *)"Quality scores.", NULL
+    },
+    {
+        (char *)"description",
+        (getter)Read_get_description, (setter)NULL,
+        (char *)"Description.", NULL
+    },
+    {
+        (char *)"cleaned_seq",
+        (getter)Read_get_cleaned_seq, (setter)NULL,
+        (char *)"Cleaned sequence.", NULL
+    },
+
+    { NULL, NULL, NULL, NULL, NULL } // sentinel
+};
+
+
+PySequenceMethods khmer_Read_sequence_methods = {
+    (lenfunc)khmer_Read_len,                  /* sq_length */
+};
+
+
+PyTypeObject khmer_ReadPairIterator_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)              /* init & ob_size */
+    "_khmer.ReadPairIterator",                   /* tp_name */
+    sizeof(khmer_ReadPairIterator_Object),      /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    (destructor)khmer_ReadPairIterator_dealloc, /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_compare */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    0,                                          /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                         /* tp_flags */
+    "Iterates over 'ReadParser' objects and returns read pairs.", /* tp_doc */
+    0,                                          /* tp_traverse */
+    0,                                          /* tp_clear */
+    0,                                          /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    PyObject_SelfIter,                          /* tp_iter */
+    (iternextfunc)_ReadPairIterator_iternext,   /* tp_iternext */
+};
+
+PyMethodDef _ReadParser_methods [ ] = {
+    {
+        "iter_reads",       (PyCFunction)ReadParser_iter_reads,
+        METH_NOARGS,        "Iterates over reads."
+    },
+    {
+        "iter_read_pairs",  (PyCFunction)ReadParser_iter_read_pairs,
+        METH_VARARGS,       "Iterates over paired reads as pairs."
+    },
+    {
+        "close",  (PyCFunction)ReadParser_close,
+        METH_NOARGS,       "Close associated files."
+    },
+    { NULL, NULL, 0, NULL } // sentinel
+};
+
+
+PyGetSetDef khmer_ReadParser_accessors[] = {
+    {
+        (char *)"num_reads",
+        (getter)ReadParser_get_num_reads, NULL,
+        (char *)"count of reads processed thus far.",
+        NULL
+    },
+    {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+};
+
+
+PyTypeObject khmer_ReadParser_Type
+CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_ReadParser_Object")
+= {
+    PyVarObject_HEAD_INIT(NULL, 0)             /* init & ob_size */
+    "_khmer.ReadParser",                        /* tp_name */
+    sizeof(khmer_ReadParser_Object),           /* tp_basicsize */
+    0,                                         /* tp_itemsize */
+    (destructor)_ReadParser_dealloc,           /* tp_dealloc */
+    0,                                         /* tp_print */
+    0,                                         /* tp_getattr */
+    0,                                         /* tp_setattr */
+    0,                                         /* tp_compare */
+    0,                                         /* tp_repr */
+    0,                                         /* tp_as_number */
+    0,                                         /* tp_as_sequence */
+    0,                                         /* tp_as_mapping */
+    0,                                         /* tp_hash */
+    0,                                         /* tp_call */
+    0,                                         /* tp_str */
+    0,                                         /* tp_getattro */
+    0,                                         /* tp_setattro */
+    0,                                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                        /* tp_flags */
+    "Parses streams from various file formats, " \
+    "such as FASTA and FASTQ.",                /* tp_doc */
+    0,                                         /* tp_traverse */
+    0,                                         /* tp_clear */
+    0,                                         /* tp_richcompare */
+    0,                                         /* tp_weaklistoffset */
+    PyObject_SelfIter,                         /* tp_iter */
+    (iternextfunc)_ReadParser_iternext,        /* tp_iternext */
+    _ReadParser_methods,                       /* tp_methods */
+    0,                                         /* tp_members */
+    khmer_ReadParser_accessors,                /* tp_getset */
+    0,                                         /* tp_base */
+    0,                                         /* tp_dict */
+    0,                                         /* tp_descr_get */
+    0,                                         /* tp_descr_set */
+    0,                                         /* tp_dictoffset */
+    0,                                         /* tp_init */
+    0,                                         /* tp_alloc */
+    _ReadParser_new,                           /* tp_new */
+};
+
+
+
+/***********************************************************************/
+
+//
+// Read object -- name, sequence, and FASTQ stuff
+//
+
+PyObject*
+khmer_Read_new(PyTypeObject * type, PyObject * args, PyObject * kwds)
+{
+    khmer_Read_Object * self;
+    self = (khmer_Read_Object *)type->tp_alloc(type, 0);
+    if (self != NULL) {
+        try {
+            self->read = new Read;
+        } catch (std::bad_alloc &exc) {
+            Py_DECREF(self);
+            return PyErr_NoMemory();
+        }
+    }
+    return (PyObject *)self;
+}
+
+int
+khmer_Read_init(khmer_Read_Object *self, PyObject *args, PyObject *kwds)
+{
+    const char * name{};
+    const char * description{};
+    const char * sequence{};
+    const char * quality{};
+    char *kwlist[5] = {
+        const_cast<char *>("name"), const_cast<char *>("sequence"),
+        const_cast<char *>("quality"), const_cast<char *>("description"), NULL
+    };
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|zz", kwlist,
+                                     &name, &sequence, &quality, &description)) {
+        return -1;
+    }
+
+    if (name != NULL) {
+        self->read->name = name;
+    }
+    if (sequence != NULL) {
+        self->read->sequence = sequence;
+        self->read->set_clean_seq();
+    }
+    if (quality != NULL) {
+        self->read->quality = quality;
+    }
+    if (description != NULL) {
+        self->read->description = description;
+    }
+    return 0;
+}
+
+void
+khmer_Read_dealloc(khmer_Read_Object * obj)
+{
+    delete obj->read;
+    obj->read = NULL;
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+
+Py_ssize_t
+khmer_Read_len(khmer_Read_Object* obj)
+{
+    return obj->read->sequence.size();
+}
+
+
+PyObject *
+Read_get_name(khmer_Read_Object * obj, void * closure )
+{
+    if (obj->read->name.size() > 0) {
+        return PyUnicode_FromString(obj->read->name.c_str());
+    } else {
+        PyErr_SetString(PyExc_AttributeError,
+                        "'Read' object has no attribute 'name'.");
+        return NULL;
+    }
+}
+
+
+PyObject *
+Read_get_sequence(khmer_Read_Object * obj, void * closure)
+{
+    if (obj->read->sequence.size() > 0) {
+        return PyUnicode_FromString(obj->read->sequence.c_str());
+    } else {
+        PyErr_SetString(PyExc_AttributeError,
+                        "'Read' object has no attribute 'sequence'.");
+        return NULL;
+    }
+}
+
+
+PyObject *
+Read_get_quality(khmer_Read_Object * obj, void * closure)
+{
+    if (obj->read->quality.size() > 0) {
+        return PyUnicode_FromString(obj->read->quality.c_str());
+    } else {
+        PyErr_SetString(PyExc_AttributeError,
+                        "'Read' object has no attribute 'quality'.");
+        return NULL;
+    }
+}
+
+
+PyObject *
+Read_get_description(khmer_Read_Object * obj, void * closure)
+{
+    if (obj->read->description.size() > 0) {
+        return PyUnicode_FromString(obj->read->description.c_str());
+    } else {
+        PyErr_SetString(PyExc_AttributeError,
+                        "'Read' object has no attribute 'description'.");
+        return NULL;
+    }
+}
+
+
+PyObject *
+Read_get_cleaned_seq(khmer_Read_Object * obj, void * closure)
+{
+    if (obj->read->cleaned_seq.size() > 0) {
+        return PyUnicode_FromString(obj->read->cleaned_seq.c_str());
+    } else if (obj->read->sequence.size() > 0) {
+        obj->read->set_clean_seq();
+        return PyUnicode_FromString(obj->read->cleaned_seq.c_str());
+    } else {
+        PyErr_SetString(PyExc_AttributeError,
+                        "'Read' object has no attribute 'cleaned_seq'.");
+        return NULL;
+    }
+}
+
+
+int
+Read_set_cleaned_seq(khmer_Read_Object *obj, PyObject *value, void *closure)
+{
+    if (value == NULL) {
+        obj->read->cleaned_seq = "";
+        return 0;
+    }
+
+    if (! (PyUnicode_Check(value) | PyBytes_Check(value))) {
+        PyErr_SetString(PyExc_TypeError,
+                        "The 'cleaned_seq' attribute value must be a string");
+        return -1;
+    }
+
+    if (PyUnicode_Check(value)) {
+        PyObject* temp = PyUnicode_AsASCIIString(value);
+        if (temp == NULL) {
+            PyErr_SetString(PyExc_TypeError,
+                            "Could not encode 'cleaned_seq' as ASCII.");
+            return -1;
+        }
+
+        obj->read->cleaned_seq = std::string(PyBytes_AS_STRING(temp));
+        Py_DECREF(temp);
+    }
+    // in python2 not everything is a unicode object
+    else {
+        obj->read->cleaned_seq = std::string(PyBytes_AS_STRING(value));
+    }
+
+    return 0;
+}
+
+
+// TODO? Implement setters.
+
+
+
+/***********************************************************************/
+
+//
+// ReadParser object -- parse reads directly from streams
+// ReadPairIterator -- return pairs of Read objects
+//
+
+
+void
+_ReadParser_dealloc(khmer_ReadParser_Object * obj)
+{
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+
+void
+khmer_ReadPairIterator_dealloc(khmer_ReadPairIterator_Object * obj)
+{
+    Py_DECREF(obj->parent);
+    obj->parent = NULL;
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+
+PyObject *
+_ReadParser_new( PyTypeObject * subtype, PyObject * args, PyObject * kwds )
+{
+    const char *      ifile_name_CSTR;
+
+    if (!PyArg_ParseTuple(args, "s", &ifile_name_CSTR )) {
+        return NULL;
+    }
+    std:: string    ifile_name( ifile_name_CSTR );
+
+    PyObject * self     = subtype->tp_alloc( subtype, 1 );
+    if (self == NULL) {
+        return NULL;
+    }
+    khmer_ReadParser_Object * myself  = (khmer_ReadParser_Object *)self;
+
+    // Wrap the low-level parser object.
+    try {
+        myself->parser = get_parser<FastxReader>(ifile_name);
+    } catch (oxli_file_exception &exc) {
+        PyErr_SetString( PyExc_OSError, exc.what() );
+        return NULL;
+    }
+    return self;
+}
+
+PyObject *
+_ReadParser_iternext( PyObject * self )
+{
+    khmer_ReadParser_Object * myself  = (khmer_ReadParser_Object *)self;
+    FastxParserPtr&       parser  = myself->parser;
+    std::string exc_string;
+
+    bool        stop_iteration  = false;
+    const char *value_exception = NULL;
+    const char *file_exception  = NULL;
+    Read       *the_read_PTR    = NULL;
+    try {
+        the_read_PTR = new Read( );
+    } catch (std::bad_alloc &exc) {
+        return PyErr_NoMemory();
+    }
+
+    Py_BEGIN_ALLOW_THREADS
+    stop_iteration = parser->is_complete( );
+    if (!stop_iteration) {
+        try {
+            *the_read_PTR = parser->get_next_read();
+        } catch (NoMoreReadsAvailable &exc) {
+            stop_iteration = true;
+        } catch (oxli_file_exception &exc) {
+            exc_string = exc.what();
+            file_exception = exc_string.c_str();
+        } catch (oxli_value_exception &exc) {
+            exc_string = exc.what();
+            value_exception = exc_string.c_str();
+        }
+    }
+    Py_END_ALLOW_THREADS
+
+    // Note: Can simply return NULL instead of setting the StopIteration
+    //       exception.
+    if (stop_iteration) {
+        delete the_read_PTR;
+        return NULL;
+    }
+
+    if (file_exception != NULL) {
+        delete the_read_PTR;
+        PyErr_SetString(PyExc_OSError, file_exception);
+        return NULL;
+    }
+    if (value_exception != NULL) {
+        delete the_read_PTR;
+        PyErr_SetString(PyExc_ValueError, value_exception);
+        return NULL;
+    }
+
+    PyObject * the_read_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 );
+    ((khmer_Read_Object *)the_read_OBJECT)->read = the_read_PTR;
+    return the_read_OBJECT;
+}
+
+
+PyObject *
+_ReadPairIterator_iternext(khmer_ReadPairIterator_Object * myself)
+{
+    khmer_ReadParser_Object * parent = (khmer_ReadParser_Object*)myself->parent;
+    FastxParserPtr& parser = parent->parser;
+    uint8_t     pair_mode = myself->pair_mode;
+
+    ReadPair    the_read_pair;
+    bool        stop_iteration  = false;
+    const char *value_exception = NULL;
+    const char *file_exception  = NULL;
+    std::string exc_string;
+
+    Py_BEGIN_ALLOW_THREADS
+    stop_iteration = parser->is_complete( );
+    if (!stop_iteration) {
+        try {
+            the_read_pair = parser->get_next_read_pair(pair_mode);
+        } catch (NoMoreReadsAvailable &exc) {
+            stop_iteration = true;
+        } catch (oxli_file_exception &exc) {
+            exc_string = exc.what();
+            file_exception = exc_string.c_str();
+        } catch (oxli_value_exception &exc) {
+            exc_string = exc.what();
+            value_exception = exc_string.c_str();
+        }
+    }
+    Py_END_ALLOW_THREADS
+
+    // Note: Can return NULL instead of setting the StopIteration exception.
+    if (stop_iteration) {
+        return NULL;
+    }
+    if (file_exception != NULL) {
+        PyErr_SetString(PyExc_OSError, file_exception);
+        return NULL;
+    }
+    if (value_exception != NULL) {
+        PyErr_SetString(PyExc_ValueError, value_exception);
+        return NULL;
+    }
+
+    // Copy elements of 'ReadPair' object into Python tuple.
+    // TODO? Replace dummy reads with 'None' object.
+    PyObject * read_1_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 );
+    try {
+        ((khmer_Read_Object *)read_1_OBJECT)->read = new Read( the_read_pair.first );
+    } catch (std::bad_alloc &e) {
+        return PyErr_NoMemory();
+    }
+    PyObject * read_2_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 );
+    try {
+        ((khmer_Read_Object *)read_2_OBJECT)->read = new Read( the_read_pair.second );
+    } catch (std::bad_alloc &e) {
+        delete ((khmer_Read_Object *)read_1_OBJECT)->read;
+        return PyErr_NoMemory();
+    }
+    PyObject * tup = PyTuple_Pack( 2, read_1_OBJECT, read_2_OBJECT );
+    Py_XDECREF(read_1_OBJECT);
+    Py_XDECREF(read_2_OBJECT);
+    return tup;
+}
+
+
+PyObject *
+ReadParser_iter_reads(PyObject * self, PyObject * args )
+{
+    return PyObject_SelfIter( self );
+}
+
+PyObject *
+ReadParser_get_num_reads(khmer_ReadParser_Object * me)
+{
+    return PyLong_FromLong(me->parser->get_num_reads());
+}
+
+PyObject *
+ReadParser_iter_read_pairs(PyObject * self, PyObject * args )
+{
+    int pair_mode = ReadParser<FastxReader>::PAIR_MODE_ERROR_ON_UNPAIRED;
+
+    if (!PyArg_ParseTuple( args, "|i", &pair_mode )) {
+        return NULL;
+    }
+
+    // Capture existing read parser.
+    PyObject * obj = khmer_ReadPairIterator_Type.tp_alloc(
+                         &khmer_ReadPairIterator_Type, 1
+                     );
+    if (obj == NULL) {
+        return NULL;
+    }
+    khmer_ReadPairIterator_Object * rpi   = (khmer_ReadPairIterator_Object *)obj;
+    rpi->parent             = self;
+    rpi->pair_mode          = pair_mode;
+
+    // Increment reference count on existing ReadParser object so that it
+    // will not go away until all ReadPairIterator instances have gone away.
+    Py_INCREF( self );
+
+    return obj;
+}
+
+
+PyObject *
+ReadParser_close(PyObject * self, PyObject * args)
+{
+    FastxParserPtr& rparser = _PyObject_to_khmer_ReadParser(self);
+    rparser->close();
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+void _init_ReadParser_Type_constants()
+{
+    PyObject * cls_attrs_DICT = PyDict_New( );
+    if (cls_attrs_DICT == NULL) {
+        return;
+    }
+
+    // Place pair mode constants into class dictionary.
+    int result;
+    PyObject *value = PyLong_FromLong(
+                          ReadParser<FastxReader>::PAIR_MODE_IGNORE_UNPAIRED);
+    if (value == NULL) {
+        Py_DECREF(cls_attrs_DICT);
+        return;
+    }
+    result = PyDict_SetItemString(cls_attrs_DICT,
+                                  "PAIR_MODE_IGNORE_UNPAIRED", value );
+    Py_XDECREF(value);
+    if (!result) {
+        Py_DECREF(cls_attrs_DICT);
+        return;
+    }
+
+    value = PyLong_FromLong(ReadParser<FastxReader>::PAIR_MODE_ERROR_ON_UNPAIRED);
+    if (value == NULL) {
+        Py_DECREF(cls_attrs_DICT);
+        return;
+    }
+    result = PyDict_SetItemString(cls_attrs_DICT,
+                                  "PAIR_MODE_ERROR_ON_UNPAIRED", value);
+    Py_XDECREF(value);
+    if (!result) {
+        Py_DECREF(cls_attrs_DICT);
+        return;
+    }
+
+    khmer_ReadParser_Type.tp_dict     = cls_attrs_DICT;
+}
+
+
+FastxParserPtr& _PyObject_to_khmer_ReadParser(PyObject * py_object)
+{
+    // TODO: Add type-checking.
+
+    return ((khmer_ReadParser_Object *)py_object)->parser;
+}
+
+
+}
diff --git a/khmer/_cpy_smallcountgraph.hh b/src/khmer/_cpy_smallcountgraph.cc
similarity index 65%
rename from khmer/_cpy_smallcountgraph.hh
rename to src/khmer/_cpy_smallcountgraph.cc
index 40c18f3..275e33b 100644
--- a/khmer/_cpy_smallcountgraph.hh
+++ b/src/khmer/_cpy_smallcountgraph.cc
@@ -1,92 +1,12 @@
-/*
-This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2016, The Regents of the University of California.
-
-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 Michigan State 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 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 COPYRIGHT
-HOLDER 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.
-LICENSE (END)
-
-Contact: khmer-project at idyll.org
-*/
+#include "khmer/_cpy_smallcountgraph.hh"
+#include "oxli/hashgraph.hh"
 
-//
-// KSmallCountgraph object
-//
-
-typedef struct {
-    khmer_KHashgraph_Object khashgraph;
-    SmallCountgraph * countgraph;
-} khmer_KSmallCountgraph_Object;
-
-static void khmer_smallcountgraph_dealloc(khmer_KSmallCountgraph_Object * obj);
-
-static
-PyObject *
-smallcount_get_raw_tables(khmer_KSmallCountgraph_Object * self, PyObject * args)
-{
-    SmallCountgraph * countgraph = self->countgraph;
+using namespace oxli;
 
-    khmer::Byte ** table_ptrs = countgraph->get_raw_tables();
-    std::vector<uint64_t> sizes = countgraph->get_tablesizes();
-
-    PyObject * raw_tables = PyList_New(sizes.size());
-    for (unsigned int i=0; i<sizes.size(); ++i) {
-        Py_buffer buffer;
-        int res = PyBuffer_FillInfo(&buffer, NULL, table_ptrs[i],
-                                    sizes[i] / 2 +1, 0,
-                                    PyBUF_FULL_RO);
-        if (res == -1) {
-            return NULL;
-        }
-        PyObject * buf = PyMemoryView_FromBuffer(&buffer);
-        if(!PyMemoryView_Check(buf)) {
-            return NULL;
-        }
-        PyList_SET_ITEM(raw_tables, i, buf);
-    }
-
-    return raw_tables;
-}
-
-static PyMethodDef khmer_smallcountgraph_methods[] = {
-    {
-        "get_raw_tables",
-        (PyCFunction)smallcount_get_raw_tables, METH_VARARGS,
-        "Get a list of the raw storage tables as memoryview objects."
-    },
-    {NULL, NULL, 0, NULL}           /* sentinel */
-};
 
-static PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
-        PyObject * kwds);
+namespace khmer {
 
-static PyTypeObject khmer_KSmallCountgraph_Type
+PyTypeObject khmer_KSmallCountgraph_Type
 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCountgraph_Object")
 = {
     PyVarObject_HEAD_INIT(NULL, 0)       /* init & ob_size */
@@ -129,11 +49,48 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCountgraph_Object")
     khmer_smallcountgraph_new,                /* tp_new */
 };
 
+PyMethodDef khmer_smallcountgraph_methods[] = {
+    {
+        "get_raw_tables",
+        (PyCFunction)smallcount_get_raw_tables, METH_VARARGS,
+        "Get a list of the raw storage tables as memoryview objects."
+    },
+    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+PyObject *
+smallcount_get_raw_tables(khmer_KSmallCountgraph_Object * self, PyObject * args)
+{
+    SmallCountgraph * countgraph = self->countgraph;
+
+    oxli::Byte ** table_ptrs = countgraph->get_raw_tables();
+    std::vector<uint64_t> sizes = countgraph->get_tablesizes();
+
+    PyObject * raw_tables = PyList_New(sizes.size());
+    for (unsigned int i=0; i<sizes.size(); ++i) {
+        Py_buffer buffer;
+        int res = PyBuffer_FillInfo(&buffer, NULL, table_ptrs[i],
+                                    sizes[i] / 2 +1, 0,
+                                    PyBUF_FULL_RO);
+        if (res == -1) {
+            return NULL;
+        }
+        PyObject * buf = PyMemoryView_FromBuffer(&buffer);
+        if(!PyMemoryView_Check(buf)) {
+            return NULL;
+        }
+        PyList_SET_ITEM(raw_tables, i, buf);
+    }
+
+    return raw_tables;
+}
+
+
 //
 // khmer_smallcountgraph_dealloc -- clean up a countgraph hash object.
 //
 
-static void khmer_smallcountgraph_dealloc(khmer_KSmallCountgraph_Object * obj)
+void khmer_smallcountgraph_dealloc(khmer_KSmallCountgraph_Object * obj)
 {
     delete obj->countgraph;
     obj->countgraph = NULL;
@@ -144,7 +101,7 @@ static void khmer_smallcountgraph_dealloc(khmer_KSmallCountgraph_Object * obj)
 // khmer_smallcountgraph_new
 //
 
-static PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
+PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
         PyObject * kwds)
 {
     khmer_KSmallCountgraph_Object * self;
@@ -179,3 +136,5 @@ static PyObject* khmer_smallcountgraph_new(PyTypeObject * type, PyObject * args,
 
     return (PyObject *) self;
 }
+
+}
diff --git a/khmer/_cpy_smallcounttable.hh b/src/khmer/_cpy_smallcounttable.cc
similarity index 56%
rename from khmer/_cpy_smallcounttable.hh
rename to src/khmer/_cpy_smallcounttable.cc
index decef6c..ffdd2d2 100644
--- a/khmer/_cpy_smallcounttable.hh
+++ b/src/khmer/_cpy_smallcounttable.cc
@@ -1,49 +1,11 @@
-/*
-This file is part of khmer, https://github.com/dib-lab/khmer/, and is
-Copyright (C) 2016, The Regents of the University of California.
+#include "khmer/_cpy_smallcounttable.hh"
+#include "oxli/hashtable.hh"
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+using namespace oxli;
 
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
+namespace khmer {
 
-    * 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 Michigan State 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 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 COPYRIGHT
-HOLDER 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.
-LICENSE (END)
-
-Contact: khmer-project at idyll.org
-*/
-
-typedef struct {
-    khmer_KHashtable_Object khashtable;
-    SmallCounttable * counttable;
-} khmer_KSmallCounttable_Object;
-
-static PyObject* khmer_smallcounttable_new(PyTypeObject * type, PyObject * args,
-        PyObject * kwds);
-
-static PyTypeObject khmer_KSmallCounttable_Type
+PyTypeObject khmer_KSmallCounttable_Type
 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCounttable_Object")
 = {
     PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */
@@ -91,7 +53,7 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KSmallCounttable_Object")
 // khmer_smallcounttable_new
 //
 
-static PyObject* khmer_smallcounttable_new(PyTypeObject * type, PyObject * args,
+PyObject* khmer_smallcounttable_new(PyTypeObject * type, PyObject * args,
         PyObject * kwds)
 {
     khmer_KSmallCounttable_Object * self;
@@ -125,3 +87,5 @@ static PyObject* khmer_smallcounttable_new(PyTypeObject * type, PyObject * args,
 
     return (PyObject *) self;
 }
+
+}
diff --git a/src/khmer/_cpy_subsetpartition.cc b/src/khmer/_cpy_subsetpartition.cc
new file mode 100644
index 0000000..5b51d52
--- /dev/null
+++ b/src/khmer/_cpy_subsetpartition.cc
@@ -0,0 +1,263 @@
+#include "khmer/_cpy_subsetpartition.hh"
+#include "khmer/_cpy_countgraph.hh"
+
+using namespace oxli;
+
+namespace khmer {
+
+
+PyTypeObject khmer_PrePartitionInfo_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)        /* init & ob_size */
+    "_khmer.PrePartitionInfo",            /* tp_name */
+    sizeof(khmer_PrePartitionInfo_Object),/* tp_basicsize */
+    0,                                    /* tp_itemsize */
+    (destructor)khmer_PrePartitionInfo_dealloc,       /* tp_dealloc */
+    0,                                    /* tp_print */
+    0,                                    /* tp_getattr */
+    0,                                    /* tp_setattr */
+    0,                                    /* tp_compare */
+    0,                                    /* tp_repr */
+    0,                                    /* tp_as_number */
+    0,                                    /* tp_as_sequence */
+    0,                                    /* tp_as_mapping */
+    0,                                    /* tp_hash */
+    0,                                    /* tp_call */
+    0,                                    /* tp_str */
+    0,                                    /* tp_getattro */
+    0,                                    /* tp_setattro */
+    0,                                    /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                   /* tp_flags */
+    "Stores a k-kmer and a set of tagged seen k-mers.", /* tp_doc */
+};
+
+void
+khmer_PrePartitionInfo_dealloc(khmer_PrePartitionInfo_Object * obj)
+{
+    delete obj->PrePartitionInfo;
+    obj->PrePartitionInfo = NULL;
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+
+
+PyTypeObject khmer_KSubsetPartition_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)         /* init & ob_size */
+    "_khmer.KSubsetPartition",              /* tp_name */
+    sizeof(khmer_KSubsetPartition_Object), /* tp_basicsize */
+    0,                                     /* tp_itemsize */
+    (destructor)khmer_subset_dealloc,      /*tp_dealloc*/
+    0,                                     /*tp_print*/
+    0,                                     /*tp_getattr*/
+    0,                                     /*tp_setattr*/
+    0,                                     /*tp_compare*/
+    0,                                     /*tp_repr*/
+    0,                                     /*tp_as_number*/
+    0,                                     /*tp_as_sequence*/
+    0,                                     /*tp_as_mapping*/
+    0,                                     /*tp_hash */
+    0,                                     /*tp_call*/
+    0,                                     /*tp_str*/
+    0,                                     /*tp_getattro*/
+    0,                                     /*tp_setattro*/
+    0,                                     /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT,                    /*tp_flags*/
+    "subset object",                       /* tp_doc */
+};
+
+PyMethodDef khmer_subset_methods[] = {
+    {
+        "count_partitions",
+        (PyCFunction)subset_count_partitions,
+        METH_VARARGS,
+        ""
+    },
+    {
+        "report_on_partitions",
+        (PyCFunction)subset_report_on_partitions,
+        METH_VARARGS,
+        ""
+    },
+    {
+        "partition_size_distribution",
+        (PyCFunction)subset_partition_size_distribution,
+        METH_VARARGS,
+        ""
+    },
+    {
+        "partition_sizes",
+        (PyCFunction)subset_partition_sizes,
+        METH_VARARGS,
+        ""
+    },
+    {
+        "partition_average_coverages",
+        (PyCFunction)subset_partition_average_coverages,
+        METH_VARARGS,
+        ""
+    },
+    {NULL, NULL, 0, NULL}           /* sentinel */
+};
+
+void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj)
+{
+    delete obj->subset;
+    obj->subset = NULL;
+    Py_TYPE(obj)->tp_free((PyObject*)obj);
+}
+
+
+
+PyObject *
+subset_count_partitions(khmer_KSubsetPartition_Object * me, PyObject * args)
+{
+    SubsetPartition * subset_p = me->subset;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    size_t n_partitions = 0, n_unassigned = 0;
+    subset_p->count_partitions(n_partitions, n_unassigned);
+
+    return Py_BuildValue("nn", (Py_ssize_t) n_partitions,
+                         (Py_ssize_t) n_unassigned);
+}
+
+
+PyObject *
+subset_report_on_partitions(khmer_KSubsetPartition_Object * me, PyObject * args)
+{
+    SubsetPartition * subset_p = me->subset;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    subset_p->report_on_partitions();
+
+    Py_RETURN_NONE;
+}
+
+
+PyObject *
+subset_partition_size_distribution(khmer_KSubsetPartition_Object * me,
+                                   PyObject * args)
+{
+    SubsetPartition * subset_p = me->subset;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    PartitionCountDistribution d;
+
+    unsigned int n_unassigned = 0;
+    subset_p->partition_size_distribution(d, n_unassigned);
+
+    PyObject * x = PyList_New(d.size());
+    if (x == NULL) {
+        return NULL;
+    }
+    PartitionCountDistribution::iterator di;
+
+    unsigned int i;
+    for (i = 0, di = d.begin(); di != d.end(); ++di, i++) {
+        PyObject * tup = Py_BuildValue("KK", di->first, di->second);
+        if (tup != NULL) {
+            PyList_SET_ITEM(x, i, tup);
+        }
+        Py_XDECREF(tup);
+    }
+    if (!(i == d.size())) {
+        throw oxli_exception();
+    }
+
+    PyObject * ret = Py_BuildValue("OI", x, n_unassigned);
+    Py_DECREF(x);
+    return ret;
+}
+
+
+PyObject *
+subset_partition_sizes(khmer_KSubsetPartition_Object * me, PyObject * args)
+{
+    SubsetPartition * subset_p = me->subset;
+
+    unsigned int min_size = 0;
+
+    if (!PyArg_ParseTuple(args, "|I", &min_size)) {
+        return NULL;
+    }
+
+    PartitionCountMap cm;
+    unsigned int n_unassigned = 0;
+    subset_p->partition_sizes(cm, n_unassigned);
+
+    unsigned int i = 0;
+    PartitionCountMap::const_iterator mi;
+    for (mi = cm.begin(); mi != cm.end(); ++mi) {
+        if (mi->second >= min_size) {
+            i++;
+        }
+    }
+
+    PyObject * x = PyList_New(i);
+    if (x == NULL) {
+        return NULL;
+    }
+
+    // this should probably be a dict. @CTB
+    for (i = 0, mi = cm.begin(); mi != cm.end(); ++mi) {
+        if (mi->second >= min_size) {
+            PyObject * tup = Py_BuildValue("II", mi->first, mi->second);
+            if (tup != NULL) {
+                PyList_SET_ITEM(x, i, tup);
+            }
+            i++;
+        }
+    }
+
+    PyObject * ret = Py_BuildValue("OI", x, n_unassigned);
+    Py_DECREF(x);
+
+    return ret;
+}
+
+
+PyObject *
+subset_partition_average_coverages(khmer_KSubsetPartition_Object * me,
+                                   PyObject * args)
+{
+    SubsetPartition * subset_p = me->subset;
+
+    khmer_KCountgraph_Object * countgraph_o;
+
+    if (!PyArg_ParseTuple(args, "O!", &khmer_KCountgraph_Type, &countgraph_o)) {
+        return NULL;
+    }
+
+    PartitionCountMap cm;
+    subset_p->partition_average_coverages(cm, countgraph_o -> countgraph);
+
+    unsigned int i;
+    PartitionCountMap::iterator mi;
+
+    PyObject * x = PyList_New(cm.size());
+    if (x == NULL) {
+        return NULL;
+    }
+
+    // this should probably be a dict. @CTB
+    for (i = 0, mi = cm.begin(); mi != cm.end(); ++mi, i++) {
+        PyObject * tup = Py_BuildValue("II", mi->first, mi->second);
+        if (tup != NULL) {
+            PyList_SET_ITEM(x, i, tup);
+        }
+    }
+
+    return x;
+}
+
+
+
+}
diff --git a/src/khmer/_cpy_utils.cc b/src/khmer/_cpy_utils.cc
new file mode 100644
index 0000000..cc6cdfe
--- /dev/null
+++ b/src/khmer/_cpy_utils.cc
@@ -0,0 +1,177 @@
+#include "khmer/_cpy_utils.hh"
+#include "oxli/oxli.hh"
+
+using namespace oxli;
+using namespace oxli::read_parsers;
+
+namespace khmer {
+
+// Convert a hash to a python long object.
+bool convert_HashIntoType_to_PyObject(const HashIntoType &hashval,
+        PyObject **value)
+{
+    *value = PyLong_FromUnsignedLongLong(hashval);
+    return true;
+}
+
+
+// Convert a python long to a hash
+bool convert_PyLong_to_HashIntoType(PyObject * value, HashIntoType &hashval)
+{
+    if (PyLong_Check(value)) {
+        //(PyLongObject *)
+        hashval = PyLong_AsUnsignedLongLong(value);
+        return true;
+    } else if (PyInt_Check(value)) {
+        hashval = PyInt_AsLong(value);
+        return true;
+    } else {
+        PyErr_SetString(PyExc_ValueError, "could not convert to hash");
+        return false;
+    }
+}
+
+
+// Take a Python object and (try to) convert it to a HashIntoType.
+// Note: will set error condition and return false if cannot do.
+
+bool convert_PyObject_to_HashIntoType(PyObject * value,
+        HashIntoType& hashval,
+        WordLength ksize)
+{
+    if (PyInt_Check(value) || PyLong_Check(value)) {
+        return convert_PyLong_to_HashIntoType(value, hashval);
+    } else {
+        PyErr_SetString(PyExc_ValueError,
+                        "must use a hash");
+        return false;
+    }
+}
+
+// Take a Python object and (try to) convert it to a HashIntoType.
+// Note: will set error condition and return false if cannot do.
+// Further note: the main difference between this and
+// ht_convert_PyObject_to_Kmer is that this will not pass HashIntoType
+// numbers through the Kmer class, which means reverse complements
+// will not be calculated.  There is a test in test_nodegraph.py
+// that checks this.
+
+bool ht_convert_PyObject_to_HashIntoType(PyObject * value,
+        HashIntoType& hashval,
+        const Hashtable * ht)
+{
+    if (PyInt_Check(value) || PyLong_Check(value)) {
+        return convert_PyLong_to_HashIntoType(value, hashval);
+    } else if (PyUnicode_Check(value))  {
+        PyObject* val_as_str = PyUnicode_AsEncodedString(value,
+                               "utf-8", "strict");
+        std::string s = PyBytes_AsString(val_as_str);
+        if (strlen(s.c_str()) != ht->ksize()) {
+            Py_DECREF(val_as_str);
+            PyErr_SetString(PyExc_ValueError,
+                            "k-mer length must equal the k-mer size");
+            return false;
+        }
+
+        try {
+            hashval = ht->hash_dna(s.c_str());
+        } catch (oxli_exception &e) {
+            PyErr_SetString(PyExc_ValueError, e.what());
+            Py_DECREF(val_as_str);
+            return false;
+        }
+
+        Py_DECREF(val_as_str);
+        return true;
+
+    } else if (PyBytes_Check(value)) {
+        std::string s = PyBytes_AsString(value);
+        if (strlen(s.c_str()) != ht->ksize()) {
+            PyErr_SetString(PyExc_ValueError,
+                            "k-mer length must equal the k-mer size");
+            return false;
+        }
+        try {
+            hashval = ht->hash_dna(s.c_str());
+        } catch (oxli_exception &e) {
+            PyErr_SetString(PyExc_ValueError, e.what());
+            return false;
+        }
+        return true;
+    } else {
+        PyErr_SetString(PyExc_ValueError,
+                        "k-mers must be either a hash or a string");
+        return false;
+    }
+}
+
+// Take a Python object and (try to) convert it to a oxli::Kmer.
+// Note: will set error condition and return false if cannot do.
+
+bool ht_convert_PyObject_to_Kmer(PyObject * value,
+                                 Kmer& kmer, const Hashtable * ht)
+{
+    if (PyInt_Check(value) || PyLong_Check(value)) {
+        HashIntoType h;
+        if (!convert_PyLong_to_HashIntoType(value, h)) {
+            return false;
+        }
+        kmer.set_from_unique_hash(h, ht->ksize());
+        return true;
+    } else if (PyUnicode_Check(value))  {
+        std::string s = PyBytes_AsString(PyUnicode_AsEncodedString(
+                                             value, "utf-8", "strict"));
+        if (strlen(s.c_str()) != ht->ksize()) {
+            PyErr_SetString(PyExc_ValueError,
+                            "k-mer length must equal the k-mer size");
+            return false;
+        }
+        kmer = Kmer(s, ht->ksize());
+        return true;
+
+    } else if (PyBytes_Check(value)) {
+        std::string s = PyBytes_AsString(value);
+        if (strlen(s.c_str()) != ht->ksize()) {
+            PyErr_SetString(PyExc_ValueError,
+                            "k-mer length must equal the k-mer size");
+            return false;
+        }
+        kmer = Kmer(s, ht->ksize());
+        return true;
+    } else {
+        PyErr_SetString(PyExc_ValueError,
+                        "k-mers must be either a hash or a string");
+        return false;
+    }
+}
+
+
+bool convert_Pytablesizes_to_vector(PyListObject * sizes_list_o,
+                                           std::vector<uint64_t>& sizes)
+{
+    Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o);
+    if (sizes_list_o_length < 1) {
+        PyErr_SetString(PyExc_ValueError,
+                        "tablesizes needs to be one or more numbers");
+        return false;
+    }
+    for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) {
+        PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i);
+        if (PyLong_Check(size_o)) {
+            sizes.push_back(PyLong_AsUnsignedLongLong(size_o));
+        } else if (PyInt_Check(size_o)) {
+            sizes.push_back(PyInt_AsLong(size_o));
+        } else if (PyFloat_Check(size_o)) {
+            sizes.push_back(PyFloat_AS_DOUBLE(size_o));
+        } else {
+            PyErr_SetString(PyExc_TypeError,
+                            "2nd argument must be a list of ints, longs, or floats");
+            return false;
+        }
+    }
+    return true;
+}
+
+FastxParserPtr& _PyObject_to_khmer_ReadParser(PyObject * py_object);
+
+}
diff --git a/lib/.check_openmp.cc b/src/oxli/.check_openmp.cc
similarity index 100%
rename from lib/.check_openmp.cc
rename to src/oxli/.check_openmp.cc
diff --git a/lib/.gitignore b/src/oxli/.gitignore
similarity index 100%
rename from lib/.gitignore
rename to src/oxli/.gitignore
diff --git a/lib/Makefile b/src/oxli/Makefile
similarity index 86%
rename from lib/Makefile
rename to src/oxli/Makefile
index d05c18c..681d5be 100644
--- a/lib/Makefile
+++ b/src/oxli/Makefile
@@ -67,15 +67,15 @@ PREFIX=/usr/local
 
 ### NOTE: No user-serviceable parts below this line! ###
 
-INCLUDES= -I ../third-party/seqan/core/include/ 	\
-	  -I ../third-party/smhasher/
+INCLUDES= -I ../../include/ -I ../../third-party/seqan/core/include/ \
+	      -I ../../third-party/smhasher/
 
 ifeq ($(USE_SYSTEM_ZLIB), false)
-INCLUDES += -I ../third-party/zlib/
+INCLUDES += -I ../../third-party/zlib/
 endif
 
 ifeq ($(USE_SYSTEM_LIBBZ2), false)
-INCLUDES += -I ../third-party/bzip2/
+INCLUDES += -I ../../third-party/bzip2/
 endif
 
 # Warnings in common to C and C++
@@ -115,9 +115,9 @@ CFLAGS   += $(DEBUG_FLAGS)
 endif
 
 ifeq ($(WANT_EXTRA_SANITY_CHECKING), true)
-DEFINE_KHMER_EXTRA_SANITY_CHECKS=-DKHMER_EXTRA_SANITY_CHECKS
-CXXFLAGS += $(DEFINE_KHMER_EXTRA_SANITY_CHECKS)
-CFLAGS   += $(DEFINE_KHMER_EXTRA_SANITY_CHECKS)
+DEFINE_OXLI_EXTRA_SANITY_CHECKS=-DOXLI_EXTRA_SANITY_CHECKS
+CXXFLAGS += $(DEFINE_OXLI_EXTRA_SANITY_CHECKS)
+CFLAGS   += $(DEFINE_OXLI_EXTRA_SANITY_CHECKS)
 endif
 
 ifeq ($(WANT_PROFILING), true)
@@ -168,7 +168,7 @@ SONAME       = liboxli.$(SHARED_EXT).$(LIB_VERSION)
 SONAME_FLAGS = -Wl,-soname=$(SONAME)
 endif
 
-LIBKHMERSO=$(SONAME)
+LIBOXLISO=$(SONAME)
 
 CXXFLAGS += -DVERSION=$(VERSION)
 
@@ -185,7 +185,7 @@ export VERSION
 
 #### Third party dependencies ####
 # ZLIB, use .lo not .o, so we get -fPIC and other library-related flags
-ZLIB_DIR=../third-party/zlib
+ZLIB_DIR=../../third-party/zlib
 ZLIB_OBJS_BASE=\
 	adler32.lo \
 	crc32.lo \
@@ -206,7 +206,7 @@ ZLIB_OBJS_BASE=\
 ZLIB_OBJS=$(addprefix $(ZLIB_DIR)/, $(ZLIB_OBJS_BASE))
 
 # BZ2
-BZIP2_DIR=../third-party/bzip2
+BZIP2_DIR=../../third-party/bzip2
 BZIP2_OBJS_BASE= \
 	blocksort.o \
 	huffman.o \
@@ -221,7 +221,7 @@ BZIP2_OBJS=$(addprefix $(BZIP2_DIR)/, $(BZIP2_OBJS_BASE))
 
 #### oxli proper below here ####
 
-LIBKHMER_OBJS= \
+LIBOXLI_OBJS= \
 	hashtable.o \
 	hashgraph.o \
 	hllcounter.o \
@@ -241,22 +241,23 @@ PRECOMILE_OBJS ?=
 PRECLEAN_TARGS ?=
 
 ifeq ($(USE_SYSTEM_ZLIB), false)
-LIBKHMER_OBJS  += $(ZLIB_OBJS)
+LIBOXLI_OBJS  += $(ZLIB_OBJS)
 PRECOMILE_OBJS += $(ZLIB_OBJS)
 PRECLEAN_TARGS += zlibclean
 endif
 
 ifeq ($(USE_SYSTEM_LIBBZ2), false)
-LIBKHMER_OBJS  += $(BZIP2_OBJS)
+LIBOXLI_OBJS  += $(BZIP2_OBJS)
 PRECOMILE_OBJS += $(BZIP2_OBJS)
 PRECLEAN_TARGS += libbz2clean
 endif
 
-KHMER_HEADERS= \
+HEADERS= \
 	hashtable.hh \
+	hashgraph.hh \
 	hllcounter.hh \
-	khmer_exception.hh \
-	khmer.hh \
+	oxli_exception.hh \
+	oxli.hh \
 	kmer_hash.hh \
 	labelhash.hh \
 	traversal.hh \
@@ -267,11 +268,12 @@ KHMER_HEADERS= \
 	assembler.hh \
 	alphabets.hh \
 	storage.hh
+OXLI_HEADERS = $(addprefix ../../include/oxli/,$(HEADERS))
 
 # START OF RULES #
 
 # The all rule comes first!
-all: $(LIBKHMERSO) liboxli.a oxli.pc
+all: $(LIBOXLISO) liboxli.a oxli.pc
 
 zlibclean:
 	(cd $(ZLIB_DIR) && make distclean)
@@ -281,14 +283,15 @@ libbz2clean:
 clean: $(PRECLEAN_TARGS)
 	rm -f *.o *.a *.$(SHARED_EXT)* oxli.pc $(TEST_PROGS)
 
-install: $(LIBKHMERSO) liboxli.a oxli.pc $(KHMER_HEADERS)
+install: $(LIBOXLISO) liboxli.a oxli.pc $(OXLI_HEADERS)
+	rm -rf $(PREFIX)/include/oxli $(PREFIX)/include/khmer
 	mkdir -p $(PREFIX)/lib $(PREFIX)/lib/pkgconfig $(PREFIX)/include/oxli
-	cp -r $(KHMER_HEADERS) 				\
-		../third-party/smhasher/MurmurHash3.h 	\
+	cp -r $(OXLI_HEADERS) 				\
+		../../third-party/smhasher/MurmurHash3.h 	\
 		$(PREFIX)/include/oxli/
 	cp oxli.pc $(PREFIX)/lib/pkgconfig/
-	cp $(LIBKHMERSO) liboxli.a $(PREFIX)/lib
-	ln -sf $(PREFIX)/lib/$(LIBKHMERSO) $(PREFIX)/lib/liboxli.$(SHARED_EXT)
+	cp $(LIBOXLISO) liboxli.a $(PREFIX)/lib/
+	ln -sf $(PREFIX)/lib/$(LIBOXLISO) $(PREFIX)/lib/liboxli.$(SHARED_EXT)
 
 oxli.pc: oxli.pc.in
 	sed -e 's, at prefix@,$(PREFIX),'  -e 's, at VERSION@,$(VERSION),' $< >$@
@@ -300,16 +303,16 @@ $(BZIP2_OBJS):
 	(cd $(BZIP2_DIR) && make -f Makefile-libbz2_so $(BZIP2_OBJS_BASE))
 
 # MurMur3
-murmur3.o: ../third-party/smhasher/MurmurHash3.cc
+murmur3.o: ../../third-party/smhasher/MurmurHash3.cc
 	$(CXX) $(CXXFLAGS) -c -o $@ $<
 
-%.o: %.cc $(PRECOMILE_OBJS) $(KHMER_HEADERS)
+%.o: %.cc $(PRECOMILE_OBJS) $(OXLI_HEADERS)
 	$(CXX) $(CXXFLAGS) $(LDFLAGS) -c -o $@ $<
 
-$(LIBKHMERSO): $(LIBKHMER_OBJS)
+$(LIBOXLISO): $(LIBOXLI_OBJS)
 	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(SONAME_FLAGS) -shared -o $@ $^
 	ln -sf $(SONAME) liboxli.$(SHARED_EXT)
 
-liboxli.a: $(LIBKHMER_OBJS)
+liboxli.a: $(LIBOXLI_OBJS)
 	ar rcs $@ $^
 	ranlib $@
diff --git a/lib/alphabets.cc b/src/oxli/alphabets.cc
similarity index 95%
rename from lib/alphabets.cc
rename to src/oxli/alphabets.cc
index 8b0a2c0..e1a3a05 100644
--- a/lib/alphabets.cc
+++ b/src/oxli/alphabets.cc
@@ -37,13 +37,15 @@ Contact: khmer-project at idyll.org
 
 #include <string>
 
-namespace khmer
+namespace oxli
 {
 namespace alphabets
 {
 
 std::string DNA_SIMPLE = "ACGT";
 std::string DNAN_SIMPLE = "ACGTN";
+std::string RNA_SIMPLE = "ACGUT";
+std::string RNAN_SIMPLE = "ACGUTN";
 std::string IUPAC_NUCL = "ACGTURYSWKMBDHVN.-";
 std::string IUPAC_AA = "ACDEFGHIKLMNPQRSTVWY";
 
diff --git a/lib/assembler.cc b/src/oxli/assembler.cc
similarity index 99%
rename from lib/assembler.cc
rename to src/oxli/assembler.cc
index 11f4fff..cf79c6d 100644
--- a/lib/assembler.cc
+++ b/src/oxli/assembler.cc
@@ -35,14 +35,14 @@ LICENSE (END)
 Contact: khmer-project at idyll.org
 */
 
-#include "assembler.hh"
+#include "oxli/assembler.hh"
 
 #include <algorithm>
 #include <iostream>
 
 using namespace std;
 
-namespace khmer
+namespace oxli
 {
 
 /********************************
diff --git a/lib/hashgraph.cc b/src/oxli/hashgraph.cc
similarity index 91%
rename from lib/hashgraph.cc
rename to src/oxli/hashgraph.cc
index 888b8f6..418ba01 100644
--- a/lib/hashgraph.cc
+++ b/src/oxli/hashgraph.cc
@@ -44,13 +44,13 @@ Contact: khmer-project at idyll.org
 #include <queue>
 #include <set>
 
-#include "hashgraph.hh"
-#include "khmer.hh"
-#include "read_parsers.hh"
+#include "oxli/hashgraph.hh"
+#include "oxli/oxli.hh"
+#include "oxli/read_parsers.hh"
 
 using namespace std;
-using namespace khmer;
-using namespace khmer:: read_parsers;
+using namespace oxli;
+using namespace oxli:: read_parsers;
 
 void Hashgraph::save_tagset(std::string outfilename)
 {
@@ -80,7 +80,7 @@ void Hashgraph::save_tagset(std::string outfilename)
     outfile.write((const char *) buf, sizeof(HashIntoType) * tagset_size);
     if (outfile.fail()) {
         delete[] buf;
-        throw khmer_file_exception(strerror(errno));
+        throw oxli_file_exception(strerror(errno));
     }
     outfile.close();
 
@@ -104,13 +104,13 @@ void Hashgraph::load_tagset(std::string infilename, bool clear_tags)
         } else {
             err = "Unknown error in opening file: " + infilename;
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         // Catching std::exception is a stopgap for
         // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     if (clear_tags) {
@@ -136,18 +136,18 @@ void Hashgraph::load_tagset(std::string infilename, bool clear_tags)
             }
             err << " while reading tagset from " << infilename
                 << "; should be " << SAVED_SIGNATURE;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(version == SAVED_FORMAT_VERSION)) {
             std::ostringstream err;
             err << "Incorrect file format version " << (int) version
                 << " while reading tagset from " << infilename
                 << "; should be " << (int) SAVED_FORMAT_VERSION;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_TAGS)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading tagset from " << infilename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &save_ksize, sizeof(save_ksize));
@@ -155,7 +155,7 @@ void Hashgraph::load_tagset(std::string infilename, bool clear_tags)
             std::ostringstream err;
             err << "Incorrect k-mer size " << save_ksize
                 << " while reading tagset from " << infilename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &tagset_size, sizeof(tagset_size));
@@ -175,25 +175,25 @@ void Hashgraph::load_tagset(std::string infilename, bool clear_tags)
         if (buf != NULL) {
             delete[] buf;
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
         /* Yes, this is boneheaded. Unfortunately, there is a bug in gcc > 5
          * regarding the basic_ios::failure that makes it impossible to catch
          * with more specificty. So, we catch *all* exceptions after trying to
          * get the ifstream::failure, and assume it must have been the buggy one.
          * Unfortunately, this would also cause us to catch the
-         * khmer_file_exceptions thrown above, so we catch them again first and
+         * oxli_file_exceptions thrown above, so we catch them again first and
          * rethrow them :) If this is understandably irritating to you, please
          * bother the gcc devs at:
          *     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
          *
          * See also: http://media4.giphy.com/media/3o6UBpHgaXFDNAuttm/giphy.gif
          */
-    } catch (khmer_file_exception &e) {
+    } catch (oxli_file_exception &e) {
         throw e;
     } catch (const std::exception &e) {
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 }
 
@@ -309,13 +309,12 @@ void Hashgraph::consume_seqfile_and_tag(
             break;
         }
 
-        if (check_and_normalize_read( read.sequence )) {
-            unsigned long long this_n_consumed = 0;
-            consume_sequence_and_tag( read.sequence, this_n_consumed );
+        read.set_clean_seq();
+        unsigned long long this_n_consumed = 0;
+        consume_sequence_and_tag(read.cleaned_seq, this_n_consumed);
 
-            __sync_add_and_fetch( &n_consumed, this_n_consumed );
-            __sync_add_and_fetch( &total_reads, 1 );
-        }
+        __sync_add_and_fetch(&n_consumed, this_n_consumed);
+        __sync_add_and_fetch(&total_reads, 1);
     } // while reads left for parser
 
 }
@@ -373,21 +372,20 @@ void Hashgraph::consume_partitioned_fasta(
         } catch (NoMoreReadsAvailable &exc) {
             break;
         }
-        seq = read.sequence;
+        read.set_clean_seq();
+        seq = read.cleaned_seq;
 
-        if (check_and_normalize_read(seq)) {
-            // First, figure out what the partition is (if non-zero), and save that.
-            PartitionID p = _parse_partition_id(read.name);
+        // First, figure out what the partition is (if non-zero), and save that.
+        PartitionID p = _parse_partition_id(read.name);
 
-            // Then consume the sequence
-            n_consumed += consume_string(seq); // @CTB why are we doing this?
+        // Then consume the sequence
+        n_consumed += consume_string(seq); // @CTB why are we doing this?
 
-            // Next, compute the tag & set the partition, if nonzero
-            HashIntoType kmer = hash_dna(seq.c_str());
-            all_tags.insert(kmer);
-            if (p > 0) {
-                partition->set_partition_id(kmer, p);
-            }
+        // Next, compute the tag & set the partition, if nonzero
+        HashIntoType kmer = hash_dna(seq.c_str());
+        all_tags.insert(kmer);
+        if (p > 0) {
+            partition->set_partition_id(kmer, p);
         }
 
         // reset the sequence info, increment read number
@@ -467,10 +465,6 @@ unsigned int Hashgraph::kmer_degree(const char * kmer_s)
 
 size_t Hashgraph::trim_on_stoptags(std::string seq) const
 {
-    if (!check_and_normalize_read(seq)) {
-        return 0;
-    }
-
     KmerIterator kmers(seq.c_str(), _ksize);
 
     size_t i = _ksize - 2;
@@ -534,7 +528,7 @@ const
         total++;
 
         if (!(breadth >= cur_breadth)) { // keep track of watermark, for debugging.
-            throw khmer_exception();
+            throw oxli_exception();
         }
         if (breadth > cur_breadth) {
             cur_breadth = breadth;
@@ -571,13 +565,13 @@ void Hashgraph::load_stop_tags(std::string infilename, bool clear_tags)
         } else {
             err = "Unknown error in opening file: " + infilename;
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         // Catching std::exception is a stopgap for
         // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     if (clear_tags) {
@@ -602,18 +596,18 @@ void Hashgraph::load_stop_tags(std::string infilename, bool clear_tags)
             }
             err << " while reading stoptags from " << infilename
                 << "; should be " << SAVED_SIGNATURE;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(version == SAVED_FORMAT_VERSION)) {
             std::ostringstream err;
             err << "Incorrect file format version " << (int) version
                 << " while reading stoptags from " << infilename
                 << "; should be " << (int) SAVED_FORMAT_VERSION;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_STOPTAGS)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading stoptags from " << infilename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &save_ksize, sizeof(save_ksize));
@@ -621,7 +615,7 @@ void Hashgraph::load_stop_tags(std::string infilename, bool clear_tags)
             std::ostringstream err;
             err << "Incorrect k-mer size " << save_ksize
                 << " while reading stoptags from " << infilename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
         infile.read((char *) &tagset_size, sizeof(tagset_size));
 
@@ -635,15 +629,15 @@ void Hashgraph::load_stop_tags(std::string infilename, bool clear_tags)
         delete[] buf;
     } catch (std::ifstream::failure &e) {
         std::string err = "Error reading stoptags from: " + infilename;
-        throw khmer_file_exception(err);
-    } catch (khmer_file_exception &e) {
+        throw oxli_file_exception(err);
+    } catch (oxli_file_exception &e) {
         throw e;
     } catch (const std::exception &e) {
         // Catching std::exception is a stopgap for
         // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 }
 
@@ -759,7 +753,7 @@ void Hashgraph::extract_unique_paths(std::string seq,
         // then extract.
 
         if (!(j == min_length)) {
-            throw khmer_exception();
+            throw oxli_exception();
         }
         if ( ((float)seen_counter / (float) j) <= max_seen) {
             unsigned int start = i;
@@ -875,7 +869,7 @@ const
 void Nodegraph::update_from(const Nodegraph &otherBASE)
 {
     if (_ksize != otherBASE._ksize) {
-        throw khmer_exception("both nodegraphs must have same k size");
+        throw oxli_exception("both nodegraphs must have same k size");
     }
     BitStorage * myself = dynamic_cast<BitStorage *>(this->store);
     const BitStorage * other;
@@ -885,7 +879,7 @@ void Nodegraph::update_from(const Nodegraph &otherBASE)
     if (myself && other) {
         myself->update_from(*other);
     } else {
-        throw khmer_exception("update_from failed with incompatible objects");
+        throw oxli_exception("update_from failed with incompatible objects");
     }
 }
 
diff --git a/lib/hashtable.cc b/src/oxli/hashtable.cc
similarity index 80%
rename from lib/hashtable.cc
rename to src/oxli/hashtable.cc
index c8d30b8..aac2240 100644
--- a/lib/hashtable.cc
+++ b/src/oxli/hashtable.cc
@@ -46,63 +46,16 @@ Contact: khmer-project at idyll.org
 #include <set>
 #include <memory>
 
-#include "hashtable.hh"
-#include "khmer.hh"
-#include "traversal.hh"
-#include "read_parsers.hh"
-#include "kmer_hash.hh"
+#include "oxli/hashtable.hh"
+#include "oxli/oxli.hh"
+#include "oxli/traversal.hh"
+#include "oxli/read_parsers.hh"
+#include "oxli/kmer_hash.hh"
 
 using namespace std;
-using namespace khmer;
-using namespace khmer::read_parsers;
+using namespace oxli;
+using namespace oxli:: read_parsers;
 
-namespace khmer
-{
-
-//
-// check_and_process_read: checks for non-ACGT characters before consuming
-//
-
-unsigned int Hashtable::check_and_process_read(std::string &read,
-        bool &is_valid)
-{
-    is_valid = check_and_normalize_read(read);
-
-    if (!is_valid) {
-        return 0;
-    }
-
-    return consume_string(read);
-}
-
-//
-// check_and_normalize_read: checks for non-ACGT characters
-//			     converts lowercase characters to uppercase one
-// Note: Usually it is desirable to keep checks and mutations separate.
-//	 However, in the interests of efficiency (we are potentially working
-//	 with TB of data), a check and mutation have been placed inside the
-//	 same loop. Potentially trillions fewer fetches from memory would
-//	 seem to be a worthwhile goal.
-//
-
-bool Hashtable::check_and_normalize_read(std::string &read) const
-{
-    bool rc = true;
-
-    if (read.length() < _ksize) {
-        return false;
-    }
-
-    for (unsigned int i = 0; i < read.length(); i++)  {
-        read[ i ] &= 0xdf; // toupper - knock out the "lowercase bit"
-        if (!is_valid_dna( read[ i ] )) {
-            rc = false;
-            break;
-        }
-    }
-
-    return rc;
-}
 
 //
 // consume_seqfile: consume a file of reads
@@ -121,6 +74,20 @@ void Hashtable::consume_seqfile(
 }
 
 template<typename SeqIO>
+void Hashtable::consume_seqfile_banding(
+    std::string const &filename,
+    unsigned int num_bands,
+    unsigned int band,
+    unsigned int &total_reads,
+    unsigned long long &n_consumed
+)
+{
+    ReadParserPtr<SeqIO> parser = get_parser<SeqIO>(filename);
+    consume_seqfile_banding<SeqIO>(parser, num_bands, band, total_reads,
+                                   n_consumed);
+}
+
+template<typename SeqIO>
 void Hashtable::consume_seqfile(
     ReadParserPtr<SeqIO>& parser,
     unsigned int &total_reads,
@@ -131,15 +98,14 @@ void Hashtable::consume_seqfile(
 
     // Iterate through the reads and consume their k-mers.
     while (!parser->is_complete( )) {
-        bool is_valid;
         try {
             read = parser->get_next_read( );
         } catch (NoMoreReadsAvailable) {
             break;
         }
 
-        unsigned int this_n_consumed =
-            check_and_process_read(read.sequence, is_valid);
+        read.set_clean_seq();
+        unsigned int this_n_consumed = consume_string(read.cleaned_seq);
 
         __sync_add_and_fetch( &n_consumed, this_n_consumed );
         __sync_add_and_fetch( &total_reads, 1 );
@@ -148,6 +114,44 @@ void Hashtable::consume_seqfile(
 
 } // consume_seqfile
 
+template<typename SeqIO>
+void Hashtable::consume_seqfile_banding(
+    ReadParserPtr<SeqIO>& parser,
+    unsigned int num_bands,
+    unsigned int band,
+    unsigned int &total_reads,
+    unsigned long long &n_consumed
+)
+{
+    Read read;
+    std::pair<uint64_t, uint64_t> interval = compute_band_interval(num_bands,
+                                                                   band);
+
+    while (!parser->is_complete()) {
+        try {
+            read = parser->get_next_read( );
+        } catch (NoMoreReadsAvailable) {
+            break;
+        }
+
+        read.set_clean_seq();
+        unsigned int this_n_consumed = 0;
+        KmerHashIteratorPtr kmers = new_kmer_iterator(read.cleaned_seq);
+        while(!kmers->done()) {
+            HashIntoType kmer = kmers->next();
+            if (kmer >= interval.first && kmer < interval.second) {
+                count(kmer);
+                this_n_consumed++;
+            }
+        }
+
+        __sync_add_and_fetch( &n_consumed, this_n_consumed );
+        __sync_add_and_fetch( &total_reads, 1 );
+
+    } // while reads left for parser
+
+} // consume_seqfile_banding
+
 //
 // consume_string: run through every k-mer in the given string, & hash it.
 //
@@ -180,7 +184,7 @@ void Hashtable::get_median_count(const std::string &s,
     this->get_kmer_counts(s, counts);
 
     if (!counts.size()) {
-        throw khmer_exception("no k-mer counts for this string; too short?");
+        throw oxli_exception("no k-mer counts for this string; too short?");
     }
 
     average = 0;
@@ -343,7 +347,7 @@ uint64_t * Hashtable::abundance_distribution(
     // if not, could lead to overflow.
     if (sizeof(BoundedCounterType) != 2) {
         delete[] dist;
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
     while(!parser->is_complete()) {
@@ -352,20 +356,19 @@ uint64_t * Hashtable::abundance_distribution(
         } catch (NoMoreReadsAvailable &exc) {
             break;
         }
-        seq = read.sequence;
+        read.set_clean_seq();
+        seq = read.cleaned_seq;
 
-        if (check_and_normalize_read(seq)) {
-            KmerHashIteratorPtr kmers = new_kmer_iterator(seq);
+        KmerHashIteratorPtr kmers = new_kmer_iterator(seq);
 
-            while(!kmers->done()) {
-                HashIntoType kmer = kmers->next();
+        while(!kmers->done()) {
+            HashIntoType kmer = kmers->next();
 
-                if (!tracking->get_count(kmer)) {
-                    tracking->count(kmer);
+            if (!tracking->get_count(kmer)) {
+                tracking->count(kmer);
 
-                    BoundedCounterType n = get_count(kmer);
-                    dist[n]++;
-                }
+                BoundedCounterType n = get_count(kmer);
+                dist[n]++;
             }
 
             name.clear();
@@ -389,10 +392,6 @@ unsigned long Hashtable::trim_on_abundance(
     BoundedCounterType  min_abund)
 const
 {
-    if (!check_and_normalize_read(seq)) {
-        return 0;
-    }
-
     KmerHashIteratorPtr kmers = new_kmer_iterator(seq);
 
     HashIntoType kmer;
@@ -424,12 +423,7 @@ unsigned long Hashtable::trim_below_abundance(
     BoundedCounterType  max_abund)
 const
 {
-    if (!check_and_normalize_read(seq)) {
-        return 0;
-    }
-
     KmerHashIteratorPtr kmers = new_kmer_iterator(seq);
-
     HashIntoType kmer;
 
     if (kmers->done()) {
@@ -460,10 +454,6 @@ std::vector<unsigned int> Hashtable::find_spectral_error_positions(
 const
 {
     std::vector<unsigned int> posns;
-    if (!check_and_normalize_read(seq)) {
-        throw khmer_exception("invalid read");
-    }
-
     KmerHashIteratorPtr kmers = new_kmer_iterator(seq);
 
     HashIntoType kmer = kmers->next();
@@ -513,18 +503,39 @@ template void Hashtable::consume_seqfile<FastxReader>(
     unsigned int &total_reads,
     unsigned long long &n_consumed
 );
+
+
 template void Hashtable::consume_seqfile<FastxReader>(
     ReadParserPtr<FastxReader>& parser,
     unsigned int &total_reads,
     unsigned long long &n_consumed
 );
+
+template void Hashtable::consume_seqfile_banding<FastxReader>(
+    std::string const &filename,
+    unsigned int num_bands,
+    unsigned int bands,
+    unsigned int &total_reads,
+    unsigned long long &n_consumed
+);
+
+
+template void Hashtable::consume_seqfile_banding<FastxReader>(
+    ReadParserPtr<FastxReader>& parser,
+    unsigned int num_bands,
+    unsigned int bands,
+    unsigned int &total_reads,
+    unsigned long long &n_consumed
+);
+
+
 template uint64_t * Hashtable::abundance_distribution<FastxReader>(
     ReadParserPtr<FastxReader>& parser,
     Hashtable * tracking
 );
+
+
 template uint64_t * Hashtable::abundance_distribution<FastxReader>(
     std::string filename,
     Hashtable * tracking
 );
-
-} // namespace khmer
diff --git a/lib/hllcounter.cc b/src/oxli/hllcounter.cc
similarity index 97%
rename from lib/hllcounter.cc
rename to src/oxli/hllcounter.cc
index 176c195..bb4962a 100644
--- a/lib/hllcounter.cc
+++ b/src/oxli/hllcounter.cc
@@ -42,11 +42,11 @@ Contact: khmer-project at idyll.org
 #include <numeric>
 #include <utility>
 
-#include "hllcounter.hh"
-#include "khmer.hh"
-#include "khmer_exception.hh"
-#include "kmer_hash.hh"
-#include "read_parsers.hh"
+#include "oxli/hllcounter.hh"
+#include "oxli/oxli.hh"
+#include "oxli/oxli_exception.hh"
+#include "oxli/kmer_hash.hh"
+#include "oxli/read_parsers.hh"
 
 #ifdef _OPENMP
 #include <omp.h>
@@ -57,8 +57,9 @@ Contact: khmer-project at idyll.org
 
 #define arr_len(a) (a + sizeof a / sizeof a[0])
 
-using namespace khmer;
-using namespace khmer::read_parsers;
+using namespace oxli;
+using namespace oxli::read_parsers;
+
 
 std::map<int, std::vector<double> > rawEstimateData;
 std::map<int, std::vector<double> > biasData;
@@ -348,7 +349,7 @@ uint64_t HLLCounter::estimate_cardinality()
 
 void HLLCounter::add(const std::string &value)
 {
-    HashIntoType x = khmer::_hash_murmur(value, value.length());
+    HashIntoType x = oxli::_hash_murmur(value, value.length());
     uint64_t j = x & (this->m - 1);
     this->M[j] = std::max(this->M[j], get_rho(x >> this->p, 64 - this->p));
 }
@@ -502,7 +503,7 @@ bool HLLCounter::check_and_normalize_read(std::string &read) const
 void HLLCounter::merge(HLLCounter &other)
 {
     if (this->p != other.p || this->_ksize != other._ksize) {
-        throw khmer_exception("HLLCounters to be merged must be created with same parameters");
+        throw oxli_exception("HLLCounters to be merged must be created with same parameters");
     }
     for(unsigned int i=0; i < this->M.size(); ++i) {
         this->M[i] = std::max(other.M[i], this->M[i]);
diff --git a/lib/kmer_filters.cc b/src/oxli/kmer_filters.cc
similarity index 97%
rename from lib/kmer_filters.cc
rename to src/oxli/kmer_filters.cc
index 34a3fea..987ec32 100644
--- a/lib/kmer_filters.cc
+++ b/src/oxli/kmer_filters.cc
@@ -36,13 +36,13 @@ Contact: khmer-project at idyll.org
 */
 #include <algorithm>
 
-#include "khmer.hh"
-#include "hashtable.hh"
-#include "labelhash.hh"
-#include "kmer_filters.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashtable.hh"
+#include "oxli/labelhash.hh"
+#include "oxli/kmer_filters.hh"
 
 
-namespace khmer
+namespace oxli
 {
 
 bool apply_kmer_filters(const Kmer& node, const std::list<KmerFilter>& filters)
diff --git a/lib/kmer_hash.cc b/src/oxli/kmer_hash.cc
similarity index 83%
rename from lib/kmer_hash.cc
rename to src/oxli/kmer_hash.cc
index c94016c..28e19ee 100644
--- a/lib/kmer_hash.cc
+++ b/src/oxli/kmer_hash.cc
@@ -43,9 +43,9 @@ Contact: khmer-project at idyll.org
 #include <assert.h>
 
 #include "MurmurHash3.h"
-#include "khmer.hh"
-#include "khmer_exception.hh"
-#include "kmer_hash.hh"
+#include "oxli/oxli.hh"
+#include "oxli/oxli_exception.hh"
+#include "oxli/kmer_hash.hh"
 
 using namespace std;
 
@@ -53,19 +53,20 @@ using namespace std;
 // _hash: hash a k-length DNA sequence into a 64-bit number.
 //
 
-namespace khmer
+namespace oxli
 {
 
 HashIntoType _hash(const char * kmer, const WordLength k,
                    HashIntoType& _h, HashIntoType& _r)
 {
     // sizeof(HashIntoType) * 8 bits / 2 bits/base
+
     if (k > sizeof(HashIntoType)*4) {
-        throw khmer_exception("Supplied kmer string doesn't match the underlying k-size.");
+        throw oxli_exception("Supplied kmer string doesn't match the underlying k-size.");
     }
 
     if (strlen(kmer) < k) {
-        throw khmer_exception("k-mer is too short to hash.");
+        throw oxli_exception("k-mer is too short to hash.");
     }
 
     HashIntoType h = 0, r = 0;
@@ -94,7 +95,7 @@ HashIntoType _hash(const char * kmer, const WordLength k)
     HashIntoType h = 0;
     HashIntoType r = 0;
 
-    return khmer::_hash(kmer, k, h, r);
+    return oxli::_hash(kmer, k, h, r);
 }
 
 // _hash_forward: return the hash from the forward direction only.
@@ -105,7 +106,7 @@ HashIntoType _hash_forward(const char * kmer, WordLength k)
     HashIntoType r = 0;
 
 
-    khmer::_hash(kmer, k, h, r);
+    oxli::_hash(kmer, k, h, r);
     return h;			// return forward only
 }
 
@@ -177,7 +178,8 @@ HashIntoType _hash_murmur(const std::string& kmer, const WordLength k)
     HashIntoType h = 0;
     HashIntoType r = 0;
 
-    return khmer::_hash_murmur(kmer, k, h, r);
+    return oxli::_hash_murmur(kmer, k, h, r);
+
 }
 
 HashIntoType _hash_murmur(const std::string& kmer, const WordLength k,
@@ -189,7 +191,7 @@ HashIntoType _hash_murmur(const std::string& kmer, const WordLength k,
     h = out[0];
 
     assert(kmer.length() == k); // an assumption of the below code
-    std::string rev = khmer::_revcomp(kmer);
+    std::string rev = oxli::_revcomp(kmer);
     if (rev == kmer) {
         // self complement kmer, can't use bitwise XOR
         r = out[0];
@@ -207,10 +209,27 @@ HashIntoType _hash_murmur_forward(const std::string& kmer, const WordLength k)
     HashIntoType h = 0;
     HashIntoType r = 0;
 
-    khmer::_hash_murmur(kmer, k, h, r);
+    oxli::_hash_murmur(kmer, k, h, r);
+
     return h;
 }
 
+std::pair<uint64_t, uint64_t> compute_band_interval(unsigned int num_bands,
+                                                    unsigned int band)
+{
+    if (band > num_bands) {
+        std::string message = "'band' must be in the interval [0, 'num_bands')";
+        message += ", " + std::to_string(band) + " not in [0, " +
+                   std::to_string(num_bands) + ")";
+        throw InvalidValue(message);
+    }
+    uint64_t band_size = std::numeric_limits<uint64_t>::max() / num_bands;
+    uint64_t min = band_size * band;
+    uint64_t max = band_size * (band + 1);
+    std::pair<uint64_t, uint64_t> interval (min, max);
+    return interval;
+}
+
 KmerIterator::KmerIterator(const char * seq,
                            unsigned char k) :
     KmerFactory(k), _seq(seq)
@@ -245,7 +264,7 @@ Kmer KmerIterator::first(HashIntoType& f, HashIntoType& r)
 Kmer KmerIterator::next(HashIntoType& f, HashIntoType& r)
 {
     if (done()) {
-        throw khmer_exception();
+        throw oxli_exception("KmerIterator done.");
     }
 
     if (!initialized) {
@@ -256,7 +275,7 @@ Kmer KmerIterator::next(HashIntoType& f, HashIntoType& r)
     unsigned char ch = _seq[index];
     index++;
     if (!(index <= length)) {
-        throw khmer_exception();
+        throw oxli_exception("KmerIterator index <= length; should have finished.");
     }
 
     // left-shift the previous hash over
diff --git a/lib/labelhash.cc b/src/oxli/labelhash.cc
similarity index 89%
rename from lib/labelhash.cc
rename to src/oxli/labelhash.cc
index 3fad2ab..4e6da50 100644
--- a/lib/labelhash.cc
+++ b/src/oxli/labelhash.cc
@@ -41,11 +41,11 @@ Contact: khmer-project at idyll.org
 #include <sstream> // IWYU pragma: keep
 #include <set>
 
-#include "hashgraph.hh"
-#include "khmer_exception.hh"
-#include "labelhash.hh"
-#include "read_parsers.hh"
-#include "subset.hh"
+#include "oxli/hashgraph.hh"
+#include "oxli/oxli_exception.hh"
+#include "oxli/labelhash.hh"
+#include "oxli/read_parsers.hh"
+#include "oxli/subset.hh"
 
 #define IO_BUF_SIZE 250*1000*1000
 
@@ -55,11 +55,9 @@ Contact: khmer-project at idyll.org
 #define DEBUG 0
 
 using namespace std;
-using namespace khmer;
-using namespace khmer::read_parsers;
+using namespace oxli;
+using namespace oxli:: read_parsers;
 
-namespace khmer
-{
 
 /*
  * @camillescott
@@ -108,21 +106,21 @@ void LabelHash::consume_seqfile_and_tag_with_labels(
             break;
         }
 
-        if (graph->check_and_normalize_read( read.sequence )) {
-            // TODO: make threadsafe!
-            unsigned long long this_n_consumed = 0;
-            consume_sequence_and_tag_with_labels( read.sequence,
-                                                  this_n_consumed,
-                                                  the_label );
-            the_label++;
+        read.set_clean_seq();
+
+        // TODO: make threadsafe!
+        unsigned long long this_n_consumed = 0;
+        consume_sequence_and_tag_with_labels( read.cleaned_seq,
+                                              this_n_consumed,
+                                              the_label );
+        the_label++;
 
 #if (0) // Note: Used with callback - currently disabled.
-            n_consumed_LOCAL  = __sync_add_and_fetch( &n_consumed, this_n_consumed );
+        n_consumed_LOCAL  = __sync_add_and_fetch( &n_consumed, this_n_consumed );
 #else
-            __sync_add_and_fetch( &n_consumed, this_n_consumed );
+        __sync_add_and_fetch( &n_consumed, this_n_consumed );
 #endif
-            __sync_add_and_fetch( &total_reads, 1 );
-        }
+        __sync_add_and_fetch( &total_reads, 1 );
 
         // TODO: Figure out alternative to callback into Python VM
         //       Cannot use in multi-threaded operation.
@@ -171,19 +169,19 @@ void LabelHash::consume_partitioned_fasta_and_tag_with_labels(
     PartitionID p;
     while(!parser->is_complete())  {
         read = parser->get_next_read();
-        seq = read.sequence;
-
-        if (graph->check_and_normalize_read(seq)) {
-            // First, figure out what the partition is (if non-zero), and
-            // save that.
-            printdbg(parsing partition id)
-            p = _parse_partition_id(read.name);
-            printdbg(consuming sequence and tagging)
-            consume_sequence_and_tag_with_labels( seq,
-                                                  n_consumed,
-                                                  p );
-            printdbg(back in consume_partitioned)
-        }
+
+        read.set_clean_seq();
+        seq = read.cleaned_seq;
+
+        // First, figure out what the partition is (if non-zero), and
+        // save that.
+        printdbg(parsing partition id)
+        p = _parse_partition_id(read.name);
+        printdbg(consuming sequence and tagging)
+        consume_sequence_and_tag_with_labels( seq,
+                                              n_consumed,
+                                              p );
+        printdbg(back in consume_partitioned)
 
         // reset the sequence info, increment read number
         total_reads++;
@@ -322,7 +320,7 @@ unsigned int LabelHash::sweep_label_neighborhood(const std::string& seq,
     //printf("range=%u ", range);
     if (range == 0) {
         if (!(num_traversed == seq.length()-graph->ksize()+1)) {
-            throw khmer_exception();
+            throw oxli_exception();
         }
     }
     tagged_kmers.clear();
@@ -418,7 +416,7 @@ void LabelHash::save_labels_and_tags(std::string filename)
 
     if (outfile.fail()) {
         delete[] buf;
-        throw khmer_file_exception(strerror(errno));
+        throw oxli_file_exception(strerror(errno));
     }
     outfile.close();
 
@@ -441,13 +439,13 @@ void LabelHash::load_labels_and_tags(std::string filename)
         } else {
             err = "Unknown error in opening file: " + filename;
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         // Catching std::exception is a stopgap for
         // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
         std::string err = "Unknown error opening file: " + filename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     unsigned long n_labeltags = 1;
@@ -467,17 +465,17 @@ void LabelHash::load_labels_and_tags(std::string filename)
             }
             err << " while reading labels/tags from " << filename
                 << " Should be: " << SAVED_SIGNATURE;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(version == SAVED_FORMAT_VERSION)) {
             std::ostringstream err;
             err << "Incorrect file format version " << (int) version
                 << " while reading labels/tags from " << filename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_LABELSET)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading labels/tags from " << filename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &save_ksize, sizeof(save_ksize));
@@ -485,20 +483,20 @@ void LabelHash::load_labels_and_tags(std::string filename)
             std::ostringstream err;
             err << "Incorrect k-mer size " << save_ksize
                 << " while reading labels/tags from " << filename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &n_labeltags, sizeof(n_labeltags));
     } catch (std::ifstream::failure &e) {
         std::string err;
         err = "Unknown error reading header info from: " + filename;
-        throw khmer_file_exception(err);
-    } catch (khmer_file_exception &e) {
+        throw oxli_file_exception(err);
+    } catch (oxli_file_exception &e) {
         throw e;
     } catch (const std::exception &e) {
         std::string err = "Unknown error opening file: " + filename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     char * buf = new char[IO_BUF_SIZE];
@@ -528,7 +526,7 @@ void LabelHash::load_labels_and_tags(std::string filename)
 
                 std::string err;
                 err = "Unknown error reading data from: " + filename;
-                throw khmer_file_exception(err);
+                throw oxli_file_exception(err);
             }
         }
 
@@ -553,19 +551,19 @@ void LabelHash::load_labels_and_tags(std::string filename)
         }
         if (!(i == n_bytes)) {
             delete[] buf;
-            throw khmer_file_exception("unknown error reading labels and tags");
+            throw oxli_file_exception("unknown error reading labels and tags");
         }
         memcpy(buf, buf + n_bytes, remainder);
     }
 
     if (remainder != 0) {
         delete[] buf;
-        throw khmer_file_exception("unknown error reading labels and tags");
+        throw oxli_file_exception("unknown error reading labels and tags");
     }
 
     if (loaded != n_labeltags) {
         delete[] buf;
-        throw khmer_file_exception("error loading labels: too few loaded");
+        throw oxli_file_exception("error loading labels: too few loaded");
     }
 
     delete[] buf;
@@ -634,4 +632,3 @@ template void LabelHash::consume_partitioned_fasta_and_tag_with_labels<FastxRead
     void * callback_datac = NULL
 );
 
-} // namespace khmer
diff --git a/lib/oxli.pc.in b/src/oxli/oxli.pc.in
similarity index 100%
rename from lib/oxli.pc.in
rename to src/oxli/oxli.pc.in
diff --git a/lib/read_aligner.cc b/src/oxli/read_aligner.cc
similarity index 99%
rename from lib/read_aligner.cc
rename to src/oxli/read_aligner.cc
index db44109..e337848 100644
--- a/lib/read_aligner.cc
+++ b/src/oxli/read_aligner.cc
@@ -43,11 +43,11 @@ Contact: khmer-project at idyll.org
 #include <set>
 #include <utility>
 
-#include "hashtable.hh"
-#include "khmer_exception.hh"
-#include "read_aligner.hh"
+#include "oxli/hashtable.hh"
+#include "oxli/oxli_exception.hh"
+#include "oxli/read_aligner.hh"
 
-namespace khmer
+namespace oxli
 {
 
 Alignment * _empty_alignment()
@@ -417,7 +417,7 @@ Alignment* ReadAligner::ExtractAlignment(AlignmentNode* node,
 
     if (!(node->seq_idx < read.length())) {
         delete ret;
-        throw khmer_exception();
+        throw oxli_exception();
     }
     std::string read_alignment = "";
     std::string graph_alignment = "";
diff --git a/lib/read_parsers.cc b/src/oxli/read_parsers.cc
similarity index 91%
rename from lib/read_parsers.cc
rename to src/oxli/read_parsers.cc
index 1a44c60..749ecc4 100644
--- a/lib/read_parsers.cc
+++ b/src/oxli/read_parsers.cc
@@ -36,10 +36,14 @@ LICENSE (END)
 Contact: khmer-project at idyll.org
 */
 #include <fstream>
-#include "khmer_exception.hh"
-#include "read_parsers.hh"
+#include "seqan/seq_io.h" // IWYU pragma: keep
+#include "seqan/sequence.h" // IWYU pragma: keep
+#include "seqan/stream.h" // IWYU pragma: keep
+#include "oxli/oxli_exception.hh"
+#include "oxli/read_parsers.hh"
 
-namespace khmer
+
+namespace oxli
 {
 
 namespace read_parsers
@@ -74,7 +78,7 @@ void ReadParser<SeqIO>::_init()
             REG_EXTENDED | REG_NOSUB
         );
     if (regex_rc) {
-        throw khmer_exception("Could not compile R2 nosub regex");
+        throw oxli_exception("Could not compile R2 nosub regex");
     }
     regex_rc =
         regcomp(
@@ -82,7 +86,7 @@ void ReadParser<SeqIO>::_init()
             "^.+(/1| 1:[YN]:[[:digit:]]+:[[:alpha:]]+).{0}", REG_EXTENDED
         );
     if (regex_rc) {
-        throw khmer_exception("Could not compile R1 regex");
+        throw oxli_exception("Could not compile R1 regex");
     }
     regex_rc =
         regcomp(
@@ -90,7 +94,7 @@ void ReadParser<SeqIO>::_init()
             "^.+(/2| 2:[YN]:[[:digit:]]+:[[:alpha:]]+).{0}", REG_EXTENDED
         );
     if (regex_rc) {
-        throw khmer_exception("Could not compile R2 regex");
+        throw oxli_exception("Could not compile R2 regex");
     }
 }
 
@@ -238,13 +242,14 @@ void ReadParser<SeqIO>::close()
 
 void FastxReader::_init()
 {
-    seqan::open(_stream, _filename.c_str());
-    if (!seqan::isGood(_stream)) {
+    _stream = std::unique_ptr<seqan::SequenceStream>(new seqan::SequenceStream());
+    seqan::open(*_stream, _filename.c_str());
+    if (!seqan::isGood(*_stream)) {
         std::string message = "File ";
         message = message + _filename + " contains badly formatted sequence";
         message = message + " or does not exist.";
         throw InvalidStream(message);
-    } else if (seqan::atEnd(_stream)) {
+    } else if (seqan::atEnd(*_stream)) {
         std::string message = "File ";
         message = message + _filename + " does not contain any sequences!";
         throw InvalidStream(message);
@@ -278,12 +283,12 @@ FastxReader::FastxReader(FastxReader& other)
 
 FastxReader::~FastxReader()
 {
-    seqan::close(_stream);
+    seqan::close(*_stream);
 }
 
 bool FastxReader::is_complete()
 {
-    return !seqan::isGood(_stream) || seqan::atEnd(_stream);
+    return !seqan::isGood(*_stream) || seqan::atEnd(*_stream);
 }
 
 size_t FastxReader::get_num_reads()
@@ -293,7 +298,7 @@ size_t FastxReader::get_num_reads()
 
 void FastxReader::close()
 {
-    seqan::close(_stream);
+    seqan::close(*_stream);
 }
 
 Read FastxReader::get_next_read()
@@ -302,9 +307,9 @@ Read FastxReader::get_next_read()
     int ret = -1;
     const char *invalid_read_exc = NULL;
     while (!__sync_bool_compare_and_swap(&_spin_lock, 0, 1));
-    bool atEnd = seqan::atEnd(_stream);
+    bool atEnd = seqan::atEnd(*_stream);
     if (!atEnd) {
-        ret = seqan::readRecord(read.name, read.sequence, read.quality, _stream);
+        ret = seqan::readRecord(read.name, read.sequence, read.quality, *_stream);
         if (ret == 0) {
             // Detect if we're parsing something w/ qualities on the first read
             // only
@@ -357,4 +362,7 @@ template FastxParserPtr get_parser<FastxReader>(const std::string& filename);
 
 } // namespace read_parsers
 
-} // namespace khmer
+} // namespace oxli
+
+// vim: set ft=cpp sts=4 sw=4 tw=80:
+
diff --git a/lib/storage.cc b/src/oxli/storage.cc
similarity index 92%
rename from lib/storage.cc
rename to src/oxli/storage.cc
index 488aebc..66acff1 100644
--- a/lib/storage.cc
+++ b/src/oxli/storage.cc
@@ -40,17 +40,17 @@ Contact: khmer-project at idyll.org
 #include <fstream>
 #include <iostream>
 
-#include "khmer_exception.hh"
-#include "hashtable.hh"
+#include "oxli/oxli_exception.hh"
+#include "oxli/hashtable.hh"
 #include "zlib.h"
 
-using namespace khmer;
+using namespace oxli;
 using namespace std;
 
 void Storage::set_use_bigcount(bool b)
 {
     if (!_supports_bigcount) {
-        throw khmer_exception("bigcount is not supported for this storage.");
+        throw oxli_exception("bigcount is not supported for this storage.");
     }
     _use_bigcount = b;
 }
@@ -63,7 +63,7 @@ bool Storage::get_use_bigcount()
 void BitStorage::update_from(const BitStorage& other)
 {
     if (_tablesizes != other._tablesizes) {
-        throw khmer_exception("both nodegraphs must have same table sizes");
+        throw oxli_exception("both nodegraphs must have same table sizes");
     }
 
     Byte tmp = 0;
@@ -99,7 +99,7 @@ void BitStorage::update_from(const BitStorage& other)
 void BitStorage::save(std::string outfilename, WordLength ksize)
 {
     if (!_counts[0]) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
     unsigned int save_ksize = ksize;
@@ -130,7 +130,7 @@ void BitStorage::save(std::string outfilename, WordLength ksize)
         outfile.write((const char *) _counts[i], tablebytes);
     }
     if (outfile.fail()) {
-        throw khmer_file_exception(strerror(errno));
+        throw oxli_file_exception(strerror(errno));
     }
     outfile.close();
 }
@@ -156,13 +156,13 @@ void BitStorage::load(std::string infilename, WordLength &ksize)
         } else {
             err = "Unknown error in opening file: " + infilename;
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         // Catching std::exception is a stopgap for
         // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     if (_counts) {
@@ -188,23 +188,23 @@ void BitStorage::load(std::string infilename, WordLength &ksize)
         infile.read((char *) &ht_type, 1);
         if (!(std::string(signature, 4) == SAVED_SIGNATURE)) {
             std::ostringstream err;
-            err << "Does not start with signature for a khmer file: 0x";
+            err << "Does not start with signature for a oxli file: 0x";
             for(size_t i=0; i < 4; ++i) {
                 err << std::hex << (int) signature[i];
             }
             err << " Should be: " << SAVED_SIGNATURE;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(version == SAVED_FORMAT_VERSION)) {
             std::ostringstream err;
             err << "Incorrect file format version " << (int) version
                 << " while reading k-mer graph from " << infilename
                 << "; should be " << (int) SAVED_FORMAT_VERSION;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_HASHBITS)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading k-mer graph from " << infilename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &save_ksize, sizeof(save_ksize));
@@ -242,13 +242,13 @@ void BitStorage::load(std::string infilename, WordLength &ksize)
         } else {
             err = "Error reading from k-mer graph file: " + infilename;
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         // Catching std::exception is a stopgap for
         // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 }
 
@@ -288,11 +288,11 @@ ByteStorageFileReader::ByteStorageFileReader(
         } else {
             err = "Unknown error in opening file: " + infilename;
         }
-        throw khmer_file_exception(err + " " + strerror(errno));
+        throw oxli_file_exception(err + " " + strerror(errno));
     } catch (const std::exception &e) {
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     if (store._counts) {
@@ -318,23 +318,23 @@ ByteStorageFileReader::ByteStorageFileReader(
         infile.read((char *) &ht_type, 1);
         if (!(std::string(signature, 4) == SAVED_SIGNATURE)) {
             std::ostringstream err;
-            err << "Does not start with signature for a khmer file: 0x";
+            err << "Does not start with signature for a oxli file: 0x";
             for(size_t i=0; i < 4; ++i) {
                 err << std::hex << (int) signature[i];
             }
             err << " Should be: " << SAVED_SIGNATURE;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(version == SAVED_FORMAT_VERSION)) {
             std::ostringstream err;
             err << "Incorrect file format version " << (int) version
                 << " while reading k-mer count file from " << infilename
                 << "; should be " << (int) SAVED_FORMAT_VERSION;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_COUNTING_HT)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading k-mer count file from " << infilename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &use_bigcount, 1);
@@ -395,11 +395,11 @@ ByteStorageFileReader::ByteStorageFileReader(
             err = "Error reading from k-mer count file: " + infilename + " "
                   + strerror(errno);
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         std::string err = "Error reading from k-mer count file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 }
 
@@ -411,7 +411,7 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
     gzFile infile = gzopen(infilename.c_str(), "rb");
     if (infile == Z_NULL) {
         std::string err = "Cannot open k-mer count file: " + infilename;
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     if (store._counts) {
@@ -438,13 +438,13 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
         std::string err = "K-mer count file read error: " + infilename + " "
                           + strerror(errno);
         gzclose(infile);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } else if (!(std::string(signature, 4) == SAVED_SIGNATURE)) {
         std::ostringstream err;
-        err << "Does not start with signature for a khmer " <<
+        err << "Does not start with signature for a oxli " <<
             "file: " << signature << " Should be: " <<
             SAVED_SIGNATURE;
-        throw khmer_file_exception(err.str());
+        throw oxli_file_exception(err.str());
     } else if (!(version == SAVED_FORMAT_VERSION)
                || !(ht_type == SAVED_COUNTING_HT)) {
         if (!(version == SAVED_FORMAT_VERSION)) {
@@ -453,13 +453,13 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
                 << " while reading k-mer count file from " << infilename
                 << "; should be " << (int) SAVED_FORMAT_VERSION;
             gzclose(infile);
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_COUNTING_HT)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading k-mer count file from " << infilename;
             gzclose(infile);
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
     }
 
@@ -474,7 +474,7 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
         std::string err = "K-mer count file header read error: " + infilename
                           + " " + strerror(errno);
         gzclose(infile);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     ksize = (WordLength) save_ksize;
@@ -500,7 +500,7 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
                 err = err + " " + gzerr;
             }
             gzclose(infile);
-            throw khmer_file_exception(err);
+            throw oxli_file_exception(err);
         }
 
         tablesize = save_tablesize;
@@ -529,7 +529,7 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
                     err = err + " " + gzerr;
                 }
                 gzclose(infile);
-                throw khmer_file_exception(err);
+                throw oxli_file_exception(err);
             }
 
             loaded += read_b;
@@ -547,7 +547,7 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
             err = err + " " + gzerr;
         }
         gzclose(infile);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     if (n_counts) {
@@ -569,7 +569,7 @@ ByteStorageGzFileReader::ByteStorageGzFileReader(
                     err = err + " " + gzerr;
                 }
                 gzclose(infile);
-                throw khmer_file_exception(err);
+                throw oxli_file_exception(err);
             }
 
             store._bigcounts[kmer] = count;
@@ -585,7 +585,7 @@ ByteStorageFileWriter::ByteStorageFileWriter(
     const ByteStorage& store)
 {
     if (!store._counts[0]) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
     unsigned int save_ksize = ksize;
@@ -632,7 +632,7 @@ ByteStorageFileWriter::ByteStorageFileWriter(
         }
     }
     if (outfile.fail()) {
-        throw khmer_file_exception(strerror(errno));
+        throw oxli_file_exception(strerror(errno));
     }
     outfile.close();
 }
@@ -643,7 +643,7 @@ ByteStorageGzFileWriter::ByteStorageGzFileWriter(
     const ByteStorage &store)
 {
     if (!store._counts[0]) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
     int errnum = 0;
@@ -656,9 +656,9 @@ ByteStorageGzFileWriter::ByteStorageGzFileWriter(
     if (outfile == NULL) {
         const char * error = gzerror(outfile, &errnum);
         if (errnum == Z_ERRNO) {
-            throw khmer_file_exception(strerror(errno));
+            throw oxli_file_exception(strerror(errno));
         } else {
-            throw khmer_file_exception(error);
+            throw oxli_file_exception(error);
         }
     }
 
@@ -716,7 +716,7 @@ ByteStorageGzFileWriter::ByteStorageGzFileWriter(
                     msg << strerror(errno);
                 }
                 gzclose(outfile);
-                throw khmer_file_exception(msg.str());
+                throw oxli_file_exception(msg.str());
             }
             written += gz_result;
         }
@@ -735,9 +735,9 @@ ByteStorageGzFileWriter::ByteStorageGzFileWriter(
     }
     const char * error = gzerror(outfile, &errnum);
     if (errnum == Z_ERRNO) {
-        throw khmer_file_exception(strerror(errno));
+        throw oxli_file_exception(strerror(errno));
     } else if (errnum != Z_OK) {
-        throw khmer_file_exception(error);
+        throw oxli_file_exception(error);
     }
     gzclose(outfile);
 }
@@ -772,7 +772,7 @@ void ByteStorage::load(std::string infilename, WordLength& ksize)
 void NibbleStorage::save(std::string outfilename, WordLength ksize)
 {
     if (!_counts[0]) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
     unsigned int save_ksize = ksize;
@@ -818,11 +818,11 @@ void NibbleStorage::load(std::string infilename, WordLength& ksize)
         } else {
             err = "Unknown error in opening file: " + infilename;
         }
-        throw khmer_file_exception(err + " " + strerror(errno));
+        throw oxli_file_exception(err + " " + strerror(errno));
     } catch (const std::exception &e) {
         std::string err = "Unknown error opening file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
     if (_counts) {
@@ -848,23 +848,23 @@ void NibbleStorage::load(std::string infilename, WordLength& ksize)
         infile.read((char *) &ht_type, 1);
         if (!(std::string(signature, 4) == SAVED_SIGNATURE)) {
             std::ostringstream err;
-            err << "Does not start with signature for a khmer file: 0x";
+            err << "Does not start with signature for a oxli file: 0x";
             for(size_t i=0; i < 4; ++i) {
                 err << std::hex << (int) signature[i];
             }
             err << " Should be: " << SAVED_SIGNATURE;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(version == SAVED_FORMAT_VERSION)) {
             std::ostringstream err;
             err << "Incorrect file format version " << (int) version
                 << " while reading k-mer count file from " << infilename
                 << "; should be " << (int) SAVED_FORMAT_VERSION;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_SMALLCOUNT)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading k-mer count file from " << infilename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &save_ksize, sizeof(save_ksize));
@@ -907,10 +907,10 @@ void NibbleStorage::load(std::string infilename, WordLength& ksize)
             err = "Error reading from k-mer count file: " + infilename + " "
                   + strerror(errno);
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         std::string err = "Error reading from k-mer count file: " + infilename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 }
diff --git a/lib/subset.cc b/src/oxli/subset.cc
similarity index 92%
rename from lib/subset.cc
rename to src/oxli/subset.cc
index 1384923..280d217 100644
--- a/lib/subset.cc
+++ b/src/oxli/subset.cc
@@ -44,19 +44,19 @@ Contact: khmer-project at idyll.org
 #include <set>
 #include <utility>
 
-#include "hashgraph.hh"
-#include "khmer_exception.hh"
-#include "read_parsers.hh"
-#include "subset.hh"
-#include "traversal.hh"
+#include "oxli/hashgraph.hh"
+#include "oxli/oxli_exception.hh"
+#include "oxli/read_parsers.hh"
+#include "oxli/subset.hh"
+#include "oxli/traversal.hh"
 
 #define IO_BUF_SIZE 250*1000*1000
 #define BIG_TRAVERSALS_ARE 200
 
 // #define VALIDATE_PARTITIONS
 
-using namespace khmer;
-using namespace khmer:: read_parsers;
+using namespace oxli;
+using namespace oxli:: read_parsers;
 using namespace std;
 
 #if 0
@@ -147,61 +147,59 @@ size_t SubsetPartition::output_partitioned_file(
             break;
         }
 
-        seq = read.sequence;
+        read.set_clean_seq();
+        seq = read.cleaned_seq;
 
-        if (_ht->check_and_normalize_read(seq)) {
-            const char * kmer_s = seq.c_str();
+        bool found_tag = false;
+        KmerHashIteratorPtr kmers = _ht->new_kmer_iterator(read.cleaned_seq);
+        while (!kmers->done()) {
+            kmer = kmers->next();
 
-            bool found_tag = false;
-            for (unsigned int i = 0; i < seq.length() - ksize + 1; i++) {
-                kmer = _ht->hash_dna(kmer_s + i);
-
-                // is this a known tag?
-                if (set_contains(partition_map, kmer)) {
-                    found_tag = true;
-                    break;
-                }
+            // is this a known tag?
+            if (set_contains(partition_map, kmer)) {
+                found_tag = true;
+                break;
             }
+        }
 
-            // all sequences should have at least one tag in them.
-            // assert(found_tag);  @CTB currently breaks tests.  give fn flag
-            // to disable.
+        // all sequences should have at least one tag in them.
+        // assert(found_tag);  @CTB currently breaks tests.  give fn flag
+        // to disable.
 
-            PartitionID partition_id = 0;
-            if (found_tag) {
-                PartitionID * partition_p = partition_map[kmer];
-                if (partition_p == NULL ) {
-                    partition_id = 0;
-                    n_singletons++;
-                } else {
-                    partition_id = *partition_p;
-                    partitions.insert(partition_id);
-                }
+        PartitionID partition_id = 0;
+        if (found_tag) {
+            PartitionID * partition_p = partition_map[kmer];
+            if (partition_p == NULL ) {
+                partition_id = 0;
+                n_singletons++;
+            } else {
+                partition_id = *partition_p;
+                partitions.insert(partition_id);
             }
+        }
 
-            if (partition_id > 0 || output_unassigned) {
-                if (read.quality.length()) { // FASTQ
-                    outfile << "@" << read.name << "\t" << partition_id
-                            << "\n";
-                    outfile << seq << "\n+\n";
-                    outfile << read.quality << "\n";
-                } else {		// FASTA
-                    outfile << ">" << read.name << "\t" << partition_id;
-                    outfile << "\n" << seq << "\n";
-                }
+        if (partition_id > 0 || output_unassigned) {
+            if (read.quality.length()) { // FASTQ
+                outfile << "@" << read.name << "\t" << partition_id
+                        << "\n";
+                outfile << seq << "\n+\n";
+                outfile << read.quality << "\n";
+            } else {		// FASTA
+                outfile << ">" << read.name << "\t" << partition_id;
+                outfile << "\n" << seq << "\n";
             }
+        }
 
-            total_reads++;
+        total_reads++;
 
-            // run callback, if specified
-            if (total_reads % CALLBACK_PERIOD == 0 && callback) {
-                try {
-                    callback("output_partitions", callback_data,
-                             total_reads, reads_kept);
-                } catch (...) {
-                    outfile.close();
-                    throw;
-                }
+        // run callback, if specified
+        if (total_reads % CALLBACK_PERIOD == 0 && callback) {
+            try {
+                callback("output_partitions", callback_data,
+                         total_reads, reads_kept);
+            } catch (...) {
+                outfile.close();
+                throw;
             }
         }
     }
@@ -274,7 +272,7 @@ void SubsetPartition::find_all_tags(
 
         if (!(breadth >= cur_breadth)) { // keep track of watermark, for
             // debugging
-            throw khmer_exception("Desynchonization between traversal "
+            throw oxli_exception("Desynchonization between traversal "
                                   "and breadth tracking. Did you forget "
                                   "to pop the node or breadth queue?");
         }
@@ -472,7 +470,7 @@ void SubsetPartition::find_all_tags_truncate_on_abundance(
         // @cswelcher Do these lines actually do anything?
         if (!(breadth >= cur_breadth)) { // keep track of watermark, for
             // debugging.
-            throw khmer_exception("Desynchonization between traversal "
+            throw oxli_exception("Desynchonization between traversal "
                                   "and breadth tracking. Did you forget "
                                   "to pop the node or breadth queue?");
         }
@@ -623,7 +621,7 @@ void SubsetPartition::set_partition_id(
 {
     HashIntoType kmer;
     if (!(kmer_s.length() >= _ht->ksize())) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
     kmer = _ht->hash_dna(kmer_s.c_str());
 
@@ -793,7 +791,7 @@ PartitionID SubsetPartition::get_partition_id(std::string kmer_s)
 {
     HashIntoType kmer;
     if (!(kmer_s.length() >= _ht->ksize())) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
     kmer = _ht->hash_dna(kmer_s.c_str());
 
@@ -900,13 +898,13 @@ void SubsetPartition::merge_from_disk(string other_filename)
         } else {
             err = "Unknown error in opening file: " + other_filename;
         }
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     } catch (const std::exception &e) {
         // Catching std::exception is a stopgap for
         // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
         std::string err = "Unknown error opening file: " + other_filename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
     infile.seekg(0, infile.end);
     const int length = infile.tellg();
@@ -914,7 +912,7 @@ void SubsetPartition::merge_from_disk(string other_filename)
     if (length == 18) {
         std::string err;
         err = other_filename + " contains only a header and no partition IDs.";
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
 
 
@@ -934,17 +932,17 @@ void SubsetPartition::merge_from_disk(string other_filename)
             }
             err << " while reading subset pmap from " << other_filename
                 << " Should be: " << SAVED_SIGNATURE;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(version == SAVED_FORMAT_VERSION)) {
             std::ostringstream err;
             err << "Incorrect file format version " << (int) version
                 << " while reading subset pmap from " << other_filename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         } else if (!(ht_type == SAVED_SUBSET)) {
             std::ostringstream err;
             err << "Incorrect file format type " << (int) ht_type
                 << " while reading subset pmap from " << other_filename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &save_ksize, sizeof(save_ksize));
@@ -952,20 +950,20 @@ void SubsetPartition::merge_from_disk(string other_filename)
             std::ostringstream err;
             err << "Incorrect k-mer size " << save_ksize
                 << " while reading subset pmap from " << other_filename;
-            throw khmer_file_exception(err.str());
+            throw oxli_file_exception(err.str());
         }
 
         infile.read((char *) &expected_pmap_size, sizeof(expected_pmap_size));
     } catch (std::ifstream::failure &e) {
         std::string err;
         err = "Unknown error reading header info from: " + other_filename;
-        throw khmer_file_exception(err);
-    } catch (khmer_file_exception &e) {
+        throw oxli_file_exception(err);
+    } catch (oxli_file_exception &e) {
         throw e;
     } catch (const std::exception &e) {
         std::string err = "Unknown error opening file: " + other_filename + " "
                           + strerror(errno);
-        throw khmer_file_exception(err);
+        throw oxli_file_exception(err);
     }
     char * buf = new char[IO_BUF_SIZE];
 
@@ -1000,7 +998,7 @@ void SubsetPartition::merge_from_disk(string other_filename)
                 delete[] buf;
                 std::string err;
                 err = "Unknown error reading data from: " + other_filename;
-                throw khmer_file_exception(err);
+                throw oxli_file_exception(err);
             }
         }
 
@@ -1028,7 +1026,7 @@ void SubsetPartition::merge_from_disk(string other_filename)
     delete[] buf;
 
     if (loaded != expected_pmap_size) {
-        throw khmer_file_exception("error loading partitionmap - "
+        throw oxli_file_exception("error loading partitionmap - "
                                    "invalid # of items");
     }
 }
@@ -1091,7 +1089,7 @@ void SubsetPartition::save_partitionmap(string pmap_filename)
     }
     if (outfile.fail()) {
         delete[] buf;
-        throw khmer_file_exception(strerror(errno));
+        throw oxli_file_exception(strerror(errno));
     }
     outfile.close();
 
@@ -1116,7 +1114,7 @@ void SubsetPartition::_validate_pmap()
 
         if (pp_id != NULL) {
             if (!(*pp_id >= 1) || !(*pp_id < next_partition_id)) {
-                throw khmer_exception();
+                throw oxli_exception();
             }
         }
     }
@@ -1127,7 +1125,7 @@ void SubsetPartition::_validate_pmap()
         PartitionPtrSet *s = (*ri).second;
 
         if (!(s != NULL)) {
-            throw khmer_exception();
+            throw oxli_exception();
         }
 
         for (PartitionPtrSet::const_iterator si = s->begin(); si != s->end();
@@ -1136,7 +1134,7 @@ void SubsetPartition::_validate_pmap()
             pp = *si;
 
             if (!(p == *pp)) {
-                throw khmer_exception();
+                throw oxli_exception();
             }
         }
     }
@@ -1254,7 +1252,7 @@ unsigned long long SubsetPartition::repartition_largest_partition(
     PartitionCountDistribution::const_iterator di = d.end();
 
     if (d.empty()) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
     --di;
 
@@ -1265,7 +1263,7 @@ unsigned long long SubsetPartition::repartition_largest_partition(
         }
     }
     if (!(biggest_p != 0)) {
-        throw khmer_exception();
+        throw oxli_exception();
     }
 
 #if VERBOSE_REPARTITION
diff --git a/lib/test-Colors.cc b/src/oxli/test-Colors.cc
similarity index 88%
rename from lib/test-Colors.cc
rename to src/oxli/test-Colors.cc
index 28e06a0..5cca363 100644
--- a/lib/test-Colors.cc
+++ b/src/oxli/test-Colors.cc
@@ -35,13 +35,13 @@ LICENSE (END)
 
 Contact: khmer-project at idyll.org
 */
-#include "khmer.hh"
-#include "hashtable.hh"
-#include "hashbits.hh"
-#include "labelhash.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashtable.hh"
+#include "oxli/hashbits.hh"
+#include "oxli/labelhash.hh"
 #include <iostream>
 
-using namespace khmer;
+using namespace oxli;
 
 int main()
 {
@@ -49,8 +49,8 @@ int main()
     std::vector<HashIntoType> sizes_vec (sizes,
                                          sizes + sizeof(sizes) / sizeof(HashIntoType) );
 
-    khmer::LabelHash * lh_pointer = new khmer::LabelHash(20, sizes_vec);
-    khmer::Nodegraph * hb_pointer = (khmer::Hashbits *)lh_pointer;
+    oxli::LabelHash * lh_pointer = new oxli::LabelHash(20, sizes_vec);
+    oxli::Nodegraph * hb_pointer = (oxli::Hashbits *)lh_pointer;
 
     std::cout << "lh_pointer n_tags: " << lh_pointer->n_tags() << std::endl;
     std::cout << "hb_pointer n_tags: " << hb_pointer->n_tags() << std::endl;
diff --git a/lib/test-compile.cc b/src/oxli/test-compile.cc
similarity index 94%
rename from lib/test-compile.cc
rename to src/oxli/test-compile.cc
index d272613..698a324 100644
--- a/lib/test-compile.cc
+++ b/src/oxli/test-compile.cc
@@ -36,13 +36,13 @@ LICENSE (END)
 Contact: khmer-project at idyll.org
 */
 
-// This file is used to test compilation with libkhmer.a/libkhmer.so, after
+// This file is used to test compilation with liboxli.a/liboxli.so, after
 // installation
 
 #include <oxli/hashtable.hh>
 
 int main()
 {
-    khmer::Countgraph test(1,1);
+    oxli::Countgraph test(1,1);
     return 0;
 }
diff --git a/lib/traversal.cc b/src/oxli/traversal.cc
similarity index 98%
rename from lib/traversal.cc
rename to src/oxli/traversal.cc
index ca07715..e3befe1 100644
--- a/lib/traversal.cc
+++ b/src/oxli/traversal.cc
@@ -34,15 +34,15 @@ LICENSE (END)
 
 Contact: khmer-project at idyll.org
 */
-#include "khmer.hh"
-#include "hashtable.hh"
-#include "traversal.hh"
-#include "alphabets.hh"
-#include "kmer_hash.hh"
+#include "oxli/oxli.hh"
+#include "oxli/hashtable.hh"
+#include "oxli/traversal.hh"
+#include "oxli/alphabets.hh"
+#include "oxli/kmer_hash.hh"
 
 using namespace std;
 
-namespace khmer
+namespace oxli
 {
 
 /******************************************
@@ -363,4 +363,4 @@ template class AssemblerTraverser<TRAVERSAL_RIGHT>;
 template class AssemblerTraverser<TRAVERSAL_LEFT>;
 
 
-} // namespace khmer
+} // namespace oxli
diff --git a/tests/test_assembly.py b/tests/graph_features.py
similarity index 53%
rename from tests/test_assembly.py
rename to tests/graph_features.py
index d909338..bf7699b 100644
--- a/tests/test_assembly.py
+++ b/tests/graph_features.py
@@ -44,7 +44,6 @@ import random
 
 import khmer
 from khmer.khmer_args import estimate_optimal_with_K_and_f as optimal_fp
-from khmer import ReadParser
 from khmer import reverse_complement as revcomp
 from . import khmer_tst_utils as utils
 
@@ -52,9 +51,6 @@ import pytest
 import screed
 
 
-def teardown():
-    utils.cleanup()
-
 # We just define this globally rather than in a module-level fixture,
 # as we need it during parameterization and whatnot.
 K = 21
@@ -135,8 +131,17 @@ def get_random_sequence(length, exclude=None):
     return ''.join(seq)
 
 
-def reads(sequence, L=100, N=100):
+def reads(sequence, L=100, N=100, dbg_cover=False):
     positions = list(range(len(sequence) - L))
+    if dbg_cover is True:
+        for start in range(0, len(sequence), K):
+            read = sequence[start:start + L]
+            if len(read) < K:
+                read = sequence[-L:]
+            yield read
+            N -= 1
+    if N < 0:
+        return
     for i in range(N):
         start = random.choice(positions)
         yield sequence[start:start + L]
@@ -530,377 +535,3 @@ def circular_linear_structure(request, linear_structure):
         request.applymarker(pytest.mark.xfail)
 
     return graph, sequence
-
-
-class TestNonBranching:
-
-    def test_all_start_positions(self, linear_structure):
-        # assemble entire contig, starting from wherever
-        graph, contig = linear_structure
-        asm = khmer.LinearAssembler(graph)
-
-        for start in range(0, len(contig), 150):
-            path = asm.assemble(contig[start:start + K])
-            assert utils._equals_rc(path, contig), start
-
-    def test_all_left_to_beginning(self, linear_structure):
-        # assemble directed left
-        graph, contig = linear_structure
-        asm = khmer.LinearAssembler(graph)
-
-        for start in range(0, len(contig), 150):
-            path = asm.assemble(contig[start:start + K], direction='L')
-            print(path, ', ', contig[:start])
-            assert utils._equals_rc(path, contig[:start + K]), start
-
-    def test_all_right_to_end(self, linear_structure):
-        # assemble directed right
-        graph, contig = linear_structure
-        asm = khmer.LinearAssembler(graph)
-
-        for start in range(0, len(contig), 150):
-            path = asm.assemble(contig[start:start + K], direction='R')
-            print(path, ', ', contig[:start])
-            assert utils._equals_rc(path, contig[start:]), start
-
-    def test_circular(self, circular_linear_structure):
-        graph, contig = circular_linear_structure
-        asm = khmer.LinearAssembler(graph)
-
-        path = asm.assemble(contig[:K], direction='R')
-        print(path, ',', contig)
-        assert utils._equals_rc(path, contig[:len(path)])
-
-
-class TestLinearAssembler_RightBranching:
-
-    def test_branch_point(self, right_tip_structure):
-        graph, contig, L, HDN, R, tip = right_tip_structure
-
-        assert graph.kmer_degree(HDN) == 3
-
-    def test_beginning_to_branch(self, right_tip_structure):
-        # assemble from beginning of contig, up until branch point
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(contig[0:K])
-
-        assert len(path) == HDN.pos + K
-        assert utils._equals_rc(path, contig[:len(path)])
-
-    def test_beginning_to_branch_revcomp(self, right_tip_structure):
-        # assemble from beginning of contig, up until branch point
-        # starting from rev comp
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(revcomp(contig[0:K]))
-
-        assert len(path) == HDN.pos + K
-        assert utils._equals_rc(path, contig[:len(path)])
-
-    def test_left_of_branch_to_beginning(self, right_tip_structure):
-        # start from HDN (left of branch)
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(L)
-
-        assert len(path) == HDN.pos + K
-        assert utils._equals_rc(path, contig[:len(path)])
-
-    def test_left_of_branch_to_beginning_revcomp(self, right_tip_structure):
-        # start from revcomp of HDN (left of branch)
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(revcomp(L))
-
-        assert len(path) == HDN.pos + K
-        assert utils._equals_rc(path, contig[:len(path)])
-
-    def test_right_of_branch_outwards_to_ends(self, right_tip_structure):
-        # assemble from right of branch point (at R)
-        # Should get the *entire* original contig, as the assembler
-        # will move left relative to the branch, and not consider it
-        # as a high degree node
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(R)
-
-        assert len(path) == len(contig)
-        assert utils._equals_rc(path, contig)
-
-    def test_end_to_beginning(self, right_tip_structure):
-        # should have exact same behavior as right_of_branch_outwards
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(contig[-K:])
-
-        assert len(path) == len(contig)
-        assert utils._equals_rc(path, contig)
-
-
-class TestLinearAssembler_LeftBranching:
-
-    def test_branch_point(self, left_tip_structure):
-        graph, contig, L, HDN, R, tip = left_tip_structure
-
-        assert graph.kmer_degree(HDN) == 3
-
-    def test_end_to_branch(self, left_tip_structure):
-        # assemble from end until branch point
-        # should include HDN
-        graph, contig, L, HDN, R, tip = left_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(contig[-K:])
-
-        assert len(path) == len(contig) - HDN.pos
-        assert utils._equals_rc(path, contig[HDN.pos:])
-
-    def test_branch_to_end(self, left_tip_structure):
-        # assemble from branch point until end
-        graph, contig, L, HDN, R, tip = left_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        path = asm.assemble(HDN)
-
-        assert len(path) == len(contig) - HDN.pos
-        assert utils._equals_rc(path, contig[HDN.pos:])
-
-    def test_from_branch_to_ends_with_stopbf(self, left_tip_structure):
-        # block the tip with the stop_bf. should return a full length contig.
-        graph, contig, L, HDN, R, tip = left_tip_structure
-        asm = khmer.LinearAssembler(graph)
-
-        stop_bf = khmer.Nodegraph(K, 1e5, 4)
-        stop_bf.count(tip)
-
-        path = asm.assemble(HDN, stop_bf)
-
-        assert len(path) == len(contig)
-        assert utils._equals_rc(path, contig)
-
-    def test_from_branch_to_ends_with_stopbf_revcomp(self, left_tip_structure):
-        # block the tip with the stop_bf. should return a full length contig.
-        graph, contig, L, HDN, R, tip = left_tip_structure
-        asm = khmer.LinearAssembler(graph)
-        stop_bf = khmer.Nodegraph(K, 1e5, 4)
-        stop_bf.count(tip)
-
-        path = asm.assemble(revcomp(HDN), stop_bf)
-
-        assert len(path) == len(contig)
-        assert utils._equals_rc(path, contig)
-
-    def test_end_thru_tip_with_stopbf(self, left_tip_structure):
-        # assemble up to branch point, and include introduced branch b/c
-        # of stop bf
-        graph, contig, L, HDN, R, tip = left_tip_structure
-        asm = khmer.LinearAssembler(graph)
-
-        stop_bf = khmer.Nodegraph(K, 1e5, 4)
-        stop_bf.count(L)          # ...and block original path
-        path = asm.assemble(contig[-K:], stop_bf)
-        assert len(path) == len(contig) - HDN.pos + 1
-
-        # should be the tip k-kmer, plus the last base of the HDN thru
-        # the end of the contig
-        assert utils._equals_rc(path, tip + contig[HDN.pos + K - 1:])
-
-    def test_single_node_flanked_by_hdns(self, left_tip_structure):
-        # assemble single node flanked by high-degree nodes
-        # we'll copy the main nodegraph before mutating it
-        graph, contig, L, HDN, R, tip = left_tip_structure
-        asm = khmer.LinearAssembler(graph)
-
-        graph.consume(mutate_position(contig, HDN.pos + K))
-
-        path = asm.assemble(HDN)
-
-        assert len(path) == K
-        assert utils._equals_rc(path, HDN)
-
-
-class TestLabeledAssembler:
-
-    def test_beginning_to_end_across_tip(self, right_tip_structure):
-        # assemble entire contig, ignoring branch point b/c of labels
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-        hdn = graph.find_high_degree_nodes(contig)
-        # L, HDN, and R will be labeled with 1
-        lh.label_across_high_degree_nodes(contig, hdn, 1)
-
-        path = asm.assemble(contig[:K])
-
-        assert len(path) == 1, "there should only be one path"
-        path = path[0]  # @CTB
-
-        assert len(path) == len(contig)
-        assert utils._equals_rc(path, contig)
-
-    def test_assemble_right_double_fork(self, right_double_fork_structure):
-        # assemble two contigs from a double forked structure
-        graph, contig, L, HDN, R, branch = right_double_fork_structure
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-
-        hdn = graph.find_high_degree_nodes(contig)
-        hdn += graph.find_high_degree_nodes(branch)
-        print(list(hdn))
-        lh.label_across_high_degree_nodes(contig, hdn, 1)
-        lh.label_across_high_degree_nodes(branch, hdn, 2)
-        print(lh.get_tag_labels(list(hdn)[0]))
-
-        paths = asm.assemble(contig[:K])
-        print('Path lengths', [len(x) for x in paths])
-
-        assert len(paths) == 2
-
-        assert any(utils._equals_rc(path, contig) for path in paths)
-        assert any(utils._equals_rc(path, branch) for path in paths)
-
-    def test_assemble_right_triple_fork(self, right_triple_fork_structure):
-        # assemble three contigs from a trip fork
-        (graph, contig, L, HDN, R,
-         top_sequence, bottom_sequence) = right_triple_fork_structure
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-
-        hdn = graph.find_high_degree_nodes(contig)
-        hdn += graph.find_high_degree_nodes(top_sequence)
-        hdn += graph.find_high_degree_nodes(bottom_sequence)
-        print(list(hdn))
-        lh.label_across_high_degree_nodes(contig, hdn, 1)
-        lh.label_across_high_degree_nodes(top_sequence, hdn, 2)
-        lh.label_across_high_degree_nodes(bottom_sequence, hdn, 3)
-        print(lh.get_tag_labels(list(hdn)[0]))
-
-        paths = asm.assemble(contig[:K])
-        print([len(x) for x in paths])
-
-        assert len(paths) == 3
-
-        assert any(utils._equals_rc(path, contig) for path in paths)
-        assert any(utils._equals_rc(path, top_sequence) for path in paths)
-        assert any(utils._equals_rc(path, bottom_sequence) for path in paths)
-
-    def test_assemble_left_double_fork(self, left_double_fork_structure):
-        # assemble entire contig + branch points b/c of labels; start from end
-        graph, contig, L, HDN, R, branch = left_double_fork_structure
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-
-        # first try without the labels
-        paths = asm.assemble(contig[-K:])
-
-        assert len(paths) == 1
-        # without labels, should get the beginning of the HDN thru the end
-        assert paths[0] == contig[HDN.pos:]
-
-        # now add labels and check that we get two full length paths
-        hdn = graph.find_high_degree_nodes(contig)
-        hdn += graph.find_high_degree_nodes(branch)
-        print(list(hdn))
-        lh.label_across_high_degree_nodes(contig, hdn, 1)
-        lh.label_across_high_degree_nodes(branch, hdn, 2)
-        print(lh.get_tag_labels(list(hdn)[0]))
-
-        paths = asm.assemble(contig[-K:])
-
-        assert len(paths) == 2
-
-        assert any(utils._equals_rc(path, contig) for path in paths)
-        assert any(utils._equals_rc(path, branch) for path in paths)
-
-    def test_assemble_snp_bubble_single(self, snp_bubble_structure):
-        # assemble entire contig + one of two paths through a bubble
-        graph, wildtype, mutant, HDN_L, HDN_R = snp_bubble_structure
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-
-        hdn = graph.find_high_degree_nodes(wildtype)
-        assert len(hdn) == 2
-        lh.label_across_high_degree_nodes(wildtype, hdn, 1)
-
-        paths = asm.assemble(wildtype[:K])
-
-        assert len(paths) == 1
-        assert utils._equals_rc(paths[0], wildtype)
-
-    def test_assemble_snp_bubble_both(self, snp_bubble_structure):
-        # assemble entire contig + both paths
-        graph, wildtype, mutant, HDN_L, HDN_R = snp_bubble_structure
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-
-        hdn = graph.find_high_degree_nodes(wildtype)
-        hdn += graph.find_high_degree_nodes(mutant)
-        assert len(hdn) == 2
-        lh.label_across_high_degree_nodes(wildtype, hdn, 1)
-        lh.label_across_high_degree_nodes(mutant, hdn, 2)
-
-        paths = asm.assemble(wildtype[:K])
-
-        assert len(paths) == 2
-
-        assert any(utils._contains_rc(wildtype, path) for path in paths)
-        assert any(utils._contains_rc(mutant, path) for path in paths)
-        # assert all(path[:HDN_L.pos+K][-K:] == HDN_L for path in paths)
-        # assert all(path[HDN_R.pos:][:K] == HDN_R for path in paths)
-        # assert paths[0][:HDN_L.pos+K] == paths[1][:HDN_L.pos+K]
-        # assert paths[0][HDN_R.pos:] == paths[1][HDN_R.pos:]
-
-    def test_assemble_snp_bubble_stopbf(self, snp_bubble_structure):
-        # assemble one side of bubble, blocked with stop_bf,
-        # when labels on both branches
-        # stop_bf should trip a filter failure, negating the label spanning
-        graph, wildtype, mutant, HDN_L, HDN_R = snp_bubble_structure
-        stop_bf = khmer.Nodegraph(K, 1e5, 4)
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-
-        hdn = graph.find_high_degree_nodes(wildtype)
-        hdn += graph.find_high_degree_nodes(mutant)
-        assert len(hdn) == 2
-        lh.label_across_high_degree_nodes(wildtype, hdn, 1)
-        lh.label_across_high_degree_nodes(mutant, hdn, 2)
-
-        # do the labeling, but block the mutant with stop_bf
-        stop_bf.count(mutant[HDN_L.pos + 1:HDN_L.pos + K + 1])
-        paths = asm.assemble(wildtype[:K], stop_bf)
-
-        assert len(paths) == 1
-        assert any(utils._equals_rc(path, wildtype) for path in paths)
-
-    # @pytest.mark.skip(reason='destroys your computer and then the world')
-    def test_assemble_tandem_repeats(self, tandem_repeat_structure):
-        # assemble one copy of a tandem repeat
-        graph, repeat, tandem_repeats = tandem_repeat_structure
-        lh = khmer._GraphLabels(graph)
-        asm = khmer.SimpleLabeledAssembler(lh)
-        paths = asm.assemble(repeat[:K])
-
-        assert len(paths) == 1
-        # There are K-1 k-mers spanning the junction between
-        # the beginning and end of the repeat
-        assert len(paths[0]) == len(repeat) + K - 1
-
-
-class TestJunctionCountAssembler:
-
-    def test_beginning_to_end_across_tip(self, right_tip_structure):
-        # assemble entire contig, ignoring branch point b/c of labels
-        graph, contig, L, HDN, R, tip = right_tip_structure
-        asm = khmer.JunctionCountAssembler(graph)
-        asm.consume(contig)
-        asm.consume(contig)
-        asm.consume(contig)
-
-        path = asm.assemble(contig[:K])
-        print('P:', path[0])
-        print('T:', tip)
-        print('C:', contig)
-        assert len(path) == 1, "there should only be one path"
-        path = path[0]  # @CTB
-
-        assert len(path) == len(contig)
-        assert utils._equals_rc(path, contig)
diff --git a/tests/khmer_tst_utils.py b/tests/khmer_tst_utils.py
index be32b3d..e310874 100644
--- a/tests/khmer_tst_utils.py
+++ b/tests/khmer_tst_utils.py
@@ -83,6 +83,7 @@ def get_test_data(filename):
                                 filename)
     return filepath
 
+
 CLEANUPLIST = []
 
 
diff --git a/tests/test-data/banding-reads.fq b/tests/test-data/banding-reads.fq
new file mode 100644
index 0000000..59c4663
--- /dev/null
+++ b/tests/test-data/banding-reads.fq
@@ -0,0 +1,8000 @@
+ at seq1_1406708_1407199_1:0:0_2:0:0_2b227/2
+GGCAACAATACTACAGTGGCGCAAGAAGGCTGGATTACAGGCGCCCGGGGTTGAAAATTTCCTGGTAAGTGCTTGTACCAAAGTTGCATTTGGCCTCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1080343_1080791_1:0:0_0:0:0_43ce/2
+ATTCTAAATTATACTGATGGCCCACTATGGGATTATGTCCTTCCGAAGTGAGACCTTAATATATTTTTGTTAATCAGTGACTGGGCAAGGCTGAGATGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2106314_2106801_0:0:0_1:0:0_1cb17/2
+CATGGTTACTTTCCTGCTTTCACAGCCAGGAGAAGGCCCCGCCTGTAATGTTGCTGACTGTGGCCAGGCTCAGAAAGAAATAAGGTTTGTTCTCACACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2054496_2054886_1:0:0_2:0:0_53d64/1
+TACCTGTCAAGGTTCAGGACAAGGTGCTGGAGAGTTGAGCCACCATACTCTAGGGTGATTGAGATTAATGTGTCCATCAAGCTTTCTTATTGGTTTCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1565858_1566242_2:0:0_0:0:0_641b/2
+ATTAAGCATTTCTTTTCCAGTCCAGTCTCTCAGAAGTACTACTTGTTTGTTGTATTTACAACATGGCTTTGCAGGGATAGGGCCCAAAGAATATCCAAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1920883_1921405_0:0:0_1:0:0_27e41/2
+TGGTACTGAATTTGACTGCAGGCTGGAATATGAAACAGTAATGCCCTGGAGTCGGGGTTCTTATTTTATATTATTGACAGTTGAACAGGTTCTAGTTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_287010_287493_2:0:0_1:0:0_a55a/2
+TGTATTGTTTGCGTTCGATCAGGGAGGACCTGACTGGGTGTGTGTCTTTGTGAGAATTCTAAAGAGCAAAGCTATATAACAGACGTCCTGGTTCCTGACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_366632_367185_1:0:0_0:0:0_3fa46/1
+CATTCATGATCAGAATTGTCTATTTCAGCATCTGACCTCCATCTTTAAAAGAAAAGTAATAATTTGAGAGTGGTTCAAGCAAAACGTGTGAAGGTTGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_615068_615460_2:0:0_0:0:0_49d58/1
+AGTAAGGGATGGAGAGCAGTAGTCGCATGATCAACCATTTGTATTCAATAACAGGAAGGAGTCACCATGGGCAAAATCAAGATCATGGGGGAGACTTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2214008_2214437_0:0:0_1:0:0_30eb7/1
+CAGTCTGAGTTGGGAGGCCCTGTCTTGCAGAATTCCAGGCCTATGTGTGATCCAAGTCTATATTCAGCTCCAAGATTAAGTACCTCATTAAATATTCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2037745_2038152_1:0:0_2:0:0_450f7/1
+TATCTGAAGTCGCCCACGGAGTGCCTACAAGCCCCCCACCGCGCCTCTTTCACTGCGGTGGTCTTGAACCCGAGTAGTTAGATGAGTCTGTGCAGAAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_957161_957578_0:0:0_1:0:0_2c9ee/2
+ATACGCTGTTACATGTCATAGAAAAAAAAACCCTAAAAAAAAATCACATAAAAATGATTGCAAGTCACGTTTATGTTAGAGCTTTTTCGTTCTGCACCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1441390_1441872_0:0:0_1:0:0_47757/1
+AACACATTCAACTACTGTGTAGTAAGTGACGTTTGAAGTTACATTCAAGTAAAGTAAATCTTCTATCTTGCGCGCCGGGTGGCTCACATAATAGTTTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_709979_710339_0:0:0_1:0:0_2644e/1
+TGGGAAAATTCAAAGGCCTTTCCCACAGCAAAAAAAAAAATAAAGCTATTTTTACGCAGAGTCAGCTAATTTTCTCATATTCAGTCCTTGGCTACCACTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1030897_1031398_0:0:0_1:0:0_135fb/1
+GCCCTAATAATTTTATTCAGAAACAGACACAAATAGTAAGAAAGGCAACAAATACCAATTATTTTTGAGACAGGTCTAATTTAAAAGAGCTGAGGCCGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1910419_1910896_0:0:0_1:0:0_59dc9/1
+CTCATTACTTCTGGTACTTTCCCATTTCCAAACAATATATAAGTATATACATTCCTAAAAAAAACAAAAGAGGACTGACCTGTGTCAGTTTTTAATGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2005322_2005830_1:0:0_1:0:0_39b13/2
+TCAATGTGAGCCAGATATATCAAGTGACAAACAGACTTGTTTTGTATTTTAATAGAACAGTTGTGTCTAAGCACCTTTTGTGTGCAAGGCGATTCAGAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_209362_209792_1:0:0_1:0:0_1b7ae/2
+GCAATATCTGAAATTCCTTTGTTTTAAGATTTTTGAAATTTATTAAGACCATGCAAACTAGGTAGGGTAAATCTTAGAAAAGCAACTGGAAATATTTCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1838754_1839218_1:0:0_1:0:0_4fce1/2
+GACTGCGCTTACTTCAGTTAAAAACAGTCCATTTAACTTCCCAGCTTCCAGTAAACACGCAGAGTTGACAAAAACGATAAATGGATGGCCCTCTAAGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1443443_1443910_1:0:0_0:0:0_1c0c6/2
+GCCCTAACACGTAAGAAAGCGAACCTTATTTCTTTCTTTGTGGTCTGGATTTACAGTGACCGTTCACGGAATCTGGTTCCAAAATAAAACCCTGACACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_501349_501712_1:0:0_0:0:0_458f6/2
+CTCCTTAATACACATGGGAGGCAGGTCTGAAAATGAAGGGAAAGGAAGGAATTCTTTTAAAGACCCCATCCTAACACCCTTTAGCACAATGGACATCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2354924_2355414_1:0:0_0:0:0_191c3/1
+GCTTCAGGGAAAGGAAGTTTGGAAAATGCTGAATAAGATGGAGGGACACATACAGACTCCGCTGAGGCAGAATGTGATCTATTAAGGATGCCCTTGTTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1537088_1537511_1:0:0_0:0:0_52cd/1
+TGGCACCCCAAAATACAAAGATTAATTTATATTTATTTAATATCAAAGAAGGCTTAAACACTTTTACTACTGGAAGGGTTGCACATTGCTGTCACAATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2426763_2427245_1:0:0_1:0:0_217e0/2
+ATATGCTTTTAGCCACCGGAGTTTTGACTGCTGCTCCTAACATTTTCACCCAATCAGTCAGAAATAACAAAGGAAATGAGAGGCAAGACACCCCAGACTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1129506_1129982_1:0:0_0:0:0_4153/1
+GCACCAGGCAAGTCTTTCCCTATCTTACCAAACCTAGCTAAAGACCAACGGCCTCCTCTGAAGAGACAGAGGGAAATTTGTATATATTTGGACGAGACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_964105_964535_1:0:0_1:0:0_2f334/2
+ATTTTATAAATTATGTCTATAGCCTGTAAGTCTACGGCCCCTAGGAGACAGGGCAATGTGTGTGGGTTTCAGTCAAGACTAATTGGCATTCATTGATAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2267497_2267979_1:0:0_1:0:0_6825/2
+TTTGTTTTTTTCTGGCTTCCTCCTGGCCAGCCCCTCCCACGCAAGTTAAAAAGGCTCACGCTGGCATTGATAGTTCTACTGCTTAGAATGAGTTCGATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1041_1455_0:0:0_1:0:0_4cb72/2
+CCTTTAAGTGATTCTCTACTAAAAAGATCATTGTAATTATGAAATGGCACAACTGATGAGAACCACGATAGGTGCCGTCATCTGTTCAGTATGTGTATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1745711_1746140_0:0:0_2:0:0_23a27/1
+GGAGGATTTATCTATAGATTATTGACTTTGTCTCTGGGGTGGGTTTATATATAATTTTTAAAGTTTTTTGGTGAACCGCACAGAGCTGGGAGCAGACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_192179_192570_1:0:0_1:0:0_48719/2
+CTGCATGGTGCCTGCTTTACTCCTTTTAAGAGATAAAACCTCACTGAAATGATGTGTGTGTGTGTTGAATAGTTCCAGCCTGGGCAGAGCAGTGGCACAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1119048_1119507_1:0:0_1:0:0_a740/2
+TGGAATAGACAGAGAAAAAAGTGAATGGGCACTTTGAGCCACAGAAAAAAACACTGCACACACTCCATTTCCGCAACTCCAAAATCATGTTTAGTAGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_91664_92117_0:0:0_1:0:0_404bb/1
+TGACAAAGTGGATCACTCATGCCATTTCTTATTTCCTGGCATTTACCACGAAGCCGTTTGAGATAAAATATAATTTTCCAATTTCAGAGAGAGTTGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1288364_1288814_1:0:0_1:0:0_6b87/2
+TACTACTCCAGCTATTCATCCTTGGAAGTGGAGGCTGCGGGTGAGACACTTCTGAGACTGTTAGGGTGAATTTCTTGTTCCAGCTCAGAACCATATGCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_852918_853333_0:0:0_2:0:0_303da/2
+CATCCCCTCTCTTTTTTTACTACCTATATTTGTCAAAAACAAAGATGTTGCCGCTATGATGGCCAGCCTGGGTGTTCATTTCCCTCAGTGACATTTAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1703916_1704298_1:0:0_3:0:0_4662c/2
+GAGACAGCAGCTTCTGCTTAAAAGAATATGGTCAGATAAATACAGTGTTTGCAATTCTGGCTTTGATATATAAGTGACAATGTGGGCATCAACAAACACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1775951_1776414_0:0:0_1:0:0_520a1/1
+AGTAAGAGCCACCTCCGCCTTGTCCAACCTGTGAACTGGTTTTCCCAACATGCCATGTTTTCCATCCTGGACATGGGATTGCACACCAGCCACTGGCATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1906683_1907112_1:0:0_0:0:0_1f3d/1
+TGCAAAATAACAGAGGGACCAGACAAAGGGTACAGGTGGTGCTGTGTGGATTGAGAAAGTTGGAAGATGCCCCAGCCCTTCAATGTGGTATGTTGGCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2468729_2469243_1:0:0_0:0:0_4dcf6/2
+TGCTTGTTCTACATTTGAATTATGGAATGAATCATAAAGTACAGCAGCTTTCATTACTTTTTCCTCTTTTTATTCAACAATATAACTCTGATATTATTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2324461_2324845_1:0:0_1:0:0_4f5c3/2
+AAGGTTAAACCTGTTCAGTTTGTTGCCAAGAAGTCTAAGGCTTTGAAAAGCAAGATCATGTACCCCTTCTTCCATATGATGTAACATTTGTTGTATCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1920808_1921245_0:0:0_1:0:0_34d3e/1
+GCATAGAGGCAGGAAGCTTTCTAAACTAGATCTCTGCCCAAAGTTATCACAAGGGAATGAATCCAGGTGCACAAGTATTCAACAAAGCATAAAGGTGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_212777_213257_0:0:0_1:0:0_24e79/1
+TCTGGAAGTCTTGAGGTTAGCTTTCCTAACCTGTTCAAAAAAGGAAATGTTCTCAACCACATATAAAACATTATGACAATATAAAAATTGGTCATGGGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_131451_131952_0:0:0_1:0:0_44570/1
+GGGCCCCAGGCATACATACCTGATTATGTCACAGAGAGGGATACACCGGGAGGGGCGGGCTTTGAAAGAGGACATTATGCTTGTCCGTCTCCCTCTCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_123388_123909_0:0:0_2:0:0_2808c/1
+AAATTTCTACCTGCTGTGTTCTGGCATTTCTTGTTATATACATTTTTGTATTTTGAACAGTAGTTTTGTGGAAAGAGTGTATACAAATAGAATGTTTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1127465_1127881_0:0:0_1:0:0_34643/2
+TGACCACCTTCACACCCAGCCTGGTTTAAATGATCTTTTAATGATCCGCCAGGCAGGCTTTTCAAGCAAGAATAGAGTGGCACTCCCCAAGTGCAGCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1536601_1537029_2:0:0_1:0:0_10ec9/1
+GAATCTAAAACTAATAATTGACTGGTGCCAAACAAATATCGTATTTTTCTGAGTGCAGTCTCAGAAAGGGAGGGAAGATGGAAGAGTACTGGGAGAGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1191143_1191555_1:0:0_0:0:0_27bd2/1
+TCCTCTCCTCTTGGCTGGAGGAGCGGGTGGTGGTGGATAGGCTGGAGTTAAGTCTTTTTTTGAATGTAGTGATGTTAGCACATGCGAGCTCACTTGGTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1887841_1888317_1:0:0_0:0:0_30b0f/1
+TTATTTTTTGTCATAAATCATCACAATGTCTTGTCTGTTCTCAGGTAAGCAACACGGTGAGTGGTTTTTTTTTTGTACTGATTAAGGGAAATAAAGAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1573730_1574041_0:0:0_1:0:0_58448/1
+TTCAATCCCATCACAGGCTAGCCCCCTCTAAATAGTTCATCACACTGCAAGGAGTTTGAGGTTTGATATCATAAAATTTTATATATATACGCATCCCTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1454165_1454676_0:0:0_2:0:0_24710/2
+AAAGGTAATAGTAAATGTTCTTTGGACTTTAGTAATATGCTCTGAAAGTTCTATATCCCTATAACACAGACTGGACTGGACGCGCGACAGAAAAAAAGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1563604_1564109_1:0:0_1:0:0_111c1/2
+TCAATACTTGAACCCTGCAGCCTGGCCAAAATTCATTTAAATGGAGTGTTCTGATCAGCAATCCTTTCCGGCTGTTTCTGTCCTTTAAAAATTTTTTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_763923_764293_0:0:0_2:0:0_107b9/2
+AACCTATGTGACTGGGCACACGGACACAGCCAGGGAGCTAATTTTGTTTGAAAGTCTTGAGTTAGAGATGAAGGTAAGCATTCCTTGGAGTGACTACCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2189296_2189742_0:0:0_1:0:0_3d512/1
+TAATTATTTTTTGTATGTGTGTGATTTTCTTTAAGTTAAAAAACATGCATTTGGTTTATGGAACCACTATTGAGTAGCTGGGAGTTTTCCAAAGTGGCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1895665_1896002_0:0:0_2:0:0_448ac/2
+CCACCTGCACCAAGCTTGGGAGCTGCGACTGACATCGTTGGGCTAACATTTGGAGGATATTCCTTCTTTCTGCATATAAAAAAAAAAAGACTTTGCTCGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2423101_2423551_0:0:0_1:0:0_4aa4d/2
+TGACAGAAAACGAAACTGTTTATAGTATTTTGCCTCCTAGGAGTCTTGAGCCTCAGGGCTGTGCGACAGTTTCTCAGTGCTACACTTTCCCCTTAAAAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1520769_1521320_0:0:0_1:0:0_35e04/1
+TTTTACATTTATTTAGATTTCTGTCATTTCAAATCTAGAAATTAAGCCACAACGTGTGGTTCTGCTTGGTCAGAGCAGGTGTATATAAACAATCACAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_379521_379847_5:0:0_1:0:0_532ae/2
+TATTCTACTACAGCTGACAAGCAATACCTGGAAGCAGAAAAAACATCTTTCGTTACGCAGGATTTCGTTCTTCAGATCCAGGCATATCTTCCCCATCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_7118_7558_1:0:0_1:0:0_faa8/1
+GCAAAGAGTGAAACCACTGGCAAAAAAGTTGTGGAAAATAATCAGAGGCCAGCCTACTTGCTTGAAAGAGAGGAATGAGAACTTCTTAAAAAGGACTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1657297_1657649_1:0:0_0:0:0_9428/2
+GGTTCTGCTGTGAGTTCAGAGCTGCATTTAAAGGTAATGATACACGTTGACACATACTCCCTGCATGCCATCCTGTATATATGAGTATGAGTTAGAGATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_517714_518172_2:0:0_1:0:0_348ef/1
+ATACAAGGCCATTACAGTCCACACCTATTCTTTGTTTTGCATCTGTGATCCAGAATCATAACCAACCTCCAGGTCACGATCTTCGCCCTCCTTAGCCGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_569010_569498_1:0:0_1:0:0_57efb/1
+CTAGCACAGAGTAATCAATCCCAAGTCAAGTCACAGTAGGAATGAAAATGCAGTACCAGGGATGACCAAAAAAAAATTATTTTTGTAGATGATTCCTACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1168447_1168849_1:0:0_1:0:0_41f73/1
+TATTTTGACATCACCTGGAAGGAGACCAAGTGATATAGAGTTGTCTTAGCTTGTTTTCCTTAATTTATAGAAGGACAATTTTATTGCTACCTCTTGATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1424239_1424663_2:0:0_3:0:0_55c60/1
+AGATGAGTGAATGGGGGAAGCAGATCTTGGAAATGAGACTGTATAAAAATGAGCACCAGATGGAGAATGGCTGCGGAGGCGGAGATATTTTTACCATTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2313844_2314356_1:0:0_0:0:0_470d5/1
+TTTAAATGCAGCAGCACTGGAAAATTATAATAAAACTGATGCTACCTCTTCATCAACACCGAGTTAATACAAAATAGAAAAGAAAAATAACACATCTAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1378217_1378710_1:0:0_0:0:0_ad72/2
+AATTTTACTGATATTATTTCAACACAGTGAGCTAATGCATCTCTGTGTGAGGTCATGGCGTTGGTGTTACAGGTCTTCAGGCCAGAAAAAAGTCTTTAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_929176_929616_0:0:0_1:0:0_28a1c/1
+CCTTGTTTGCATAAAAAAAATTGTTGATAGTGCTGAGGCAGAGGACGGAGGTGGGCAATTAATCAAAAACTTTATTTTAAGAGATGTTCTCTCTACCCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_802958_803314_1:0:0_1:0:0_91a1/2
+GCATGAGTAGCTGGGAGGCTGGAGGGAGGGAGAGCAGAGCTTACTCAGAGAAGGCCAACATCTTGAGGATTTCTCCCAGCAGCTTTTAGACCTTTTATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1155065_1155600_1:0:0_1:0:0_3ba10/1
+TGGTAGCTGAGTGGTCCCTCTAATTTAAAAATGCTAGGGGCTGGATGTAGCTGAACTGTGGAAAGGCCTCAAGACATTTTCTTTTACAGGCTTCACCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2008096_2008575_1:0:0_1:0:0_4cf81/2
+GGAGCTCACTAATTAAGTTAACTCTGAATCTCTATGATGGAATCACCTGCCGACTGCATAAGCATGGGAATAAAACAAAATAATCAGTTCAACACTGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1686388_1686822_1:0:0_1:0:0_42c4/2
+TGCTATTATTGATCCAACATGCCTGATGATTCTGAGTGTGGTGGCACTCTCTCTCACACATCAACAGATACCTGGCAAGACCATCACCTCTCCCAGTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_637834_638308_0:0:0_1:0:0_1fae2/2
+AGGGTGACAACACAAACTTCAACTGATTAGCTCTCTTGGGTTCACATGCATACAGCCCACCATACCCTTCCAAGGCTCGGATCACTTAGATAGATAGCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1861517_1861972_1:0:0_1:0:0_42c45/2
+CTGCGCCCGGCAAACGAGTAGAGACGGACATCCGTTCAGCCTGGCTACCGCCCACTGCAATAGTGCTGTAAGGTACTCAACTAGTGATTCTTAGCACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_375696_376096_1:0:0_0:0:0_1880f/2
+CTTTCATAACTCATTCATGAGGGTTCAAAAACTATACCATTATTGCACCTAATTTATATAGGTTGGGGAGAATGTGAGTAGCTTTGCAAGGTGTGGATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1667489_1668026_1:0:0_2:0:0_5b52c/2
+AAAGGAGAATTCCCACAGCCTGCAACTTGTCACACTGCAGTTAACACAGTGGCACCGCAAATACTTCTCTCTGGATCAACTGAGGTCACACTAGCTGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2123665_2124053_2:0:0_2:0:0_aebf/2
+AATATCCAGGCTGAAATAAGTGGCGTAAGATGTGGAAAGATACATCACACCTGCTTCAACAAACCTGGGAGGAGCAGCATTCACCTATAGGCCAGGACTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1086541_1087020_0:0:0_1:0:0_6d/1
+CTTCTGGTTGTAAAGCTTAGAGGTAAAAACAGGGAGGATGAAGTATGACTTACCACTTCATGAATCTCTATAAGTTATATGAACACCTGTAATCCCAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2006341_2006734_1:0:0_1:0:0_3f530/1
+TTTTTCCAGACACAAACTTAGCGACACCAAAAATCTAGTAATTTCTGAATGCTGGTCCTCCCAAATGAATGCATCAGTAGCTGGGCACCTGCAGTGAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1087045_1087587_1:0:0_1:0:0_2dbc0/1
+TAATAGAGGTGGATATTCACAGCTCCACGCTGTCCTTATCAGCTGCAAAAATATATATTTTTTAAATTCTGCTTACTGTGGCTCGCTGCAGATGGATGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1239130_1239546_2:0:0_0:0:0_27e13/1
+TTATGAAATTTCTTTCTTTCATTATTGCCACATGTGGTGCTTCGATTCAATTTCCAATACTTTTCATATATGCGTGAGCCATGGAATTTTAATTATTTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1696718_1697218_2:0:0_0:0:0_f198/1
+GGACAGCTTCATTCTGAAGTTTGTAATGATGACCTAAATTTTATTAAGGAGACCAAGTGATGGCCACTGCATTTCCAGTACTACTGATTTCTCTCTTACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1268144_1268533_0:0:0_2:0:0_58ad1/2
+AGGATGGGTTGGGCAACAATTCTCTTACATGAACAGGTTTGAGGACATGTGCATCTCTCTCCAGCGGTCTTTTAGAGAGAAAAGGATGCTCATGTGATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1954521_1954921_1:0:0_0:0:0_33df2/2
+AACACAATCTCAGCCTGTGTGCATGTATGTATATCTTTTTATAGAAATTGCAGTGTCTCCACTGCACTCTGTTCCAGCAAGACTGGGGGAGTGGTGACGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_891370_891880_0:0:0_1:0:0_1ac34/1
+CATCTAGTAAGCAGCACCTTGCATTCCTGGGTTCTAGACTAAGATTATTACAGCGCTTTCTAAAAAGAAAGACATCAGATAAGAGAATATATTTGTTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1467247_1467708_0:0:0_1:0:0_1f2b3/2
+AGAGGAAAAGAATGCCTCAGATTTAATAGTTGTTGTCATCGGAGGTGATACTATTGGCCAGAATCTAATTTTAGTAACCAACAGACCATGTGCGTATTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1216736_1217173_1:0:0_2:0:0_edd4/2
+GGCAATATATATTGGCTTCATCATCATTTAAGGGACTCCACCATGTCCCTCATTGAGGGACACGCTAATTTGGGCGCCACAGCCAGCTTGGTTCTTCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_334013_334508_2:0:0_0:0:0_27d80/1
+CTCTTAGTGCCTGAATTCGTTCAGTGATCTCGGCCTCATAGCGAGATCAATAGTTTTAAGCATACCATCATAGTCCCCAGCTACTTGTACATGAAGAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2066889_2067432_0:0:0_1:0:0_4ef5d/2
+ATTTATTCCCACTTCTCTGGCTTTAGGTCAGGTCAGTGATCTCCATATCCTCAAACTGATGCCTGGGGCCGAGATGGTAGGAAGGTGGAAAAGAACAGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2162851_2163324_0:0:0_1:0:0_3575b/1
+GGACTGTGTGAGTTAACCACACCTCAGCCTCAGCCTTGTGCAAGGAACATGTATAACTTCTTTAAAAACCTTGTTTTTTTAAACAAATTGAGTACTTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_362656_363096_0:0:0_1:0:0_1a7b5/2
+GAAGGTCCCAGTCTCAAAGCAGAGGTGGCACTTTGGCTAATTTTGTGTCAAGGAGGTGGAAGCTGAAATCCCAGCCTCCACTTACTATGATAAAAGTGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_817324_817757_0:0:0_1:0:0_13b2d/2
+TTGACAAAATAGAATCCAGAGGCAGGGGAGTGCATTCGGTAATCTTCTTGCTATGAGGTTTGAAACAGGAAATGTTGAGGTCCAAGCAGGGCCATACGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_753194_753649_3:0:0_1:0:0_35e66/1
+CATTAGATAATTTAACTGATCTGGCTGTGCTTTCAGAATGACATCCTCAGCCTGAACTCACAGCCGAGGGCGTGCAAAATGTCACCCCGTCTAAAGACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1111125_1111609_1:0:0_1:0:0_361b2/1
+GATGATCTTAAAAACTCTATTCAATCATGCAAAGCTGTTTTTAAATGTAGGACCTTTCTATAGTTAAATTAGAACGACCTCCTCCTTATAACCACACGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1050585_1050974_1:0:0_1:0:0_3053c/1
+GCATGTAAAATACATTTGGACTACCATCAGTATAAAGCTGCAGCTGTCTCAAAGTCTACAGGAGTTTATGCAATACCAATGAGTTTAAATGATAAGAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_717278_717807_1:0:0_0:0:0_2d551/1
+AAAACAAAAATAAATTCTCAGCTATACAAAAAGTGAAGTATTAAATAATGAGATAGACAAGTACACTGGTCTCGAACTCTATGATTTAACGTAAAATAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1716066_1716461_1:0:0_0:0:0_1b52d/1
+GAAACTTGTATGACAGAACTGTTTTTTTGTTTGTTGTTTAAATCTCATAACATTCACGCCCAGGGAAAAACCAACGTCAACTCCAACTGACACCTGGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2154536_2155011_0:0:0_1:0:0_32631/2
+CATTCATTGTTAGTGTAAGTTTTGAGTTGAACCCAAAGTTGGAGTCATAGGCGTGGTGGGGCAGGGCAGTCAAAAACTACTGCACAATCTTTTAATGTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1054757_1055194_1:0:0_0:0:0_40405/1
+ATACCCTGTAGTAGAAGGGGTTTTTTTTTAATGATTATAAATATAATGAACAGCTAAGCCACAGTGAGTCATATCAGCGGGCCCTTGCAGTGATTCAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2232056_2232504_0:0:0_1:0:0_53075/1
+AAAAACAGAAAAAATATATATATGATTTTGAGGTTGCTTTGCCTTTGAATTACCTTGTTGTTTTACAGGCCAGGCTACTCGGTGAGGGGGCTCACTGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_642000_642387_1:0:0_1:0:0_3f536/2
+AGCCTACATCAATAAATGTTAATCTAGATAGATGGTGGTGAGAAAGCCTATCATTAAAAACTAGTAAACTTCAGTCATATATATATCTATTGAATCAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1303011_1303464_1:0:0_3:0:0_328a0/2
+TGACTCTGTTTGAAGGAGTTTATCTACAAGAAAGAGGAGTTCAGGCTGAGGCCAGTATGAGAATGCTTCAATACAACTGGCTTTTTATCACAGTCAGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1764570_1764977_1:0:0_0:0:0_16886/2
+TAATCAGTTGGGGATGGAGGAGGGCCTCCCAGCTACTCGGGTGGGCTTCTTTGTGAGATACTCATTAGTGTTAAAAATACATTTATTAGCCTTGATATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_235135_235598_1:0:0_0:0:0_12ed6/2
+TGGAAATAACCCTCCCCAGGCAGCTTGGTGGGGGGTGGATAACGATAACAGATCATGATCTCATTATGAGTCTCCTTTTCTTTTCGGAGCTGGGACTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2000542_2000940_2:0:0_0:0:0_4b8c9/2
+TGCCCACAGCCCAAAGGTTTCAGAAACAGAGGATTTTCTTGAACACCGATAATCTGCCTATATTATTTTCCCTCCCCTCTCACAGTATTGCTGGAATAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1730765_1731134_0:0:0_1:0:0_16c12/1
+TTTGAAATATTAAAGTGGGTTGCCCTGATGCCTGATCCAATTCTAGTTCCCCCATCTATTTCTTATGGGGGTTTTTCTTCACAGAGCTTGCATCCTGACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1936401_1936842_0:0:0_1:0:0_2754e/1
+TTCCTTCCATACTTGCAAGTGAAATTAGGTAATAATCCTGGACACCTTCCAGGGAAAGTAGAGATTCAAATTTATCTGAATAAGTTATGTCTCAGCTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_392941_393379_0:0:0_1:0:0_c5a0/2
+TCCCGGGAGGCTGGGTATGAGTGAGAACCCAGTCTTGCTCTCTAAGCTCCCTCCTCCCAAAGATGAAGCATGTGGCTCAGCAAATCTGCCTTGATAGTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1915479_1915894_1:0:0_1:0:0_24b16/2
+AAAAAGATAATACAGAAATATCAACAGAGTATATACACGCAGTAATCCTGGCTTCCTTTTGTGTTTGTCCACTTGATCAGACTCCAGGGGTGAAGACACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1312224_1312578_1:0:0_2:0:0_2493e/2
+CCTTAATAGGAAAAATGAAGGTGGCTCCCTGGAGTCGCCTGGGATTAGTGCAAACAAAAACAATATTAATTTCAAAAAACCTTATTGTTCTGTCCTCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_509431_509835_1:0:0_0:0:0_26036/2
+TCAATTGGTTAAGATGGGCTCAGTGGTGTCCTGAGATCGATATTCGGTTCTGCCTGTGTACAAAAACACACCTCACAGAGTTGATATCTTCATGTTTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1530568_1531088_1:0:0_0:0:0_dbbf/2
+AAATCACAGAATTAATCAGTGTATGTTGCTTTTAATAATTTTTTGCACAAAATTTCTACATGTAGGTACAGGCCGAAGCCAGTGATATCATGGCTCATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_914420_914891_1:0:0_0:0:0_558d1/2
+TTTCTGGATGCAAAAATTTCAAAAATACAGAGACACGTGCAAAGGAAGTGAGCCCAGGCATGGCCCTTTATCTCAAGCTGCTTTTATGTTATACCTCCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_461290_461842_0:0:0_1:0:0_15d37/1
+TTCTAACTCTTCATAGGCAACTATTTGGGAAATTGAATAAGATTGACTCTACTGTGTTCATGCCGGTGCACTGTCGGCCTCCCCTAATGTCTGATTTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_170232_170661_2:0:0_1:0:0_1e367/1
+CGGGGCTCGGGCCCCAAACAATTCTGAGAGGGAAGTCCTATAATCAGGGTACAGCCAGGCTGACAGTTTTGTCAAGTGTATTTGGAATACCAATAGAATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_839850_840266_2:0:0_0:0:0_36f81/1
+CTTCTTTTGTTACCGTATGCAGGCAGGCAGGTCATTTTAAATAAACGGCAGGTGGAAAGGTTATGATTGATTTTAAATTGAGTGCATTAATGGTCGTTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2005020_2005442_1:0:0_1:0:0_ba96/2
+AAGTGACAAACAGACTTGTTTTGTATTTTAATAGAACAGTTGTGTCTAAGCACCTTTTGTGTGCAAGGCCATTCAGAATTGATCCTAGGGCTCTGAGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_712593_713035_0:0:0_1:0:0_22b26/2
+TAAACTGGGGCACATAAAATTGATTGTTTCAACATAAATAATTCCATTAAGCTCAAGGGAAGCATGGGTGCGACAGGATGGTTTGTTGAAACAACACATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_273645_274160_2:0:0_1:0:0_41d63/1
+TCCTTGCTTCATCATTACTAAAGAGTTTAGTCAGCGGACGATGCTCCTGAACTTCTGCAGCCTGGGGTGGGGCAACAGTCTCATGGCTGGGACTGCCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_150934_151421_0:0:0_1:0:0_2e071/1
+TTGTTTGCTCTCTCCTGATTCGACACTGTGACGCTGCTTTGAACCTGGAAACTAGAATACTGACCTAATAGGGGGCTAATAATTTATTTATGTCCTCAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2134603_2134953_1:0:0_0:0:0_5500d/1
+GTGTGTGTGTTAACTATAATGTTTGCAATCTCAGACTGTCCCATATGACCACAGGCAGAGCTTCATCTGGGATGATTTAGGGTGTGGTGTTTGTTTTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2100958_2101458_1:0:0_1:0:0_21baf/2
+ACATTAAGAGAGCACCCTTGAACCTCCCACTTGGCCAATTCCTTAAGGCAGGACAAAATAAAATAGCACAGGATTTTAATATAGATATGTGGAGGAGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_914312_914698_0:0:0_1:0:0_1e231/2
+GTTGGCCTGGCTTCACAGATGCTGGGGCCGTTCTTGTAATGTATATATGACACTTCACTACTCTTCTCTCTCCCACACATTTTTCTGTCCCAAAATATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_532760_533216_1:0:0_0:0:0_3fd37/1
+ATCTATCAGGGGTGCTTTTGTAAATTAGCACAGACACTGACTTTCCCACTGTCAAGTCATGTATAGTCTCCCATTAACTATAATTCTTGACCCTCCAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_157261_157713_1:0:0_1:0:0_25177/1
+CTTTTATCTTCATCCTTTGACTTTGGTGCAGGTTAAATTTGCCAGACCTGAGTTCAGGAAGTCAGCCTAGGATCAATTGAAGCATATAAACACAGGTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2360455_2360896_0:0:0_1:0:0_1abe9/2
+AGGCTTTGTTCTCTTGGGCACATGTGAGCCAGAGCTAGAGTGTGAGACTAATATCCATGATCCTTTATATATCCTCCCACCTTGTGAAGTTTGCAATGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1757509_1757925_0:0:0_1:0:0_1f21e/1
+AACCAATAAGAGAGTATTACAGGCGTGAGGTCCTTGTGACTCATTTCATATTTGACTGGTGTCCAAGCATGGATCCTAGATCAGTTTTGGATATGGGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2450963_2451394_1:0:0_1:0:0_5a11/2
+GTATACAAAAAGGGGCAGGAAACGGTGTTCCCCAATGTATACACAGATGCCTTAATATCAAAGAACAAGTGCGGGGTTTTATTTGTGACTCAATAACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1963304_1963792_1:0:0_0:0:0_470f0/2
+TATGGAATATCCTCAGCAGTGAGCTGGAAGATCAACTTGAGGTCCCAGCTATTGGGGATGCCCGGCAACACCCGGCCCCAGCCATACCTATGAATATATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2177174_2177642_1:0:0_1:0:0_2a7ab/1
+GGGATGCTGTGAGCCAGTGTACCTGAATTGATTCTCAATCCTAATGGCCTACCACCTTTCGTTTAAGAACTAGAAACATCAATCAGTCCCAGGGCTTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1290677_1291137_0:0:0_1:0:0_37b71/1
+TGAGCTCACTATAGCTGTAATACCTATATTATTTACTCTCTCAGCCTGCAAGACTCTTTATGGCGACGTCAACCTGGTGCCTCAGGAGCAGCTTTCAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1495067_1495504_0:0:0_2:0:0_14221/1
+CACTCTTGATTTATTCACCACTTGTTTTGTATTTATGATAAGTGTTGTATGGTTGCCTCAAGTAGGAAAAGTTTGCTGAGGAGGCCGAGATTTTTGTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1712488_1712906_0:0:0_1:0:0_405a1/2
+TGGCAGACGTCTCTTATGCTCCATTCTGTCCAAAATCTTCTTCAATGCAAAACCTACAATCAAGCAAAAAAACATGGCCTGAAACCATTTGTCAGAGCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_142116_142566_0:0:0_1:0:0_49d9e/1
+CTGGGACATCACCTCCTTGAGCCCCTCTAAATATAACAATTCAAGTTATAAACCTATTGGAGCACCCCTCCCACCTGAACTCCCAGCACATTGGTGACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1107041_1107476_1:0:0_0:0:0_2ba36/2
+GTGAAACCAGTATTCCATGTATGAGTTCTTACAGAAACTGCTCGCCTCCCCGTTTTTGCAACCTCTGGCTCAGGAAGCTTTTAAAAATCAAACTTACAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2002337_2002808_1:0:0_0:0:0_3cd7e/1
+TTAAAGCGTGAGCCAGGGATTACCGGGATGTTGGTAACATAGTATCTGTTCTCCTTTTCCTTATAACTAAAGGTCAGCTTGATTGTATCTTGGGATTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2181069_2181513_1:0:0_1:0:0_2c485/2
+TCATGTTGAGCTGAGTGAGCTACACAACTGAGTTACTAGGATTTTGGGAATCACACATGGAATGGATTTTGTGTTTGCTATGATTTCATAAGTCAAGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1026948_1027375_0:0:0_1:0:0_5a15d/2
+TGCATCCTCTTATCTATATAAAATGAGCATTGAACCTGTTTAAATTTAAACAGAGTCTTGTGGGGGGAAGGTGGAACCAGAGCAGATTCCAATGCAGAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_746197_746648_0:0:0_1:0:0_113c3/1
+AAGAAACACTCCAACCTACCATTCTGCCATGGTGGTGTATGAGTGGATCAGTGTTTGGCATTCCCAGCATATAAATTCTAGTTTTTCTAAGAAAATATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1098058_1098510_1:0:0_2:0:0_56f4e/1
+CCAGAGCACAGAGTGGAGGGAGGCTGGAAGGTCAGTGAGCCCTTCCAGGAGGAGGAAGGGCTGTTTTTAATAAAGTGCTGGGAAAGACACGATAACAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2169731_2170123_2:0:0_0:0:0_ea08/1
+CTTGGGTGATCCTTTGTATTACCATCAATACTTCTTAGTATTGTTGAACCCGTGGCTCTGCCTCAAATAAATGGACCTATTGTATATATATGTGTATGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_643826_644180_2:0:0_1:0:0_2c5f3/1
+AGTCCCAGGGTGGAGACGGAATGGAATGGAAGCTGCCGGCTAAAAACATTTTTGATATTTGAAATCTATATTAAGAAGGCAACCAGAGACAGACATCAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2309734_2310224_0:0:0_2:0:0_1a283/2
+CGAAGTTCTTTTAAGCAACTTATACTATACGTGGTCTTAGATTCCAACTAAAAACCCAATAATGAGAATAACAATGATGAATATTTAGTATCCTGGGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_958025_958433_1:0:0_0:0:0_230fe/2
+CACAAGTGGACACGTGGAGCTGGGAAAAGCGTTGGAAAACAGTCTCACGGTGGCTAAATGTCACCAGGAGTTGTATTGCTGATTTATCCACCACTTTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_502571_503020_1:0:0_1:0:0_27f34/1
+TCTCCTCAGCCTCCCCCATTCCTTTAAAACAGGGTATATTCTCACGCCGGAGCTCCCCACTCCATCCCAGCCTAATGTGTTGTAAGTCCCAGCTTCTACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_30186_30667_1:0:0_1:0:0_2883d/2
+ATAAAAATAAATCAATGATGCTGTTTTATTTGATGGTCTGGACTGAAAAAAGACAGTTTTGGTCTCAGCAAAGATGATTTATGCCTTTGATGGGTGTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2325684_2326074_0:0:0_1:0:0_3e3da/1
+TAAAGTTCTGTGTCTCTGCTTGAATCACAGCTGCTGATCTCAGTGGGTTACAGAGAGCAGGAGGCATTATAATGGCTGAGGATCACCTCCGCCTCGGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_542674_543137_2:0:0_2:0:0_53a8c/1
+ATAAAAAAAAAATTCTATTTGTGGATGAGGCTGATTTATTTCATGGGTTCTCATGGCCATCGGCTGGACTGGGCAAGAGTCCTAAGGCAGGCCTTGCAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1534484_1535007_1:0:0_1:0:0_28ba0/1
+ATTAGGTCCGTCTTGTTCTGAAATGACCAGTTCAAGCCCCTGACCACCCAGTGATGTCATTTATTTTTGTAAGGGAAGGATCACTTTTTGTAGATTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1939960_1940384_1:0:0_1:0:0_3f884/2
+TCTCTTGCTCTATTAAAAATCGAACATGTCCCTGAGTCCAAGAATTTGTTTCCTTGTTCAGACTGTATATTACAGGTTGGGGTCTCAAGTGTGTGTGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1475889_1476291_1:0:0_2:0:0_2e20f/2
+AAAACACTGGTATCCCTCATGAACAATTTAGATTAAGCCAATGACCTGACCAACAAGGGTCTAGCTATGGTTCTTTAGGAAGAGCTTGATTTCATAGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1657513_1657969_0:0:0_1:0:0_ab54/2
+ATTCTCCCCACGTCTATTTATACAGATCGTGTAAATCTGCAGTTGTACTTTGGAAATGTGAACTACCATGTCCTAGAAACATTAAACAAAAAAAATATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2379916_2380357_0:0:0_1:0:0_122fe/2
+TTGAATCTGTTGGTGTGAGCCGAGATCTGGTGTCATGGGGGAAAAATAAAAAGCAGGTACTGCTACCACTAGAACGGTAATATATATATCAATCACCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2264843_2265330_1:0:0_0:0:0_33e76/2
+TGGTGGCGATGAACTTTCAGTTCCCCAGACTGGGTGCGGCCCCACCCCCGAGCTTGTGAGGATGGCTCCAAGTAAAGCAATGGGATTTTTGTAGAGAAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_695668_696062_1:0:0_0:0:0_5b245/2
+TAATTTAGTTTCCAGTTTGAGCAGGTTTTCTTTTCCATTGGCGATCTATTTTATTTTCAGGAAGGTTGCCTCACCTCCTCTTCAGAGCACCTGCCTCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_798287_798678_1:0:0_0:0:0_6601/2
+AGTGGCCTTGCACCTTCGTGAAGATATATACTTCCAGGAGGATGGGGGTTTTCTTCCTTAACCACATATGTAAGCTCAGGGAGAATGGAAACATTAAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1251913_1252310_0:0:0_1:0:0_50fca/2
+GGAAGTCAAGAGAAAGCTGGCTTAATACTATTTCCTTCTATAATTTGATTTGGAGCTATTCAAGTCACTGCAATGCGATCTCTTATCATGCTGTACCCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_306472_306897_1:0:0_1:0:0_53f7d/2
+TATGGAGTAGATGAGATAAATTTCAGGTGCCTGTTGCTTTTGGAGCCCCGAGGCCTCTGACTCTGCATGGGAGCTCCCTGGCCGGGCAAAGCGTTTCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1023981_1024422_1:0:0_1:0:0_4a042/1
+AGCACTCCATGCACCACCTCTGCTAGTATTCATGGATGCAAGAGGAAATTGAACTGCTTGTATTCAAAAAAAAAAAAATGGCAGAGATCAAAATGAAAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_829410_829845_0:0:0_1:0:0_2a43b/1
+TTGAGAGACACCACTCAAAATGCTTCCTCCTATATCAAAAAGGAAATGTCTGTGCCTAGTTGTGAATGTACATATATAACTCATTTACCCCATAATTAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1548338_1548742_0:0:0_1:0:0_19a3c/2
+ACCCGGGTTTTGTCCTCTGCAACAAAGTGAGTGAAGAGAATGGACAAGGTATTTTCCCCATGGGCATTCTATGGTTAGATAACTTTTTTTTTTTTATTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1180836_1181343_2:0:0_0:0:0_2cb6c/2
+GGGGATGCAAAGTGTGAATATTCAAGACCTTGACAACAAAAAAAGACCCAGGGCTGACTAAAACTTAAAATGGAATCCAGTTCCCTTTCTTTACTTAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1046131_1046625_1:0:0_2:0:0_3b85a/1
+TTGGAATTGAAGCCCTGGGGGAAATGTACTTGTTTTATGACAACTGCCAATTCTGAGACATTTCTGTGCTCAGCTTCTAAAATGTCCCAAAGCAAGACTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1171403_1171805_1:0:0_1:0:0_253c3/2
+ACCCCTGCCCGGCTGTCTTGTCCAAGGATTGAGTGAAAAACTACCTACAGTTTCTCAAATTCCCTTCATGCTTCAAGCGCCCTCTGTTTAGTCCCTAGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1182103_1182543_0:0:0_2:0:0_18954/1
+CACTCGGGACACAAACTGTCGTGCTTGAGTAATAATTTTATTATATCGTAGAATCAGGGGACCATATATGATACAGCACGTACACAGGTCAGGAGAATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_975307_975728_3:0:0_1:0:0_199b/1
+GTTTCTTTCTGAAAGATCGCTTTCGTTTTCATAAACAAATTCTATCATACTTTTCGTCTGCATATGAAAAACCAATGCGAGATTTTTAACACAGGTATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1184801_1185283_1:0:0_1:0:0_bd76/1
+CTCATACCTGCTGTGCTGGAATGCACCGTCACTGGCCAGCATGATTTCACTAGAAATGGGAAGGCTGTTACCTAAGATTCGAGACCCCCAATTATCAGCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_254670_255241_0:0:0_1:0:0_1e869/1
+TGAAAGGAAGCACTCCAGACTTTTGTGTTAAAAACTTTCTTTGAATTATATCATTTGTCACCTGTGCCATCTTCACCTGATATCATACACCATGTCTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2197300_2197681_1:0:0_0:0:0_c181/1
+TCATCATGAATTATAACATTTCTGCCAGGTGTTAGCCCTGGAAAGTGCTGTACTGTTTTATTTTGAGGGGCAGGAGAACTCATTATTATACCCAGAACAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2178945_2179323_1:0:0_1:0:0_2db58/1
+ATCGGAGGAGCAGGAAAATCTGCCTTATAGTTTTAACTATTATTAAGTGATAGCTAGCATTTCTGGGGCCCCTCCGCCTCGGCTCACGGAAGTGATTAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1221589_1222023_0:0:0_1:0:0_42190/1
+GCTTTGGGTCTTATCATATCAAAAAAATTTACCGATTACAGGCACCTCATGTGCACACCATGCTTATAAATCTGACCTCAGCCTTTGCTCACTGAGGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_713169_713604_1:0:0_0:0:0_9cdb/2
+GAGTTCTCCTGACCAAGATGAGGCCGGAGTTACTGCATGCATTCTCACAGAGAATACAATGGGTTAAAACATCAACTGGAGGTTCATTCAGCTCTGAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1316614_1317126_2:0:0_1:0:0_4372b/2
+TTCTCCAAGTGATCTGCTCGCTCAAGATGAGTTATTACAGAGTCTGTTCTAAGATTTACCTGGGATCTCGGCTCATTATTTAAGTGAGGCTACCACATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1251782_1252240_1:0:0_0:0:0_40781/2
+ATCATTAGTAGTGGGTCCTTTACCATGTCGGTAGCAGCATGGGACCAACACTGCACTCCTTGGCTGGACATTTGCAAATTCAGTGTTGATTTTTTGTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_127921_128337_1:0:0_2:0:0_4fea4/1
+AGAGGCAGGGGTGTTTCACAACTGCCAAAAATTAAAGGAAGGTCAATAACTTGGGCATGCATTTAATTTTTGTGAGTCCAAGTGTTTCCTAGAGAAAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1709782_1710209_1:0:0_0:0:0_444f4/1
+ATGGCTTCTCACATTTAAGATTAACTCTGCCTGGGCCGGGGGAGTTTATTTGTAATCCCAGCATGTCATCTTGCTGTGCATTGCACTACACATTACAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2462991_2463354_2:0:0_2:0:0_53839/2
+TGTTAACAACAACAGTGACATTCCCTGCTCTGAATACAAAATATATAGAAATCGGGCCGCGGCGGAGGCTGTTCTTGCTAGAACCCGTGTATGTACAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_809579_810020_1:0:0_0:0:0_2c83b/1
+ACTGAGTAGTTGGTCAAAAGGGAAGCTGGAGTGTGAGGCAGAGCTAGCCAGTTCTCTTATCAGAGTCTTACGATGATTGCTTCTCTTTGTCAAGACAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_452108_452586_1:0:0_1:0:0_59345/1
+GGTGAAACTAGTGGCCCACTGAACCCATCTGTTAGTAATATTTTCCTGTATACTGTCCCTGCCTCCCTTTCATAATCTTCCCAGGTTTCACATGCTTTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1117757_1118065_0:0:0_1:0:0_d426/1
+TATAAGCTATTGAAACCTAATTATTACACATGTGTCCTCCAGGTGACTGAAAGCAGTATGGTGACTCTCTGAATAAAAACATGGTCCTGTGTGCTGCTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2480816_2481253_1:0:0_0:0:0_357f8/1
+TCCGGCGGCTTGATTGCTTTGGGCAATACAAGTCCTTGTAACCTCTACAATGCCTATTCTGGACAGTAGCTGGGTTTTTCTATAAATAACAAAAAACATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2220193_2220637_2:0:0_0:0:0_50c5c/1
+TATCTCACAGCTCTAAAACCTACCAAAATGATTTACAAATTGCTTGGGAAATACCGGAACTTCATTGGTATTCTCCTTAGGAGCTCCTGGATGTATAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_110736_111257_1:0:0_0:0:0_147c9/2
+GCTGTTTGTAGAAGGGAAATAAATTTTTAGTAGAGATGCCATCACTTGATACAGTACCTATGCTATTGTTGCTGTCGCCTTTGCTTAACCCCTATTTCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1326534_1327058_2:0:0_1:0:0_36524/2
+GGGAACAGAATGATTGGCAAGAAACTCCAGTGAGCCCTTTGTACATGTCCAGGTCTAATGTTGTGTTCCTACCCTCGGACCAAGCACAAATTATATATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1900919_1901360_2:0:0_0:0:0_1ee9a/2
+ACCGAATAGACCCAGTGTTGGCATAGTTTGAGAGCTTGTCATCTTTATTTGCTTAGCCAAGCATAAGAGAAGGCCCTGGCCAGCGGACCGCACACATAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2343878_2344356_1:0:0_2:0:0_5a644/2
+AGTTGTTCATTTTTTATTTATAAGATGTCCCTAGCACGGCCAGGAATGGAATATCACTCACATGTCTGTCTCCATCCACATCAACCAGCCTCCAAGATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_372043_372507_1:0:0_0:0:0_58b6a/2
+TGCATAAAACATGAGAATATTAATTAGCCTCCGGGTTCAACACAATCCTACAGACTGGCATGGCTTTAAGAGAAGCACTGTGTACCAGCATATATATATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_844471_844930_0:0:0_1:0:0_db43/1
+GCTGGTGAGTCACCCTCCTGGACAACGTGAAGCTTCTTCTCCCCAGGCAACAGTTTCTGGTCATGTCAAGGTCTTGATCCTTCAGTCTTGTCCAAGTGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1271351_1271783_1:0:0_2:0:0_50069/1
+ATCCCAAGAAAGTCACCTCGCGCCTTATCCACCTCAAAGTGTGTGCCTCAGCTACTCCGGATTTAATGATATTTTGCCAGGAATACATGTCTTGTATGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_478068_478447_1:0:0_1:0:0_1eaee/1
+TGTTAACATAGAGTGTGGGCCACCAAAGTATATCTTTATGGGGAGGCCTATGTGGTGTTCTATCCTTGGCTCCATCTCCAACATATATAGAGAAAATGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1995119_1995592_0:0:0_1:0:0_154d1/2
+ATCATGGCTGTGTAGTTTTAAATTTGACTCAAGGTGTGGGAACTTATTCCACAATGGATGTCAACGTACAACTTTCTTTATACATTTTCACAGACCGTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_848405_848834_1:0:0_1:0:0_104a/2
+AGATGGAGGTCCACTCACTCATTTAGAAATACAAGTTCCATTCGCTAGATCTCCAACCAAAAATGTGACCACTGGCTGGAGTCAAATAAATCAGTTATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2080518_2080993_0:0:0_2:0:0_33b39/1
+GCACAAATGAAATTTCATTGCTAGCTGGCATTTTTGTTTTAAGAGACAGAGACAGCTGGAGGATTTAAAATTGGGACTACTTGTCTTTGCATCAGCCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2417758_2418230_1:0:0_1:0:0_36bd9/2
+CTTTGCCCATGCACACATGGTGCTTGTTAGCTATTAATCCCCCATCTTAAAGTACAGTGCGGTGGCACACACACACTACGCCTGCCCAGCCCAGCTGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_509757_510282_1:0:0_0:0:0_54c2f/2
+TTGTTAACTGTACATTAATACTTAGAAACAGCAGGGCCCCTCAAACAAACCAAGGCTGCTTTGGGAGGCTGACTATGCTAAGGATAGAGATGATGATGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1945716_1946190_1:0:0_1:0:0_d2da/1
+GAAAAATTTGCATTATGCTATCACAAAGTGTTATAAAAACAGGTAGCTGGATTACAGGCCTCCACTAACACTCAGCCTTTAATCCGCATATAGTGTTAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1480142_1480731_0:0:0_1:0:0_306a0/1
+TCAGCCCTATATTTCATATTTTATCCATTGCTCTGTCGTTATCTCACGAAACCCCAGAAAGTCTCCAGCCTGGAGTTAACCCAGCTCAGGTAGATTACAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_471837_472274_0:0:0_1:0:0_5a6e5/1
+ATATAACTAAAATACAAATCTTAAGAAACATCTGACTTTAAAAGTGCTGTATAATCATCACATTTAAATGACCTCGTGAAACTTAGTTTTGAAACTGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1141156_1141647_1:0:0_0:0:0_3997d/2
+ATAGACATTTATTCTGGTCCCTGTCCCAAGTCAAAGAATAGACCAACCTAGTGTGCTATTGTCCTAACCACACAGGTGGCCAGTGAGACTGGAAGGGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1728755_1729195_2:0:0_1:0:0_2d5ff/1
+ACCTTCATAGGACCACAAATATATATTGGAACACGGCAAAGGCTATGCCTTTTTCATTCTCAGTTTTTTGTCTCCTGGAAAATCTAGACAGAGGTATACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2082618_2083135_0:0:0_1:0:0_2a796/2
+TTTGATTCGGAGGTCCCAAGTCGTGGTGAGGAAACAGACTTTCTTCTGCGAATTTTGGTGGTGAAACAGAATTTAAATGTGCCTGCCATTGGGCAAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1879772_1880182_0:0:0_1:0:0_32b2f/1
+CATGCCTGTGTGACAAAAACTACCATAAAATTAAATTGAGTGAGAAACCTTAAATACAACTCATTTTATTTACTTTGTATATTTTTAAAGCTGGCCTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1398298_1398693_1:0:0_1:0:0_ce7f/1
+CAGTTCTGGGGCTCACTGACTAGATGAGTCCTCCCAAAGCCTTATACTGTCCAGGATAGCATTCAACAAAAAGGGAGTGAGCTCTTCTCACACTTTGGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1266412_1266805_2:0:0_1:0:0_3989c/2
+TTTCTCTCCATCTTTCTTTTCCTAACGTTTTCTGGTTCCCTAATCCTGGGGTTCAAAAACTCAAGTCAAGCTAGACTAAATTCTCCTGGTAATTTATCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1586176_1586640_0:0:0_2:0:0_4c363/2
+GATCATCCTTCTAACAGGATTTTCCATGCTCTAGTTGGCACTTGATGGTCTTGGTTCAGGCCAAAAGGAAATAAGAGCAAGAAATCAGTGAGATGCTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_632229_632713_1:0:0_0:0:0_43253/2
+GTCCTCAATTTTCATTATGTTTTTACCAAGGAAGAAAAAAATCAGACCCAGAACCTATAATTTGAAATCCCTATAGGCAATGGGTGAACACCTCCGCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1795979_1796534_1:0:0_2:0:0_b849/2
+AAACATATTGTTGTTGCCAGGGAGGAAAGAAAATGTATAATGATTTTCTTTAGAGGGAAAAAGAAATTTGAATAATTCTTAGATCCCTGAAGTTGAGCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1016901_1017422_1:0:0_1:0:0_50014/2
+GGAGTTACATCCACTGCTCTGGGATTACCCAAGTATTGCTTGCTTTAAATAAATAGCCACCCATCCTTTAGAGTTATATCTCTAGCATTTTTGCCTCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2355507_2355984_1:0:0_1:0:0_53272/2
+TAAAATGAGGGTGGTCATAGATGTTCTTATAGGGTTCACATGAGGAGGGTGAGTCCTGAAACCATATCTACCTTTTATTCCAAATTCCCTGCATACCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2230372_2230791_1:0:0_0:0:0_15a27/1
+CTCTGGGAGACTGAGAGAGACTACCAAAACAGTGAGATCGTAACAGTATTTCTTCTCTTGGTGTGTGCTAGGTTTTTGGCTTTCCTACTATTTCCTCTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1266126_1266635_1:0:0_2:0:0_1f685/1
+GGTCTCATCAACTTTAGCATCCTTGGCAAAATTCCACTTAGGAGGAATTGAAAGGAAAAAAAATCATTTCAATAAGTGAAATGAAGACCATCAATAATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_963012_963402_1:0:0_2:0:0_43e30/1
+ACTAACTGATGAAAATGGAGCGCTGCCTCTGTCTCAGCCTAGGGTCTTGATCCTGCTTGTTTTTAGAGAAGCTGTATCATATGGCGCACCACCAGTTATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_385304_385763_1:0:0_1:0:0_3cb24/1
+ACAGGGTGGTTGGGGTCAGACAGAGTGGCTCTGTGTCAATGAGTGTTTTTCTCAAATTCATATTTTTAATGGAATTTAAAGTAAAGAAAAAAAGAAGCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1663960_1664411_1:0:0_0:0:0_514f0/2
+TGATTCCTTTCTCCACCTTTCCAATACGAGGTCATCCAGAGCACCAACACAGTATTGAGATCTTATGTAAGATTCTATTTCCAACCTAGGGATGTGGGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1532753_1533169_1:0:0_1:0:0_46d95/2
+ACTGACTCTGGGACTCCAATAGCCTAGGGCAGCCTGGGCAACAAATACTCAGGACAAGGACTGAAAGTCCCAGCATGGTTTTTATCCATCATCCTTTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1593980_1594389_2:0:0_1:0:0_3b463/2
+CCAGTTGCTTTGAGAAAACTGGCAATTTCCACCACACAGTGAGCAGATTTCGGAGAGAGGCAAAAGGACCTCCCGCCACTCCTCCAATTACTTTTGTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2077945_2078369_0:0:0_1:0:0_4254d/1
+CTGCACTTTGGGGCTGGATCCTTTTGGATTTTGAATTGAAGAATCGCTTTCCATGCCTGCAAGTTGCTCTTCAGGACATCTGTCAAGTTGGTCTTACTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_759096_759584_1:0:0_2:0:0_27db3/1
+TGGTTTCTGAAATGACTTGGCCTAGTTTAAGGCCAGGTTGGAAATGTCCAAACCATTGTGGTTGCAGAGTGTTTAAACCTTGTAAAACAAGAAAAGAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2484763_2485236_0:0:0_1:0:0_2a34f/1
+GTGAAGCTGAACTGTGCAATTTAATAGTTATGTTCTTAGAATCCTAAGTCCCTCTGCTCATGGTGATGCCCAGGCATAGTAAGTCATGCTGACCTGGGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2111568_2111982_1:0:0_1:0:0_16e5c/1
+GAAAAAAAAAGTTTCTGCCCGGCTTGGAGAAATGATTTTCAGATGATTTTATCAGTATTTGGATTAGGCTTTCAAGGTCTGGGATGGCATATATTGATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1683272_1683734_2:0:0_1:0:0_4bbcb/1
+TCCTAGCTAGGTATTGTTCTGCAGGTGACCAGTACACTCCCACCACTACTGGAAGTGAAGAATACCCCAGCTAACTCCAGGGACCACAAATAGGAGCAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_51992_52458_2:0:0_0:0:0_40d59/2
+AACTTCTCGATCTCCCCCCGAAGACTAACTTATGCTTTATAAAAATATCTTCATCAGGGAAAATATATGTAATCCATTATGTTTAAGATTCACGAGGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2134862_2135312_1:0:0_1:0:0_27458/1
+CTTCTCAAGCGTTCAGCTTGTTTTTAAAATTTATTTCCCTAACCGCACCCCCTCTAATGCACAATGGAGTGGAGGGTTAGGGTCTTTTTGTCAGGGGTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2495282_2495813_0:0:0_1:0:0_15f4e/1
+CTGGGGTCAGGGTGGGTTGAACAAAAATTGGATTTCCTCTTACTCTCACCTCGATCTTCCTGAAAAAATACTGATGCATAGAACAAGAACTTGTTTGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2431236_2431670_1:0:0_1:0:0_3e42c/2
+GGGGCTGTGGACAGGCCTGTGAGTCTCCTGGGTGTTAACTTCTTCTTAAACATGACCTCAGGAGTGCAAATGTTCCACCTGGGTTGGAAAATGGGCGGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_125235_125725_1:0:0_2:0:0_26d08/1
+AAGGTGAACAAAAAATGGCGTGCAGCGCGTGCCTGTAATCCCCTAGGTGTGATTAAACAGTCCCCGGAATCCAGCCTGGGCTTATGAATTTCACACCAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2002477_2002927_0:0:0_1:0:0_2cbfe/2
+GTGGGCCATTCCAGCACTTAAAAGCACATGTCCTCTTTGAGGGCGTCAGGTCCCCTCATCCCCATAGGTTTAAAAACATCTAAACAAAGTTTTATTTAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1735089_1735606_1:0:0_0:0:0_35439/1
+TCAAAAAGAATAAAATAAAACTGATGAGTGTATGGCCCTAAATGGATTTTGTGGACTAAATACAGTGCTGGGAGGGTGTAGAGAAAATGATATTGATTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_669517_670033_1:0:0_0:0:0_360a3/2
+CTGACTCAGGTCACTGCTACACCTGTAGGTGCTGTGGACATCCGCCTCAGCCTTAGTAGGGATGCTTTCTGATTTCCCAGCTGTGTCTGCTACGAAGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_228446_228869_0:0:0_1:0:0_48c9f/2
+ATTAAGGTATGATAGTTACATAAAAACCACCATGTTAATCATAATGCATGCCTTGCTTAGCAACCTCCGCCCAGCACCCCAGACTTCTTTCTTTCCTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_650553_651078_1:0:0_1:0:0_10f7a/1
+AATGAACAGAAACACTACCTATAGAAAATTACAGTGTTTTTATGTGACACAATAAAGGAGCAGGCCAATACCTAATGTTGTAGAGGAACTTTTAGTGTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2163433_2163779_1:0:0_2:0:0_581ef/1
+ATATAATCATGAAACACAAGAGAAAAAAAAAAAATGGATGGAGGGGCAGAGAGTTCTACAATAACAATATTTGCACAGACTGAGTCAAAGGAAGTTTCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_165979_166449_2:0:0_0:0:0_56e87/1
+ACACAGCACTGGACCCCCAGGCTGGGATTTTGTGATGTGATGTTCCTTTTCTATGTTTCACACGTGTTACTAGTATATTGGTATCAGAATTACAGTCACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_388549_388925_1:0:0_0:0:0_38c66/1
+CTCCCTCGCACCCATAGACCAGCAAACACCCAAAGAAAGGGGGTGCTGTGAAAAAAGAGTTTGAATTGGACTTGACTTTGCATCATATACAGGCATGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1545095_1545614_1:0:0_1:0:0_2e36b/1
+GGTCCAGGCTCAATTTTCCATTGAATATGCAAGTTATCTCTCTGCAATGAATGGCAGGGATTGGCAGGAGAATAGGCTGAGGCCGAGAAAATTAGCTGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1178364_1178741_1:0:0_1:0:0_714e/2
+ATAGCATAATAGTGACATAACATGTGTATCTTCCACTGCAGCCTTTTAATAAATGGTAAATTTTTTTTTTTTCACAGCGAGCGCCAAGTTTACTTGAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_454757_455207_2:0:0_0:0:0_44dd0/1
+GCCTTTGGGGAGGCTGGGTGTCACCACCATTTCCAGAAACAGGCCATACTTAAGCCTTTTAAAAGTATAATCATGGTGACCCAGAGGAAACTCCTTCCGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2289230_2289752_1:0:0_1:0:0_56bb1/1
+AGGAGTTCTTTTGTTTAATATCATCATCTCAAACTGACAGAACTTCTCCTTAGTAGGATTTCCCCCTTTTGGAAACTCTCGCTCTTGTGACTTTTCTACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2084758_2085354_1:0:0_1:0:0_1225a/2
+TCACCTGCAATTACAGGCCCTGGCCAGCAACAGAGTACTCCACAAGGGATCCGGTCATCAAAGAGCAGAAAAGAAACAGAAGAATAGACCGAGGTTGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1952421_1952868_0:0:0_1:0:0_55543/1
+CTCTACTTCTTTTCCTGGGTCTAGCTCTTAACTTGAGCACATGGTTCAGCAGCTATCACGGTTTAAAAAAAAATGTTAATTTTTAAAGGTATATTTTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1929316_1929745_1:0:0_1:0:0_6b1a/2
+AAAAGCCCATCCTTGGCATCTATAACTCACCTGCCTGCCTTTAAGGCTTTCTAGATTGAGAGAATTGCTTCAAACCACGGTGGGAGATCAGGGCTGGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2272318_2272823_3:0:0_0:0:0_2b57/1
+TATCATCATTGCAGTCTCACTCTGGGCCAGCTGTGTCTTAACCATGAACTGTAGCATCCAGAATTGGATTGTCATTGTCCTCTCCTGAAACTATTTTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_267278_267781_0:0:0_1:0:0_4d1d6/2
+TGTTATTTTGCTGCACTGGACAGGGAGTCTGCTCCTAAATTATTATCGCACATGGAAGGAAGTTGGATCACAATGTAATCCCATGGGCTCCTGTACAGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_502152_502625_1:0:0_1:0:0_29f72/2
+TCTGGAATTGGCTTTTTCAACACCACAGAGTTTAATAAATACAATCCTATGTTGGCTCTGATTCGCCCCTCCTGACTACAGGAGAGGAATCCATTTTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_367029_367464_0:0:0_3:0:0_1ec8d/1
+CCCCAACATGGTATCAGGAAGAAATGTTTCTTCCTGATGCTCTAACTATCTCTTTCTTAACGTTTGAGATGAGACTCCCAATCAAAAGGGCCAGGTTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1189452_1189935_0:0:0_1:0:0_2f508/2
+GCATTTGGGAGATATTTTTTTCTATCTGCTGGAGGGGAACCTTAGCAAAAGATTTCTAAAATAGTATTGTAGATAATTTTGAGGGATTTTTAAAAATCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_706123_706525_1:0:0_0:0:0_40e2f/2
+CCATCCAGCAACTCTGCACGACCACGCCTTCTCCCATCACCTATTTTATTGGGAGGAAATAAACCAGTACAATAGTATCCGGGGTTGTGAAACAGTTCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1639408_1639883_1:0:0_1:0:0_44911/1
+GCCAGAGATATATAAAATAACTCTACTGGAAAACAAATGTTAGTCTTGCTCATAGAGTCAGAGGACTGGAAAAGGCCAATGAGTCGTGTATTACCTTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1995270_1995805_1:0:0_0:0:0_313ce/1
+CACCGACTGAACAACTACAATCTAAATGCTATTGTATAGGGCAGATCACGATAATATCACATTGCCTGTAATCTAAAGGTCTTGCTATGGTTGCTCTCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2116519_2117056_0:0:0_2:0:0_957c/2
+TTGCTTTTCCAGTCTGTATCCACCCAGTGATCATCATCTCTGCATAAGACGAGTAGTATGAGTAGGGGTCCACACACATAAACAATTCAGGCGGCTCACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1194133_1194580_1:0:0_2:0:0_55f47/1
+TGTGATGTTCACTCCCAAGTTTTGTATTTTTATCTCTGTCTAGGAAGGTTGCTCTACTGATGATGTATGTGACTCTCAATATAAAATTCTTTTTGGTGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1973997_1974450_1:0:0_1:0:0_36e5b/2
+TGTCACTCTGTTGTTTATTATTTGTCTTGCTTGGAAGTCCAGAAAAATTCACAGCTGAGGAAATATTAAAAAAGCTTTTGCCCACGAGAAGAAAGTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_692989_693430_2:0:0_1:0:0_3e2ee/2
+CATTTTGAAGTACTTGGCTCACACAGGCTTCAAGTTCTTCCACTAGACTTTATCACTAGGAAGGGTTCCAGATAAGGAGGTTGGTCCCAAGTGCTTTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1640086_1640505_1:0:0_0:0:0_4929e/1
+TAGGACAACTGGATACAGATGGATGGATTCCTTAGAGCGAGGCTGAGTTAAGAAATATCAGGTGCCTATAAGCATGGTTAGTGCAGTGGCATGAGCGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_595846_596355_1:0:0_1:0:0_46d76/2
+CCTTCCTTCATGTATACTTCCAGTCTCCTGAGTAAAACTGATGAAAGGGAAAAGACTAAGGGCATGACCAGCCACCTCTCCACTCCTCTTAGAATTTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_85943_86318_1:0:0_1:0:0_352b2/1
+CACAGCAGTAGTACCCACACTGTTAGAGCACCAGTAATCATTGATTTAAAAGAGTTCAACCCTAGGAGTGGGGGAAAGCCCATCTCAAAAAAATAAAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1697092_1697527_0:0:0_1:0:0_5a5d7/1
+AAGTGCTGGGATAGTGGCGCTAGTTAGTTTATTTTTGAGGAGTTTCTCTTTGCATTCTCCTTCTAAATAATAATGGACATCGAGACCTTTTGATCAAGCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2013844_2014252_1:0:0_1:0:0_39940/1
+ACTAACAACACAGCAAGCAAATCTGGCCCCTCCTTAAACATACATGTAATCAGATACATGATTAATAGATAAATGGGATGTAATTTAACCTCCAGCCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1832228_1832649_0:0:0_1:0:0_52113/1
+CAAACCTCTCTGAGTGATTGGAATTGAAAAAGTTGGCATTTCTCTCTCTTGTTTCTATTTTTACTTGTTCCCATTCGACGCTCCAAACTGGAGGGAGTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_968650_968995_0:0:0_2:0:0_2233d/2
+TCATCTTCTAGATGCAGGTGTAACTTAATGTACTCAAAAATAAATTTGGCAGCTATGAATCAAGTACATTTTAGGCTGGCCAAGCCAGGAGCTAATTGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_784628_785082_1:0:0_1:0:0_124/2
+GAAAGGAAAGATTGGACATTCCTGCCACCAAGTAAATATACATTATAGCCGTTAATTAGCCAGGGAGGCTGAGAGCAGACCAATCAAATTAATGAATCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_971116_971628_1:0:0_1:0:0_2a54a/2
+CCCACGCTCTCAGTGATTAATATAAGTGATGTTCTAATGATCGCTTGAAGGAAGTAAAATTAAGCAATGCCTAGTAATACATAGAAACACACAACTTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_797157_797632_0:0:0_2:0:0_13235/1
+ATAAAAGCATCTGATAACTCCAGCTTAAAGTTATAGGACAATAGGTTTGAGCACAGATAACCTCTTTCTAAAGTTTGGCTCTTATCATACACCACGCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_300675_301083_1:0:0_0:0:0_17e07/2
+AAAAATTTTTCAAATACTATCAAAAAAAAAAGTGCCTGTGTCCCCCACTTTTAAATGTTAAAAATGCTGATGTTGGTTGGCCGCACTTTGTGTAGAATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2143556_2143993_1:0:0_1:0:0_36ad/2
+TTTCTCCCTCCGACTTCCAAATATGACATCAGTAGGGATCACTGAGATTATGAGGAGATCTTTTCCCCCACCATGTGGTTACGTTTTTATAAAGTCTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1381026_1381551_1:0:0_0:0:0_1c524/2
+AGATAGTAATTTTTTTGTTTCTGTCCATGGAACTTGAAAAGGCAGGACTTCCATTTACTTTTACACATTTTTACAATAAAATCTAGATGCAAATGATCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2182259_2182717_1:0:0_0:0:0_1b0b1/2
+ATGTGCGGGAGGGAAAAACTGAGTGAGGTGTTTGCCAGGTCCATTTGATCTAGGTGGCCAGGGGTGGATAAATTTGATCATTTATTTTAAAGTTGCAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_738400_738845_1:0:0_1:0:0_1f08b/1
+CCCCTGTTGTGTATGTCAACCCCACCTCATGCTAAGGTAGTTGGTGTGACTTAATTTATCCAAGGCACTCCGCCTACTCCTTGCAGTGTTTTAGGAGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_845749_846162_2:0:0_0:0:0_4e854/1
+CACATTATAATCTTCTCCCCAGCAACACCCCCTCAATATATGTTAATGCTGCAATTTTATCCCACGCCTGTGCATTATTTAGGTTCTCATCTTATATATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_932233_932717_0:0:0_2:0:0_4ffd2/1
+TTTCTAGTAAAACAAACTGTTCTGTTAACGCATGCCTTCCACAAGAACACCTAAGGCCTCCCAGGCTCCTGGTAAGCTCAGTTCTAGGTCCATTTCTGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2445075_2445534_1:0:0_1:0:0_1c53a/1
+GGGGAGGTGGGTCTTAAAACAACCTTCAGAAGGCCAGGTTTTGGGATTACCATACACTCCCCAACTCAGTAAATGTCAATAATGAGAATAAAAATTTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1191177_1191623_0:0:0_1:0:0_263b7/1
+AGGTAAAGAAATGACCGAAATGACACACTAGTCTCAGCTTTGTTGAGCTCCCTCTTGCGGCGGCTAATTTAGGTCAGCCTTCAATGGCCCTGTCCAGCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1320255_1320766_0:0:0_1:0:0_9c28/2
+CAAGTGCTGGGAAATTGCTGAGCAGTCCCAGGAAATTGACATTATGTATACTATTAAACAAAGTCTTGATGGGGAAGCTAACAAGAGAGACGGATCAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1245589_1246107_2:0:0_0:0:0_be6/2
+AACTTCTCTCTGAGGCGGCTCCCTCTCTGCCTCACACCTCTAGACAGCCCTCAATCAATAAAACAAAAAGAAAATCATATCCATGCACCCTGTGCCACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_137090_137544_1:0:0_0:0:0_1cbf2/1
+AGCAAGATCGATGCCATTCTCTGCCTAGGGACTTGGGAGCATGCAGTGTGTGTGTGTGTGGACAGAGTTTGAAAATACTTCAGAAATAGATTTTCCCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2452852_2453311_2:0:0_0:0:0_40515/2
+TTAAGAAAGAAGGTCAGAAATTTATGGTTCCCGTTCTTTCAGTCTGTTTGTTCTAGGATTTCTCAGCCTCAGTTTCTCTGATATTTACTGTTCTTCTACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_178728_179057_1:0:0_1:0:0_f52d/1
+GATCTCGTTCACCATTTGTTTTTATTGTGTCGCCGGGCACCAAATGGATTTTGAGCAATGACAAATGAAATAGGAACTCACATTGAGACTGGATAGAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1468732_1469201_1:0:0_1:0:0_2afa1/1
+ATGTTGGCCTGAATATCTCAGATCGTGTTACTTTGGGACATATGTTTATATCCAAAGTCTTGCAAAGTCCCAGTCTGTAGTGTCTGTCAGTAATAAACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_936271_936708_0:0:0_1:0:0_52006/1
+GAAATATGCATAAATAGTATATCTTTCTCTGCCCTTAGTGCAGTCAGGCTCGATTCTCTCCCAGCCTGAAAGCTGTAATAATCAATTAATAGAGGGAGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2161762_2162270_0:0:0_2:0:0_348ad/2
+ACTTCTCACTTTAGTTTTTAAAATGTGCTATAGTCTTTAGTCAGATATATAAGAAATTTTGATCAGAAGCTGAGGTCAAATACTTATACGTCCGGGGTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2233599_2234078_1:0:0_1:0:0_4a434/1
+GTCAGAATAGGAGGTCAAAACAGCAAAATCAACGTTTACTGGGTCATGTGCCCGGCGGCAGGCAGGGGTCAGCAGTCAAGATTCACCTCCCGAGTAGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_154791_155164_1:0:0_0:0:0_13c56/1
+TGCTCACTTGATCGTATACAAATGGGATTACAAATCTGCTCCTAAAGAGGCAAAGGATCACCACTTTGTAATCACCACCCCTTCTGAGGTGGAAGTGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1619028_1619588_2:0:0_1:0:0_336bc/1
+TCGAACAGTTCCAAAGAGAGGGGAATTGCCTTTCTCCTGCCTCCGCTGCAGGGACTGACAGAACTCCAGTCACACCCAGAATGACTTAGCTGGGATGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_510106_510523_0:0:0_1:0:0_581f6/1
+CCCATGCCAAGGAGCAGGGTGTCACTATTCTATTATGAAAAGTAGGATGATCTTAGTGTTGACAACCTAAATTTACATGAACCTGGCCAACAGCTGCTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2382776_2383224_1:0:0_0:0:0_d7a8/1
+ATAAGTGGATTTGGGCCGGAGCGTGAGCCCATAAGCAGACTCCGTAAAACAGGTGCAGGTTATAACTGGGTAAAAATGTATGATCTAAGAAAGAATGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1529254_1529714_1:0:0_2:0:0_3d85f/2
+GGGTCTGAGCAATTTGGGAAATGCCACCGCATCGGAGTTTCTTTAAATATGCCCATGCGAGTAGGACTGGATGGCATTGTTTTGTTCCGTTGAAGATTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2281791_2282206_1:0:0_0:0:0_3d32f/1
+TGCACTCCTCCTGGACTGCTGTCACCCATGTCTACCGGCTAGTTAATGACAGCAACAATTCAATGGGGATTAACTGCCTGGTACTAGTAATTTCATATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_52506_52973_1:0:0_0:0:0_2255c/1
+ATGTCCCAATATTCTTAACCCCACAGACATAGTGAACGAAAGAAAAAGTGCAGTTCCAAATGATTGAGGCCAAAGAAGGAAGAATCCCATGGGATTGGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1072991_1073503_1:0:0_1:0:0_2748c/2
+TTTGAAAGTTCCAGCGATGGAGTGTGGGGGTAGCACCAAGTCCTAGGCAGAGCCTGGGGTTCTGTCCACAAAACATGGTGTGAATCAAAACATAGAGGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1911814_1912286_1:0:0_1:0:0_2dfb9/1
+TAGCACATATATACTAGAAGAATATTTGGCTCTGGGATTATAACAGAGAGGATACAGAGTAATAGGATCAGCACTTTTATTGAATGTGCTAGAAGTAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_635051_635521_1:0:0_0:0:0_3f063/2
+CCACAGAACTATCCATATCATGCTCACTAAAAAATTAGTGCTTCATTCATCATTCATTAGACCAGCCAGTGCATATTCTGAAGCCCCACAGAGTCAGGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1841388_1841826_0:0:0_2:0:0_2d945/1
+ATCACAGTTAATTGTGAATTTGTGATTAGATTGCTTTGAGCTTTTAATTACTTGAAAGAGGGTTGATTGACTATGGTGACAAAGTTTGCATTTATAATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_838128_838631_1:0:0_1:0:0_15a14/2
+TTTTGTTTTTGTGAACCTGGACAAGATGCATGAAGACCCACCCACCATCCCTTTATTTTGTTTATATTAAGTGTAAGCAAAAAAAAAAAACCCAAGCAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2117580_2118037_2:0:0_0:0:0_49e1/1
+AACTACTAACTTCCACTAATCATATGTAAATTTTTAATTTATCCATTAGCACTGACCCCATCTTCTTCCAAGTTTATTTTTGTTGCCTCGATCTTGGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2361275_2361776_1:0:0_2:0:0_69c0/2
+TACTTTCCTACAATCATAGATTCAGCTGGAGGGGAGCCATGAGCATCTTTGGCAACATCCAATTGAAGTTATTTGGAAAAATTGGTGGTGGCATGGTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_174874_175286_1:0:0_0:0:0_3eab9/1
+TGGGTAGTTGTTTGAAGAAAAAAAAGCCACTCTGATACCTACTAATGTCATGTTTGAGTCCTAAAGCAACTTTTCTAAATGTACCTATATGGTCAGACTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1035768_1036221_1:0:0_0:0:0_45364/2
+ACTTAAACTATGATCTTTACTTTATGTTTCGTTCCCTTTACAGGCCAAAATATCCCTCCCAGCACTTTATAGTAAAGCCACGTAGTGTTAGGTGGAGTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1583714_1584182_0:0:0_1:0:0_7afb/2
+CTTATTTTTAACTAGATAAGATTCACGCACTGTTATTTCCACAGGCGCGCAGCCGGGCGGAGCGCTGAATCCGGATTCCACAACACTGATTTTGGTCTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_112109_112558_1:0:0_0:0:0_4b134/1
+ATGGAAACCCACGACAGAGCAAGAGCAGATACAAAAATGTTGCCCAAGTCTAGAGGCAGGAGCACCCGAGTAATAACAAAAAAAAAAATTTATTTATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2499166_2499692_1:0:0_0:0:0_25ebc/2
+AGATTGAAATTCCTTCCACTTTCAGTTGGATAACGATGCAATATGCCCCACCTCTGTTATCAGTGTGTTACCAAATATCTGGCAAGTTATAAATGGAACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1201713_1202160_1:0:0_1:0:0_2acad/1
+CCAAAGTCCTGGAAAAAAACAGTCATTGGAAAACCCCGACCCAAAGGCTCCATTCATTTGGCCCTCAGCTTCATAGAAATAAATTTATTTGTGCCAGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1003919_1004321_1:0:0_1:0:0_9fe9/2
+TTTTTCCTCTAAATCAATGATTTTTGGAATGGAAAAGTCAGAAGTGGCTCACTGTATGTATTCAGCCTGGTTTTAACCAGACGACTCAAAAAAAAATTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1118479_1118960_0:0:0_1:0:0_36fc9/2
+GCGATGTTGATCACCTCCGCCTCGGCCAAGATGGGTGCTGGAGAATTGATCTTCCTATTTTATGTGGGTTGGTGAAACAATCAAGACCACAATCTTTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1886250_1886693_0:0:0_1:0:0_36237/1
+AACACTTTGCCTTGTCATCAGTACCTATGGGGTATGAGCATACACAGTAGACTGGCCAGCTTCAATCTTAGGAGCCAAGTCAAAACAATGTGGTGTTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_263528_263936_1:0:0_1:0:0_28795/2
+GTTTTTTTGTTGTGTTGTGGGCTTGTATTATGTTTTACAATGAGGAACCCTCCCTGCTGTGCCTCGGTTCTGTGTACGAGGCCGTTTCTGTTTTAGAGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_521926_522374_1:0:0_0:0:0_1460a/1
+TCGTCCTCTAGTTTTGGGTTTTCTTTCCTTGCTGATTATGTTTTAGAGATTCTCTACATATTTTTATTTTGTTTTATTTAGATACCCAGGGTGCACCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2070907_2071397_3:0:0_1:0:0_46fa0/2
+GTACTGAAAAAGCAGAAGCTGAAGGGTGTGGGGTAATAGAAAACTGGAAACAATCTTCCTGTGTGGTCCCATGCACTGACGCCACTTTGAACCTGCCACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1781978_1782386_0:0:0_1:0:0_2ce9a/2
+TTGATATATTAATAAAAACATGTTGGGTAAGGTTAGGTTAAAAAATCCAGTAGACGTGTCCCATATACTGGTCTCACCAATGCCAGGCTGGGCTTCTCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_560457_560927_2:0:0_0:0:0_71b2/1
+TGCTCCTCGCCTTGGCACAGAGACTCTACCCCCAAAAAGAGTAATGTGGTGTTGAAGGTAACAATTCAAAGCTTTCTGAACCAATGGCACACTGAGAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1195519_1196010_0:0:0_2:0:0_4f987/1
+TTTGCTGGGAATGCTGTGGTGAAACAAACCATAATCAACTTCTGGTCCATTATTAAATCTGGCGTGACCCCCTGGGGATGGGGCCAGACCCACTGCAACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2317265_2317686_0:0:0_1:0:0_54466/1
+CCATGGGAGCGTGTGTGCCTATGAGCACTTTGATTCCTTCTTCCTCACTGCAGGAAATCATTTCCTGACCACATCATTCAACACAAAAATTTTATTTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1792418_1792858_0:0:0_1:0:0_558d3/1
+TATTTAGTATTCTATAAAAAAGTCTTGATATAAGCTAAAGATGACATTTATGGAAATATGAGGCATCAATACTAGAAAATAGAATATACATGTACCTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2440084_2440542_4:0:0_0:0:0_3a738/1
+ATCTTCTGGATCTGGTTCTACTAAATCATTTTTTTTGTTAGTAAATAAGCACTTGTGTCCTCCTATCTTTCTCAGACAGAATGGAACTCCCAAGCCTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_481949_482406_1:0:0_0:0:0_46801/1
+GAATTATTCTAACAGTAGTATTAGCATTATCCTGAAAGTTTGTGTTCTCATGGAATGGAAGTTATCCTTTCCTATATTTGTGGTCACTTGGGTGAGCCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_12448_12984_1:0:0_0:0:0_39f45/2
+AGTAGCTGGACCATCCAAAGTCTTTTGATCTTGGGCAAATATTTGACTTATTTAAAGATAGTAATTTTTCTAAAGTCCTTATTCTCCATTGGGCTGGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_320253_320708_2:0:0_1:0:0_19984/1
+GAGGTGCTGACATATTGACTTGTTCATTTTTTCTAAAGAACTGGAGAACAAACCAAACATTGATTCTAGAGTCTTGGGGGAAGGAACTGTATTCATACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_362114_362538_1:0:0_1:0:0_214d8/2
+TAGGAGATCATCTGAAGATCTACAGGCGCCGCTTTGATCATGAATGAAGGATAGGGAAGCATGTATGAAAAAGGAAGTGATTACAGGTGCTTTGAAGAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_890433_890870_1:0:0_0:0:0_48516/1
+AATGATCAGAGTTCTTTTAAATAATACATTTATTTTTAGTAAAGAAACATTCTTCTAGTCCAGTCACATTGAACCGCGTCTCTACCCTTACTATATGAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_825692_826158_0:0:0_1:0:0_259f5/1
+TTAATCTGCAGTGAGCCGCCGCGCCCGACGTCCCTTCAACCTGACTTCTCAGTTGCTTCGTAATTAGTTCAACCCGCCACTCTTTTCATATTGGGGGGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_380706_381185_1:0:0_2:0:0_32c5d/1
+ATGATGATTCTGTTGTCACAGGGTTTTTCTTGGTTAAGGTGTGTGTGAGCATTCACTTTTTAGCTGCCTCAGACACATACACTATCGCTGCACTCCCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_953260_953717_1:0:0_1:0:0_17d80/1
+ACGTTGTGCTTTTCCAATAGAAGGCGCGGTCAAGAGCTGAAAATGGACTTGAAGAAGTTATGGGAGGGAGAATGGGGGCTAATTGTTCGGTCACTTGTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2292282_2292689_1:0:0_0:0:0_46a79/1
+TTTGATTTATACAGAAGCTCTGTCTCAAAGGCAACCTCCTGACCTTACACCAGCAGCCCAAACTCAATTCCTTTTCCTTTGTAGTCTCGAACCCGCCAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_982112_982599_1:0:0_1:0:0_2cf80/1
+TTATCCAAAGTCACTCGCTAGGAGCAGGTCAAAGGTTTTGTAAGCCATGTGCAGAAATACATACCCAGGTAGCTACTTAAAGAATGTTCTTTGAGGGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2115038_2115551_2:0:0_1:0:0_21b47/1
+TAGGACAAGTCAAAGTCCTGCTCCTCAACAGGAGACCATACATAATAACTGGTGCTAAAGGAACTGGTCTACCCTGTTAACATACCATAGGGTGTGTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_997965_998428_2:0:0_1:0:0_40ada/1
+GTGAAATTTTTAGACACCTGCTCCAGTCTTCACATAAAATTAGTTTTATTTGCAGTAACCATATCCTGCCGCCGCCATGAATTTGCCCCAATTATTTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_465449_465842_1:0:0_1:0:0_1cafb/2
+CTCCAAAAATCTCACTCAAGAGTTGGGACCAGCATGTAATAGAAAAAAGCTCCTATTCTGTGTTAATTTTTACATCTGGAAGGTGGTTTATTTATTTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1648727_1649167_0:0:0_2:0:0_174e5/1
+AAAATCCACTTAGATTGGGCATCTTTATGCGCTACTGGGTTCAAATGATGATATTACGGACAGAAACTGAAAGTAATTTATTGAGGCTGATCTTTCTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2080221_2080703_1:0:0_1:0:0_20d20/2
+ACAACAGGTGCCCATTCTTCCTAGTGATAGAAAAGAAAATATGAGAGTTGAGGAGGACCAATGGAGAGGAGAGACCCCATTAAATCACTAGAAATACAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1072547_1072951_2:0:0_1:0:0_29e9d/2
+AATGTGTGCACTCCAACATGTAGCCCATACCCCCACCTTACCATCCCATCACCAAGTATTTGTCAGAAAAATAATATCTGTAGATTATTCAAATGAATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2093002_2093454_1:0:0_0:0:0_50891/1
+CATCAAATCTGAACTTCCTTTGTTGAAACATCAAAACAAATGTGTGTATTTCTGGAGTTCTAAAATTACAGTAACAAATCAAGCCTAGGATGCTGCATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1340208_1340517_0:0:0_1:0:0_24613/2
+ATGACGTGTAACAGTTTAACCTCCCAACTCAGTTCAGTATATATAAGCCCTGATCCTGCAATGAGAGGTGAGGTAAAACACTCCAGCTGGAGGAGGCTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_155367_155784_2:0:0_1:0:0_3d59b/1
+GAATATTTTCATTTCAAAACTAATTTTTTGTTTATCTATCAGTATTTTGACCCCATCTCACCGTCTCTCTTGCTTATAGGCCTAAACTTGTTTTCTTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_399104_399523_1:0:0_1:0:0_2c89/1
+CTACGCTGGGAAAGGCAATCTGATTTTGTAAATGGAATGTGGACAGCAGGAGGGGTTTGAGAGTCTCAGCGCCCTGTCCTTGAATTTCCTTTTCTCTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1646711_1647128_1:0:0_0:0:0_3cc2b/1
+GCCATGCTTAAATACAAATTACCCTATGAAATGTAGTGGCAGGTCTGGGATTAAATGGAGCTCTGCCCTTCCAAAATACCAACTAATGCCTAACTCACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_472168_472549_1:0:0_1:0:0_1d4ae/2
+ATCATACATCTAACTAAAATACAAATCTTAAGAAACATCTGACTTTAAAAGTGCTGTATAATCATCACATTTAAATGACCTCGTGAAACTTAGTTTTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1451776_1452176_1:0:0_0:0:0_3558a/2
+CATGAGCCAATGCCCCCAGACGGCTTACAGGTATGTTAAACCATGCATGGGCTGGAGTATAATTCTTCTTCCGGCCCCTTACTGGTGTAATCCCCCTCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_301846_302303_0:0:0_1:0:0_142f4/1
+TTTCTCTAATCCTGGGATTAGGATTTTCTAACCTAAAAATAGTCTTTGTCTTTAACATCTATTTTTTTAGGTTCTTTCTTCAAATGAATTGCCATTCCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1923566_1924041_0:0:0_1:0:0_415b1/2
+ATTTGAGGCAGTGATATTTAAAGTTTCTCTGGTGATTTATTTCTTTGTGATTTTGAGGCTTCTCAAATTAAGTTTTAGGACTTTGATATTAAGAATCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_763664_764051_1:0:0_0:0:0_15da5/1
+GGTGAACCTTATCCTTTGATCTTCAAAGCATTAAGTCTGACCTGGGTGAAACAATAAAAAGTATTTGTAAATTTAAAAAGAATTATGAGGGAATGGCCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2101963_2102379_2:0:0_1:0:0_2b5fd/1
+TTATATAGATATGTTTGTCAAACAAAGCTTCTGACCTCAAGGAGGCGTTTGAAAACACAGCTTGTCCATTGCTGTGATTGTTGAAATTTTCTTTCACAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_754686_755107_1:0:0_1:0:0_2023a/1
+GGGTCAGAAAGATCTGGTGAACATAGAAATTTTATCATTTTAATTTAAAAGAAGAAACTTAACATGTAGATTCAAGACATCTGCAGTGGAGGGGTGTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_770794_771190_0:0:0_1:0:0_1eb2d/1
+ATTCGATGGCTTCAATTGTAAAATGTTGCCCACCGCACCTGGTGTATTTTGCCAAGAGAAATTGATTTGTCTTCCATCTTTGTGCAGAGTGAGGCAGCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2319635_2320241_1:0:0_1:0:0_cd79/2
+AACAGGTCTTGCCCAAAAGGCTGAGCTCACCAAGTCTCTCATTGCAGGCCAAGTTTAAAAAGTACTGTTTAACCTCTAAAAGAATCTGTTTATGAAATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1546311_1546812_1:0:0_2:0:0_3d1ef/1
+TTCTCTCCTGTTTTACTGTTCTCCTCCAAATGAAGAACAGAAATGGCCCCAGCCTGCCCTCTGTTTTTCCTTATTTAAAAAAAAAACTTCAGCCCTCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_379993_380457_1:0:0_0:0:0_171ae/2
+AGCCTTGACCAATCTTTATTTATTTATATTTGAAAAGGGAATTTTATTTAGTTAAAAATAAAGGAAATCCATGTTCAGACAATGATTTGTAGTTTACCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1125545_1126088_1:0:0_1:0:0_3231f/1
+AGCTGAAAGGTTCTGAATGATATCAAGTTCTTATTTTCAATAAAGGACTGAGCATCAGTTGGGAAAAAGTATTTTGATAGTGAGTTCTAAAAAAAATGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1909460_1909910_1:0:0_0:0:0_24b96/1
+GCTTTGGAAAGTTGCACATTTTTTGCATCCACACTCGTACCATGGGAGAGGCAGATCCCTTGATTCCCTGCAGAGAGGGGGCTATCTCAAATCTGCCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2329306_2329790_1:0:0_1:0:0_5306d/2
+TTCCTAGAAGTTAATAAAAATGATCTTTTCATGAGCTAAAAGCCTAATTTTGGACTAGCAAGATTCCTTTTCAAAGGATTTATACATAAAGTGGGACGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1368433_1368857_1:0:0_0:0:0_f137/1
+TATTAAGTTACAAGCTGTAAAGACTTTGTTACTTTAATTCCTTTACATATGCAGAGGTTCATTAAAATTTAGTTTGATGTAAATAAATGAGAAAGGTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_968458_968878_0:0:0_1:0:0_421bc/2
+CCATCTCATTTTGTTCAATGGGGAGAGACATTCATATAGTGGAACTGTCAACTTTGCTATTAAGTTAGAAATGCATCTGTGTTAGGTAAATGCAGAAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2307391_2307828_2:0:0_0:0:0_5afe6/2
+ACATGGTGGGAGGTTCATCATCCCAGCTGAACAGAGCTTGCTAAGTCATAGCATAACAATGGGGCCTTCAGCTTCATTGGTAAGCATTATCTCGGCAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2120723_2121189_3:0:0_0:0:0_4895c/2
+ACTACTACAAACAGAGAGGAGCAGCCTCAGCTGGGAACATCATAGGCTGGTCTTCCTTCAAAGTGAAGGAGCAGCAAGAAGGCATGCTTTCTCTGCGCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_485039_485456_1:0:0_0:0:0_4162f/1
+TGTGGGTTTCTCTGTTTGTGTACTCCTGCTTTGCAAATGATCTTTTCTACCAGTCACATACATTGTGGTTTGCAAACCATGTTTGGATGAGTATTCCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1385041_1385506_0:0:0_1:0:0_5d87/1
+AAGTTCTGTTCTATTCAGCATTTTAAGATGCCTCCCAGAGAACCCCGCGAAGGGGGACGAACAAGTTTTTATAACATGGCAGTGTGTGGCAGTTTTTCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1341773_1342313_0:0:0_1:0:0_28015/2
+ATTAGAGTCCAGTTTGGAAGGAAGGACAGCATTTCTAAGCCCTGAACATGAAAACTAAGTGCTGGGGCCCTGGGCACATAGTCCAACCTATGATCGTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1625525_1625944_1:0:0_1:0:0_5a142/2
+TCATGGATAGCATTTTCATACACACGAAAAAATATTCTGGGGCCCAGTCATCATCGGCCTCTGCCCATCCACTGGAGCTTAAAGTCCTTGAGCTGTAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1381248_1381692_1:0:0_1:0:0_2f249/2
+GTTTGAGACCAGTAACATTTTCATTTCACTTCGTGATCTAGGACGACGGAACTCCTCTGTTTGAAAAACTTCACAGAGTTATAATCAGCACTTTTCAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1604923_1605288_1:0:0_0:0:0_5609f/1
+AGAGTCAGGCGTAAAAGGTGCCATGCAAATAGCTAGACAAACAATATTACGTTCATCAATAAAGAGGCAGGATCTTTTAAGAATCTCTGTAATAAAGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1494704_1495088_2:0:0_1:0:0_56998/2
+AAGCCTTGAAAATTACTCTACCCTCTGGCACGTGGCAAATTAAGCTGCCGAGGCATCGCGCCACCGAGAATAATATGGTAGCTGATATGATCAAGAAGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1065025_1065376_1:0:0_1:0:0_36801/1
+TTTTAATTGAAGTTGTTGGCAAAGACCATTGCTTGCTAAAAGGAATGCTATTCAACAGACAGAGAGAGTAGTTTAGGAACTTTTTAAATGATATAATAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1306713_1307124_0:0:0_1:0:0_1076/1
+TATATTTATATGTGGTCCACATAATCCCAGCATTCAAAAGTCTCAAACTCGGGAGGCAGAGGAGAAACCGGTACCAATTTCACTCCTGCCTCTCCTGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_516579_516969_2:0:0_0:0:0_4e602/1
+CACTCATAGAGTTAAGAGGCAGTGGCTAAAGTGTTTTTCCATTTTTATGAATGAACAACATGGCCAGGACTACAAAATACTGTTTATGATCATAACCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1662020_1662459_1:0:0_0:0:0_1e59f/1
+CTCTTGCAGGGAGAGAGAGCCCTCATTTATACTAAATTTATTCTTCACAAACACAAACTTTTTTGCCCTGGGGCGGGCATGGGGATAACATATGATAGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1393063_1393578_0:0:0_1:0:0_5a04a/1
+GTGCCAGTTGCCCATTTCATGAAGTATCACAGAGTCTCCTGCCATTTCCCAGTCTCAGAAATACTTGCCCTATGGTAATTGAATGGAGAATCCAGGCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1723375_1723833_2:0:0_1:0:0_43e14/1
+GCTCACCCCCTACTGAAAACTTCCTTTTCCAGGCAATAATCCCAGCCTCTGCCTTCATCCTTTGTCCTTGCCACTGAGTGCAGCCACCGTCAAATTCTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1361969_1362440_1:0:0_1:0:0_28b4c/1
+TTGCTATGGCAATACCCTAGGCATGTACTTTTTAGAGAGGACAAATTATGCCTGGCAGTATAGCCAAGTGGATGGCAGTTTGTCTTCCTGTAATCCCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2153654_2154083_0:0:0_1:0:0_3605f/1
+ACATTAACTGGACTATTTACAGAATGCCCTCTTCTACCTTTGCTTCCTGAGGATTGAGTTTGTGGAAAATCTGTAATCCAGTCTCCCACCAGCTACATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_205654_206076_1:0:0_2:0:0_3914e/2
+GCAAAAAGAAACTTTAAGGGAATGACAGCCCTCGGGTGTGCAGCTGATGCCTGGTCATCCCTTAGAATCCAGTGTCATCAACAAGCAAAATTAAGTATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1926088_1926564_0:0:0_1:0:0_405b1/1
+GGAACAATCTACGTGTAACCTCGGCCTACAGCTTCTTGAACTGCATCTCTTAGTGGGATTCATATTTACCTAAGTGAGTCAAGTTTGAGATAGAGATGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2365170_2365625_1:0:0_0:0:0_19492/1
+GAATGTATCCTGTTTACATTTTACCCTGAATACAAGAAAACCGAGGCTGAGGCATTTCAAGAACATGGTACGCAGGCTTACCCATGGAGGTCTCACCCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1707627_1708118_1:0:0_1:0:0_41660/1
+AGCTGTTAGCTCGAGCGGATCACGAAAAGGAAGACTTCTTCACACAGAGAACATCGGCCCATGTATAGAGTTTTTAAAAACTGGTTACTGTTGGATTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1623428_1623892_1:0:0_1:0:0_30715/1
+ACAACAGCAGGCTGGAAGGAAAACACTCAAGGCAACCTCCGTTTTGCCTATCCTTAAACTCAGTGTCTCAATTACAGGGATGCACAGCATTTGATAGGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1349503_1349903_0:0:0_2:0:0_514b9/1
+GACCCACTGCCTTTGTGAATGAGTGAATAAAAAAAGCAGGGCAGAGCTCAGCTGTCCTGAGGTGATTCTTTCAACAAATCTTTGAAAAGAAGCTGAATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1223838_1224309_1:0:0_1:0:0_54833/1
+GGGGCTATCTATTTTTTTTCTTTTAAATGGAGCATGGATGTGCCTAGCCTACTTCAGCTTAGAGTTTTGGATTTCAAGCTGAAGAAAATATTGTGGCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1785183_1785632_1:0:0_0:0:0_7f59/1
+GCTACTGATAAATAGTCTTGAACTAATGTGTGACAGCACTTGAAATAATGAGTTGAGTTGAGTGAAAATTAATAGAAAACAGTGAGAAACAAAAAAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2094440_2094884_1:0:0_1:0:0_edad/1
+TAATTGAGACCATGTGCATGTGCTTTGAGCCCCACCCTCATTTATATACTGAAGTATCCATAGTAACAAACACCTGGGTTCATTCGTGGAGGGAGACAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1881901_1882340_0:0:0_1:0:0_15305/1
+GCTGAAGGCAGAGCACATGTGTCTGGCTGAGCAATCGCTATGGTTCTTAATTTTTGTTTCCATCTCTTTTGGTAATGGTAAGTAGCTTTGTTTTTTATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1924034_1924430_1:0:0_1:0:0_59350/1
+AGTTTTTAATTTTAAGAAATGGCATGCAATGCTGCGCTCCTCTCCTTATTGTGGCAAGGCTGAGCCACAGGGGAAATATTGCATCCAGCGATTCTGGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1754261_1754669_3:0:0_1:0:0_2921b/2
+GCTCGCTCTTGGAGAGCGAGTGTATGTGTTTAAAACCTTGGGAATATGTTTTTTTCCAAACATAAAGCAAATGTTACATAGCATAAGCTTCTAAACGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2097482_2097871_0:0:0_1:0:0_283f5/1
+TTGGGTTCCATCTGGTTTGTTTTCTGTGTTTTTAGTTGAACAAATGTATTTCTTTTAATTGGATGTCAAGTTTATTTATCTTTTTTCAAGTGTACTTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2457539_2458006_1:0:0_0:0:0_2b632/1
+TGCTTGCTGAGTAGTAGAGAATCCAACTACAAAATGATGGAATATAATTACAGATAATTTCCATGGGTGTCTGTCATTGCAGCACACATGGTGAAGCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1280485_1280940_0:0:0_2:0:0_57c4a/2
+AGTGCCATGGTAAACACTACATGTCTCAATAAAAATGGGGTTAACTTTAGTGTTGCTGAGAACAGAGTAAAGGGATGACAGGTGGATTCAGTATCATCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_13745_14121_1:0:0_1:0:0_21058/1
+TGCTGGCTAAGAAAGCATCTGTCGCCTTAAAATCATGGTTTCTATATAATCATCTCAGAAAGGTTAGTTCTAGAATAACTTATAATTGACAAAAATTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_475512_475957_1:0:0_0:0:0_13510/1
+CTATAAAAAGCACGGCTCACTTCAAGTGGACTTAGACCAGCGTGACATCTTATTGTGATTTGGAGCTCAACATTTGTTGTAGGGCTCTGGAAATAGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_753920_754315_1:0:0_0:0:0_15087/2
+TCCCACCTAGACTGCCACATTTATTATCCATGGTATAATATTTATCTTACTATAAAAGTAAAATCCTGGTACATACACCCGCCCCCTAGCCTAATCCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1153376_1153877_1:0:0_2:0:0_16ff0/1
+TGAATTCAAAGAGCGAGGCTTATCACATGGAGCAACGGTGAGCTAATTTGTATTTAAAAAATCGAAAATGGGACTTGCATTTTTTCCCTCCTTCCTATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2136957_2137493_1:0:0_2:0:0_25c88/1
+AGGCTGCTGTAATATGGAGAAGTTTGACAATTGTAATTATTTACTAGATTCTAAATATTTTCCTAACCAGGTCCTGCTCCACCAACACGTTACGTGATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1182469_1182963_2:0:0_0:0:0_54609/1
+TGAGTAATAATTTTATTATATCGTAGAATCAGGGGACCATATATGATACAGCACTTACACAGGTCAGGAGAATCAGCAAAGATCGGAAATAACTGAACCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1010681_1011017_2:0:0_0:0:0_f069/2
+TCGGATCAGAGTTACTGTCCATTCAGCTTCAAATTCAAAAATAAACAGCCATCCATACTGAATTAAAAGTAGTAAAGCCACCAATAATCCCAGACATTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_859871_860414_1:0:0_0:0:0_5ac16/2
+GTGTCTTATCAGCAATTTCAATAGTTAGAAAACGTCCCTGGATTTGATACATCTGTGAGAATCCCACAGAGCAGCACTCCACCATCACAGGTGATGTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_764341_764724_0:0:0_1:0:0_4b5ba/1
+GCAGGACTTTAGTTCTTTTGTTTTCAGAATACAAAGAAAGTATAATCTCATGTCGGTGAAACTCCTCTAAAATTATTCTTTTGTCCTAGAAGAATAAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2430185_2430627_1:0:0_0:0:0_1f40e/1
+ATTGACAGAGTGTCTCTATACATCCTCAAAAGACAACTCATGTGGTTGAAAAGGAGGGAGGCAGATACTGGGGAGGGGTGACAAAAATATAAAAAAAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1119469_1119936_0:0:0_1:0:0_2c9f0/2
+AAATCCTAAGTACCTTTACTGACAAGGTCTGCAGTGTGTAGACACATTAAGAAGAATGTATAACCACTATATCTGAGTGGGTATAAAATGGTAATTATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2379351_2379714_0:0:0_2:0:0_5a960/1
+TGGCTGGTCTTGCATGGTTGCTGGGCAAAGTGCCCTTCTGCAAAAATTTTTCCAATTTTCTGTGGTATTCTTTGTTCCAGCCTTCTTGCATCCAGTCTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_302047_302434_0:0:0_2:0:0_1da1c/1
+GAAGCCATCATTTTGTGATAATACCCAGGGCAGACCTTTTGGTAGAACTCATCAAACTCTACTTTGGAATCTGCCTCCCAGCCTGTAGTTCTAATTTAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2468362_2468768_1:0:0_1:0:0_53cda/1
+GATACAGGTGATGTGCAATTCAAAGGTCTATTTGCTGAGTTGGGGGTCGGGCTATCCCCTGTGGAATACCATGAAGCATTTTGGATCTAGTGTGCTGGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2029664_2029998_0:0:0_1:0:0_5a1cf/1
+CATGCATGTTGAATGCCCTTCCTCCTACCTTGGATTCATAGTGCTGTATATGGTAACAGCACTATTTGGGTTTTTTTTGCCTAGAAATTAGAGGGGTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1727467_1727946_0:0:0_1:0:0_571dd/2
+AGCCAACATGGTGGATTATTTTTATCATACAATGATACAGCACTTTGGGTAATATAAACCTTTGCCAGCTGTTTGTTTAGCTAAAGGTAGGGGCTGGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2194486_2195003_1:0:0_1:0:0_2b789/1
+GCCACCACATGACAGTTTGCAAGGCTGGGATAATTTAAGTTAAAACTTAATAACTTAATATTAAGACGGCTTCTGAGTAGGGTCTATCAGCAACTCCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_138469_138867_1:0:0_1:0:0_d772/1
+ATTCAAGTCCCGAGTAGAGGCTGCATAGCCTCCCAGCTGATACTTGGTGGGGCAAATGGTGTATCAGTCTAGAATTGTTAGGAAGACTCCTGAGTTCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1942311_1942895_1:0:0_0:0:0_4e0df/2
+GTCTGAGACCAACCATGCCAAAAAAACTGGTTTGAGGAGGGGTTCATATGAATATCTGTTTTTTTTTGTAGACAGAGTCCAATACGCTTCTCCTGTCTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1332832_1333254_1:0:0_1:0:0_2a1c/1
+GTTAGCAACTTCAACACAGCAGTAGCAGCTCTGTTGATCCTTCTAGTTCCCATGTCAAAGACAGAAATTTTTCTCATGTGGTGGGGCTGGACAAGAGACG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1582399_1582865_2:0:0_0:0:0_4792c/1
+CTCAGGTCTATGAATAAATTATTGCTGAATAATCCCGGCCCAGAGCTGCCCTACTTTATTGCATACTTATTTTTGGAGAAAATGCCTTCGTTCAGGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_564565_565049_0:0:0_1:0:0_50485/1
+ACTGGAGGCTCCCTCCACCAGAGCAGTGAGCCATTGAGACAATAACGCTCCCCATTACTTTCTTCTTTCAATTGTTTCTTCCACAGCTGCAGTGAGACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_167212_167658_2:0:0_0:0:0_4c998/2
+CAGTTGAGTTACTTTGTAGTGTGTGTGTGATTGCTCTGGTTGTTTTATTTATGCACATGCATACAGGGGCTCTATATTCAACACAAAAGTTTTTGCAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1831086_1831514_0:0:0_1:0:0_4fc55/2
+CAATCCGTCGCCGCCCTTCCAATAAAAATGAGATGGCTACTTCTGAGGCAGACATCCACAAGCTGCTATCCATTAAGGAAAATAGACTCAGTGACAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_801804_802184_0:0:0_1:0:0_2d8/1
+GAATGAGGCAGGGAGGCAGGATCACCAGCCTGGCCTCCTCCTGGCTAATCCCAGCACAGTGTGGTATTTAACTCTACAAAAAGGTAGAAATGTGTCACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1670314_1670794_0:0:0_1:0:0_1b1d1/2
+ACTACACAAAGCTAACAGCAGAAATGCCTGCTGTGACCCTGGAGTGGGAATGCTATTGCAGTCTCACACAGCTCACTTTTGTTTGAAGTTGAAATGAGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_476032_476444_1:0:0_1:0:0_12ff1/1
+CAGGAGACCCTTTTGAATTGAACTGATGAGATGACTGATTAAGATTGCACTCCAGTGCTGGGACCACCCAGAACTCGATCCACCTAGGAAAGCCCTCAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2058666_2059073_1:0:0_0:0:0_1cfbb/1
+GGGGCCAGCAGGTTACCACAGAGTGGATTGGGTACACACTAAACAAAAAATGTCATTATATGACTAAACTTCGGGGCTTAATAAGTTCATAACAAAGCGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1948245_1948671_1:0:0_0:0:0_477a7/1
+CTCATAGTAGGGAGTGGCATTCATCTGTGTACTCCCACTTATCCAGGAGTAAAACTTTTTGGAAACTTCTCTCTGAAGTTTTACAATATGCAGAGTTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_542015_542458_2:0:0_1:0:0_300a2/2
+ATGTGTGGGTGCAGCCGCTGACCTGGCTCTGGCAATGGCAAAGTGCTGACACCAAAAATAATATTACAGTTTTTTTTTTGCCTGTAAACTGAAGTAGGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1860800_1861234_1:0:0_1:0:0_d230/1
+AGTCTGTAGTTACTACCATTATACATAAGAGCTTGGCAGAACGATGGAGAGGATTATGACTAGCTGCAGCTACAGGTAAGCTTCCTCTCCAGAACGTAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_220321_220762_1:0:0_0:0:0_3e04e/1
+ACACTCAAAGGGCGCCCCCGCTCTCAATAAATAAACATAACCTGCCCAGGTTGTCATATGATACTAATTCTTATCTGAAACTCCTGGAATACTTACCTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1023329_1023692_0:0:0_2:0:0_f774/1
+CACTTCCCCACATCTGAGCACTCATAAAGTTCAAGCTGGGAAAAAAGATGGGGGACTACGTCCTTCCTCAGGATGTACCCAGGCTCTGAGCAGTTTGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2011582_2011984_1:0:0_1:0:0_13445/2
+TTGAGGTTTGGGCCCGACTGCTCCAGAGGAACAGTCCCACCCACGTACAAATAAATTTTTTAGTAGAGACCCTTCGTATGTATCCTAGATCACGGTTAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1654122_1654582_1:0:0_0:0:0_58387/1
+ATAAACTAAAATCTCAGCCTAGAAGCTTTGCATTCCCATCCCTAGATCCTGCGGGGTTTCACATTGAAGATTACTAAAACATAGGGAATGATTGAGCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_948490_948967_0:0:0_1:0:0_13a0/2
+AACCTCTGCTGACAGATGTTGAACCCTGTGAAGCTCTTGTTTCTGGGACTACAGGCATTGAACACACACTAGGTTATCAAAAAGCATGAACAGGAGTAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_993841_994226_1:0:0_1:0:0_d17e/2
+TAACACGGTGTTGGGCATTGAATGAAACGACTGGTGAGCCAGTTAAAACTGTTATCCCGTTAGGAGTTAGTTTCCCATTTAATTGTTCTCATTCAGGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1800548_1800917_0:0:0_1:0:0_1075d/1
+GCCCCGTCTCCCCAGTAGGAGAATGCTTTTAAACTCCTCTCTGAAAGTGAGAGAGAGGAGAATCAAAAAAAAAAAAAAACACATAAAAAATTAGCTATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_879131_879517_1:0:0_0:0:0_50446/1
+AGGCACACCAGAAGCTGAGAAGATTTATCTAGATGAACAGCCTCCCAAAGTGATGCGTACCCAGGTTTGCGGGGCGCCCGGCTTAGATGGAAAGTCTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2258901_2259358_1:0:0_0:0:0_4b4ae/1
+GGTGTGCTGAGTTTGCACATGAGCAAGAAGTCTCCTGCCTTGTCTTTCCCCCATTATAGAAGTCCTGAAAACTCTAACTTCACACAAAAAGGCAAACTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_553867_554287_1:0:0_1:0:0_1b3af/2
+ACTGCACTTAATTACACCAAAAAGACTATACTTTTTGTCTTCCCTTTACTGCTTTTGGTCTTGAACAATCTCCCATCATTAAATCACAACCGCTCCAGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_139881_140373_0:0:0_1:0:0_572c5/1
+TCCTTTATCATGAATATTTAATTAGCAAAGTAATGTTACCTGTCTCCAGAAAAACAAAGGCTTGGCCCTCACTGCCCTATTATTGTTAACAGAAGAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_428209_428674_0:0:0_1:0:0_46a2c/2
+GTAATGGGAGGTCAGAATAAACTGCCCACGCTCTGAAACTTCATAATTTTTCTAACCTGGGTCTTGCACTTTGGCTACACATAAAGTTAGTAAAAGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_816525_816953_3:0:0_1:0:0_29e4f/1
+AGCTGAAAAGAGATTTGAGGCCGCCCCGCTGTTTAATTGAAAAGACACTGGCAGCTGAGCCTGGCTAAATTTGAAAATTAGAACATTGGGCTGTCTCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2367905_2368372_0:0:0_1:0:0_691b/1
+TAAGAACATGGCAGTGGTTTTCTCCTCAAACAAGCGTCTGCAATGGCGTGAGGAGTATGGTCTGACTGTTGCTATTTTTTTCTTTGAGATCCATGGAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1433810_1434313_4:0:0_1:0:0_5bfc/1
+GATTCCTGTGCTGGCAGGCTGGGATACAGTCTGTGATTCAACTCTTTTGAAGCCTGGAACCAGTGGACCCCAGCTTTCCATTGTTTTTATCAATTTCAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1883030_1883499_3:0:0_1:0:0_18ce8/1
+TCCTTGTAAATGACTTGCTGCTTTTCCCAAAGATCTTTGTGTGGGCCATGAGCTCCTACTCTATCCGAGAAGAGAAATAGCCCATTTTTAGGCAAATAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1576268_1576707_1:0:0_1:0:0_1a2c9/2
+GTGAGAAGCATTTTACAAAATTTTCAGGAGGGAGAATTTGAAAATATAACTGTGAGCATCTTGATGTGGAAGATGAGGATCTGGCTGGAATGTGAAGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_875962_876467_2:0:0_0:0:0_2d6ec/2
+ATATAGATCCTCTCTCTCAGAAATGGGCACCACTTAGGAATTAAAAGCATGTTACAGAATATTCCAAGTGGTGCAGCCACTGCAACAGACAGAAAATGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_872720_873194_1:0:0_1:0:0_4f59/2
+TATTTTCAAGAAAAAAAGTGATAAAAACACCCAGGATCAAATCTCTGTGAAGTGACCTTTACAAACTTATACTGATGGGATCTCCTGCCTGTTTATGCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_19490_19943_1:0:0_1:0:0_4133f/2
+AGACTGTAACTATGAAGGGCGCGATCTGTGGTAGAGGGTCCAAACACTATGTTGAACTGCTAAGAGTATGTGTACAACAGCTTATGGGCATGAGGATATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2072821_2073257_2:0:0_1:0:0_580ef/2
+AAGAGTTTGATTTCTCATACAATCTTTCCAAATAGTTTCCTGTATTCAAATTCCTTTAAGCCTCCCAGTCTTGGTCAGAGAGAATGCATAGCCAAGTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1983950_1984377_2:0:0_1:0:0_7b4f/2
+TGCAGCCACTTTCTTTTCCTGACTTCATGTCTTCTCCATCCATGAAATGCCCAAAGTACAACTGTCTCTCTTGTGCTAAGATAGCTTAGGAAAGTAATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1307100_1307552_1:0:0_2:0:0_3ab33/1
+CAGTGGTTAACCTAACCCTTTCTCCAGAGTTATTGATCTTGCATTTTCTCATCACCTCGGCATCAAATTTAAGTCTGCCTAGGCATTTGTACACGATTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2323015_2323484_1:0:0_1:0:0_39b7e/2
+GTATAGCCCGAGGTGTAGAGACAGGCAGAGCTGCCAGCCTGCAGAGTGGCACTGATTAAAAGCACTGTGGAGGGGCTTTGGATTTAGTATATGGCTCCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2496306_2496799_2:0:0_0:0:0_f7ee/1
+GTTTGCTGCAAGCACAAGTGATCCGATTGTACTGTTTTATTAAGTAACTAACAGAGTTTAGATTTTTATAGCAAAGGTCTGGATCAATTGTTTTTTCTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_655172_655673_1:0:0_0:0:0_204d1/1
+ACTGCTCTGCAGAAAACGTCATGGACAACAGGAGATGATCCTTAATTGAAAAAAATGTAAAATTTTTGTTTTTTCCTTCTTCAAGTGCAGGCATCTTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_401207_401673_1:0:0_2:0:0_153ed/2
+CACTTGGGTCCCCATTTATTCCTGAATGAACACTGTTGCTCCCTGAGTTCACAGAACATCAGTAAAAAAATGTTGAACCTAGAATTCTCACAACTTCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2034437_2035011_1:0:0_0:0:0_16d00/2
+ATGGTGCCCGGTTAAATTTGCATCACATGATGATTTAACCAGGCTGCCCATGCAGAAGCTCCTTCCAGTTACATAATAATAAGAAAAGAGGTAAAACATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_347170_347616_0:0:0_1:0:0_84d8/2
+TGTATCTGGGACCCTTGACTGAGGCAGAGGGGCTCGCTGCCCGACCTGGACAGCAATGACAACCCCCTGTGGAACAGTTTTGTTTTGCCACCAGCATTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_964287_964662_0:0:0_1:0:0_1b6fa/2
+TAGTATGTAAGGAAGGGTAGCAAGTTGATTTTGGTTTTGGAAAAATGCTAGAGGGCAGACATATATCAAACAGATGGAGTGATCCTAGAAAAAGTGAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_769722_770246_0:0:0_1:0:0_35948/1
+GTCCTTCCCAAGGGCAGAAGTATAGATGTGGCCCAATTAGCTACTGAGGTTGGCACAGCCTATGCTGAGGCAGTCTGGCTCATAGTTAGATGATGGTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1692816_1693359_2:0:0_0:0:0_da74/2
+AAATTTTTTTTAGGGAGGGTGTGAAGTAGCCCCCGTCCGGGCATTTGTGGTTTAAGCCTATCGGATAAGATGATGCAGTCCGGCACCCATTTTTAATAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1493784_1494253_1:0:0_1:0:0_2cefd/2
+GAAAGGTTCTAATAGCAAGTTTTTAAAGGAAATAACTTAGAATTTAGGAACCACCCTGGCACACATAAGGTATTTTTGTAAATCAGGGATAGTTACTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_671246_671662_0:0:0_1:0:0_4a581/1
+AGACTCCACATTTTTCTCGAACTTCTCCCCAGTCATTTGGTGAGCAACATTTGATGGATACCCTCAAATTATAATTTGCGCTGGACACTCGGGAGGGAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2143528_2143973_1:0:0_1:0:0_10d41/1
+TGTTCCTCTGATTTTTAACCCTTATCTGGTCTCGGCTTGCATTCTTTTACAGTACTTTTATCGTCCTGCGGGATAGGGTAACTCACTCATCTGTCAGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2353221_2353687_0:0:0_1:0:0_46da9/1
+CCCTCTGAGGTCACATTTCTGACATCAGTTTCTTTTCCTCCTATCCCTTTGTGATGAATTATGCTATCTTCACAGTCCTTCAAAAAAGTGTGTAAACTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_405300_405744_1:0:0_0:0:0_29fb0/1
+TTTTCCTCCAGAGGCAGGCCCCTTGAATTAAAAAATGAGTGATCTCTTTAACAACTGAATCTGCTGACTGCAATTCTCCCATGACACACATGCCCTTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1076281_1076763_1:0:0_1:0:0_3d43b/1
+GTTCATCCACAGCTTCATTCTGTTTGCCTGTATGTGGGCATGAAAAAATTTATAATATTTAATTAACTGAACTTATTTTAAAGATGCAGTTTTGGGCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1445692_1446114_1:0:0_2:0:0_da84/2
+CCTTTCCTTTCCCATGATCCCTATTTACACTGTTGCCTGGTTGAGAGTAGCCTGGTCAGTATTTATAGTGCTGCACAAGTGAAATGGTGGCTTTCCATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_936055_936454_1:0:0_0:0:0_31cb1/2
+CACCTTACATATTCCCAGGGGAATTATTCGCTGAAGATCAAGGACTGACGAAAGTAGTTTTATGCACTGACCTGGGTTCTCAGCCTCCCAATTGTGGAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1396974_1397482_0:0:0_1:0:0_15c73/1
+TTTCCTTTCGATTCTTGATGTGTCCGCATCAGGTATGCCCTCTGGGTGCCCTACATTTTACTAGACTCCACGAAGGGGGTGGGTTATCCAACTTATAATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1646902_1647291_1:0:0_0:0:0_17428/1
+ATGGTACAGTATTGAATAGAACTCAGACTCCTCAATTAATGTCGGATGGGAGGCCAACATCTGTAGCTCTGCCACCTACAAATTTCTCTGGCCTCGGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1028373_1028861_1:0:0_1:0:0_1cdca/2
+TTCCTATGCCATGTTGTTGTGGGCAATGCCTGACAATTTGCCCAGCTTTGGGAAACCCTTTTCAGTCGGTCTTCATATACATGATCCCAATTCTTGCAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1693939_1694242_1:0:0_1:0:0_df95/1
+CAAGAGGTGAGACTGACTGGAGTGGAACAATATAGATATTTCTGTGTGGCCTGCAATTGGTAATCATGCCTTCACTGCCTCAGCCTCCTGTAGCTAACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_911597_912007_1:0:0_0:0:0_1b028/1
+TCCTCTAGCTAAAGTGATTCATAGTGAGCTGAATGAAAGAGATGAGGAAAGCAGCTTCAGCACCAAACCTTGGGAGGCTCACCTTATGCCACTTGAGCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1242967_1243455_1:0:0_0:0:0_41845/2
+GGCTGGAGTGGACTTCATTGATTTTAAACACAGGGTTGGGGGGAGGCTGACTCATGACATCATTGCACAATCTCAAGGACAATCTCACCATGCAAGTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_222582_223175_0:0:0_1:0:0_3e94a/2
+CTATATTCGGGAAGTACATAAAATCTCAAAACTAGACCAGGTTGCCCAGGACACTTAAAGCTTATGAATCACATTTTCTCCTTTCCAGTTGTTGGCTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1377330_1377846_1:0:0_1:0:0_52345/2
+AGGGAAGTCAGGTGGGAAAGTTACTGGTTCAGGAACAATAACAAACACAATTAACATGGAATAGGGAGGATTGAGTAAAAACCCCAGGGACCCTGTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1624208_1624550_2:0:0_1:0:0_3dd87/2
+GCTGTGGTTCTGGCTGTATAACAGAACTGGCTTCTCTTATTCTGGGACCCGGGAGGCGGGCAGAATCAGAATTCCCATCACAGCCCCAGAAGCGGGTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1244548_1245012_0:0:0_1:0:0_3dd45/1
+TAATCACAAGGCGGGCGATCTGGGATGCTCATAACTATAGTTCACCAAACTTAGTGGTTACTTAATTGGCCAGGAGGAGCACAAATGTTCTACACCCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1521184_1521597_1:0:0_0:0:0_ec23/1
+TTTCTTTCTTCTAACCACAGTAACTGCTTCTCTAACATTTTACATTTATTTAGATTTCTGTCATTTCAAATCTAGAACTTAAGCCACAACGTGTGGTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1852026_1852494_1:0:0_1:0:0_40d03/2
+ACCTGAACTTCTTTCAATAAAACTGATTAGCTAATTTTATATATCATTCTTAGGCATGTAAATTTCTTCCTGAAGCTGATTCACGTTACACTAGATCCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1491514_1491923_2:0:0_1:0:0_10878/1
+GTTAAATGTCAAATAATGATGATATCACTGGCCCCATCCTTTTCTTAATGGGACCTGACAGAGGTACTGATATCCCAGGCAGATCACGGCTGATTCCTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_816362_816889_0:0:0_1:0:0_4fd7f/2
+CCATGTATTAATACAAAAAATTATACGGAGTTTCTAACATTTCAGTGTAGCTGCTCAGGAGTTCAGCTGAAAAGAGATTTGAGGCCGCCCGGCTGTTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1584602_1585106_1:0:0_1:0:0_448c2/1
+TTTGTAAAGGAAAGATTACAGAAAACAACTCTGACTTACAGACTAAAATTATTCTTGAATAATACTTAGGATGGATAGATTTCTGAAATTCTTTCAATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_818082_818587_1:0:0_0:0:0_4bcb8/2
+TATTGCTGGCCCACCATCTAAGGGAAGACTAATCCCACACTCTGCAAATGATTCTATAAGAAGGGATTAAGATTATGTTTCCTGCCCTCACTGCACAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2427585_2428010_1:0:0_1:0:0_10e5d/2
+CCCAGCCTCTATGTACACTTGGCTCACGGTTTCAACTTGGGAGAATGATAGGATGTTGGCAAAATTTCTAATCCACATGCTAAATTAATTGCCATTCTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_312836_313261_1:0:0_1:0:0_37906/2
+GTCGAAGGGAATGAAGGCTGGTCCTTGAGGAGAGCTGCCATTCCCACAATCACTTAAGATTTTCTTTTCTAAAAATTTCAAGTATAGACTTGAGCCACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2392480_2392801_0:0:0_1:0:0_3301b/1
+AGTGTCTCATAGACACAGGGTGAGTATATGATAATTGATTTATTCTCTACTAATACCTCAGTCCGGACAGCACTAGTACCACGCACAATTAGCAGTTAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2022579_2022959_1:0:0_1:0:0_d9ae/2
+CAGAGGATTGCACACCTGCAACTATATAGAGTAAAGAAGCCTGGTGTCTATATAAATGTTGATTTTTACCAATCTCGGCTTGCGGGTTTGGAAGGTCCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1257265_1257759_1:0:0_1:0:0_2e75f/1
+GAGGGAGGCCCTCTGCTATTGTAAGGTGGAGCACCTTCTTTGACCCAGGCTGAGCAAAAAAACACAGAAAACTGTGAGTTAAAAAGTAAGGGGAAGAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2362090_2362507_1:0:0_0:0:0_5745c/2
+GAGCAGTGAGGGGATTACTATTGAGTGGGGCTGTCAGTAGTGCCATGTATCTTTCTTCTATATTAGGATCCTCTCTTATGGATGCCCTGGCCAGGGAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2069878_2070373_2:0:0_1:0:0_b560/2
+TCATGAACCTCGAGAGGGGCAGCCTTTTGTCCAAGCTCCTGCCTAACACCTCTTCCTGATTGTATTTGTTTTCTTAGTTGACGGAGATCTCTACAATGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1128619_1129086_1:0:0_0:0:0_26d9a/2
+ATAAATATACTTGGAATCACCTCAGCCTCCTGTGTTTTAGAGCCTGGCACTATCATCAGGAGTAACTACAACTAAGTCATCAGAAGATAACAAAGTGAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1325756_1326229_1:0:0_1:0:0_46722/1
+TATATATGTCATGCTCTCTAGTGACAGAGTGCTGGAGTGCAGCTTAGAGTCTCTTTGAAGAATCAGAGAAACAAAATAACACCTATGTTATATGCAAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_628058_628508_1:0:0_1:0:0_4ec0e/2
+CCACCGGGAGCTCATTGTTGCTCTTTGGTGCCGTGTGTGGCTTCAAATCGGGACATGGGATCACAATTTGTGGGCAGGGCTCATTCTAAATCTTAATAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1441786_1442177_0:0:0_1:0:0_154d4/2
+CATAGTGGTTCCTACCTTTGGCTGGGATCATTTTGCTAAAAGTGATCTGGCATTGCTCCTACAATATACTTCTACTAAAGACACGTAATATTAAATATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1174281_1174682_1:0:0_1:0:0_9103/2
+ATAGGCACCACCTCTTTGTCTCTCATTGAGACACCTGCACCCAGCTACTCAGGAAGGACAGTCTTCATGAAAACTATACCTAGGAAGTGATTTTTGTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2138270_2138818_0:0:0_2:0:0_234c1/2
+GGCCCGGCCAGGGGTTCTTTTTAAAAACTAAAGACAATAATATCCTGTATATGGCTATTAGCCAGTGACAATTCACAAGATAATAAGTGTTCCATGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1949463_1949901_3:0:0_2:0:0_dfd3/1
+AGCGGTCCATTGTGGAATGAGTGTAAGCCTAGCTCGATCTCTGCTGGATTGGTCCCAGGTATGTAAATTATTAAAAAGAACAAATTGTTCTAAAAATTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2158609_2159079_1:0:0_1:0:0_5b2bc/2
+GCAGAGGGCTGCACTTCACTCTGGGGATCATTCCAAATAGTGAGTTAAACCCCAAACAGTACAGACACTGAAGCCTTCTCTGATATGGGGTTTCGATTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2087423_2087859_0:0:0_1:0:0_1cfb4/1
+ATGTACTTCCTCTCTGGGCTTAAAGGATAGAATAGTATTCTCTATTATTGTCTCTTCCCCAGAGTTAGTAGATCCACCCCCACACGCCTGGGTGATGACG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1207571_1208101_0:0:0_1:0:0_4e06e/1
+TTTCAATTTTTTGGACTTCAGGGTCTGTTATGAACTCTGCTGTTCTATGTCTACATTACCTCAGCATCAAGACATTAAGCTTTCACTCAATCACAACAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_752851_753261_0:0:0_1:0:0_2ba49/1
+AAGTCTGGCTGGTTAAAAATATACCCAGTCTTTCTAAATGAAGTCTAAGCCACCTAGAGTAATCCTCTGAGAGGTTCTCATGAGAAGTAAGAGGGACAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1367631_1368041_0:0:0_1:0:0_53cfe/2
+ACCATTATTTTCAGAGACTCTGAGAATTTGGAAGTGGGAGGCAACACAATTGATTTCTCCTCCAGAGTAGCATGAGACCATGTCATTGTCAGAGGCTAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_391979_392394_0:0:0_1:0:0_f13f/1
+CAGGTCATGGCTTTGGGAGGCTGGCTGCTGAGGCACAAGAAAAATACAGATAGAACTCTATGCATTCGATAAAAAAAACACCAACCCAATGGGGATACTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1842432_1842945_2:0:0_1:0:0_296d7/2
+CAAATACCGCACCAGCTACTCTACACATCAAATTCCTTAGGGCAGCCCCTTGTAGACTTTCCTTCAAAATAATGTCTGTTCTTTATGGAGATGTTTGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_274781_275272_1:0:0_1:0:0_19ea1/2
+ATTATTTATTTTCTAGGAGCAGGTTTTCTGCCACCTTGTGGCGGATCACCATTTTTCACTCTGCAAAGTGTTTAGCACAGCTGGGATTAGAATTAATGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1723113_1723601_0:0:0_1:0:0_51873/1
+AAATTAGAAAAATCATTTCAGAGGAACTAACATTATGCTGACCAGATGCAGTGGGGCACAAGGTCAAGATGCCAGCCTCCTGAAAGTCAAAACAATAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2442229_2442639_1:0:0_0:0:0_510f6/1
+AGCGGGCGGCAGGAGGTGGGGTTGGGCCCTTCCTCATATTAATGACCAGAGGCAGAAATGATGGAGAGAGGGAGGCAGGCTGCTAAAGTACTTTTGAGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2296390_2296783_0:0:0_3:0:0_169c5/1
+TACGCCTGTGCGATGTTTCTCATACTGAGTGTAAGACTCGGGCTGGACATCGATGAGGCATGGTGAATTGTCAGCTCACAGAGCACTTAACATCAGTTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2250819_2251264_2:0:0_1:0:0_4603c/1
+CATTTTTCTTTTTAATTTCCTTTCTGCTGAGTTGATAGAGTCGTTTTCTATTTTTTAAAACTACCATAGTATGCTCCAAATAAGGAAATGGACAATGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1870207_1870617_0:0:0_1:0:0_3cb31/1
+CATGCTTTATCCTACTTGAAGTTAATTAGAGTAAACTCTGGAGTGCTGCCCTTGGCACAAACACAGGACCTGCTGTAGTCCTTGCTCTTCTCACTGCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1629267_1629696_0:0:0_1:0:0_52dae/1
+TGATTTTCTGCAAACTGTATTTTTCTTAGCTTAAGTTCTAGCCTAGAAATGAGCCGAGGCGGGCCAGAAACTCCTGTAATGGAGACTCCAGGTTCATGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2096191_2096653_0:0:0_1:0:0_8506/1
+TGTAACCAAGTCACTAGATTGAATGATATAAGGATCTTGTTCTCAGTCTCAGGCTTGAACCTCCGCCTCCACACACCTAGCCAAACAATAGGAATGTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_997780_998195_0:0:0_1:0:0_4cf7f/2
+CAGAACTTAAATGACGCAAGGTCTGTATTCCCTCTTAATTATATTTGTAATCAGGGATGTTTTGTTCACTTAGTAAATGATTGGCCAAAATTTTAAATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2288048_2288532_1:0:0_1:0:0_24f3a/1
+TTATTTTCATCATAAACAATTGTGTAGCCTGGCCAGCCCGTCCATTTTCAGTTGTTTTTGACTGATTGCAACTACAGGAAGGCACATATATTGTGTGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_132597_133054_0:0:0_1:0:0_40ee2/2
+GTGCAGTGGATGAAAAAAACTGCACCACTGGCAGTCTGAGGAGGGTGTTCAAATACTGGTTGAGATAATGGGAGCTCAAGGAGATCTTAGCAAAATCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2015657_2016194_0:0:0_1:0:0_311ab/1
+GCAGGAGTGGGTGACCCCCAAAAGCTAAAGTAAATAGGTCAGGTGTGGTGGAATTGTCACCATGGCCTGCTCTCTGGAAAAATACAATGATTCTGGTAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2499592_2500021_0:0:0_2:0:0_c226/1
+AGGTTGAAGGCAGAATATGCGTAGCCTACTACCAATATAAACATAGCAACCTCTGTGTTCCTAATTCTTGAAGCAATGTCTTCTACTCAGCCTTCCACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1946937_1947339_1:0:0_0:0:0_1fa89/1
+AGGAATATATCAGACAAAAGTGCAGTGACACATGTGGGCCTTCATCATGGTGGAAACGGATGCAGAAATAAAATTTAAACGTTACATGGTTTTGCCTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1236762_1237161_0:0:0_1:0:0_3e451/2
+CCTTTGGGTGGCAGGAAATGCGGGGGCCCACCACATCACAGTTTATTTTTTGTGTATAAAGGAAAGACAGAGAGAGTCAAAAGTATGGAGAACACACAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_93265_93805_0:0:0_2:0:0_354e3/2
+GAGTTCTCAGTTCGAGAACCCTTCCTCATGATATTCATGGCATTTCGCCTCCCAGTCCCTGCATCTTGCATATACATATAAATAAAGGAAGGCTACTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_58922_59463_1:0:0_0:0:0_3a719/2
+ACAGCTCTCGTTTGTATATTACTTCTGCAGGCTCCTTCTCTACCCATGAGCTTTCAGTATTTTACTGTAAAGATAGGAAAGGGTGCCGTCAGGGAGTCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_963350_963766_0:0:0_1:0:0_21788/2
+TAGTTTTCTTTAGAATAAGGAGGTGCAGAGGTGGGCCTATCTTGATATCCCTTTCTTATAAAACCACCAGTTCTTTTTGTGGTGGGGAGGGGGTGAGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1054966_1055451_1:0:0_2:0:0_53ba0/2
+AATGAAGAAGCATTTATGCTCAAGAGGGAGGAGGAGTACAGTCTAAGAAGGGGTTCAAAAACAGTTTCTTAGCTCTCTCCCTGTAAGCACATGTGCACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1337037_1337551_3:0:0_1:0:0_4ddc0/1
+TCATTCTTCATCCTATTTAATACTGCTTTTGATCCTGTCTTGAAATTCTTGGAGGTAGAACTTGTTTACTTAAATGCGGCTGACTCCCGTGAGTGGTCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_673755_674288_1:0:0_1:0:0_b203/2
+TCAACAACCCAAAGTGTTTAAGAAATGCACTTCTAGTTATCTTTTCAGGAAGCGGGGAGGCCTGCCTGCGGCCAAGCAGGGACTGCCTCGTGGAATAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_622213_622625_0:0:0_1:0:0_22135/1
+AGCAAGTACAAAGTTTTGTTTTGAACACTTTGGGAGGCTGTTCTAAAATTAAATCCACTGCAAAACAGCGGCATGGTAAAGAATTCGTGCCACCTTTGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1572114_1572558_1:0:0_0:0:0_23dd8/1
+ACTACCCCTCAGCATCCTCTTGCCTGTAAGAATCAGAGAGAATCCTCTGGGTTACATTGGTCTACTCACATGGCTTTGAAAATATGCTTCATTGAAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1136169_1136623_0:0:0_2:0:0_51f0c/1
+TGGAGGTTTTGTTCCATCCCAGCAGAGCCTTTGCTGGAGTATGTCACTAAAGGCCTTCCAGGAGGGAAGTTACATACTGTAATGTTAAAAGTCCTGCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1538069_1538410_0:0:0_1:0:0_3322b/2
+ACTATGCTAATTCAGACTTGGCTGTGCAATCCTTGACATTACCTTTGCTGGAGGGACCTCAGACTGCCTTCTTGTAATGACATTTCAATGGCTTATCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1367658_1368182_1:0:0_1:0:0_35896/1
+TTATGAAAAAGGACACACACCGTTGGGGCCCCGCTCAGATAGAGCAATCCTAAATGCATTTGATCTTTCTGGATTTTCTTATGTAATCACTGCACCATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_735_1165_1:0:0_2:0:0_447aa/2
+GCGTCGGGAGGGTCTCTTGCCCTCCTGCCACTGGAGTGGATGAAGGATTGATGGGCTTCCCTGTTCTCTGTCAGTGAGCCCCAAGGAGAGTGCGTTGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_28184_28641_1:0:0_1:0:0_40a0c/1
+GTGGGGCCACAGCAAAGTGCTCTTTTGGCTTGATGAAATAACATCATTCTAATTATGTCAAAAAAAAAAAACTTTTACTCCTCTTAGAGCTGCTACAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2136958_2137392_1:0:0_0:0:0_122f1/2
+GTACTGTATATTATATAGGGACCCTGAACCTCTAAGAGTATGTAAGTGTATCACATCCTCAGCCTGAGGCACATGAAGCAGGTAATGTATCTAAAGATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1675136_1675478_0:0:0_1:0:0_136e1/2
+GCTGTGGTGCCCATTCCTGCACTCCAAGGCAAAGGCTTCAAAAAAAAAAAATGGATGAAAGAATAGAAGAGATGCTGGGCCTCTCACTAATATCTGCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1555390_1555840_1:0:0_0:0:0_59bd2/2
+TTTTGAGGCCTGCCTCCCGAAGAGAAATCCTATACACCCACGCCACTACCATTTTGACTTCAACAATTTCTCCAGCCTGTACCTGCTCTTTCCACTTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_231291_231625_1:0:0_1:0:0_50bb4/1
+GGAACACATATTCCCGTCTCAGAATATTTCTTCATTGTGCCAAGCTGGGATTATTATCATGTCGGAAAGGAAACTAAACTTACTGGCATGGCGATCACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1813539_1814059_1:0:0_1:0:0_29500/2
+ATAGGACTTGAAGCAAATATAGGGACCTGCTCCTACTTGAGACCCCCTTTCTGAGTCATACACAGTAATATTAATTAAAGGATGGTGGGGGGTCCATATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_797314_797768_1:0:0_3:0:0_4b3d9/1
+TTTTGCTTCACGTACATTATTCAACTGGCTGCTGCCTTACAACTGTATCTTTGGGTATATTTAAGTGGAGACAGCGGCCCGCCCCCAGCTTTCTAGGTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_180828_181266_0:0:0_1:0:0_2383d/1
+TAAATATGGGCAAGTGACATTAAAGGGAATTCTACCCATCGGAATGTGGATATTAATATTAAACAATTCTCTTATTTTGAAACAGAGCGAAAGAGAGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_324959_325438_2:0:0_1:0:0_51110/1
+CCTCTAGTTCTGCTTGTATCTCATTCATGCAATGGTTCTAAGAAATGTAGGGGAGAAAAAATTTAAGGGGTTTGATCCAAAAGCAATGAATACAACAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2472917_2473382_1:0:0_0:0:0_7e97/2
+AATTTTCCTATGCCAGGTCTGGTTAACCATATGTATTAATATTTTGGGGATAAAATTACAAACTAACTGGGCTAACAGACGATAATAGATTCTTACATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_735262_735712_1:0:0_1:0:0_494d3/1
+ACTTTTTCTTGAGGCTGCTCATTGTAGAGGTGGCATTAATTACACCATTCTGATTTTCTCTGCAATAAAAGGGAATATTAAGACCACAGTCTCTGGGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_804432_804959_2:0:0_0:0:0_211d8/1
+CCTGTCTATGCAGTGAGGAAAATGTTCCTAAATAAATTTCACCCAGATAAGTTTGTTTTATCAAATACCTATAAGCAATCCTTCTCTCATTGAATTTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_817929_818400_0:0:0_1:0:0_3be08/2
+TATGGTTTTCCTTGCAGAAGTTCAAGCGACTGTCCACACGCAAAAAACTTGTGCATATTCCTGGCAGTCTAATTTATCTGGTCGAGTTGAGTAGCCCTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1364111_1364501_0:0:0_1:0:0_2d394/1
+TTATTTTTTGCAATAAAAAAAAGATCGGTTCTGCCTTATGGTAATAGACACTGGGTAACTTTCACTGATCAGGGTATTTTAAAAATTGTTGAAATAATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_588401_588880_0:0:0_1:0:0_44e35/1
+CTACCTACCATGCAAAGGCAAATTCTTTTTGGAAATATGAATTAGGGTAAATAGGCCTCACCTCCGTTCTTATCTTTCTGATATAGAATTTTCCACTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2243999_2244456_2:0:0_0:0:0_52426/2
+GTGGTGATAGATTGTTGAGTTTCTCATACATGGGCCAGCTTGAACTTCTCCCTGAGTTGTTTGCTCTGGGAAGCAAAGTCATCTATGTCACTTTGCACTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1394717_1395261_1:0:0_1:0:0_9f97/2
+AAATATCACGGAAAAGGTAAATTCCCCTGCCCCAAAGCAGGTCAAAAGATAATACTGGTTAGATCCTCCTGAGGCGCGATCTCCTGAGTCGGGAGGGAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1110853_1111222_0:0:0_1:0:0_14e8a/2
+ACGATGATCTTAAAAACTCTATTCAATCATGCAAAGCTGTTTTTAAATGTAGCACCTTTCTATAGTTAAATTAGAACGACCTCCTCCTTATAACCACAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1625893_1626386_1:0:0_0:0:0_bc88/1
+CATCATCGGCCTCTGCCCATCCACTGGAGCTTAAAGTCCTTGAGCTGTAGTTTGATTATCTGCAAGGGATGAGTTCAGCTTGTAATCTCACAGAGTTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_775261_775719_1:0:0_1:0:0_1c19f/2
+TCCTTCAGGCATTTCCAAACTCTCCCTCCGACCTGCCCATCCTGTCTGTAAATGGAAATAAATTGTTGTGATGGGGTTTAGAATTCCTTCAGGTTCCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2301495_2301968_0:0:0_1:0:0_3fbad/2
+TTAATTGTGATCATCAAGGTCTTGTTTTAATGACACCTACAACATGCTGAGATGAAACCCCATTCTATATTTTGGCTACTCGCGAGTCTCTGATTGGTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1445165_1445655_0:0:0_1:0:0_7c7d/1
+CAGTTATAATCCAACAGAATTCAAGTAATGCCCCCTCTGATAGTAAGTCCCCATCTGGAAAATTGCTATTTATAAAGAGATGAGATGGAGACTCATTTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_502593_503027_0:0:0_1:0:0_273bf/2
+AGCCTCCCCCATTCCTTGAAAACAGGGTATATTCTCACGCCGGAGCTCCCCACTCCATCCCAGCCTAATGTGTTGTAAGTCCCAGCTACTACTGAGCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1596718_1597240_2:0:0_1:0:0_2d758/1
+GCTTATGTATTGAACTTTTTGTCTGGGTGCCCTCCTGTCCGGCGAGAGACGTGGTAAATACATACATGCCAGGAGCTGCTTAAGGAAAAGCAATTTATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1215210_1215630_1:0:0_0:0:0_560fe/1
+ATAACAAGAAAATTAATTCAGTCTTGCTCAGTATATTAGCTTGCTCCCATAAAGCTGGCTGGAGTGCAGGGGTGTGCAGGGAACCTGCCCTCACCACTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_521219_521641_1:0:0_1:0:0_26d5f/1
+TGCAATATATCATTCTACCTGACCAACACCTGAAAGTTAAAATTCCTGAATTCATCCTCTCCTCCCAATGGTAACTTTATAAACAAAAAGTAATAAATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1302333_1302870_1:0:0_1:0:0_163f5/2
+GTGATTTAGCTGGATGGGAACCAGGGATTAAATTTTAGGAGGCTGTTGCCAAAGTGCAGGGGTGGTGGGTGACACAGCAGCCTGTTTTGGGAGCCTGGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1746628_1747124_2:0:0_1:0:0_1cae7/1
+ATAAAAATAGCATAGCACTTTGGATAGTTTGAGAGCAAGAGCCCTCTGCCCGCCCCCGAGTTCCCATTGGAAGGAAAGGTACACATTAAAGAAATAAAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2177941_2178361_0:0:0_1:0:0_4b3af/1
+GGGAAAGACAGAGTGCTATTCTTGTATCAACACTGGGAACATTGTTCTTAAAAAAAAAGATTTAAAGTATCTACTTATAAGAAATAAAATATTTTCTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_864623_865195_4:0:0_0:0:0_2c783/2
+GGGGAGGGATGGGGTTTATTTCAACATATTTATACAAAAAGCAATGGCTGTGAGTCCACTTTAAACCACTCTGCTTTATTTATTAGGTAGCTGGGATTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_83665_84107_1:0:0_1:0:0_5390a/1
+TTTTCATGGCAAGAGCCTGGTTAAGATCTGTTTTCTTGTTTTTATTAGAAAGAGCTAGATAAAAGAGGGGGGATAATGACAGAACACATTATTGCAAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1943221_1943647_0:0:0_1:0:0_226f0/1
+ACTAATGCAAATCAGTTCACTCTTTTTCTGCTGTTAGCATTAAACTGGTTATATTCTCTTTTTTCCTAACTATAGGTTTGCCTATACAATTACTCCTCGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_880213_880707_2:0:0_1:0:0_177bb/1
+GTGTACGAGATTTACTCTTTGACTGCAGGATGGTAAATAAGAATAAGCACAAGCAAGTGAAAAGGCTGGCCCACTAACTTACTATTGTTTTTTTTAAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1361349_1361766_0:0:0_1:0:0_11084/1
+CTTTTGAAACTAAAAACTGTGTGATATGCCTACACTTTTATTCACAATATGTTAACAGCATATAAAAAGCAATTAGAGTTTTTCATTTCCAGGAGAATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_922706_923132_2:0:0_1:0:0_319c0/2
+AGCAAGAGCAATGGAAGTATACAGATGGAAAAGGACTCCAACCCACCTTTTTTTTTTTTTTTCAGTGTAGTCTTGCAGCGCCACCGGGAGAATAGAAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_50481_51023_1:0:0_0:0:0_2cec1/2
+GGAATGTATGCGAGGAGAATCACTGTGTTTATATCTTCCCATCTTTTCTAATCTCATTGCAAAGAAGCCAGGCACGGGATCCCATTGCCCGGCGCCTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_862401_862886_0:0:0_1:0:0_4cf9f/2
+TTAGTTCTGCAACCCCATAATAGCAACTGCGCCCGGCCTCCTCAAGCTCCCATTGATTTCACAGGCCAGTTCCCAAACCATCGATAAAACTACCAAGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1874606_1875105_1:0:0_2:0:0_31d31/1
+GCACTTTAATCCCAGAAACTTTCTTTTATTTCTGCCCATCATTGAAATTGCCTTCCCTTTTTTTTTACGGAAAAGAGATGCCTATCAGTAATTGCTTGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_885730_886197_3:0:0_1:0:0_3de18/1
+AGCTTGCCTAGCTACTTTGGTACCTAGTGAGCCACATGCCTAAATGCATTTGTATATTTTCCATTCCAGGAGTCGCAAGGAGATTATAAAAACGCAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1154360_1154780_1:0:0_1:0:0_158ff/2
+GAGATGGATGTGAGGTATTGGGTTGTTTTTCCTATTGTGTTTGTAGAATTTCTGCAGCAGTGCAAACCAACCAAGTTTGATACTATGTGCTGTCCGGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2017813_2018315_1:0:0_1:0:0_3fb0e/2
+AGCCCCTTGATGAATAATGCATCAACTATTATTTTTGCTCTGTATTTTTGTGAAAAGATTTAAACCTCGGCTGCTGGCTGGAGTGCTGTCCGAGGCGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_938375_938855_1:0:0_1:0:0_138c2/2
+AAACAAAAAAGAACAAAGCCTGGTTATCTCTCTGAAAATACAATAGATGTTCTAACAAATGTAAGGGCCCCTTCAGCAGAATTAGCTACAGCTTCACATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_81096_81614_1:0:0_0:0:0_511f3/2
+TGATTCAGGGCTGAGACTAAGGGTCAGGAGTTTTTGTAAGTTTATTATAGCTACTCTTGCTAGGACATAAATGCATTCAGACAAAAATAGCTTGCACCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2084581_2085055_0:0:0_1:0:0_b0ea/1
+GCCTTCTCGGATGTTTGCGATTGGTATCAGAAGTCCCAGTCCCATTAGTAGCTGCTGGCAGGTCTTTAACTTATCTTTAAATATGGAGTGAGCACTCTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1456965_1457501_1:0:0_1:0:0_33fb4/1
+CCATCACATCTCTAAGCTTGGCAACAGCGAGACTCACAGAAGTGTTTATCTCCATATCCTAGCTACTGAGGAACCATCTGAACTTAATTAGTTTAATTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2295856_2296326_1:0:0_1:0:0_36fc4/2
+GGTGATCCTTTGGTTTGGAGTGCCTAATTTGGGAAAGAGCAAAACTCAGCTGGACAGTGGTTTCCTCCGAACAAGCACATTCTCTAAAACTAAAATACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_568574_569054_1:0:0_1:0:0_3bbf1/1
+CGCTTGATCCAAACACTGCAGTACTGCGCTGTTTGGGGGTGCATAACATTGTGCTGGTCCGTGGTGACAAGGAAGAGTTCCTGCCTCCCTCTAAGAACTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_167876_168321_1:0:0_0:0:0_16bdb/2
+ATCATTTCAATTACCCTTAAACATGTATGTATAGTGATTATGCATACCACAATGAACACAGGAATTGCTTCATCGTGTGCAGTCAGGAAAAAAATAAATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1017799_1018195_0:0:0_1:0:0_3a87e/2
+GAGCTGGAAACTTTACCTCACCTTTGAGTAGCACTCCAGCACTGGCCCACTCTGTGGTTATATTTATCGAGACTATCTGCATAAGCAGACATCTGCAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2085457_2085895_0:0:0_1:0:0_3de64/2
+TGTCTTATGCGCTTGTTTCAGAGAAACAATAAAATTAGGATTGTTCTAGCACTTAGAGACTCGGTTATCTTCATAGCAGGTCAAGACCAGGGTATTTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1201125_1201526_1:0:0_0:0:0_4aa8d/1
+GCTGGAGAAACTCGAGACCCACCCCCATAGATAATTTTAAGAGGCTTTATATTTGTGTGTGCCAGGGCGGAACTGGCTCATGTGACAAATAATTCAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_399207_399639_0:0:0_1:0:0_cc59/1
+ATATATTTCAGCAGCATTTGATTTAATTACAAGTGACTTTGTCAGAGATCGTGGAGCTATTTTTTTTATGAAGCCAGGCTGGGATTCAGTACAGACATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_634352_634867_1:0:0_0:0:0_c9dd/1
+GAGGCTAGGATGTTTTTGAAGTGAAACTGTTAAGGGAGTCATATGGCACTCACTAGGCCCACTTTGGTTATGTGGCCTTTCACAAGAGTTGAATTACTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2329978_2330425_0:0:0_1:0:0_2a669/2
+AAACTGAAGGTAAAGCAAGACCAGCGCCGCGGTCATCACAGCCCTTGCCTTTCACAGATGCGCTCCTTTCTAAATGAATACATATTTTTCATTTCGTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2394283_2394802_0:0:0_1:0:0_b8f5/1
+AGGTCTGCAAGCTCTTTGTATTCTCAGGTTAATATACCGTGGTGATAATGGCAGGGTTTTCAACACCTCCGCAAAAACTATAACTGGCAAGTGTGGATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_874257_874755_1:0:0_0:0:0_2bbed/1
+AAGCTTAAATGTTAGTGGTGGTAGCTGTTATTGAATCCAGGGCAAAACAATTTCAGTCATTGCTTTTGCTCACGGGGGTCTTTTTTTGGGGAAAATGTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_20970_21418_0:0:0_1:0:0_4b79b/1
+AAGAAATATGGATGAGGCTGAGAGAGGGTTAATACAAAAAAAAAAAAACTACCAAGCTAGTAGTTTTATCTTGGGCTTTACATGTCTACTAAACCACACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1044387_1044821_0:0:0_1:0:0_26b7c/2
+TACAATATTAGGAGACTGGCCGGGTTCCCTACCTTTACAGGAAGGGTGAGGTCTAGATCAAAACAAAGTTCTGTTCATCTGAGCCGCGCCCAAAGTGTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_400534_401019_1:0:0_1:0:0_1e883/1
+GGGCAATTGGCATTGGCTAAAAATGTTCTGTTATTAGCCATATCAAAACAAAAAATCTTTGTCTGCACTCCACCTTTACAGCAAGAAATAGGTAAAACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2253207_2253695_1:0:0_1:0:0_97a8/2
+TTAAAGTTTGCACAACAGCTTCATTGAATATCGAATACCATGTGCATGTGATATCTTTGGAAGTTCTGAGCAGGGTTTTTCATGACAACTACGTCCCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_406459_406890_0:0:0_1:0:0_4fa17/1
+AGAAAGCATCCACTTCCGGAGCCACACACAGGAAATGATGCTTACATATTCTGTAATTAAAATAACTTTAAAAGCTGGGACTTATAATTTTATGACTCGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_742673_743004_1:0:0_0:0:0_1a764/2
+ATAGACATCCTCCCCACTTCCACTCTCTGGCTGGAGCTCCACTAGCTCCCGACCTAGTAACAAGAATTTCCTGTGTGCAATTCATCATGGAATATATAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2232356_2232786_1:0:0_0:0:0_264a1/1
+CACTAATTTCTGCACTCCCACATTTTGTAAAGTCTTCCTATCTCTTTTTAAAAACAGAAAAAATATATATATGATTTTGAGGTTGCTTTGCCTTTGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1156493_1156905_0:0:0_1:0:0_25b7a/1
+GGATCTTAACCATCATCCTGACAAAAAGCCTGAGCATGCCTGCAACACTTACAAGAAACATCATTCCTCATGCTGAGATGGGAAAAGGAGGAGTGAACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1716384_1716835_1:0:0_1:0:0_2d451/1
+TGGAGGCCGATCCCATGGTCGGCACCAAGTTTACTATTAATGCCATTCTTCATTAAGGAGAGGGAAGGCAGGATGAGATACTGTGTGGCCTGGAGCAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_634266_634675_0:0:0_1:0:0_14612/2
+GCCTAGGAGTCTGCACGGTATGATCCACCTTTTTCATTAGAGTTTCCAACAAGAGGTCCGCCCTGAGGTAGAATCTATCAAGTTCCCTCTACGAAAGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_497569_497993_1:0:0_0:0:0_35b94/2
+CCTCTGCCTGAAAATGTTGCAAAAGACAGAGTGAGACACCCAGGCTGGTCCAGCCTCCCTCACAACAGGAAAGTTGGCTGACTTGAGTTGGCTCAGACGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_936624_937087_4:0:0_0:0:0_484d7/2
+AGTATATGTTTCTCTGCCCTTAGTTCAGTCAGGCTCGATTCTCTCCCAGCCTGAAAGCTTTCATAATCAATTAATAGAGGGCGGGAAATTAGCCTGTAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2236137_2236531_1:0:0_1:0:0_2bb99/2
+AAGTGACTCCTAGCCAGACACAAGAGAAATGCTTAGATATACCCCATACTTAATAGATCCACCTCGTGATTCACGCCTCGGCTCACTGCACTCTGTCGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1870233_1870636_1:0:0_1:0:0_24772/2
+GCTAACATAGTATGCTTGAGACCATTATACTCAGCTTTTATTATCACTAGGCCAGGCTGGCATCACCACTAGCAGAGCAGCTCTGCAGTGATGTAACCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_860454_860868_4:0:0_1:0:0_3be0c/1
+TTTAGAAGAATTCCCAAAAATCATATGAACAATGGGTGGTCTCACTCCAGATTGCTTTTCTCTGATTTTTTTTAAAACTGGAGGGGAAGGAGCTCCATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_248313_248810_0:0:0_1:0:0_3e392/1
+GTACTACTCAGGTATTCCTGTGAGGTACAATTGCTATGCAATACATAGGTGTGATCTCCCGGCTGAACAAAATTTACTATTATATGTAGTTTTGTAGCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_573650_574107_0:0:0_3:0:0_9503/1
+CTTTAATATCAGTTTAATTCAAAGAGTTAGTCTTTTAAAGACAGGGATTATGGTAGGTGCCTTGGCCTTCCCCTGGAGGGCCGGGGAACTTGTTCTCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_759026_759526_1:0:0_1:0:0_31de/1
+AAATGAAGGTTTTACAGAATCAAATTCCAACATAAAGAAGCTGGGACCCCTCTCCATGTGGTTTCTGAAATGCCTTGGCCTAGTTTAAGGCCAGGTTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1498283_1498786_1:0:0_1:0:0_12abe/1
+GGTGGAGGAGTCTTGGATAACCATGTTGCAGTTAATTATAGGATCCCACCTCCACTTCGTCTGACCCAAGGTTTACATGCAGTGTTCTCTCTCTGCTATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2109427_2109896_0:0:0_1:0:0_4b687/2
+AAAAAATCACCTTTAACTGCCAGGCTCTCTAGCTATAGTAGACTAATATTAGTTTGTTACTTAAATAAATAGATGTCCTGTGGGCTCTCCCTGGACTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_732201_732703_2:0:0_2:0:0_4f96d/1
+AAACGGGTAGCCGGGCCCGGCTAATATAAAACCCACCACGACATTTGAACTATGCTGTTTTCAGCCTACCTTTAATATATGTGGTCAGACTACAGCTACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2305965_2306357_1:0:0_1:0:0_38798/1
+ATGCCTGAGATGGAGTTCACTGTGGCCAGGGAAGTTAGGATTCATTCTCTGGAACGTCCAAAGGGGACGCCCAGACTATCCTATCAACTCAGCACCGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1245761_1246218_3:0:0_1:0:0_4afaf/1
+GGTTACGGCCCCATCACAGCTTTACATGCATAAGAATGCAATTTGATGTGCGATCCTAACCCTTCCCAGCCTGGCAATTAATAATGTCTCTATCTCTTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2350776_2351218_0:0:0_1:0:0_4af80/2
+ATATTTGATGTCATACACACAGGTGCTGGGTGGATTTCCCCTTAAACCCCAAGATAGGGAACACAGCGCGGCTGGATATTCCTTAAATTCTAAGTGGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_325191_325610_1:0:0_0:0:0_3aae/1
+GACTTCTCTTGATCCAAAGAGTCTCCTTACAATGACATAACCACATTTCAGAGAGAGCTGTGTCTGGAGCTGTATTCTCAGTCCAAGAAATTTCTATATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_737058_737498_0:0:0_1:0:0_26825/2
+TCCATCTGTCGCGGCCAGGGCTTCAACACATAGCCCAGAAATGAAGGTTGACATGGGCTCAAGAGTTTTTTTCTAAGACTCTAGATGAGCTTTCTGACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_866604_867096_1:0:0_1:0:0_b7e9/1
+ATCTGGGTCCAAGTGATCTCGGCCAGGAGGTGGTCACTAATGATACAAAATTGAAATTATATGCATCCCCTTTCTGTTTTTCTATTCGGGAGGTGGGGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1788256_1788698_0:0:0_2:0:0_53d36/2
+CATGTCTAAACTATACCACTAGGAAAAGTTATATTTTTCTGTGAAGTAACTGAGTAGGGAGGCAGTAAAATCTACACAGAGGCGGAGCTTCTGATTAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1323848_1324371_2:0:0_1:0:0_3ec9c/2
+ACCATATAATATCCCAGAGACTCTCTGTTACATAAGCATGATTCTTTTTCAGACCAGAAATTGCCCCAAAGGCAAAAAAAGTGCCTTTTTCGGTGCCACG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1297346_1297791_1:0:0_0:0:0_59961/2
+TTTTTAGAAGAGAAAACATTAAAAGGTCACTCTCTTTTTGATATGATCACTCCTAACAAAAAAAAAATGGAAAAGAACAGAACCTTCCCAGATTGCCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2041224_2041677_1:0:0_0:0:0_4d4c9/1
+TCTCCGGCTAATTTTTAAAAAAAGAGGTACCTGGACTACATTTATTTAAAACACACAGGAAGTTTTCTCTTGTTTTCTTTTTTAGGGCTTATTATTTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1823589_1824075_1:0:0_1:0:0_1bce6/2
+TTTAGGCTTGGTGCTCAGAAGCAGAAACATTCACGTTACATACATATACACCTACTGATCTCTACAAATTGTAGAGACTGCAATACCATGGCGCCATTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_969817_970283_0:0:0_1:0:0_457e7/1
+AGTGGCCTTTGAATCCATACTAACCATACGTTCAAACCTTTCAGGTTACCTTGTGTATCAGTGCTGAGATCCCAGCGTGTCTGATTTATATTATACAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_544708_545209_2:0:0_0:0:0_2ee6f/1
+TGAGATGGAGAAGCTATAAGTAGAGACAGAGGCATGATATAGCAATCCCACCCAAAATACAGTCAGGAACGAAAAAAAAAAAAATCGGAGTGTCCACTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1865307_1865718_0:0:0_1:0:0_5120a/1
+TGCTGAAGATTATAAAAACAGAGCTTGTGTATTTTGAAGTGATGAATGAATAAAAAGTCATAGCTTTGTGTAGTTTTTTTTATGTGAAACTCAATTTGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_163920_164495_0:0:0_1:0:0_42001/2
+TACCTATTCCCAAGTTCAGGGTTTTAAGCAAAGCAAATGGGTGGGACGTCTCTTGTATTTGCTGGTCTTTATGTCTGTCTCAAACTGTTTGCTTTTTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_279939_280312_0:0:0_2:0:0_17226/1
+GACTCATAAATATAACAAAAAAAGACAAACGAGTTCGTTGGAAAAGATATTTTGTAGTTTGAAAAAAATCATGGCCAACACTGTCTTCAAGAAGCTTATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2275574_2276021_2:0:0_1:0:0_2c6d8/2
+AAAAGAAAAGAGACTCCAGCTGCATTTTTTTCCAATTTGCGTTCCTGCCAGGCTGAAGACCCCGCTCTTTGTTACAGTGGCTGTCCTTACCAGGGAGACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_384864_385336_0:0:0_1:0:0_29ff5/2
+AAGTGAGGTAGTGAAGACCCCTGGGGAACCCCACCCCCACTCTATTATCTCTCAAATTGTATTTTTCTCAGTCTTATTATTTTGAAACCTTATCTGCATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2452162_2452650_1:0:0_1:0:0_1f3f7/1
+ACCAGCCAGGCCTCCCATTCAATTTCAACATCATATACATCAATAAGCTTTGATGTGAATTCTCCATCACTGCAGCATTGTCTTGACCTGGACAGGGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_690912_691344_1:0:0_1:0:0_2ee5b/2
+AACCTGCCCGTCAGAGGAGGGAGGCATCTATATGATTTATTTACTCCACCCAGATCTCCTCCCTAGGTATCATATACCTGCCTCCCCCTCCTGAGTAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_945947_946336_1:0:0_1:0:0_59972/2
+TCCGAACTTTATTTCCACTGCGGAGAAAAAAAGAGTAATCCTCTCAAAATTCTAGAGCCCAAAAAAAAAAAAAGCTGTAGCTCCCTGAAAGATTGCTAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2274369_2274760_1:0:0_1:0:0_28f51/1
+AATTATATTCCTCACCCCACCATATAGGCACTCCATCCATGGGTAGGACAGTGCCCCCGCCCGCCTGAGCAAGTCATGTACAAAATCTATATAAAATGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_305715_306169_1:0:0_1:0:0_24320/2
+GCATTCTAAAGAAATGCCCAGGGATGGTAACAATGTGGCTTTTAAACCTCTTTTATGGAAATGCACATAGCAGAAGATGGGGTTGTTGAAGAAAAAGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2485335_2485801_2:0:0_2:0:0_48005/1
+TAATAAGATGCAGGTAGGTGGAAAATTAGCCATTTAACAATTACAGGGAGGTGCCAGAGCTTCTTTACTGATTAAGACAAAGCCAGCGAAGTGGTTGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1061942_1062326_1:0:0_0:0:0_35ddb/1
+AGTGATGTTCTTAGTGAGAGTGAATGAGTGTGTATGTACAATAGCATCCATGAAGCATTTCAATGAAGAACACAGAATTACCAATGCCAGTTCTCATTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_225617_226092_0:0:0_1:0:0_57fa6/2
+TGGATAAAAGAAAAAGAAATCCTGTACTAGCCAGTCTCCAGCGGCTGAGGTATTCTGTGTGTGTGTTAAAAAGGGACATGTGTTTCAAAAGAAGAAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2208004_2208554_0:0:0_1:0:0_19eb2/2
+AGAAATGAAGGGTTCAACTGTCTCACTGGGAAAAAAACTCTTGAATTCCAGAGCATCACCACGCTGCTTTACATCATACATTTTGTGGCACAACATCTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1606578_1606961_0:0:0_1:0:0_19f1d/2
+ACAAATACATTTTAGGTCCTTTCTCTGTCTGACAGAGGCTGGAACCAATCTCATAAAGGTATTGTTGCCCAACTCCTCGCTTGGAATGCCCAAGTTAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_721562_722048_2:0:0_2:0:0_235be/2
+ACAAAGATTAGAATCAACTACAGCCTTTACTGTAACTCTTACCAGCCTGCTGCTAATGGTTCTGGTCTCGTCCCCACCACAGCGCGGTGGCCTTTATTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1465547_1465947_1:0:0_1:0:0_5a37d/1
+TTCAACCCTGAATTTGAAACCCTTTTGGCAAGACTGCGCTGGGATATTTCACTCCAGCTTACCATTGAAAGAGTCTCTCCATTGCAACTGGAGAGTGATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2296606_2297070_1:0:0_0:0:0_447f/2
+GGAATCGACAAAGTAGAACAGTACAGTGCTCACTCTCTGGTTACATGAGACTCAGGGAGATCTTTCCTTTGAAGAGATTACGCCTGTTCTATGTTTCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1211272_1211725_1:0:0_2:0:0_116de/1
+GCCTCACCCAAAGCAATCCACATACCAGTAAAAAAAATATCTTTCTTTTTAAAATTAATCCTCAGGCATTGCCATCTAGTCCCTCCCCCACAGAACACTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1941960_1942469_2:0:0_1:0:0_37226/2
+TAAAAACCCACTAGAGAAATTCTTTTGTCAGTGGGAAATGAGCAGCTTGAACTCAAGCAGGAGATGATATACATATCTTACACACACTGGGGACACTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1530642_1531139_1:0:0_0:0:0_1e740/1
+GAAGCCAGTGATATCATGGCTCATTAAAATGATATGTGGCTTTGTGCTCAGAAAAAGCAAAGTAGCTATTCAGAATAAAAGAAATGTTATTTTATGTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1342664_1343037_1:0:0_0:0:0_36625/2
+TAAAGAAAATTTTCGGTTGAGTTTAACCTAGAGGCCGAGTAATGATTCAACAGATCGAGGCAGCGTAAGAAATTTTTTATATTAATCTCCTCCACTACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_188854_189272_1:0:0_1:0:0_45239/2
+GGGTGTAGCAACTTCATTAGGAACCAACTCCCTTTGTTTTTGAGAAGAAATTAAAATGTGCGAATCTCTACTAAATTTAGAATCTTATGAGTTTCAGCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1561955_1562435_1:0:0_2:0:0_59b14/2
+TCAATGGCTGGTCTAGCAGTCTGGGCTCAAGAGGTTGGTGATGCAGAGCCTGGGAAGCAGTCGTCCAGGATGTTCCCAGGAGAAAGAAAGAAGTAGCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_796512_796985_2:0:0_0:0:0_5a96e/1
+TTTTTGTGGCCCTCCCAAAGCCAGTCTGGAGTCTTCCTCTTTGCTATTTTTAAAAATATTGCATCTGAAGAGAACAACATGAAAAACAAATTAAGATGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_934398_934936_2:0:0_0:0:0_5899e/2
+GTGAACCTCTAGTGGTGGTTCCCATTGCACTCTTTTCACCCAGCCCCCAGCCCATGCCCCTGAGCATGGTAGAAATAGCAGTGGAAGAACAACTTGTCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_783511_783958_1:0:0_0:0:0_30c19/2
+CATTTTTTTTCCTAAAATTTAATTCCTGAGGCCGCGGGCATGGTCCATGGTGCTGACTGTTCTACCTCAATGTTACAGAACACTGGCAGGCAAAAAGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1188425_1188887_1:0:0_0:0:0_1aff/1
+ATTTTTGTACTACTTGGAAAGAAATATTGAGTGTGACACACACTCTGGTTTTCTTGGAATTTCCTATTTTATATACAACTACGTTCAATTATAAATGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_727874_728417_1:0:0_0:0:0_46210/2
+CATAATGCATCCACTCACAGCCATGTACATACCAGAGTCTAAGGTGCCAGTGTGTGTGTGTGTTCAGTAGCTGGGATGGTCTACTAAAATCAAACATGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1929836_1930263_1:0:0_1:0:0_2130a/2
+CATTCATTTCAGAAATAAAAAGGAGAACGTGGTTCCAGGTATATACACATGCTTTTGCATTTTCATTCAATCAATCACAGGCAGGAAATGAATGTCTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1687468_1687968_0:0:0_1:0:0_338ad/1
+GAGGTCAGGGACAAGACTTGTTTGCTCTGCCACCGTGTTCTGGCAGCCACTGTGTCAGGCAATGTAAAGAGGAAGTCACCTGAGTAGATTTCTCTCTATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_887757_888278_1:0:0_1:0:0_28fec/2
+AATAATTTATAGCACCTGGTTCTCCACATAGGTGCATGGGTAAATAGAGCAATCATTAATGACTGCTTAGGGTCAGGCAAAAAAAAAAACTCCCTTTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_599695_600137_1:0:0_0:0:0_1c4e6/2
+TGAGGAGAATGAGGAAGCACAAATAATTTTATTTTTATTGTTTTATTCCCATCCCATGGCGACCGCTCCTCACTCAGTTTGAAAAAAGGAAACTCTGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_549749_550222_1:0:0_1:0:0_257b7/1
+CAGAAAGTTTTCATAGCTGGGACTTTTTTTTTATGTTCATTAACAATTAATAATTATGTAGGATTCCAGCCTGAGTCTAATGATTTTATTGGTAACTGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_805338_805773_1:0:0_1:0:0_439ec/2
+TCTCGGCAAGGAAGAATGTCCTGGGTTAGGTTCTGGATTAAGCAGATTTTGCCATGAATAGAGTTTAGGAGGATTACTCCTCTTCTAATAATTAAAAAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1500548_1501015_2:0:0_2:0:0_1f545/2
+TGCTGTAGAAAAAGTAATTTATAGTCGTGGCATGCAGTGGAGCAGGCTACATTATCAAATACATTAAAAAAAAATATCCAGGTTTGAAAACCCAGAAGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_270908_271354_0:0:0_2:0:0_2f95/2
+TATACTTCAGGTTGCAACAATTCCCAATAAATGATATGATATTATGTTTGGACTTCACCATGGGTGCACCACCCACTCATATAAACTGCTGAATTAGATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_116133_116605_1:0:0_1:0:0_51122/2
+TGGGTCTTTATGAGCAGGCCAGGAACCTGGCCTAGGAGTGATTCAATCATCAGGAACCTCAAAACCTATGTGGGAGGGCTTTCCTCTTTCCTATGTTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1792936_1793315_0:0:0_1:0:0_f55e/1
+AAGATGGGATTTGCAATGGCGTCCTTTCCTTGCTGTCTAACTGTGTGTAGAAAATTTAACTCTCAACCTCCATCGCAGCCTGGTCATCAAGATTGAAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2123504_2123978_0:0:0_1:0:0_3f41b/1
+TTCTCCCCTTCCGTGAAATACAAAATTGTTCTGTTAGAATGATTTAGCAAACAATGAATAAAAAAAAAAAGAAACAATATCCACGCTGAAATAAGTGGCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_241817_242282_2:0:0_0:0:0_b605/1
+TAACCCACATATACTGCAGCTGCTGCTCAAGTTCATTGTGTATGTGTGAGCCCTGGAGAAGGTGGAGTGCACAGGTGAACGCCGCTATTTGGAGTGGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_583526_583992_1:0:0_2:0:0_1b679/2
+GAGACCCGATCCAGACCACAAACTGGAGTGCATTCAGTACCCATCACAATCAAAGAATAACTATCTTGAGGACAGAGCAAAGCCATGAGTAAAAACCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2080821_2081281_1:0:0_1:0:0_365c8/2
+GATGTATGCAATCCTCCTCCCCAGCCTTCCCTGCGGCCGTATTTTTTTTATTGGAAAACTTCTGATATTCAATCATCTGCAGCTAATTTCAACATGCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_172494_173024_1:0:0_1:0:0_65ad/1
+TTATGGAAGAAGTTAGACACCGCGCCATTGTTATTATTTCCATGTTAGGGATGTGGAGCCTGGCTTTTTAGGTCATGTAGCGTCGGCATAGGATTCTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1168567_1168984_0:0:0_1:0:0_fa65/1
+TGTTTGCAAGAAATGCACCCACTACAAAGCCAAATGGTCATACCCCACAGTAATGGCTTATGGCAACATATTCCATACAACAAATTCTAAATGTCAGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1451033_1451515_1:0:0_1:0:0_fcca/2
+TCGATCTCAAGGACTACTATATAAATATACTTAACTACCATACGATTTAACTCAGACATAATTTTCTTTAGTTGAAAAGTTCGCTTTTCTTACCTGTAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_810003_810498_0:0:0_1:0:0_54909/1
+CTCTGTCCTTACTGCTGGGCATTTCTAACCTTCCTGCCCGCCGGAAGAGAAAACCCTGTCACCTATGGCCATTTTCCACCAAGTAGGACTGGTCCTACCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1228751_1229201_1:0:0_1:0:0_e3e8/1
+TGCTGCGTAAGGTTGCAGCTGGTGGGTTTCATCTTTCCAATAACCTTATATTTTGACCAATATCTACCTGGGGCAGCCTGGCCTTTGTTTCTTTATTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_396087_396434_1:0:0_0:0:0_d623/1
+AGTGGTGGTTTTCAGAATGTGAAAGTGTATACCATCGGATTGCCTTGGCATGCATAATTATACAAAACTAGCAAAGAAACAGATGAAAAAAGAGGAGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_655426_655936_1:0:0_0:0:0_a0f4/1
+CCAAGATACTCATATTAGGCTGGACACCAAACAACTGCAGAGGCCCCATTTTCAGTTGTGGATGGGGGGGACTATCTCTCAAAGTAGGTCCCATTGAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_345960_346290_1:0:0_0:0:0_18206/2
+GAGCATCTCCCCAGCTCCAGACCCGAAGGGCTCATAGAGAGGCCCCCTGTGGTTGCTGTCTTCATAGTCAATTCTTAAACCCAGGTAACAGTCACACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_584026_584507_0:0:0_2:0:0_19cf2/1
+TCACTCCTTTTGTGACCATATCAAACTGTCTCAATGTCAAATGCTGACCTGACCTCTTACTGGGAATATCATGACGTCAAAGATGAGTGGGAGGCAAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_633672_634132_0:0:0_1:0:0_12adc/2
+CTCCCTCCTCCAAACTGAGGTGTGTGTGTTTTGCCAGCTGGGTAGGTATTTCTGCCCTTCCATTTGAATATCTCTGATGGTTATCTCACACATCAATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_834750_835319_1:0:0_1:0:0_3e8b2/1
+CACTTGAGGTATCTGTTACTTCAGAGTTGCAGTGATGTGCCCCACTGTGCCTTTATATAAAGAGAGTGGGTCTTTGTCATTGTTGATTATAAAAGAATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_456469_456903_0:0:0_1:0:0_326f3/1
+TGGGGTAATTTTGTCCCAGCTACTCAAGTGCTGTGCACTTTGCAGGAGATAAAGGCAGGGGGTATATTAAAGTCTTTCTGGGTGGGCTTTGACTTTGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1244935_1245409_1:0:0_1:0:0_525be/2
+TTTATTGATTCTTTAGAGATGCATGTATTTTTTTCTGCTGACTTTGGTGTGAATTAAAGACTTGGTGGTTAAAAGTAGGACTTCAGAACACCAAGGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_21923_22338_1:0:0_1:0:0_3a450/1
+GGAGTGCAGAGTGGTCAATTACTGGTACACACACAGGGCTGGTGGCCTTAGCCGTTATCAGGAGTCGCATGGACGTTTAATTTTGGCTATGCATTCTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1609456_1609892_1:0:0_1:0:0_27b4f/2
+TTTCTTGATCTCCCAGCAAGCTACAGAAGTAGAGATCCTAGAGACAGGGATACTACTGTTTTGGAGAACTCCTATTTTTATCTAAAAGCACATATATGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_328471_328934_1:0:0_0:0:0_5a335/2
+CAATAATACTTTTTCCATTCATACAAATGATGAAGTTACAAACAGGTGTGGACGAATAATAACTACTTGGATGCTTTTTCTGAGACACTGGACAAGCACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_274980_275463_0:0:0_1:0:0_4ff75/1
+ACATGCCTGTAATAAATTAATTTTTAACCAACATGATCCTATATTGTTGGACCTCCAGTCCCCAAGGGAATCCCCTAATGCAAGATAGCAAAGTTGTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1454057_1454495_2:0:0_0:0:0_59cb0/2
+AGATAAAAACACTGGACGTGGTCAATATTCTGCTAATTTAGAAGCTTTGTGACCTGTCATTGTGGCCGCGGCATCCCCACCATTCCTGACCTCTGCAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_309309_309730_2:0:0_0:0:0_43a5d/2
+CTGCCCTTACTATATAAAGGGAAATACTTACAAAATTATTTAAATGCTACAATAAAGTGCTGACACTTAAGCGTGCAGTGCAGAGGGCTGCTAAAAAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_802151_802569_0:0:0_2:0:0_1ca9d/2
+TGGTTTCTCTCTCTCTGAGAGCATCCATGACTTAATTTTACTGGCACTGCAGTAGAGAATGTGAAAGCTATAGTCCCCCTGTACATACAAAAATTTTTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_503240_503670_1:0:0_0:0:0_42e53/2
+TAACATGGGAAAGGACTGAGACCTGATGCCATTATCTGCCTTGGCCTGAGGCAGCCTCCCAAAAGTAAGTCTGTGATGCTGAGGCCAACACTTATTGATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2168539_2168949_0:0:0_2:0:0_43028/1
+TTATCCTAATTCCTGGAACTACTGCCGCTTCTCTAATTCTGTCTCAGCCCACAATCGTCTTCCTCATTTCAACATAAATATATCGTGTGAAATCCAATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1232395_1232830_1:0:0_0:0:0_1bf/2
+ATAGTGGTGAAGAGAGGAAGGAAACATTAACATCTTTCTCCCCCAGCAAATACATATATCTCCTGCCTTTATAATTTTTTCAAAGGTTTAAGCTAGAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1259452_1259977_2:0:0_0:0:0_466ac/1
+CACTGCTCTTTAAAATATATGACTGTCCCTAGGCCCGATATGAATAGTTATGAATAGAAGTCTCATTTTTAGATGCAGAAAGCTGATCTTACATGTGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_731035_731483_0:0:0_1:0:0_35856/2
+CTTATTCATCAATCCAGGGCAAGCTAGACCAGGTTGGGGCTCTCTCAGGACTGTAAGATGAATAGTGTTCCAAGGTGTGACTGACAGAAACCACCATGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2116234_2116702_1:0:0_0:0:0_2d342/2
+CACTTTTTGTTGCAGAGGTTAAGTCAGAGAGACGGCCAAGAGCAATGTTCCAGGGTATTTATTTAAATTTGGTGAGCCATGAAAAACATGGGGGGATACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1272473_1272861_3:0:0_1:0:0_59723/2
+CTGGCCCTGGGGCCCCTGACACCTGTGGTAATCCTCAACATATGATTTCTAGATGGAGATCTATCTGTTTTTGTGGGTTAATTTTATCTGCCATAATTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_785501_785978_1:0:0_0:0:0_382cc/2
+ACATTTAACTAATTTGCAGTAGAGTTGCGGGTGGAAGTCTCTATAAGGCAAGAAGGGCAGATACTAAACAAATTCTCCAGCACTGGAGTGGGAATGGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2159968_2160436_0:0:0_1:0:0_d0b9/1
+CATACAGAAGAAGGCCGCCGCCCAGCTTTTTATCCATTTGTTGCAGCATCTTCTCCTAAATCTCAAACTTTGGCTAGGAAAACCTAAAGAAAGTCCAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_646606_647000_0:0:0_1:0:0_3d99a/1
+ATTCTTCTGTATTCCCTTCTGCCTGTTACATCCTCAGCTGACAAAGGTATGCTGAGACCTGAGAGACACTTTTCATTTTCTTCGAAGCGGCCGTGGCCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1127368_1127813_1:0:0_1:0:0_3f8db/2
+GCGTAGAAGTGTACCCATGCGCTAGATGTGTAATTAGACTTTTTTGTTTTGTACCACTCATTCTAGGGTGACCACCTTCACACCCAGCCTGGTTTAAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1773540_1774035_2:0:0_1:0:0_10040/2
+ACAACAGGCACAGGCAGGGAAGATGATGAACCATAAAGGGCACCATGACTATTTTTGACATATTTTTAGGAGCCGAGGCAATGTATATATCTGTACAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1033689_1034071_0:0:0_1:0:0_2ea13/1
+ACCAGCTCAGGAAGTGGCGTGCGTGTCCTGGGGCTTAGAATCAACATTTTTTCCTCCCTGGAAATGTAATCTTGGTCTCGAAGGATCATTCCCATGTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1942649_1943086_0:0:0_2:0:0_2dfe4/2
+GTCTAGACAGTAAATGAAGGATTGCATATGAAAACAACTAGAGCAAATCAAGTAAGCAGTAGGCAGGAAGGGCTTGGGTTGTATATATTAAGAGTATTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_388127_388631_0:0:0_1:0:0_46c68/2
+TCTTTGTTTTGCTCAAACGCCCTCGCACCCATAGACCAGCAAACAACCAAAGAAAGGGGGTGCTGTGAAAAAAGAGTTTGAATTGGACTTGACTTTGCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2400031_2400487_1:0:0_0:0:0_43964/1
+ATATCTTTACAAGAAGTCATTTCATCTTATCGGGTCTCCATCCCCACTCATTTTGGACATTAGCCTTAGGAGCATTTGTGAATGAAGTCTATAAAAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_33561_34030_1:0:0_1:0:0_12d9b/2
+AACTCAAAGTGAAGTGGCATTGGCCAGTTTCCATATCAGTGATCTCTTTCCCCCACACTGAGTCTTGTCTACCAAAATTTGAGTCTCTCTCCATTTCATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1895084_1895560_1:0:0_0:0:0_4a60b/1
+AAGTATACTTGGTTTCACAGTGGGATTAAAGACACACCTCTCGGGAGTCTCAAGGTTTTGGTTTGTTTTTTTTTTTTCGCGTGTCTTATAACATTTCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1246421_1246847_1:0:0_1:0:0_49660/1
+CTGTTTGCATTTTGCAATGGTTCCTGAGGTCATGAGCCTTTATATAAAGCCAGAGACGGGGTTTCTTCATTATTATGGCCCTGCAAGGAAGAGGGCATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2373672_2374210_0:0:0_1:0:0_39f1/2
+CAGAGCTTAATCAGGGGAAGGAAATACAAAATTGAGTAATTTGGGAACTGGACCGATGCCTTCCCACCTGGAGGCCAAGGCATTATGGAATCTCTTCCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2078991_2079383_1:0:0_1:0:0_57546/1
+TTATTAGAAACCATTTCATAAGCAGGGAGACGGGGGGGTCAATTCTCAGCTCATCTCACTGCATAGTTATATCTACCATATGGTATTTCAATTTGGACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_652011_652454_1:0:0_0:0:0_4bea/2
+TTTGGTTTTGGACATTTACTGCAAACACTGAGACAGTGGAGCTGAGACAGCGTGGCACACGCTCCCTCACAACATAAACATTCCCCTGCTTGTGAAGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2316072_2316470_1:0:0_0:0:0_f3fe/1
+CCGCCTCGGCTCAGAGGAATATTATCCCATCCCACTATGCTATCACAATCATTATTGACATTGATTTGTGTGTGTGCTTGTCTCCTCTCGATTCTCCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1542701_1543129_1:0:0_0:0:0_2d526/1
+GCCTGCACTCTGTCACGTCTGCTTTTTCTATAAACTCCTATGAAACCTGCCATGTTTTCATTTCACCCAGGTGAGCCACATCTCTTACATTAGAAAGTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_815662_816060_1:0:0_2:0:0_2bb33/1
+AGGCATACACACCCCATACTTACCACTGGTCCAAATAGATTCCATGGCAATGAAAACCTAATAGTACAAAGTATGAGAACTGTGGTGCTGGCAGTGAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1035050_1035474_0:0:0_4:0:0_4b0be/2
+TTAATCGATATTAAGACACTATCTTTCTTTGCTTTTCTGCGGACCCCAAAGATGATTGATGAAAAGTTTTTACTAGAGACAAGTATGCAGCCTGCTTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_545427_545880_0:0:0_2:0:0_48528/1
+TATTTAAGGGTATTCCCCCGTCGGGAGAAAGGACCCTGACATAGTGCTGTGTTAACTGGCTCAGGAGTTAGTTCTGCCTTTAATGATCAATGCTTGAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_275764_276219_2:0:0_1:0:0_40d36/2
+AGGTTGGGAATCATCTCCATTGGTAAAAATTAAAGTGGGGACAGAGGTCTAGTGTCTCCCAGCTGGAGTGCATACCATCTAGGAGCATAGAGCCCAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_486577_486958_1:0:0_1:0:0_51069/1
+GGTTGTGACATTTAAAGGGAGGCTTTCTCCAAACAGAACTCATCCTGGCTCACTGTGAATAAAGCTATGGCAGGAGGCCAGTCCTTATGAAGAAAAGGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1566119_1566629_1:0:0_0:0:0_263b6/1
+ATTGCGTAACTGGTACCGTCTCTACTGCACTCAAACTCTTATTCTAGTCGGAGTCAAATTATTTTGATTGATTCCAGTTGGATGAGGGAGGAAGGCAACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2124964_2125334_2:0:0_1:0:0_13e38/2
+CTTTAACCATGGGATATATAGGACTCTAAATCCATCTCTTTTAAAAACATCTTAAAACCTTGTCTGGGTTGGGGGGCGAGGAACTAATCTTCCCGTATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2388167_2388675_2:0:0_2:0:0_59432/1
+GAGATATTTTTTGACACTGCAGGTGTTTCCCTCTTCAGAGTGTTAAATTTCACCTCTGACCTACTCGGAACAGCCAGTGCATTTTTGTATGTCTTTGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_882396_882921_1:0:0_1:0:0_1ed8/2
+GATATTCACAAGGAAGAATTATAAAATGGTGGTGCTTCCGCCTGCCCCAACACCACCAACTCCTTCACAAGGCTATTGTGGCTCACACTCCAGCAGCGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1743605_1744093_1:0:0_0:0:0_4552b/2
+TATACATTACAAACCTCCTGCGTTGAGAATGGAAACAGAGTTGGTGCTAACAGAATAAGCAGTTCTTTCCTTGCACCTGCTAAGTAAACAAGGAGGTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1651508_1652003_0:0:0_1:0:0_387b3/2
+TGAAATGATGGCTATAAACAATAATCTCCAAAACTGGGTGACGTTGTATCCTGACCATTCAAATGAATTGGAAACACTTGACTATTACTTATCATATTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_637804_638263_0:0:0_1:0:0_1d568/2
+CGAGTTATGGGACAGAAAACTTGTGGCCAGTATAATAATATTGGGAGGGTGACAACACAAACTTCAACTGAGTAGCTCTCTTGGGTTCACATGCATCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2102258_2102716_0:0:0_2:0:0_f7a7/2
+ATATGGAAGCCTGTAGTAACTAAATGGACATGTAAAGTATTTGACAGCAGCAGGTCAGAGTCAAACTTGCTTGTTTTTAAAATACAATTTTCTTGTTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1012167_1012588_0:0:0_1:0:0_57b8d/2
+TCAAACACATTCAAAATTGCTGTAAGGTTCATTATTATGTTACAGGGCCCTCCCTTTCTCACAGTGCTACTTGGGGGTTTTTTCAGAGACACTCATGGCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2388852_2389281_2:0:0_1:0:0_2db92/1
+ATAGCAGAAGGAGCAGAAGAAAAGATTTCTCTACAGAATAGGAAACATGAGGTTAAGTCCTCCTCACTGCATGGTTTCAAAACTGAGGCTCTAATATTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_472120_472511_1:0:0_1:0:0_4ca58/2
+CACTGTGTAGAGCCTGGGCACAGTCATTAAAATCTGCAGTCTGGGGGCATCATTCATCTAACTAAAATCCAAATCTTAAGAAACATCTGACTTTAAAAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_128115_128519_1:0:0_0:0:0_4338f/1
+TGATTCTTTGTCTTCCCTTTTTTTGTCTTGACATTCTCTGACCAGCTTTCACTGCAAAGCCTCGGTGCAGGCATCCTCAAGGCCTTTTTGCCTTTAATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_786022_786485_2:0:0_1:0:0_3b129/1
+TTCTCTGCCATTCATTTCTCTGCCACTAAAGATAATTTGGATGTTAGAATCACATCTTCCCCTCTGTACTTATAAATGCATTCTAGGAGGAAATAAACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_154162_154573_1:0:0_0:0:0_50811/2
+GTGTGCATGCTGGTGAGCGCAATATTCTGTCTTTTTTAGAACAATTCTTGTGCTAGACCATGCCAACATGATCTATTATGGAATGTATTTGTGGAATAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_392960_393516_1:0:0_1:0:0_5053f/1
+CTGGGCAAAGTCCTGCCTCACTGGGCCTCATGTTGTAGAGACAGCTAGTATTATAAGGTAAAGCTTGGCCAGACCCAAGATTATCTTAGAAGGAAATTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_725662_726079_0:0:0_1:0:0_3dccd/2
+TTTTCAAGCCCTTTCTGGCCCTGCTTATTTACCTAACAAATCACCCAGGAAGACTCTTATTTGCAGATGTAGAGACGGAATAACAAAAAATCACTTTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1134864_1135288_1:0:0_0:0:0_24e3f/2
+CCTAATAACAGAAACAAAAACCTACCTAGTAATGAAGCTTCTTTTCTGGAAAGACAGTGCTCGTGTGTAAGTAGAGCACAATTTCTCACTGCAGTGGAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_821099_821635_2:0:0_0:0:0_4ccf6/2
+CTCACATCCACCTCGTGATCAGGCCAGGCATCAACTAATGGTGGCAACAGGAAATTGGATCACTCACTGATGATGACTTCAACCATTCGAGGCCTTCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1339732_1340209_1:0:0_1:0:0_10255/2
+TCTTGCCTTTGGTTAAACCTAGTTTAAGGTCGTAAGTGCAGGTGCAGTCCCCAGGGGCTGAGGTCACAGTGCTGCTGTATCTGTGTGAGCCCCCCCTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_199671_200143_0:0:0_1:0:0_77b4/2
+CCTTATAATGGAAATAGCATTTCTATATACATTTTTTTTGAAGGATTGTGATTCCCCAAAGTCAGGCATTGCCCATCTTCAAAAGTACTATGTCGCCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1825280_1825724_1:0:0_0:0:0_9d70/1
+GCTACGTCCATGCAAAGCCAATGTGTGTTTTGAGATAAACAAAAAAAAAAATATAATCTTGGAAAGCAAATCTTAAATAAGAGGACTACAAAAAACACCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2159702_2160193_1:0:0_0:0:0_1047e/1
+TGCTCTGTCAAGGTTTTGAGAATCTGCCCAGGCTGAGGAAATATAACAGACTTTGAAACTCGATCTTAAAACCCATCTGGTGGAGACACCCGCTCCCTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1432166_1432709_3:0:0_1:0:0_193b6/1
+CATGTGTTCTGCTACCTCGGGCCAGAGCTAAACGTTTTCTCAACACAAGCTAACTGCACTTCTTTCCCCATTTTGAAACTACAAAACAACAGCTTAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_245580_245896_0:0:0_1:0:0_4452f/2
+AAGTATAAGACGGACTGGGAGTAACTCTTATGCCCTGTCCTGGAAGGCCTCCTGCACTGGTGCTTTAGCTATTCTTCACCCCATGAGGGTGAGAAAAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_579165_579649_1:0:0_1:0:0_1266a/1
+ATTTTAATATTATTTATCCATTGAAGGAAAAAAAAAAAGCTAAAGATACATAAATAATATGGACTGTAATCTTGGGCAAAAGATTCAATCAATACCTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_26646_27051_1:0:0_0:0:0_11cd0/1
+GTCACCCATGATCCACGGTTGGGCTCTGTACTTTTGAAGCCATCTTTAAAAAGAGGATTTTAATACTCTCTCTTTTGAGATGTCTAGGTTTCACTTTAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_742056_742516_1:0:0_0:0:0_33500/1
+CATCCTGTCGGTTTCAACTTGCCAAGGTTCTAGTTTTTTTTATACAGAAGAAAGAAACACTTACAAGTCTTACTTTAAGCTGAGGTTAGGAATCTTAATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_391383_391813_0:0:0_1:0:0_2f6bf/1
+CATAAGCACCATCATGCCTTCACTTCCATATAATTGACTAAAAAGGTGGGATTAAGATGGGGATTATAGACCTGCTACATGCATATACTTACCAAGAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1096180_1096590_1:0:0_1:0:0_3c356/2
+GCCAAAAGAGAGGTACTCAGAGACAGAGAAAGAGTTCGAGGCTGGGAGGATGGAACAGGAGAATTCCGTTTCGGCTCACTTCTCTGAGTTAAAGTTTTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1074972_1075420_3:0:0_0:0:0_1fed3/1
+AAAGAGAACCTGGACTGCGTTAAATTTATAAACAAAAAACACCTCACCAACGTCTCTACTACCAGAAATCACCATGTTACTGCTTCTGGACAACTCTGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1845571_1846058_1:0:0_1:0:0_42ae3/1
+TTTTTTGCAATGAGTGCATCTTAAAGGACAACTCTTGCTCATCGGCTAATGTGTGTGCCACCATGAATAAAAACAAAGACTTCTCTTCACATTCCTTCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1616894_1617277_0:0:0_1:0:0_4da7a/1
+ACCACATCTACTTTTCTTGTTACACCCATTGAAATAACTATATTTTTTCTTCGTGGACGGCAGGCACATCTCAAGCGCTTCATAATGCTATAGTAATGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1103329_1103800_1:0:0_1:0:0_1f640/2
+TGCATCCACAGTTATTGAATTGAACATTGCAGGCAAGTTTGTTTAAAGTGGCACGATGCATTCCTGGGCGAAACCTCGAATGAAAATCAAAATCGGATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_156313_156688_0:0:0_1:0:0_59155/2
+AGCATTTTGTGAAGCTGAGTCTATGACAATGAGCCTACCCTATGTGTCCATTTTGTACATGTAGTTAACCAAAAACTATTTTTGTAGTACAGCCACTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1275129_1275482_1:0:0_1:0:0_4cde9/2
+CAATGGAAAGGTTTTTTAAAAGAAATGGAACGCTTTTAGTAACAAGACCTGGTAATCCCAAAACCTTTTCATATTCTTGTGTGTGTGCAATTTCAGGAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_164871_165320_1:0:0_0:0:0_3e785/2
+CATAACTGTATTTTTCCTGTGTCAGGAGGAAATGGATAGAGACCATCCCAGGCTCATTCTGAAGGAAATGCTGCCTTATAGGGATAGCTCACTGATAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1810820_1811251_0:0:0_1:0:0_1958c/2
+GATCTTCCTCCCCAGCGCTTGAACCACTGTAGTCCCCGTGGGGTTTTAAAATAGCCATCCTCTTCCTGTGGAACACCTATGAAAAGAATAGTTTTTTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2463948_2464317_0:0:0_1:0:0_10a16/1
+AAGCTCACTTTCTCTTTCTCTTCAAACCTCTATCCAGTTTCACAGAGTGGAATAATATCTATCATATCTTCTTTTGATGGGTGGACAAACTCCTGCTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1165604_1166011_1:0:0_1:0:0_32fee/2
+TTCAAGACTCTTTCCTCGGCTAACCTTCACCTGTTCACACAGGGCTTCATGCATGTCTTAGTCAGAAATAAATTAACATGTCCTTACTGGGGATGGCGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_182437_182891_0:0:0_1:0:0_49d6e/2
+ATCATCTAGTGTTTTGTAGAGACAAGGTCACACGGTGAAATATTTTTACTTTTCCTGAGGTGAAAAAACAGTCCCATTTCTCACTGCACTCCCTACCTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1965146_1965621_1:0:0_1:0:0_c1de/1
+GATGGTTAATGTAAACCTAATATGCAGAGGTGGTGGGTCTGGCCTCTCTTTTACTTACAATAATCTTATCACTTATCCTTCCTAAGCATTAGAGAATTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2136774_2137252_1:0:0_2:0:0_23a9c/2
+TTTTTCAATAATTCAAATTAAACTTGTTTAATTCTACAGTATAGCTTTAAAACAAAAGTGGACTCCAAAAAGACTTATTCGAAAGCCAGGCCTCAAGAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_541276_541761_0:0:0_1:0:0_24fea/1
+CACACAAACATTTGAAGAAGCTGCTAATAATTAGAGTCTACTGTAATCAATTAGCTGGAGTTCAGATACTTTTGGAATGTAACAGAGCAAAAACAAATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1431742_1432224_1:0:0_0:0:0_a166/1
+CTAGACATGATGTTTTCCAGCCAAATAAAAATAGTTTCTAATGGGCTCACTGGCATGTTGTTTTCTTCAGAATATCTATCATTTGAAAGGTGGGCACTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2206556_2206980_0:0:0_3:0:0_30ca3/1
+TTAACTGCTCTGCAAGCCAAGTCATATTCTCACCACCTCCACCCCTTTCTTTTTTCGTATATATGGAGATCATTTTTAAAGAGGTCAGTGACTACAAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_594534_594954_0:0:0_1:0:0_1097d/2
+GACATTCCAATATCATTTAAACTTTAGGAGTTCGACTGTTCCCACGGGATTACCAAGTGTATGTGGCGCCTGTAGATTATCTAAACTTTTTCCAATTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1129414_1129907_1:0:0_0:0:0_5a23c/2
+AGCCTCATGCCCTTTGACTTGGGCAACAACATGCTAACAAGGGCTGGAGCCAAGAGATTCCCTATTCCCTCCTTAGAGATGAATTTCGCCGGGCACCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1383645_1384158_1:0:0_1:0:0_3df47/2
+CTGGAGGCTGGGCTATTATAACAACAAATAAAACCTACACTCCATTTCCCATAGTAACTCTGTCGCTGGCAAAAATTAGTAGAGACCTTCCTTTACAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1296920_1297291_2:0:0_1:0:0_1752b/2
+CACCGAGCGTGAAAGTGGTATAGTAAATTGTTCCTTGCTTTGTGATCTCGGGGGCTTCCCACCCTTGCCCCAACTCTGTTTCTGGGTGAAGGAGATTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2161442_2161802_1:0:0_1:0:0_33bf7/1
+ACTCTGTCTCACCAAAGTTGTCTACTGTCTCAAATATCAGTGAGCAAAGGCCCTAGCACATCTCCTGGGATTACAGGCCTGTCATTAGAGTAATCCAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2011035_2011482_1:0:0_0:0:0_23b4d/2
+ATAACAAAGTGAGCGTCCCCCACCCACATTCTTATGAATCATGATGGAGTCTCAAAGAGGTCGCAGATCTAGAGATATCTAGATTTCTCAAAAGGAAAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_185178_185664_0:0:0_1:0:0_e226/1
+TTTGGCCTCACCGGAAGTCGCCTTCATAATCTTACCAGTGCCACCCTGGTACATAAAGTTTAATTTACTGTTAATAGGAAGGATAGATAGTCTCCAATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_30239_30726_2:0:0_0:0:0_514f2/1
+AGGTCTTCATTGAGTATGTGGGCTACTAACTTTGGGTTGAATCCTTGACCCATGAAGCTATTTACTACAACCCAAACAAGATATGGCCAAGCAGCAGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1103361_1103747_2:0:0_0:0:0_36943/1
+TAGCTATTGTGGATAAATTAGCATGTGAGCCCCCCGCATCAATGCACCTCAGTCCACCACTTTCTTCCTTGGCTGCACACACAGGAAAATGGTTTTTAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1542610_1543103_2:0:0_0:0:0_1bc5b/1
+TTCGTAAATTTCACAGATGTAAATACATTAGACAGGGGAAGGAGCCCGCCTCCCGCCCACATGCTACCCCGTCCTAGACTCTGCAGTCGAGGCCTGCCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1873924_1874394_1:0:0_0:0:0_284bd/1
+GTGGTGGACTATAAATGAAGTTTACCCCCGGACCGTCAGGGTCTGAGACATACAAAAAATTTTTTTCTCCATGACAGGTTCATTTCATATACTGTCCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2244862_2245213_0:0:0_1:0:0_25838/1
+TAAAACATTCTACCATTTTACAAAATGAATCCGGGAACATTGTTGATCCATGTGCCATTGCTTTTCCAAATGATTCACAGTGAGACCGGCCACACCATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_557513_557961_0:0:0_2:0:0_2f426/1
+TATAATAATACTTTATGCTGGGCAGAGTTTGCAAACAGTTTGTCTTAACGACTTGCTTGCTGAGTTATTCCTTTCTGATCTGCTGCAACCTCAGATGAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1770030_1770427_2:0:0_1:0:0_52b5d/2
+AGGTGTGACAGCTTACAGGCGCAGCCTCATAAAAATCATCAATGTTTGAATCAAATAGAGGGGAAATTTCACATTTAATTGAGGAAGGACAGAAGATTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_711792_712219_1:0:0_1:0:0_f15/1
+AAAAGTCTGGAATGATTGGCTGAGGAAAAGTACTTTTTTTTTATTTTTCCCTAGACACACACTTATGTTTTGTGTCATCCATGTGTCTCTTGGTGAGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2468066_2468514_1:0:0_0:0:0_6957/2
+AGTCAATCTTGGCCTGGGTATGTATTACCTGGTCACAAGTACTGACGCAGACAGAGAAATTTCAGCCACTCAGTGATTAATAAAAAATAATAATATTTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1104897_1105365_1:0:0_1:0:0_20eaa/2
+TGCCTGAAGAACACAGTCTCCTGGCAACAGAAACTCACACACACACTAACTCTACACACCAACTGATCACTTAAGTAACAGATATTTGTCTTTCTGTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_389079_389549_0:0:0_1:0:0_11518/2
+GCAGTTTCCCCCGAATGGGCTTTGGGTTCAGCCCTTCAAAAAAGGAACAGAGTTCCAAGACTGTATAGATGGCTTCGGCCTGCAGGCTTGCTAAAAATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2125489_2125980_1:0:0_1:0:0_562d1/1
+AAATACCATGATTTTAATGTGTCGCGCCCACTCAACGTCTGAGATCCTCAAGCAATTGCTAAATCATTAATTAAAGACCTTTTATACCTAACTTTACTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1654763_1655150_1:0:0_1:0:0_bab/2
+AACTATTTATATCCATGAAGACAAGACTCTGAATGCACCCACCCTTGACTATACAGGTTGAGATAAGTCTCCCATTTTATCTGTAATTTTTGATAAAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1754431_1754806_0:0:0_1:0:0_5b28f/2
+GAATTGATTGTGTTATCTACTAGGAATGGGAGGCTGGAAAGCAAGAAAGAAAAGTTAAATTTTTTTATTTTCTTTTTCCGAAAACAAACAGGTGTAAGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1417799_1418312_1:0:0_0:0:0_492a4/1
+TTTTATTAAATATTTTTATCTTCCTGACTGAGGTTGCAAGCTGGAAACTTGGGAACCACCATTCATAAAATGGTGAGAGTAGCTGGGACTAAGCCGGGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_357321_357744_1:0:0_0:0:0_3daf3/1
+CTGAGGCTTTCTTTTCCATAAAAAGATTTACAGTATAAAAGTTATCAGTCACCCCCGCCACCCACCAACCAGAGTCTGGAACTCAATATCTACAATCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1084256_1084710_1:0:0_1:0:0_1b693/2
+TAAAGAATTGTATAATATTTCTCTACTTTCAAATCTGCTCTACTATATTTAATTTAAACGCATTCAACTAAGAATATCCACTGCAACTGTGTCTGTTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1996110_1996573_1:0:0_1:0:0_492b4/1
+CTAGACATTTCAACTTCCAAATATGAAAGAAAAGAAAAACAAACCAATTAGGCTGTGATATTGTTTTGGTTACAGGATAGGACTGCAAGGGGGTAAGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1270507_1270946_1:0:0_1:0:0_2a854/1
+TGTTTTTGGGAATCGAAATAAGCTCCTCCCTAGGAAAGTCTGAATAATTGTGCTAAACTTTCTGTGACAGAACAGCGCTTTATAATGAAAGCAAACGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1635452_1635889_1:0:0_0:0:0_2c28e/2
+TTTCCAGTCACCCATTTATTAACTTGAAATGGGTCAAATGCCTACCCATTAGCCATATAATGCCTGTAAGGCTTACAGGCGAGTGGGCAATGGCTGAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_223705_224049_1:0:0_2:0:0_42e7b/2
+TTTTTTGAGACACCTGCACAGTGTAGTGGTGGATGTCTCATAAGTATTGAAATGCGATTGATACCCATCGCAGGCAGAATCTGACCGCTGTGTTTTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1466323_1466835_0:0:0_1:0:0_2a89f/1
+TATATCTGGGCACAAGGTCCAGGCTCTTCATGTCATATAATAGGTTGAGAAATGACACAAAGGAGTGGTAGGGTTCAAAAAAGAGCCCTGCAGAGAAAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1247851_1248388_0:0:0_1:0:0_28ad3/1
+ACTCCTAGCATTGAACTCCAGCTGCATGTGTATCCAGTTGAAAGGATGCAGACATCTGGAAAAAAGTGCTCTGTGATATTCATTTCCACCCACTCCTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_789177_789669_0:0:0_1:0:0_33c68/1
+TGTGTGCAAGTGTTGATAAGCAGACGTGTATAATATATTACAACTGTTTCATATCTTCCTCAGCCACAGCCAAACTGAAATATAGTAATGATGATTTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1924532_1924966_1:0:0_2:0:0_399c3/1
+AATGTTGAGGATATACCATGTACAAACTGCTTTGAGATAGAAACATATTGAGGTTTGGACTACCAAAAGAGCGAACGCTTTGGTCCCTTACAGTATATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1677067_1677387_1:0:0_1:0:0_42688/2
+TGACTAATTCTAGCAGGAGATCCAGCCAGATCAAGACATGTGATATTTCTCCCCTAAATAGAATGTGTGTGCCACTGTTGCAATTGATCTCAACCTACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_306698_307195_1:0:0_1:0:0_327e4/2
+ACAGAAACAAAAAGAAATATGCGGGGGAGGAGTGGTTTGTTAAAGCTTTGTTTTCGAAAGGTCTCACTTGCACTCAAATCAGAGCCCAGAACCTTTTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_106615_107066_0:0:0_1:0:0_929c/2
+ATATTATTTCTGCTGTGATCCTCACTGTGCCTGTTTTGATAAAGTTCTGATTTAGAGGTTTAATTTCCTGGGAGGAAGAAACGCTTGCCATCACCCAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_145995_146481_1:0:0_2:0:0_55bb3/2
+TCTACAACTGAGCACCATGGCCTAAGAATTCCCTATTGCAGGCATGTAGAATTCTACTAGGAAACAAAATGCCGGAATTTGGACTGGAGTTTGATCCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1119910_1120413_0:0:0_1:0:0_535ec/2
+AATTTTTTAGGCTAGCTTTAGAGAAATGGATTGCTTGTCTCTAGGTTTTCTTCATGCCCGTTCCAGTGGTTCAACTATGTTCTCAAAACCATCTGCTACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2047007_2047503_0:0:0_1:0:0_2cf40/2
+CTGCACAAGAATCGCACCATGACTTGCCCTTCATCTCTATACACACATCTGTCACGAAGACGTATTTTCTTCAACTTTTGCCTTCTTCCCACCCCTGTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1680896_1681324_1:0:0_1:0:0_15bb0/1
+CTGGCCGAGGCCAACAAACCAGGAGTCTTTTCTGGTGGCTCATAGAATAATAAAAGGCCTAGATGTGTTTATATTTTTTTTTCTTTACGCCCAGGGCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1347803_1348158_1:0:0_1:0:0_19e8c/2
+GAAATAAAGAACGTCGGCTCACAGCGACAGAGCCCTTCTGTATGCAAGGCCATAAAGAAAAGGGAGAAATCCTTATATATATAGCTTAGACTTAGCCGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1394209_1394625_0:0:0_1:0:0_4fbdb/1
+GACGTAGTATGGGGGAGTACTCATCCAGGGATACTAAACCTGAAGATTTTTCTTCACAAAGGAAGCACTGGAAAACTAACTAAGGAAATACAAATCTATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_284957_285389_0:0:0_2:0:0_27015/2
+TGGGTGGGAGGACGGATGAACCATCAAGAAAGAATTAGTATTCTCTGCTTAGAAACGGGTTCCCTCCAACATGGAGGAGGCTGGAAGTTTATTTCTACTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_206067_206600_0:0:0_1:0:0_4757e/2
+ATACGTATAGCTCATTTGATGAGAGAATGATGAAGGTAGGCTTGGCCATAATATTTATTGCTTCCAGAAAGATTTTTTTACCATACAGTCCAGCCTGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_232507_232932_0:0:0_1:0:0_16fe2/1
+GACACATTCTGACTGTGTCAAATAGTCTGGAGCTACTCAAATGAAAAACTAGTTCCCTTGAAGGCAGGAAAGGATTAGGGAAGTTGACAACCCGCCCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_816269_816778_1:0:0_0:0:0_bbd8/2
+ATTTCATGCATCTAGACATGGCACTGGAATATCTGAAAAAAAAATACCTTTTGTGACTAAGTCTTTTCCATCTCTTCAAGCTAACTGGTGTTATCCTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2431013_2431447_2:0:0_0:0:0_1ea34/1
+AAGTTATTTTACCACAGAGCCATAGAGACCCAGAGCCGCAGATTTCTTGGGCATGATTATCAGTAACAGATACTAGCCCTGTTCCTGTAAGGTTTCCGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_841155_841576_1:0:0_1:0:0_2f663/2
+CTTAAAAGGTGCATTTAGGATTGATATTATAATTTCATTAAAGGAAGCTTTTCTCCCTGCCCACTCACCCAGTGAGTGGGGAAGCTGAGACTTATTAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1744474_1744929_1:0:0_1:0:0_13c7b/2
+ACAATCAAAAAGAAAGGTACGGTGACTAAATATTGTGCACTCCAGCAAAGCATGTTGAAGTTCCATCTATGGTAGCGTGTAAGACAAATTAGTATCCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_504031_504521_3:0:0_0:0:0_180bf/1
+TTCTGCAGGGATTAATTAGATATTATCTTAAAAATATACATATTCAAAAGTGGTACCAATCCCTATTCCATCTTAGGATTTTTAAACAGCCCTGCCTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_29_453_0:0:0_3:0:0_46053/2
+TCTGTATATAACTCCTGCCTATGTTTCAGCATTAACACACTGTCCCACCCGCCACTGAAGGAGGGAAAACTACGAGGCCAGGACATGAATGTGTGTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_514734_515141_2:0:0_1:0:0_562ac/2
+TCTCCTAATAAGGGCCTCACCTGTGGTGTTAGAGACTGGATATCAAGTGGAGGTGAAAAAAAAAAAAATCAATCATAAATAGGGCTACTGGCCAGATCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1657950_1658437_0:0:0_1:0:0_e0bf/1
+TTGGGAGGGACTGACTAGGTTTGACACCATTGTAGGCTGACTGTTAAAATCATATAAAGTCATGAGCCACTCTTCTTGTAGTAAATTTTTTAAGATAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_990128_990560_1:0:0_0:0:0_34fa8/1
+CACATTGGATAATGAGAGGCCAACTGGAGCTAGGAACAAATAGCGACCTTAATAAACACACAGCTGGTCTCTACAGAATGTATCTATTAACCAGCGCCGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_544632_545046_1:0:0_0:0:0_28c93/2
+TTGCCTCCACTCCACTGCACAACAGTAATTTTCTTAGAAGTGATCCCCCCATTAGGCTATCCATATATAGTTCGAGTGAGATGGAGAAGCTATAAGTAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1526303_1526776_1:0:0_1:0:0_33532/2
+CAGCTATCTACCCCAAATCAGGACTGAAGTGACAAAGTACGCTTGTACTTGGAGGTTCACACATATTGAAAAAGGTACATTGGCCTCAGCCCACCCACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_446452_446934_0:0:0_1:0:0_489bb/2
+ATAAACAACATACGAAAAGAAAGTGAGATCACAACTCAGCAAATTGCTCACACCGTGGTCTGGCTAAGGTGCTGTGAAGTCCAAGAAGATAAGAGAAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_617489_617888_3:0:0_0:0:0_51b55/2
+GAGGCCGACCTCGGGATTACAGGCAGATTCACTATCTCACTCCTGCAAGCTCTTGTTGGCTAAGGCTAATTATTCAAAAAAAAATTTGATAGTATCCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_131171_131669_1:0:0_1:0:0_106e0/1
+GATGCAGTTTTAAATCAATAAAACTAAAAGTTTAACACGATCACACAAGCAACGGCTAACAAGACGGTCTGAGCAGAATAGGGAGTCAGAAAGTATAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1668602_1669010_1:0:0_1:0:0_4f9a5/1
+GGTCTAGAAGAAAACTGTTTTGTTCTTTTGTGTGCGTGCTATTGTTCAAGATTTACATGGTGAATATTTTTTTATTCTAAAAAGAAACCACACTATATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1095912_1096397_1:0:0_2:0:0_26ff0/1
+ATTCAGGGGGAGTCAAAGTATTAACTCTTGTATTTAAAACCAAACATCATGGACACAGCATATTCAAACAGACTCTCCCGACTCATCTTAGACAGGGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_19207_19713_0:0:0_2:0:0_1d9dd/2
+AAATGTTGAATTGGGTATAGGAAAAATGAATATAAAATTCAGGTGTTCAGTAACAACAACCCAGGATATTGAAGCCCCCTCTTTTCTTCAACTTCTAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1298589_1299093_0:0:0_1:0:0_5144d/2
+ACAGAAGCACAGACAGAATCTCTCCAGCACTGAATTGCTTGATCCAAGTAAAGATCCTTTAACTTAGAAGATAGAGAATTTAGCTGAGTAAGTGTTTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_210835_211218_1:0:0_0:0:0_17489/1
+ACAAGTTTCAGTACTGGCCAAAGCATTCATTCAACTAAAAAAATGATTCTGTTTGAAAAGGAACTTTCCTGGAGTAAAAATACATGACCTGCTAAACATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1930883_1931369_0:0:0_1:0:0_3d188/2
+GCCTGGGCTCTCCACTTTCTCCTTCTTGCTATCAGTATAGGCAGAGGGCTTTTACTTATATGACTCCCTCCAATTATAGAAGTGATGATTAATAACAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2151702_2152154_1:0:0_1:0:0_18650/2
+AGGCGAAGTGATTCAAGGCAAAACAGCAGCATCCTGATTTTATACTTTGGTTTTGTATTTGGTTCTTCGAGGTGGACTTAACTCACATAAGGTAGGATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_269786_270139_0:0:0_2:0:0_1f206/1
+TCCACCAGTCCACACCCGGCAGTTTCCTACCTTCAAGGATCTCCCCTAACATGCTAGCAGAAGACAGGAATTTTTATTTTTGAAGAATAGGGCTTCTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_529126_529571_0:0:0_1:0:0_44c37/1
+GTTTGTTGTACTTGAATACCAACAGCCTCATATGAGTACTCCAGGAGAGAGCCTGCTCTGGGGGATATAATATTCATTCCTGCTGAAGGACAAAATGACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1238762_1239122_0:0:0_1:0:0_36780/2
+ACTGGCATCCATGTATAACATTCTTTTTGTATATACACATGATCCTGCCAAAGTGCTACTCCAATCAAATTTTAAGAATTTATTGTGAAAAAAAAAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_580053_580565_1:0:0_0:0:0_5d5f/1
+TTTTTGATTTAATATGTATCCTTTCTCTGATAAAATTTGGAACACAGGACAAGGATTTTAAAAGTCATCCATTCAGTTTCCCTCCAATCTCACCCTGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_739908_740301_1:0:0_2:0:0_46bff/1
+ATTCCCGTGGCTGCTGCCCTGCCAGACAGGACGGTGAAACGTGCTGTGTACCTTTACTCTATCCTTGTAGTCCCTGCTAGATGACGGGGTCTATTGCTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_15666_16088_0:0:0_1:0:0_13f8/1
+AATAAAAACATAATTTATTGCAACAGAGTGTAAAAGTCATTTTATCAAGTGCTGGTCAGGTCCACCATCCAGTTGAATTGACTAAGGCTGCAAGTGCATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2178490_2178961_1:0:0_0:0:0_ae76/2
+GCCATAATCCTAGCTTTCTTTGAAGATGTAGCTGACAGATCCAGCCTTCTTTTAAAAATCTCTATGGAAATTTTCTTTCAGTGACACAGTGTTTGAGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_899543_899970_2:0:0_3:0:0_244d7/2
+CACCAGTTTTTTGTTGTTCAAGAGAATATTATATTTGAAATATATTCCTATCGGCCTCTCACTTTAGTAGCTCCGTCCAGGCTTCTGAAGTCAATATAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_726047_726583_2:0:0_1:0:0_a15c/1
+TTGAGGTGGGTGGGGTGGGAGGAATGATAGGGCCACTGCTGTGAATGATAGATAGATTTCTGTGGCTGAGGCAAATATCTTCTTTATGAGCATCCTCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1410959_1411386_1:0:0_0:0:0_461fa/2
+AGTGAAACCACCAACCAGAGTTTTTCCCAGCAGAAATGCCTCAGCCACCACTCTTGAGCCTGGTACCCTACTCTATGTGGTGAGCCTTTGTAGGATATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2320897_2321358_1:0:0_1:0:0_49206/2
+GTATAGCAGTGATACAGAGAAGAAGGAGAAAAGAAACAGATTCTTATCCTCTGCTCAGGTTCACCTCTGAGAGAGTGAAGTATCACTTGAAGGGGGATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1207339_1207790_0:0:0_1:0:0_41b53/2
+TCCAGTTTTACTTCAAAGCACCAAATTGCTGTCACATTAATTGAATAATGAAGGCCCAGAACATGTGTAATAGACAAATACCAAATAAGACTCCTGATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2162521_2162963_1:0:0_1:0:0_3fb1/1
+GAGCGCTACCCTTCCCAGAATTTATCTTATAAGTATAATTGTCATTGGAATACCTTAAAAAAGACACAGGTGTAGACCACTTCACATTTTTTTGAAACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_999272_999780_1:0:0_0:0:0_8d14/1
+TGGCTGGAGTGTTATTTTGAATGTCACAGCACCCTTTATAAGGCTGGTACTGACAAGGTCAGAAACTATTGAAGCTATCCTTTGCAAATGATAGCACAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1743162_1743606_0:0:0_1:0:0_58108/1
+ACACTCTTTTGTTTTTGTAATAAAATCTGCCAGGACTCAGCCTGGGTTTTCATACCCAAATGTCCAAAGTGTTTGTAATCAATTCTGAATTAAATTTATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_666831_667317_0:0:0_1:0:0_1405f/1
+TAGTGGCCATGGCAGTATTCATCATATACAAATAAAAAACAAATAAAGTGAGCTTCCAAAGTGGGAAGGATAAGATATTATATTATGCATCATACATATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_546621_547078_1:0:0_0:0:0_34469/2
+CGACTATGGGAAGGGGAGAGTAGGGCCTAAGAAAAGGGAATGATTTTCGTTCAGCAGCTGCCCTCTGAGGTTAAAATGGTTTCTCCTGATGCTTAATAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_644035_644478_0:0:0_1:0:0_32885/2
+CCAGCAAGTCCTCCCACGACCTTCCAGCCTGAGGCTGCTATTTAAAAACAACATTTCAAGATGTTCTACTACTATCCCAGCTAGATAGATGCCTAGTACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1825553_1826060_0:0:0_2:0:0_40a1/1
+TAGAGGGTATCTTTCTGAAGTGGAAGTGTCTGGTTCCTGAGATGAAGCTTCGAAGAGAAACGTTCATGATCCACAAAAAACTTCTTCCACTGCGAATTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1556751_1557225_0:0:0_1:0:0_8d8c/2
+AGAGGTGGTTTATAATCCCACTAAACCACTGACTCAGTATTTAGTTAAATAAAAAAAAAAAAAAAAAAAGCTACCACTAAGAATGAATGGTGGTGAACAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_171501_171933_0:0:0_1:0:0_1c4c/1
+TCATCAGATCGCGCATGCCTGTAACATGTAGACAGAAAGACTAAGACAAATACAGTTCTTCCTGAGTAATGGCTGCTAAGTACTGTATAAAGAGTTCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1154149_1154672_0:0:0_1:0:0_33885/2
+GCCAAGATTCATCCATTTTTAACAGACATTTCTCCTTTCTAAACTTCTCACTTCTGTTCACCCTCTAATTTCAGCAGAACCTATGAGCTGGAGAAGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_934169_934653_1:0:0_1:0:0_3be8/1
+CCTGAATAACTAGAGATGAGAACAGGATTTACTTCAAACCAAGGTCCATCAATTAATGAGACAAATATCAACCACTGTGTCACAGTTAAGTACCTGGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_138792_139301_0:0:0_1:0:0_4e079/2
+TCAGCACCAGTTAATTGGGATCAAATTTCTGCCTTCATTTTTTTTGAATATGTATCCCTGTTCCTAAGCAGCTCTGTCTCTGAACAGTAACTGCAAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2302313_2302823_1:0:0_0:0:0_39350/2
+ACACATTGAACCATACTACTGAGAATAAATTGATTAGCCTTGCCCCCAGCCTGCGTATGAACAATCATCTACTATTTTGCTTTAGCAATTATGGCTGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_371980_372384_0:0:0_1:0:0_1335e/2
+TCTAACTGTCTTCATCAGCATGGTGAGTCCAGTGTTCTCTCCATTCCTCCTTCACTAATTGTCCCTCTCTGACTGCTCCAGTGGTGGCTCCATGAGGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_985312_985821_1:0:0_1:0:0_24853/2
+GGTCATGAAGCTATATAAGCACTCAATGAAAAGAAACATCTAATGGAAATAATTCATTAGAGTGCAGGGAGTGGGTAAACAACAGTGTGGTGACGTTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_346956_347308_0:0:0_2:0:0_43a84/2
+TAGGTATAATGTTCATCATTTATTTGTTTTTAAAAGTGCTGATTTGTAGAATGGACCTGGGACAGGATGTAGATTTTAAGGGAGGTTTTTAGCACTTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1625424_1625927_1:0:0_1:0:0_595c1/1
+TGTGGCCAGGCTAGGGATCATGGATAGCATTTTCATACACACGAAAAAATATTCTGTGGCACAGTCATCATCGGCCTCTGCCCATCCACTGGAGCTTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_988022_988513_1:0:0_0:0:0_8e05/2
+ACAGACACTAGGACCTCTGCAAGCTTTTGGGAAGGTTCAAGAACCCCGTTCCATAAACCTTAGTATGGAATCAAACTGATACCACTATGATACAATTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1412575_1412942_1:0:0_1:0:0_32a31/1
+ACACATAAGCTTTCTATTAGAGGGACAACATGGGCTCACAGAAGAGCTTGTGGCTTGGGCAAGGCATGGAAAGTTCTGCAATACAATTTCCTTTCCCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2088601_2089101_0:0:0_1:0:0_21c35/2
+AATTTAAGAGTAGAGACGGGAATGCAGATATATATATTACAAGTTACCCTTAAATAAAATCTTTTAATTGTTCACTATATATAAGTGAGTCACAGGAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_571638_572055_1:0:0_0:0:0_4928b/1
+CTGGTCTGGAAGTTCTTGGGGTGGGTACATGGTGTCCAAGATTGATCCTCCCGTCCCCACGGCATTTATAGACTGAATTATTCCTCCTGGCTTCTTCCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_805396_805878_1:0:0_0:0:0_7339/2
+TAGAGTTTAGGAGGATTACTCATCTTCTACTAATTAAAAAGAAACATCTTAGAAAAGACAGACTAAATGTTAGGGGGAAAGGCAACATACACTTACCTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_845016_845438_2:0:0_2:0:0_30c31/1
+AGGATGAGAAAGGAAGAATCTTCCAAATGGAGAGCTTTGACCTCAACCTCTTGGCTCCCTAGAGTTACTGCCTCAGGAGGACGTTGTCATTTCCCCTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2202161_2202575_0:0:0_1:0:0_21c99/1
+GAATGGAGCACCTGAAGGTCTAGTGAACCCAGATCAAAAGAAACTGAATTTTGGTTCAGTGTCACTTCCAATAAATGTTTGTTAACAACAGTGGCATGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1670054_1670524_0:0:0_1:0:0_45755/1
+CATGTGGCTTCAGTGAAACCTCCATTCCTGATAAAAATCAGATGAAGTCAAGAAACCAAGGTGTAGTAAATATTTATTTTAGATTTCCATTTGAAAACGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_907580_908036_0:0:0_1:0:0_71c7/1
+TCTGCTTTTATGATTTTGTACAGGAAGCAGCATAGGCAACACCGCTTCTATCAGTGGCCGAGGAGCCACTAAGAAGGGTAATACAACTCAGGAGTATGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1711029_1711477_3:0:0_0:0:0_15c81/2
+CTGGTGAAAGTATAGCCTGCTGGGAAGTCAAACTGGTTCTGTTTTTATAGAAAAATCACCATCTCTGCCAAGACCAAGCCTTTCCCATATGGACCGGCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1029180_1029557_1:0:0_1:0:0_1cccb/2
+CGAGTCCAGAATGTTAAACCTGGCTTTTGTTTACCCAGCTACTTCAGGCTGGAATGGCGTCGTGCGGCAGATGATGGTCAAGAGAGCTGGGTCATTGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1683834_1684279_1:0:0_0:0:0_bdb6/1
+CTGTACTTTTAGATGTGACTCCAGATCTGGGCTTCATCTACTTGATGATGTCTGAGACAGAACCCCATCACATAACAACTTGTGGGGACTTCAGCAATAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1502788_1503265_1:0:0_2:0:0_2b6f1/2
+TTGATCTCGGCCTCCAATAATAGCCAATTGAGTAACTGGAGAAAGGCTTTCAGATACTAATATCCAACCTCCCCTTATCATATATATATTTGTCAAGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1084957_1085455_1:0:0_1:0:0_3f2cd/1
+AAAGAAAAGTTCTGCACTCTGAAAAACATAGAAAAATTCAGTGAGATGCTTACCCAATAGGCGGATCTGTTCCAGTGAGCATTTGATCCCCAGAAGTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_496428_496879_1:0:0_0:0:0_36535/2
+AAATCCTAAATGGGAGACAACACCAATTTTCACCAATATTATATCTTCTAAGCTTTGAAGCCCCCAATCTTTTCCCCAGAGGTGGATCACTGTGTGGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1259674_1260110_0:0:0_1:0:0_36c01/1
+ACCTGCCCACTCCAAAATTTAGGAGCCTCCCAATTTACTGGATGGTTATGTACGCAATGCCAGTCTAGCCTTGGGCTCTTTCATGTTGGGAGAAATTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_66072_66534_0:0:0_1:0:0_2e323/1
+TGTGTGACTCCCTCACCACAGTGTGAATGCTGGGGGTCGTGAAGTCATCTACTATTAGTAGCTGAGACAGTCTACTTAGGGAACTTGAACCATTTGGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1724087_1724550_2:0:0_0:0:0_79eb/2
+CTAAAATATTTTATAATTGTCCTCAAAACACATAATTTTTTTGTAAATTAAGTGTTTCTGACTGAGTTCTCAAACTGAAAGTCAATGAAAATTATGTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_681562_681942_0:0:0_2:0:0_194f4/2
+TCCAAACGCCATAATTTAAACTAGACAATTTGATAAACATGTATTTACATATCATTATAAGCAGAAGGCACCTAAGCTTTGGGTGAATACTTTAAAATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1731376_1731811_0:0:0_1:0:0_194cf/2
+ATCTAGCAGGCCATGGTGTTAACTAACATGGAAACAAGAGACTTACAAGATCCCAGTCCCAGCTAAAACTCCTGTGGTGGCAAAGCTTCTAGGCTAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1764331_1764853_1:0:0_1:0:0_3ffbb/1
+CAGCCTCCCATCCTGGCTGCACGGTGGGATGGAGTGCTGGGATATATTAAATTATATTGGCCACAGGTGTAAAATGCTTGCTCTATGATAATGGTGCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_877039_877531_1:0:0_1:0:0_437c9/2
+AAAGAAAAAGACAGGCGGGGACAATCTATAGACTCTATATTTTTTTTTTTGTCTTAGAGATAATTTTAGACACAGAAGCCTGAGGTCCGTTCAGCAGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1790495_1790919_1:0:0_1:0:0_2a6cb/2
+TATATCACATACAAAAACAATCATATCCTTTACTGCTTCTGTCGCTAGCTCTTGCTCTGTAAACAAGTGTTCTGGAACCGTTCTTCAGATTTTTGAAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1949987_1950405_1:0:0_1:0:0_335b3/1
+GAAAGCAACATGATTTTTAGTGTGAATACTTGGGTACTACCTCTGCCTCAGGTTCAGAGCCCCTATAATCTGAGAATGTAGTTAATTTATATTATGGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1886531_1886998_1:0:0_1:0:0_21784/1
+GTGTTGCCCAGCTACGTGAGTTTACTTTAAATGCCTATTTTTAAAATGCTGTAATTCGTTGTAGACACAGCCAGATCTCCACCAATGATACTTAAAGATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2252190_2252660_0:0:0_1:0:0_d925/2
+GGTTCAAAAAATTGTTGTAACCTCCAAAAAAATAGTAATCCCCCACCCAGCTACCTGGAGACCAGCCCAGGGATGGGGGGAGGCAGCGTTTGGATGATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_903080_903473_0:0:0_1:0:0_38d15/2
+TCTTTGCCAGGCAATTACTGGTGTATGTCGTATAAGATTTGAAAAGGACAGGGAGGATTAAGTAAAAACCCAGCCTGGATTTGGGCTTATTAGATATTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_314753_315169_1:0:0_0:0:0_45355/1
+AGAACCAGAGTGTCCGTCTGTAAATTAATCACTTTTTAAAAAGATCATCTACATCTCTACAGAGTCCCAGCCCCATCAAGGAGTTCCTCCTGATAGAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_73245_73604_0:0:0_2:0:0_21fe6/2
+GCAGATCTTTATGCCATAAACAGTGGCTACACCAGTTTCCCTGCATTTCGGAGGCTTAAATCAATTCATCCTACGTTAACATTAGAGGGTTTCAAATATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2479133_2479517_0:0:0_1:0:0_3e884/2
+GGTTCACCAGCCTTTCTTACACACATAACATTAAAAATGCTATCGCCTGTAGCAAAGATATTTATATCTCTGGGACGTGCTTGCAAAGTCTGGGTTAGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1308425_1308918_1:0:0_0:0:0_2cc37/1
+GTCTGAGTAGCAGGACTGTAATTACTTCAAATTTCAAGAGTTTCTAAGAATTAATTTAATAACAATATTTCAGACCCTATAAGGTACTTTGATTTGGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_900074_900523_0:0:0_1:0:0_9b19/1
+TGTGTGGAAGTATGTATTAGAAGGGGAAGTCTCAGTGATGATCATGGTGAATATCCCGTTTCTATTAAGCAAGGGCAAGGTAAATGCAAGACTCCCACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2157332_2157881_1:0:0_1:0:0_3a0a0/2
+TTTTCCCCCGTGGTGACAGTTGCGGTGATAGAATCCTAGATGATTTTGAGCCCTTGATACACAGAGAAGAATTCTTTATAAATGCTTGTGCAGTAAACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2150312_2150705_0:0:0_1:0:0_454ed/2
+TGAAAGAGCTCGGGGTGGATTTCATTCCCCCAGCTTCTTTGGGAGTTTCGACTTGCTCCTCATCAAAAAGAAACCCCACTCTGGTAATTGTGACCAAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_201911_202433_1:0:0_0:0:0_44772/2
+AGTGCTTGGCTGCCAACAGGTGTGATTTTTCTAGCACTTTTTTGAATAAAAAAGCAAGAGAAAGTGCCCTAACTGAAGAGCCATGGCAATGGGGCAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_278913_279314_0:0:0_1:0:0_183b9/1
+AAGTAGAGAGGATTGAATTCTATAATCTGTTGAATTATTTTTTTTTAGATCCTATCTGAGAATTTCAAAAATATCTTTTAGGACATCTTCCCCCTCCAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_845368_845820_1:0:0_1:0:0_24cde/1
+TGGGTGGTGGGTCAGTGAGAAGTTTTCTCACATGATAATCTTCTCCCCAGCAACACCCCCTCAATATATGTTAATGATGCAATTTTATCCAACGCCTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2422445_2422911_2:0:0_1:0:0_4e99c/1
+GCCACCACCACTCCCTGGCTGGTGAGTGTGAAATTTTACATGAGGCTGAGACTGCCATTTAAGCTGCCTCAACAGAATAAGTACCCTTGCAGTGAGCCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1734130_1734592_2:0:0_1:0:0_4af6a/2
+TTCTGACACTGTGCAAACCCATGTACCAATGACTAAGTGTGCACAGCTCTGTGATGTTGGATTGTGAAATTGATAGTAAATAAAACAGGAATACATCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1061411_1061852_1:0:0_0:0:0_2f507/2
+CTTATATATGTTTACAGGCGTGGTGGCAGATATTCCAAAAAGGACTTTTATGTATCTTTGTCATTCTTTTTGCATATGATCCTTGTAGATTAGTAGTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2009834_2010293_1:0:0_1:0:0_4b9e0/2
+TGGTTCTAGTTTCCACTGAATCCAACTTTTAAAGATGTCTTCTGTTGTCAGGGAGGCCAGGCCGGTGGTAGGGGTGCTAAAGCACAAGCAAAATAATTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2297040_2297403_2:0:0_0:0:0_55947/2
+TGTTTAAGATACTGGCACAGAGCGAGAAAAGAAATTCATGGAAGCAGTTTGAAGCCTGCAACTCACTTTCATATGTAAGGTGTGCAACAGGTGCCCTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1550991_1551457_2:0:0_0:0:0_4e3c5/1
+GAATTATATTGCATCCTCAGCTCTGCACTCCATTCATTTTTTATTAATGCATCACTTGCAGAAAATATGTTCAACTAGTATCATATATATAGGTTTTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_54237_54658_1:0:0_2:0:0_19a0f/1
+GATGTGGTGGTGGCTGGTATAATTGTTTCTTTCCCACACTTGATTTTACCAACATGTACTTCATTTGCTGTTGATAGAAGCTCTAGTGAAAATATGAATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1938390_1938799_1:0:0_2:0:0_33d6e/2
+AAATAATAGGGTGGCCAGTCTGAAGTAGAATTCGTATAAAATCTCTGTGATGGTGGGGTTCGCCAGGCGGGATTTCCAGCACTGAATTCTTCTAGCTGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1199579_1200084_1:0:0_2:0:0_43f68/1
+TTTCAAAATTAGAAGGCTTTTGTGACAGGCCACGGTGTTAAATGCTTGAGCAACTGAGGTAGAGGAAGTCTCACTGCTATGTGATTCATCAATTACTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2253323_2253793_2:0:0_0:0:0_40447/2
+CAGTTCTGATGCAATTACAGGGACTGAAGGTTATTGCAGAGGAAACTACACGTGCCTGGCAGAAGAAAGGAAATGTGGCCTCCTCCTGATAACTAACATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_737677_738174_1:0:0_1:0:0_18d92/2
+GGAGGGCATGATTGTTGTTGCCTAGAGTGAAACTGATTACAACGTGATTAGTGTCTCAATAGTTTTGAAATCATAGAGGTTTTCATAGTAGATGTGTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2222735_2223193_1:0:0_1:0:0_2220e/2
+TGATGAAACATGCGCTGGCTCTCATTCAGACCTGGGCTCGTTTTGAATATCATTTAGCTTTAGGGAGAATTTGGGAAACTCTTAATAGGCATTGCTTGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_648668_649124_2:0:0_1:0:0_5086f/2
+AGTGGCGAAACACCATTGGAAAAAAAAAATTTTAAACAAACATGTGACCCAGGCCAGGCATTTGTAACCATAGTTCTATTTATTTGGGCAAGACATTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_243132_243565_0:0:0_1:0:0_3feef/2
+TCATCTGTCCCTATGAAGGCTCTCTCTTTCCTGTGGGGCTACAATTTTGAATATGATCTAAGATAATACTGCACAAGAAGACGCTGCCTCCTGGGCGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_946418_946928_1:0:0_1:0:0_359bd/1
+ATCCAAGACTGAGGCAGATTCCTCAAGTGATGAGACTAAAAGAAAGTCCATGGGCCAGGGTTTGGGCAGATAGTGCCAAGTGATGTCAAAGAGGATCCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1903745_1904136_1:0:0_0:0:0_41f28/1
+CCAGCTTCTAGGTCTGTGTGTGACTCTGTTTCAGAGAGGCTTTGTGCAGGATTTTGTGTGATAAGCAGCATTTACTATAGCACACTCCACTCCAGAGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1983642_1984056_1:0:0_0:0:0_21a52/1
+AATCTGTGCAACGTGCTAAAATGGATCCTTCTCCAATCTATAACCAAATCATAATCCACCACACGCACCAGGGAATCCATTTTTGTAACTACCTTAATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1530603_1531093_1:0:0_0:0:0_4561a/2
+TAATTTTATGCACAAAATTTCTACATGTAGGTACAGGCCGAAGCCAGTGATATCATGGCTCATTAAAATGATATGTGGCTTTGTGCTCAGAAAAAGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1486346_1486786_2:0:0_0:0:0_4adba/2
+CAGGGCAGCATAATGAGACGGAGTGCAGCTGTTTTCTGATGGAGTCATGTTATAAATCCAGAAGGAGGGGAGCTGACTCAATAACACACCATGGCAAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_251154_251648_2:0:0_0:0:0_11f0c/1
+ATGGGGCTGGAGGGAAAATCAGGTTCCAGTTTCGCGTTGATGTAAACCCTGGCCATGAGAATTTCTGTGGAGAAATTAGCTGTTCCTCTCATTGCACTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_917360_917783_0:0:0_1:0:0_4aece/1
+TTTGCCTGGCTGAGAGAAAAACAGCTGTGGGTATCATGGGTATAATTTGTAGAAAACCAATGTGGAACACACACAGAATGACTCCAGACTCCCTCAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1227831_1228182_0:0:0_1:0:0_f9b9/2
+CATGTGCACTATCTTTCGAGGTGAAGAACAAATAAAAACCAGAGCTTTAATATAATTAGTCTTTATTTTTCTTCCCTACCCAAAAATATTAATTTGTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2048024_2048435_0:0:0_2:0:0_49330/1
+TAGATAATCACCTAAAAACCAGACAATTCTATCTTTTGTTTGTGGCACCTGCCTTTCTTATCCTCATAGAACTAAAAGGACAACAACAGGTAGGAAAGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1272683_1273159_2:0:0_2:0:0_6756/1
+CTGTGCTCCAACCATGTGCCAAGAAACAAACATCAGGTGTTGGGATCTTTGTATTTGTGTCTATTTCATATGTAATATACTGGCCCTGGGGCCCCAGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1142121_1142507_1:0:0_1:0:0_5ab3f/1
+TAAAATGCCTGAGACTAAACATGGACAAGGTTTTTTAAAGGGATAATGGGCATGGACCCAGAAGTTGCTAAGTACCAAACAGAGCGAAACCTAAATAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_619356_619778_2:0:0_1:0:0_399dc/1
+CTGCTACCTAGGGGTGTCAATCTAGAGACAGGAGTTAAAATAGCAGGAGTTTAAGACATCTTCCATGAGCGATCTGCATCATTCAAATGGCGTGGAAGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2124846_2125172_1:0:0_2:0:0_2c86/1
+CTGGAGAAGACTACAGACTCCGTCTGTGGCAAAAAAAAAAGAAAACTCCTAACATGCACAAAAGCTATCAATACCATTCACCCGACCCAGCCATACATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_300809_301240_1:0:0_1:0:0_4b912/2
+ATGCCCACCTAAATATCACTCCTAAAAACTAAAATTCCATCTCAAAACAGCATGTTTGTTGAAATCTTCCATTTGCAGAGAGCCAGAAAAAAAATTATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_778829_779196_0:0:0_1:0:0_3c02/1
+ATAGATGCTCAATAAATGGAATACTCACAGTGACAGTAACACAAAGCATCATTATTGTTATTATTTTTCTTTCTTTCTGTAATCCCAGTAGAGTGGGTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_416057_416487_1:0:0_1:0:0_42607/2
+TCAATAATGAAAAGGACATTTTTTTTATTATGGCATTAAACAAAAAAAAAGCTGCAGCATCGTGATGTTGGGGATGGATTTTTTTGTTAATAAATCTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1215352_1215867_2:0:0_1:0:0_11630/1
+GCCAACAGTCAGGAGTTTATTAGTACTCCTGGAGACCAACCTCCAGAGCTCCCGTTTCTGTGTCGTACACGAATCGGACCCGGGAGGGAAAGGGGTCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_178537_178954_2:0:0_0:0:0_4a38f/1
+TACATATGGGTGGATAGTAAAGAAATATCATATAAAAGAGAGGCCAGAAGGGAAACAGGGCTCCAGCTTGCACTCCAGTGAGATTTGGCCACCAGGTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_413693_414178_1:0:0_0:0:0_28725/1
+ACATGCACCCGGGTTCAAGGGTTCTGTTTGTCTGCCACTACAGGCCGCTCTGTACTTTTCTCCACAACCAAATTCCCTGGGCAAGAGGAAGCTAAGCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1401127_1401604_0:0:0_1:0:0_1050/2
+TTTGGAATACCTAAGGTTCACTGCAACAACATGGCCTCAGGAGTAGCCATAACAGTATCATAAAAATTTCTTAAGGCTGCCTCTTGGAAACAACATTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_85932_86369_1:0:0_0:0:0_1aab2/1
+CTTCTTTGGCTCACAGCAGTAGTACCCACACTGTTAGAGCACCTGTAATCATTGATTTCAAAGAGTTCAACCCTAGGAGTGGGGGAAAGCCCATCTCAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1326874_1327379_1:0:0_1:0:0_367a9/1
+AGACTCAAGATGATTTGATGTTTAACCATTCTGGTGGCCTCTACTTTTTAGACATGATGGATCTTCATCACTCTGACCTTTTCTTCATTATAAAACCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_197488_197809_1:0:0_0:0:0_5ea7/2
+CCCGCAAGTGTACAGCAGTTGCTTTTTTGTTTGTTTTTGTGGAACTCCAGCACTTTGGTGGTGCCTCTCTGCTACCTACTGGTAGAGGTTCTTCTTCTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1204791_1205234_1:0:0_0:0:0_1faa1/2
+CTGCCCAGCAAATCCAATTAAATATTAGTATCATTATTTATAATCTTTTTGTTTCAATTTTTAGAATCGCCCAGGTTTTGGGAATTGACGCCTCTCAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1250720_1251181_1:0:0_0:0:0_3ffcb/1
+CCTCCCCCAGCCTGGCCTCATAAAAAAGCAGGTAAGAAGACCATTCCTGGCAAGACCCTCTGGGCTTTCACTAGTTTCATCCATTTCTCTACAAAATTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1975083_1975501_2:0:0_1:0:0_2703f/1
+CACTTCATTTAAGGGTGGTGCAGCCCCTCGCTCTGATTGTGATGAATCCAGTTATCCATTATAAGAAAGTTGCACATCAGGTCTGGAAGAGATAGGTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1439228_1439696_3:0:0_2:0:0_fa42/1
+GTTAGGAAAAAAAACGGGGCCGGGCGCAATTGAATTTACATTGTTTTTTACATGAAGATTTGCATTCAAGTATTCATGGCAACTATCTTTATTGTACCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1460575_1460982_2:0:0_1:0:0_164c1/1
+ACTTTTGTCCTTGATCTCTTTTTTCCTCAAGGTTCAAGTGACAAATAAAGGGGTGGCCCAGGATCCCTGTGATAGTTCTTCAGGAGACCCAACATTTATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1765980_1766498_1:0:0_0:0:0_35554/1
+TAATTTGAAAACAGGCACTTTGTAGGAGGTTTCAAAGTAGCAGTCATTTCACCACATCCAAGAACTTACCTCCCCAAAGGTTGCAACAGAGCAACCTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_906977_907342_0:0:0_1:0:0_1a78f/1
+TATCTATAGATAGAAAGTGACTTACTCTTCCCACTTTGTGCCCAGGCAAGTGATATTCTCCCCACGTCTGAGACCATGTGTGCATTTCCAACTTACAAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1543618_1544076_1:0:0_2:0:0_580e8/1
+CTCTCACTAAAAGTGTTCAAAAGACAGATGGAGATGTGGTTCGGGTGCAGTTAGTTTTTCTTAATGCTTTGCAACCTGGAAGCAATATTCTCAGCACGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1401041_1401557_0:0:0_2:0:0_54038/2
+AAGCAAACAGCAACAGTTCCTATTCTCCAAGAAGATCCCAGAGATTTTTTGGAATACCTAAGGTTCACTGCATCAACATGGCCTCAGGAGTAGCCATAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1446231_1446640_0:0:0_2:0:0_3ebd3/2
+AATTCTAACTCTGTTTGCTCACTTTTTAATATGTATTCTTCTGGAAGACACACTCTATAATCATGCATAAATAAGAGACTGCCTGGCTTATCCATGTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_115019_115471_1:0:0_1:0:0_d032/2
+CTTCCCTTTCCTCATCCTGTTGTCCACCTTGCCCAAAGCTGTAGCAACCCCCCTTTCTAGATGTGGCCATTCCTAGGCTCTGAGGTCCATTCTCTCCCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_907510_907937_1:0:0_2:0:0_2094e/2
+CGCGGTGGAATTCTTTACAAGATGTGCTTCCAGCCTCATTTTGGTGGCCGGGTCTGAGCGTAATGGGTGGAGAGGCTGTATCATTATAACAAACCTCCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2306701_2307124_1:0:0_2:0:0_28d48/2
+ATAGACCCCATGTGTAAACCAAACTCTAAGTATACTTCTTATTTTTAAAAGTAAAAGCAGCTTTCTCACATTCTAGAAATGTTTTTTAATGTAAATTACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1257057_1257524_1:0:0_0:0:0_526eb/2
+AATACTAGTACATTAAGGGCTAAGGGTCTCCAAATCGAAACAGCTGGGAGGCTAAGAATTGAAAGTCAAAGGAGGAAATAGAATGGGACCGCATCCTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1902115_1902483_0:0:0_2:0:0_19f5f/2
+CTACCGTAAAATCAGCTGTGTCATGGCACTCAGTTGTGTTCCAGATTCACTGTAACTAATAAATACTAAAAAATATTACAGGTGTCAGTTAATTAAAACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1442523_1442901_0:0:0_1:0:0_618d/2
+TTGACAAACCTGTTCAGTGGTGTCTGTTATCACTATCCATAGGGTGCTGTTCCTTTGATTAGTACACTATATTTGGGTGTACACCAAAATGGCCTTTCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1226230_1226600_0:0:0_1:0:0_5a31c/2
+AGAACAGCTTTTTATTTTTCTAACCTCTGTCTCGCTCTCAGTTATGAAGGTAAGGTCATGATATGGAATGTTAGGAATGCTGAATGGGTGTAAACTTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1435479_1435914_0:0:0_1:0:0_441ab/1
+CACATTTGGTAGTGGATGGCCACTTTAAGAGCACCCAGCATGAGGAGGAGATGTGGCCAACGTGAGTACTCTGGCTCAAGTGGTAAGTCTCGCTGCCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1720636_1721043_2:0:0_0:0:0_159c6/2
+CTCTAATTTTGCTAACTGACAAGCACCGTAGTTAAAGAAAAAAAAGACCTACAGAGCAACCCTTTACTGCACAACCACTGTATGAAGATGGATTTAAATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_430501_430984_1:0:0_0:0:0_1852/2
+AATTTTTTTGTGATGGTCTCTTATTCCTTAAGAAGACTCCTCTGAAAATAAAGTGCTCACACTTTCCTCTCTGGCCTTGGGTGGCGTGAACCAGCCCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1465608_1466123_0:0:0_2:0:0_3936b/1
+CAAAAGAGTCACCCTACCCTAACTAGTATAAAAATTTATATATTAATTAGAGAGGAGGCAAAGATGAGTGGGTGCCCAGAGGTTAATGACCTCATATTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_482940_483382_0:0:0_1:0:0_2f491/2
+TTTCTATTTAAGTATACATTCCTATGGACTGTTGCCCTTTCTTAACTTCCTGCGCTGCTGTTCACTTATAGATAGAATATGAGGTCAATTCCACACTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1430640_1431114_2:0:0_1:0:0_1c4fb/2
+CCGGTTGTGCCCCTCTGCATTTAACCTTTCTGCACTGATATATTTGCAAAGAAATCAAAACCAAAGAGCAGAGCCAGTACTTTGAAAACACAGAGGCGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2276244_2276753_1:0:0_0:0:0_f51c/1
+ATTCTCAGGAACTGGGCCATGTTGATATGTTTCACTGCCATTCTGGTCTCAGTTTTCTCTTCTAAAAAAATTTAACCATGATATAGTTAGAGACGGGGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_841151_841649_1:0:0_1:0:0_27ba/2
+ATGCAAGGGGAAAACGAAGGCAGGGTTTACATCATAAACAAAAATACTGAGGTATCACCTGTTTGTATCCTTGCCTCAAGCAGCAGATAATTAATAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1535404_1535861_0:0:0_1:0:0_1d382/2
+CCCATAGCCATGACATTGAGAGTGCAGCTCTGGAGCTGTGCTTCCCTTGAGCCAGGTTTGTTTGAAAAAATCTGTTAGGTTTGGAATGGTAACTGAATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2469952_2470471_1:0:0_1:0:0_5b81d/2
+TGGGTTTCACTACTTGCCCTCTGGGCTGTCCTCTTGGTGAGAATTAAAATTCTTCGTTTAGCATCTAGCATCTGGGTTGGTCAAGGCCCCCCACTTAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2225597_2226065_0:0:0_1:0:0_3db6e/1
+TTATTGATTTTCTGGATTTGTTCTCGCATTCCCTTCTCAGACATCCATCCCCTTCCGTTTAAGCTATGGAGTGCTGTTTTAGTTCTGGACTTGGTTTACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1077090_1077493_0:0:0_1:0:0_29a70/1
+AAAATAAATTCCACATCTTATATCAGAAGCCACCACGATATGGCTCACTGCACCTGCCAATTCTTACATATGAGAGTACTGTTAGGTATTGTGACCTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2206524_2206899_1:0:0_0:0:0_563af/2
+AGCTCTCAAAATACTGCAGGAGAAACCTGCTGTGGCCCCTTTTTAAAAAGAAGGGGTCTGTGGCCTCCCATCTAATTATCATCCCTGAGTGGGAGACAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1637506_1637981_0:0:0_1:0:0_24f8/1
+CCCAGGTACAAATAAGAGACGGGGTTATGTTTATTTACTGTAATCCCAAGGTTTCATCTTCAGTATTTATGCTTTTTTAAATGACTAACTGTAAAAAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2164785_2165273_1:0:0_1:0:0_3eff5/2
+CTAGCCCAGGGAGATAATGGATTTCTAAGCAGTTGTTTAATGTATTTGATAAATTAGTGTGTCTGTCAGCATCTTACCATATCTCACAGACATGAGACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1004314_1004824_1:0:0_1:0:0_2c1ef/2
+GCCCTGGAGTCGAATGTTCAAGCGAACCTGAAAGTGCAATCCTCCACAGGTCTCACACACAAATGATTGAATAAAGGATCTGCAAGAGTAAGTTTGAGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2228273_2228621_2:0:0_0:0:0_1964c/2
+AATAGTGGATCATCACAGATTAATGTTCACCTGTTCTTATTCAGCTTTACCTGAGTCTGGACGAGAACGTGGCAAGTATCTTCATTTGCAGGGAAGTTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1397775_1398236_1:0:0_0:0:0_b427/2
+CAGGCATACATGGCTTCATGAGTAGCTTGCCAGGTGGGCAGAGCTCCTGGGCTGCAGTCATCAAATGAAGTAGTTGGAATTCGATATTAGTGGCTAATAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_240080_240584_1:0:0_1:0:0_2ff6/2
+CTGTATACTTTACTTAAATGTTGAAATTTAAAAATTTCTCGGCTCAATCAAAAGTAAAGCTTCAAAGTCTTCCTTTAGACAATCTGGGATTATATATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1673194_1673739_1:0:0_0:0:0_226e4/1
+ATTTTTTCTTGAATGGTGGTCATGCTTTTTTCAAACACGTGAACTACATGATCTTCCTTTCTCCCTACAAAATAGAGGACCTTAACAGGTTCCTATTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2061817_2062212_0:0:0_2:0:0_ed30/1
+ATACATGCGTCTTTGGAAAAATAAGAATAATTTTGTGGTTTAAGTGCTTCTATGCCATGAGATTTATTTTTTCTGATCCAGCTAGAGCATGTGTATTTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1776461_1776964_1:0:0_1:0:0_19397/1
+AAGGGGAGGCTTAATATTTATTTGGTGAATGCACACAAACGGTATTGGATGTTGAATCCGTTTTTATGTGTTCAAATTTCAGCTTTCCCTTTCCCTCTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1956942_1957429_2:0:0_0:0:0_481e5/2
+GCTCCATTTTGGTCTCAAGAACAAAAAATCAATGACACAGGGGAAAAGCCAGCACCCATGTTAGAAGAGCCTATGTTTTATTTTTACAGCTACTATGTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1894722_1895132_4:0:0_2:0:0_25b65/2
+GTAAACTTGGACCCGATGAATTACATGATGCTGGGAACCACTTCTCTATATAAGTATACTTGGTTTCACAGTGGGATTAAACACACACCTCTCGGGAGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1959650_1960157_1:0:0_1:0:0_2c23f/2
+CAGCCTGGCAAGGACCCTCAACGAAGCTTTTGTTTTTACCAGTTCCTATGGAGTCAAAGTGCACCGACCCGAGTATATTGGGTTTCCCTTGAGAGTGTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_486385_486901_2:0:0_0:0:0_1a889/1
+CTTGAGGAAAATACAGTAGAAATTAGCATTATGAAAATGACACTCTTTTCCCAGCCTACTGCTGTCACCCAGTGGGTAAAGTCGGGCGGAAGCTACAAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2497243_2497754_1:0:0_1:0:0_307f7/1
+ACACATTAAAAGTCATACCCACCTACCCAGGGATGGAGTGCTTCATTTGAGATGTAGCTCACGCTAGGAGCAGATTCAATGCATTCTGGCTAACCTTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2453063_2453517_0:0:0_1:0:0_5328c/1
+AAAGCTTAAAATGGAATTCATTATGCACACTGATCAAATTGTTGTTTGGCGCTCATTTGAATATTGAACAAGAAGTGCCTTCACGCCACTGCAAACTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_631771_632247_2:0:0_2:0:0_2cc4e/1
+GTAACCCTATGGCAACATTTTATGTTAGTAGCCTGGCTGAGGATGAGGAAATGGTTGTAGCAGGAATGGTCTGAAACTCCTGAGTTACCTCCACAACCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1261671_1262167_1:0:0_0:0:0_9273/1
+TCTTTAGGGCATGGGGATTACATTTGCCAAATGCTTAATTCAGAAGGCGTTAGGGCAGAGGTAGATTATTTTCTAAATAGAAAGAAGGATGGAGTGCACG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_382216_382836_1:0:0_0:0:0_da75/2
+CGGAAGGATATGTGGCTAGGACAGAACCAAGAGGCATTCATTCAGCAGACTCTAAAAACTTATCCTCCTGCAGAAGCCAGGCTGAGGAGAGAAAAGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_628067_628505_1:0:0_2:0:0_36c4c/2
+AAGCCACCGGGAGCTGATTGTTGCTCTTTGGTGCCGTGTGTGGCTTCAAATCGGGACATGGGTGCACAATTTGTGGGCAGGGCTCATTCTAAATCTTAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1586812_1587228_0:0:0_2:0:0_482b1/2
+GACTAGACTCATGAGGAGGGATCTAACCCAGTTCCTTGGTCCTCTAGCTAGAAATGAGCCAAGTTTGGCCTTGGGTCCCAGATGCGTATCTCTGTTCCGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2272641_2273094_1:0:0_0:0:0_3c16/2
+AAGAAGGTGAGGGAGAGCCAAATTTTAAAATTGTCCAGATACCACCCTTTTCCTCACCATGCACTTCTCGATCTCTACCTCATACCTATGTTGTATATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2400318_2400747_1:0:0_0:0:0_1a5bd/2
+TTCAGACTGTTTTCACAAAGATCTCTACTACGCCGGAGTTGTTGGAACCCAGAAAAAAAATATTCAGTATAAACTTCCTTTTGCATAATACTATTTTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_88028_88504_1:0:0_1:0:0_53860/2
+GAAATCTAGTTGTTTAGCATCGAACTCTAGTGCAGGAGAGGTTTTCCCACCTTTTGATGTGGCAGGAAAATGATATACAAAGACTCACTCTCATTATTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1436611_1437126_1:0:0_1:0:0_18e63/2
+TACAATTAGATTAATTGCTTTATACATATAATGGGATCTTTTTCTCTTTCAGACAACAGCCCTGATTAAAAAAACGTCAAGGATCTGTCCCTGTGGTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1934484_1935003_1:0:0_0:0:0_219c9/1
+TGACATGGATTGGCCAGTAGCTGGGCCGAGATGTATTTCCCAAGACCTTAATTTTTTTCATCTGCAATGCTCCTGGTTTTTTCTCTGAGCAAGACCAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_204427_204856_0:0:0_1:0:0_1cd50/2
+TCTTTGCGTAGAGGGAGTTTGTTACATCCACTTAAATCTCAAAGGGGTCCCTGTGATTGGTTTAGTGATACATAACCTTTTTTTGTAGAATGTTGAACCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1607121_1607504_2:0:0_0:0:0_28870/1
+CTACAAAAACACATACATTAATTCTTATGTGACCATTTCCCCCCAGTTCATCCACTTAATTTGGGAAAGAAGACCAATATGTGTACTCAAGTAGACAGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1462729_1463152_0:0:0_4:0:0_30d17/1
+GGCTTTGATGCCTGTCACCACTGCATAGGCATGTATCCCTCCTAAATGCTACGAGGGAACCTCTCTCTTGGCCTCCCCTCCACCCCGTCCTATTCAATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_344906_345404_1:0:0_1:0:0_40438/1
+TTACAAACAATATATATGCACTGCCTTGCCGGGCTTAGCCAAAGAAATTGGCATGTTGGCAAACCCCCTGCCGGGCTCACACCCGCAGGGGAAACGAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2099960_2100451_0:0:0_1:0:0_2753/2
+AGCCACACCAACCGCTGTAACCGCATTTTAATCTGGCTGTCCCGTTGAACACAGAGAATCATTATTTGAAACAAAACAAAGGCCCAGCAGGGGAAAACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_151907_152331_2:0:0_1:0:0_18cbd/2
+TTGTGCAGTAGCTGGCCTGGAATGAAAGGAAAAACAGGCTTTGCCAGGAAGGAAAGGGTTGATTATTTCTCCAAAATGTTTATAGCTTTTAGTCATTGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1636997_1637492_2:0:0_0:0:0_2cfeb/1
+AAATATATTTTTCCTTAATGACCCCCATCTACAGTGTTTTGATTTTTTTTTTGAAATTATTCTTTAACAACAACTTCAATTATAAGTGGGCTGGAGGCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1967982_1968344_1:0:0_1:0:0_c16b/1
+ATGCCAAGGTTTCACAAACACAAATTAATTTCCTGGTGCCACCTTCAACCTCCCAGCAGTTCCTCTATTCACAAAGGAAGGAGCTAGCAGAGGAAAGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_663467_663926_1:0:0_0:0:0_9ff6/1
+CAAAACTTCTCACATAGGGACAGTTTATTTTCTTCCTACCCATGGCTGGTGGTTTCACCCTCTCCTGCCCTACCTACATAAACAAGAAGGGCAGGGGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2308309_2308693_1:0:0_1:0:0_34119/2
+TACTGCCCTCACCCCCAAGTAACTCTAGACCCATTTATATACTCAGAAAACCCAGCTGCCAACAATTATGTCCCTCAGTGTCTGTGCCCGGTGGCTTAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2402578_2402962_1:0:0_1:0:0_135a9/2
+TTGGCGTGGCCATGACAATTTGCTGCGGGTTCAAGCCACTATTTCAGTAAAAAAAAAAATACACCTGTAGGCTAATTAAGTCATAGGATGGCTTTGCAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1892534_1892970_1:0:0_0:0:0_55b8f/2
+TTCCCATCTTCCTGCAGCGAGCCTGGGCATGTATCCCTTTTTACAAAAAAAAACCAAGCTCTGGGAAAAGATTCAGCCAATATGCTACATAGAGAATTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2317056_2317446_1:0:0_1:0:0_4159b/2
+TGATTCCGGCAGTGGTAAGGCCCCGCCCCCAACTTGTGGGTGCTGGGATTAAGACTACAGGAGGTAACCCATCACATACCTGGGCAAGATTCCAGATTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_260620_260981_2:0:0_2:0:0_4a649/2
+TTTCTATAATAATGAACCTTAGCATTAGCTACTGTAAGTATTAGATTAGTTTTTGGTCAAAGGAGGGTACACAAACAATTTCACATTCCCAGGCTGTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2452786_2453118_0:0:0_1:0:0_2a149/1
+AGCAGTAGAGACAGATTATATGTTACGCTGTTTTTTTAAAAGAACCCCGTCTCTCTGATTATATTTTTTATCCTTGTTTCATCACCTTGATGGCACATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_135372_135777_0:0:0_1:0:0_352c3/2
+ATAAGATTACTATCACAGAGGGGGTGGTTCTTCCTTTTCAGTTAAACAACATGGATAAAACATTTGTTCTCTCCTCGGCTCAGCCCCATTAAGGGAAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_517657_518060_1:0:0_0:0:0_c41b/1
+TCCAGGCAGGTGCCTGGCACCTGCAGAAATGCTATTCATGGGAAAGGGGGCAGACACAAACTCATATTTATTTAAACTCCTTTATTAAATGTCTGTTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_266162_266661_1:0:0_0:0:0_1c8c4/1
+ATGATCTTTGGAGTGGCTCACAACTGTGGGTTGGCCGTCTCAATTATCGAGACCAGCCGCCACTGCAAGCTGAAATGATCTCTACACATAAAATAATACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_616911_617374_0:0:0_1:0:0_52083/2
+GAGAACATAGACATTGATGTGTTGACAGTAATTTAAATTAAGATTAGGTATTTCTGGAATTTGCAAGCCCCCATCCGTTTGTTTTTAACATTGAAAGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_496472_496955_1:0:0_1:0:0_403fd/2
+CTTCTAAGCTTTGAAGCCCCCAATCTTTTCCCCAGAGGTGGATCACTCTGTGGCCTTTCCATTATATATAGACTCTTTTCTGAGGACCGGCCCAAATCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_304082_304527_1:0:0_1:0:0_21eb5/1
+CAGATTCAATGTGAGGGTCTTTGGATTACTCCAAGAAGGTCTCAGACTGGTGGCCAAAATACAAGTTGAGTGATCAACATATCTTCATGGAGGTTCAAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1348700_1349035_1:0:0_0:0:0_3150b/1
+ATAGTTTGACACCCACAACTTTCCATACTCATTGTTCCTGAGGCAGAAAGTTATGGTTTGAGGACCTCTGTTCTCATGGAAGAAGTGTAGGGGGTTTTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1689538_1689970_1:0:0_0:0:0_51b41/1
+TGTAATGCTTGTCAAAGCAAACTCAGACTCATACATCAGATGCCTTCATGAGAAATAGAGAATGATGGTATTATTCATATGAAGAGTCAATGTGACAGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2306637_2306994_0:0:0_1:0:0_1cd9d/1
+GCCCCGGGGGGAAATGTCTTAGACCAGTCTCTATGAATTTCTACAAATATTTCTACCTAAATGCATTGAATCCCAGGAAATCTCTAGATCTCAAGCCAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1269730_1270219_0:0:0_2:0:0_2662e/1
+ATACTTATTATTAGGGACAGGAAAACCATAAGACCTCAAAATTTGAGGCAATTGATAATGTAAGCATTACATAAGCTTTTACCTCGGCCTGACCATCTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_633634_634120_1:0:0_2:0:0_3b845/1
+GCTTGAGATTGCCTCCCTCCTCAAAACTGAGGTGTGTGTGTTTTGCCAGCTGGGTAGGTATTTCTGCCCTTCCATTTGAATATCTCTGTTGTTTATCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1793348_1793795_1:0:0_0:0:0_28fe3/1
+CACACTGAAACTGGCCACAACTCTCAAATTATAAGTGAAATTAGAATTTTCAGCATCGGGGAGGATTCATTTGATAACATACGGGCATGGGGCTCCATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1593758_1594314_1:0:0_0:0:0_126d1/1
+CTGGGGTTGGCTGCAAATGTTGCAGTGTTTTTTGAGGTGGTGGGAATGGAAGGCCCTGGGATTCCAGCTTATACTGGCCTGTAAACACAGGTGGGGCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_362504_363042_2:0:0_1:0:0_20095/1
+TACTAGAAAAAAAAAATTTAAGTCCTCAAAAGTTATTTCTTCCCACTACAGACAGAAGGTCCCAGTCTCAAAGCAGAGGTGGGACTTTGGCGAATTTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1036178_1036501_1:0:0_1:0:0_54974/2
+GGAGCCCCAAAGATGGGGAGTAACTCGCACATGGTGTACACATGGACTTAACTCTTGATAGATCATGAACTCTAGTGTCTTGTCTTCCTATTTGTTTTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_728365_728871_2:0:0_1:0:0_8090/1
+TGTCAAAGGAGATATTTTATACTTTGACTTATAACTCTCTGTGAGACAGGGCCTATGAAACTCTCTCATTATTTTTGCCACTCCAGCGTCACATTTGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1420811_1421272_0:0:0_1:0:0_424ff/1
+TACTGTTTTTCAGGAGTTCTAAAACAGCTTAGACATTAGCCTGGGACTCTCGGCTGGGCATAAAAAAATAAAACTTTCTCTTCGTCATTTCAATGTATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_413892_414423_2:0:0_1:0:0_5c7c/1
+TGAAGAGGTGGAATAACAATCAGCTTGAACCACCCTTGCAAGCTTTTCCTTTCGGTGATTATTGGCAAATGGCATAGATTGAATGTCAAACAGAACGCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1600203_1600528_0:0:0_2:0:0_4fde8/2
+AACAATGTTTTGATTTAGAATTTTTACTACTTTACAAGTGATTGCACTGTGGTGAAGGTGGCTCTCCTTGTTTCTTTCTTCCAAAGAAGTTCAATAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1481786_1482246_2:0:0_0:0:0_52e46/2
+CCTCCTACAGAAAAAACAATAGTGTAACATTGGGAAATTATTAGATAAAAATGTACAAAATTATTATCTATAAACTGATGAATTGTCATTTCCTTTAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_729443_729812_2:0:0_0:0:0_41e95/1
+GTAATGCATACTGAGCACTGTCTCTAGGTACAATTACCCAACCGGAAGTGAGCAGGTGTGCCAAGGCACAGGGATGGGGCATAATCAAGCCAACATAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_613696_614283_1:0:0_0:0:0_1392a/1
+TCCCTGACCCACAATGATTCTCCTGTCATCCCAGCCTGGGCAAACGTGGTGGAGACAGACAAGTGCTGGGATATGTGCAGTGCGATGACTCTGATATATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_803090_803499_1:0:0_1:0:0_2b5b6/2
+TGAACATGAAAATTCCTGATGAGTGCACACATTTCACCTGATATTGATGCCCAATCATTCTAACATTGGGGTTTCACACAGCCTCGGTGCCTCATGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_261208_261757_0:0:0_1:0:0_9279/1
+TTCACCTGGCTATTTGGGTTCGCAGCCTGGCACACAGGGATCTTTTACACTAGCAGGTGTATCGTGAGATTTTTTGTATTTTTTTAAAGCCTCCCAAAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2135997_2136462_1:0:0_0:0:0_202be/2
+AAGAAAAATGATATTCAGATAATGTATCGCTTACACGCCTCTGTTTTAATTCTGTATTAGAAATATGGAGTGAGCTAAGATTGGATCTTGTCAAAGCAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1312116_1312559_2:0:0_1:0:0_2e7e2/2
+CTCCATCTCAGCCCCCTGGCCTTAATAGGAAAAATGAAGGTGGCTCCCTGGAGTCTCCTGGGATTAGTCCAAACAAAAACAATATTAATTTCCAAAAACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2470274_2470682_1:0:0_0:0:0_22298/1
+ACCGAGAAAGAAGTAAGATATCTAGGGGGGGGTTGCAAAATGACCAATGCTGATGAAAGCCACAAGAGGATCACACATACTTAATCTCTCTTTAAAGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2350639_2351027_1:0:0_0:0:0_46e3d/1
+GAAGCAAAATTACAGGTGTTTCTAGACTGAAGACTTGAACTCCTCAGCACAATTAGCACATATTTGGAGAAGAATCAACAATTTACCGGTTCAGTCTTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_301621_302188_2:0:0_1:0:0_2fd0c/1
+GAAACTCTCCCTCTCCCTACACATAGTGTTAGCACACTTATTATTGAGAGCGCTCGAACTTCTACCTATAGCTGGTTCTGAGTTGGACCAGTATTCATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1622102_1622559_2:0:0_0:0:0_4d106/2
+GAATCTAGCAGCTCTCGAAAGAGACGGGGTTATACTGGACAAAGAAACTGCTTATTCTGCACAATCTTAGAACTTCCTTCACAGAGATAAAAATATTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_713825_714264_0:0:0_3:0:0_3d642/1
+GGTCCTGACAAAGTCTAATATGAACATTTCCAAATGATATGGAATAGTGAATCCATCTCTTTGGTCCCCAAGGTCTGATACTGAATGCAAATTTAACTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_581316_581815_1:0:0_1:0:0_36979/2
+CCTAAGTTGAACCTAATTGCCAAGACTTACTGTTTCATAGGGTGTGAGAAGGTTCCATGATTCTCCAACTGTGACTAACAAACTTCCTCTTCTATAGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1856022_1856472_1:0:0_1:0:0_1d284/2
+ACGTTGGCTATCAGTTCAGCTTAAAGGCTTAATAGAAACATTTTAAAAATCACAGGCTGGGGCGGCGCGAAACCACAGTGAATCAGTGAGGAACCAGGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1887383_1887783_1:0:0_1:0:0_35596/2
+CTGAGTTCTCCCAGGCTGTTTATGGGCTTTCCCTGGCCCTTCTAAACTGCTCTAGGTTTTTTTTTGTTCTAGGAAGGCTGAAAATTATCTTACATTTTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_672439_672945_1:0:0_1:0:0_4f684/2
+AGCTCAAGAAGAGCCTCCAGGCTCCGCCGCTCAGTAGTTAATTCCACCTTTTTATACTATAGTTTTTCCCAAGTTTTACTTCAAATCATAGGTCCGGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2424592_2424967_0:0:0_1:0:0_300d6/2
+GGCCTGCAGCCTCACCTAACTTGATAGATTCACGTCTTTGGGAGCTGCCCAGCCTCCCGAGCAGGAAAGCATCGTGCTTGAGTGGAAGAGAACAGTATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1731456_1731965_0:0:0_1:0:0_30b2b/2
+TGGACAGAATGAGCCCAGCAACCTCAGAATGGGTTCTTGGCCAGGTTAGAGTTTCCTTCTCATGCATTACTCTTTGATCACGAAGACAGGAAAGGACATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2338742_2339201_1:0:0_1:0:0_24ec1/2
+ATAAGTTATGAAATACTAAGTTCTTAATCTTTATTCTGTGCGAATCCCAGTTTGCTCTGTGCCCTCCTGCCTCACCCCACCTCATCAAGGTCCCGAGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_583533_584037_0:0:0_1:0:0_1511b/1
+ACAATCAAAGAATAACTATCTTGAGGACAGAGCAAAGCGATGAGTAAAACCCAGCGGCAGCATCTTGATTAAGGAAGAATGAGGAATAATCCATGAGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_38654_39090_2:0:0_0:0:0_8ecd/2
+GCCCTCTCCCTGTTTCTTTATCTTTTTATGGGTGGGTGTGTGTGTGGCTTGTACTCCGTTTCTATGCACCTGGACGATGCTGCTGTCAACACCAGAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1009665_1010063_1:0:0_2:0:0_a8b9/1
+TCCATATTCAGATACATATATATATTGGATGCAGGTGTGATGGGCTCCAGTTGCAAAGTAAAAACTGCTTCCATTTACATACTGGGAAATTCTCCTAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_627772_628280_0:0:0_1:0:0_4249/2
+ATCCTTTCAATATAGAATTCCCTTTAAATGCAATTTCAGCTGTTGGTCAGCAATCCTGACATGAGTGTTACATTAGTGCAACGTCAGATGGTCTGAAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_813967_814450_1:0:0_0:0:0_1effc/1
+TGAAACACCCTGCTGCAGGTCCTCTCTTGTTCTGTTGGTGGCTAGAAAAAAAAAACTGCACTTTGACACTATTAAAAAAGCACCCAGAATTGTACATGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_237732_238238_1:0:0_1:0:0_3c34c/2
+CCACATGAATATTATATTTCTTTCAGCTGAAGCTTGCAATTGAAACATTTGGATTCTAGCCTTAACTTCCAGGCGTGAGCTAGAAAAGATTTGGAAGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_957824_958221_1:0:0_0:0:0_1b197/1
+AAGGAGGCCATTCATTCTGTGGAAGAATGGAACCTTCGGGTCGGCCTCAACGTCATTATGACCTCCTGCCTCCCAAAAGGCTTCTTTGTATTTTTGATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2448032_2448394_0:0:0_1:0:0_24977/1
+TTCCGCCTCCCTGTCTTATGAAGGCCTTTTTCGTTTTACAGTTTGGATAGGTGAAGTTGAGCCACCATGGTGTGTGTGATTGACCTTTCTTTCCTTGACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1571769_1572206_0:0:0_1:0:0_3fea8/2
+AAAAATATCTACCCCTCAGCATCCTCTTGCCTGTAAGAATCAGAGAGAATCCTCTGGCTTACATTGGTCTACTCACATGGCTTTGAAAATATGCTTCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1406176_1406631_0:0:0_1:0:0_3f1cb/1
+TTTTTAGATGTCTCTGTTGACTTCCTCCAGAAGGCTGGTGTGTGAAATTTTTTTAAATATTTGCAAAAGTGAAGAATCTAGATTTCCTGTTTGGCTTGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2457695_2458175_0:0:0_2:0:0_4d0df/1
+CCACACTCAATATACGAACACACCCACCCAGCTGTGTACTGTTACTCATTTTCCAAAACAATGTCTAATAAACACTAGACTTTTTACTAAACAAGTATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_279428_279779_0:0:0_1:0:0_2dc7d/1
+TTTCTCAGCCCTGACACGTCTGCAGCTACTTCCCGAGTAGAACATTCTCTAAAAATGAGAATCAGAAATCTATGTACACAGTGTCTAGAAACTAATCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1028592_1028913_0:0:0_2:0:0_18562/2
+AAAACATTTTCAGTCTGTCTTCATATACATGATCCCAATTCTTGCAGTGAAACTTTGTGAACAAAAATAGCTTTGGCTTCAGCAATCTTTCCATCTTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2324118_2324579_1:0:0_1:0:0_34349/1
+CCTTTTATGGACAAAGATTGTACACTGATATTCTTGTCGCCTGTGTGTGTGGTGGGTCAAGCAGAGGTAGAGGAGAAAATAACCTTGTCGTTGTGATCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_260073_260521_0:0:0_1:0:0_2a6af/2
+TTGCTTCTTTTGCATGCTGAAGTTCTCAATAGGTATCTGCCTGCTGGGTTCATCTCAGGAGGCTTGATTGATTGCATTGGGTAGGGAGCAAGGGGAGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2494669_2495126_2:0:0_0:0:0_3a065/2
+ATTCTTTTTACCTGACCTGCCACTGCCGTACGTGTCTTTTGCAACTTGGGCATTGTCATGCGACTTGAAAAAAAAATCCTGAAAATGCATTCGATTGCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_181903_182343_0:0:0_1:0:0_295e3/1
+AATGGCTGGAGTGCACACTATATGTATAAGAGAAATAAATTATTGCTTTTGCTGGTTTTTCATTCTCTTAAGGATCAGAGGCATTATTAAAATTCATCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1025082_1025513_1:0:0_2:0:0_41e01/1
+TTTTATTATTCTGTTCCTTTTTTTCTTGCCAACCTAGCCACGAGGAGTTTTTCTTTCTAATAGGGGCCGCGGCGTTGACTTCTGATTTGAGACCAAGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_663409_663790_0:0:0_2:0:0_72c7/2
+CAGCAGGTGAAACAAAAATTTAAGAGTGTGATTTTGCTACAAATTTTATGTATATACATCATTTTATAATAATATTAAATATCTCTCACACAATCTTTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_217007_217459_2:0:0_3:0:0_2bf1f/1
+ATTATAGTATTCCTCTGTCTCCAACCTCGACCACCGCATGCCCAGGCAAGACACAGGAGCAAGACAGCCACCAAGTATTGCCGAATGTTGTTTTTTTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1967900_1968388_2:0:0_1:0:0_5f78/1
+AGTGAAACTTTTTATCCTTCCACAGGTGTGGGATATTTACTATGCATAGTGTGAAATAGAATTCTAGCGGTTCAAGCATCTGATGCCAAGGTTTCACAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1327965_1328498_0:0:0_1:0:0_30f6a/1
+GGTTATATTGTCCCAGCCTTTAATTTTTAAAATGAGCCACAAGGATGTGTCCAATAGTATGGCCGGGTTTCTGAGCAGTTGAATGTAAATAATAAACCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_599000_599392_1:0:0_0:0:0_536a0/2
+TTGCGTATTTACATTAATTATATCTGAGATTCCCTGACCCTGGGACTGGCCTCCTTAAGATCTCAAACTCTTCCCTTTGCAATGGCCACAGCACAGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2374759_2375160_0:0:0_1:0:0_5a540/2
+ATTCAACTCATCCTCCATCAGAAGTTTTGAGCAGGTTCAGGAGTCTTGCCAGGAAAATAAATAGAAGTGTGTGTTTACTTTCACCAGCCTGAAAGAAACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_901586_902029_0:0:0_0:0:0_27870/1
+TTCAATTGATCACCGTTGTCAGAGACCACTCTCACAGTGGTCCGAGTGTATCACATTCGACCCTTTCTATATTTTGATCTGTTCTTTTGTTCGTCGATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_97400_97833_0:0:0_1:0:0_28c83/1
+ACTCTTTGTACTTTTTAAATGGTACACTAAGCGCTGGGCAAGGTTGCTTTCATGCCTCATTAATATATAAACTGAGTCTTTTATTTTTAACTTCTTGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_674175_674677_1:0:0_1:0:0_ab21/1
+ATCTTCTACTCCAATCATTAAGCGATTCGACATGAGTGGTGGTCTAGATCTAGATCATATCTTAAAGTATTTTGAATTTTGTGAATAGTATTTAAGGCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1683862_1684268_1:0:0_1:0:0_1ffec/2
+TGTTTAAGGCACAGGTGTGGTCTTGATATCACCTCTGCCATTGAATATAATCTTGGCTTTCAATTTTAGAAAAAAAAAAAAAGGGAGGCTGGGAATAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1151977_1152443_1:0:0_0:0:0_20051/1
+TTGTTTGTCACTGTTCCAGGCTGGAAATTGCCATTTTATTATCTTAAGGTATCCAGCCTCTGCTGTGTGGTGTACTTTTGGCCTCTGTGACTGGTGGCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_457717_457988_1:0:0_1:0:0_223d/2
+AATAACCAAGCAAATCAATTCTCAGGCAGTCACAGTAAAAGAACGGTTGTGCTATCTGAACGTCTTCTTTTGTTTTAATTCCATGCCTTTGAGATTTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_381519_381954_1:0:0_2:0:0_2f393/1
+GAGTAAAACCATCTTATTTAGAACTGCACTAGAATCTAGGCATAGTACAGTAAGGAATTCTACATGCGCCACCAGAAAGCGCAGTGAGACAGAGCTGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2465682_2466110_1:0:0_2:0:0_32225/1
+GTCTGGGTGCAGCCTCGCTTCCTCCTGGGCTAGCTTTCCAGATGTGGTCAACACAATTTGGGTCAGGCCACCTCATGCTCCCCAAAGGACACAAGAGTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1795521_1795948_1:0:0_1:0:0_2a074/1
+ATTGAGCCTGAAAGTGTTTTCCCTGTGTGCAATCAAAAAAAGTCAGATTGGTGTGTAGCACTTAATGTTTCAAGGGGAGATACTCACCGTGGCATGGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2209420_2209845_1:0:0_1:0:0_263c4/2
+ATTATTTTCATCAAAAGTAGTGGTATGAAAAGGCATTATATTTCTATATATTCGTTGTCGTACTGGGCTCCTCTGCAGGAGATATCCCGATACTGTCTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1262534_1262958_1:0:0_1:0:0_1ea32/2
+TTCTCTTTACACTTACTCTAACGAAGACAACCTATGTAGAATTATGTACTGAGTATGAAGGGACACTCATAATAAACACACATCAATGAGCCCTGGCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1841348_1841881_0:0:0_1:0:0_953d/1
+AAGAGGGTTGATTGACTATGGTGACAAAGTTTGCATTTATAAGATTCTTCATTCAGGATGGAATAAATATACCTCCTGAATTAATCTACATTTATTCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2448707_2449170_2:0:0_1:0:0_30f7a/1
+GAAATTTTATGAAAAGCCAGGCACGGGGAGGTTGGAACCAAGAAGCCCTTCCCACGAGTCAATTATGTACAAGGAAGGCTAAAAATAATGTCTTCCAACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2184891_2185401_2:0:0_1:0:0_3104/1
+GAGGCCTTACACCAGACATCTGGCTTTTCATTTTGTTTTTATGTTTGCAGCCCAAGCAATTCTTTCCATTTAAAGACAAGGATGATGCTGTTTGTTGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_260118_260576_1:0:0_0:0:0_26ba/1
+CCTGATCCTGACCATCCTCCAAGTGTTTGTTTCTCTATTTACCACCAGCCGCGTTTCTTGCCTTGGCTCATTGCCTACTCCATAAAATGAAACTTTGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_870293_870781_1:0:0_0:0:0_5641f/2
+AAGCCTCCCATAGAACTTCCGCATAATCTCACAGCAATTTGGCAGGAAGACTGGAGATTACAGGTATTCTTTACAGGTACCTGAGAGCTAACAATGTGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2068082_2068578_0:0:0_1:0:0_5a6e4/1
+TGGGTATGAGCTCCTTTGAATATCGAGAGAGAGAAATTTTAAGCAGAGTGAAACTGAGAAGAACGTTGAGGCAGGACGATGGATCACTTGTGTTTACAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_215152_215584_1:0:0_0:0:0_101a1/1
+CTTCTGTTCCCTCTTTATTCAGCCATATATTTCAACTCAGACTGAGCCCAAGTTCTTTTAAGTTGTCAAAGAGGAGTTGGGATTCTGTTTTTACAATTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1792183_1792593_1:0:0_1:0:0_195ca/1
+CTTTGACATGGTCACCCCTGGGCAAGATGTGTTCTAAAAAGAGTTAAAGACAGATGCTATTAGAGAGAGAAACAAAAAAAAGGCTAGGCATGATCACTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1528818_1529191_1:0:0_2:0:0_47462/2
+TTGCTGGGACCAGATCAAGAAAAGCGCAAAGGCAAGGAGGGGCTGGATCAAGCTCCTGCCCTCCACCTGTTCTGTTCCAGAAAATCTTAGAAAAATTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2306999_2307429_1:0:0_1:0:0_34d0e/1
+GTACAGATACAATCAGGAGAAATTATCATACATGTCTCCCCTCACCTTAGATTGCTTTTATACATGGTGGGAGGTTCATCATCACAGCTGAACAGAGCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_710227_710688_1:0:0_1:0:0_2db8a/1
+TCACAACTAGAATCACTCCAGAGCGGCCTCTAATTATTACAGAACCACACGTATGTGACCTGATGATAATTATCTTTTCTGCCGTCAATTACAGGCCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1312961_1313345_2:0:0_1:0:0_2f1b1/1
+TCCCTCACTAAAGACAGGTGTACAGCTTCAAAAAAAAACAGGACCGATGCCTGGCACTTGCTAAAACTGGATATTTGGGAACAGCATGAGACATCTGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_398238_398634_1:0:0_0:0:0_2af76/1
+AAGCCCTCCAACCTAAATGATATCGAGGCGGATGTAGCCATTTCAATTTCTAAGTTTCAACTGTTTGCATATACTATGATTGCTGGTCTTTTTAAATACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_505312_505677_1:0:0_0:0:0_46732/1
+GTAAATCCAATTTTAAACAAGTTTTTTTCTTCATTAGAGCACTATTCAAATGTTGTCAAATACGTAAGATAGTTGAATGTTAATTCAAATTGATTATGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2101422_2101795_2:0:0_0:0:0_5b05c/1
+CACTTTTGAAATAGATCTGCTGCTGCTGAGGGAGGCGGGAGGTAAATGATCATGATTCTTGGGAGGGGACATGATTTTCTTACTTGGACCACTCTTGGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1753214_1753672_1:0:0_0:0:0_d97f/2
+CTACATTGGCGTCACAGACTTGATAAAAACAGACAAGAAAACATCTCTATATTTAAAGTCTAAATCTAATACACACACAAAAAATATGTAGACCCAGGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1520853_1521313_1:0:0_1:0:0_a2ce/1
+TCTAACTTTTTACATTTATTTAGATTTCTGTCATTTCAAATCTAGAAATTAAGCCACAACGTGTGGTTCAGCTTGGTCAGAGCAGGTGTATATAAACAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1152791_1153172_0:0:0_1:0:0_153af/2
+ACTCCTTACTCTGAACTAGTGATCTTGCTTTAATTCATTGAAATTCATTCACCATTATGAAAAATGAGCAGGCAAATTTTTGGTCATGCAATGTCTACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_85290_85763_1:0:0_1:0:0_38fe0/1
+GGAAATAATACAGGCTGTATGCAACAACAATAATCAATTAGCGAGACCCTATCTGCACTTTCTTTGGAAAGGAGAGGGTATATGTCAGGAGGGCAGAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_556993_557362_0:0:0_1:0:0_3cba6/2
+TATATATATGGTCGGGTCAGGCCCACAGCCTGTTCTGCAGTCAGTAGTTCCTGTGTTTCACCTTTTCTTTTGTTGGAGCCTAGTTTAAAAGTAATTTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_750377_750927_0:0:0_1:0:0_21bf5/2
+GTGCAGTGCTTTATCCATGGGTCTGAAGAGATTCCCTCACTGATGTTGATTGTGCTATGAGGCAGTGAACAGGACTTTGCTCCCAGCTAGTTAATACTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1465842_1466396_1:0:0_1:0:0_816d/2
+ATTAGTTTCAACCCTGAATTTGAAACCCTTTTGGCAAGACTGCGCTGGGATAATTCACTCCAGCTTACCATTGAACGAGTCTCTCCATTGCAACTGGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1670092_1670525_0:0:0_1:0:0_3ea09/2
+ATGTGGCTGCAGTGAAACCTCCATTCCTGATAAAAAACAGATGAAGTCAAGAAACCAAGGTGTAGTAAATATTTATTTTAGATTTCCATTTGAAAACGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_939131_939541_1:0:0_1:0:0_26eac/1
+GTGGGATTTTTGGGAGTCTGACTGCAGATGTTGCTATCAAGTATTCTACCATTTGAGTCAGTTCAAGAGTCTGGAAAGTTTCTGTGAAATCAGGGTTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_303582_303923_1:0:0_1:0:0_3f15e/2
+ATTGGAAAGAGAGGGTCTAGTTCTGATTCTAAACACTGCACTGATACTCTGCAAGGTAAGACAGCCTCCCGAGTTGCAGAGCGGAGACACCCCCAGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_935816_936259_1:0:0_0:0:0_2887c/1
+GTGTCCCCAACAGAATTAAAATGACCTATCTACAGAAGAACTTGGAAACATTTGGGAGGAGTTTCCCTAATGCATATTACTTTTTGGCAGAGATATAACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1483457_1483901_1:0:0_0:0:0_4ca2c/1
+GAGAAAGGTAATAACTATTTTCCAAAGTAAAGACAAATAAGTACAATATATATCTTTATTTCTAGACAGTTTATGCATATAGACAGAGCCATAATTTTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2489787_2490233_1:0:0_1:0:0_499dc/2
+TAATTGCATCTTGAGCTCCTCGTGGTAGAAATTCAACACAAAATCCTAAAGTGAATTTAGCCATCAGACTGTCTTATTAATTTTTAGAAAGAAAAGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1113288_1113680_2:0:0_1:0:0_2e94/2
+GAATAGACTTAAGTACTTAATGTGCCTGGAGGCAGAGAGACAGAACACCAGGGTGACTAAGGGCATAAGAGTAATGCCATCCCAAGGTGCAGGCTAGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1309970_1310376_0:0:0_1:0:0_7c3b/1
+TTATGTAGGACACTTCACAGCAAAAAAACACTTTGGATAGTCTCATCCACCAAGGGCACGCCCTGTGTCCAGCAAGCAAACTGTTTTGAGACTTGACACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1825815_1826244_2:0:0_1:0:0_44e3b/2
+TGACAGAAGTGAGATAGTATCAGCATACAGCATCCACCAGTCACCTAAAGACAAGGCATGAATGAATTGAGTAAATTTGTTTTTGCAGTACCAGACTGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_280903_281323_1:0:0_1:0:0_3a821/2
+TCTACTGCAACCTCTTGGGTACTGTGATCATCTCCTATGTGCCTGGTGGGCTGAGCTTATCGCTGTTGATAGGGAGGCAATTCCACATTATAGGCAGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2284972_2285345_1:0:0_1:0:0_4503c/1
+TAGGCAGGGAAAAAAGATCATACCAATTCATGTGGAGCTCAAGTTCCAGAACCAGCACCGCCACTGCAACCAGAATGTTTGTTGTTCATTCTAAATGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1076712_1077255_2:0:0_0:0:0_315db/2
+TTTATAATATTTAATTAACTGAAGTTATTTTAAAGATGCAGTTTTGGGCAATCAATTTCTGCATCCGCTGTCGAAGGTCTCGAATATTTTTAATACAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_331127_331583_3:0:0_1:0:0_6163/1
+ATATTGGTAGCGATAGAACTTAAATTGTAGTTGCCTTAAGCAATAAATGGAATAATTAGCCGGATCCCTGGAATCAGAGAATGACTTAGCATTTTCAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1545153_1545583_0:0:0_1:0:0_38208/2
+GGAACAGTATATCCTTTCTTAGAGTTAAATTGTTCCAGGCTCAATTTTCCATTGAATATGCAAGTTATCTCTCTGCAATGAATGGCAGGGATTGGCAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1448931_1449411_1:0:0_1:0:0_2c570/1
+CTAGTGCATGGCAATAGGTATCTATTTCACCAGTAAAAATCACAGCTCTGAATCTGCAGGGACAAATGCTTCATTGTAGCATTTTGTATCCCAGACGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_727256_727775_1:0:0_0:0:0_3b121/1
+TAAGGAACAAGAAAAAATTGACATTGTAAATGGACTTTATCTCAAATTTATTGCTTGCGGCTCAAGGAAATGCTTTTGTAAAAAGAGGATTCTCTAATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1438551_1438961_2:0:0_1:0:0_3d48/2
+CCTAAAGTCTTCCTTGTTGAGTAGATAAGATGCATTTAAACCATTGTCTAACAAAATCAGAAAAAAAAGCTTTCTTCTCACCTCCAAGCGTGGTGGCTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_947423_947920_2:0:0_0:0:0_3765c/2
+ATAAAACATGATTACAGGTAGTGTACACATTTAACCAGGAGTTCGCCAGAAAATGAAATAGAAGGATTGTTTCCTTGTAAAGATAAAGGAGGCAGGACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2246270_2246641_1:0:0_0:0:0_1ccfb/2
+TTCTTCCTTCTCTGCAACCAGGCTCTCAGGGAACTTTCTGAGCATAAGATGAACTCACTGCTTCCAGTGAGGTGGGGTTCACAAAGGTAGAAAACAAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_540921_541353_1:0:0_0:0:0_12089/1
+GAGTTTGCACTCCAACCCAGGTAGTGACCCCGTCTCTAAGTAAATGCTTCTGGATGTATATAATTTTGTAAGGTAAGTTCTTGCCCAGGCTGGGAGGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_923955_924372_0:0:0_2:0:0_37e81/2
+CAAACCTTAAGCCATGGACCAGTTAGGAGGGGATGAGAAAATACCATCTCATTTGTAGATGGGGTGGTGGCGGGCATATTTGTCCCCATAATTTCAGTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_185526_185922_1:0:0_1:0:0_163e3/2
+CTGCTTAGTTTTAGGTAAAGGGAAAGTGACACCCTATAGACAGTGGTTTTAGTTAAACTAATCTCCAGAAAAACATTCACCCTCACATGTGGTGATTAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2461457_2461897_2:0:0_2:0:0_25dde/1
+CCACATGAAAGAGACAGGAAGGGCTTTTACAAAAGAAGTCGGTACAAACCACTTTGCCTAGAAAAACCACTGTAATGCCAGCTAAAGTACTGACCAGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_281701_282183_1:0:0_0:0:0_15856/2
+ATGCATAATAATTTCAAAGGATGATAAATTACCCTACTTATTCTTGCTAGAATCACTAGCTGGGTTCCACTCAGATTTTTGCCCAGGTCAAAGACAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2267713_2268134_0:0:0_1:0:0_a3cd/2
+ACATTGCAGCCGTGGGTGGTAAAAGAAAGTGATAATCTTCATGTGTCCTTAGTCTCTAAAGAAAACGGTGGCAAAGATTACAAAAATATGTTGGAGTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1125709_1126179_0:0:0_2:0:0_596b3/2
+ACCATCTCTCAAATTAGTCCACGTGAGCCAGACTGTGTGTATATACAGCTTTCATCTGTGGACCTTAATCAGCAGCCTAGACCTAAGAACATTTACCGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1264338_1264859_1:0:0_0:0:0_1878d/2
+AAATCATTCTCAATAACTAGCATGTATCTCCTGGGCGAGTAGAGATATCCTAGGTTTCCTGCAACTCAGGAAGAGAAACCTAGCTCCTCCCGGGAGGCGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_698773_699190_1:0:0_1:0:0_487a5/1
+CATGTATTAAAGGAAATACTGCACTCCATTGCTCAAAAGTTTTCTAGGAATGAAGACTAGAATTTCTTCCCTCAGGTGGATATAGTTTTTTTTTACAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1868866_1869255_1:0:0_1:0:0_46cf4/2
+ATTTAGTGCTGGGAAGGCCTAGAATTATATTTTTTAATAAAAACCTATCTCATTCTGGCATTCAGGTGCCTGGAATGTATTTTCATGGAGAACTTGCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_473278_473727_0:0:0_2:0:0_1916a/2
+GGCAGGAAAACTGTAAACTGAGTCGAAGACTAGTTGTGTCACTTCGGGTAAAATCCAGAGTCATTCTCAGCCTATAAAAAGCTTATTAAAAGGCAGGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1234042_1234433_0:0:0_0:0:0_53562/2
+GGGGGCTGAGCTCTTCTTTATTATGCATGT
++
+888888888888888888888888888888
+ at seq1_1796831_1797342_1:0:0_1:0:0_240ae/1
+CACCTGTCTCCTCCCTTTTCGAATAACATTAAACTGCTTCAATATCACCTTTAAAAGTAGCAGAATCAGCAGCAGGTATGTTGTTTTCTACTACTCATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_219410_219845_2:0:0_0:0:0_2e951/1
+CAAAGGCTAATTTTTTTTGCCACTGCAGATCTTTCTCTCTCTTATTGTCAGGTGCCCCAAAGCGCTTTCATTTACCAAAACGAATATACAAAGTCACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_682910_683312_0:0:0_1:0:0_19355/1
+AGCAAAAGACTAAAATGTATTGAACACGGTATGACCTAAGGAGACAGAGCATATAGATTATAAAAGACACGCCACCATGTACTAAGCTAAGATAAGGTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2401892_2402372_1:0:0_1:0:0_2f966/2
+TTTCAAGTCAATTTTTCAAAGCTGCCGCCTAGACAGAGTGACAGACCAGCCTCAGTTAGTGTTAGTTGTTGCTTTTCTCAGGAAGACGGGGCCACGGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1503230_1503704_0:0:0_1:0:0_2cfa1/2
+GTTTGTGCCCTAGGCTGGGTGACCAGACTGCAGCCAAATTTAATAAGTTTATGAAGTGGCCTTTCTGGGGGAGTATTCACGGGGTTTTTAATAGGTTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2161623_2162110_1:0:0_1:0:0_317c0/1
+GTATGGGGCTGAATTTGAGGACAGGAAGACAGACCAGGCTCCCTTGTCCAGCTTGAAAAGAAAAACGAATGCAGGCTGAAGAAAAGGAGTTACCGCCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1209503_1209973_1:0:0_1:0:0_211af/2
+AAAAGTTGTGACTTAGCCCCTGCTCTGAGGGGATGGGAGGTTGTGTGTGTTGGAAAAAGAAAATTCAAAATACCAGTATCGGTGGAAACTTAAATCAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_126462_126891_1:0:0_0:0:0_20084/1
+TGTGAAGAAAGAGGCCTTAAAAATATCTCTGTTCACCATTCCTCATTGATTATATCCACTCAAAGGATCCTGCCTTGGATAATCACTTTTAAATAAATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_725774_726230_2:0:0_2:0:0_1d6dc/1
+GCAGGCCCTCAGCTTAAAGATAAGCTACTCCCAAATTATTTCTTTAATTATTGTATTTTTGGTTCACGATCTCCGCCAGCGAGGAACGGTATCTACCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_570253_570688_2:0:0_0:0:0_28998/1
+CAGTAGAAATAGAACCTCCAGTTTTCTTTCCAGAGAAAGGACTTCACCCAGGTGAAAGTCAAAAACAATGCCACCTGCTGTAGTATTCCCTCAGTACGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2305887_2306360_3:0:0_1:0:0_13192/2
+TAGGTGACTAAAAGAGAGAAGACAATTATTGATATGGCTGGTCTTGGCTAAGGGACGAACAAAGAAAGCAGACATGCTAATTGGCTCTGTCGCCAGCAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1035116_1035620_2:0:0_0:0:0_53123/2
+TATAAAGCTGTGTTGTCTTAAATTTAAAATAAGTAGAGGGTTTCTTTTATCCTTCCTGACACACACACCACATGATGAACTTATGTTACTCACATTCCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2337235_2337663_0:0:0_2:0:0_1af5/2
+CAATAATATTTTTCTCTCCCAGCTTCTTTTGGTTTGTAATACTAAAACTTCTGCTAAGAAGTGTGTGCCAGGCTGATTTTACACAAAAAATTTCTCTACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_776319_776768_1:0:0_0:0:0_4b21d/1
+CCCAGAGAAGTAGCTGGGACATTCACTGTGTCAACTCACCCCGAGGGTAAATTTTTGGACTGAGAATGCTTGAAGATTGTGAGGAATGGAGATGGTCCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2435882_2436419_1:0:0_1:0:0_50da3/1
+TGATCCACTCTGTAGAGTTCGTTGATCTCTAAAGTAATTTATCAGCGTTGGGCGACCAACTCCAGCCATTTAACCCCCTCCTGGATCAATCTATGAATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1706833_1707299_0:0:0_1:0:0_2b395/2
+GAGTTAAATAATTGACAGTAAAGGAAAAGACATACCAGAGTACATTACGATCAGTTGATACATGTAAATTTTGTGCCACTCTGACCACACATGAGAACTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2013209_2013577_1:0:0_0:0:0_42aa5/2
+CCTGAACTTATTCCTCGAGGCTGGGCATTGTGGTTGTGCTGGACTGGTAGGCATGAGCCGAGGGCATCTTGAACATGTTGGCCACATAATAACATAAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_796290_796766_3:0:0_2:0:0_29253/2
+ATGCCCAATATTTCGCCTTTCAGTGCACAAACAGATCATCTTTATGTTTTCACCAGTATCTGTTTTCTGGAAGTAGCTGAAACATAGTTAAATTACATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2220317_2220799_1:0:0_1:0:0_26947/2
+TTCCCAATTTATAAGTCAGTTAGTTGAAGTTGTTCTGTTAGATTTGGACTGGAAAGTGACCTGGGTGTCATGTATACTTGGGACCGGGGCGTGGATAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_346417_346856_1:0:0_1:0:0_ce58/2
+GATATGAAGGCATGTAATCCCAGCTGCAAAGATTAAAAATGCATCCCACTCAGCACTTTATATAATCATGTATCCCAGAAAAGAACACATATGTAATCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1858590_1858963_1:0:0_0:0:0_23258/2
+TTTGACTATAAAAATAAGATAGATGCCAGGTGGAGATGATCATGACTTCCTCATTATGAAAATATACCTGAGCCACTGCCACAACAAGAGATTAATGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_737301_737652_0:0:0_1:0:0_509e3/1
+GTCATCTTTATTGGATATGACTTTTTTCACTCACTGGAGTATGAAGGGGAACTGACTGTACACTGAACTTTCGATCTTATTTAAGAAAAAAAAAAAAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1294211_1294667_1:0:0_0:0:0_42c25/2
+TAGATACTAAATATATTCTAGATCATCTATGTTTGTAGAGTTGGGCTCAGAATTAACTTTGTGATGACACGTTAACATTGTGTTCAGCAGAGAAAATTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2229226_2229711_1:0:0_0:0:0_16329/2
+TTGGGAGGGGGAGGCTGGAGTCATAATTTTATTCTACCAGTATTTTATTAATGTGATATAGTATCTGTTATTCAGTTTTCATCCAATTCTGGTCCTATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1695920_1696314_1:0:0_1:0:0_560db/1
+CAGCTCGGGCAGCCAAACGTTGGTAAGATTCCTGAGACTAAACCATGTGATAATGTTCATTCTTAATGTTTGGGAGCTATATGGCCACTGAGAAGGGTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_281563_281973_1:0:0_2:0:0_38ece/1
+TGAACCCCAGGGTAGGACCAATGAAGTGATCAATAAACATTCTCAAAGCCTCCCCCCAGTCAATAGTATATATATGTATATTATTAGATATGATTCCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2340213_2340701_1:0:0_2:0:0_2f94c/1
+ATTGATTTTCCTCAGGATGGGCAGTCAAGAAACACCTCACCTGCCAGCACATGTTGCCAGTGTAATAGATGTACAAAAGAGGACCTGCTGGGTTTTCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_313006_313561_0:0:0_2:0:0_4ccbe/2
+CATCCCAAGTCATTGTGGGGTGTTTGGTTCTAGTTGAGACAGAGAGAGAATTAGCCACCAAAAGAAGGGCTGCCAAACAAATTTAACATCTTTCCAAGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1996692_1997071_1:0:0_1:0:0_1c76b/1
+CATGTTTGCAACTTCTTTCATTGGAAAAGGTATATATATGTCTTGTCTTTTGCACAGCACCTGTCCAACGGCGCGTCGCTTTGAGCAGGGTCTGGTTTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1346325_1346665_1:0:0_0:0:0_51274/2
+GCATTCACTTGAATGACCAAAGTGGCAACACGCAGATCAAACGCTTCCCAGGCGTGAAACATCATTCTTCCTTTTGGCAATATGAGTGAATGTCTGGCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1732263_1732713_1:0:0_0:0:0_455d5/1
+TTTTGTAGAAAGATTAATCCCTCTGCCCGGCTTCTCTACTACAGGCTGCACTGCCCCTGACCTCTTACAATGGATGGGGCCTATTTTTCTTGTGGTGCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2232271_2232756_0:0:0_1:0:0_1ccf0/1
+GGATGCTACCTAATGTAATTTTAGGAAGTGAAAGTTCCTTTAGGCTTGAGGTCTATGCATATCTTTATGTTCATGTACCTGGGCACCTGTACGAGCTTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1525663_1526122_0:0:0_1:0:0_eb8f/1
+AAAGTCCTGCGGCCTCCCAGTCTTTATTGTTCCATACAGAACTCACGCCTTGCCTCAGAAAAGCTAGTGAAGATAAGCAATTCACTTTGCTTCCCTGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1549611_1549986_1:0:0_1:0:0_16e2/1
+CTATCCCAGTTTTTAGTGGTGGGGTTTCGCCTCCATCTCGGCCCCAAAGTAAGATTATAATAATATCACCTGCACTATACCCTTTGCCAGCATGGCATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2395250_2395680_2:0:0_2:0:0_51353/2
+TCCCCGTGGCCCCGCGCCACCTGGCCAGAACCAAAATTTGTATGTGGAATCCCAGGGCCCCATTGGTCTCACACCCAGTACTTGCTGTGATGCCCATGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2353349_2353746_1:0:0_1:0:0_3b7bb/2
+CACCATGTTGATGTAAACATAGAATGGGAATATGTAAGAGCTACTTTATAGAGCTAGATGGGCATAATGCAGCTGTACCTGTTAAAATACTCCTGCTGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_759505_759951_0:0:0_1:0:0_177d1/2
+CTGAGGAGAATTTTTAAAACAAACATTTCTCTTCAAGGATAGCAAGATGAGACACCCACACCGGGGATGTATTTTAAATCCTGCAACGTTAAATTGAACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_371808_372274_1:0:0_0:0:0_44686/2
+ACTCATGTTCTTGGAGAAGCACACTCTGACTTTCTGTGGGTCCTCCTCCCTGACCAGATTAAAGAAGTGCTGAACTTCCTTCGCCTCGGCTAACACCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2013808_2014254_1:0:0_1:0:0_5a81e/2
+CTGTCATCTAGAAGCTATTTTTCAGATGTACACAGAACTAACAACACAGCAAGAAAATCTGGCCCCTCCTTAAACATACATTTAATCAGATACATGATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2003032_2003389_1:0:0_1:0:0_23c80/1
+CTCTCTGCCCGCCTATCTATATAATGGTGTGAGACTCCGTGGCAGCAATCCATGGTATAGACAATGCTTCACCTGCAAGATAGGAGTTTTAAACTGTAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1214681_1215122_1:0:0_1:0:0_54f87/2
+TGTTTAAGAAGTAATCCTTCGGGGAGGAGTAGTTTTATGTTATATCTTGTGTTCCCCTGGATTGCATGTCATTTACCCTGTCAGTTCCTGTAGGAGCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1442503_1443004_1:0:0_0:0:0_26546/1
+GTCCATAAAAGAAATTTCATTTGTTACAGTAAAAAGAAGGATAAGTACTGCGTCAGGTTCGGACAGAAAAATACCCTTACCTTAAGAGGAGCACTTCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2014929_2015420_0:0:0_2:0:0_b19/2
+CTTCTCCTAAACTGTCTTTTAAAACCATTGCTGCACCAGGAGCATGGTCGCGTCTCTGACTGATACGTTGAAGTAGGCCTCTGCCCAATGGTTTCTAAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2138417_2138768_0:0:0_3:0:0_42329/1
+TTTATGAATATAGGTACAATTTTTTTGCGTTGTGTCTTCGTGCTGGTGGGGGCCCGGCCAGGGGTTCTTTTTAAAAACTAAAGACATTAATATCCTGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2300680_2301215_3:0:0_0:0:0_6a0c/2
+TTGTGTGCTCTGTCATTAAAAATAAATTGAGCATTTAAACACGTTAGATGAGGAGGCAGAGTTAGTTTGCGATCTCTCATGCCTCTCAGAGACATACAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1663562_1663952_1:0:0_0:0:0_4c23b/1
+CTGATTCAAACTGAGTCACCTTGAGCTACTTTTTCTTTTGGTGTACATATATACTCTCAGAATATATTACAGGCGCTGACCAAACTCTAGCCAGCTACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1987964_1988428_1:0:0_0:0:0_3e3e/2
+TTCCCCCAGTGTTTTTTTAATACTTGCTCTACTAAATAACATAGTTTATAATGGGCCTCCTTCATCTTAGCACTCCCATCTCTTGGGCAACAGACCATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1411862_1412385_0:0:0_1:0:0_4fbd6/2
+AAAAGAAAACTTTAATTATCACCCTCTTATAAATTATCTGTAGGTTTCTAAACCCAACAAATTTACATTCTCATTAAACCTTAGGAATAATAAGTCCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1429330_1429812_1:0:0_2:0:0_44840/1
+CTATGTGATGAGTGATACAGGAGAAAACCGCTAGTGGCTGGAGAGCAGGAGATAGATTCTTCATATCCATGGATAGGATTTCTGTTTGTGTTGGCTCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1960593_1961082_1:0:0_2:0:0_520cc/2
+ATGCCACTAGATGATGGGCTGGTAATCCCAGGGCTGAGAAGGCTGGTTGTTCTATGGCATTCTACAGGGGGCAAACTCTTAACTCAGGACCCGCACTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1752056_1752506_1:0:0_0:0:0_24f81/2
+CCTGTTGGCCTCTGGCCAGTCATAGGAGCTGAGAAAGAGAGGAAGTGAAATGCAACCTGGTCTCTCTAAAATTAAACTATATCTTGTTCCTTTTCCATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1106887_1107323_1:0:0_1:0:0_1b69b/2
+GTTGATCTGAAGAACTATAAAATTTTTTATATGATGGTGTTACCCACTGCAATATTTAAAAATCCAGATTTCATACCAATGGAGCATTTTGGTAAACAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_867548_867944_1:0:0_0:0:0_4ea08/1
+GCTACTTCTTGGCTCATGAAGTGCTGGCAGGTGGATGGCCGCACACTATTGTTTTAATTTTGTGTCATTAGATATACCATGTGCAGCCTGCCCAGTGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_44145_44588_0:0:0_1:0:0_260eb/1
+ACCAGTTTTCCAATTATACACCTGTCAAGAAAAGTAATCCACTGGGTTGTCGACCTCTACTAATTTGTTCAGAAAACTACTGGGGCAGTGGCTAGAAGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_36391_36894_0:0:0_3:0:0_3a676/2
+AAATTAACATCTATTCCCTTTGAGAGCCACTGCAACGTCCATGAGGGTATTCATGGCTCTGCTGGTCGGCCCCAATGTTAGTCCCTCAGCCCAATGGCGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_213054_213549_2:0:0_0:0:0_2514b/2
+CCCATGATCATTCATAGATAGAAACCCTCCCTGAGACCTCAAGCACAGGACCTTTTAGCAGATCGTGAACCCAGCTACCAGCTTAAGACCTTAGCATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1387664_1388187_1:0:0_1:0:0_1bd8e/2
+TGACAAGTCCTAGGCTGAGCAGCCAGCTGCCCATACCACAACCGGTAAGTATGTGTTCCAGCACAGTTGTGATGTATTGCTTTTTCTCTACCTTCACTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1312895_1313368_1:0:0_1:0:0_48f0c/2
+GCTTGCCCAAACATAGGCTTATGTTTGGCTAAGGCATGGTGGCACACTTACACATAAACCTGTAATTTTTTTTTTAATTTTGAGGCTGGGGCATAATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2282453_2282933_1:0:0_1:0:0_2eea1/2
+ACATAACCTTCCAATGTATCAGGTACTCAATGGACCCTGTAGTCAATTGTATTTAAGTGTGCCCACACTAAGGCATTTATTGAGGTCTGGGGTCACATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_771151_771727_0:0:0_1:0:0_2a449/2
+TTAAAGTTCTAGTTATTAAGCCAATTAGCTTCGTATTATATGGAACAGTAGTGTCTCTGTCTAAAGAAGAAACAAAGCAGCGGTAGTTAGAATCGCTCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_901870_902310_1:0:0_0:0:0_5544e/2
+CGTTGAGACTGGGGGAGGTTAAGTTCATAGCAGCAGAGGAAAAGGTGATACTAAAATTTGCCTCTCACATCTCATCCAGACAGCGCTCTGGGCAGTAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1800984_1801451_0:0:0_1:0:0_4a7c9/1
+TGAAAACCTTTGATGGAGAAAATTAAATTACAAAAATGAAAGCTCACTGACCAGCTCAGTGGCTGTAAGGGAACAATGGCTTCTTGAATGTATGCCATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1455989_1456493_0:0:0_1:0:0_11edd/2
+TAGGTCAGGTACAAGTTGTAGCAAACCTGGTTAGTTTATATATTCCTGCATCCCTTCAACCAACACCAGTTAACACAATTGCTCCCCTCTAATGGAATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_703046_703410_2:0:0_1:0:0_3c2ca/1
+CGGGGGTAATCCAAGGGAGGGCGAATGAGCCAAATAATTTTTCATAGGCAAAGTGAGGATGCTTTTTATGAATCAATCATTCACATTCCAAATGTACTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_880886_881261_1:0:0_0:0:0_37904/2
+GGCTCCATGGTAGACAGAGTTGCTCTCTGACCTCGTTGGAAACGGGTGCCCGGCAGCACACATGAATTTTATACACAGACACACACCTCCCATTCTTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2017085_2017583_1:0:0_3:0:0_13800/2
+TAATGAAAACCACCCAGCGGCAAGTTTATCTTCAGGTACCGACTTACATTTTCTTTCAGTCAAGGGGGGGAGGTTGAATACAAGGTGAGGACTTGTATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_802358_802779_1:0:0_0:0:0_11d9c/1
+CTTTGCAGAGGATGGCTAGAAGCTTGAACCCACTGCACCGTGGTGAGGAAGTATCACCTGGATGGATAAAATACTCTTCCTATTTTGTCACACTCTGCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_52756_53237_0:0:0_1:0:0_1c2e0/2
+TCTAAAGAAGAATCCTGGATGGAGATCACTGTGCTTTGGTAAAGAGAGAACAGATGTCTGCATATCACTTGATCTGCATGTTGTAGATGGCAAGCAAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_978803_979242_1:0:0_0:0:0_560de/1
+TTGTCAATATACCTCTCAGTCTGTATTGCAGCAAAGGTCAACCTCTGCTTGAATTTAGTGAAATAATGGCTGCGTGTGCCACCTTAGAGACCCAATGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2267792_2268164_1:0:0_1:0:0_58186/1
+TTTCCCAGGTTTCCTACAGTACTTCCTGCTAAATTATAAAAATCCTCTCTCAGGCCGAGTTCGGTATGTGTGTGGAAACGGGCAGGAGTTTGTTTTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2462428_2462802_2:0:0_0:0:0_f40f/1
+CCATAAAATTTTTTCAGCATCAGCATAGCCTCAGGCTGTGGTGTGCGGTGAGGAGATTCTCCCTCTTACACTCCAAGTATATTTGCCTTCTTCCAGTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_166664_167088_0:0:0_1:0:0_1ff35/1
+GTGGAACCAAACACATCCAGCTCCCCGGTTTTTTTCAAATGCTGGAGACAGCCATGGGAAGGACTTGAAAGTCTTACAACTCAGCACCTCAGATCCCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2224240_2224703_2:0:0_1:0:0_14833/1
+TTTTATAGGGGTTGCATGTCGCCCTGGCCATGATGGTCAAATTTGGTTCTGAAAAAAGAGGATTACTTTCCATGTTGGTATTTTAACAGAATACAAAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1403468_1404019_0:0:0_2:0:0_2c01c/2
+ATGGTGCTGGGCGAGGTGGATGCAAGTTCAATGATGTTATGATTTGAACTACGTGGCAAGAGAGTTGAATTATTTGAGATATATGTTGGCTTCAACTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_807603_808029_1:0:0_1:0:0_1b496/2
+TACTTGGGATTCTGATTTGGTGGCGTGATGGGCTTTTTTGGAAAAAAGATGACACTGCAACATAGCTGGGTAAGATTATGAAACATCTGTAACAAAATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2380929_2381377_1:0:0_2:0:0_58aff/1
+CTCTGAACCATGATTTAACAACTCAAGGGCTCCAATCTAAATATCCCAGCTGCATCTCTGAAATAAAAGACCACTAGAAAATACTGCAACCTCCCATAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2000567_2001050_0:0:0_1:0:0_48404/1
+AATTTGTTATTTCTTGTTCAATTTTAGATTGAGCCAATATTATTTGGATGGTTAAGCCCTTCTCTTCATGCCATTCCCTCCTTATTTGGAGAATCAGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2410329_2410794_1:0:0_4:0:0_36eb/1
+AATTCAAGATGGCCAACACCCAGAACTCCATGACTATAAACAGGCACACACCTGTTACTCCAGCAAAACAGTCGCTTGTTGGCACATCAGTGGAGGATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_641619_642118_0:0:0_1:0:0_2952d/1
+TAATCTAGATAGATGGTGGTGAGAAAGCCTATCATTAAAAACTAGTTAACTTCAGTAATATATATATCTATTGAATCAGCTTCTCCACCACAACCAATAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_879260_879679_1:0:0_1:0:0_12049/1
+AATTGGATTGTAACCTCTAGTTTGGTTATGCATATATTCTTACTGTTCTTTATCAAGGTCCTGTCCCAGAAGGTCAGTGACTATCTATGGTACTTTCTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1749653_1750120_0:0:0_1:0:0_aaf8/2
+TTAAAGAGGCTCCTGTAACTAAACATGCCTCAGGAGCACTATCTCCCATTATGCTGGCTCACCACTCTCTTAATTAGATTTGTAGCTTCACAAACCTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1493622_1494059_2:0:0_0:0:0_1dff3/1
+TAAGCTTTAATGGTATTCTGGTTTTGTGATATGCTACACTGGCGTTGTCTTCACAGGTAGGTGATGGTTTTCAGCTCCTCAAGGAAGGTGGCTCTTTGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_936969_937466_0:0:0_1:0:0_67a8/1
+GAGAGCATTTAAATTTTGTGTGTGTGAAGAAATATAAAGGGGACACCCTCCTCACCTTCCTTTACTGGGATTAAGAGTTAGCCATGCCATGATGCTCATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_962662_963175_1:0:0_2:0:0_4ae18/1
+AGAGAAGCTGGATCATATGGAGCACCACCAGTTATATCTGGCCAGGCTGGAAATTATACATTTCACAGATTCTCTTTCTGAGTGTGATCCCAGCATAGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_578706_579238_0:0:0_2:0:0_11255/1
+ACACTGTGGAAGCAGACAGAGGTAACATTTTAATATTATTTATCCATTGAAGGAAAATAAAAAAGCTAAAGATACATAAATAATATGGACTGTAATCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_832936_833373_2:0:0_0:0:0_43ce4/2
+TTCTGAGCTCAGGACATTTCTCTTCTTAAATCAATATTTTCTTTCTGCACACTGGAGGTTTGGGAATGCAGCTCCCAGCATGCCCACTAGCTCCAGCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_652842_653312_1:0:0_2:0:0_2393b/2
+TGTAATATTCAGGTAAATCAAACGTTTGTGCTTTTGTTTTATATTCCGTGAATCTTTCAGAGCCTTAACCATTTGTATTATATTAGATCTGAAAGGCAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2096308_2096787_1:0:0_0:0:0_224a5/2
+CAGTACCTGCTTGAGTGAAGAGACTCACCACACCTTGCTCTTTGTATCCATTCATGCTCCAGCCAGGCGTGTATGAAAAATACAGAAATTAGGCTATGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1088552_1089042_1:0:0_2:0:0_5a393/1
+AAGCAGCATTTATCTAAATTATGTATGGAAGGGGCCTATTGGAAACTATATCTAAACAAATTGAAAATAAAAGCCTCTACTCTATGCACTTTTAATTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1685892_1686310_1:0:0_1:0:0_52550/2
+CGGAACTTTTGAGAAATGCCCTCTGGATCCTTGGTTCCATTCCCATCCCCTCATGCGCATTTCAAACTCCTTCAGACTTCATATAAGTCATTAAAGTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1336657_1337026_1:0:0_1:0:0_2f13f/1
+ATCCCCAAATATTTGAAAATGCTGGGAAAGACTGAAAAGTACACAGAGGAAGTATATACTGGGCTGGTCCTAAGAATCTTCATTCAGAAATTTTACAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2341906_2342332_2:0:0_0:0:0_258ce/2
+ACCTCCGGCTACGTGAATATTTTCCCTAAGGAAATACCAATGGCAAAGAGTAAGAATTTCCTCCACAGTTTATATTATTTATCAAATTATCATGAGGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_166853_167360_0:0:0_1:0:0_1e7bc/2
+TATGCACATGCATTCAGGGGCTCTATATTCAACACAATAGTTTTTGCAGTGACTGTCTGATTCTTTGTATTTCTTTATGAGGCCAGGCTGCACAGTGTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_7879_8363_1:0:0_2:0:0_2dbb0/1
+CAGTAAGTAGTTTGGCTTCGGTTCAAATTTACTTGAACGTCCTTGGCCCAATTGCCAGTGGCTCTGGTGGCTCTCTTTATAGCTGTTGCGTTCCCTCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_797143_797618_2:0:0_2:0:0_22f64/2
+AGAATAGCTTTTAAATTAAAGCATCTGATAACTCCAGCTTAAAGTTATAGGACAAAAGGTTTGAGCACAGATAACCTCTTTCTAAAGTTTGGCTCATATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_512757_513099_1:0:0_2:0:0_54f8e/1
+ATTAGGGTGAAAACTGATTTAAGAGATGTCCATTGATTAGCTCCACCCCAGAGATACTTATTTTTTTTCAAACCTGGGGCGCCATTGCCAAATCTACTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1929259_1929684_1:0:0_2:0:0_119e3/2
+TATTAAAGGGTGGTGGCCAGGATTGAGACTTCTCATGTAGAGGTTTGAACTCTTGATTAGAATTATGTTAGGTCACATTTGTGGTGTCAAAGAATTATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2297460_2297897_0:0:0_1:0:0_314da/1
+GAAGACTTGTGTGCCACCCCTTCAGATAGTATCTACCTCAATTGTACAACATGGTTAGGTATATTGATAGTAGTTTTAGTGAGAAGGAGATGGTCACAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2156751_2157279_1:0:0_1:0:0_2d490/2
+AAGATATCAATAATATTAATAATTCCAAGACCTGCCTCCTTTTTTTAGATCTCTCCTGTGCAACCTCGTGCCATACCTTCTCTTCCTCAAGACGCTGCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1551025_1551415_0:0:0_2:0:0_4d70d/2
+ACATACTCAGCTCACTGCAACCTGCCCCCTGCTTGTAGATCAGGCGTGGGAATAGGTAGTTCTATGGGCCATTCCTTTTGGCATATGATCATGCACATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_805473_805885_2:0:0_0:0:0_201da/1
+AAAGGCAACATACACTTACCTAGATAGAGCAGAAACCCCATCCTTCTTCCTAAGACATCACCACTGTCTTGCTTTTGGCAGGAATAAAGGCCTATGAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_258464_259004_1:0:0_1:0:0_276b3/1
+TTGTGGTACCATCCAGCAGGGTGTCACCCCACTAAAATAATTTTGACTTTTACTGTTTAATTGGTATCCATAATACAATAGCTTGTTTTCTTTGCCCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_571864_572354_1:0:0_0:0:0_4a6ee/1
+TGGAGTAAGGCCAAGAACTGGATTTTTTTTATAGATGCACGCCCGCCAGCTCTCTATGGCATGACGATGGATTTCAAATAAAAATCTAACGTTTTAGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_275524_275955_1:0:0_2:0:0_2bcec/2
+GATTTTTAGGAACATTATTTGCCCCCCCCTTGTTTTTCCCAGTAAGAGACAGAGTTTCAGCAAAGGTCTGGCAGCTCCTAGACCAGGTTTTAATTTTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_192208_192745_3:0:0_0:0:0_52831/1
+GAGATAAAACCTCACTGAAATGATGTGTTTGTGTGTTGAATAGTTCCAGCCTGGGCAGAGCAGTGGCAGAATAGGAATGGCAAAAACAAAGCATCTATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2035668_2036059_1:0:0_1:0:0_48bb5/2
+GTCAAAGGCACTATAATTTTCTTTGACCAAGGTCTGAGCTTTGTTTGCAATCCATCACTTCTTATCTATGGAGCAGGAAACTGTCTGCTTGGGTCTGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2280079_2280473_0:0:0_1:0:0_10bb5/1
+GGAGGGGTTGGTTTGAAAGAAAGAGGGTGATCTCTTGCGTTAAGTCAGCTAATTTTAGACCAACCTCTTTTATCCTAAGGACTACAAGAAATTGTTTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1957629_1958111_1:0:0_0:0:0_dcbe/1
+CTGCAGGTTGACCCCTACTGACTCAGGTGATGCATATGTAGAGCAGTGCAGTACTAAAGATTAGTATTGTTATGATTGTTCCGCTTGAACACATTAGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1920183_1920651_1:0:0_2:0:0_505b0/1
+GAGTCTCACTCTATAAATGTGCTCGTGATGCATTATGTTCACGCTGGTACAAGTTCTGTACCATCTGTGCCACCTGTGCCAATTCTGAAAAGGTGACTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1866388_1866851_0:0:0_2:0:0_47afc/1
+GAAGAGTCTGCTGTAGATGCCCGGCCCTCCCTTGCCAGAAGAAAGGTTCTGGGATAATTCCTTTCCATATCTCTCCAGCTTGAGCACAAAAAACTTTAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1080208_1080610_0:0:0_2:0:0_4e5fa/1
+GCACTTGTGTGTGTGTGTCAATAAATTGATGTTTAACATGGTGGGACAAGTTCTGGTCTAGAGGATCTCGGCTCACTCACATGGGATGGAACACTTTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1544939_1545426_0:0:0_1:0:0_44531/1
+AAAAGATCCTAAAATGGGAGAGTTTGTGAGTGCAACTGGCTTGGTAAGAACAACCAGCAAGCTTACCCAAGTAAAAGCAACAGATTTGAGTTCATTACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1444757_1445275_1:0:0_2:0:0_254fb/2
+TAAATTAATTTTTGGGAGGCTGTTTAATACAAACTGACTTTGTGCTCAGGCCCCCGCCATTCTTCTTTTTTTTATTGGTCCGGAGTGTTAATCTACTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_32009_32469_2:0:0_1:0:0_a8bd/2
+AAGTCAAAATTGCTCATGATTTACTCGCACGGTGCCAGGTGACTCCAGTTGTTCAAGTAAAAACTTTCAAGACTTTCTGAATAAATTAAATTGATGTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2387471_2387866_1:0:0_1:0:0_27fa1/2
+GCTGTAGATCAGGACTGTAAATGCTTATGTCAGTATGATGGGGGTTGCTCAGAATTCTCATCAATTAACACTGTTACCAGTAATAGTATTTCTCCTGAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2292941_2293348_4:0:0_1:0:0_3dfa9/2
+AAAGCAGTTCTCCGCTGACTTAAAATCAATGGCAGTGATTAAAATTTATCCTTGCATATAAAACAAAAATAAATGTAAGGTCAAGGTGGAAACACTGTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_277329_277848_1:0:0_0:0:0_2ac57/1
+AGCTACTTTTTCTTTCTCTGTAGCAAATCCTATTTCACCGCGCCCACGCTGGATCTGATGTCTTTTAATTAAAAGTTACATACAAAGCCAGAGTGCAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2339205_2339574_2:0:0_1:0:0_42d38/1
+TGTTTCATCACCTGTTGCCATTGTATGTTCAAGACCAGCCCTGCTCCTCTATTACTCTTTTTATAAAGTATGTAATAAAAAATTAGCCGTGCCTGCTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1130454_1130907_1:0:0_1:0:0_1f5de/1
+ATCTTTGCATCAAACACTACTACCCGTGATTTCACAAGAGAACTGGTCACTGCACTGACATCCTGTGGCCCTGCCTAGGGTGGAGGCCCCCAGCACAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_980368_980799_1:0:0_2:0:0_56cf0/2
+ACTTAAGATCCAATAGTGGTAAACTCCTGGGTAGAGAGAGATTTCTTTGTGCTTTAATGATTGATTGTTCTGAGCAAGTTACTATGTATTCCCATAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2130231_2130650_1:0:0_2:0:0_2bdf7/1
+ATTATTATGAATGGCATAAAGATATTATGAGTTCTTATCTGGATTCAAAGGTAGCACATCCTCATCTCTGTTCACTACGCTTTGTTTCTCTTTTGCTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_893409_893953_1:0:0_1:0:0_27f12/1
+TGGCTGAGCTGCCCACAAAAACATTCCCATGAATGTCCGTGGCTCACTGTGATACTAAACAATATGCTTACAAGCTTCCATAAGGCTGTTGAATGATTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2234883_2235368_1:0:0_2:0:0_55820/1
+CAAAGCATCCATGGCTGGTCTTCCTCAGCCTCTACTGTATGTGACATTTCTAGACACACTGTTATCTTGGCCCTGAAGACAGAAAAACACATAGCAGCGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1291449_1291924_1:0:0_1:0:0_210f4/2
+AGAATTTCATCCCCTGTCTCACATAGAAATAAGGCCAGACTATAGCAGTTTGCTCAGAGAGATCCACCCGAGCCACCATGGGCCAGGGTTCTCTTGATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1048284_1048747_1:0:0_0:0:0_24e0/1
+AGAAACATTTGAGTGAACCCCGCTAGGGAGAGAGTTTAACACACTTTTTATAGCAGTGTGGCATGAGGGCACATACTGCTGACACTGAACTCAGAAAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1437923_1438301_2:0:0_3:0:0_493bc/2
+CATCCCTGACCTCTTCCTTTAATAAGCTACATAGACTCTCTGGCCTCCCACTTCAAAAAGGAAGTGTACAGGCCTTTAAAGGCCATCCCGAGTCACCCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1503578_1503970_0:0:0_1:0:0_4507e/1
+TTATTAGCCAGTAGAGACATTGGGTTTTATTTTGACCCCATTTAGGGGTGCGTTCAGTTACTTGCAAATAAAAACAAAGAAATAAAAAGGCAATATTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_420304_420685_3:0:0_1:0:0_165f9/1
+TCTCACCTCTGCGGAGGTCAACATGTGAGCCTTGCCTTATCCTTGACCTAAATAGTGTATACTCAGAAACTAGAGTGCAACGTCACCATGCTTCAAGCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_762348_762796_0:0:0_1:0:0_21e37/2
+AGGCGATGTTGGTTGTATATTTATCCTTTTCTTTTCTAAATTCTCACATTCCAAACAGTTTGGAACTAGGAGGAAAAAGTTTATTTTGGCATTGACAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_597891_598363_0:0:0_1:0:0_34306/2
+GATCTCTTTCATACATAACATTGTCCTTCCTGCTCAGAAAGAGGAGACACCCAGCTACTAATACTATATCTATTATTACAGAAGACCAATCTAAATGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1386503_1386938_1:0:0_0:0:0_11b1/2
+TAGGAGGAATGTTTTGCAAAATTATGCGGGGACACTCTGTGCTAAAAATCAATGGAGCTGAGGCCTGGGGATTTCTTTCTGGGAAATATTAGAAATGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2204140_2204572_0:0:0_1:0:0_59e90/1
+GGATGTGAAATTTCTCTCCTCACAGACCAGCACATAGAGCATTCTTCAGATTATAACTCACACTATTTCTGAACTTACAAATATGGATATGTGTGTGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_30186_30667_1:0:0_1:0:0_2883d/1
+ACCTAACTTCTAAAAATCAGTGGGAGATATACGCAAGGCCATGCAAGTAAATAAGGTCTTCATTGAGTATGTGGGCTAATAACTTTGGGTTGAATCCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1143083_1143624_0:0:0_1:0:0_26705/2
+CCAATTATGACATACTGTGGCGGGGTGAAACGACCACCTCAGGACAATTGTTTGGGCTAGTGGTCCAGAAGGACTAGGTTCTTCTCTTTCTCCTATCTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_220385_220805_1:0:0_0:0:0_2f112/1
+TAATTCTTATCTGAAACTCCTGGAATACTTACCTAGGTGTGATAGATCTTGAGGAAATGGACTTTATCCTTATTAATTCATAGGAATTGTAAAAATCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_525912_526316_0:0:0_2:0:0_95a7/2
+ATAGATAACTTTAGCAGAGTCTCCAGGCAACACATGCTGTTGCCAACATGGCATATAACATTCTTTGCAAAGAAGACAGGCCAATCTGAGGCATGGCAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_571094_571455_0:0:0_1:0:0_4cb64/2
+CCTGTAATGTATAATAAACCTAAGGATGAGATTCATGAAATACACTGTGCCAGACTGGGCGAAACACTTTAATTTTGGTGGGGCCAGCTTGGTTGCAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_639856_640281_1:0:0_1:0:0_20bb5/1
+GAATTTCTTAGCTTTCACCCACTTTCAAATGTGTATTCAAACCAACATGGGCAATATTTTGTTGGTAGAACCTTCCCTGCCTCCTGCTTCAATTGAGTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_422027_422463_1:0:0_0:0:0_39898/2
+AAAGGGATGTGAAGTGCAGTGGTGTGCTTCCTTTAGTTATCCAGGAGCATATTTGTAAATTTATAACAGATTCCCTGGCCACCCCGCTCTTGAAAGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2488784_2489224_2:0:0_1:0:0_33aed/2
+CCAGTCTTCATTTAATGGGAAAGCATTGGTAGAATGTGTCTGACTAGCAGGTTCTGACTAATAGCATAGCATAATTATTCAAGCATAAATACACATACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2353923_2354387_1:0:0_1:0:0_532d7/2
+GGATGAATGCACATGATTGTGAAGGAATCAATAATTGGGTCCCAGCACCCGCCATGCCTAGCTAATAACCTTCTTAGGAGGAAAGCCAGTAACGTGCTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_602182_602659_0:0:0_1:0:0_44b8/2
+ACTAGCACAGGAAAAAGGAAAAGCAAATGGAATTTTCCTCTAGCTCCACAACCTGGTTTCGAGGCCCCTCCTCAGCTGCAAGCTTTCTGTCCGTAACTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_169971_170344_0:0:0_2:0:0_4be38/2
+CCAAACAATTCTGAGAGGGAAGTCCTATAATCTGGGTACAGCCAGGCTGACAGTTTTGTCAAGTGTATTTGGATTACCAAGAGAATATTAATTTTGTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1959974_1960446_0:0:0_3:0:0_368c5/2
+GATCACCACTACTTTTTTTTAACATGGAGTGGTATGTGAGAAATCCCGTAACCATGTATTAGGAGAATCAGGGGTAGAATTACGTTTGATTTATTCCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1979877_1980290_0:0:0_1:0:0_40f85/2
+CTTTCTCAGCCTGATCTCTATTGCTGTTTTACCACGTCGCACCCTTCTCTTAGAAAATTCACAGTTGAACATCTCACTCTGAGTAACAAGAGGGAGCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_931642_932126_1:0:0_1:0:0_2925/1
+TGTCACTCTTTATTTTAGTGATCAATAAGCAAAAGAACTAAAAAATATAAATTTTTGAACCTGGGCAACAGTGGTAGCCTGGCCCACCCAGATTTCTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_328866_329307_0:0:0_1:0:0_ba2b/2
+AGAGCGACTTTTGTGTATAGCTCGCTGGGATTTAAAAATTCTGGACTCGGGATTAATTAACAACTTGAGCCATAACACATCTGTAGGCAAATAAATTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2338459_2338932_1:0:0_1:0:0_15bf7/1
+TGGTCTGGGATAAGCTCGCAAAACAGTGTAGTAATATAAAACTAGCAAAACAATGATAATGACAATAATACGAATGAGAATGCAACTCAGGTCCCCTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1117484_1117926_0:0:0_2:0:0_4e2c0/1
+AGTAGATGGCCTCCTGGGCATGAGGGCAAATGTCTAAAAACTCATGGAAATATACTGCTCCTGCTGGCAAATGTATCACACACCCTAACTCTTTAAAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1139084_1139537_1:0:0_1:0:0_32e56/1
+ATTGCTTCATCTACCTTGGTAGTGACATAGTTGATAAATGTATTGCTTGCTCTTCCTGCTTTTTCCGTCTCCAAGACACGATTGGTTGCACAAACAAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_402051_402534_1:0:0_1:0:0_59818/1
+CCTGTTCATTCTTAACTCAAGAAAGCTCTATAGCAACCTCCTCACCAACCATCTGCTGGAGTGCTAACAACTACTAAGCAGGTTGAGCCGAGTCACTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_621945_622412_0:0:0_2:0:0_2c8e0/1
+ACGCCTCTTACTTCCCAAATCACCACGCTTGGCTTCCTGTGCTGGGCATATCGTTAGGAGCTTCTATGTACTTGTTTTTGATGCCTCCCCAGGAGGACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1088865_1089253_0:0:0_1:0:0_feb1/2
+GCCTCAGGGGAAGGGTGACAGGCTGGATTTTTCTCTTCAGGTAAATGTAGGAATAAATTTCCTCCTTTCCAAACCCTCAGTACCACGGTTACAAGTTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1558148_1558633_1:0:0_1:0:0_4bd61/2
+GCTGTATTTATTCAAGTGGTTTTAACCTTGTTAAAGTATGTGGACAACAACCCCGCTTCTCCAGCCCACGGTTGAGGTCAGGGTTAAGCATCTACAATAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_17054_17469_0:0:0_1:0:0_a794/2
+TTCTCAAAATAACCCCTCGAACTCAAGGACTCCAAAGAAAATGAAGCTATCTATAAAAAACTCTCTCCTAGAAAAGCTGCGAGGAGGATCTTTACAGGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1477048_1477483_0:0:0_2:0:0_672c/2
+TATTGGACATTTCAGTCACTGTAGGTTGGGAACCTTGCCCAGCTGCACATGCACTTATATTTTGTCTTGACCCTTCCTTAAATAATGACCAGCAACAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2324029_2324496_0:0:0_1:0:0_43f01/1
+TCCCTTAGTGGTGAGGCCATTGTTGTACAGGTAAATTTTGTACAATAGTGGTAGGTGAAATTTAATTCTTTGAAACGGTAAGACCTTTTATGGACAAAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_220625_221119_0:0:0_1:0:0_3bf6c/1
+CCCGTTGCTGTGCTGCTTGGGTAGGGGAACATACTATAGATCACATAAAGGAGTTTCACTTGAAATAAGTCTTGCAGCAAAATCTGATTTTTTTCTTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1939598_1940077_1:0:0_0:0:0_4ebe5/2
+ATTTTTTCTAAGTTTGAAATCCAATTTCCTCCTCCAGCAGTAGATATGATCAAAAACTCCAGCTCACGCCTGCCTGTGGTTTAGTAGAATATATTGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2092124_2092649_0:0:0_1:0:0_21215/1
+AATCATGTTAGTGGGAGGGTCAGTCTCAAAGTGTACCACTTCTGCCATTAATTCCCAGAATATAAAAAAAAATAGGGTTTAGTGTCACAGCTAGATTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_737678_738082_1:0:0_1:0:0_31c77/1
+GAGGGCATGATTGTTGTTGCCTAGAGTGAAACTGATTACAACGGGATTAGTGTCTCAATAGTTTTGAAATCATAGAGGTTTTCATAGTCGATGTGTGCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2226762_2227171_1:0:0_1:0:0_43987/2
+TCATGAGACAATGCACATAAGTTTACATGCAATCTGCCCTTTCATTGAAGATTTTCTTACTACAGCAACAGCAGCGCCCCTTACTTGGAGTGAGATTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_121177_121666_1:0:0_0:0:0_46dee/1
+GAAGTGGAATATGTTTTTTTTGGACTTGCACTCCTGCCAGATGATCACACTTAATACCAATTATGCTAATAATCAAACAACACCGTGTCATCAAATTAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_273667_274261_2:0:0_1:0:0_40fe2/2
+GATAGGTGTTCACGTTGCCCAGGAATCTATAAAACATCTACTGACCTTGGCTAATAGTTTCTAAAGGCAATCACCTGCAGTTTCACCCCATCATGTGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_224118_224472_0:0:0_1:0:0_a255/2
+CCTGTAATCCAGGCAAAGCTGCCTTTTGCCTTTGTTTTTCCACATTTGTCAATGATGTTGAGCACGCGCCTGAAATTAAAAGATACAGGCCCTCCACCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2250043_2250522_1:0:0_0:0:0_45e4d/2
+TCCCATCATATAATCTATAGCCCTCCTACTGTTTTTGATATTATGCCACCATGTGGAATTTAAAGATTTGAAACAAAGAAAAAATATATCTTCTTGAGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_719364_719836_0:0:0_1:0:0_382d6/1
+GTGTACATTGGTTCCAACTTTAAAGTCTGCCTGGCCCACCCAGGGCAGAGCTAGTTTGAATTGCACAGCCACCATCCTGGAGATTATTGCCGCAGGGTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_181197_181604_1:0:0_0:0:0_38b8b/1
+TCTACCCATCGGAATTTGGATATTAATATTCAACAATTCTCTTATTTTGAAACAGAGCGAAAGAGAGGGGGCACAGCAACAAGGAGTGCACATTTTGTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1031572_1032043_1:0:0_2:0:0_4cf43/2
+CTCCAGTTTGACATATGCATAGCCATCTTGATTTTTCTTTTTTGGAAACACCACCCTGAGAAAAAGAGGAAAAATAAGATGTGTACGGTCAGAAGGAAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_695690_696087_0:0:0_1:0:0_1ce21/2
+AAAACATAATTAATGTCTGTTGCCCAGCACTTTGCAGTGGGTAGTTCCCTTGCATGGGCTTCCCTTATAAATATTCTAGAAACTCTGTCCAGTACTATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1587881_1588336_1:0:0_1:0:0_34b33/2
+CTGTGGGATTCCTCTACTACTGTAACCTGTCTGAAAGCTAATAACCACTTCCCAGACTCCATTAGGGCAATGCCCCCGACATTTCAATTTATTCTCCCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1857619_1858071_1:0:0_0:0:0_1a8be/2
+TACCGTGCAGGGCCACCAAACCAATAGGGAGACGGGGTAGTAAAAAATTTCTATACACAGTTACAGACAGCAGTCCAAGTAAAAAACCCCATGAAGGTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1280787_1281311_1:0:0_1:0:0_2344b/2
+GGGACCCCGGCTCAGGGTGGCCCTGAAATATATTTAAAGGCAGAGAGAGAGATTCGTGCCATGGTAAACACTACATGTCTCAATAAAAATGGGGTTAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_832287_832858_1:0:0_1:0:0_379e7/2
+TGAGTAGTTTTATTTGACAAAGATTTAAGTGCTGGCATAGATTTTGGTCCATTTAAGGGGCCAGTCGAGACACAATCCTATGTAATAATTTGCATTTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_21283_21733_1:0:0_0:0:0_21585/2
+TAAATGTGATAAATTTAGTGCTGGAGGACCATCTGAAAGAAATATGGATGAGGCTGAGAGAGTGTTAATACAAAAAAAAAAAAACTACCCAGCTAGTAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2327001_2327471_1:0:0_1:0:0_40406/2
+CCCAAAGAAGACGGTCAGACTGTGCCTGTACAACAGTAGAGACGGGTGACCAACACTCTATTGTAGGATAAAAATATGGTGAATAGAGAAACATTATTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1309722_1310131_0:0:0_1:0:0_17948/2
+ATATAGGTGTGATCTGTTTTCTTCCTTCGTCATGAGCAAATGGAAGGAATTCCAGGAGAATGGGATGTGGAAATGTCTACTTTGTTTGTTTTCTACAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1959114_1959512_1:0:0_0:0:0_5b03e/1
+GAAAACAAGAGGGCTCCAAAACTTATTCCTCCCGGGCCTCCAGGCTCCGCCTCGACAAAATTAACAGTAAATTTGTTGAACCTCTGTTTCACAAGGGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_220154_220587_1:0:0_2:0:0_38abf/1
+CTGGAGAGAAGATGGAGTGATCTTTTATCCTTGAGTTAAATGCCTCAGGTCGGGGCCCTCACCACTACAGAATTTTACGCTTCAAGACTGTTCCTTGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2448912_2449348_1:0:0_0:0:0_50c34/2
+AAACGGAAAACAAAACATTAGTTCCAAACACAATTGGTGACATAAGTTATGTTGGCCCATGATGACCATGAAAATGCTCTTTGTTTTTTCCCTTAACTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1332460_1332957_2:0:0_1:0:0_3cc53/1
+TCCACTCCAGCACGAGGCTATTATGTAATGAATATGTAGACATTATTTCCTTCAGCTCATGAGCCCTCAGAGTGCAGACAGATAAATAAATCATTTGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1672567_1672992_0:0:0_1:0:0_11ad9/1
+AAGCTAGGATTGCATATAAAAAAAAGAGTACAGAATATTAAAATATAAGGAACCCTAACCTGACTGTTTTATTTCCACTTTAATCCATGAGCTCTACTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_383102_383629_0:0:0_2:0:0_2a232/2
+TTCTTTTGTACCAATGTCAGTCTTAAAAAATTCAACCTAAGGCAGGCACATCAACCAGTTAATTGAATGTTGGCACATCCAATATTGAAGCTACCAGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_212933_213378_1:0:0_0:0:0_1b2ec/2
+TAGCAAAATTGTGTCTTTATGCTTTCTGACCACGAAGGAAGATGGAAAAAACTAAGATCAGTAAACAGTGTATTACCGAGACTCCACTGCATGGGGAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_192621_193085_0:0:0_2:0:0_290f8/2
+GAGACTTGCATAAGGCTCGTTCAACCATGTTAGAATTATTACTCTCCCCCAGCTACGAAAGCAGCTTGGCATGCTTTGTGTGACTATAAGGTGGTGTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1778916_1779431_1:0:0_0:0:0_1ebf1/1
+GATCCTGGCCCTACAAAAATGTGGTGACTTCAAGTGTCAAGACACAAAGATCTAGGTGTTTGTGATCTCTATTTACTGTGGATTGGGAGAATAGGGCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1576181_1576622_1:0:0_0:0:0_21f72/1
+TATGTTTATTTCAAAGTGGAGGAGAAAAGTAAGTGGGTCTCAAAGTCACTCACGCCATTTGTGTTATGATTGTTCCTGAAAAACCAGCCCCTGCACCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2376737_2377171_0:0:0_1:0:0_15748/1
+TCACCCAGGCTACATCTGACAGCATGGTGTAAACAGTGTTGCCCATTGTACATTGGGCCCTTGACTAATCTGGGCATGGTACCGAATCTCTATCAATAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2141935_2142375_0:0:0_1:0:0_103fb/1
+CTCGGCCAGGATTTACCTTGAGGATTTTGTGTTTTTAGAGCTGTTGGCAAGTTATTTCTGATCATTATGTTTATAAAGCCAGGGCGCGATCCGCCCGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_723729_724170_1:0:0_1:0:0_1576/2
+GGAGGTGCCCAACCAGTTAATACTATCCACTGTAATCCTGTGAAAGGCACTATGGTGAGACTCAGGGTCTCGAACTCCTGGAATCAATTAAAGATTCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2107947_2108372_0:0:0_1:0:0_1d9b3/1
+GTGTATAGCTTAAAGATAAAAACACCTACATTTTCCTTCACCAGGGCAACTCTGTTGAATCTTCATCCTTAACAAGTTTTTTTCTCAGAGCCTCCTCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1726267_1726772_2:0:0_0:0:0_23e7a/1
+TCAGACACAGAGCTGAATAGATAGATTCAAAACATTACCTGACCTCAGCTGCAGTGGTGTATGTGTAAAACCAGAATTCTCCAACACTTCTGTTCTATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2033968_2034385_2:0:0_0:0:0_2961c/1
+GACATCTTGCCAAAAAGAAAAGCTGACTAGCCAGGATTAATTATATAGCCCCTCCCTTAGGGTAGTAAGACACAGGATTCCTAAGTTTTCATCTTCACGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_867876_868317_1:0:0_0:0:0_20392/2
+AAAGGAGCTGGAGTAATTGTTCAGAGGAAAACACAGGCAGGAAGGTATAGACGGGAATAATTCATTAACTTCATCATGTGAATCCTGACCAGTCCTGGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1447177_1447568_2:0:0_0:0:0_445d5/1
+AAAGCCTCAAAGGTTGCACAGTAAAAATCAAGGCTGGTGTATACATTAATCAATGTATTTCCTCTTGTGTTACCATCAATGTCTTTCTGTATTGGCACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_692595_693047_1:0:0_0:0:0_43bff/1
+GCAATAATAAAAGAAAGGCTCTCCATGCCACCGCATGCATAGGAGGTGAAACTCATCTTTTTAAGAGCTGGGATCCAAAGGCTCTTAGGAAAGTGCTGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1930182_1930596_1:0:0_1:0:0_11337/2
+CAGCAGGCCCAGCCTCAGACCAAGTTAAGGAGGGTTAAGAGTAAGGTACTTAAGGTGTAACTTTCTATCTTTGACATGTCTCATGCCAGGCTGGTGATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2405750_2406207_1:0:0_2:0:0_50b57/1
+AAGATGGTGAAGGCAATTGTATGAAACCCTTGAAAATATCAGCGACTCATGGTGCCTGTAACGGAGGTCGGAATCCAAAAAGCATGAAGAGAGGAATTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_254538_254850_2:0:0_0:0:0_4581a/2
+TATAACACCTTTTCCACCCATAAAGGCTTTGCCATTACAGGTCCCGGGAGGCGGGGTGGGGGCCAGCACTGCGCTGCTTTTTTTTTTGAGCTCCTGCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_872822_873272_1:0:0_0:0:0_11fbb/1
+AGATGTTTCCTCGTAAAGGAACCATCTCGGCTTGAACCTGGTTGGAAGCTGCCTCAAGCTCGTGATCTTTTCTAAAGCAGGAGCTCTCACATGGTACATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1479745_1480279_0:0:0_2:0:0_ffc7/1
+AGCAGCATACCTACCGGTCCCCTAAATGGCGGTGTCAGTTTTGCCACCTTGAGCCCTTTTTAACTATTACCAATCAATCTAACTGTAATTTGGGTATGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_254497_254963_2:0:0_1:0:0_1b05a/1
+AATGAAATATTTACTGCATAAAGTTCTGGAACCCTGTAGGATATAAAACGTTGTCCACCCATAAAGGCTTTGCCATTACAGGTCCCGGGAGGCGTGGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_993443_993883_1:0:0_1:0:0_19801/1
+CTCAGTTAATGTATATGGTAGGAATTTTTATGTCTCCTCCCCCAAACCTTTGCCCAACAGCTCCAGCCTACAAAAAAAATGAAGGAACTTTAAAACCTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1526303_1526700_0:0:0_3:0:0_a929/1
+TGGGTAGATTATGGAATTGCAGACAGACAAACTCCTTGCTCTAATTTTGGTAGTGATAGCTCACTCTTACTCATCTGTTGCAGAGTTCTTGAGCTTCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2284696_2285084_0:0:0_1:0:0_59826/2
+ATGATCTTCCCAAACAATCTTCAATTTGATTTTTTTGTTTCTGACAAACCATGTGTCTGTTTTTTTCAAATTCAAAAAAAATCAGGGATATGATTTCCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_663091_663546_1:0:0_1:0:0_28674/2
+AATGCACCTCCTCTGCATTGCCTCGGCACACGCTAATTTTTCTTAGAGATGTGATACCCAGGCTGGAGAATTAAAAATTGACATTATATTCTCATTCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_253701_254234_1:0:0_1:0:0_40a40/1
+GGATTTGAAAAATTTTTCTGTGCTGCCCTTTAATCATTTATTATTATACAATATTGGAAAGAAACAAAAGCTCCTGGTCTCCGTCTCGAGCCGAAGGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_378377_378890_1:0:0_1:0:0_1e92c/1
+CTTTCATTTTATGTTATATATGTGCCTTGACTAAGATGTGAGTAAGATAGACAGAGCAACACTTGGCATGTCTGCAAATAAATTGCTTGGAAATGGATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_671486_671951_1:0:0_1:0:0_5227a/2
+TTGCATTCATTTAAAAAAAAAAAAAAAAACGGTGCCTACCGTGAGCTCTTTTCAATAATAAGATTAAAAAAAATTTGAGACTCCACATTTTTCTCGAACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_992109_992546_1:0:0_1:0:0_1ddf6/2
+TGGGGGACAGGGTTGTTATTACTCTATTTCAAAGGTCCAAAAAAATTAGATTAGAGGTTGGCCCCTTCAAATCGAAGGCTTAAAATGAAAATATACACAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_139978_140426_1:0:0_2:0:0_1b6b3/1
+CAGGTCCTGCCTACTCCAAAGTGTGATTCCCAAGAGCTGAGCTCGTATAATGGAAGAGATCGGAAATAGTAAATAAAGTCATGTCTCCACCCTTACCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_989248_989720_0:0:0_1:0:0_5a4e0/2
+ATTGCAGAGCCAGTTACAGTTACTTACAATTCGGAAGGAGAGGAAAGGTACCTTGCTTAATGAAAAGCCCCGTCTTCGCCACCCCCATTTTCTTCCCAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1075889_1076259_1:0:0_1:0:0_50cb/2
+TATCTCAGTTTTAAATCTAGCCTCACTGGAAACGCTGGCAGATGGGCAATGAGTATATGTAGATCAAGTTTCAGCGAGTTCGAGCAAGTTCTTAAATGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1030458_1030960_0:0:0_1:0:0_4680e/1
+GTTTCCAAAAGCCATGAAAAAATAAATTGCAGTGAGAGTCAGAGGGGAGTGCGTGTGCGGGCGTGGGTTAGGTTCATTCACTGTAGGTATCTCCAGCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1765582_1766022_1:0:0_0:0:0_31eee/2
+AATTAAAAGCATACATTTTAGTCAGGAGATTTTATTATGTGGGTGACAAACACACACACACACACCCGGGCGTGAGACTGGCAGTAGAATATTTTGATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1754848_1755328_1:0:0_0:0:0_55514/2
+CTTGAGTTAGCAATCTCAACTCAATGTGCGGTGTCTGTAATCCCCAAGAAGTGATTTTGGAGGCCACCACATTAAATACATATGCACATAAAGTCCTAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1963652_1964124_1:0:0_0:0:0_22643/1
+ACCACAGATACAAAAAAAACATATTAATATATTCTCGATTTTACATACGATATATGACAATTTTCCTTTTTCTCCTAATTTTTCTTCTTAAAGGAAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_257375_257786_1:0:0_0:0:0_a5ae/1
+TTTTTGTATCCCCCTATTATTTTTTGAGATTACAGAATTGAACTCACAGCAAAAAAATTTCATACTATTAACCATATGCTCTCACCGAAGATTAGTCCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1157190_1157582_0:0:0_2:0:0_179d7/2
+ACTACTCAGAAGACTACAGGAAATATTCCTTTTAGTAAATTTTATGGCTCATGCTATTGTTTGGGAAGCTGGGCGGGGGCAGGGCCTGAGTAGATTACCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1801090_1801477_1:0:0_1:0:0_3223b/2
+AATTTTCGCTAATTTTTGGGCTTCAAAAAAAAAAAAAGTTTTGTATAACGCTGGGCAACAGCCTGGCCATTATTTGTACTTTCTGATTTGAACAAAACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1879340_1879772_0:0:0_2:0:0_4c095/2
+TTACATAACATAATTGATTTATGCAACTGTAAAATGCTAGAGACCAGCTGTTACTATAAGTGGAGCATCGAATGAAAATAATTTCAGTATTTTTATTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2284907_2285383_1:0:0_1:0:0_2c57d/2
+GCCTAGAATTGCTGATATTTGTTAGGTAACAGGAGTACATATATCCATTTCTCACAGAATTCAAGCAAAATTCTACCCATGATCTTCCCAAACAATCTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2318288_2318782_0:0:0_1:0:0_28309/1
+CCCCGAGGCTGACATTTTTTTTTTTTAGAGCTCAGGCAATAATACCAATCCCACATGGTGGAGAATGGACCTCATCACTATATTCCTGCTTTCAGTTTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_857751_858177_1:0:0_1:0:0_3bcb5/1
+GCGCTGATACCTGTAGAGAATTTTCTGCAACTAAGACAACCACATGCATTTGGCAGATATACGCATCAAAGCCAGAAGAAACCCAGGGATTCAGGGGTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2826_3250_2:0:0_2:0:0_474d2/1
+TACTAATTATCTGGATAATGATTCACAGTGAGAAACTAGAAAGAAAATGGTTTTCCCTGCACATTATGTTTATCTTATATACTTAGTTTATTTGATTGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1179774_1180172_0:0:0_1:0:0_32e3d/2
+AGACTGATCCTTCCAGTTTCCAGAGTTTGGAGTTTCCTGCCTTTTGCTTCTGGCATCTTTACCCTTCCAGTCTCAAATTCAAGACTATCTTACCCTGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_412060_412489_1:0:0_0:0:0_35de1/2
+AAGTGGTGGTCCTTATTACCTGAGGTACCAATAAGGAACACTCCAGGAATACTTGGATGGAGCATAAAATACAGTAGCTGAAAACAATTTAATGCAAATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_659392_659805_2:0:0_0:0:0_4e3f4/1
+ATGGAGGTCCACATGTATCTGCAGAATTTATTATACTTTTCCATCCCCACTCTTGCCAGCAAGGACGTAAAGGTTTTGCATAGAAGATATCCACTTCCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_196920_197401_0:0:0_1:0:0_4fde1/2
+TGTTAACATACACTACGTTTTATTATTGGCCAATTTGAGATATGTGCTAACCTTAAATTTGGTAAGTTATTTTTACCTATCAAATCAATGGCTCACGCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2458066_2458445_2:0:0_1:0:0_394ca/1
+TCCTCCACAGCATAAGTCTAGCTGCCAACTTTTGTAGCGAAACCATAAGGTCATATGAATATAGTTATTTCAACATTCAATCAGTGGTGTGGCCTTGAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1750164_1750496_1:0:0_0:0:0_47661/2
+CTCATGTCTTACCACACACCCACAGATACTAACAATCTCCTTTTCAGTAGGTGACAGCTTGGGTGCATGTCAGTGTTTAAAGTTGCTAAATAGGATTGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1986541_1986976_0:0:0_1:0:0_eff9/1
+AACTTATGTTTGTAACCTGGATTTGGCTACGGGCACTTTCCACTCTGGAAGCTACCTATTTTTTGTGGATGAAGACACCCAGGGCTGGTTATTCTGAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_593231_593699_0:0:0_1:0:0_42f4c/2
+AAATTATCTTCCCAGTGCCCAAGCCAAGGTAGCTCCTTGGCCGGGCCGCCAAGATCACAGAGTTGACCAAGGCAAGTCTCATCCAGTTGAATCCACATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1449348_1449790_1:0:0_2:0:0_8161/1
+AAAGAAAGCATTAACATAACATTATAAAAAAAGAAAAGTAAGATTTATTTTCCAATTCATCTCAAAAAAAAGAGGATCCCCGTCAGGCACATTTCCATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_303234_303697_1:0:0_1:0:0_3de3e/2
+TCTATCCAGTTGTGTGTTTCTGTCTGAGCTTTCTATTCAATGGTGCAAGTGCCTGCAATCCAATGCTAAAGACACGTAGAGAGATTTATTGGTTCCAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_993497_993882_3:0:0_1:0:0_833a/1
+TTTTATCTTTGAGGACAGCCAGGATCTGCAGCTCCATCCGAATTGGCTCCATTCATCAACAAGAGAGAGGCGTTTTAAATAATGGACCTGGTTATGTTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_303535_303957_1:0:0_0:0:0_c2df/2
+TTACATTTCTCACTCTACTCCTTATCTTAAACAGGTGAAACACTCTGTCTTCCTTCCTTTCTAGAGATTTTTGAACTCCTGACATCCTTGCCATTCCAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_605287_605680_1:0:0_0:0:0_3c970/1
+TTGCCTAGGATCCATACTGTGTTCCCAAGATAAAACTTTTGCCACTAAATGCACTGCTCCAGTGAGCCGAAGAATCCTTGTATGTGTCTATATCAGGGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_815853_816323_2:0:0_0:0:0_3d55b/2
+GCTGGGAAATGGGGCTTGAACTTTCTTTCCTCTGCCACTGTTGTAGTTCAGGAAGAGTGAGACCAGCCAAGCTGTTCAGTGAGCAGATAAATATAAGCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1292908_1293296_1:0:0_0:0:0_6d17/2
+GACCTGTAATTTAAACCTCTCCAGCTAGATACAAAAATTAATTTATAATAAGACTCGATGTCCATTGGGAATAGAAATGACTCTTTCTTTAGACAATTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1249686_1250190_0:0:0_1:0:0_1078c/2
+TGTAAAAGGGAAGGTAGAGACAAACAAGTAGCTGAGAGGGATTAAGTATGCAAATGAATGCAGTGTCTCCGCCTACGCTATCCTAAACAGCCTACGTATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1067767_1068279_1:0:0_2:0:0_30c74/1
+TACAAAGAAATAAACCTGTAAATTCACATACTTTCATTACGCATTTTCGAGGGTGGCGAGGTTGGGATGGCTCTCTTATGTATATTATAAACGGCCAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1380175_1380595_3:0:0_1:0:0_46335/2
+AAGTCAGAATGAAAATTCAAGAAGAACTATTTTATTGTTTTACACACACAACTTCATTATCCCACTAGGGGGGAGGCAGGCCAAGGGAGGCCACCCCGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2397625_2398090_1:0:0_0:0:0_5ad13/2
+CAGCATTTCATGTCTTCTGGCATATAAAGAAGGAGTGAGGGGGGCATGGTTTTGGTTCCTGTCTCACATTAAATGAGTCATTTCCTTATTCTATGTTGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_899551_900056_1:0:0_0:0:0_357ce/1
+TTTTGTTGTTCAATAGAATATTATATTTGAAATATATTCCTATCGGCCTCTCACTTGAGTAGCTCCGTCCAGGCTTCTGAAGTCAAGATAAAAAACAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1776520_1776987_1:0:0_1:0:0_43701/2
+GTTTTTATGTGTTCTAATTTCAGCTTTCCCTTTCCCTCTAAGTAGAGGACATCGCCAACACCTCAGCAGATCTACAGTAAGCTTTAGAAAGATGGGGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2046302_2046797_0:0:0_1:0:0_1172/2
+ACCAAATCTGGGCTTGTCTAACCATTACCATGCCCAGGAGGAGGAGCTGAGGCAGCCATATACTGATAGTCTTACATTCCCTTCAACTGTGTAATATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1119650_1120139_1:0:0_1:0:0_1c961/2
+TGGAGTCGGTGCTGGCAAAACAAAATTCTGTTTCTTATTATTGTATTCCTTCCTCTGGTGAAAAAAAAAAAAAAAAATGTCTAGCATCTGTCTCCCTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1292498_1292986_1:0:0_0:0:0_340dc/2
+AGAGATGTTAGATCAAGTTCTTAAAAATAAGGCTTTGGGAACCAGGACCAGGCTACTCGGGGGACACGTGGGCAGAAGGAAATAGATGGGGAGGAGGAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1259207_1259700_1:0:0_0:0:0_3afa9/2
+TATTGTAGAGCAGAGGCGGGAGAAAGGTGGGCCTGCTTGGTACTGGCATGTTGTTGCAATTAGGTAATACTTGTGATACCTTAGATGGGCATGCCATCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1037956_1038373_1:0:0_0:0:0_2fe3/2
+CTCTTCTGGCAGAAACACATCCCAAACCCCACAAGATCATCAACAACCTCTATGTCCTTTTTTTGTTAGTTTGAATTGATTATCGGCTAACACACAGACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_931695_932073_0:0:0_1:0:0_4f028/2
+TGTACTTCTCTCTCTACATGGAGAGATAAATTTCTGATTAAATCAGTCAGGAGTTGAAATATAAAGCCCTGACCTCCAGGGACCCCAGCACCTGAATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2204000_2204469_1:0:0_0:0:0_5068b/1
+GAAAATTTCGTTCTGGCTAGCAGGGTTCCTGTAACCTTAATAACCTATTATCTCAGCGAGAAGGAAGAAATCTTCCTAGTCAATCCTGGCAATAAACGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_290219_290714_2:0:0_0:0:0_54768/1
+CCCAACATTCCAGCACTACGTTGTTGTTAGAAAAGCAAGCAGCCTGGTTGTCTCTTCTATAAATAAGATGGGATTACATCTTTTTCATATGATTTATGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1186536_1187041_0:0:0_1:0:0_2a1b2/2
+TTATAAAATGGGATTGGAATCAATATCAGAGTAACCTAACTAAGATTCTGGGTGCATTGATAGAAGCCAGGAAAGTACTTATTGTCTCGAAACTCTCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2025593_2026080_1:0:0_1:0:0_3e822/2
+CTCCTGCCTCAGTGTATTTAATTATGGTTACTCTTGCCATAGGCCGAGTAGACGAGAATACTGTTCTGCAAATGGTTTTCTAAGCTGCCTTTTTTTTCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1577683_1578137_1:0:0_0:0:0_1d150/2
+TATTTTTTTTTCCCAATTCCCACAATTTTTTCAACTATACAAAAACATAAAAACTTCTAGTAATTTCCAGTCTAGTGAACCAATACAGTCTTTGATTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_48412_48893_1:0:0_1:0:0_1214/1
+ATACTTGGAGTGCATTTTAGATTTCAAAAGAGAGAACAAAGCTATATCTGCAATCAGAAATATTCGATTTTGTTTATCTGAAAAAGGAAAAAGATATGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1964341_1964781_4:0:0_1:0:0_da7b/1
+AGTGAGACCATCCTTAGGCTGTGAAGTTTAACTCTAGCATACTCAACCATCTACTAGAATGACATAATAAACACACATTTCAACTTGAGGTAGCTAACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_850526_850996_0:0:0_2:0:0_2c62c/2
+AGACAGGAATGCATGGTGCAGGAATCTTTGTGCCACTGCTTGATCTTCGATTTATATCACTAACAGAGTGATATGAGTGGTCTTTAACCCCAGGCTTTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_816525_816953_3:0:0_1:0:0_29e4f/2
+CTATAGAGACCTCACTCCGTCCTCCCAGCATCTTGGAATAAATAAGCAGTTTTGTGTTCTCGGAACTTAAGGCTGACTTTAGATAGGAGCACCACTTATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1701506_1702012_0:0:0_1:0:0_3cbd3/2
+AAAACTGAATTCCTCCCAAAATTATTCCTTTGGCTTCAAGGACCCAAATATTAACGGAGCCAACTCAGAAGTAGGGATCTGCAGTTTCAACATACCCTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1552200_1552614_0:0:0_3:0:0_5b454/2
+AAGGCTTTTTTTGAGCCGATGTGCTGTGCCCACACAAGCTGTACAAGTAGATCGCGCGGTGGCCACAGTCTATTTGGCATGACCTTTCTCATATTTTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_700555_701040_1:0:0_0:0:0_2b200/2
+CTCCCAAGGATCCCAATTACATTTTACATAATAGTGATTCCAGTTGTCTGGCCTAGCTGACAACAGACCATCTCAAAGACATTTCAAAAGACCCTCACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2317745_2318238_0:0:0_1:0:0_15c8f/1
+AGTGACCCAGAAACTTAACTTGCCTCCTGGTCTCAAGCGTTTTCAACTGGCATACTCTTAAGTTAGTTTAAATGGAGTTAGGGTTTGGGTCCAAAGATAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2195396_2195845_2:0:0_1:0:0_274cf/1
+GTAACAGGCCTGCCTGAGAAAATTATAATTAGGTCTTCATATTTGAATTTGTTGATTATCCATTAGTTAAGATTGGTTCAAGGAAGGGCAATTGGGCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_579920_580284_1:0:0_1:0:0_2ff43/2
+GGTAACTAAGTAAAGCACAAACGCAGGGAGAGTTGTTTGGAATCTGATAATATTTTCATCTGGGTTTTTGATAATCCTCTGCATGATTATTCTCTCAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2211286_2211740_0:0:0_2:0:0_28cf6/2
+CAAGGAATCCAGCAATGTGCCTGGGTTTGTTATTTTTGGCACAAGGAGTTCTTTTGGGAGAGAAAAGCACACATGAACCTAGAGTTGAAAGAAGACCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2173966_2174402_0:0:0_1:0:0_3aae7/2
+TGCCGCTACCAAAGTAATTGATATACAAACCCCGAGTAGGAGTATATTGATGTACACCTACTGCGCGCGCGTCCCTCCTGAATTTTTTGTGGACAATGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_246904_247427_0:0:0_1:0:0_50b5c/1
+TTTCACATATTACAATGATCACTCAAGGTTATGCCTTTATTTTTTTTTTGTAAGAGTAGCCCAGCTCCTCCTATTAGGACTTGTAACCTGAAGCTAGGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_558904_559414_0:0:0_1:0:0_1bee6/1
+CCCTGTAATGCTAGCGTGAGCTGCTGCTGATAGAGAACTCCTACATGACGATAAGTAAAAATGAAGTTGCTGGCCCTCCCCACCGTGAACTTCAAGGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2242995_2243455_1:0:0_1:0:0_6333/1
+TGCTACACTGGGAGGCGGCAGCAGGCTGCCTGGGAAGCTGAATTGATCATGGCTGTTTTCTTCCTCACTGCAGATTCATTTTTTTTTAAATTCCAGGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_87441_87939_3:0:0_0:0:0_23dee/1
+CATTTTTAAGACAGATATATATAGACAGAATTCTGAGGGAGACTCCTGCCCAAAAAAAACTGCACAATTTTGTAGTGATCCACCATCTATTCTTTGAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_335056_335547_3:0:0_0:0:0_8f16/1
+CTGAAGGGAGCTTCCCCACGCTGAGTATCTTTGGAAATGATAAGCTACTCCACTCAAATTAGACAGGAGACCAGGCTGAGGTCCACTTTTAAGAAAAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_473407_473828_2:0:0_1:0:0_274d2/2
+TAGAGGTTCCCCTTTTCAAAAACCCCGAGGTATCCCTTCCATGATTTGGTGTTAGAGACCAGGAGTTCAAATGTTTGCTCATCTAACTTTTGAGGATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1417804_1418320_1:0:0_1:0:0_3ea1/1
+ACAAGTCTTAGTCTTTTGTTATTCAAAGGAATAATTCAAGTGAGTGGTAGCACCACCCGGACTCGCTTTGTCTATCCCCTTTTCATACCGCTTACACACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2154138_2154625_1:0:0_0:0:0_37ee7/2
+TTTATGGTTTCCTAAATTTATTATTACCCCTCCAGCAAAAGCTGCACTCCTGCACTGGGAAACCATACGAACAAGGGCTGCAGCAAGGGACTACTTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_417770_418135_1:0:0_0:0:0_3eafb/1
+CTTGAGCTGGGATTACAGATGGATCTAAAGGCTCTTGCTGTCTCAAATGCATGCACTCCTAAGAGAACTGAAGAAGTTGGACTATACTGCTGTTGCCCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_44822_45294_0:0:0_1:0:0_2b059/2
+CAGATACAGCTAACTTCCAGCCCTGCTTTAGTAGATGCAATGACTTCTAGTTATACCACTGTACTATTTTTGTAGCCAGAATAGCGCGCCCCCCAGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_533193_533664_1:0:0_1:0:0_9ea0/2
+AGCAAGAGGCGTGCGGAGCCCAGCAATGAAATGACCTGCAGCCATTTGTTCTTAAATAGGGATTACAGTGGGCATGGTGAAATGGAGTGAAATTGTATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1917558_1917994_1:0:0_1:0:0_17b8b/1
+TTAGCATCTGAAAGGAGGATATGAGGGCTCTCCATATGCGCCTGTCTTTAATTGGTTCGGGGCATTGGAATGAGGAAGGCAAAGCAGCCTCCCAAAGAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_57137_57584_1:0:0_0:0:0_1bbfa/2
+AAGAGTAAACCTAATGTAAAAGATTTGCCCAAGTAAGACCAACAGTTATTTAGTTCTGAATATAGAAAGAGGCAATCATTATCATCCTATTGACCCACCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1843587_1844058_2:0:0_0:0:0_39e25/1
+CTTTAGCTTTGGGGAGTTTTTTGTTATTAGATACGTTGAGACAGAATTGGCGCCACACAGACCAGCAACATCATCATTCTCGATTCAGATTAGGTACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2452877_2453314_0:0:0_1:0:0_3dc34/1
+TTTATCATACATGTTCCTGGCAATAAATAAAACGAGAGCTTTGAATTTATATGGTGGCCAGTGGCTCACGTGCAAGACTTAAATATGTGAGCTATGGAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_835961_836482_1:0:0_1:0:0_dd75/1
+CAATCAATGAGGGGCTCCTATACGGAGTGGGGCCCTCAGCTCCTGTCGCCCACCTACTTTAAAAATCCCAGCTGATGGAGTCTTTTTAAAAAAAAAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1631731_1632168_1:0:0_0:0:0_2fec0/2
+GCATTTCATGAGAATGTGAAGAATGTCTGAGTAGAACACTGCTGATAATTTCTTCTGACAAACGTACATTTCAATATTAATGTAAATCGACTCACCTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2199133_2199556_1:0:0_1:0:0_456f5/1
+AATAATAATCTCATGGGATCATTTTATTCTCCTCAGCCTCCCGGGCGGGGGTGGTACTGCAGGGATTTCCCAAAATAAAACAATAGAAAGTTATTGCAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2083830_2084214_1:0:0_1:0:0_47258/1
+AACCCTCCAGCTCCTATCTTCATTTTCACCTAAATTTTCCATTGCCAGCTGAATGCATAAAGGATTGTGTTGCCATCCTCCATCTCAGTGGTAACTGGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1431454_1431833_0:0:0_1:0:0_7d2c/2
+TAATGCTACTAGACATGATGTTTTCCAGCCAAATAAAAATAGTTTCTATTGGGCTCACTGGCATGTTGTTTTCTTCAGAATATCTATCATTTCAAAGGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1547825_1548224_1:0:0_0:0:0_27d7c/2
+AGAAACTGTGATTGGTTATTTCTGTTGCCCAAGGAAAGATTTTGCAACCTATATTATTTGGATTGAGACTCAAGCAGCTACTTGGGCTGCTGCAGCGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2055234_2055702_1:0:0_1:0:0_5950f/1
+GCTGTACTGGCTTCTCTTCTTTGTGTTTGTTTGGTTGCATTCAACCCATGCCAGAGCAGTTGTTGCCCAGACATGATCTGAATTTCTTCATTTTGCCACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2202786_2203168_0:0:0_2:0:0_405a3/1
+GTGCTTTCAGTCAGGTGAAGCCTGACACTTTGTATATTTTAAATTGGACTCTATAACTGACAACAGATGGAGGCTGGTTTGGCCAGCATTTAAAGGCAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1364578_1365088_1:0:0_0:0:0_48768/1
+CTTAGGCATCCCAGGCTGGGCAACAACAACATGAGCCCGTTTATTATTAATTATTCCTGGATCAACTCACACACCACCACTGGCAGAGCTGGAGTCTTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1357926_1358428_0:0:0_2:0:0_1fe0/1
+AAGATCTCCATGTGAATACAGAAAAAAAATATAAGGAAAAATCTATGTACTTTTGGGAGGCCCAGTTGGAAAGGCTTGACTGTTCATGTTCGTATTGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1273041_1273526_1:0:0_1:0:0_37bf/1
+GAGGCATGCTGGGCAGAAGATTGAGTGATGCACCATCACAGTCTGCATATTAGGTTGGAAAACCCTATTGTGTTGAACAACACAAAATAGAAGATCCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_584387_584851_1:0:0_1:0:0_58f97/1
+AAATGTAGTGGGAGGCTGAGGTCACTCCTTTTGTGACCATATCAAACTGTCTCAATGACAAATGCTGACCTGACCTCATACTGGGAATATCATGACGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_512464_512924_1:0:0_0:0:0_53c7b/1
+GAACTTTAATTTGGCCCGGGAGCTGGCACACTCTATAGCTTCTAACCTAATCCCAGCACCAAAGTTTTTAAATTATTATAATTTTAATTAAGGGGAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_939777_940171_1:0:0_1:0:0_bf66/2
+AGGTAAGGCTACAGTAGTTTAACTGTGCTCCAGCTAGAGCCCAGGCAATAGCCACGGAGGTTCACAGCCCCCTTACAGGCAGATCACCATTCTCTTAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2287470_2287842_1:0:0_2:0:0_34669/1
+TGCTGGCATTTCTTTTGGAATTTCTCTCACTGATGTTAACGCCTCCTAAGAAGCCAACACGGCGCCCCGCTCCAGCATAGCTGGGGTGACTAGTCATCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_756038_756459_1:0:0_0:0:0_4cca2/1
+CCAAGGTTTTTTCAGGGCTTTGTTTCACCAGTAGGCAAGCCTTATTAAAATAACCAATAAAGTCAATACATATGCTTCTTGGCAGAAGGAGAGGCAGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2021858_2022327_1:0:0_0:0:0_54a3b/1
+TATGGAGTGTGTGTGTCATGTGGAACAAAAATTGTATCTTGCCCATGTTTTTCTGTCCAGAGCTTCTACCACTGATTCGTTTATCTCATTGACTCACCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1648493_1648878_1:0:0_1:0:0_4207b/1
+GGAAATATTCAATTCCTAATTTCTTAATTCCCTCAGCACAAGTAAATTAAAAATGTTAATCCTTATTCTTTTATTTACATGAAAGCAAAGGCATGTGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2496409_2496849_1:0:0_1:0:0_29d18/1
+TATCCTGTGGAGGCCCCAAAGTGGCTCCCTTCTGCCTCCCCGTGACCAATATAAGCAGAGGTATTTTACATTGCAATATTTGCCTCCCAGGCCGAGTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_191446_191826_1:0:0_1:0:0_2ad14/1
+TGGGAGGAAGGCATGGATGGGAAAGGTTTTGTTTTAGTTTGAAATTGTTTTTTTTTTTATGGGATAGACTATTGTACCTATAAGGCTGAGACGGACACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1606729_1607142_2:0:0_0:0:0_fcb3/1
+TCAGTGGGTATATTAATTTTTTTCCTGTCTCTACTCATCATCTTCTTATATAACGTCGGGCCACCATGTATGTACCCAGGTAGAAAATGCTATAATGTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1481988_1482393_0:0:0_2:0:0_35fe6/2
+ACAAGTGAAAGACAAAGAGAACGGGGTCTAGATTCATTTCACTAATTTTTATCATAATTGCGACAGTACGCTTTTGTTAATCCCTAACTCTTTGAAGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1277404_1277789_1:0:0_2:0:0_2ddf5/1
+ATATTACTAGAGTAGCCAAGGTTAGCAGCTGTGACAGTGCAGTCTACATATACACACTCCCCTCAGGAATACATATCATTTCCCACAGCAGCCCATCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_387170_387614_1:0:0_0:0:0_2f7b5/2
+TGAGACAAAGTTTGTATCTTGGAGTGTTAATTTATTACCTGGGATCTGTTCCATTAATTCTTTATTGAGCAACCCAAAGATATCTTGACTCCAGGAATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_415706_416125_0:0:0_2:0:0_3b1db/2
+GTAAGCGCTTTCAAATAATTATATTGCACCACCCACCTCTTGAACTTCCAATATTTTTCCTTGTTACGCCTGTGGTGGGATAAGAAACCTTTCTTGCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2212674_2213124_1:0:0_0:0:0_1118a/2
+GCAGTGATTTTAACGTACCCAAGGACAGTCCTTTCTGCTTAATTTTGATCACCACTATTCACAGGAAGGTCAAGGAATGGACATCTCCAGCTAAGGCAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_843043_843461_2:0:0_1:0:0_1ce66/2
+TAAAACACATAATTTTTACTCTAAGTAAGTTCCAATGCCCTCATTGGTTCCTAGACTTATAGCAAGTTGAGCATCCCGAGTGGTTAAATTACTGTAGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2366901_2367350_1:0:0_0:0:0_2fc7a/2
+AAAGAGACAGGGGCAGGGTGAAATTAAATGAACATTTGGGATCACAGACACATGTAATGGTGGCTCGTGATCTAATGAAAATGCAACCTACAAATATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_59901_60404_1:0:0_0:0:0_437a9/2
+CAATTTACTAAAAATATTTTTGAAACTGAAGGGAGAGGACAGGATCAGCTTCTATGTTCAACAGAGAGAGAAGCCTGTTTGTTTTATGCAAAATTCAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_677810_678218_4:0:0_0:0:0_4c3c0/1
+CATGGAATTACCTTAATTTGTGCATCACCTTGGGCTCTCTTGAGCCAGGCTGAGTCAGAGGCACATTATTGTGTGTAAAAAAAATGGAGATTCTGGGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_290825_291221_0:0:0_1:0:0_488d5/1
+CGAAACCAACACAATCCAGAATGTCTGTGTTTCATCTCTCGCTAACGTGGTGACTGCTTGTAGAGAGCCACCAAGTATAAATACAACATATATATTAGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2147111_2147464_1:0:0_3:0:0_2dc81/2
+TGGCCTGGAGTTTGGAATCCCATGTTTGATCTCTGCCTTTTCTTTCAATAATGAATGTACATGAGCAGAAACACAATAATAAGAGCATTTAGACTTGATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_24462_24815_1:0:0_0:0:0_34611/2
+TTTCAGGAAGGGGAAAGAAATGCCACTATTCACCCACTTCAAAAACTGATAAGTTCCACCCCAAAGACTGAGCAAGTGATCACCGTGTTAGTCAGGCTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_994230_994664_1:0:0_0:0:0_b041/1
+AAACAGAATAAGAAGGGAGAGCTCCCAAAGTTGGGTAGGGGGCGGCGGCTCCCGGGACCAGTCCAGGGTCTGCGCATGCCACTATAATCCTTCCTGACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_178041_178411_0:0:0_1:0:0_1d11b/1
+GATGGGCTGCAGCATGGTGTGAATTGATCTTACAGTAATTGCAGGAGAATCTCAGGTTAACAAAAAAAGAATGCTCCTGACCCTATGCCTGTAGCATTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_644482_644956_2:0:0_1:0:0_2fae8/2
+TAAGACTCTCCCATGGGGCCAGGCTGATGTTTTTTAAGAAAAGGGGAGCTGTATTGATCTTTTCTGTCTTACTACCGCCTCTCTGAAGTTCTCTCATAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1636037_1636482_2:0:0_1:0:0_281ad/2
+TGGTGATGCAGTGGCTCCCCAAATGAAACCTAAGCCCCAGTGGGATCCCCTTTTTAGCAAAGGACATTCAGTATGGTAAGGCTCCAATTAATGTCCTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2131759_2132133_1:0:0_2:0:0_31560/2
+CCCCCTGATGGTTAGCACTTTCCCTCTGTGCTCTATTGTCCAGATACCCTCCCATTAATTTCCAGAGGCGTATTTAAAACTGCAAGCATAACTGATGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_146220_146604_1:0:0_1:0:0_4c244/1
+CACACTGTTCATGTAAAGCTAGAAATGGGAGGATGGTATTAAAGAGGACTCACAGAAGGCAGATGTCAGACTGTGTATATCTCTACATATTTTCTTTACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1473998_1474391_0:0:0_1:0:0_50b31/1
+CACGGTGAATAACACCAAAATGTATACCCTAGAAAATAAGCAAAGCCATAAGTATAGTGTCTGTGTCTGCCTTCAAAACTTCAACTAAAACATATTATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_612558_612966_0:0:0_1:0:0_516a3/2
+AGTTTCATTTTCCTTATACATCCCTGCACCTCGGGAGGTGGATGTACACCAGGGGGTGATCCAAGTTTTAGAGAATCACTTCTTCTCTCCCTCTCAGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_469182_469642_1:0:0_2:0:0_bf1b/1
+CCCCAGTGTGTGTGTGCCTTCTATATAGGTCACAGCAAGCTTGACCTCGTGATTATGGTGGGCAGATGATGACATTTCTAAAGCCAACCTGTAAAGATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_221361_221783_0:0:0_1:0:0_9a72/2
+TCTGCAGCACTCTGTGTCTAATTTCTGGGGCGGCCAGCTGGAGTACAGTAGAGTTTATCTGAATCCTTGTTATAAACATTCCATACCAACTGAGGTCCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_223630_224006_1:0:0_0:0:0_34c67/1
+ATGAGATGGAGTCACCGGGATGATATGCAGCGTGAGCCACTGTTCAAGACGCGGGGCATGACTGATTTTTTTTTTTTATACAAAGTTTGTCTAACAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_672671_673102_1:0:0_2:0:0_3f10/1
+GGGTGGGGACTTGGGAAGTTCCAGTCTGTGAAATTATATAAAGCAGGTTGGTAACCCGGGTGGTGGTACTTCTGTATCAAAATCACAAAACAATAACAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_224737_225156_0:0:0_1:0:0_2c0b2/2
+GTGAGGACTTATGTTGCCCACTATTCTTTAGAGATGGACCTGACCTCCCAGCATTATTTCAAAAAGAACGTAGGGAAAGAAAAAAATTGGATCATGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2374370_2374902_0:0:0_1:0:0_22770/2
+TAGTCCCGAGTAGTGCTGCAACCACACGTTATAGGCAAAGATACACAAAGAATAACGAGGTGGCAGCGGGGTTGTATTCTTCAGGTCTTGTGATGGTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2391193_2391610_3:0:0_0:0:0_279c9/2
+ATGAAGAATTTTAAGACTCTGATTATACAAAATTTTGTGTCCACGACTGGAAACAACTATATCCCCACACCATTCTGCATATGCCTAATTTAAAAAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1215589_1216021_1:0:0_0:0:0_5b7c8/2
+TGTGCTTATTCCTACGTCTTGGTCTCAAACAGAGTTGTGATGGTGGTACCACTAAATACGACCCGTTGTCACGCCCCAAACATCTCTTCTTGGGAAAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_198922_199410_1:0:0_0:0:0_2a844/1
+GCTAAGTCCGTAGGTAATCCTGGCATGATATAGTAGAATGGATAATAGCTCCCAAAGATATAGAAGGAACAGACTTTATTTGCTATAACATAGGTGTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2041401_2041881_1:0:0_1:0:0_3b4e1/1
+GACTAGGGGGTAGTTTCATAAACTTAAATTTCCAGCTCATGGCTAGGGACAGGAGTTTGAAAACACATTACCATTAAAATTTGAATTAGTCTCAAAATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_918748_919184_2:0:0_0:0:0_4f12a/1
+CTGTCTTTTTGGCTCAAGGCGAGCTGGCGGACTCGCCGGCCCTTTGAAAAAGTTTAAATTAGGAATGCTCGTGGGTAACATTTAGTAAAAATTTACAGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_321031_321389_2:0:0_0:0:0_4252d/1
+TACAAGGTAAGTTCGAGACTGGTAAAGTTTTAAGAAATAAAAATGTTCTCAGCCTCCCAATGTATATATATTAGTCAAATTGCGACACACGACAGTTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_732010_732383_1:0:0_0:0:0_2b327/2
+AGATAGTTCAGTTTCTAATGTGATTCTGGCTATAATTGTCCATTTTTGATGGTTGTATTAATCAAGTGTGCAGAGTGACTTATACACTTACAACAACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_299501_300013_0:0:0_2:0:0_5b890/2
+TATTATAGATTCTTCAAAATAGAAATAAGTTACAGGCCCTGCTTGTTCACGTGTTTCTTGCTCACCCCAACACCTAGGTGTGGCCACTGGAACCAGTGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1273692_1274120_1:0:0_1:0:0_3c68d/1
+CCCACAGCTCTCTCAGCTCAGAATCGATGGTCTCTATAATTGGCACTATAACAGTTGGGTGACCCCCCCATCCTCCTAGCATAGTTGGCAACATTGCATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2034453_2034842_1:0:0_1:0:0_32f99/1
+AATCTTCCAGTTCCTGTAAGCTGCCCAAATTCCACTCATGGGCCCTGGCAGAGAGAGGCCAGCACTTTTCCTATACATAGCTGGGAACTTGTCATTAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2310928_2311369_0:0:0_1:0:0_36241/2
+GAAGGCTGGGAAAATAGCATACCCAATTATGTTAAAAAATATCACAACCACAGCAAGATAAAGCAGGGCCGGGGGATAGTTCTTGAGTAGCTACTGGCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1476024_1476483_1:0:0_2:0:0_1b827/1
+TAAAGGTTTCTGTGATATGTAATTTTTCAGTAGAAGTTACACCAAGTAATATTTAGCATGTTGTCTAGTTTATAAAAGTGTCAGGTATCCTAGCATCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2323852_2324306_1:0:0_0:0:0_58f12/2
+AGATTTGCATGACAGCAGCTCTTCTCTAAATGGGAGATAGATGGGGGTACACCATGACTAAGTCAAATTCCCTGAGGCCGAGGGGATGATGAAATATGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1401812_1402239_1:0:0_1:0:0_4fbbb/2
+CTCCCAAGTAGCGCAAACTCAAGGAGAAAAATGGAAAGCTGTTCCAGAGCCTCTGTGATTTTTATTTATTGTGAGATTTTTTAAATGCTTTGTTAGAGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_488460_488957_3:0:0_1:0:0_5796c/1
+ATATGGGGTGGGGTTGGTTACAACCTGGCAAGCTAAATGGACTGAAGAAGAAAATTCCTGACTTGCATGTATATGTGCAGTGGCACTCTGCGTGTGTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1408579_1409096_1:0:0_1:0:0_3f56b/1
+GATTGTGCTTGAGTTTTCCCTACTATTGCCACAATGGGTGGGCGACAGTTGTAGATTGCATACTGACTTCATTACTTTGGTGTATTGATCCATAGCATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_4512_4895_0:0:0_1:0:0_1511f/1
+TTCTGATCCACAGAAGCAGCACCAAGACAGGAAGCGATTCATCTATCCAGTATGTGAATACTTAATTTTATACAAAACACTATAGGAAATGAGACATGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2481924_2482407_1:0:0_1:0:0_24f9b/2
+CCTGACCCTTCTTCTTCTCCTGATTGCCTGACTCGAACTCTGTGTCTACATAATAATGCCAATCTGTTGTAGTGGTGCTGGGATCCCCCTACCAAAGAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1797143_1797663_0:0:0_1:0:0_32c4d/2
+TAGATACCCGAAGTGGAAATCAACCTCAATTGGTATTTATAATGCTAAAACAAATGATATGACTAGAACCCAGGTGAATAGAGGTGGTATCTGTAGGTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1837865_1838346_1:0:0_0:0:0_37bef/1
+GTGACCAGCTCAGAGCTATCTGTGTTTTCAGTGGCTCACCCTGTTCAATCTGGATATGCTAAGAATTGACCTCTACTTGCTCTAACACACTTTCTTAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1019618_1020020_0:0:0_2:0:0_3a7b1/1
+AGATGAATGGCCTCAGTCTAAGACCTTTTACCCATTATGGATCACGGGGCTTGAATCCCAGAAATCGCTATATTTTAACCGATGATAATACAAAAAATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2490439_2490814_2:0:0_0:0:0_53445/1
+CGAGACCAGACCGTGCCTGTTAGATACAGGTGAATGCCGAATTCCAATATTAAATATTGTTCTTATACACATGCATTTTGAATCCATGGCCTCACCTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1279795_1280175_0:0:0_1:0:0_3aa03/1
+CAAAAAGCTGGGTATATGTTGATTCCCTCCTTCCTATGACACCAACATGTTCGCTCTGTGTGTGTGCATACACCCTCATCACGAGGTGACCAAGTTGAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_521313_521755_1:0:0_1:0:0_47e47/1
+AAATATATCATAAAAGCAAAGCAGGCGCTGTTAGGCAGAGGTGGTCCCAGCACTCCATGTCAAGAATTCTAATCCAGCTACTGAGGCAATACTTCACTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_17009_17483_1:0:0_0:0:0_481d/1
+ATAGTAGGGAATAGCCCTGAATTCTTTGACTTATTAAAAGGAACATTTGGTATAGCAGACAGTTTTGGTCATTTTCAAACCAAAGCACAATGGCTACTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1335281_1335804_0:0:0_1:0:0_18188/1
+GATATTTTTGTGTTCACTACGGTCAATCACCATGGTGAGGAATTTTTTTTTTTTTTTTCACAGAGTGAGATACAAAACTAATGAATTTTAATAAGATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_628524_628976_1:0:0_1:0:0_1c80e/2
+AAAAAAAAGAAGAAAACAATAAGGACATTCCAAAACAGAATTTTATCCACCTGCCCATGAACCTGATCTCTTACTTTAAAGTACAAAGACCAGAAATAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2101478_2101802_0:0:0_1:0:0_116ed/1
+ATACAGAAATCTTTAAGAAAGATTAGAGGCAGTGGGCGACATACACCAGAAAGTTTTAGTATATTGCCTACCCGGGGACACCTAGCAACATGTGGGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1323073_1323582_1:0:0_0:0:0_21a6b/1
+GCCCGTGTCTGGAACCCAGGGAGCACAAGGGCAGAGCCAACTGCATTTATGCTCAGTTTTAATTAACATGGCTGAAAGCTATCCTGCCTCATCTCACCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1972424_1972824_1:0:0_2:0:0_4abd/1
+CACGGCAGGGTTCCCCCGTCACTCTGGATCATCTCGGTCAGGACCAGCCCATATACCTATAAGGCATGGTGAGATGATGAGTGAAACTCAACACTTCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_630439_630861_1:0:0_3:0:0_58ee1/2
+CTTAGTAAGATCCTCTCTACTATACAACAAAAGACTTGAGCCTGAATATTTAAAATTAACTTCATATCTAACCCACGCCAGATACCTCAGTGAATCTGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2480155_2480595_1:0:0_1:0:0_54aa2/2
+TGGAGAAATTAAGTGAAGCTATGTGCCTCAATACTGTTACCTTTAGACCCAACTCAGCAACCCATGCCTTGTAGATATGCAAAAAGATGAAGTCTTGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_826556_827060_1:0:0_2:0:0_1af30/1
+CATTTTGCACTGAGTGACTGCTACATTGATTTAAACTGAAAATCTTCAATCCAGTGCCCCAGCTAGGCAATTCTTCGGGTTCAAACTCTTTTTCTGGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_965211_965641_1:0:0_1:0:0_33332/2
+TAACTCACAAGCAGTCTTGGTCACATAGACGTGGGGATAATTTTCTAATTTTTATGTGAAGCTGTCTGGTCTCGAATCTCTATGCATATTGGGGGAATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1453539_1453939_2:0:0_0:0:0_b01d/1
+TTCTAAAAAAAATTAATTAAAAAGGAAGAGACACTAGAAGTTTGCCTACAGTTGAAACACACATCCACAGTTTGTTTACATACATAGTTTCTATACCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1057129_1057511_1:0:0_0:0:0_2f111/2
+TGTTTTCTTCTTTTAAAAAGAGGCCATTCTCCAGTGAGCTCCTCAACTCACTGGGATGCTTTCATGATCAGTTAGGAGGTTTTCAGAGGGTGGATACTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_909878_910330_2:0:0_0:0:0_228da/1
+TTTAAGTCCCAGCTCTCAAAATGCTTAGAGATTTGTCCAAATTATTCTCCTACAAGTGGTAGAAAGTCTCCTGTAAACAGGGGCTCTAGAAAGATGTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_935146_935616_1:0:0_0:0:0_57c6d/2
+TCTCACTGAGTTAGTTTAAAATTTATACTGGGCGTGAGACAGTGGCTCACAGCCCAGGATCTAGCACATATCTTTGACCACAGGCACGAACCGGTGGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2349267_2349735_2:0:0_1:0:0_3fa8f/2
+CACACATCTGGATGTCTCTCTGCTTGAGAAAGAAAAGGAAAGATAACCACTGGAAACTGCAAAATGATGCTAATTTATATATATTTTGTTCAAATACATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1900209_1900575_0:0:0_1:0:0_2b80a/2
+TTGAGCTCCATTATTACACATTTTCAGCAGCAGCTATATATGTCTATTCTCCTCTTCCTGGGTATTAAGCAATCATTCACTGATAACCTTGAGAAATCGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1837073_1837499_1:0:0_1:0:0_515c0/2
+TGAACTCTTAATCATCTCAGCCACCCTGAAATTTTTGCTACACTATCATATAATGGAAGAGCAGTTTACAAAAGGGGACCGCGCGGAGGGAACCAAAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1923283_1923824_1:0:0_1:0:0_8ea3/2
+CCCAGCAACTCCTGCCTCTTATAGTGCAGCTTGCAGTCCTTGCAAATCAGGAGCAGGGAGGCCATTGTTTGGATAGAGAATTGAGGTGGACATTGCCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_580972_581415_1:0:0_0:0:0_38bb1/2
+GGGTATGCTTGAACATCTATAATGCAGAAAAATGAAAACTAAAAGTGTCAGCAGCACTCATTATTTCATACCTACAGACTTAGAACCTCCTGGCCTTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2003405_2003818_0:0:0_2:0:0_24d0d/1
+CTACTCAGGCGTGCCTAGGGCCCCCTGTACTAGTCTAATATTTTGAAGTTTATGTATGAGTTGAGGAGTTTTAAGGCACGAAGTGGGGGGGGCCCCCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1697527_1697942_2:0:0_0:0:0_ba2d/2
+GATCTCAAAAACACAGAAAATATTATCCGTTTATTATTTTTTTTGTCTTTTCAACAGACTTTATCCATCTCTGGAAGAAAAGATTTCGAGACTGTACTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1022313_1022832_1:0:0_2:0:0_373c5/1
+TCTATTTCAAGAAGCGGGGACCGGTAGTAATGAAAGTTGTCTCCGCCATTCATAGAATGTGGCATGCACGTGAAGTTGCAGTGAGCCACCTGTCCCTAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2220719_2221146_1:0:0_2:0:0_1b958/2
+TTAGTTGAAGTTGTTCTGTTAGATTTGGACTGGAAAGAGACCTGGGTGTCATGTATACTTGGTACCGGGGCGTGGATAGCTAAAGCATTCAGGAGCCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_929019_929458_0:0:0_2:0:0_41756/2
+GGGTATCCCAGTCTGCCTCAGGTATATTTGAAGTCCCTGGTAATGCAGTGCACGCCTAGTAATCTGCCATTTGAGAGTATATGCCCTACCCTGTCACTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1309558_1310045_2:0:0_2:0:0_3e8e9/2
+TGAGGTCTCAACACTGAACGTCAAATTGCTGTAATAGGCCTACAACATCATTCTAATCAACTGAAAACATATGTGTTCAACATGATATATAGGTTTGATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1861707_1862144_0:0:0_1:0:0_421e5/1
+AAAGGGACTGCATTGTCTTCCTGAAAGATAAACAAAAGCCAGACTGAAGCTAATAATCTAAAAAGTATCTAGACACATTGTTGCAGAGACCATGTAGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1860222_1860598_1:0:0_1:0:0_db08/2
+TATAGCCAGAAAATTCTTGTCCCTTTTTTGTATTCCAGGGTTTGGAAGGAAGTAACAAAAACAGAGTCCTGACACAAGTTGAACATTACTCACCAATCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1285975_1286428_0:0:0_1:0:0_254e5/1
+GAAATAAATAAACTTGCTTGACTACTCACTCACCTCCGCTGCCATAGGAGATACTATAATATTATGTTTCCATCTGCTTACAGTTCTTCCTAGGTATCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2220418_2220876_0:0:0_1:0:0_52a38/1
+TTGGGACCGGGGCGTGGATAGCTAAAGCATTCAGGAGCCTGTATTTTCTTTTTAAAATCACCATTGTCAAAGAATACAAAAAAATTTCTCCTTTTGAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_882795_883319_1:0:0_0:0:0_d9bc/2
+CATAGACATGCACTCCTTTACCTCCAAGATATTCACAAGGAAGAATTATAAAATGGTGGTGCTTCCGCCTTCCCCAACACCACCAACTCCTTCACAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1975632_1976091_1:0:0_1:0:0_38660/2
+AAAAAAAAATTAGCTTGACTCACAGTTTTATGACATCAGATTGGACACAGTGGTCAGCCTCTGGATTACACATGTGGGATGGTGCCAGGCAGTCAAGCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2386554_2386942_0:0:0_2:0:0_513f6/2
+TATGGGAGGCATCAATGCTCTCTCTCAGGTTTGATCCTCCTTTTTTACTTCTTGCAAAATTTAATGTCACCATCATCTACATTTGTGCTGGCCTGTGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1976376_1976788_0:0:0_1:0:0_585e6/2
+ACCACCATGTTATTCAATAAAAATCTCACCCTTTGTCCATCAAGAGGTGGTGCTGGGCCCACTTTCATCCGGGAGTCACTATCCTTTTCCCTTAGTGGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_980460_980867_0:0:0_1:0:0_55895/1
+GTAACTTGGAGACATTAAAACCTGGTCAGGAGAGGCAGGTTGTATCTTCTGCTCAAATCACAACAATAACTAGTCTTTGTTAAAACTGGCAACCCACAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2389624_2390047_1:0:0_2:0:0_20db5/2
+CTGCCATCTTTCAAGGGTAGGAAATAATGTAAGATAAATGACATTTTCTTTGTGTATTGAGGTTGCAGCCTAACAAAAAGGGTACCAATGCCAGCCTCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_74893_75305_1:0:0_1:0:0_2bdcb/1
+GACTGCGCCCAGGGCATGGTGGAGGCCCTTCCTCCCAAACATAATAGTGGTAACTCAATTATAATTTTAATTAAATTCTCCCAGCACTCTTAGAAATACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2008862_2009264_1:0:0_1:0:0_2dace/1
+AGAGAAGTAGCTGGAGACCATCTCTCTCGGGTTACGGATGAATAAATAGTTGAACTCTGATCTGCCCAGTGATACTTACTTGACACCACCCCACAGGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2284052_2284422_3:0:0_0:0:0_5b29/1
+TCCGAGCAGGCCTTATTAAGTTTCCTACAACCCAGGAAGGCTCATGACTCCCAAGGCACTCCCAGCAGAAAATGGGGGGCCTGAAAAAAAAAATAGGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2118224_2118773_1:0:0_1:0:0_2c9e0/1
+TATTGGTAAAAGGACTACAGAAATAAGTGGTTTCACCCGCCCCTCCTCACCCTGCGGGCACACCCTCCCACATTCAGGAGACCGCCTTGGAAGTCCAACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1333851_1334173_1:0:0_1:0:0_2a366/1
+CTCCCAAACTGGAGCCATACGTTTAATGAGGGAGAAGGGCTTCATGCCAGACTTGTTTATTCACATCTACGATTGCTGTAGTTGAAGTGTGCCTGGTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_34516_35004_1:0:0_1:0:0_1847/2
+ATTTTATGACCTCACAGTCAAACTGAAAGGGGGTAACAGGAAGGAGTGCAGATTCCCCCAGGCCTCCACTGCATTTAAGCCCAGCCGCCTTGTCTTGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1049175_1049562_1:0:0_0:0:0_4e8bf/1
+TTGTGTGATCTGCATAGCGCTTTTTAGTGCAAGACCAATGTGTGGTTATATTCAAGAGAAACCCAAATTTTATCAGACCGCTATTGGTAGAATAAGAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1960748_1961198_1:0:0_2:0:0_13068/2
+TCTCCACCCATTTTTATATTCACTTCCATTTCCCCAGCATGACAGAGCGTAGCATTCCAATCGAAGCCCAGTGTGGGACTTTTGAGACAGGTGAAAGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2213354_2213843_1:0:0_0:0:0_123e7/1
+CCTGATAAATACAACTTCTTTTTCCTCCGTAACAAAATATACCATTATCAACACACAGCATGTTAATTTTGAGAAGGAACCTTATTTTTATTTTTCCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2394832_2395220_2:0:0_0:0:0_25cf7/2
+AACAGAAAAGGTGAATTACTCAGAAAGGTGGGCATCTGAAAACAGGGGCTGCTTATGAGACACAGCTTTGCTGGGGACTACAGGCGAGCATATTTGGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_776295_776804_1:0:0_1:0:0_3705/1
+TGTGAAAGTAAAAATATAGATTATAGAGTATCTTGCAAAAGAAGACAAATTATAATCTCATTGCAAGTTCCTATTGTGTGCATCCAGTTTCAGGAGAAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1959957_1960469_1:0:0_1:0:0_7db1/1
+AAATCTGCCATTTGTTTATGTTAAAACCATCGAAAAATAGATATGTCCAAACCTTGGAGCCTCCCCAGCCTGGCCAGGCTCAACAGAAGGACCTTTGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_443793_444164_1:0:0_1:0:0_15f88/2
+GAACCATCAAATATGTGTAATGGTTAACTAAACAGACTCCTGACCTTTCGATGTTCTGTTTTTTTTTTCAACTTCTAGTTTGTATTTATTCTTCAAATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1247124_1247595_1:0:0_1:0:0_4c1f9/2
+GTATGAGTGAAAATTACGTTTCCTCTTTTGGCTCAGGAACATTAAACGTCAGCCTATGGAAGGAGGGGCAGGGTAGCTTAAAGGTTTGCAGAAACACAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2057512_2057904_1:0:0_0:0:0_1e97/1
+GATTCAAGCTCCCTGCATATATGATTAAAACTTTGCACGTGCCGTGGCTCATGCAAGATGGCCTTGTATGTCCCTTTCTTGATAGAATGTTGGACCCATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1515197_1515664_1:0:0_0:0:0_39d27/1
+TTCCCAGGGCCTCCTATCAACATCTGGTTGGGCATGGTTCACATATAGAAATCTTTCCCTACTTACTTGCCAAGGACTGGTCTGATGAAAACAAACAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1350224_1350647_1:0:0_0:0:0_3728c/1
+CTTTGCTTGACCTGAGAACCTGTGTGTGTGTATAAATCAGGTTAGGTCACAGACCATTAGTCCATCCAGAGGCCGAGACTCTGGATGGTATCTGCTGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_673621_674148_1:0:0_0:0:0_3d531/1
+TTTTAACAAATTCTGTAAAGAAAAAAAATAGTATACAAATAGAAATATCCCCCCAGAATACAAACCTGAGCACTTTTTTTAAGAACATCAATCCTTGAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1442844_1443260_0:0:0_2:0:0_4c804/2
+GACTTTCTTGTACCATTATTTCTTCTCCCCTTCACAGTGGCAGAGAGTGTTAAGTGCTGGGTGTATGATTTATTGACCAGCTCATTGCCCGGTCACCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_582470_582954_0:0:0_1:0:0_2e55b/1
+ATTACTCTCAAAAGAAATCACATAAACATTATCAAAGTGAGTTGAAATCTACATGAAATTGAAGCCCCTTAACCTGCTAAGCACATATAGCCAATACCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1823241_1823558_1:0:0_0:0:0_4360c/2
+TATGGGCTGATAAGCTAACAGAGGGACTCAGTAAGTTTATCATCCAGTTCGTTTTCAAATAGTCCAGTTAAGAGTTACCGTTCCCCTTGTTAGGCCAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_825953_826380_1:0:0_2:0:0_17b78/1
+GAAGATCCCTGGAGAACGATCTCTTCCTACTATATTACTTGTAGAAACATGTATGTCCTGGTGTTTTCAAGCTCCAGAATCTAACTTCTGAGACACCCGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1685961_1686412_1:0:0_1:0:0_b63c/1
+CTTCAGACTTCATATAAGTCATTAAAGTTTCACAAAACAAAAGGTACCTTACAAGGATTTATTTTGGTGGGCGAGATCACTTCGTTGGATTTCTCCCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_693482_693919_1:0:0_2:0:0_1b9cc/2
+ATTTTAAATTATTCTGCTGATACCACAGAGACAGGTATTACAACTCATCCTCCTGATGAACCACAAGGAATTTTTGTTTTCCTGCAGAAGATATGATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2334530_2335003_1:0:0_0:0:0_1ba75/2
+GATATAGAAATAGATACCGTTTTGAAGGGCTGTATATTTTCATCTGTTCGGCCTCCTGACTGAGGAGATGGTGAACACACCCAGGGGCACTGGTTATGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1850222_1850711_1:0:0_1:0:0_4dacf/1
+TCACTTGTGGAGCTGGGGAAAACATTGAGCAGGAAAGGAAATACATCTAGTTCTAAAGATTTCATAATGCCACCTTTAAATAGGAGAGGCTGGAGTTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1012719_1013182_0:0:0_1:0:0_19848/1
+AAAATCAGCCAGCTGTTAAAATTTTAAAAATAAACTTTAAAATATGCTATTTGAGACTTCTCTTCTGCATTATAGTTTGAGTACAGCCCCTGACCAATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2056865_2057356_2:0:0_0:0:0_4d8d8/2
+TTGGCAGATAGGGCTTTTAGAGGCACATGTCCCTGCATCCTTAAAGATCACGTGAGCCACGGCTAAGGTTGGTGTGTAGACATTTTCTCAAAATCATTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_899543_899970_2:0:0_3:0:0_244d7/1
+ACAGTCATGACGAGTGCAGGTAGGGGACAAACACACACGTCTGCCTGGAGTGCTGCGACCTCAGTAGAGAGAGCAGTGCCGAGGTCACATACATATGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_596479_596982_3:0:0_1:0:0_3bfe3/1
+ACATCGCCTCCCAGCACTTTTCAATTATCTACCATGCTTGTTGGCCGGGGTTTCATTCTCAGCTCTAACAGAGTCTCTCTTGTAAGAACTGACATTTCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_991667_992119_1:0:0_1:0:0_27a5d/1
+AGAATCAGCTCTGTCCTCAAAACAAACAAGTTAGCTGTATTGTCATGCACATGTATTTGGACGTCTATGTCTTCTGCAAACTAATCTGTTTTTCCTGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2332465_2332927_1:0:0_1:0:0_18fb3/1
+AACACAATGCTATGATCCCAGCTATGTGTGCGAGTCAATAGCTCTGAGTCTTGCTGGTCAGGTAGAGTCTCCAGCTAGTCCTAAAACTAAAAACTACCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_60324_60860_0:0:0_3:0:0_48482/2
+GTTGGGTTTAGAGCGAGAGTGGGTGAGAAAGAATACTATTGCCTACCCTTTCACAGTGTCACTGCAGTGCTATAAATTTTAAGTGTCTTCCCTCAGTGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2177876_2178269_1:0:0_0:0:0_d370/2
+CCATCTTAATTATTTGTCAGTATAATATTAACAAATTTTTTACAAGAACTTGTAAAAGGAGGAACCATTGTAGAGAGGCTTATTTGCCAAGGCATTATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_410863_411283_1:0:0_1:0:0_42668/2
+CCTTAGAGTGGTCTCCTTTCTGTCAGATGATATCAAATCTCAAAATATTGATCTGAGCTTAGTTTCAGAGGAAGGGCATGGTGAATTAACTTTACTCATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2207769_2208278_2:0:0_2:0:0_2742e/1
+TCACTCCAGTTTATCTCATCTCTATCTTCCTGTAAATAACTCCCAGGTATGTAACACTTTGGGCCATGGGAGGGCCTGACCGGATGATTTGTTACCCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1198873_1199271_1:0:0_0:0:0_42511/2
+CCTCGCTGTGTTGAGGCAGGATTCAGCATGTTCCTAGTCTCGATTGGAAACATAGGCATGGCTCGAACTGAACAAAAATGTGTAAGATTACAAGATGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1066554_1066993_1:0:0_0:0:0_31fac/2
+ATAGAATAGGAGTGCCATAGTCTAGTCACAGGGCTTGACCCCCAGTCTCTTTTCCATGTTGCAGCTGTGTGTGTGTGTGCAAGTGAGCACAGCCTCCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2460021_2460481_1:0:0_0:0:0_3cec/1
+TGGAGATACCAGTCTTTGACTGGATTATGTATGCTGACTCTTTGCATTCCTTACGTAATACAAATGCAACCTGGAATGCTTTGATTTTGTTCATTGTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2028578_2029006_1:0:0_1:0:0_3faea/2
+AGAATGTTTATTTTCTGCATGATACGGGTTCAAACTGGGCTGCAGCATATCTTTTAATGCAAATATGCCAAGGTAGGGGGTGGGGGCCAGGATATATATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_539232_539684_1:0:0_1:0:0_f0/2
+GAAAACATCATACCTCCAGGTGGGGTCCTGAGACCATAAAATAAAAATAGTCAAAACCTGAATTTTTTGTTCTCACTTAAATATCTCCCTTTAAAAAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1398135_1398582_1:0:0_1:0:0_2cba6/1
+CCCCTCAAGTGGACACAAAGTGCAATGATAATCCATTTATGAAACTCCAGCCAAAAGTTTAGACAGAAAGAAGAAGATTTCATAATTGGGCAGCAGAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2498629_2499045_0:0:0_1:0:0_2d813/1
+TGATAGGAAAATAGCATCAGGGGCTATTTGATTTTTAAACCCAGGACCTCTGAAGCTATTAAATATAACAGAGCTAACAGTTTTGTCTTGCAGCTCCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1648231_1648613_1:0:0_1:0:0_58272/1
+TCTTAATTCCCTCAGCACATGTAAATTAAAAATGTTAATCCTTATTCTTTTATTTACATGAATGCAAAGGCATGTGTTTCCTAATCATGGTGCTCTCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2165687_2166146_0:0:0_1:0:0_21c65/2
+TTCCAGGAGAACCTGTTAGAACTCGTCTGTGAGACCGCATTCCCTTAGTGATAGTCTTATCTACCTTGCTCTGGCGAGCTGGAGGCTGGAAATATCCAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_57075_57495_0:0:0_1:0:0_1264c/2
+AGAGTTTTAATAACCTTGGACATTGAATGCTTGTCCCTACCAAAAAAAAAATGGGATTTAATAACTCCTGCTGCAAGCAATATATGAGAGTTGGTGACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_834277_834750_1:0:0_0:0:0_19c13/2
+TCCTAACTTCCTTGACTCCTGTTAGCTTGGAAGCAGTGGCAGGAGTAGCTGATGGGGTCTCGAACTCCTGGTGGTATTTACTATATTTTATGGTAAGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2413883_2414378_0:0:0_1:0:0_318e6/2
+GGAGAAGCATAGGGAAGTGGTGATCCGCCCCCACAAGACAAAAAAGCTGCACTCTATGTATTAAGTGTCTCCACAGTTTAGGGAACCTGGATTTGCACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_478960_479494_0:0:0_1:0:0_24622/2
+TGCCTGACAATCAGTAAACACACACAACAGGGGGAGGCTGGCTCACAGCCTTGCAGCTTTATCACAACATAAAATGGGAGAAAGCACCTAGTGAAAGCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_865890_866353_1:0:0_2:0:0_3dd67/2
+AAACAAGTTACAAAGAATAAGGCAATCCCGTTGCAGCTGTCAACCTTGTACCAGAGTTATTTTTGTTTCTCACTGGATGGGGGTGAAGGGAAGCACTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1816089_1816530_1:0:0_1:0:0_3d56f/2
+TGTGCAACAGCACAGATTTCAATATGCCTGCACCTTGAAAAGAAAGAGGAGTTTGATTTAGGGAGGCACCTAACATTCACCGTCAGACCCAGGCTGGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_360056_360506_1:0:0_0:0:0_d8bf/2
+TAACTAACATAAATTGAGTTATCTTTGGATGGACCTATCAATGGTAGATGCTTTTCTTGTATTCCATTGAGGAAGAACCACTGAAGATATTTTTTTGTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1177631_1178024_1:0:0_0:0:0_90e9/2
+CTCTACTGTAGTCAAGGAGCCACTTCTGAGGAAGATTTATTTTGGTGAAACCATGCCTGTGTTCGTGTTTGAGAGAGCTGAGGGTGGGATAGAATGTGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1769553_1770090_1:0:0_1:0:0_95f/2
+TGATGAGGAAACGCAAGGACACTAGCATCATCAATGCTGGGACCTAGATCACCTCTTCTAATCACAACATTCTAAACAACAAGCCTTATACCTAATATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1574934_1575365_1:0:0_0:0:0_3059c/1
+TAGTCATAGGAAAGAACAGTGTGAATATATATAGGACATATGCTCCTCTACCCTAAAGCATTAAATATTCCTGACAGTGTCAGAATCAGCAAATAAAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_952487_952911_2:0:0_0:0:0_109a5/1
+TCAGTCCTAATGTACAGAGTTACTATAGTCTACAGAGACTGTCAACCTTTCCTTTCCTTTTTCATCTTCTAGTTCTCTTTTAGAAGAGATGGCAGCTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_338618_339092_1:0:0_0:0:0_4740e/1
+GGACAGAGCCTCTCCCCTTTAAAGTAGAATAACACAATATGCAGTGGTTTGAGGCGGGGGAGAGTAAAGAAAAGTGCTACTGGCTAAAGTTTTAATTCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2199283_2199721_1:0:0_1:0:0_24761/2
+AACTAACCCTAATTACAATACCTCTACAAGGCTGTAATAGAAGTACAATATTGTATTTTAATTTTAAACTTCTTATTTATTCCAGTAGTTCAAAGTGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_20004_20474_2:0:0_0:0:0_49f77/2
+AGAGGCAGAGTTCCACTTCCATGTTGTCACTTAGACGTAGGCACATGATGACATGGTGCCACCACTGCGGCTGGGAGCAAACTTGCCAAGATCCTTCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_805481_805957_1:0:0_1:0:0_51e29/2
+TATCTATATAGTAATTTTTTAAAATAGAACTTTACTAAGTCATCCGTCTCCCTGACATTTCAAGTAATGTAAACATGCAGTGATCCTGTTAAACTGCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1054203_1054610_0:0:0_1:0:0_17ad1/2
+ATTTAGTGACTGCAACTAGCCCAGAGGGAGCCGGGCAGTGGAACTGTTCTATTCTTACAACGGTGGCACTTTGCAGTCTAAAATATCATGGGCGTTATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1520441_1520883_0:0:0_1:0:0_5a5f/1
+AGCATTTTACTGCCACAAGTGACACGTTTAAACTGATTCCCAGCTTTTGCCCTTGCCTGGCAGAAACTGATGTCAGCAATTTCCAGGGAGTCTGCACCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2389966_2390349_1:0:0_1:0:0_4f6c7/2
+CTGTACTATGAATTAGAAAGAACACAAAGAATTTTGGTAGACATTGTAAGGAAGACCGGAAGGGGACCCTGTATAGAGAATCTACTAAAAGGCTGGTAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_379396_379833_2:0:0_1:0:0_3224f/1
+CTCCATGTTATGGGAAGTTGACGTTAACTTTGAATATATATAGTCTTTTTTTCTTGAACCCAATATCAAAAGAGGGAGGCTTCACCTGTCTCCCTCCAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_195433_195918_0:0:0_1:0:0_2d477/2
+CGGGGTGGGGGCTTGTTACACCAATACAGGGAACCTGTAAGGTTGATATTCTTTGTTGGAAAGGTTAACCTGAAAAGCAGAAATATTGTTTTATCTCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1986994_1987412_1:0:0_0:0:0_338a/2
+GATGGCCCCACCCAATAATTTTCTCTGAACATCCCCTTCCCTGGGAACTCGTGTGAGCAAGTGTATTTAGACTGAATACTTTATTGCTTCTTGTCCTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1874389_1874795_2:0:0_0:0:0_f784/1
+AGAGGTCGATGTCCCAGGAGTTCACAGTTCTATAACTTGGATGAAAGAGCTAATTTAAGTTGAAGCATCTGACCTCCTGACCTTTGTTTTCCTGACAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1968603_1969090_0:0:0_1:0:0_4e5f/2
+TACTTGAAGCCATGGGTGCCTGTGTTATTCAAGCAGAGGTTTCTTTGTGTGTCCCATTCAAAAGGAACCCAGCACAGTGGCATTTTGTTTGTATAATTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2091403_2091849_0:0:0_1:0:0_4b0fd/2
+CATAAGTAAATACATAAAATAGGTTTGGGAGGCTGAGGGAGAGGAGGAGAGTTGGAGGAAAGGCGTGAGCAAGTTGACACTGTTCCTAACTTCCTGTGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2143191_2143694_1:0:0_0:0:0_22a9e/2
+ATGAGAACAAAGTGACCAGGTGTGGTGCAGCATTCTCATCCTAGGTTCTGTAACTTTTTTATATATTTTTTTTTTTTTATTGGTAATACCACTTGGTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1768777_1769157_1:0:0_0:0:0_4cf3e/1
+TGATTTGTGTTTATTTCTTCAACGGCAGCATCTAATTTCTCCAACCCTATGCAGAGTTCAGATCCATACTTAATCCACTTGTCATCATCACATAAAAGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_501967_502397_1:0:0_0:0:0_11414/2
+TTTAAGCTAGTTTGCAGTGACCCAGGTTTCCGACTAATTTTTATTCATCATCCTCAAGGGCTGGTCCCCTGCCTCAATGAGGCCTATGCTGGCAGCTCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_528082_528560_1:0:0_1:0:0_32706/1
+CCACTGAGACTCTTATAGCCATGCAAGCAGTTAAATTATATACCATGACACAGCAGTTTGAAACAGCATATTCACCCCATCAGAACACCGGGTTCCCATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_759520_759890_0:0:0_1:0:0_59537/2
+GCTTCGTGCCCCCACCCACAGACGCTGACTTCAGTGAGATATGAAGATACAGCAAGTGCAGCTGAGGAGAATTTTTAAAACAAACATTTCTCTTCAAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_651017_651486_1:0:0_2:0:0_394b4/2
+TTTATGTGACACAATAAAGGAGCAGGCCAATACGTAATTTTGTAGAGGAACTTTTAGTGTAATTGACGATCATTCTTGTTTTGACCCGACCTTATGGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1259969_1260453_2:0:0_0:0:0_47ac7/1
+TATGAATGCCTGCATTCATATTTTAAGAGCAATGTAGAACAAACCTGCCCACTCCAAAATTTAGTAGCCTCCCAATTTACTGTATGGTTATGTACGCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_320228_320541_1:0:0_0:0:0_21f2c/1
+TGCTTTATTAGGAGGCCTTGGTCAGGAGGTGCTGACATATTGACTTGTTCATTTTTTCTAAAGAACTGGAGAACCAACCAAACATTGATTCTACAGTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1144175_1144602_1:0:0_0:0:0_44efb/2
+GATGAATAAAATTTCAACTCAGGGGCCGCCTGTTAGCAACATCTAACACATATTTACTTATCGCATTGCTTTTCTTTGGGACTACAAATCAAACACAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2039696_2040228_1:0:0_0:0:0_5056d/1
+AGTCATTTTTTTTTGATACAAAATGGATTTAGACTTGGGTGTGAGTAGGTTGCTCTTCAGGAAGACGAGAAACCAGCTAGGACACATTTTAACCACACCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1651944_1652398_1:0:0_0:0:0_56e60/2
+AGGTTGTATCCTGACCATTCAAATGAATTGGAAACACTTGACTATTAGTTATCATATTTCAGTTACTGCAGGCGTGGTGTGTCCCTTCTTCATAGAAGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_830122_830600_0:0:0_1:0:0_933d/2
+ATACCATGGTGTTACATTTCACCACTATGATCTATCTTTACTTTGTTCCAAAAAACTGTAATTTGGGCTTTGTTGTATGGCATGTTGAGCCTTTTATCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_961_1393_2:0:0_1:0:0_30229/2
+TAGGGGGTTAAATGTAATTCCATCCATACATTGGACAGCTACTTTAGGTCCAATGGGGAGAAGAGAATCATATAAAAGAAGAAAATGTTTGAGTATTGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_310814_311234_2:0:0_1:0:0_50fce/2
+TTTAGTAAGGGAGACTCAAGGGTTCACGGCTAAAATTGTAAAGCTTGTTACCTTTGAAATTTTTATTTAGACATTTACCACACAAAGCTTACTTGTTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2175288_2175746_1:0:0_0:0:0_37e72/1
+CCTTTGCCCCTGACCAGAAAATATTATTATAATTGCTATTACTATTAATAAATGCCAGCCTCTGGGTACTCACACTTCATTTTTGCTATGTGAAAAACTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2259939_2260327_2:0:0_0:0:0_156f3/1
+TTGGTTCTGTGAGTCGACGGAATGAGAAATTTTTCATAGGGCTAACACTAGACCTACTGCCTTGCTTCCTATAAGTTTCTGCTGTAACATTATAAGTCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_739676_740152_1:0:0_1:0:0_3d068/1
+TTACATCACATGCATAACATGTCAGAAAGGAGTGAGGGTTCACCTTGCTGATGAATAAATTTAAAAATCAAATTAGTCAGTTTGTTGTTTTGAGACACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2096628_2097016_0:0:0_1:0:0_4db55/2
+ACGTTCTGTAGGTAACAGGGGCTGAGTATGTGCGTTGGAAAAAAATTAAAATCTGCCCTACCTGGCTTGGTAGATGAAACCCTGTGAACATCGTAGGCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_870057_870422_0:0:0_1:0:0_730/2
+ACAGCAATTTGGCTGGAAGACTGGAGATTACAGGTATTCTTTACAGGTACCTGAGAGCTAACAATGTGATACTAAAATTTCCAGGTGGTTGTCCAGCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2094369_2094846_1:0:0_0:0:0_46865/1
+GATGTGGTCTTCTCTAAGCAAAACCAAAATTTCAGGACCAAAACAATGGGAAAGCTGCGAAACAGCATCTGCAAGCTCCCGCCACCCAGCCACATCACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1204835_1205359_0:0:0_1:0:0_2df1d/1
+ATTTTTTTTTTTTATTCATATATGGGGACTTGAGCTCGCACGTTGCCATTAATTTCTCACTGAACTTCTATCATTTGAATGGTAATTGAAGTTGAAATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_374330_374765_0:0:0_1:0:0_39deb/2
+ATTAGGCACAAGGTTAGATAGCCTACATGAATAATGGAGTGTGTGTTTTCCTTAATTCATAAGAGATTCAAGATCAGGTAAAAAATATATATTAATTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_303974_304393_1:0:0_1:0:0_49065/1
+CAAAATTTCAAGAAGAGAAATATAATATAAGAAAGATCAATTTTTTACTCTCCAGCTATACCACTCTTGGAAGCATCTGGGGCTACCCGGCCTCGGGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_409142_409620_1:0:0_0:0:0_6515/2
+CAGTGGTCATGATTATTGAGGTAACTGCAAGGCCTGGGTTTTCACATAGCATAATAGAATAATCAGGCACATGAGCATGACCCTGGACAAGGGCTCCCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_667599_667940_0:0:0_1:0:0_e804/2
+TTCTTCAGTGGTGTGATGACTCAAGGACACATCATGAAGATTGTGGGATGCGGCAGCTTTCTTTTATTACCTTCCGAACAGAGTAGCTGTGCAAAAATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1937338_1937715_1:0:0_1:0:0_344e4/2
+GATTTTGTCAGAACTGAAGAAACATTTTTTGAGTCTTTCCTTTTCTTTGCTGAGGCTGAGGAGCTTCTGTAGCATGTTGAACATTCCACAAGGGGTTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_417841_418282_0:0:0_1:0:0_3251c/1
+AATCTCCGTCTCAAAAGAACCAAACTGTTGCCACTGACTGCAGTAAAAACCAAGTGATTCTCCCCTTGCGAAGGACAGGAGTATCTGTGGGGGCTTGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1720232_1720689_2:0:0_1:0:0_30fdb/1
+CCAGGCTGAGTAAAGGACCATGCCAAAATGAACGCCACGTCTTTCCCTCTAATTTTGCTAACTGACAAGCACCGGAGGGAAAGAAAAAAAAGACCTACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1819040_1819482_1:0:0_0:0:0_3db05/2
+GTGCCTGCAATGGAACAATAATTGCCAAAGGGAATCCTGTTAATGAAGCTAAGGTTTTTATGGGACACAGTCTCTCATCCACTGCACAATAGAACTTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_705144_705544_1:0:0_2:0:0_c4c5/1
+TATATTGAAACAGTTTGAGAAGAGGGGATTGGTACCAGAGCTGGGCTAACAACATTTCTTCTTTTTTTTCCTGTGCTGCCACCGAGCTTCTGCATACTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_923772_924219_1:0:0_0:0:0_551e0/2
+TTCCACAATCCAGCACAGAGTCACACTATGTTTGTTTTCTTCTCATATGTTGGGTACTAAACTATAGTTTAAAATCACACCTGATGAACAGCTATACAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1003404_1003893_0:0:0_1:0:0_85c5/2
+CAAGATTGCTCTGATAATACATATCAGAAACTGTGCTCAGACAGGAGATGATGACATTTTTATAGGCAGCTTGAATTCACTGTTAATCAAAACCATTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2253069_2253473_1:0:0_0:0:0_5bc4/1
+ACTGTTCTAGACACACCTGTGAAAGAAAGAGGCAACAGATATTTAATAAGGATTGTTTATCACATGGGGACCACTAGCTGCTGAGGCCGTGCTGTCAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1553487_1553940_0:0:0_4:0:0_1e6a1/2
+TCTCAAGAGATTAAATCTGCCTGACGTCACAGGAACCTTAACTCAATCCCCTCCTGTCAAGCAGTTATGGTGAGCCAGGAAACTAAAAATAGTGAACCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_936902_937406_0:0:0_2:0:0_c316/1
+ACTTAATACAATTATTCATCAGTACCATCTTATTGTCTTTCTCTAGAAATGGATTGCTCAGAGAGCATTTCAATTTTGTGTGTGTGAAGAAATATAAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1543739_1544079_1:0:0_1:0:0_51418/2
+CAGAGCAGTTACCTGAACGTCTGTGGAGCATGAGGGCGGGCCCCCATGAACTAAGAAGTTCTAATGATTCTTTAGTATCTGGGCCCACAGCTCTGTTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1970673_1971140_0:0:0_2:0:0_32e5/1
+TCTGCCCGACCCCAGAACTCCTAAAGAATGTGAGAAATAATAATGGGCTGTTGTCTTTAACAAGATGCTTGTTTTCCAGAAGCTGTATATAGACTCCGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2248332_2248678_1:0:0_1:0:0_17693/1
+ATAGTTTCTTTGTGTATATTCTTCCTGCTATAGGTGTCAGGAGGGAGCATTGTATTAAGTAGTAAGTAGCTGGGACTACTTGTCCTACCAAACTACAGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1204896_1205371_1:0:0_1:0:0_630e/1
+GCCCCTTCCCCATTACTGTCAGGAGATTTCTTTTAGAAGGGGAAACACAGCATGCGCAGACATTTGTCCTCCAAGCCAGGGCTCCCACAGTATTTGGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_772728_773185_1:0:0_2:0:0_1adca/1
+CCCCATTTTACCACAAGGTGACTAGGAACATGTGACACAGGTAGGAAATGAAAAGAAATGGAATACCTGTTCATTTTCTCCTGCAGAAAAGAGATGCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2050864_2051323_1:0:0_0:0:0_614b/1
+AGTAGTTGTGTAGATAGTGATAATGAACACCCTCCAGGCGTGAGGAGAACCTGCTTTTCCTTTTAGTATCTATATTTAATACCGAGGGCAGAAGAGCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1648231_1648613_1:0:0_1:0:0_58272/2
+CATGGCACAGCGCTGCATGCATTCTTTTGGAGGTATTCATGTATACACTGTTGACACTATATATATGTTTGTCCAACAAGCCAAGATGCGGTGAGGCGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_134685_135093_1:0:0_1:0:0_40590/1
+AACCACTGTTCACGGAAAATGGTTATTTATATTTATCCTGTCTTCTGAGTTCGAAAGTTTCTTTGTCATTCTGACAGTTTCGACATGACTTTGACCAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1039136_1039473_1:0:0_0:0:0_23950/2
+TTTGTTAGAGGGAATATTGTGCACTGACCGGTCCCCCGGCTTAGGTTCCACCCAGGCTGGTCTTGCTATCCCTGTCTGTATATATGAAGTCTTGTGGGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2127110_2127662_1:0:0_0:0:0_90c2/1
+CCTCACTCATTTCTTTTCTCAAATAAGTGTATAAAAGTTGGTGCCATGATTGCCCAGCTCATTTACATTTATTATTGCACCATGCCATCTCAATCCATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_20400_20926_2:0:0_0:0:0_46b24/1
+CTTCCTGTCATTTCCTAGAGGATCAGAGTCACTAGAATGCTGAGTCTTAACTCTCTTGTTCCCCGTCCACGCCAGACTGTCTCCTGCTGACCTATACAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1089903_1090352_1:0:0_1:0:0_19dc3/2
+TAGGCAGGAACCAATGAGATCAGAAAGTCTGTCTCAAGGGTACAATATTTTAGCATACCAGCCAGGAGATGATTTCAAGTTCTCTCTAACTTAGCAAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1523450_1523860_0:0:0_1:0:0_519f7/2
+ATGGCTCACCCACTATACACTATAAAAATGATCCATAACAACTATAGGTAACTGTTATAAAGACAGAGCGGATGTAGGTTAGAGGCTTTCCAGGAGTTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_678555_678973_1:0:0_1:0:0_566a8/2
+GCTTGATGGAATGCAAGTGTTTTAAGTATAGTGTACTCCAGCCTGATTTTTTTAAAATTAATGTGCTGTCAGCTTCAACAAGTAATAATTATTAAAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2038585_2039084_1:0:0_1:0:0_2239f/1
+TCCTCAGGCAACCCTATAGGTTCCCAACTTTGCAACCTAGAGATTTACAAATATTTGGCGAAAAAAAGTACTGGCTTCTGACCTCAGCACTGTGATCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_847215_847687_1:0:0_0:0:0_c983/2
+CTGTGTGTGAGATTTTGTTGACAAAAAACTAGTCTCTTCCTGAGGCCGTATTTTAAGCAATTCTAATCAATATAATCTCAACAGGAAGACAAAATGGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_103009_103477_2:0:0_1:0:0_16295/1
+ATTGGCACCTCCAAAATTGACGTTTGCCAGGTTTAATATTGACAAATAAAAGCACAATCAAATCTATATGCATTGCCTTCCAGCCTATTAGCCAAGACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_114705_115191_0:0:0_1:0:0_342d9/1
+TAGGCTCTGAGGTCCATTCTCTCCCTGTCCTAGAAAGAAATCACAGGAAAAGAATATATGTACCTTTCTTTTCACTCCCAAGTGTGATATATACAATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1447420_1447880_2:0:0_0:0:0_25c23/1
+ACTAATTTGGTTAAAAGCGTTCATCTCCCACATGTGGTTCCATTTTACAAGGCCAGGCATTCATTGTCCTAATGTCAAGAGCTACCAGCTGCTCCAGTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_719216_719567_1:0:0_0:0:0_37ecc/1
+AGCTGCTCTTACTTGAGTAAATTTCTTAGTAGGCTGAGAAGCTCCTCGCTCTTTTCACCTCTTCCTAGCAAACACCTGGAATAGAAACGCCCCAAGGTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_960684_961179_3:0:0_4:0:0_24781/2
+AGAGCGCTGGCCCCCAGCAGACGGGGCTGTGTCTAGTCACAAAAGAAACGAGTGTGATATGTTGCATTTAAAAATATAGTGCCATCACCTCTGTATTAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1021254_1021655_2:0:0_0:0:0_2197a/2
+AATCACAGCAAAGCCTATCGCAGCTTCCACATCATATATAAAACCCAATGCTTCCTTGCACCCTTTCCAAGGTACGTTTCCCATGCCAGCAGCAAGGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1035634_1036094_1:0:0_0:0:0_414c7/2
+TCAACAGGCACTCTGTCTCAGGTGTATATTACCAATTCAGGCCAGGGAGAATTGCCATGAAGTGCTTCTTACCAGAGGCCAGGCGGCCAGATAGATTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2138865_2139332_1:0:0_2:0:0_2c376/1
+TTTTGTCAGAACAACTTTTGATCTAGTATTTATCCATAGATGAGGTTTATACAGAGCTGTCTCTGACAACAGTATCCTAGGAAAAGAGGGATTGGCATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_142867_143326_1:0:0_3:0:0_8551/2
+AGGCTAGGCCTCAAGCGCAAAAAAGAAACATTTGAGACGGTCTCCTTCTCTACCATCGTGCGTTTCTCTTTCCTTTCCTGGGATTAGCTTTCTATATCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1787165_1787613_0:0:0_1:0:0_31dae/2
+ACATACAGATGTGGCTGCAGTGTGTAAAAAGAACACCAACATCTACAAATTCTAGTTCACATACAATACTGTGTTGAGGACTCTCACAGGGTGGTAGGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1343428_1343940_0:0:0_1:0:0_17532/2
+ATATAAAGGGAAGATGAGTGAGTCCATGTGGAGAGTGGAAGAAGCTTAATGATTCCAGATTATGTAATCCCTGTGAGGGTACAAGGGGTAGGTGTTTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1977611_1978071_0:0:0_2:0:0_32136/1
+TTTAATAATGCTGCAGGGCATGCCTTCCTTTGTTTAGCCAGCCTGGCCATTTGAACCTGTTTTGAAAAAAAATTATGATGGAATGGTAATTAACCCCATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1043464_1043978_1:0:0_1:0:0_56ac1/1
+TCTTTTCCCCCCTTTCCATGAGGCTGGAACTCAGTTCTGGCCTGGACTGCATCAAGCGACGGAACAGGTGTGTGTAATCAAGGCAGATGTAAGGTATTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1590756_1591225_1:0:0_0:0:0_2829d/1
+TCCTTGATTTGGGTGATGACAGAGTGATGACTGGATTCAATATGGAACTGGATGGGGCAGCCTAACACTGCTCCTTATTTTATTTATTTAAAAGTCCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_686650_687150_0:0:0_1:0:0_53b8f/1
+CAAGTAGTGGGGCAATCAAATTTACTCCTGGGGCCCCTTCTACATCTCCGCGCCCAGTTCCTCTGCCCCCACTCTTTCTTGCACAGGGTAAAATAATGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1947279_1947711_1:0:0_0:0:0_21183/2
+CCACAGAGACTTTTGTTGACATCAGTGAGGGTTCTCCTGAGGGAGCTTGCAGGCTTAGGTAAAGTCTGACAGAGTTTTAACAGATCTAATACAGAATAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2040248_2040732_1:0:0_0:0:0_4f989/2
+TTTGACCCCATCTCAGGAGTCTCGCTGGCAGCTCTCCTTTTGAGACGGGGTTTCGCAGAGACCATTCCTTGGATATTCTCATTTTAAAAAATGCTGGAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_547624_548131_0:0:0_1:0:0_2a3f8/2
+GGGCAGGAAAGACAGTTAACCTTAAAAACATTAGGAGGCTCACGGGTATAGCAGGAAACAACATTCATGAATGGTAGATCAGCACCACGTGTGCTGCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2419067_2419519_1:0:0_0:0:0_1f38f/2
+TGGGAGTCTTAAAAGAAAACTCAAGCCACAGGTTTCAACTAACTCATCTGTGAGCAATTGATTTATATTAAGACCTTATCAAAACCTAAAATATTTGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1086988_1087452_2:0:0_0:0:0_42a4f/2
+CTATAAGTTATATGAACACCTGTAATCCCCGCTATACAACACAGAAGAACTCAAAACTAATAGAGGTGGATATTCACAGCTCCACGCTGTCCTTATCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1976426_1976858_0:0:0_1:0:0_1370b/1
+GGGAGTCACTATCCTTTTCCCTTAGTGGTGGTGAAGTCCAAAGTGCTTGGGTCATTTTGACATGGCAGCTACATTAATGCAAGGTTCATAGTATATGATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2112616_2113084_0:0:0_2:0:0_573cd/1
+CACCACAATATTGTATTTTACTCCCACTAATACCACCAGATAAATAAATGAAATGCCAGTTAGATTTAATCATATGTATTCCATACAGCTGTCTGTTGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1366835_1367235_0:0:0_1:0:0_4622c/1
+GAGTCAGCTGAATGGGAAGCAACCTGAATTTCTAGGTACTCTGGGGATACATTTGACTCATTGTCACAGGTGGATGGGGTTGGACGGCCTGAGGCGGGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_898781_899224_1:0:0_0:0:0_1eddd/1
+GCTTTACAGAAGAGAACACTACTTCTTATTTATGCCTTCAAGGACCTACAGTGAAACAAAGCTATCATTCAGTTAATAGATGGCAGCAGGCGTGAGAGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_15504_15894_1:0:0_1:0:0_2cc83/1
+AGCAGGAGTCTCCCTGTCTCTGAATTGGACTTGAAAAATCCCAGTCTGTCATTATCTTGATCGGTTGGGCAGGAGTGCATTTTAAATGTTGAATAATTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1876818_1877234_1:0:0_0:0:0_188ec/2
+TTACTGAAAATCTGGAGGAACTGACAATGAGAGTTTCGCTGCCTCAAGCTACTAGAATGGACACCACTTTGCAATAACAGAAGGGGTGGGTGACAGCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1534537_1534960_1:0:0_0:0:0_3cc36/1
+CCTCCTCTCAAAATTACTATACATGCCTTAGACCATGCACCAACAAGATCTCAGATTAAAATTTATTTTCATCAGAAAAAGAATTTCAGGGGTGGGAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_259799_260125_0:0:0_3:0:0_4c65e/1
+TTGCACTGCCTTGATGGCTGGTCAGCCTGTTGATGTTCTTCAAGGTCCCTTGCCTATGTTACCCTCGCTCAGGACCCACTACCCAATTGAAACCTGATCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2470375_2470749_0:0:0_3:0:0_2f09c/1
+AACAAACAAAGACTTTTCCTTTTCTTCTCAGGGAATGATGGCTTGCTACATTAAGAAACTTAAACTGGGAATCTGTGCATTTTGCTTGGCTAATATTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_544758_545246_1:0:0_1:0:0_15132/2
+ACTCATCCCAAGATTTTATACTTATATGGGGCTCACTGCTTCAACCTCTAGGTGCTAAGTAGAAAGAAAGGAACAACTTCTGATGTTTTAAAAAAAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1109023_1109453_1:0:0_1:0:0_3d7d4/2
+GATCTTCTAAAGAAATGAAAGCCTTTTGGCTATCAACCCTGCCTGCACATCAAAATACTAAAAAAAAGTTCTGGGGAGGCTGTGGCCCTTCAAGATCTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_626273_626720_1:0:0_0:0:0_40777/2
+AACAATGAATAGGAGATTGTTCAAGAAGCACCAAATGGTTCTCCACAAAAAAGAGGGAGTACTTCTTTTCTTCATTGTAGGCCACACAGATATATTGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_317921_318408_0:0:0_1:0:0_2ff66/2
+TATCTTCAAGGCATGCTCCCCACAATACAATCCAACTTTAACTTACCAAAAGGGCTGTTCCACTCCTGCAAACTCATGACATAAGGAAGGTACCATTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2412845_2413418_1:0:0_2:0:0_1d113/1
+AAGTGCTTCCTAACTGTAGCAATCTCAAATTTCTCACTCCAGCCAGCCGGGCCACAGGTGAAAAAAAAAACCATAATAATACCTGGTTCCAAGTTATTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2452116_2452541_1:0:0_0:0:0_39776/1
+TTTTAGTGTGTGCATGCCGTTTCTTTTTCTTACAGTAATATTTAAGACCAGCCAGGCCTCCCATTCAATTTCCACATCATATACATCAATAAGCTTTGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1731740_1732147_0:0:0_1:0:0_5b467/2
+TCCCAACAGATCCCAAGAGTTTACGGAAGGAAAGAGTGAGAAATAGCAATCTAAAATCTGTAGCTGAGGCGGAGTGCAGATCCTCCTCTGTCTCTTCATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2066475_2066961_1:0:0_1:0:0_c29/1
+GTGGGATGTGCAGCCACATACACCGCGCCCGCCCACCCGCAGGAAATCTTTGCCAGGCTGCCCTATGAGCCAAGTATTTCAGGATTGTGACTGCTTCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_994765_995136_1:0:0_1:0:0_5506f/2
+GGCATATCTTGTCCGGCCTGAGCTGAGTTAGATTTGGGTACCAATCCCAGCCGCCCAGAATCTACACATCAGTGAGTCTTGAGCAAGGGCCACAGAAGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1838142_1838596_0:0:0_1:0:0_dc9b/1
+TCGTGCCCCCTCTCTCAAAACCAAAATTTCTTGAATATCTAATTGTTCCCCCAGCACTTTTTGTACATGTAAGATCATTAACTGGGATTACGGAGCTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1186642_1187016_0:0:0_1:0:0_b36b/1
+ATTAACCACAGCAGAGAAATAAAAATTATAAAATGGCATTGGAATCAATATCAGAGTAACCTAACTAAGATTCTGTGTGCATTGATAGAAGCCAGGAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_186276_186725_0:0:0_1:0:0_157c3/1
+CTTCATCCCTGGGCTGAGCAGCAGTACAATTTCATTTCTGTTGCCCAGGTTGTGATCTAGAAAAAGTTGAACAGAAACAGAAATAGCATTTATTTAAATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_903734_904207_0:0:0_1:0:0_55d5b/2
+CACCCACGCCTGGTCATTGTTGAAGGCATACATCCAGGTTCAACCCTGCTCCAGGAAAATCCCCAGGACCTGGTTCCCTCCTTGTGCAGTGTGCAGTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_714584_715065_1:0:0_1:0:0_55d29/2
+TCCTTTCCAAAGTGGAGGTCAAGACAGTCATTGTGTGACTACAAGGATGTCCCTTTCCAAAATTATTTGCGCCAGGCCACAGAATCTCTCCATAGAGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1816827_1817370_2:0:0_2:0:0_125a4/2
+ACAGGATGTGACCACAATTTTCGTAGTAGAAGAGGAAACATATTTTGAAATGGGAAGGGCAGGGACCCCCACTCCCCAACGAATGGATCATATCTTGATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_878609_879023_3:0:0_3:0:0_4f212/1
+GTCTATGAATGACTCTACATTCACTGCACTTATTTTTTTATTTCCTGTAGGGTTAGCCCAATCTATATACACCACTTGGTCTCTTTATAATCCTACCTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_934357_934697_0:0:0_1:0:0_17aa3/2
+TTTCTCTGTAATAAAAGAGTATACCGAGTCTCACTCCAGGCTTTTGATCACAGGGGTCCCTGCCTTTCTAACAGTGGTCCTCACCATAACATTATAAGAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1808413_1808894_0:0:0_1:0:0_29cbe/2
+AAGAAGCTCACTCTTAGAGAATCATAATGTTTGTTCAACCTAAGATTTCGATGTTAAAGGACACGCCGGTGTCCTCTCTCAGAAGTTCATGTGTGCCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2136858_2137254_2:0:0_1:0:0_337ef/1
+GCCAGGCCTCAAGAGAATGTGCATCCTCTCTCAAAAACTGAATTGTTCTTTTATGGCAGAGGCCTGTAGGGCCAAGGGTAGATGGCAGGACTGATTCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_203135_203533_2:0:0_0:0:0_2f4c1/1
+TATAAGTGGATCAATAGACAAACTAAAAGCTAGAAATACTATAGTTCTGCCTCAGGCCTGCCCGTCTCACTGGAACAGAAAATGTGATTATCCTAGAGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_829852_830280_0:0:0_2:0:0_49bda/2
+TAATAGGAGACTATAAAAACTAAAAAAGTTTTCCCACCATGAGCCATTTTCCATTTTCGTTTCGCTCCAGCTAGTCCTTTTGGCGTTTACCACTATTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1748780_1749255_0:0:0_2:0:0_12969/1
+CGTTCTCCTGATCAATAGATCTAGGAGTTCGATTAGAAGAAAACTTAAACAGAAAGTGTAAGCTAATATCTCATCAGTAAAACAAATACAATGTCAGTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1638429_1638931_1:0:0_1:0:0_409e3/2
+TTCCGTCTCCAGGCTGATGTTTCTCTTTTTTTTAGTGCTAAGGTCAGCTAAATTATAAACAAATGTACACAGGAGGGTCTGGGGAGGTGGCGCATTCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2001568_2002028_3:0:0_0:0:0_13a11/2
+AATACTTATTGGTAAGGAATTCAAGTGATGAGATCACGCCTGTCTACTGCCTAGCTGCCAGCACTTTTCTTTGAGGAAATAGACAAAATACCACTACAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_240105_240514_0:0:0_1:0:0_23dfa/2
+AGATATGTTAAATTTTATTGGTATGAAAGCTTAAGGGTAATGCAACCTTATTTAAAAGTACACACACAATCTGTATACTTTACTTAAATGTTGAAATTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2262197_2262670_1:0:0_0:0:0_1d3ce/1
+GTAATTTATCTGCGGGGCGGCCACTGCATAGGTACTGTCTTGAAGAAAGTTGGACTATCTATTCTTCCTTGAACCCATTGATCATGAAAGTGGTGGTCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1743004_1743492_2:0:0_0:0:0_435f4/2
+GGAATTACTGACTCTGAAATCAGCAATTTGATCTCTATAATCTCTTTCAGTTTTGATGGTAATTCTTATTTAGGTCAGGACCAGGGTGACTTACAGATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1175006_1175480_1:0:0_1:0:0_13094/2
+ACTCAGGAGGAAGAAGCAGACATTGCTGAAATCTCTTTAGAACATTACAGACTTCACAGATGGTTAATTGCCCCGACGAAGCTCCACTGGAGTATGTAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_105184_105582_2:0:0_1:0:0_32d21/1
+AGCCAACATTAGACACTGTGCCACTGCTCCAAAATACCTGTAATCATATTTTAATTTTAAAAACTGATACTGTTTCAGCTACTTTTTCTGATTCCAGTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1102573_1102971_1:0:0_0:0:0_4b846/1
+CAGGCAAAAGCTTTTATGACATCTCAACTTAGGACACAGTGTATTGGTATTCTATTTTTATCAGTGAACACCGTGCCAGAAGCATCCTGGACTCCAGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_561620_562136_2:0:0_0:0:0_2c574/2
+GGAAATAAATGATATTTATACAAATTTTCAAGGCCTGATGGGAGGCTGGGCTTTTGTATTTTTATTCAACTCTGTTTTTGCAAAGGGGCCTATATTTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1688213_1688683_1:0:0_0:0:0_24660/1
+GGAAATACTTTTTATCCTTTGCTGGTAGTATTGACTTAAGGGGATTACAATGCCGCCATTCCTTTTAGTTATCCCCTTTCTGAAGGGGGAACATTTTTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_163434_163915_1:0:0_1:0:0_56afb/2
+CCTAGACCTCTGGTGATGATCCCATTTTCTTCTTCAACATTCATATTTTGCGGTGGATATTCTATTTCATGTCTGAAAAACCCAGTGTTTGGGCTAATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_837062_837512_0:0:0_2:0:0_202a8/1
+CCTTAGACCAGAGCCGTTCCCTGCTGGGAAGTGAATTGAGGCCGTTATTTATATACTTTCCTTATCCTGACCTCAGCTTCTCAAATTTAGTGCCAAATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2290726_2291170_1:0:0_1:0:0_569c7/2
+TGCCTAAACAATATAGATTTGAATTATGCAGATCACTTAGGTAAGTTTTGCCTTGATTAAATACTTGTGTGCTGTGGCTATAGGGAATGGAGTCGTCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_141848_142330_2:0:0_0:0:0_18178/1
+CAAGTTTGTGATAATGTTGAACTGCACCCCTCTTAGTTTTCCGGCCACGTCCAGACTCATAAACTTATATACTTATTTGTGTCCATTCCAAATCCTCAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_720784_721194_1:0:0_1:0:0_4c519/1
+AGAATTGGCAAAAAAAGATATGATAAAAATTGATGTTGGTCCTTTTCATATCTAGGCTAGACATAATTATGAAGGGGTTAGGAGTCCACTCCAAGAATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2144586_2145059_1:0:0_0:0:0_283c5/1
+ACATGTTTGAAATAATTTATACTTCAGCTTCTTCTTTATATGAGATCGATCTCAAGAGTAGAGCTTAAACTTCATTTCTTGAAGCTGGGTATGAACTTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2305189_2305612_1:0:0_1:0:0_4c4ae/2
+TAAATCAGAATTTGTGCAGGGCTTGTATTATTTGATGATTGAGGGGGTTTGACAAAGAAGTCACCTATGTAATCCCTAGCATTGTGGAAACTTCTTATTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2090354_2090672_0:0:0_2:0:0_3aee1/2
+AAACAAGGTCCAGGAATTGCTGCTGTTTTTCTTGTAATTCACATATAATCCCAGCATAATTACTGCAGAGTGGCTCACCAAAATCAAATGGTCTGCACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_320088_320475_1:0:0_0:0:0_3f016/1
+AGCAAGAACAAACTGCTCTGAGCTGAAGACTCTTTGTAATCCCATTTATCCTGCTCTGTGTCCATGGCAGTGAGGATGGGTTCAATACGCTTTTTTTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1399689_1400130_1:0:0_1:0:0_d341/2
+ATTAGTACAAATAACACATGTCGGAGGGGGAAATTAGAGGTTGCATTTCTAAGATACTGGTCTTTTTTCATTAAGTTTTTGTGTCTGTCTTCCTTGATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_268458_268784_0:0:0_1:0:0_44ab/1
+TTCCTAGAAGACTGTGCATTTCCTTGCCTATGTTCATATGTAAACTAGGAGAGCTGGAGACAGACTTATAATCTTGATCCCTGGCCAGGACCAGTTACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1140017_1140415_0:0:0_1:0:0_2cb40/2
+GCAGAAAGAGCCTGGCACAAAGCCTCCTCTCCTGACCATTACATAGTTTGTTTATGTCTTTTCCCAAATTTTCTTTTCTAGTCATCTGTGTTTTTAATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_452999_453371_1:0:0_1:0:0_4b28f/1
+GCTCATTGTGGTATCAATGTAATGAAATAGGGAAAGTAAGAGGCCATTTGAGATGGCAGTTCTGTAATTTTAAAAAGAGTCCTAAGGCAGAGGCCTCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1179618_1180092_1:0:0_2:0:0_3026f/2
+CCTACTAAATGATTTCCAATATTTAGAATAGTAGAGTTAAATCTCAGAATCTGCAGAAATAATGAAAGAAGAGGAGAAGGAGAATGATGCTTCCAGTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_977933_978346_1:0:0_0:0:0_2e112/2
+TTTGATAAATATTGGTGGCTCACGCCATGGAGTTACTCTTAGATGCTTTGGAATTCTTTTTATTTGTTTTACCATATCCATAATTGATTTTCCATTGTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_129945_130452_1:0:0_2:0:0_3e6dd/1
+AAAGGCTCACAGATGAGGGAGCACTTCCCTAACCATGAACCTGAAAATTATTGACTTTGACCTGGAGTACTCAGCCCCAGCATTTCACTCTGGGCAACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2371888_2372348_1:0:0_0:0:0_4785f/2
+AACTTGCTGCTGTGTTTGGGAGCCAGGGTTATGATCTCGAACCCGGGGTGCTGACTATAAGAGATGTGGTTGTGTATAAACATTTTTCTGTAATCCAGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_148940_149327_1:0:0_0:0:0_2876e/1
+TGGGTTCTCCCTGAGTATCCAGACTGTAAGAAATAAAGTATATACACTCATTAGGACCAGCCTGAAATCTTCGGTCTGGAACTCCTGCCTGCACCACCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2227649_2228095_0:0:0_1:0:0_1357c/1
+AGTGGGAGGAGAGCTGCAAATACAGAGCCAAGGCCATGTGATGTGATGGTAAATATCTTCAAATATCATATATTTGTAAAGAGAAATTGAAAATGTCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_390375_390782_0:0:0_1:0:0_54b96/1
+TATTTCATTGAAGCTCCTCTCCAACATTAGAAGATAATACAGTTCATGTGCAGTGGTGCAGTAATCCCAGATAGGGCCGCCCACAATCAGACATATAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1867980_1868347_0:0:0_1:0:0_5b0ae/1
+GGGATTTTAATATTTGTGACTGTTAATGCAGAAACAACGTTTGCAACCTCAAAGTAGAAATATTTATAAAGGCCTCTGAAACTGATTTTCCTTTATTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1768174_1768735_1:0:0_1:0:0_4228d/2
+AGTTTTGTTGTTTCCTATAGTGCTGGGATTAAAAAAAAAATTTGTGAATCAGACTGGCTCACGCAGGACATGATATAACCAACACCGCTCCTGTGTTTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1831715_1832166_1:0:0_1:0:0_15eeb/1
+TTTTCTACCATAAATGGGCACCCACATTCCCGCCATTGTGATTTAGGACAGATTGATATGGAATTGGTGTAGAGAAAAAAGAATATTGTTGTTGAAAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_382686_383153_1:0:0_0:0:0_1d15d/1
+CGACGTGATTGCCCATTCTCAACTTACTAGAACATAAACTCAGCCTCAGAGGGCAGTAATCCCAAAAGATATATAATGGAAAAGGGCCTGGCTTGAGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_669866_670340_0:0:0_1:0:0_5a820/1
+GGATAAAATTCGGAAAGGACAGCCAAACCAGTCTGTGCATCTATTTGGAATCGTCTGTTTTATGTGGAGGAAGGATAGATAAAGGAACACACACAGTGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1652598_1652964_1:0:0_0:0:0_22a6/2
+AGGGCTTAATACAAACTTTAAACACACACGTCAGCAACAAGTTATATTAAAGTCTGGATCTGCTTGGATATTTGACAGAAACCTTGACTTTCCACATTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1563476_1563963_1:0:0_0:0:0_433c5/2
+TAATTCTACAAACTGTAGACATTTTCGCCATCGCACAATGTATGTCAAATGCAAGAGGTATCCTTCTGCCAGGGAGCAGATCCAAAGCCACTGCCCCTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_994979_995469_0:0:0_1:0:0_41031/1
+TGCTTATTGAATGGAATATAACTGAGCAAGAACTGTGAAGAGATTGGTACAGGCATAGGAAAGTGATCTTTGCCTGCGGCCTGATGAAATTGGTGGCGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2159308_2159817_1:0:0_0:0:0_2af14/1
+GGTAGGGCTGTAGGTTGCAGATGCTGTAAATAATAGCTTTCTGTGAAGGTTAAGGAGGCCCTCTCCTGATTTCAAATGCCTTACTTGTGAGCCCGGCCCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_350854_351311_0:0:0_1:0:0_489cb/1
+TCTTCTGCTTTGAGAAATGATATGGAATCTAATAGACATTATCCTTTTCACTCCTGTAACAAGAAGGGAATTTGCTTTGAAAAGCTAAGCCAGCACTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_760618_761059_0:0:0_1:0:0_38925/1
+ACCGTTGCCCACCTTCCAAAATGAGTCCATGACTTCAGGTAGGGGTTCTCTTTGTGAGACTGCGGCCAAGGTTATTGTAAAGTATAAAATCAAAAGTATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2435921_2436353_0:0:0_1:0:0_e557/1
+TTATCTATAGCCCCTCCCCTTGATTTTGTGTAATACGGCTTTGTTTTTGGTAGGCATAGCCACATAGTGGGGGGCAAGACCAGCACTTGTGGGCTGCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1884220_1884677_1:0:0_1:0:0_4c8ce/1
+AGTGATCGTATGTTCAGTAAAGAATAACCTGGGAGCCAAGGGGCTTGTTTCTTAAGCAAATCTCAAACTGGCTGCTCACGCGTAGCTGAGGGACATGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2106235_2106614_1:0:0_0:0:0_19c2b/1
+GCTTTTGATGTCTAGACAGCAGCAAGGCCCAATTTTTTTGATGATTAACCTGCCTCTGCCTTTGCTCTATTCTCTTATAGAATGGTTAATCCCCGCCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1390874_1391419_1:0:0_1:0:0_49e88/2
+GCCAAAAATCTAGGTGGCAACATATACACCCACAGTGATCAGTGCTGTCCGAGCCTGATGTATTTACTCTCCATAGCTTAAGACTTATCTTTCAGGGGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_239439_239904_1:0:0_1:0:0_408ac/1
+CTGCAGGCCAGCTACAGATGCAATGGATGAGATCGCTTTCTGATTTTCACTTCTATCCTCAGCAAGACCCATTGTGGGAAGAGAAAGCAATAATTGGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1452224_1452647_0:0:0_1:0:0_39831/1
+TTAGGGATAGCATGTGGTGTTACTGCCAATTCTGCATTCTCACTGCACTATCTTCAATTTAATAAAAAGCAAATATTGAGTGTCTAAAAAGAAGAGAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1626421_1626938_1:0:0_0:0:0_3192e/1
+GAAGGAAAAACTGTGAATGAACAATTTTCTTAAAATTGCTTAAGTCTAAAATGCCACTATCAGTTTAAGAAAGAAAAATTAAGTATACTTTTATGTGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1446893_1447337_0:0:0_3:0:0_8afa/1
+CTATTGTGTTACCATCAATGTCTTTCTGTATTGGCACATTGAAATGTCAGTGCCACCATGCTGCCATGTTTCCAAACAATGCATATATTTACAAGTATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1055821_1056246_0:0:0_1:0:0_43f64/2
+AAAAGAGAGTTGACCCACAGCTACTTGTACTAAAGGCTAGGAGAAGACCAATGCATGGTACCCCTGGTGGTCAATAAATTTCATTTTTGCAGAAGAATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2493902_2494393_1:0:0_0:0:0_4ef1b/1
+AATGTGTTAGGACTTATAATTCATATAATTGCAGCCAAGATGAAGGAATTCTGTTGGATATAGGGCAGGAGTAGATTGATCATCAATAAAACACAACTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_339718_340154_0:0:0_1:0:0_2e6cb/1
+TACCATGTACCACATTTTTTTAAATGAGCCCACTCTTTTTAAAATATATATACAAAGAAAGCACTCCTAATTTTGAGAACCCGGCAGCGGGGCCCTTGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_879978_880470_1:0:0_1:0:0_57c28/1
+GGGCGTGCTGGGCATGAGACTCCAGCCCAGCCTTTTATTTCTCAAGTGACAGGTTGGAGGTATTGAATTTTGTTGCCCCAACACCTTAGATTTAGTAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2116412_2116903_1:0:0_1:0:0_3181d/1
+TATTTAAATAAAGGTGGCGCAGCCCCTGTCAAAAACTAAGTAGAGATGAGGGGACGATGTATGTGAAACCCAAACAAATGCCTGTGGAGAGGCAGCATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2138436_2138869_1:0:0_1:0:0_1d624/2
+AACTGCTTCAGTTCGGGAGTTCATGATTTTTATTAATATATCACTTGCTGGGAGGCGGGGACTACAGAACACAAAAAAAAAACAGAGACTGTAAGTGTGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1450503_1450970_0:0:0_3:0:0_37f75/1
+TATAAAATAAACACTGCAGTATTCATGACCTTCTATAAATATTAGACTCAGCCCTTTGAAGCCATCTGAATCTGTTACCTAAAGACATGAACTGAATTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1832412_1832816_1:0:0_1:0:0_54688/1
+TCGGGAAGGCAATGGGATTATATATACCCATCGGTGGTCTGTACCACTGGAAGTGAAATCCCAAAGTATGAAGCTTTTTAAAAATAGCAGGAGACTCACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1606284_1606687_1:0:0_2:0:0_55dee/1
+ATGTTTTTATTTGTTTGTGCACCTTGTTTGCATCCCAGCTACTTGATTACAGTATTTTATATAAGTGGATACAAATGATGGCATTGATTAACGAAAAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1821398_1821908_0:0:0_2:0:0_4482f/1
+GTTGATTGTTCCTAGAAGAGTACACCCTATGAGAAAGTGGCATTTGGCTCATCCCTGGATTCACACCATTTCTTTTCTATGGTGAAAGAGATGTATTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_270186_270608_1:0:0_0:0:0_4590d/2
+ATAACACAGAATGGAAGCCATGATAGACATTTACCTGGTGTCGTCTGCAAGACAATCTGATTTGAGAAACTTAAAAGTCTTGATGGTGGAGCTTAAGTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_489125_489614_1:0:0_0:0:0_30515/1
+ATCCACAGTAAAATTAGGTCAGATTCTCACCTTGCTCTGGAAGATTCATTTGGTTTTATAATATAAGAGAAATTTCACTGGCAATGGTATAAGAGTGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1299906_1300337_1:0:0_0:0:0_26454/1
+GCTCCCATTGCTTTTCAAGTGAGCCAAAAATGTTAATCTAAGATGCGAAACGGGAAGTTGGGGTGTCTAATAACACCATGGTGACTAAGTGATCATTAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_317437_317894_1:0:0_0:0:0_3cd13/2
+ACCGCACAGCAGGCGTGAGTTGGCCAATAAATTATTGAGTCACCCCACACCTGCCTTTTTTTTGCTACCTGATAGCCAGTCAGCCTCTTGAAATGGACCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_170069_170488_0:0:0_1:0:0_44161/1
+TGCTGGCTATTTCTACTATTTTAGCTACTGAGCTGAGCTCGCACAATGCAACTTGTCCTGAGCAGGAGATCACAGCAATCACCAAAAATTAGTGGTAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2056153_2056580_1:0:0_1:0:0_20ac7/2
+ATCCTGCAGAAGATAGTTCACTCCCAAAGCAGCAAGATTCTCCTTCTGTGGCCAGGAAACAGCATCACCTCAGCCAAAGTGCTTAAACCTAAACTGTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2496719_2497208_0:0:0_1:0:0_2e015/2
+ATACTTCAGGTTCCAAGAGAGAGTCCCTTATGCACAGTTTAAATGTTTTTAAATCTTAAACATAAATAATAGTGTAGGGGCAAGAGAAATTCCATTTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1889693_1890076_1:0:0_0:0:0_34cf2/2
+TGGCCCCATCTAGTGATAAGCCAATCCCAAATATCAATCAAGAAGGTGATTCAATGGCTTGAGGTGTGCAGATGAGAAAGGAAAAGAGAAAAAAAAAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_424924_425370_1:0:0_1:0:0_b519/1
+ACACTTCAGTTTGTCATATGAGAAAATGCCCACTTACGGACATTTCAAAACAAGGAATGGTCTCAAAATTAATTTCTTTAAACTCATCCATCGGGTGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_469809_470234_2:0:0_1:0:0_2ada1/1
+TCTCCTTCTTTTGTTTTATTAATTTTATAAATTGAAAGAATAACATAGGCAACAGCAAAGGTTCTGGACTGGCCCCAGAACCCTTCTCCTACCCTGAAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_903637_904133_1:0:0_0:0:0_22b57/2
+AATACGCCAGGATAGTGAAGAATTTTTAGAAAAATAAGATCATTTACTAAGGTATGCATAATAAATGGCGAGCTCTGCTGAATGATCTTCAGATTCATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_232483_232898_1:0:0_0:0:0_5a1c7/2
+CTCTACTATTAATTGACTTTAAGAAAAAGAAACAGGTTCAAGGAAGGTAGGCAATGCAGGACAGGAGCTGTGCAATCCTGGGGATAAGGAGTTTCTATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_142132_142489_0:0:0_1:0:0_11265/2
+TTGCCTTTGAAGGCAACAATTTCTACACAGAAGAGTCTCTATAAATAAATAGCTTCCGGCCGCCGGTCTCATCAAGGCAGGGACATCACCTCCTTGAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1683602_1684066_0:0:0_1:0:0_41d0b/1
+TCTGGCGGCAGCCACAGGTCAGGTGGCTCTCGTGCATTCAGTCAGTTATTCTTTTAATTTAACTGCAACAAGGCACGGAGTCTTGTGTTTATTATTGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2450035_2450593_2:0:0_0:0:0_482bb/1
+ATTTTTTTGTATCTGATAGAGGAGCTGGAAACACTTTTCTGCTAGCTCTCTTGAAACTGCAACCACAGTCTGACGTGTGCTCCAACACTCACAAACGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2140285_2140665_2:0:0_0:0:0_31cb8/2
+ATTTGGCAATCATGATCCACTACACCAAGGCCATGAATAAAATAGGTGATACACTCTTTTTGTTAGTCCACACGAACGGCTGTTCACATTTTTCCAGACG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1238862_1239429_1:0:0_1:0:0_2cbc7/2
+CAACTGCACCTACGGTGCTCTGTGCCCACCCTAGGAGTGGAAAAGATAATTAAAACCACGCAGGTAAGAAGAGGGATAATATTTGCACCTGAGATAGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_421394_421866_1:0:0_1:0:0_44a91/2
+CAGGTGGGTTCAAGTTCTGTGTATCCCCAAAGTGACTTTTTTTTTTTAGTATGAATTGAATACAGGAAAGAATGTTTACAATCCTCTCAAAGCTGCTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1045357_1045754_0:0:0_3:0:0_46a55/1
+CCAAATACGTTGTAAGGCAGATTTGAAACAAAAAATTTCTTCTTCAGGTTTTTATCTCTTACTAATACCATTTATATTAACTAATTTTAAAAGGCAGTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_779651_780097_0:0:0_1:0:0_1292e/2
+TGCTTTATCTTGACTTTGCTGCTGTTTTGAATCTTATTAAAAACGAAAATGGGGAAGGAAATATGAATTGGACAGAAGCATGTGGAAGCTCGCTCTTTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2035124_2035647_1:0:0_1:0:0_30b1b/1
+ATTTGTCCAACCCTGTAGGGTTTACGAAACTGCCACAGAGCTAGGAGAGTTTTCTATGAAGGTGTCTGAGGTCGCCAAGATTACAATTCCATTGCCCCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1771362_1771876_1:0:0_1:0:0_39cb6/2
+TCACATTTGTATGTCGGGTGTTATCGCATTGCAATTTGTATAATCAGCCTGGTGCCATGGCTTTGCTGGATCCAGGCAACCACTTTGGATGTCCTTGCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1093463_1093900_0:0:0_2:0:0_36e0a/1
+CCAGGGACAAAGAGTCGTGTAAGGGGACCGCTGCGGCAAAGAAGGTGCGCCTGTGTAAGGAAGAAAGCATTCTACTGGGTCTTACACTAACAGCTTATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_145527_146036_0:0:0_1:0:0_f652/2
+GGTGAATCTGACTTTTAGCAGTCTATATGTTTCAATGAGTAGGGAGCATGTGAGTGGATCTACAACTGAGCACCATGGCCTAAGAATTCCCTATTGCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1487362_1487746_0:0:0_1:0:0_4b850/2
+AAATGATCTGGCTGAAGAAGATTAGGTACAGCAATTCCACTTAACCTAAAAAGGAACAACTTAAAATACTCTTTGCATATTTATTTAAAATTCTGTGCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1116347_1116814_0:0:0_1:0:0_24acd/2
+CAGAAATTAAAGTATGCGAGACCAGCCCTTTTCGTTTGCCTTCATCCAAATTCCACCTTCCTCAGCCCTTATGGACTACACTGTGTCCATCAGCAGTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_156149_156528_0:0:0_1:0:0_3bcc0/2
+CAAGCCTCCGATTTTTAAAAACAAAGTGCTTTAAAGTCTATGCTTGCATCTTCTTTGTAGAAGCAAATGAATAGGTGCCTTTTGCTAGGATTGTTTATCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_858564_858941_1:0:0_0:0:0_534f8/1
+TTTCTTCCACATCGCCCACAAAGACTCAATATTTTGCTATATTTTCATAGTGATGAAATCTACTGTACCTACCTGTGACTCACATGGCAACAAAGTGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2286940_2287409_1:0:0_0:0:0_32145/1
+GCACTGTTCTATCTTTTTGTATTGTAGGGTTTTTTAAAAGTGATGACTTTTTGGGTCTCCATCATCTGTAGCCAGAATCATTCCAAATAGATAATGTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1726842_1727331_0:0:0_1:0:0_25efa/1
+CTGAGTTAACACCCATCTTACTTACAGTTTTTTTTTTTAGCAATTTCTCCTGGGCCCGGTTCCTGATCCTCCAGCCTTATTCTTTCTCAAAAATCCCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_840656_841057_0:0:0_1:0:0_35330/1
+AACCAAGGTTCCTTATGTGGAAAAGTTGTAGATGTTACTGACTTTGAAATGAAATAAATTAAGGGCTCATGCTGAACCGAGCGCTTCCATTCTTCGTTAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1951759_1952286_0:0:0_1:0:0_3b2a2/2
+ATTTAGCATTCAAATTTACATAAGTGTGGCTCTCACTCGTCACTATAACACAGAGAGAAAGAACTAGATGAGTGAGTGTATGAACTCTGCACTCTCCCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2443908_2444360_0:0:0_1:0:0_3920a/1
+CCCTGCAGACCTTTGTCAGACCTTTGTAAATGCTCCACTGCAGAGAGCCTGAAGAGCAGTTGGATGCTAAGGCATGAGCAAATAATTTATTTGAATTACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1107522_1107917_0:0:0_1:0:0_48faf/1
+AGGTTTGTTGGTAGATAATTTATTCCTCTTTGATTGTTGGCCAAGTTGTTGGCCAGGGAGCCACACATTTATAGAACAGCTTATTTTTATCACAAGGAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1196919_1197445_1:0:0_0:0:0_497ec/1
+CCCTCACAGCCATAAGATAGCTTTGGGCAAAGTGGAGCAATTTAAGACTAACAAGCCACTGCCTGTAAACAAATCCAAGATTTAACTACCCTAGTTAATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_736698_737123_1:0:0_1:0:0_2c508/2
+TTTGTGAAAATTTAAAGGAAAAGTCAAATTGGAAAAGTTAAAGTGCTTCTGAGCCATGGTGATATAGTATAATAGGAATCAAGGACGGATTTCATCACTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1019558_1019991_0:0:0_2:0:0_4fd64/1
+CTAATTTTTCACTTACGGGTTTCATCAGCAGATGAATGGCCGCAGGCTAAGACCTTTTCCCCATAATGGATCACGGGGCTTGAATCCCAGAAATCGCTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1215358_1215859_0:0:0_1:0:0_3b4e2/1
+AGGGAGAGGCCAACAGTCAGGAGTTTATTAGTACTCCTGGAGAGCAACCTCCAGAGCTCCCGTTTCTGTGTCGTACACGAATCGCACCCGGGAGGGAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1279610_1280074_1:0:0_1:0:0_3ab67/2
+GTGGGACCAACTTCCTTAGAGGTGTGACCCCCTTATTTAAGTTATCATATGACCTCGTCTTGTAGTCCAGAAAAAAGGAAGACACAAGTCAAGAATATGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2395249_2395690_0:0:0_1:0:0_3c8e6/2
+CCCGCGCCACCTGGCCAGAACCAAAATTTGTATGTGTAATCCCAGGGCCCCATTGGTCTCACACCCAGTACTTGCTGTTATGCCCATGATTAAAGATTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1436885_1437325_0:0:0_1:0:0_2d044/2
+GTGGTGCCTTTTCATCATTTTGGTAAAGACTACTAAATTTAAGTTTGGTGAATCCTGACAGTTTGACATTACCTTAACACTCTTCTCATGGGCATAACTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1631621_1631997_1:0:0_1:0:0_150b9/1
+AGTAAACTTCTCAGGATAGGTTTGGACTCCCCTCCCAAAAGTGCTGTAAGCATGATTGGGAAAGGATTTCATCCTTACTAGGTCATTCTCAACCGTAATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_585388_585827_0:0:0_1:0:0_2fb68/1
+GTAATTCCCACCGCAGACGTACAGGGAAAGTTGTGGAAGATAATGTAAAATGAGAGGCTTTTCAATTGCATAGCAGTTGGCCCCTACCTTCCTCAAGGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_788387_788859_1:0:0_1:0:0_5248f/1
+CCAGGGATAACTTTTTTTTTTTTGGTTTGTATCATCTCCGCCCCCACTCTGTCCTAGATATTGTCCATTACCTGTTTAAAACCCCCAGCTACTCGGCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_572745_573140_1:0:0_1:0:0_2c6d/1
+TAGGAAGAGGCAACGCTCAATCCAAAGTGTAACCTGTGTGTGAGGGCACACACACATCCACCTCAAACAAGGTCTAATATCATATCACACGCTTGATCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2370250_2370760_1:0:0_1:0:0_423a7/1
+CCAGTCACACCCAACTCATGCCTTCCCATCAGAGAGAGGGGAGGAGGCTACTTTAACTTCAGTAAATGTGACTGGCAAAATGTCTTGATTTTAAGGTTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_317771_318247_3:0:0_1:0:0_548da/1
+TATATTGGAGTAATTTCGCCCTTTTCTTTATTTCTTAAAGGAGGAGTTGAGGCACGGTGCCGTTTTGTGGAGTCCTCACGCCAGCTTCGTCACATAAGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_524020_524379_0:0:0_1:0:0_3b76c/1
+GAGTGTATCAAACATAGTTGAACCGCATTATGTGTCTCCTAAAGGCAGGCCCTCTCACTCTTCTTGTTGTGCATTCTGTTCTAACCAGGTTCTGACCCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_596063_596513_1:0:0_0:0:0_441b5/2
+CTCCATGTTATTCTTATGGAAACGGGTTTCAAGACTATCAACAGCAGCCACCAGGCTGTGCCTTCTGAAGCTGGCATCCTCCAGAGTCTCGGCCAAGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1904876_1905318_1:0:0_0:0:0_29719/2
+AGAACTCTGATCCTCCTTGGTGAACTGAAAAGCATAATCTTTTTTTTTTTTCTATGATCTTGCTCCTCCTGACCCAGGGATGACATGGAAAGAAACTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_307455_307972_0:0:0_1:0:0_58473/1
+ACTGTTGTATGGAAAGTCATAAATGGTTCCCAGCTATGCCTTTAAAAACAAACCAAAGGAATGGATGCAGAAGAAGTACTGCTGAGGCTTATGGATTAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_372162_372611_0:0:0_2:0:0_3da52/1
+ATTGTTACCAGTGGCTCATAGGGTATATATTATCTTGTTGCCTTGGCAGAAATCCATGTTGAGAGACAGAGTGGGGCAAGTAGGCAGATTTGCATGGTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_591113_591537_1:0:0_0:0:0_9238/1
+CACGCATGCCTGTCCTGTAATTTGAGCCTGCAAACTCCTCATTGCTGAAGCCCTTAACTTGAGCTCCCTCTCAGCTGTCTCACAAGCCTGTTAAGTGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_522971_523421_1:0:0_0:0:0_45c9c/2
+ATCTGCGGGCACAGCAACTTAAAAAAAATTTGAAATTGGAGTGCAGTGAGATGTCAAAAAAGAATATTCCTAATTTTTATTTAGTATCTGGCCAAACATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2445503_2445939_1:0:0_0:0:0_50a69/1
+CAAATTCATAAGAAGGCTGAGGCATTTTTTTATTTTGAGATTTGATCATGAATAATATATGTGAATAATAACTCTACCTTTCTCCAATCAAACACTGGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1211790_1212285_1:0:0_1:0:0_230e5/2
+ACTTGAACCCCAGGGACGCCCTTATAATGGCCCAAGTCTAGGCAGCACTCTGCCGCGCCCCAGCTACTGCCTGACCATCTTCAATGAGGGACACTCTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_673848_674235_1:0:0_1:0:0_512d5/1
+CCATCTGCAACAGTGTAAATATATATAATAATAATAAAATGGTTACTGGCTAAGGACTGGAATTCTCAGAATCAATACATAATTTTGGCAAGGATGAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_945226_945652_1:0:0_0:0:0_49058/2
+CAGGGCATCTGGGAAGGAGGCTACCTGAGCTTTATTTGTTATTACAAAATAGTAATGGAATGGTTACTTTGGTCTTGCTTCCAGGTTATATTGAGAAGCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_298766_299307_1:0:0_1:0:0_523df/2
+TAATTTGGTGAGGAGTATCCAAAAATTATTCTTGTCATCCCAGCAGAAACCCTAAAAACATTCTCAGCCGGAATTGATCCACTAAAACTGCCTCAGCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_835076_835501_1:0:0_0:0:0_30139/2
+TTTATTTACTGTGTGTGTGTGTGACATTTACGTCCCAGGCTCTGTTTGAGATGAGATAATAAATATTGATTGGGGCCTCGGCTCGCCACTAAACTCACTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1021158_1021624_2:0:0_1:0:0_128c6/2
+AAGACTTCCTGGAAAAGTCTAAAGTATTATGGCAGCTGGGTGACAGAGGACCTCCCAACTGTAATCATGTCTTACCCATACTCAGTTTACAGACAATGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_312903_313334_0:0:0_1:0:0_34340/1
+ATTTTTGCCCAAGCATCCATGAGTGGCACTGCAACAAAAGTTTAGAAATTATAAAAGGCAGGTGCCAAGGGCTCAAAAATAGGTGCAGTGGCACGCGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_724194_724638_1:0:0_1:0:0_302c0/1
+TTATTTCTAACAGATCATGTAATCCTTCCTATTCCTTGCCCCCATCAAATCATGTATGTATACATCTATGTCCCTTGCCTACAGTGAAGGTTCCCTTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_990982_991434_0:0:0_4:0:0_520dd/2
+TGAATAGAGGGCAGCAGATTCTTGGGAGCCTTTTATATAACCAGTCTGAGAATGATAATGGCCATGACCTCGAGTTTTGGGTATGTAACTTCAGTAGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_698439_698757_1:0:0_1:0:0_45066/2
+TTTTCAATTTTGGGATGTAAGCAGAAAGTTAAATTATAAAAGAAAAGGAAGCATGGTTGAACAAGATGGACTAGTTTCTGCCATAATATTGATCTGGAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1621306_1621788_1:0:0_0:0:0_397cf/1
+ACCCCGCCCACTAACAGCAAACATCCCATGTCTGACCTCGGTTGTGTATCGGTGGAGTGTTCTGGCTCCCTTAAAGTCAGCTATAGGTTGGTATATTTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1477219_1477753_1:0:0_0:0:0_35abb/1
+CAAGAAGGCAGGATCTATGTTTTGAAAGCTACTCGGAGGTGTGCTGCAGAGGTCCTGTCACAGGTAGATTCTCTGATTTCTTTTGCAGCTTTAACTTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1224282_1224819_0:0:0_1:0:0_329f9/1
+TTGGAGAAAAAGGAAATTGTAGAGAAGGGGGTTTTGTTTTCATTCCAAATGACCATTTTGGTAATGGTAATGCCTGGCCCCTGCTGCAGCCGAGATCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_690429_690835_1:0:0_0:0:0_1de68/1
+TGCCTTAAAATCCTGGAGGTCTAAATATAAAGTGCAGTATTTGTGTTTTTCCATATATTATTCTTTTTTTATAAATTAGTTTGCCGCCCACAATTCTGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_843568_844063_1:0:0_1:0:0_23f0c/1
+CCTGGTCACCTAATGCCCGCATGGCATTATTCCCTTTCCCCCGACCATTAATACATGTTACCAGCCTCCTTCCCTGGTTGAGCCACCTCTGTTCACCTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2331636_2332157_3:0:0_1:0:0_acb7/1
+GGATAAATTAGTTTATTCCTCTTGTGGTTCAAAGGGCCTCCCTAACCACAGCCAAATCCTCATGGTGGTGCACCACACGGTGGTGAATGAGTTGGACTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2455050_2455517_1:0:0_2:0:0_281ac/2
+TTTGATTTAAATAAAACAGAACAAACTCCAGACCCAATCTCAGCACTGCAGCCACACACCCAAATTTAAGCCCTCAGAAGGTTTTTGAATTGGAATTCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_353962_354395_2:0:0_1:0:0_791a/1
+CTTTGGATTGCCATCATGATTGAACCTCATGGAAAGAATCAACTGTTTTTGTGGTAAGCTTAGTCATTAGTCTGGGTCAATGTAGTATATACAAGGCCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_259905_260335_0:0:0_4:0:0_11e83/1
+AATCAAATACAGTTTAAACTCCCAATTTCCCACAAATTTATGCTGTTCTCCATCAGCAGACTGGATGTTATATTAAACCAATTGCTGTCTTTTCTGACCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_222226_222680_2:0:0_1:0:0_38ead/2
+CAGCATTTTATTATAGGAAGAAAGACGATCTGACCTGAAATAAAAATGGAATAAATGCATGCTTTTGGTGAGATATTATAGCCTTAGCCAAGGGCAGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_928644_929041_1:0:0_3:0:0_31c32/2
+CAACTAGCATTGCAAACACTAAGTATATATTTTATGTCCTTTTATTTTTTTATCCAGGAGGCTGAAACTCCCCTTCGATTTCCATGTCGTGTGTGTTGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1795869_1796398_1:0:0_1:0:0_3c2c8/1
+TGGGATGAGGTAAGAAATCACATTTATATGTAAATAATTTTTTAGTTTTGTTAAGTACCTATGAAAATTCTGAGACAGGGCGGCTGTGCCTGTGAGGAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_123871_124343_4:0:0_0:0:0_5818e/1
+AGTTTTGTGGAAAGCGTGTATAGAAATAGACTGTTTGTTTTTTGTCACAAAAACACAGGAATGATGGCAACATGACTGTGCAGAATATCCTCGCAGGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1389628_1390153_0:0:0_1:0:0_1b7f1/2
+CTCCCATTATTGTCTAAACTCGGGAGGAAACAATTATCAATTTTTAATAAATATATTATAAAATCCTCCATTTCAATGACATTCCACAACCTGTAACCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2296130_2296617_1:0:0_1:0:0_3fccb/2
+ACATTAAGGTAGCCACCAGCTCCTAAACCTCCTCATCAATTCCCATTGAAGAAACACACAAAGTATCATTCTAGCTGTGCATTGTTCAGGAATCGACAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_895065_895595_0:0:0_1:0:0_56569/2
+GATTTAGTTTATGCCTAAGCTCTGGTTACAAAAACACTCACAACCCACCCTAGTAATACAAAAGATATTTTTTTCCAATATTTTTAGAAAGAAAAGTGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_206393_206803_1:0:0_0:0:0_41ef1/2
+CTTTGTTTGTGGGGACCAATAAAAAGGGAAAACCATCCACTGCGCCACTGCAATCTACTGGCAAACATATAGGCAGCCTGGCTGAGATGGTGATCTACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1661907_1662380_1:0:0_0:0:0_5b440/1
+AGGTATACAAAAGGAAGTGGTAAGGATAAGAAGGATCCACCTCCCGAGTCCTCTACTACAAATGCTCTAAAAGTCCCCCATAGATTTTAAACCAGACTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_142294_142760_0:0:0_1:0:0_49b6c/1
+GCCCTGGTGTTAGCAGTTCTTGACCACATGAATGTATATCTTATTCACTTTTAAAATCAAATGCCAGTTATATTCTCTCTGATCTCGGCCTCAGGGATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1328880_1329349_1:0:0_0:0:0_1a786/1
+TCATGGGTTTCTCTGGCCTCCCAGGCATCAATAAGATAATAGAATCCGTTTGAGCAGTAAGGATCTCCCAATGAGACCCTAAAGGGCTTTGTGATTGTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1678712_1679147_0:0:0_1:0:0_420b8/2
+CATTAGTGATTGTGTATATACATACTTCCATTTTGAGATGTCCAACAGTAACTAGGTGGGAGTATAAAAATTATAAATATTTCACAGCATAAGTGTTACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_540473_540927_0:0:0_1:0:0_4c67f/1
+ATTTTCTGTTGATGAGGTGGGTACAGGCGTGGTGTTCTCAAAGCCCACCTCTTATTACAGCAGGTAATAGAGATGGAGGTTGCCCTGCCTCTGGAGTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_437949_438370_1:0:0_1:0:0_41733/1
+TATTTTGTAGGGGCTCCATAGGAAAAGCCAACATAGATATCGTCCCCAGAATTAATTTCCTTAGTAGATGGGACTTGTATTCTGTGTATATGTTCAAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2008798_2009232_0:0:0_1:0:0_45c6/2
+ACCAATGGTGCTAATGGCCAGAGGCATTTGTTCATTCTGAGGGCCAGATATTTCCTAAAGGGTGGAATGGAGAGAGTAGAGAGTTCGTAGCAAAGATATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_905206_905688_1:0:0_1:0:0_dbf4/1
+TTCTGTAAGTAGTATAAAGTTGGCCCTTCCTTTACTACAGACAGTGACACTCATTGGGCTTCTGAGATGAGCTAAAATTATAAGGGAATGACAATAGGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1361173_1361624_0:0:0_1:0:0_18b97/2
+TCGATTTCTGGTGGCTCACATATGGACTGTCCGCTACTATCAGCAGCCATTTGTCTAATGGAAAGGAGAAGGATGCTATAGTAAAACAACAAAAAAAGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2401629_2402160_1:0:0_0:0:0_110e5/1
+TGGCATGGCTTTGTGTAAAGGGGGCTGCCTCAGTACATAGAGACGAGCCTGGACCAGCCTCAACTATTCTTACAAGGGGTGTTGTAGTCTTTACTGCTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2414808_2415177_1:0:0_0:0:0_38141/2
+CATGGGATAGTGGCATTTTGAGGACATCATTCAACAGAAATTCTTAAACAGTAGCTTGCCATATAACTGAGGCTGGGTTCCCTTTGTCCCAGCAGCTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_917041_917470_1:0:0_1:0:0_35f16/2
+CCTCCCAGGTTAGTATGCATGGTTTTTGTTTTTCACAATGAATATAAATGATACGTATTTAGCAGCTTTTAAGTTTGCAGAGCAGATAATATATAATAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_88047_88506_1:0:0_0:0:0_2874b/1
+TCGAACTCTAGTGCAGGAGAGGTTTTCCCACGTTTTGATGTGGCAGGAAAATGATATACAAAGACTCACTCTCATTATTGGTTGCCAGGGAGGAAACGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2001670_2002096_0:0:0_1:0:0_3b17/1
+CACAGAACTGCAATACATTTCTGAGCTACTCATGGAACAGGGACAAGACATGTGTCGAAGCATTTAGTAAGGAAAATATTTTGTATTTTATTTTGGATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2418129_2418554_1:0:0_2:0:0_39ac5/2
+GACTTTGCCCATGCACACATGGTGGTTGTTAGCTATTAATCCCCCATCTTAAAGTACAGTGCGGTGGGACACACACACTACGCCTGCCCAGCCCAGCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_862607_863032_3:0:0_0:0:0_4bb63/2
+GGCAAAGACATAGTGGAAAAGAATCTTAATGTGGACATCTATAGAAGAGCTTATGAGCCTGCTTTAATTTCCCTAAAAAGGAAGTAAGCCAAAGTGGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_477542_477908_0:0:0_2:0:0_2e677/1
+TACGCAACCTCCCACACCGGGCCTGAGGAAAAGGAAAGTTTTCTGGAGAGAAAAATTAGCAAATTGAGGTTTTTATTTTCCTGTCTATTTTGTTTTCCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_568979_569381_1:0:0_1:0:0_2bbbb/2
+ACAAAAGAAATAAATTGAAACACAAACATTTTAGTTCAAGGCAAGATGGGTCTTGGTTAAAAATTCAGTGCTAGCAAAGAAAAAAGTAAAAACAAAAATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1858882_1859369_2:0:0_1:0:0_ac/1
+TTTTTAACATGGCACCAGGAATCCCAGGCTCACAGGGGCCAGGAAAGCATTTCCACACAAAAAGCCCAACAGTGAGAATATATGCTGAGGAACTGGAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_45857_46260_1:0:0_0:0:0_29cae/1
+GTTATTTATATGGAAACAAACATTAATATTAATGTTTTTATTGTACAGTGGCTCACTGCAAAGAGAAGGAAAGGGACCCACCTTTATGATACTTTCTTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1441578_1441983_0:0:0_2:0:0_29849/1
+GTGATTAAAAGAGATGAACATTTTCTTTATTTTGCCTCCCCGCCATTTATTATTTATTGTTTGAGACCACATGGTTTTTTTTTGAGGCGGGCGTTGGATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_250422_250818_0:0:0_2:0:0_125e/1
+AAAGACACTACCTCAGTAGCCAGGTACGTTTCCCTTTTGTCTTAGCTATACTTTGTAACCCTTGGAAGAAGTTTATAAGCTCGAGGTAATCCCAGCTCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1614135_1614494_0:0:0_1:0:0_1660d/2
+GGCCCCATCACCATGCCTATCAGTACCTTTTCTCTCAGGTTAAATCCAGGGAAGGCCTTTTTCATTCTGAGATGCTGGGCGGGGAGTTTCACCATGGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_112208_112677_0:0:0_1:0:0_1e662/1
+CACTGTGACAGACATAGTTGAGCCGAAGAAAAGAACATGGACATATGGCATGGTGGGGCGGTATCTGTCCTTCTAACTTTTACATCTAAAAACGTGCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_429639_430070_1:0:0_0:0:0_62f2/2
+TGGCCCCCATGCACTGTAAATATTTTTCACTGCAGTTTGTTTAACTTGGGGACCTACAGTGGAACAAAACACCTGAGTGACAAAGTTTTTTGATATTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_964427_964862_1:0:0_0:0:0_7ed0/1
+ATAGAAAATATTTTATAAATTATGACTATAGCCTGTAAGTCTACGGCCCCTAGGAGACAGGGCAATGTGTGTGGGTTTCAGTCAAGACTAATTGGGATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2352208_2352623_1:0:0_1:0:0_12ea9/2
+AGGAACATTCCATTATATTGAAATCTTGGTTTCACCAAAAAAAAAGAAAGGTGAAAGTCACAGAAACTTAATCACAAGAACAAAGCTTGTGAAGAGGTTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1345809_1346272_0:0:0_1:0:0_28199/1
+CCGAGGCTCCAAGTAAACCCTGTTCGTATCTCAGAGCTGTAATCGAAGAGAAGCTTCATAGTTTACATAGAGCAAACAAAAAAAAAACTCCCGGTGACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_290653_291086_1:0:0_0:0:0_323cf/1
+TTACAGCTTTTTTGGATTATAGGTAAGGTAATTGGGGATGGATTCCAGCCTTTCTGTCTGACAAAGATTGGGCTTGTCTCGAAGTGGGTGTGACCTTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2241312_2241719_0:0:0_2:0:0_2d9d3/2
+CTGTGTAGAAATCTCAAAGTGGGCAACACTTCATATATTTGTTAACGTCGCAGACAGCATAAACAACAAGAGTTGTAGAGACGGAGTAAGATTTTCTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1617577_1618070_1:0:0_1:0:0_5143d/2
+GTGCTCTCTCACAGAGAATATTGATGATCTTCTCACACTGGGCTGGGAATGGCCCAGATTTAAAATAATTCAACCTAAACTGACATAGTTCTTTGTAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2331261_2331747_1:0:0_0:0:0_36b5e/2
+CGTCTCTGGCTGCTGAGGGGTGGCATAGAGCAAATCCCACCACGTGCAGTAGAGTAGGGTGTGCGCACCCAGCAAATCAAAATTCTATACCATAGTTGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1689283_1689709_1:0:0_1:0:0_34527/1
+TAGACTTAAAGAGTGCCCACTAAGCATTTATTGGACTCCCTAAATTTCTTTTCCTTTGGAGGGGTAGAAAATAAAATCTGCCAAATGCATTCCAATGGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2210425_2210886_0:0:0_2:0:0_17eb9/1
+AAGCCACGCCAGCCTGTGCAGTGTGTGTGCACATCATTAAATCACACTCCCTCATTGGAATCACCAGAATCAATAAATCAATACTTATAAAAAAAGTGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1078152_1078670_0:0:0_1:0:0_584be/2
+TCCCACTAGCTTGTATATTTATTTATAAAACGTTTAAACCACCACGCCCAAGCAGTAGAGTTTCTTATTTTAGGTCAGGAGTTGGTGTGTGAGCCATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1488018_1488458_1:0:0_1:0:0_1942d/1
+AACCTCCGCCTCAGCCAAAGCACACACAAGGACTGAAAAGAAACAATTTTCAAAGTTTATTTATTATGCTTTTTCATGTCTATGTTGGAGTCAGGGATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_342638_343165_1:0:0_0:0:0_36735/2
+TAGAGTTCAGGTGGATCACCTGGCTGGCCTGGCCTGCCCAGCTTCTTTCTTTACTTCTAAGACATGGGAGTGGGCACAAGCTGAAATAGTGGCCTGACCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_879160_879557_0:0:0_1:0:0_13022/2
+GCCAGGCCTCAGGGCTCCAGGTGAAGGTCTGTGGAAATGAACAGATTCTAGATGTCCCAGAGCTGGAGATCACTGAAATCAAAGTGTATATGGTTTTAGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_107358_107834_0:0:0_2:0:0_17951/2
+GGAAAACTTTAAAGTGCTGTTATAGTTGCAGTCTTGTTGCAGGCGCCCTTCCAGAACGACAAGTCAATGTAGTCACAGTTGAACCCTATACCCTCAGGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_885234_885719_1:0:0_0:0:0_241e1/1
+AGTTTGGATTTACTTCGCATGCTATGAATATTCTGTCACCTAGAGAACAAACCTAACTAATTACCAGGAGCTCAGGCCCCAGGATCAACATCAGCTAAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1263254_1263650_0:0:0_2:0:0_5b7b/2
+CTCCTGGAAAGGTAGTGTGATGGAAGGTCTAGAGCACCAGAACACTGGGTAATATTGCTGTATCAGTATTTTCCTCACACTTTTGGAGGTTAAACTATTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1446080_1446606_1:0:0_1:0:0_41ee2/2
+AAACTGACGAAGTCAGGGGTGGAAACGTTTCAACAATTCTAACTCTGTTTGCTCACTTTTTAATATGTATTCTTCTGGAAGAGACACTCTATAAACATGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_464792_465208_1:0:0_1:0:0_16e8e/1
+AAAGCTTTCACCATTTTCAGTAAATGAAGAGTTCCAAAACAGGTTTCCAAAACAGATTGCTCTGCTGCTGAAGCTAGGGTTTTAGCTTTCTGCCCTGGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2231334_2231741_1:0:0_0:0:0_158d4/1
+GGGATTCCAGCATAAAAGAAGAAGTCCCCTGTTACTATTCATGAAGAGTGCAACAGCTTTTTGTTGTCAGTGGGAACAAATCTCATGTTGTCTGTGTCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_808101_808587_1:0:0_0:0:0_1842e/1
+GGACCAGCAGAGACTGCTGCTCCATCTTGCCGGCCAGGGGCTTGAAAAATATACATCTAAACACTCTATATCTTCCCAGTAGATTCCCTTTGATGAGCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_568930_569444_1:0:0_0:0:0_54bab/2
+ATACTCCAGAGCCGCCCAGCAAACCTGATGGGGTTTGGCAGATCTCCATGCGACCCAATATCCTTTCTCAGAAGTGATTCCTAGCACAGAGTAATCAATC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2200077_2200494_0:0:0_1:0:0_361ee/1
+GCCAGAAATTCATTGCTTTCTTATTCCTATGATGTTAAGGCCAGCACTGTGCTGAAATAAGCTTCCCTCTGGATTTTAGTTTATCAGAGCCATCATCTAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2137691_2138111_1:0:0_1:0:0_1fa28/2
+TGAGTTCCTGCATATAGTGCAGTTGTCACCCTCTTCATTGGGGTGGAGTAAGAAACTGATGCAAAGTCAAAGGTAATGAAGACAGAAAAATTAGTTGCCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1069914_1070344_1:0:0_0:0:0_18538/2
+ACCAAGGCACTGCTTTAAGCTCTCATATTCAGTCTCGCAGCTACTCCCAGGTATAGTATAGCTAGAGGCTGGGACTACAAATTTATAATAATCATATAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_592694_593057_2:0:0_1:0:0_33cf8/1
+TTCCAAAAAAAAAAAATAATAAATAGCTTGGCGCCCTCACCCGGGCGAATTACTTACGCTATTGGTATATTTAGAACCAAGTTCTTAAATGATAGCACCG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_74105_74495_1:0:0_2:0:0_2cd63/1
+TTACATATGTCACATCACCAAAAGAAACATTATCGCTGTCCTTTTTTAGATTTGTTCTAAGCTGAATTTCTTCCTTCACATTGTTTTTTTTCCAGGGCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1211268_1211747_0:0:0_1:0:0_134ae/1
+TACCAGTCAAAAAAATATCTTTCATTTTAAAATTAATCCTCAGGCATTGCCATCGAGTCCCTCCCCCACAGAACACTAGAGATCCTCTTGAGATACTAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1585984_1586383_1:0:0_1:0:0_5564/1
+CTCCATCTTTACAAGCCACTTCATTCCACATTGAACCCTTAGAATAAAAGCAGTGGAATCACTTCATGACAGAAAGGTACTGTAGTATATGGTCAATTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2079683_2080063_1:0:0_0:0:0_a6c9/2
+TGTTTTCAGCAAAAAGATAAACTTCCCACCTGGGTATCTACAAAAAAAAATTAAAACAGATCAAGTAAAGAGGAGAGGTAGGCCATTGGTTGAATGGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_564982_565536_2:0:0_0:0:0_5a5ac/2
+ATTGAGACAATAACGCTCCCCATTACTTTCTTCTTTCAATTGTTTCTTCCACAGCTTCAGTGAGACACCCACCTTCAATTTGAGACCAAACAGACGAATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_62796_63167_0:0:0_1:0:0_5148b/2
+TATTATCTATTATAGGATGTTGTAGAAAACTATAAGGTGGGGTCTCAAATGCTTTAACACTTCTTGCTTTTTGTATTGCTCATGCCAAAACACTCTGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1110768_1111201_1:0:0_1:0:0_45a86/2
+ACTGGTATATACATTGGGTGCACGATGATCTTAAAAACTCTATTCAATCATGCAAAGCTGTTTTTAAATGTAGGACCTTTCTATAGTTAAATTAGAACGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_864919_865327_0:0:0_1:0:0_ae0d/1
+AGGGTTGAACCTCCCCTTAAATCCCAAAAATATCTGTTGCAGTATCTCCACTGTATATCTACAGAGTCATGTTACTATATATATATATATACGTATATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1859405_1859802_2:0:0_0:0:0_4384b/1
+TTTATCATTACTTCTCCACACGAACAGTATTATGTCAGACCCTTCTGAACACATTACAGGGCATTTTGCTGATGAATTAAAGTCCTATGCATCTTCAGGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2391318_2391742_1:0:0_1:0:0_4a33b/1
+CATAATGGCCGGAATGATATGATATATGAAACTGTTTTGATTATTTCATAAGGTGCTTACTATCTCTTACCCTAATTACATGGGGAATGCTGTAACAACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1023082_1023511_2:0:0_2:0:0_266b9/1
+CATGCGTGTGCTGGTTTCTTGCAGCCTGAAGACAGCCCAGCAGGAGTGTGTCTTGGGCCTGGCACTTTGTAAACAGGATAAGGAACTGATTCTATTTAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_329397_329814_1:0:0_2:0:0_28f/1
+AAGTGAGCCGGAGACTTGGTTTTGCCAAAGTTGTGGGAGGAAAGGTTCCCTCCCAGGACAAATATGTAACTGCATCACGAGGTCTTACCCTGCTCAAAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_340314_340776_1:0:0_2:0:0_1f671/1
+TATTATATTGTTGTAATGATTTCAGGTATTCCTGAGTTGATATAGGAGGGTGGAGATGCTGTAGATGCAGCAGAGTAAGAAGAAACTAACTGATAGGACT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1702563_1703067_1:0:0_0:0:0_91b7/2
+GCCTGTTAGTCTTTGCATCTGTTAAGGCAAAATGATGCTGTCTATGAAGACTACTGTAATGGGTATATGTAACTTTTTCCTTGAATGAGAAGAAACTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_435685_436146_0:0:0_1:0:0_4cb2f/2
+GGAGAAACAGAAATATTTATTCCATTTACAGCAAATAACGCTTATTATGGTATTTTTATGACACATTTGGAGCCACCCACACTGCACATATATTTTCCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1652696_1653177_1:0:0_1:0:0_23603/2
+GCTGGGACATTTTTTTCCATCAGTGAGGTGGAAAGACTAAAAAAAAATTAGACCCCTTGTTATCAGACTGGCTTCTGCCTGGAGATTTCAGCTTTATCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2454383_2454933_0:0:0_2:0:0_41d6/2
+ATAGGTCTGGGTCTTTATAGATGTCTTTATTGCTTATTTGCCGAGAGGGTTAATTTTGATGCCTGGCAACACTGTATTTTTAATTTTGTATGTTTCTTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2378016_2378467_0:0:0_1:0:0_ba5a/2
+TTAATATTAGGTGGGAAACAAAGTTATTGGGCAAGATATATGATCACAGCTCATTTTTTTTTTTTTTGAGGTGGCACATCTTTATGTCTGGTCTTCCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1348377_1348853_0:0:0_1:0:0_ab3c/1
+GGTTTGAGGACCTCTGGTCTCATGGTAGAAGTGTAGGGGGTTTTATTTCATGTCTTGAGCTCTGTGCCCTGTCTTCCTTACCTAGTTTGGATAGCGATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1462518_1462983_1:0:0_1:0:0_26888/1
+ACTTATTATACCCAAACAAACAGATAAAAATAAAAGAAAAACAAACCTTATTAGAGGTATTTGATTGCAACAGATCACTTTTATACAGTGTTTTTGGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1502077_1502561_0:0:0_2:0:0_18f1f/1
+GGACTAAACTCAACGTAATCCCAGAGGTTCCTGTCCCGGAGGAGGACATGGCCATTTGTCAGTATGGGAATCTACCAACACAATTTTGAGTGTCGAGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1423245_1423595_1:0:0_0:0:0_bac8/1
+ATTAAATTCACCAGCCGGGTTCCACCTTCCTGGGACTAAGCTTTATTTTTCTCTCCAGCCTGGACTGAGGCGGAGATGTAAATAACATTTTCGCTGCTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_458509_458991_2:0:0_0:0:0_5b54b/2
+ACCACCATCATGTGCGCAGAGGAAAGCAGGAGGGGTTATTTATAGCTGGAGTGCCCTATTAACTCTTCTAAACCTCCAATAGGTCCCCAAGCCCCTGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1586413_1586859_0:0:0_1:0:0_a207/1
+ATCACTGCCTACAGCTGCACTAACGAAATATCAGATTTTTTTGAGAATGGGGTGGGTTCACCCAAGCACTATAAGGCATAGTTTTTTTGCATCCAGCTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1836529_1836957_1:0:0_0:0:0_30ebc/1
+TTTTATTTTCTACTCTAATTTTTGAAATGATAATATGTTAATGAGTTGAAACGGGGTTCATCCTCCAAAGACAACATAATTACCAATTTCTGTAGTTATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1721682_1722090_1:0:0_1:0:0_25d05/1
+CTTCTAGAGGTTATTACTGAACAAGACGGAGTTCTATTATTTCAATGGATCCATGTAGCCTGCTCCCCCTGGAATTTATAAAAAAATAAATCCAGTTATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_874381_874812_2:0:0_1:0:0_110b3/1
+TTGCTCAAGTTGGCAGAAGAGAATAGATCCACCAGTTCCATTGTCCCCTCTGAAATGAGTAGTTAAACCAGGTGGGCAGCAGCTTCCAATCTCAAATGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2480183_2480598_0:0:0_1:0:0_38e36/2
+AGAAATTAAGTGAAGCTATGTGCCTCAATACTGTTTCCTTTAGACCCAACTCAGCAACCCATGCCTTGAAGATATGCAAAAAGATGAAGTCTTGTGTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_989022_989353_1:0:0_1:0:0_34b05/2
+AGCAATTTCTTTTTTGTGTGTGCCTGACCACATCGCCCTCTCTCTAAAGTGGATATGTTTGAACTGAAGATATTTTTAGTAGTTGGATCCCGCCGGAGCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_471502_472007_1:0:0_2:0:0_47a77/2
+AGTCATTAAGATCGCCAAAGATGAAGAAAACGTTATTCCCAGTCCTTACAGCCACTATTGCATAATTTCCTGGGTTATCATAAAATTTGATGTTGTGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_224255_224677_1:0:0_2:0:0_47341/2
+CAGATCCTTATTCAAGTCCCCGTAAAAGTCAAGAAGTGCTCTCATTCTTTTAGTGCAGATGCTCTAGGGAACGGTGAAAGCTAGTCACTCATGTAAAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_906351_906838_1:0:0_0:0:0_c57b/2
+GTGTCTAGTCTCCACCTCCTTACAGTGAACGCTAACAAACCTGGGCTTAGCAGTTACTCTAAAAACTAGAAATTCCCATATCTTAATCTTGGTAGAGTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_900755_901177_0:0:0_2:0:0_14e7f/1
+AATGAATCAATGCCAATATGTTGCCTGTCATTGCACCAGATGCCACCTGTAAGTGCTTCTGTCTTTGTAGTGTGTGCGTTGCAGTGTACAAATGCAATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2250463_2250862_1:0:0_0:0:0_5675f/1
+AGATTCTAAGTGCTGATAAGTTGACATTATTATTCATATATATTGTGGAGTGGGTCTAGGTATATATTTTTTTATCTTCTAGACATTTCTTTAAACTGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_985682_986188_1:0:0_1:0:0_279a/2
+CCTGCCTCTGGAACCACAAACACATGGGTCAGACAGAAAAGACCAAGTCCATTCCATTTATTGTTGTACATAAATATGAAAGACACAGAGGGAAGTGGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1445304_1445776_0:0:0_1:0:0_1aa19/2
+GGAGGAGTTTATTCCTTTTCAAAGTGTCTAAACAGCAGTTTGTTAGAAGTCTACTTCTAGGGTGCATCTCTTGTGACAGAAGAGGAAGCACTTTGGGTGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1385014_1385524_1:0:0_0:0:0_37c8a/2
+GCTCTGTCAGAAACAAATGCATTGGAACTCCTCCTGACCTTATAAGTAAACATAAGCTGAGGCCCTGGATTTCTTTGTAGTTGTTATTTATATATATAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2115089_2115507_1:0:0_1:0:0_db68/2
+ATCACATGTACCCATTTTGAAACTTCCCGGGAGCCCCGCCAGCAGCGTACACAACCCGCCTCACTCAAAAATAATCTACTAATCATCAAAACTCTCTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2371658_2371991_2:0:0_1:0:0_6653/1
+TGCTGATGTGTTTGGGAGCCAGGGTTATGATCTCGAACCCGGGGTGCTGACTATAAGAGATGTGGTTGTGTATAAACATTTTTCTGTAATCCAGTAGTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2253648_2254127_1:0:0_0:0:0_39c89/2
+ATCTTAGGAAGTTCTGAGCAGGGTTTTTCATGACAACTACGTCCCAGCCACCACACGTAATTTCCATGGATGAGAGAGAGTGAAAAAAAAAAAGCTGAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2106773_2107275_1:0:0_0:0:0_35c71/2
+AGAAAGAAATAAGGTTTGTTCTCACACAGGAATATGTGGGTTGTCTGGATACTATATGTGTTCTCAGAACCCAGTTCACACTTATGTCATCCCAGTACAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1864796_1865328_1:0:0_1:0:0_1ead/1
+AGGCTCTTAAAAATTACATTTCCAAGACATTCTAATTGAATGGACTTTTTGTGAGAAGTAGTTGGGAGGCACTGTAATCAGTGGGCCTGCCCTGAACTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_380482_381014_1:0:0_1:0:0_48c2f/1
+ATTGTATATGACTCAGAAAATTAGCTGAAATTACCTTAGAAAAAAATCACCTTCTGCCCAGAGTGGGCACCCAAATGGATGATCCTTCAATCATCTATGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_87549_88003_2:0:0_0:0:0_1a61b/1
+AATTACTGCAGCCGACACCCATTCGGAGCACCTGAAAGTTGCGCTGGCTCACTAGCATTATTTTGTTTATAGGACTTCATCCTTTGAATGTACACAGCTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2196395_2196891_2:0:0_1:0:0_103a7/1
+AGTACACTTCCATCAGGAGTGACTACAAAGGTTAGCTATAACTACCGTTGAGCGGGGACAGAACATCTCACTTACATTTGTGCTGAGGTCATCAATGATG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1373406_1373815_0:0:0_1:0:0_93ea/1
+CTGCCTCACTGCAATCGAAAAGAAGCATGCTATTACTACCGTTGCACTGGGCAACCCAGGAAACAGAGAAAAAAAAAAAAAAAAAAAAATAAAAATTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_542509_543084_2:0:0_2:0:0_45c2/2
+TGCAAAACTTCATTCTCGTGTGTAGAGAACACGAAGCGACAGTAAACATTATTTTGGGATTAAAAGGATATTAACAACTACAGCCTTATAACACCGTTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1234506_1234990_2:0:0_1:0:0_4d7f4/2
+ATAAGCAGGTCAGGAGGAGAAGAAGCCCCAGTGGCACGCGCGCAGGTAATAAACTTCTCCCACCTCACCCCAGGTATTAATAAAAGTAATACTGATTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1405731_1406157_1:0:0_0:0:0_4d40b/2
+CACACCCTGGCCAACCAATCTGTTTCATTTTCATGTCCAGCCCATATTTGTTAGCCTTGGCCAGGGTCTCCCTGATTCCATTAAAAATATTTGTTTTTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1243614_1244082_2:0:0_0:0:0_245b0/2
+TATAAGTAAGATTAGGAAGTTCTAAGAATGAAACGTAATAGAAGTTTTTTACAATACAAACCCATTTGAGAAATTTCTTCTCTACAAGATCGGCTCACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2158019_2158417_2:0:0_1:0:0_1065e/2
+CTTAAATACTCATTGAAACACAAAACCCTAAGACCTCGTCAACATCATAGCGTAGCTGTGCTGGCGTTTTAGCTGTACTTTCTAACAGAACTTCATTTTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_626249_626668_2:0:0_0:0:0_47524/2
+AAAACTTTTGCTGCTCTCTTGGCCAACAATGAATAGGAGATTGTTCAAGAAGCACCAAATGGTTCTCCAAAAAAAAGAGGGAGTACTTCTTATCTTCAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_466558_467005_1:0:0_2:0:0_4ab80/2
+TTTCTTTTTCTAGTCCCGTAGGAGTGTTTCAACTTAGATTGCAAATGCATTTACATCTGGAAGTCTGCAAAAAGTAGCAGTAACAGAAAATGCACTCCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_697138_697495_2:0:0_0:0:0_15c94/1
+GGTGGATCTTCCTACCCCAAGTCTGTTAATTGGTTCTACCATTTATAAGATGTGTAATATACAGGCGCCTCGGCCTCAGTTTAAATGCTCATGATTGCCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1537351_1537783_1:0:0_0:0:0_446e8/1
+TCCCCTTTTTATTCATTTTGAGTTGAAGGAAAACAGGAATTAGGTTACTTATTCACTGCAAAGCCAGACCATCTCTATCTTCTCCCTGTGATCTCAGAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_503605_504048_1:0:0_0:0:0_7004/2
+ACCACACACACTCTGCTATGTTAACTTCTCTACAAAATTAAAAGTGAAGGGTTTTTGCGTGAGCCTCTTCTGAGGATGCATCATGGACGCCGACATGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_851948_852377_1:0:0_0:0:0_34c84/2
+AATTGCTTTTTTTATTGAATGCAAGGAGAGAGACGGGGTTTCTTTGTCTTTGAGGTTGAATCTGGTAAACCCTATAAAATGGAGGAATAAATTGAGGACA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1773494_1773912_2:0:0_2:0:0_11ec0/2
+AACTTTAAGAAAAAGTACCCTGGGAGGCATGGCCCTGGATATTTAAAACATGTTGAATACGGCAGGTGCCATGATATGGACCTGCCTAGACCCCTCCCTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2204275_2204807_0:0:0_3:0:0_5f25/1
+TATGTAAGTTTATTGAAACATCCTGCCTGACTCAGAAGCAGGCTGGATCCAATTTCTGTCTATCATTAAATACAAAGCAAATTTATGCAGCAAAGAGGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2304990_2305446_1:0:0_1:0:0_7716/1
+TGGCTATTATTAACTGTTTTGACACATTTCTATGGTTTGTTCACTGGGATGGCTTGCCTACTTGAACTACAGTGGTTATTATTTGATAAAGTTTTTAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_535388_535821_1:0:0_0:0:0_3e3a5/2
+TCTGCTTAGACCATTGTGGTGTGGCAGTGGCTCTGCCTGACCTGCTTACTAAGGGTGCAGGCGTACGAGTTGGAAGGATGACAGAGTAGAGCTACTTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1480185_1480615_1:0:0_1:0:0_baf1/1
+CATACCTCCCGGTCCCCTAAATGGCGGTGTCAGTTTTGCCACCTTGAGCCCTTTTTAACTATTACCAATCCATCTAACTGTAATTTGGGTAAGCAGGATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1927851_1928347_1:0:0_1:0:0_13904/2
+GCTGAGGCACCTGAGTCAAAGGGACCGGACAGAGGATACCTTTTCAGTCAGGAGGAGTATTTAAGCCATCACCCCTGCTGCACCTGGAAACAGCACAAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2058874_2059343_0:0:0_1:0:0_4c064/1
+CAGATGGCTTATGTATTTTTTCGATTTTATTGCCTGGTCACCTCTAATCTTTTTACCCTAATATAGAGTATCTATAGTTAAATAATGTTTTCAAAATTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_808808_809219_2:0:0_0:0:0_3dd3a/2
+TGCTGATTGACTATAAGAACTTGACTGCAGATAGGTTAAATTTTGGACTCAGGGGTTACTTTGATTGAAGTGCACTTAACTAATTAGAACAAAAGGTACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2405329_2405787_0:0:0_1:0:0_48159/2
+ATCCTCGCCTGTAATACCTGGAGGGCTAAATATTTCCAGTGGTTCTCTGCACTTTGGCTTGAACCGTTTCTACTGAATTCAGAAATTGCCTTCCTCCAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1810568_1811063_1:0:0_0:0:0_42dfd/1
+TGACATTTTGTGCAGTTCAGCAAATGGTAGGATAAAATTGGGTACCCCAGATGAGGAATTTCAACCTTGCCATTTTTATAAATATTGTTAAAATATTTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2176141_2176586_1:0:0_1:0:0_1cb7e/1
+GATTCTATGAGAGGAAAAACAGAGATCTGTGGTCAAAACAAATCCCAGGCAGGAGTTTTGAACAGAGAAAAGCCATAATAGAGCCTGGCCCATCTGTTCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1655860_1656303_2:0:0_1:0:0_30062/1
+AAAAGGGATGTCCCCACCTTCCCAAAGATATGCCGAATAATTAGGTTTTTCTACCTTGAACCTGAGGCCTGCGGCGATTGGCAGTGGCACCCACAGGGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1025306_1025733_2:0:0_0:0:0_5b642/2
+AAGACTCTGAGCCACCTGACATCGATCTTATTTATAGTATTTTTTTATAGTCCCAGGGGCCCCGTCTGACAATCCTTGTAGAGAATTCTCCTATCTATAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1409802_1410347_0:0:0_1:0:0_33df9/2
+TCTGATTCCCTACTCGGCCTCACCATTGCGTCCGGTGAAGGAGGGCAGAGTGTTTCCTTCTTTATCCCTTTAGGATTTGCCCTCCCCGGAAAGCAAAGGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2352289_2352792_2:0:0_2:0:0_2af5a/1
+TTTTATTCTTAGTCTTAATTGTCAGCTTCTTTTTTAGCTCTGCCAATGACCCTCAGTAGCTTACCTATGGGAATGCAGGTTGGGCACACATAAGTTTAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_865287_865691_0:0:0_1:0:0_4d4ac/2
+CACCAATAGTATACCAAGTAATCCCAGCTAAATGAGGACTACAGCTGTTCTTGTTGCCTTCGCCGTCTCTCACCTGCACAGGTGCCACCCCACCAAAGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_587217_587659_2:0:0_1:0:0_3d816/2
+ATAGTTTAATATAGCACTATAAACAACATTTTGGTGCACCATCTCAAAAGTCCAGTGCGGGTGTCCGGGTGTACCCCCACAGAATGGAACTATCAGACTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1648315_1648785_1:0:0_0:0:0_d604/1
+GATGCGGTGAGGCGGGTCAGGAGCTCTGCTGCTGTAATTAAGACAAAATGTCAATATTTTTACCTCAATGCAGGTAAGACAGAATCTTCCAAAAAACATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1310862_1311242_1:0:0_0:0:0_18c51/2
+CCACAGCTGCTGGTTTATAGTGTGTGTGTGCTACAATTCTTGAACGGGAGTTTGTGGTTGGGCAACAAGATTATATTCTGTTTTCTCTAACTACAGAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1865007_1865424_1:0:0_1:0:0_14d67/2
+TCTATTTATGTGTATGACCATTTCTTTTCTACTAAGTGATTGAAGAGTGGGGAAAGAGGGGCTGACCACCAAGGACCCCGTTTCAGTTAAAGTTCATCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1599350_1599723_0:0:0_1:0:0_3888a/1
+ACATTTTAGATCATGTGTCCCTTAGAAAGAACTTGGCATAATTGTATTTCTTTCTCTCAAACAAGAACAGTATTAGAACATCAGACCAGGTTGTGGCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_163084_163551_1:0:0_0:0:0_3597f/2
+CCTATCACTGGGTAACCCCAGCAATGGTTACACCAGAGGAGAATTCATAAAAGTAAATCTCAAAAATTAACAAGCAACCTGGAGTGCAAAAAGAAATTAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_124243_124768_1:0:0_1:0:0_2fbab/2
+AGATGAGTAGCAGAACTATAGGTCTACATTATTATTCAGTACAATTAATAATAGAAAATGAGTTATTTTTACGCTGGGATTTGTATATTGATGCAGTTCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_38956_39473_2:0:0_2:0:0_4575c/2
+CCAAATACCAAGGTGTGAAATCTACTATTCTGAAGCACTTTACCCAATTAAATAACGAGCTCATCATGCTTTGCAGAAAAGGTAGCTGGGGTAATGAGTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_106130_106576_1:0:0_1:0:0_780e/1
+CACTCTGTGTCAGTGTCGTGTAATTTTATAACAAAAAAAACTCCTGCACAGGCTCCTTCTTATTCTTCTTTTTTTTAACCACCTACCTACTAACTTCCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_569064_569467_0:0:0_1:0:0_4fb07/2
+TTAAAACAAAAATTGGTGCCCTTTCTCACCTCTCTTTGAGACTGTCCCAGAGACAGTTTCCTTATCCCTTACTATTATTCAATGTAACCTTCTTTTCTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1021207_1021603_0:0:0_1:0:0_51b38/1
+AGCAGATCAGTAGGCTTGATGAAGACTTCCTGGAAAAGTCTAAAGTATTATGGCAGCTGGGTGACAGAGGACCTCCCAACTGTAATCATGTCTTACCCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2367899_2368224_2:0:0_0:0:0_2c903/1
+CTTTACCTATTACAGCAAGAGCTCTAGAAGGCCAAATGCTTTTATAAGTGTGCAGGTTGGTGGCTTAAGGAAAAGAATGTTTACAAAAACCTCCCACAGT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1626614_1626986_1:0:0_1:0:0_102be/1
+GTGGAAGAAAAGGCCACCACCCCACCTGGCTATAACAATTAACCTTTTGTCTCTACGAACAGCAAAGATAAATAAGGTTGCATTTATTTCCACAACCAAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1097917_1098430_1:0:0_2:0:0_2255b/2
+TATTGGTGAAAAGGGATCTCACTGGGCTTACTATCCAAGTTATCACAGCAAGCTCCAAAGCCTTAGTCAGGAAAGGGCAGGAGATGCGGCCGTGCGTCAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1853638_1854075_1:0:0_0:0:0_5ada2/1
+ACATGCACATACAGCATAGGGAGCAGCACTTTTTAGAATGCTCAATTATCTAAAAGTAGAGACCTCCAGGGTTGAATGGAAGATTCTTCTGAGTGAATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2223063_2223500_1:0:0_0:0:0_95e3/1
+ACTTCTCTCTCAAAATCAGAAAATCCTAAGTTGATGAAACATGCGCTGGCTCTCATTCAGACCTGGGCTCGTTTTGAATATCATTTAGCTTTAGGGAGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_164283_164731_0:0:0_1:0:0_11baf/1
+TAGGAAGAAGTTCATTCCTTCTTTCACCATGGAAGCAAAGGTTTGGTTCGGGGCAGAGGGCCTCCCTGTTTACAGGCAGGACAGTGAGACTGGGATATTG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_248261_248633_1:0:0_1:0:0_23859/1
+GAATCAATTAGACACTTGAACTTTGGGTTTTCCAGCAAACCCACAAACCTTCCAAAATTAGCAGCTCCTCTGTCACATAGTTTTGCCTGACCTGAGTCTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2468744_2469159_1:0:0_1:0:0_3033a/1
+TGAATTATGGAATGAATCAAAAAGTACAGCAGCTTTCTTTACTTTTTCCTCTTTTTATTCAACAATATAACTCTGATATTATTTCCTTCTCAGTTCACCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_70651_71102_0:0:0_1:0:0_22eab/1
+GCCAGGAGCTTAGTTAAACAACCTCTAGTCTGCTGCAAATCAACTTACCATTATTTATACAGCTTGCCATGATGAGAATTCCCTGGCAATATTTTGTGTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1154476_1154965_1:0:0_1:0:0_2cf63/1
+TATCCAAGTAGCTGAGGATTGTCCAGTTCTTGTCGGAGTATAGTAATGGTTGTTTCAGCTCTTTTGTATTATCATGTAGTCTGTGGAGGCACTATGAGCC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_693481_693922_0:0:0_1:0:0_27b6f/2
+TAAAATTATTCGGCTGATACCACAGAGACAGGTATTACAACTCATCCTCCTGATGAACCACAAGGAATTTTTGTTTTCCTGCATAAGATATGATTTTATA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1583289_1583701_1:0:0_0:0:0_2cef3/2
+ACCATCCTTTAACAAGGCAGGAGGGTGCCTCAACTCCGTGCGGGAGGGAGCAGTGGCAGTCACAGGACAATGTGAGTAACCTTCCTGTTTGTTTTCTTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1291093_1291555_1:0:0_0:0:0_2ef54/1
+CTTTATGGCGACGTCAACCTGGTGCCTCAGGAGCAGCTTTCAAAAATAGGAAGACACAGATCCTTAAAATATGGAGAGAGAAGAGGTTGGCCAGTTATTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1241874_1242334_1:0:0_1:0:0_2b9a9/2
+CTTGCAGAGCTTCAGCGGCGCCGGTGTACACTTTGGCTTTTGTTCTATCTTTTCTAGGAAGCCCATGGATGTTGTAAGGTATATATTCACACCCTGAGTC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2131320_2131797_0:0:0_2:0:0_29e92/1
+TTACAGATGAACTACCCCAACAGATAATCCACACCCTATTGTGATACTCCAGCACTTGCTCACTTCTGCTTCTTGGTAGATTCGCATGCAGGAGCTCTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1477564_1478074_2:0:0_0:0:0_26b1/1
+AGAAATAATTTACCTAGGACATGTCTGCTCATGCATGAGATAGAAGGGACACCTGACCTTGATGCCTGTGCCATGATATATATAAAAAATTAAAAAGGGA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_870926_871400_1:0:0_1:0:0_4c482/1
+AGGTAAGCTAACATACAGGCAGGAACAACAGATAATTGTTAATTTCATGTTCAACCCATATCCTAGGACATTCTGAGAAACTCTTGTCGTAAAGGATGAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_265232_265661_0:0:0_2:0:0_22a60/1
+GATGTCCTGTTTTAAAGCTCACTGTGTTAGGTTTTCAACTGATGGCTATGGATCTTGTGACCCGCTCTTAAAAACTCAGCCTTTGAATGATGAGATGGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_659348_659925_0:0:0_3:0:0_44742/2
+AGTGCTATACCACTATGCAGGTATTGATAATAAGTTTTACAGATGGTTATTTTGATTGTCTGTCTCTCTGTTTCTACAGGCGGGCTCTCTATACAAACCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1010930_1011381_1:0:0_0:0:0_2cf81/1
+CAACTAAAAATGTTTTTTTAATGATTTTTTAGATCAAGCAACTGCATTCACTTTGTCCCCCTTGGTGGCAGACTCCAGGCATCACCTGCTGATGAATTTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_494895_495352_0:0:0_1:0:0_1a857/2
+ATCTCAGCAGGGAAATCCTTGATGTTGTTAGTCTGGGATCCTTTACTTCTGATAGAGCGTACGCAAGAGACTGTCATCTGCCATCCTTTTCAGTAATTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1570983_1571363_1:0:0_1:0:0_3d218/2
+GGGCCCTGCCGAAGAGGCCTTGCATATAGATGAAGACTGTGCTGGGGCTGTGTAAAAAGTATAAAGTGTTGCAGTAAGCAACTATTTGTTATGTTCATGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1594819_1595244_1:0:0_0:0:0_2539c/1
+AATGTTAGAGATTCCATCCTGCCTCCCGAACTCCTGACTTTGAGGTTGTATTTCTTCGACCTCAAGATTCCATTTTATTGCTAGAAAAGTACCCTGTCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_157504_157968_2:0:0_1:0:0_2d61/2
+CGTGCCCAGTGTGGTAGGTGTGAGTCCAGTCTCTTGAACCAGAGCAGTTTGTTATATGGTGTGGACATACACTTTAGTGGCTCTATAACTACAAAGATAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1594544_1594996_1:0:0_1:0:0_3a266/2
+AATATTACATAATAATTATTTATCAGCTGGGGCAGGGACAATATACAAATGTTATGATCCAAATGCTTCTGAATAAAGGGGGGTTTTAAACAGGGCGGGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_194905_195339_0:0:0_3:0:0_36c83/2
+TATATAATTTGCCATTTCCCACATTGAACATATTCAGGCTCCTGAGGGCCTGTAGATAATTAAGCGATGTGTATTTTATTTTTTTAGTTAAATAGGCCTA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2449081_2449526_2:0:0_1:0:0_e729/1
+TGACCTAGTTGCAATGTGGCAGGAAAGGTTTGTAATCCTTAAAAGTGTGGGGCGAGCACTGAGGTATGTCCACACTGGACATCCTCACATGTACCATCAA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_777001_777383_1:0:0_1:0:0_1ab68/2
+AGAAATTATACATTTAGAACATTCAGTTGTTAAGCCAGCATAATTCACTGAATGTGACATCAAAATAAAGCAGTTTCCAGTGGCCCAATAAGAGGTTACC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_909623_910009_0:0:0_3:0:0_92b0/2
+TTGTCCAAATTATTATCCTAAAAGTGGTACAAAGTCTCCTGTAAACAGGGGCTCTAGAAAGATGTTTGCTTTGTCTTGCTATGGCATTTTTGTTTTTTTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1793437_1793885_2:0:0_2:0:0_f48/1
+ACGTCCAAAGTCACACACAGTCTTGTGTTTCTGAAATTTCCATGAAAAATACTTTGGGAGAAATGGGCCTAAACTTGAAATGTATATGGAGAATCGCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2270614_2271102_1:0:0_2:0:0_36c81/1
+TCCCGCAGTTCCAGGAGACTGAATTAATTATCTGCAACTGCCACGGTGAAAGGATCTAGGATAAAGACAACAGTAGCATTGAGGTTTGATGAGAATGATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1429060_1429520_2:0:0_0:0:0_1eb11/1
+CTGCACTCCGGAAGCTGGAGGTGGAGGGCTGCACTCCAGCAAAACTACTTGAAGGCACAAAGACTCAGGTGTCAGCTAAGAAGAGATTTTCTCAAAATAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1693860_1694289_1:0:0_1:0:0_16edf/2
+CTGAAGGACCTATTCAATGCCGCTCCTAGAACAGACCTTAAGACCACCTTGAGTTCCAAATTTTTATACTTTTGGGGGTGGCTCAACGCCTGTCTGCTGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_129382_129773_1:0:0_1:0:0_2ae5a/2
+ATAGGTAGGGCTGTAAAAGGCATTTAAAATAACGTATGTATGAGTATGCGATCACTTATTATTTTACAATATTCATCCAGGATATTTAATGAAATTTACG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_358100_358584_1:0:0_0:0:0_2523e/2
+ATTTCTGAGTAGCACACACAAGATGTGACAGGGCCATAGTATATGAACCTCTGAAAAATTTCAACTGAAGTATTTCATTCAAGACCAAATTGCAGTGGCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1089892_1090349_0:0:0_1:0:0_1b8ae/2
+AAGTAGGCAGGAACCAATGAGATCAGAAAGTCTGTCTCAAGGGTTCAATATTTTAGCATACCAGCCAGGAGATGATTTCAAGTTCTCTCTAACTTAGCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1879035_1879519_0:0:0_1:0:0_1648e/2
+TGATGGGTGATCCAGTCCATTGCATAGAATATATAGCAGATCCCAGCCAAACCTGCTTCACATTTCTACCAAAAGGCATATACATTAAAATTTTAATAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2291075_2291506_1:0:0_1:0:0_59c62/2
+TAAACAATATCGATTTGAATTATGCAGATCACTTAGGTAATTTTTGCCTTGATTAAATACTTGTGTGCTGTGGCTATAGGGAATGGAGTCGTCTCAACAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1985021_1985496_1:0:0_2:0:0_1934f/2
+TGCCCCCTCTTGGGAAGCGGTGGGAAGACAGAGAGACGAGGGCCAAGCAGGATTAGCTCCTGATTAAGTAAATATTACCTTTGAGAGCTGCCCCAGAGTT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_508474_509017_0:0:0_3:0:0_5655a/1
+TGTTTCTTTCCAGGCTGGGTCATGAGATGGAACATTGTCTGTCTTAGCCGGGCTTGTATTTGCCCTGTGGATTTATTTCTAACCCTGTGAGGACTTACAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1587117_1587643_0:0:0_1:0:0_1c05e/2
+CCAAGGCCATCCTGTGTGTGTCCATTGCGCCACCACCAGTGAGCTATCTGTCTTCAAATCATTCCAGTCTCAAATGGTTACTACAAAATTCTCAGGCTGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2306413_2306928_1:0:0_1:0:0_131a/1
+CATAAAGCCAAAGTGCAACGTCTCAGATTTTTGACACAGAGTTGTCAAGCCAGTCATCTCTCATGAGCCCCGGGGGGAAATGTCTTAGACCAGTCTCTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1202422_1202893_0:0:0_1:0:0_fef9/2
+AATTGAATGATCTATAGACAAGTAGGACAGGGGTCATGTTGTATGATGGTCGGGGCGACAGAACCCCTTCCTCACCCTGTCTCCTGCTACTAATGGCCAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1658612_1659014_1:0:0_0:0:0_21d1d/2
+TGCCTGAGCTTAGCACTAATAAGGCTATACCCGAAAAAGTATCTCGCTCCAGATTTTATTCAGCCCCATTCGATTTAGACCAGATTTAGATGACCTTTCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1910468_1910916_1:0:0_1:0:0_53372/1
+TCAACTCAATCTCTTCACAGAGCAGTTCAGAGGAAAGCCCATGTGGCTTAAAAGTCACCATAGAAGAAGTATATTTAATTATCTCATGCTCTTAGGGAGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_846316_846782_1:0:0_1:0:0_3dc5b/2
+TACTCTTCACAATCAAAAGAGCTAGACATGACTGTGTCTGTATTGCAAGATTTCATATGAGTTTAAATTCTCCTAAAGCAAGAATAATATTCTAGATAAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2370809_2371204_1:0:0_2:0:0_d5af/1
+CCCTGTCACTGCCTCACAGGCGCCGTGCATGAGAATTTTCTGGGATTGGCCACCGCATAGTTTACATACCTTTCTTCCTCACCAAATAGGACTTGGGGAG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_696567_696973_1:0:0_0:0:0_18dc1/1
+AAGTTGGTGAAAACCCCTCACCTGTGTGCTCTCAGAGCAGATTACATTCCAATGTTAGGACCCAAATCAGCTTAGATAATAAATAAAATTCTACTATAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_489813_490315_1:0:0_1:0:0_4546/2
+CTCGTGGATCATTGTACTTTGTCCTCCCATAGTGTACAGATTGGGAGGCAGGCAAAGATTATGATTTTGGTGTGTAAGGCAGGATGAACTTGTTAATTAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1234911_1235396_1:0:0_1:0:0_17506/1
+ACAGGGGGGTGGACAAGAGAACGCAGGATAACCCTAGATGCTAAACTTTCCCTTCTATGATTTCTCCTACAAAATGTATCAGTTTCCAGACAACACAAAC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1852557_1852988_1:0:0_2:0:0_1c8f5/2
+GTATCTTCCATAGAAATAATAATAAGCTGAAGCAGAAGTGTTAGATATTACCTTTCCATATACCAAAATGACTTGAAATGTGTTCATCATCACGGCTCAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_610564_611039_1:0:0_1:0:0_2e270/2
+TTTTTGAGATTAAATTTCATACACATGAACAGAGCAGCTCATGTGTGTCCTCCTTCACAAGTCACTCTTTTTTCCCCACAGCCCCGTCTCAGGTAAGCGG
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_997524_997975_1:0:0_1:0:0_5b4ef/2
+CATGAAATGAGAAAATAACCCCGTCCCTAACATGAGACAGGGTCACGGCAGGGAGCCCTTAATTCCATCCCTACAGGCGTGAACGTCCATGGATTGTCCA
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2465370_2465761_1:0:0_1:0:0_30d05/2
+AGCGTTCCTTCAAACATGCTATTGCTTTCTGAATTTTTGCTTGACCTTATTTAGTGACTTGTGTCGAAAAAATCAGATGGGGCTGCACTCGAACATGGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_1793636_1794107_1:0:0_1:0:0_3f5d7/2
+TGGAATTCTTAGCAAGTGAAATGTTTAGGAAGTGCTTGAGTCTCAATAATCAAAGATGTTTAAACAGTGAGTGGCTGCCAGATTTAAGTATAGAGCAAGC
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_573140_573512_1:0:0_1:0:0_117c8/1
+GAATCTAGTCCTCCAAACAGTATATGTAACCAGGAATCTCAAAGAAAGGTGATTTATGTTGAAACAGCAGGGTGTGGCCCTGTATCACCATATGCCCATT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_162650_163129_1:0:0_0:0:0_15177/2
+CTGAGACTATTATCCAGCGGGACAGGGCCCTCAGTTACAAGATCACGCCATGCCTCCCATGTCCAAGAGCTTGGCATTCAAATTTATGGCTGCCCCAGAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_2376608_2377066_0:0:0_1:0:0_5a94f/2
+AACTTTTTCACCTCAACCAGAGACAGAGATATCAAAACACCACTTCCAACTGTAAGGGGAGACTATTATTCTCATTACCTGTCTTCAGCCTCCCCAATCT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+ at seq1_188443_188931_1:0:0_2:0:0_41895/2
+TGAAATATAGTCACTGGCAGGAAGGATTTCTGCTTACTCTGGTATCTCACTCTCTGTCGCCCAGGCTTTTCACTGCCCATGCATTCTAGAACAGTTAAAT
++
+8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
diff --git a/tests/test-data/bogus.fa b/tests/test-data/bogus.fa
new file mode 100644
index 0000000..915f756
--- /dev/null
+++ b/tests/test-data/bogus.fa
@@ -0,0 +1,2 @@
+>Specicus_bogusii
+GTACGGCTATTATCTGAGCTCAAGACTAATACGCGCTGGCCACTGGTA
diff --git a/tests/test_banding.py b/tests/test_banding.py
new file mode 100644
index 0000000..cbd163e
--- /dev/null
+++ b/tests/test_banding.py
@@ -0,0 +1,158 @@
+# This file is part of khmer, https://github.com/dib-lab/khmer/, and is
+# Copyright (C) 2017, The Regents of the University of California.
+#
+# 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 Michigan State 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 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 COPYRIGHT
+# HOLDER 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.
+#
+# Contact: khmer-project at idyll.org
+# pylint: disable=missing-docstring,protected-access,no-member,invalid-name
+from __future__ import print_function
+from __future__ import absolute_import, division
+
+import screed
+import khmer
+from . import khmer_tst_utils as utils
+import pytest
+
+
+ at pytest.mark.parametrize('ksize,memory,epsilon,numbands', [
+    (21, 5e6, 1, 2),
+    (21, 5e6, 1, 4),
+    (21, 5e6, 1, 8),
+    (21, 5e6, 1, 16),
+])
+def test_banding_in_memory(ksize, memory, epsilon, numbands):
+    """
+    Test accuracy of banding functionally.
+
+    Tests whether k-mer counts loaded into separate counttables in bands gives
+    reasonable behavior compared to k-mer counts computed in the normal
+    fashion.
+    """
+    infile = utils.get_test_data('banding-reads.fq')
+
+    ct_normal = khmer.Counttable(ksize, memory / 4, 4)
+    ct_normal.consume_seqfile(infile)
+
+    ct_banded = list()
+    for band in range(numbands):
+        ct = khmer.Counttable(ksize, memory / 4 / numbands, 4)
+        ct.consume_seqfile_banding(infile, numbands, band)
+        ct_banded.append(ct)
+
+    for n, record in enumerate(screed.open(infile)):
+        if not (n > 0 and n % 100 == 0):
+            continue
+        for kmer in ct_normal.get_kmers(record.sequence):
+            abund_normal = ct_normal.get(kmer)
+            abunds_banded = [ct.get(kmer) for ct in ct_banded]
+            # Ideally, we'd like to enforce that these are equal. Practically,
+            # with false positives, we have to allow for a small difference.
+            assert abs(sum(abunds_banded) - abund_normal) <= epsilon
+
+            nonzeros = [a for a in abunds_banded if a > 0]
+            # False positives shouldn't be appearing in multiple bands
+            assert len(nonzeros) <= 2
+            # False positives shouldn't have high abundance
+            if len(nonzeros) > 1:
+                assert min(nonzeros) == 1
+
+
+ at pytest.mark.parametrize('ksize,memory,numbands', [
+    (21, 5e6, 3),
+    (21, 5e6, 11),
+    (21, 5e6, 23),
+    (21, 5e6, 29),
+])
+def test_banding_to_disk(ksize, memory, numbands):
+    """
+    Test accuracy of banding in terms of the data structure contents.
+
+    Stronger than the functional in-memory test, this function tests whether
+    a computing k-mer abundances in banding mode produces the same data
+    structure as counting k-mer abundances in the normal fashion.
+    """
+    infile = utils.get_test_data('banding-reads.fq')
+    path1 = utils.get_temp_filename('normal.ct')
+    path2 = utils.get_temp_filename('banding.ct')
+
+    ct = khmer.Counttable(ksize, memory / 4, 4)
+    ct.consume_seqfile(infile)
+    ct.save(path1)
+    fpr = khmer.calc_expected_collisions(ct)
+    print('FPR', fpr)
+
+    ct = khmer.Counttable(ksize, memory / 4, 4)
+    for band in range(numbands):
+        ct.consume_seqfile_banding(infile, numbands, band)
+    ct.save(path2)
+    fpr = khmer.calc_expected_collisions(ct)
+    print('FPR', fpr)
+
+    with open(path1, 'rb') as f1, open(path2, 'rb') as f2:
+        assert f1.read() == f2.read()
+
+
+ at pytest.mark.parametrize('sketchclass', [
+    (khmer.Nodetable),
+    (khmer.Counttable),
+])
+def test_banding_bad_params(sketchclass):
+    sketch = sketchclass(31, 1e5, 4)
+
+    # Fails because 13 > 8
+    with pytest.raises(ValueError) as ve:
+        infile = utils.get_test_data('bogus.fa')
+        _ = sketch.consume_seqfile_banding(infile, 8, 13)
+    assert "'band' must be in the interval [0, 'num_bands')" in str(ve)
+
+    # Fails because file does not exist
+    with pytest.raises(OSError) as ose:
+        nreads, kmersconsumed = \
+            sketch.consume_seqfile_banding('file-no-exist.fa', 16, 3)
+    assert 'does not exist' in str(ose)
+
+
+ at pytest.mark.parametrize('sketchclass,num_batches,batch', [
+    (khmer.Nodetable, 8, 3),
+    (khmer.Counttable, 8, 3),
+])
+def test_banding(sketchclass, num_batches, batch):
+    sketch = sketchclass(31, 1e5, 4)
+    infile = utils.get_test_data('bogus.fa')
+    nreads, kmersconsumed = \
+        sketch.consume_seqfile_banding(infile, num_batches, batch)
+    assert nreads == 1
+    assert kmersconsumed == 3
+    assert sketch.get('CGGCTATTATCTGAGCTCAAGACTAATACGC') == 1
+    assert sketch.get('TATTATCTGAGCTCAAGACTAATACGCGCTG') == 1
+    assert sketch.get('TGAGCTCAAGACTAATACGCGCTGGCCACTG') == 1
+    assert sketch.get('GTACGGCTATTATCTGAGCTCAAGACTAATA') == 0
+    assert sketch.get('TTATCTGAGCTCAAGACTAATACGCGCTGGC') == 0
+    assert sketch.get('GCTCAAGACTAATACGCGCTGGCCACTGGTA') == 0
diff --git a/tests/test_countgraph.py b/tests/test_countgraph.py
index 0e3763d..cd1cb30 100644
--- a/tests/test_countgraph.py
+++ b/tests/test_countgraph.py
@@ -889,12 +889,6 @@ def test_find_spectral_error_positions_err():
     except ValueError:
         pass
 
-    try:
-        hi.find_spectral_error_positions("ACGTACGN", 1)
-        assert 0, "should raise ValueError; contains N"
-    except ValueError:
-        pass
-
 
 def test_maxcount():
     # hashtable should saturate at some point so as not to overflow counter
diff --git a/tests/test_cython_assembly.py b/tests/test_cython_assembly.py
new file mode 100644
index 0000000..c9a76c4
--- /dev/null
+++ b/tests/test_cython_assembly.py
@@ -0,0 +1,441 @@
+# -*- coding: UTF-8 -*-
+#
+# This file is part of khmer, https://github.com/dib-lab/khmer/, and is
+# Copyright (C) 2010-2015, Michigan State University.
+# Copyright (C) 2015-2016, The Regents of the University of California.
+#
+# 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 Michigan State 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 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 COPYRIGHT
+# HOLDER 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.
+#
+# Contact: khmer-project at idyll.org
+# pylint: disable=missing-docstring,protected-access,no-member,invalid-name
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import itertools
+import random
+
+import khmer
+from khmer.khmer_args import estimate_optimal_with_K_and_f as optimal_fp
+from khmer import ReadParser
+from khmer import reverse_complement as revcomp
+from . import khmer_tst_utils as utils
+from khmer._oxli.assembly import LinearAssembler
+
+import pytest
+import screed
+
+from .graph_features import *
+from .graph_features import K
+
+
+def teardown():
+    utils.cleanup()
+
+
+ at pytest.mark.parametrize("assembler", [LinearAssembler])
+class TestNonBranching:
+
+    def test_all_start_positions(self, linear_structure, assembler):
+        # assemble entire contig, starting from wherever
+        graph, contig = linear_structure
+        asm = assembler(graph)
+
+        for start in range(0, len(contig), 150):
+            path = asm.assemble(contig[start:start + K])
+            assert utils._equals_rc(path, contig), start
+
+    def test_all_left_to_beginning(self, linear_structure, assembler):
+        # assemble directed left
+        graph, contig = linear_structure
+        asm = assembler(graph)
+
+        for start in range(0, len(contig), 150):
+            path = asm.assemble_left(contig[start:start + K])
+            print(path, ', ', contig[:start])
+            assert utils._equals_rc(path, contig[:start + K]), start
+
+    def test_all_right_to_end(self, linear_structure, assembler):
+        # assemble directed right
+        graph, contig = linear_structure
+        asm = assembler(graph)
+
+        for start in range(0, len(contig), 150):
+            path = asm.assemble_right(contig[start:start + K])
+            print(path, ', ', contig[:start])
+            assert utils._equals_rc(path, contig[start:]), start
+
+    def test_circular(self, circular_linear_structure, assembler):
+
+        graph, contig = circular_linear_structure
+        asm = assembler(graph)
+
+        path = asm.assemble_right(contig[:K])
+        print(path, ',', contig)
+        assert utils._equals_rc(path, contig[:len(path)])
+
+
+class TestLinearAssembler_RightBranching:
+
+    def test_branch_point(self, right_tip_structure):
+        graph, contig, L, HDN, R, tip = right_tip_structure
+
+        assert graph.kmer_degree(HDN) == 3
+
+    def test_beginning_to_branch(self, right_tip_structure):
+        # assemble from beginning of contig, up until branch point
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(contig[0:K])
+
+        assert len(path) == HDN.pos + K
+        assert utils._equals_rc(path, contig[:len(path)])
+
+    def test_beginning_to_branch_revcomp(self, right_tip_structure):
+        # assemble from beginning of contig, up until branch point
+        # starting from rev comp
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(revcomp(contig[0:K]))
+
+        assert len(path) == HDN.pos + K
+        assert utils._equals_rc(path, contig[:len(path)])
+
+    def test_left_of_branch_to_beginning(self, right_tip_structure):
+        # start from HDN (left of branch)
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(L)
+
+        assert len(path) == HDN.pos + K
+        assert utils._equals_rc(path, contig[:len(path)])
+
+    def test_left_of_branch_to_beginning_revcomp(self, right_tip_structure):
+        # start from revcomp of HDN (left of branch)
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(revcomp(L))
+
+        assert len(path) == HDN.pos + K
+        assert utils._equals_rc(path, contig[:len(path)])
+
+    def test_right_of_branch_outwards_to_ends(self, right_tip_structure):
+        # assemble from right of branch point (at R)
+        # Should get the *entire* original contig, as the assembler
+        # will move left relative to the branch, and not consider it
+        # as a high degree node
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(R)
+
+        assert len(path) == len(contig)
+        assert utils._equals_rc(path, contig)
+
+    def test_end_to_beginning(self, right_tip_structure):
+        # should have exact same behavior as right_of_branch_outwards
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(contig[-K:])
+
+        assert len(path) == len(contig)
+        assert utils._equals_rc(path, contig)
+
+
+class TestLinearAssembler_LeftBranching:
+
+    def test_branch_point(self, left_tip_structure):
+        graph, contig, L, HDN, R, tip = left_tip_structure
+
+        assert graph.kmer_degree(HDN) == 3
+
+    def test_end_to_branch(self, left_tip_structure):
+        # assemble from end until branch point
+        # should include HDN
+        graph, contig, L, HDN, R, tip = left_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(contig[-K:])
+
+        assert len(path) == len(contig) - HDN.pos
+        assert utils._equals_rc(path, contig[HDN.pos:])
+
+    def test_branch_to_end(self, left_tip_structure):
+        # assemble from branch point until end
+        graph, contig, L, HDN, R, tip = left_tip_structure
+        asm = khmer.LinearAssembler(graph)
+        path = asm.assemble(HDN)
+
+        assert len(path) == len(contig) - HDN.pos
+        assert utils._equals_rc(path, contig[HDN.pos:])
+
+    def test_from_branch_to_ends_with_stopbf(self, left_tip_structure):
+        # block the tip with the stop_filter. should return a full length
+        # contig.
+        graph, contig, L, HDN, R, tip = left_tip_structure
+
+        stop_filter = khmer.Nodegraph(K, 1e5, 4)
+        stop_filter.count(tip)
+
+        asm = khmer.LinearAssembler(graph, stop_filter=stop_filter)
+
+        path = asm.assemble(HDN)
+
+        assert len(path) == len(contig)
+        assert utils._equals_rc(path, contig)
+
+    def test_from_branch_to_ends_with_stopbf_revcomp(self, left_tip_structure):
+        # block the tip with the stop_filter. should return a full length
+        # contig.
+        graph, contig, L, HDN, R, tip = left_tip_structure
+
+        stop_filter = khmer.Nodegraph(K, 1e5, 4)
+        stop_filter.count(tip)
+        asm = khmer.LinearAssembler(graph, stop_filter=stop_filter)
+
+        path = asm.assemble(revcomp(HDN))
+
+        assert len(path) == len(contig)
+        assert utils._equals_rc(path, contig)
+
+    def test_end_thru_tip_with_stopbf(self, left_tip_structure):
+        # assemble up to branch point, and include introduced branch b/c
+        # of stop bf
+        graph, contig, L, HDN, R, tip = left_tip_structure
+
+        stop_filter = khmer.Nodegraph(K, 1e5, 4)
+        stop_filter.count(L)          # ...and block original path
+        asm = khmer.LinearAssembler(graph, stop_filter=stop_filter)
+
+        path = asm.assemble(contig[-K:])
+        assert len(path) == len(contig) - HDN.pos + 1
+
+        # should be the tip k-kmer, plus the last base of the HDN thru
+        # the end of the contig
+        assert utils._equals_rc(path, tip + contig[HDN.pos + K - 1:])
+
+    def test_single_node_flanked_by_hdns(self, left_tip_structure):
+        # assemble single node flanked by high-degree nodes
+        # we'll copy the main nodegraph before mutating it
+        graph, contig, L, HDN, R, tip = left_tip_structure
+        asm = khmer.LinearAssembler(graph)
+
+        graph.consume(mutate_position(contig, HDN.pos + K))
+
+        path = asm.assemble(HDN)
+
+        assert len(path) == K
+        assert utils._equals_rc(path, HDN)
+
+
+class TestLabeledAssembler:
+
+    def test_beginning_to_end_across_tip(self, right_tip_structure):
+        # assemble entire contig, ignoring branch point b/c of labels
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh)
+        hdn = graph.find_high_degree_nodes(contig)
+        # L, HDN, and R will be labeled with 1
+        lh.label_across_high_degree_nodes(contig, hdn, 1)
+
+        path = asm.assemble(contig[:K])
+
+        assert len(path) == 1, "there should only be one path"
+        path = path[0]  # @CTB
+
+        assert len(path) == len(contig)
+        assert utils._equals_rc(path, contig)
+
+    def test_assemble_right_double_fork(self, right_double_fork_structure):
+        # assemble two contigs from a double forked structure
+        graph, contig, L, HDN, R, branch = right_double_fork_structure
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh)
+
+        hdn = graph.find_high_degree_nodes(contig)
+        hdn += graph.find_high_degree_nodes(branch)
+        print(list(hdn))
+        lh.label_across_high_degree_nodes(contig, hdn, 1)
+        lh.label_across_high_degree_nodes(branch, hdn, 2)
+        print(lh.get_tag_labels(list(hdn)[0]))
+
+        paths = asm.assemble(contig[:K])
+        print('Path lengths', [len(x) for x in paths])
+
+        assert len(paths) == 2
+
+        assert any(utils._equals_rc(path, contig) for path in paths)
+        assert any(utils._equals_rc(path, branch) for path in paths)
+
+    def test_assemble_right_triple_fork(self, right_triple_fork_structure):
+        # assemble three contigs from a trip fork
+        (graph, contig, L, HDN, R,
+         top_sequence, bottom_sequence) = right_triple_fork_structure
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh)
+
+        hdn = graph.find_high_degree_nodes(contig)
+        hdn += graph.find_high_degree_nodes(top_sequence)
+        hdn += graph.find_high_degree_nodes(bottom_sequence)
+        print(list(hdn))
+        lh.label_across_high_degree_nodes(contig, hdn, 1)
+        lh.label_across_high_degree_nodes(top_sequence, hdn, 2)
+        lh.label_across_high_degree_nodes(bottom_sequence, hdn, 3)
+        print(lh.get_tag_labels(list(hdn)[0]))
+
+        paths = asm.assemble(contig[:K])
+        print([len(x) for x in paths])
+
+        assert len(paths) == 3
+
+        assert any(utils._equals_rc(path, contig) for path in paths)
+        assert any(utils._equals_rc(path, top_sequence) for path in paths)
+        assert any(utils._equals_rc(path, bottom_sequence) for path in paths)
+
+    def test_assemble_left_double_fork(self, left_double_fork_structure):
+        # assemble entire contig + branch points b/c of labels; start from end
+        graph, contig, L, HDN, R, branch = left_double_fork_structure
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh)
+
+        # first try without the labels
+        paths = asm.assemble(contig[-K:])
+
+        assert len(paths) == 1
+        # without labels, should get the beginning of the HDN thru the end
+        assert paths[0] == contig[HDN.pos:]
+
+        # now add labels and check that we get two full length paths
+        hdn = graph.find_high_degree_nodes(contig)
+        hdn += graph.find_high_degree_nodes(branch)
+        print(list(hdn))
+        lh.label_across_high_degree_nodes(contig, hdn, 1)
+        lh.label_across_high_degree_nodes(branch, hdn, 2)
+        print(lh.get_tag_labels(list(hdn)[0]))
+
+        paths = asm.assemble(contig[-K:])
+
+        assert len(paths) == 2
+
+        assert any(utils._equals_rc(path, contig) for path in paths)
+        assert any(utils._equals_rc(path, branch) for path in paths)
+
+    def test_assemble_snp_bubble_single(self, snp_bubble_structure):
+        # assemble entire contig + one of two paths through a bubble
+        graph, wildtype, mutant, HDN_L, HDN_R = snp_bubble_structure
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh)
+
+        hdn = graph.find_high_degree_nodes(wildtype)
+        assert len(hdn) == 2
+        lh.label_across_high_degree_nodes(wildtype, hdn, 1)
+
+        paths = asm.assemble(wildtype[:K])
+
+        assert len(paths) == 1
+        assert utils._equals_rc(paths[0], wildtype)
+
+    def test_assemble_snp_bubble_both(self, snp_bubble_structure):
+        # assemble entire contig + both paths
+        graph, wildtype, mutant, HDN_L, HDN_R = snp_bubble_structure
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh)
+
+        hdn = graph.find_high_degree_nodes(wildtype)
+        hdn += graph.find_high_degree_nodes(mutant)
+        assert len(hdn) == 2
+        lh.label_across_high_degree_nodes(wildtype, hdn, 1)
+        lh.label_across_high_degree_nodes(mutant, hdn, 2)
+
+        paths = asm.assemble(wildtype[:K])
+
+        assert len(paths) == 2
+
+        assert any(utils._contains_rc(wildtype, path) for path in paths)
+        assert any(utils._contains_rc(mutant, path) for path in paths)
+        # assert all(path[:HDN_L.pos+K][-K:] == HDN_L for path in paths)
+        # assert all(path[HDN_R.pos:][:K] == HDN_R for path in paths)
+        # assert paths[0][:HDN_L.pos+K] == paths[1][:HDN_L.pos+K]
+        # assert paths[0][HDN_R.pos:] == paths[1][HDN_R.pos:]
+
+    def test_assemble_snp_bubble_stopbf(self, snp_bubble_structure):
+        # assemble one side of bubble, blocked with stop_filter,
+        # when labels on both branches
+        # stop_filter should trip a filter failure, negating the label spanning
+        graph, wildtype, mutant, HDN_L, HDN_R = snp_bubble_structure
+        stop_filter = khmer.Nodegraph(K, 1e5, 4)
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh, stop_filter=stop_filter)
+
+        hdn = graph.find_high_degree_nodes(wildtype)
+        hdn += graph.find_high_degree_nodes(mutant)
+        assert len(hdn) == 2
+        lh.label_across_high_degree_nodes(wildtype, hdn, 1)
+        lh.label_across_high_degree_nodes(mutant, hdn, 2)
+
+        # do the labeling, but block the mutant with stop_filter
+        stop_filter.count(mutant[HDN_L.pos + 1:HDN_L.pos + K + 1])
+        paths = asm.assemble(wildtype[:K])
+
+        assert len(paths) == 1
+        assert any(utils._equals_rc(path, wildtype) for path in paths)
+
+    # @pytest.mark.skip(reason='destroys your computer and then the world')
+    def test_assemble_tandem_repeats(self, tandem_repeat_structure):
+        # assemble one copy of a tandem repeat
+        graph, repeat, tandem_repeats = tandem_repeat_structure
+        lh = khmer._GraphLabels(graph)
+        asm = khmer.SimpleLabeledAssembler(lh)
+        paths = asm.assemble(repeat[:K])
+
+        assert len(paths) == 1
+        # There are K-1 k-mers spanning the junction between
+        # the beginning and end of the repeat
+        assert len(paths[0]) == len(repeat) + K - 1
+
+
+class TestJunctionCountAssembler:
+
+    def test_beginning_to_end_across_tip(self, right_tip_structure):
+        # assemble entire contig, ignoring branch point b/c of labels
+        graph, contig, L, HDN, R, tip = right_tip_structure
+        asm = khmer.JunctionCountAssembler(graph)
+        asm.consume(contig)
+        asm.consume(contig)
+        asm.consume(contig)
+
+        path = asm.assemble(contig[:K])
+        print('P:', path[0])
+        print('T:', tip)
+        print('C:', contig)
+        assert len(path) == 1, "there should only be one path"
+        path = path[0]  # @CTB
+
+        assert len(path) == len(contig)
+        assert utils._equals_rc(path, contig)
diff --git a/tests/test_cython_parsing.py b/tests/test_cython_parsing.py
new file mode 100644
index 0000000..1c2aa40
--- /dev/null
+++ b/tests/test_cython_parsing.py
@@ -0,0 +1,442 @@
+from __future__ import print_function
+from __future__ import absolute_import
+
+import gc
+import itertools
+import random
+
+import khmer
+from khmer._oxli.parsing import Sequence, FastxParser, SanitizedFastxParser
+from khmer._oxli.parsing import BrokenPairedReader, Alphabets, check_is_pair
+from khmer._oxli.parsing import check_is_right, check_is_left
+from khmer.khmer_args import estimate_optimal_with_K_and_f as optimal_fp
+from khmer import reverse_complement as revcomp
+from khmer import reverse_hash as revhash
+from . import khmer_tst_utils as utils
+
+import pytest
+import screed
+
+
+def teardown():
+    utils.cleanup()
+
+
+ at pytest.fixture
+def create_fastx(tmpdir, as_str=True):
+    def func(reads, fmt='fa'):
+        assert fmt in ['fa', 'fq']
+        fastx_fn = tmpdir.join('test.' + fmt)
+        for record in reads:
+            if fmt == 'fa':
+                fastx_fn.write('>{0}\n{1}\n'.format(record.name,
+                                                    record.sequence),
+                               mode='a')
+            else:
+                fastx_fn.write('@{0}\n{1}\n+\n{2}\n'.format(record.name,
+                                                            record.sequence,
+                                                            record.quality),
+                               mode='a')
+        return str(fastx_fn) if as_str else fastx_fn
+    return func
+
+
+def sequences_eq(seqs_A, seqs_B):
+    for seq1, seq2 in zip(seqs_A, seqs_B):
+        if seq1 is None:
+            assert seq1 is seq2
+        else:
+            assert seq1.name == seq2.name
+            assert seq1.sequence == seq2.sequence
+
+
+def test_FastxParser(create_fastx):
+    expected = [Sequence('seq1/1', 'A' * 5),
+                Sequence('seq1/2', 'A' * 4),
+                Sequence('seq2/1', 'A' * 5),
+                Sequence('seq3/1', 'A' * 3),
+                Sequence('seq3/2', 'A' * 5)]
+    parser = FastxParser(create_fastx(expected))
+    result = list(parser)
+
+    assert len(expected) == len(result)
+    assert all((x == y) for x, y in zip(expected, result))
+
+
+def test_SanitizedFastxParser_convert_Ns(create_fastx):
+    '''Test that A's are converted to N's'''
+    expected = [Sequence('seq1/1', 'N' * 5),
+                Sequence('seq1/2', 'N' * 4)]
+    parser = SanitizedFastxParser(create_fastx(expected),
+                                  alphabet='DNAN_SIMPLE')
+    result = list(parser)
+
+    assert parser.n_bad == 0
+    assert len(result) == 2
+    assert result[0].sequence == 'A' * 5
+    assert result[1].sequence == 'A' * 4
+
+
+def test_SanitizedFastxParser_no_convert_Ns(create_fastx):
+    expected = [Sequence('seq1/1', 'N' * 5),
+                Sequence('seq1/2', 'N' * 4)]
+    parser = SanitizedFastxParser(create_fastx(expected),
+                                  alphabet='DNAN_SIMPLE',
+                                  convert_n=False)
+    result = list(parser)
+
+    assert parser.n_bad == 0
+    assert len(result) == 2
+    assert result[0].sequence == 'N' * 5
+    assert result[1].sequence == 'N' * 4
+
+
+def test_SanitizedFastxParser_invalid(create_fastx):
+    '''Test that parser detects invalid sequence'''
+    expected = [Sequence('seq1/1', 'XXX'),
+                Sequence('seq1/2', 'A' * 4)]
+    parser = SanitizedFastxParser(create_fastx(expected))
+    result = list(parser)
+
+    assert parser.n_bad == 1
+    assert len(result) == 1
+    assert result[0].sequence == 'A' * 4
+
+
+def test_SanitizedFastxParser_lowercase(create_fastx):
+    reads = [Sequence('seq1/1', 'acgtn'),
+             Sequence('seq1/2', 'AcGtN'),
+             Sequence('seq1/2', 'aCgTn')]
+
+    parser = SanitizedFastxParser(create_fastx(reads), convert_n=False)
+    result = list(parser)
+
+    assert result[0].sequence == 'ACGTN'
+    assert result[1].sequence == 'ACGTN'
+    assert result[2].sequence == 'ACGTN'
+
+
+def test_alphabet_wrapper():
+    dna_simple = Alphabets.get('DNA_SIMPLE')
+    assert len(dna_simple) == 4
+    for b in 'ACGT':
+        assert b in dna_simple
+
+    with pytest.raises(ValueError):
+        Alphabets.get('TEST')
+
+
+def gather_paired(stream, **kw):
+    itr = BrokenPairedReader(stream, **kw)
+
+    x = []
+    m = 0
+    num = 0
+    for num, is_pair, read1, read2 in itr:
+        x.append((read1.name if read1 is not None else None,
+                  read2.name if read2 is not None else None))
+        m += 1
+
+    return x, num, m
+
+
+class Test_BrokenPairedReader(object):
+    reads = [Sequence(name='seq1/1', sequence='A' * 5),
+             Sequence(name='seq1/2', sequence='A' * 4),
+             Sequence(name='seq2/1', sequence='A' * 5),
+             Sequence(name='seq3/1', sequence='A' * 3),
+             Sequence(name='seq3/2', sequence='A' * 5)]
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testDefault(self, parser, create_fastx):
+        x, n, m = gather_paired(parser(create_fastx(self.reads)),
+                                min_length=1)
+
+        expected = [('seq1/1', 'seq1/2'),
+                    ('seq2/1', None),
+                    ('seq3/1', 'seq3/2')]
+        assert x == expected, x
+        assert m == 3
+        assert n == 3, n
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testMinLength(self, parser, create_fastx):
+        x, n, m = gather_paired(parser(create_fastx(self.reads)),
+                                min_length=3)
+
+        expected = [('seq1/1', 'seq1/2'),
+                    ('seq2/1', None),
+                    ('seq3/1', 'seq3/2')]
+        assert x == expected, x
+        assert m == 3
+        assert n == 3, n
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testMinLength_2(self, parser, create_fastx):
+        x, n, m = gather_paired(parser(create_fastx(self.reads)),
+                                min_length=4)
+
+        expected = [('seq1/1', 'seq1/2'),
+                    ('seq2/1', None),
+                    (None, 'seq3/2')]
+        assert x == expected, x
+        assert m == 3
+        assert n == 3, n
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testForceSingle(self, parser, create_fastx):
+        x, n, m = gather_paired(parser(create_fastx(self.reads)),
+                                force_single=True)
+
+        expected = [('seq1/1', None),
+                    ('seq1/2', None),
+                    ('seq2/1', None),
+                    ('seq3/1', None),
+                    ('seq3/2', None)]
+        assert x == expected, x
+        assert m == 5
+        assert n == 4, n
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testForceSingleAndMinLength(self, parser, create_fastx):
+        x, n, m = gather_paired(parser(create_fastx(self.reads)),
+                                min_length=5, force_single=True)
+
+        expected = [('seq1/1', None),
+                    ('seq2/1', None),
+                    ('seq3/2', None)]
+        assert x == expected, x
+        assert m == 3, m
+        assert n == 2, n
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testRequirePairedAndMinLength_HalfPass(self, parser, create_fastx):
+        reads = [Sequence('seq1/1', 'A' * 5),
+                 Sequence('seq1/2', 'A' * 4),
+                 Sequence('seq3/1', 'A' * 3),
+                 Sequence('seq3/2', 'A' * 5)]
+
+        reader = BrokenPairedReader(parser(create_fastx(reads)),
+                                    min_length=4, require_paired=True)
+
+        result = []
+        for n, paired, first, second in reader:
+            result.append((first, second))
+
+        assert len(result) == 1
+        assert n == 0
+        l, r = result[0]
+        assert l == reads[0]
+        assert r == reads[1]
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testRequirePairedAndMinLength_SwappedHalfPass(self, parser,
+                                                      create_fastx):
+        reads = [Sequence('seq1/1', 'A' * 5),
+                 Sequence('seq1/2', 'A' * 4),
+                 Sequence('seq3/1', 'A' * 5),
+                 Sequence('seq3/2', 'A' * 3)]
+
+        reader = BrokenPairedReader(parser(create_fastx(reads)),
+                                    min_length=4, require_paired=True)
+
+        result = []
+        for n, paired, first, second in reader:
+            result.append((first, second))
+
+        assert n == 0
+        assert len(result) == 1
+        l, r = result[0]
+        assert l == reads[0]
+        assert r == reads[1]
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testRequirePairedAndMinLength_NeitherPass(self, parser, create_fastx):
+        reads = [Sequence('seq1/1', 'A' * 5),
+                 Sequence('seq1/2', 'A' * 4),
+                 Sequence('seq3/1', 'A' * 3),
+                 Sequence('seq3/2', 'A' * 3)]
+
+        reader = BrokenPairedReader(parser(create_fastx(reads)),
+                                    min_length=4, require_paired=True)
+
+        result = []
+        for n, paired, first, second in reader:
+            result.append((first, second))
+
+        assert n == 0
+        assert len(result) == 1
+        l, r = result[0]
+        assert l == reads[0]
+        assert r == reads[1]
+
+    @pytest.mark.parametrize("parser", [FastxParser, SanitizedFastxParser])
+    def testRequirePairedAndMinLength_SwappedNeitherPass(self, parser,
+                                                         create_fastx):
+        reads = [Sequence('seq1/1', 'A' * 3),
+                 Sequence('seq1/2', 'A' * 3),
+                 Sequence('seq3/1', 'A' * 5),
+                 Sequence('seq3/2', 'A' * 5)]
+
+        reader = BrokenPairedReader(parser(create_fastx(reads)),
+                                    min_length=4, require_paired=True)
+
+        result = []
+        for n, paired, first, second in reader:
+            result.append((first, second))
+
+        assert n == 0
+        assert len(result) == 1
+        l, r = result[0]
+        assert l == reads[2]
+        assert r == reads[3]
+
+
+def test_check_is_pair_1():
+    read1 = Sequence(name='seq', quality='###', sequence='AAA')
+    read2 = Sequence(name='seq2', quality='###', sequence='AAA')
+
+    assert not check_is_pair(read1, read2)
+
+
+def test_check_is_pair_2():
+    read1 = Sequence(name='seq/1', quality='###', sequence='AAA')
+    read2 = Sequence(name='seq/2', quality='###', sequence='AAA')
+
+    assert check_is_pair(read1, read2)
+
+
+def test_check_is_pair_3_fq():
+    read1 = Sequence(name='seq 1::', quality='###', sequence='AAA')
+    read2 = Sequence(name='seq 2::', quality='###', sequence='AAA')
+
+    assert check_is_pair(read1, read2)
+
+
+def test_check_is_pair_3_broken_fq_1():
+    read1 = Sequence(name='seq', quality='###', sequence='AAA')
+    read2 = Sequence(name='seq 2::', quality='###', sequence='AAA')
+
+    assert not check_is_pair(read1, read2)
+
+
+def test_check_is_pair_3_broken_fq_2():
+    read1 = Sequence(name='seq 1::', quality='###', sequence='AAA')
+    read2 = Sequence(name='seq', quality='###', sequence='AAA')
+
+    assert not check_is_pair(read1, read2)
+
+
+def test_check_is_pair_3_fa():
+    read1 = Sequence(name='seq 1::', sequence='AAA')
+    read2 = Sequence(name='seq 2::', sequence='AAA')
+
+    assert check_is_pair(read1, read2)
+
+
+def test_check_is_pair_4():
+    read1 = Sequence(name='seq/1', quality='###', sequence='AAA')
+    read2 = Sequence(name='seq/2', sequence='AAA')
+
+    try:
+        check_is_pair(read1, read2)
+        assert False                    # check_is_pair should fail here.
+    except ValueError:
+        pass
+
+
+def test_check_is_pair_4b():
+    read1 = Sequence(name='seq/1', sequence='AAA')
+    read2 = Sequence(name='seq/2', quality='###', sequence='AAA')
+
+    try:
+        check_is_pair(read1, read2)
+        assert False                    # check_is_pair should fail here.
+    except ValueError:
+        pass
+
+
+def test_check_is_pair_5():
+    read1 = Sequence(name='seq/1', sequence='AAA')
+    read2 = Sequence(name='seq/2', sequence='AAA')
+
+    assert check_is_pair(read1, read2)
+
+
+def test_check_is_pair_6():
+    read1 = Sequence(name='seq1', sequence='AAA')
+    read2 = Sequence(name='seq2', sequence='AAA')
+
+    assert not check_is_pair(read1, read2)
+
+
+def test_check_is_pair_7():
+    read1 = Sequence(name='seq/2', sequence='AAA')
+    read2 = Sequence(name='seq/1', sequence='AAA')
+
+    assert not check_is_pair(read1, read2)
+
+
+def test_check_is_right():
+    assert not check_is_right('seq1/1')
+    assert not check_is_right('seq1 1::N')
+    assert check_is_right('seq1/2')
+    assert check_is_right('seq1 2::N')
+
+    assert not check_is_right('seq')
+    assert not check_is_right('seq 2')
+
+
+def test_check_is_left():
+    assert check_is_left('seq1/1')
+    assert check_is_left('seq1 1::N')
+    assert not check_is_left('seq1/2')
+    assert not check_is_left('seq1 2::N')
+
+    assert not check_is_left('seq')
+    assert not check_is_left('seq 1')
+
+    assert check_is_left(
+        '@HWI-ST412:261:d15khacxx:8:1101:3149:2157 1:N:0:ATCACG')
+
+
+class Test_Sequence(object):
+
+    name = 'Test'
+    sequence = 'ACGT'
+    quality = '####'
+    description = 'The nucleotides'
+    cleaned = 'aaaa'
+
+    def test_init_name_and_sequence(self):
+        s = Sequence(name=self.name, sequence=self.sequence)
+        assert s.name == self.name
+        assert s.sequence == self.sequence
+        assert s.quality is None
+        assert s.description is None
+        assert s.cleaned_seq == self.sequence
+
+    def test_init_name_only(self):
+        s = Sequence(name=self.name)
+        assert s.name is None
+        assert s.sequence is None
+        assert s.quality is None
+        assert s.description is None
+        assert s.cleaned_seq is None
+
+    def test_init_sequence_only(self):
+        s = Sequence(sequence=self.sequence)
+        assert s.name is None
+        assert s.sequence is None
+        assert s.quality is None
+        assert s.description is None
+        assert s.cleaned_seq is None
+
+    def test_init_with_cleaned_seq(self):
+        s = Sequence(name=self.name, sequence=self.sequence,
+                     cleaned_seq=self.cleaned)
+        assert s.name == self.name
+        assert s.sequence == self.sequence
+        assert s.quality is None
+        assert s.description is None
+        assert s.cleaned_seq == self.cleaned
diff --git a/tests/test_filter_abund.py b/tests/test_filter_abund.py
index 99e2970..c12a847 100644
--- a/tests/test_filter_abund.py
+++ b/tests/test_filter_abund.py
@@ -410,6 +410,7 @@ def test_filter_abund_1_quiet():
     status, out, err = utils.runscript(script, args, in_dir)
 
     assert len(err) == 0
+    assert len(out) < 1000
 
     outfile = infile + '.abundfilt'
     n_outfile = n_infile + '.abundfilt'
@@ -427,6 +428,7 @@ def test_filter_abund_1_singlefile_quiet():
     (status, out, err) = utils.runscript(script, args, in_dir)
 
     assert len(err) == 0
+    assert len(out) < 1000
 
     outfile = infile + '.abundfilt'
     assert os.path.exists(outfile), outfile
diff --git a/tests/test_functions.py b/tests/test_functions.py
index 483b0e1..a88fd52 100644
--- a/tests/test_functions.py
+++ b/tests/test_functions.py
@@ -42,8 +42,7 @@ import os
 import sys
 import pytest
 from . import khmer_tst_utils as utils
-from khmer.utils import (check_is_pair, broken_paired_reader, check_is_left,
-                         check_is_right, clean_input_reads)
+
 from khmer.kfile import check_input_files, get_file_writer
 try:
     from StringIO import StringIO
@@ -281,295 +280,3 @@ def test_check_file_status_kfile_force():
         sys.stderr = old_stderr
 
     assert "does not exist" in capture.getvalue(), capture.getvalue()
-
-
-def test_check_is_pair_1():
-    read1 = screed.Record(name='seq', quality='###', sequence='AAA')
-    read2 = screed.Record(name='seq2', quality='###', sequence='AAA')
-
-    assert not check_is_pair(read1, read2)
-
-
-def test_check_is_pair_2():
-    read1 = screed.Record(name='seq/1', quality='###', sequence='AAA')
-    read2 = screed.Record(name='seq/2', quality='###', sequence='AAA')
-
-    assert check_is_pair(read1, read2)
-
-
-def test_check_is_pair_3_fq():
-    read1 = screed.Record(name='seq 1::', quality='###', sequence='AAA')
-    read2 = screed.Record(name='seq 2::', quality='###', sequence='AAA')
-
-    assert check_is_pair(read1, read2)
-
-
-def test_check_is_pair_3_broken_fq_1():
-    read1 = screed.Record(name='seq', quality='###', sequence='AAA')
-    read2 = screed.Record(name='seq 2::', quality='###', sequence='AAA')
-
-    assert not check_is_pair(read1, read2)
-
-
-def test_check_is_pair_3_broken_fq_2():
-    read1 = screed.Record(name='seq 1::', quality='###', sequence='AAA')
-    read2 = screed.Record(name='seq', quality='###', sequence='AAA')
-
-    assert not check_is_pair(read1, read2)
-
-
-def test_check_is_pair_3_fa():
-    read1 = screed.Record(name='seq 1::', sequence='AAA')
-    read2 = screed.Record(name='seq 2::', sequence='AAA')
-
-    assert check_is_pair(read1, read2)
-
-
-def test_check_is_pair_4():
-    read1 = screed.Record(name='seq/1', quality='###', sequence='AAA')
-    read2 = screed.Record(name='seq/2', sequence='AAA')
-
-    try:
-        check_is_pair(read1, read2)
-        assert False                    # check_is_pair should fail here.
-    except ValueError:
-        pass
-
-
-def test_check_is_pair_4b():
-    read1 = screed.Record(name='seq/1', sequence='AAA')
-    read2 = screed.Record(name='seq/2', quality='###', sequence='AAA')
-
-    try:
-        check_is_pair(read1, read2)
-        assert False                    # check_is_pair should fail here.
-    except ValueError:
-        pass
-
-
-def test_check_is_pair_5():
-    read1 = screed.Record(name='seq/1', sequence='AAA')
-    read2 = screed.Record(name='seq/2', sequence='AAA')
-
-    assert check_is_pair(read1, read2)
-
-
-def test_check_is_pair_6():
-    read1 = screed.Record(name='seq1', sequence='AAA')
-    read2 = screed.Record(name='seq2', sequence='AAA')
-
-    assert not check_is_pair(read1, read2)
-
-
-def test_check_is_pair_7():
-    read1 = screed.Record(name='seq/2', sequence='AAA')
-    read2 = screed.Record(name='seq/1', sequence='AAA')
-
-    assert not check_is_pair(read1, read2)
-
-
-def test_check_is_right():
-    assert not check_is_right('seq1/1')
-    assert not check_is_right('seq1 1::N')
-    assert check_is_right('seq1/2')
-    assert check_is_right('seq1 2::N')
-
-    assert not check_is_right('seq')
-    assert not check_is_right('seq 2')
-
-
-def test_check_is_left():
-    assert check_is_left('seq1/1')
-    assert check_is_left('seq1 1::N')
-    assert not check_is_left('seq1/2')
-    assert not check_is_left('seq1 2::N')
-
-    assert not check_is_left('seq')
-    assert not check_is_left('seq 1')
-
-    assert check_is_left(
-        '@HWI-ST412:261:d15khacxx:8:1101:3149:2157 1:N:0:ATCACG')
-
-
-def gather(stream, **kw):
-    itr = broken_paired_reader(stream, **kw)
-
-    x = []
-    m = 0
-    num = 0
-    for num, is_pair, read1, read2 in itr:
-        if is_pair:
-            x.append((read1.name, read2.name))
-        else:
-            x.append((read1.name, None))
-        m += 1
-
-    return x, num, m
-
-
-class Test_BrokenPairedReader(object):
-    stream = [screed.Record(name='seq1/1', sequence='A' * 5),
-              screed.Record(name='seq1/2', sequence='A' * 4),
-              screed.Record(name='seq2/1', sequence='A' * 5),
-              screed.Record(name='seq3/1', sequence='A' * 3),
-              screed.Record(name='seq3/2', sequence='A' * 5)]
-
-    def testDefault(self):
-        x, n, m = gather(self.stream, min_length=1)
-
-        expected = [('seq1/1', 'seq1/2'),
-                    ('seq2/1', None),
-                    ('seq3/1', 'seq3/2')]
-        assert x == expected, x
-        assert m == 3
-        assert n == 3, n
-
-    def testMinLength(self):
-        x, n, m = gather(self.stream, min_length=3)
-
-        expected = [('seq1/1', 'seq1/2'),
-                    ('seq2/1', None),
-                    ('seq3/1', 'seq3/2')]
-        assert x == expected, x
-        assert m == 3
-        assert n == 3, n
-
-    def testMinLength_2(self):
-        x, n, m = gather(self.stream, min_length=4)
-
-        expected = [('seq1/1', 'seq1/2'),
-                    ('seq2/1', None),
-                    ('seq3/2', None)]
-        assert x == expected, x
-        assert m == 3
-        assert n == 3, n
-
-    def testForceSingle(self):
-        x, n, m = gather(self.stream, force_single=True)
-
-        expected = [('seq1/1', None),
-                    ('seq1/2', None),
-                    ('seq2/1', None),
-                    ('seq3/1', None),
-                    ('seq3/2', None)]
-        assert x == expected, x
-        assert m == 5
-        assert n == 4, n
-
-    def testForceSingleAndMinLength(self):
-        x, n, m = gather(self.stream, min_length=5, force_single=True)
-
-        expected = [('seq1/1', None),
-                    ('seq2/1', None),
-                    ('seq3/2', None)]
-        assert x == expected, x
-        assert m == 3, m
-        assert n == 2, n
-
-
-def test_BrokenPairedReader_OnPairs():
-    stream = [screed.Record(name='seq1/1', sequence='A' * 5),
-              screed.Record(name='seq1/2', sequence='A' * 4),
-              screed.Record(name='seq3/1', sequence='A' * 3),
-              screed.Record(name='seq3/2', sequence='A' * 5)]
-
-    x, n, m = gather(stream, min_length=4, require_paired=True)
-
-    expected = [('seq1/1', 'seq1/2')]
-    assert x == expected, x
-    assert m == 1
-    assert n == 0, n
-
-
-def test_BrokenPairedReader_OnPairs_2():
-    stream = [screed.Record(name='seq1/1', sequence='A' * 5),
-              screed.Record(name='seq1/2', sequence='A' * 4),
-              screed.Record(name='seq3/1', sequence='A' * 5),   # switched
-              screed.Record(name='seq3/2', sequence='A' * 3)]   # wrt previous
-
-    x, n, m = gather(stream, min_length=4, require_paired=True)
-
-    expected = [('seq1/1', 'seq1/2')]
-    assert x == expected, x
-    assert m == 1
-    assert n == 0, n
-
-
-def test_BrokenPairedReader_OnPairs_3():
-    stream = [screed.Record(name='seq1/1', sequence='A' * 5),
-              screed.Record(name='seq1/2', sequence='A' * 4),
-              screed.Record(name='seq3/1', sequence='A' * 3),   # both short
-              screed.Record(name='seq3/2', sequence='A' * 3)]
-
-    x, n, m = gather(stream, min_length=4, require_paired=True)
-
-    expected = [('seq1/1', 'seq1/2')]
-    assert x == expected, x
-    assert m == 1
-    assert n == 0, n
-
-
-def test_BrokenPairedReader_OnPairs_4():
-    stream = [screed.Record(name='seq1/1', sequence='A' * 3),  # too short
-              screed.Record(name='seq1/2', sequence='A' * 4),
-              screed.Record(name='seq3/1', sequence='A' * 4),
-              screed.Record(name='seq3/2', sequence='A' * 5)]
-
-    x, n, m = gather(stream, min_length=4, require_paired=True)
-
-    expected = [('seq3/1', 'seq3/2')]
-    assert x == expected, x
-    assert m == 1
-    assert n == 0, n
-
-
-def test_BrokenPairedReader_lowercase():
-    stream = [screed.Record(name='seq1/1', sequence='acgtn'),
-              screed.Record(name='seq1/2', sequence='AcGtN'),
-              screed.Record(name='seq1/2', sequence='aCgTn')]
-    stream = clean_input_reads(stream)
-
-    results = []
-    for num, is_pair, read1, read2 in broken_paired_reader(stream):
-        results.append((read1, read2))
-
-    a, b = results[0]
-    assert a.sequence == 'acgtn'
-    assert a.cleaned_seq == 'ACGTA'
-    assert b.sequence == 'AcGtN'
-    assert b.cleaned_seq == 'ACGTA'
-
-    c, d = results[1]
-    assert c.sequence == 'aCgTn'
-    assert c.cleaned_seq == 'ACGTA'
-    assert d is None
-
-
-def test_BrokenPairedReader_lowercase_khmer_Read():
-    # use khmer.Read objects which should automatically have a `cleaned_seq`
-    # attribute
-    stream = [khmer.Read(name='seq1/1', sequence='acgtn'),
-              khmer.Read(name='seq1/2', sequence='AcGtN'),
-              khmer.Read(name='seq1/2', sequence='aCgTn')]
-
-    results = []
-    for num, is_pair, read1, read2 in broken_paired_reader(stream):
-        results.append((read1, read2))
-
-    a, b = results[0]
-    assert a.sequence == 'acgtn'
-    assert a.cleaned_seq == 'ACGTA'
-    assert b.sequence == 'AcGtN'
-    assert b.cleaned_seq == 'ACGTA'
-
-    c, d = results[1]
-    assert c.sequence == 'aCgTn'
-    assert c.cleaned_seq == 'ACGTA'
-    assert d is None
-
-
-def test_clean_input_reads():
-    # all Read attributes are read only
-    stream = [khmer.Read(name='seq1/1', sequence='ACGT')]
-    with pytest.raises(AttributeError):
-        next(clean_input_reads(stream))
diff --git a/tests/test_scripts.py b/tests/test_scripts.py
index 18a1eec..16a2a5b 100644
--- a/tests/test_scripts.py
+++ b/tests/test_scripts.py
@@ -78,6 +78,20 @@ def test_load_into_counting():
     assert os.path.exists(outfile)
 
 
+def test_load_into_counting_smallcount():
+    script = 'load-into-counting.py'
+    args = ['-x', '1e3', '--small-count']
+
+    outfile = utils.get_temp_filename('out.ct')
+    infile = utils.get_test_data('test-abund-read-2.fa')
+
+    args.extend([outfile, infile])
+
+    (status, out, err) = utils.runscript(script, args)
+    assert 'Total number of unique k-mers: 83' in err, err
+    assert os.path.exists(outfile)
+
+
 def test_load_into_counting_quiet():
     script = 'load-into-counting.py'
     args = ['-q', '-x', '1e3', '-N', '2', '-k', '20']
@@ -1429,6 +1443,17 @@ def test_abundance_dist_single_nobigcount():
         assert line == '255,2,98,1.0', line
 
 
+def test_abundance_dist_single_smallcount():
+    infile = utils.copy_test_data('test-abund-read-2.fa')
+    outfile = utils.get_temp_filename('test.dist')
+    in_dir = os.path.dirname(infile)
+
+    script = 'abundance-dist-single.py'
+    args = ['-x', '1e7', '-N', '2', '-k', '17', '-z', '--small-count',
+            infile, outfile]
+    utils.runscript(script, args, in_dir)
+
+
 def test_abundance_dist_single_nosquash():
     infile = utils.copy_test_data('test-abund-read-2.fa')
     outfile = utils.get_temp_filename('test-abund-read-2.fa')
diff --git a/tests/test_sequence_validation.py b/tests/test_sequence_validation.py
index d3ac8af..c645b8f 100644
--- a/tests/test_sequence_validation.py
+++ b/tests/test_sequence_validation.py
@@ -87,11 +87,11 @@ def test_read_cleaning_consume_seqfile(Countingtype):
 
     # the 2nd read with this k-mer in it has an N in it.
     kmer = "CCTCATCGGCACCAG"
-    assert x.get(kmer) == 1               # this should be 2 in the future
+    assert x.get(kmer) == 2
 
     # the 2nd read with this k-mer in it has a Z in it
     kmer = "ACTGAGCTTCATGTC"
-    assert x.get(kmer) == 1               # this should be 2 in the future
+    assert x.get(kmer) == 2
 
 
 def test_read_cleaning_consume_read_by_read(Countingtype, reads):
@@ -142,8 +142,8 @@ def test_read_cleaning_abundance_distribution(Countingtype):
     x.consume_seqfile(infile)
 
     dist = x.abundance_distribution(infile, y)
-    assert dist[1] == 41
-    assert dist[2] == 42
+    assert dist[1] == 35                  # k-mers with non-ACGTN => ignored.
+    assert dist[2] == 69
 
 
 def test_read_cleaning_trim_functions_lowercase(Tabletype, reads):
@@ -152,51 +152,60 @@ def test_read_cleaning_trim_functions_lowercase(Tabletype, reads):
     for read in reads:
         x.consume(read.cleaned_seq)       # consume cleaned_seq
 
+    # all of these functions will fail to do anything, b/c lowercase != valid
+    # BUT they will not raise an exception, either.
+
     s = "caggcgcccaccaccgtgccctccaacctgatggt"
     _, where = x.trim_on_abundance(s, 1)
-    assert where == 35                    # in future, should be '0'
+    assert where == 0
 
-    _, where = x.trim_below_abundance(s, 2)
-    assert where == 35                    # in future, should be ?? @CTB
+    _, where = x.trim_below_abundance(s, 0)
+    print(x.get_kmer_counts(s))
+    assert where == 35                    # stays at 35 (abunds all == 0)
 
     posns = x.find_spectral_error_positions(s, 1)
-    assert posns == []                    # in future, should do same
+    assert posns == []
 
 
-def test_read_cleaning_trim_functions_N(Tabletype, reads):
+def test_read_cleaning_trim_functions_N(Countingtype, reads):
     # read this in using "approved good" behavior w/cleaned_seq
-    x = Tabletype(8, PRIMES_1m)
+    x = Countingtype(8, PRIMES_1m)
     for read in reads:
         x.consume(read.cleaned_seq)       # consume cleaned_seq
 
     s = "ACTGGGCGTAGNCGGTGTCCTCATCGGCACCAGC"
     _, where = x.trim_on_abundance(s, 1)
-    assert where == 0                     # in future, should be ??
+    assert where == 11
 
     _, where = x.trim_below_abundance(s, 2)
-    assert where == 0                     # in future, should be ??
+    assert where == 34
 
-    with pytest.raises(ValueError):
-        posns = x.find_spectral_error_positions(s, 1)
-    # assert posns == []                    # in future, should return []
+    posns = x.find_spectral_error_positions(s, 1)
+    assert posns == [11]
 
 
-def test_read_cleaning_trim_functions_bad_dna(Tabletype, reads):
+def test_read_cleaning_trim_functions_bad_dna(Countingtype, reads):
     # read this in using "approved good" behavior w/cleaned_seq
-    x = Tabletype(8, PRIMES_1m)
+    x = Countingtype(8, PRIMES_1m)
     for read in reads:
         x.consume(read.cleaned_seq)       # consume cleaned_seq
 
+    # the precise behavior of these functions is all *undefined*
+    # because different hash functions do different things with
+    # non-ACTG characters.  So all we want to do is verify that the
+    # functions execute w/o error on the k-mers before the "bad" DNA,
+    # and don't return positions in the "good" DNA.
+
     s = "CCGGCGTGGTTZZYAGGTCACTGAGCTTCATGTC"
     _, where = x.trim_on_abundance(s, 1)
-    assert where == 0                     # in future, should be ??
+    assert where >= 11
 
     _, where = x.trim_below_abundance(s, 2)
-    assert where == 0                     # in future, should be ??
+    assert where >= 11
 
-    with pytest.raises(ValueError):
-        posns = x.find_spectral_error_positions(s, 1)
-    # assert posns == []                    # in future, should return [11]
+    posns = x.find_spectral_error_positions(s, 1)
+    for p in posns:
+        assert p >= 11
 
 
 def test_read_cleaning_output_partitions(Graphtype):
@@ -224,7 +233,7 @@ def test_read_cleaning_output_partitions(Graphtype):
 
     read_names = [read.name for read in ReadParser(savepath)]
     print(read_names)
-    assert len(read_names) == 4
+    assert len(read_names) == 6
 
     print(read_names)
     assert '895:1:1:1246:14654 1:N:0:NNNNN\t1\t1' in read_names
@@ -232,9 +241,8 @@ def test_read_cleaning_output_partitions(Graphtype):
     assert '895:1:1:1252:19493 1:N:0:NNNNN\t3\t3' in read_names
 
     assert 'lowercase_to_uppercase\t5\t1' in read_names
-
-    assert 'n_in_read\t6\t2' not in read_names
-    assert 'zy_in_read\t7\t3' not in read_names
+    assert 'n_in_read\t6\t2' in read_names
+    assert 'zy_in_read\t7\t3' in read_names
 
 
 def test_read_cleaning_trim_on_stoptags(Graphtype):
@@ -256,13 +264,13 @@ def test_read_cleaning_trim_on_stoptags(Graphtype):
     x.add_stop_tag(kmer)
 
     _, pos = x.trim_on_stoptags('caggcgcccaccaccgtgccctccaacctgatggt')
-    assert pos == 6                       # should be ?? in future
+    assert pos == 35                      # no stoptag b/c lowercase => no trim
 
-    _, pos = x.trim_on_stoptags('CCGGCGTGGTTZZYAGGTCACTGAGCTTCATGTC')
-    assert pos == 0                       # should be 6 in future
+    _, pos = x.trim_on_stoptags('ACTGGGCGTAGNCGGTGTCCTCATCGGCACCAGC')
+    assert pos == 6                       # N ignored
 
     _, pos = x.trim_on_stoptags('CCGGCGTGGTTZZYAGGTCACTGAGCTTCATGTC')
-    assert pos == 0                       # should be 6 in future
+    assert pos == 6                       # ZZY ignored
 
 
 def test_consume_seqfile_and_tag(Graphtype):
@@ -272,7 +280,7 @@ def test_consume_seqfile_and_tag(Graphtype):
     x = Graphtype(8, PRIMES_1m)
     x.consume_seqfile_and_tag(infile)
     _, n_tags = x.count_partitions()
-    assert n_tags == 4                    # total # of tags
+    assert n_tags == 5                    # total # of tags
 
 
 def test_consume_partitioned_seqfile(Graphtype):
@@ -282,7 +290,7 @@ def test_consume_partitioned_seqfile(Graphtype):
     x = Graphtype(15, PRIMES_1m)
     x.consume_partitioned_fasta(infile)
     n_partitions, n_tags = x.count_partitions()
-    assert n_partitions == 4
+    assert n_partitions == 6
     assert n_tags == 0
 
 
@@ -299,11 +307,14 @@ def test_output_partitioned_file(Graphtype):
     read_names = set(read_names)
 
     good_names = ['895:1:1:1246:14654 1:N:0:NNNNN\t1\t5',
-                  '895:1:1:1248:9583 1:N:0:NNNNN\t2\t2',
+                  '895:1:1:1248:9583 1:N:0:NNNNN\t2\t6',
                   '895:1:1:1252:19493 1:N:0:NNNNN\t3\t3',
                   '895:1:1:1255:18861 1:N:0:NNNNN\t4\t8',
                   'lowercase_to_uppercase\t5\t5',
-                  '895:1:1:1255:18861 1:N:0:NNNNN\t8\t8']
+                  '895:1:1:1255:18861 1:N:0:NNNNN\t8\t8',
+                  'n_in_read\t6\t6',
+                  'zy_in_read\t7\t7',
+                  'bad_dna_in_beginning\t9\t9']
     good_names = set(good_names)
 
     assert good_names == read_names
@@ -317,7 +328,7 @@ def test_consume_seqfile_and_tag_with_labels(Graphtype):
     x = _GraphLabels(graph)
     x.consume_seqfile_and_tag_with_labels(infile)
 
-    assert x.n_labels() == 6
+    assert x.n_labels() == 9
 
 
 def test_consume_partitioned_seqfile_and_label(Graphtype):
@@ -328,7 +339,7 @@ def test_consume_partitioned_seqfile_and_label(Graphtype):
     x = _GraphLabels(graph)
     x.consume_partitioned_fasta_and_tag_with_labels(infile)
 
-    assert x.n_labels() == 6
+    assert x.n_labels() == 9
 
 
 # vim: set filetype=python tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
diff --git a/tests/test_subset_graph.py b/tests/test_subset_graph.py
index bab7b62..bbbadbb 100644
--- a/tests/test_subset_graph.py
+++ b/tests/test_subset_graph.py
@@ -557,6 +557,7 @@ def test_output_partitions():
     assert parts[1] == '3'
     assert parts[2] == '4'
 
+
 test_output_partitions.runme = True
 
 
@@ -610,6 +611,7 @@ def test_small_real_partitions():
     assert len(set(parts)) == 1
     assert set(parts) != set(['0'])
 
+
 test_small_real_partitions.runme = True
 
 first = """\
diff --git a/tests/test_tabletype.py b/tests/test_tabletype.py
index 0bbc280..68c522e 100644
--- a/tests/test_tabletype.py
+++ b/tests/test_tabletype.py
@@ -36,6 +36,7 @@ PRIMES_1m = [1000003, 1009837]
 def tabletype(request):
     return request.param
 
+
 # For map(long, [list of ints]) cross-version hackery
 if sys.version_info.major > 2:
     long = int  # pylint: disable=redefined-builtin
@@ -411,8 +412,8 @@ def test_set_bigcount(tabletype):
         tt.set_use_bigcount(True)
 
         for i in range(300):
-            tt.add('G'*12)
-        assert tt.get('G'*12) == 300
+            tt.add('G' * 12)
+        assert tt.get('G' * 12) == 300
 
     else:
         with pytest.raises(ValueError):
diff --git a/tests/test_threaded_sequence_processor.py b/tests/test_threaded_sequence_processor.py
index aaa7b37..16de18f 100644
--- a/tests/test_threaded_sequence_processor.py
+++ b/tests/test_threaded_sequence_processor.py
@@ -67,6 +67,7 @@ def load_records_d(stringio_fp):
 def idem(record):
     return record['name'], record['sequence']
 
+
 # keep every *other* sequence
 odd_counter = 0
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/khmer.git



More information about the debian-med-commit mailing list