changeset 14:3f0dd362b755 draft

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/meme commit 86a94f48321780dbe18ef5b099434c347ec2f4d0"
author iuc
date Wed, 11 Dec 2019 18:05:15 -0500
parents 57e5d9382f36
children 9dd5373f6a5a
files macros.xml meme.xml test-data/dreme_output_test1.html test-data/dreme_output_test1.txt test-data/dreme_output_test1.xml test-data/dreme_output_test2.html test-data/dreme_output_test2.txt test-data/dreme_output_test2.xml test-data/fimo_output_test1.gff test-data/fimo_output_test1.html test-data/fimo_output_test1.txt test-data/fimo_output_test1.xml test-data/fimo_output_test2.gff test-data/fimo_output_test2.html test-data/fimo_output_test2.txt test-data/fimo_output_test2.xml test-data/fimo_output_test3.html test-data/fimo_output_test3.txt test-data/fimo_output_test3.xml test-data/meme_output_test1.html test-data/meme_output_test1.txt test-data/meme_output_test1.xml test-data/meme_output_test2.html test-data/meme_output_test2.txt test-data/meme_output_test2.xml
diffstat 25 files changed, 143 insertions(+), 37468 deletions(-) [+]
line wrap: on
line diff
--- a/macros.xml	Thu May 17 14:10:48 2018 -0400
+++ b/macros.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -1,10 +1,9 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <macros>
-    <token name="@WRAPPER_VERSION@">4.12.0</token>
+    <token name="@WRAPPER_VERSION@">5.0.5</token>
     <xml name="requirements">
         <requirements>
-            <requirement type="package" version="1.3.23">graphicsmagick</requirement>
-            <requirement type="package" version="4.12.0">meme</requirement>
+            <requirement type="package" version="5.0.5">meme</requirement>
             <yield/>
         </requirements>
     </xml>
--- a/meme.xml	Thu May 17 14:10:48 2018 -0400
+++ b/meme.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -280,18 +280,18 @@
             <param name="input1" value="meme_input_1.fasta" ftype="fasta" dbkey="hg19"/>
             <param name="options_type_selector" value="basic"/>
             <param name="non_commercial_use" value="True"/>
-            <output name="html_outfile" file="meme_output_test1.html" lines_diff="20"/>
-            <output name="txt_outfile" file="meme_output_test1.txt" lines_diff="12"/>
-            <output name="xml_outfile" file="meme_output_test1.xml" lines_diff="8"/>
+            <output name="html_outfile" file="meme_output_test1.html" compare="contains"/>
+            <output name="txt_outfile" file="meme_output_test1.txt" compare="contains"/>
+            <output name="xml_outfile" file="meme_output_test1.xml" compare="contains"/>
         </test>
         <test>
             <param name="input1" value="meme_input_1.fasta" ftype="fasta" dbkey="hg19"/>
             <param name="options_type_selector" value="advanced"/>
             <param name="plib" value="prior30.plib" ftype="txt"/>
             <param name="non_commercial_use" value="True"/>
-            <output name="html_outfile" file="meme_output_test2.html" lines_diff="20"/>
-            <output name="txt_outfile" file="meme_output_test2.txt" lines_diff="12"/>
-            <output name="xml_outfile" file="meme_output_test2.xml" lines_diff="8"/>
+            <output name="html_outfile" file="meme_output_test2.html" compare="contains"/>
+            <output name="txt_outfile" file="meme_output_test2.txt" compare="contains"/>
+            <output name="xml_outfile" file="meme_output_test2.xml" compare="contains"/>
         </test>
     </tests>
     <help>
--- a/test-data/dreme_output_test1.html	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/dreme_output_test1.html	Wed Dec 11 18:05:15 2019 -0500
@@ -7,10 +7,9 @@
       // @JSON_VAR data
       var data = {
         "program": "dreme",
-        "version": "4.12.0",
-        "release": "Tue Jun 27 16:22:50 2017 -0700",
+        "version": "5.0.5",
         "cmd": [
-          "dreme", "-o", "./dreme_test1_out", "-p", "dreme_test_sites.fa",
+          "dreme", "-o", "./dreme_out", "-p",
           "-norc", "-rna", "-s", "1"
         ],
         "options": {
@@ -20,95 +19,19 @@
           "seed": 1,
           "stop": {
             "evalue": "0.05"
-          }
-        },
         "alphabet": {
           "name": "RNA",
           "like": "rna",
           "ncore": 4,
           "symbols": [
-            {
-              "symbol": "A",
-              "name": "Adenine",
-              "colour": "CC0000"
-            }, {
-              "symbol": "C",
-              "name": "Cytosine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "G",
-              "name": "Guanine",
-              "colour": "FFB300"
-            }, {
-              "symbol": "U",
-              "aliases": "T",
-              "name": "Uracil",
-              "colour": "008000"
-            }, {
-              "symbol": "N",
-              "aliases": "X.",
-              "name": "Any base",
-              "equals": "ACGU"
-            }, {
-              "symbol": "V",
-              "name": "Not U",
-              "equals": "ACG"
-            }, {
-              "symbol": "H",
-              "name": "Not G",
-              "equals": "ACU"
-            }, {
-              "symbol": "D",
-              "name": "Not C",
-              "equals": "AGU"
-            }, {
-              "symbol": "B",
-              "name": "Not A",
-              "equals": "CGU"
-            }, {
-              "symbol": "M",
-              "name": "Amino",
-              "equals": "AC"
-            }, {
-              "symbol": "R",
-              "name": "Purine",
-              "equals": "AG"
-            }, {
-              "symbol": "W",
-              "name": "Weak",
-              "equals": "AU"
-            }, {
-              "symbol": "S",
-              "name": "Strong",
-              "equals": "CG"
-            }, {
-              "symbol": "Y",
-              "name": "Pyrimidine",
-              "equals": "CU"
-            }, {
-              "symbol": "K",
-              "name": "Keto",
-              "equals": "GU"
-            }
-          ]
-        },
         "background": {
           "freqs": [0.221, 0.245, 0.221, 0.312]
-        },
-        "sequence_db": {
-          "name": "dreme test sites",
-          "file": "dreme_test_sites.fa",
-          "lmod": "Thu Apr 26 15:09:03 CEST 2018",
-          "count": 1000
-        },
         "control_db": {
           "name": "shuffled positive sequences",
           "from": "shuffled",
           "count": 1000,
           "freqs": [0.221, 0.245, 0.221, 0.312]
-        },
         "motifs": [
-          {
             "db": 0,
             "id": "UUYUCY",
             "alt": "DREME-1",
@@ -126,9 +49,7 @@
               [0.000000, 0.000000, 0.000000, 1.000000], 
               [0.000000, 1.000000, 0.000000, 0.000000], 
               [0.000000, 0.474946, 0.000000, 0.525054]
-            ],
             "matches": [
-              {
                 "seq": "UUUUCC",
                 "p": 147,
                 "n": 75,
@@ -140,6059 +61,53 @@
                 "n": 94,
                 "pvalue": "2.2e-005",
                 "evalue": "1.0e+000"
-              }, {
                 "seq": "UUCUCU",
                 "p": 94,
                 "n": 51,
                 "pvalue": "1.3e-004",
                 "evalue": "6.1e+000"
-              }, {
                 "seq": "UUCUCC",
                 "p": 75,
                 "n": 42,
                 "pvalue": "1.1e-003",
                 "evalue": "5.0e+001"
-              }
-            ]
-          }, {
-            "db": 0,
-            "id": "YAGG",
-            "alt": "DREME-2",
-            "len": 4,
-            "nsites": 793,
-            "evalue": "5.1e-012",
-            "p": 600,
-            "n": 416,
-            "pvalue": "1.1e-016",
-            "unerased_evalue": "2.4e-012",
-            "pwm": [
-              [0.000000, 0.692308, 0.000000, 0.307692], 
-              [1.000000, 0.000000, 0.000000, 0.000000], 
-              [0.000000, 0.000000, 1.000000, 0.000000], 
-              [0.000000, 0.000000, 1.000000, 0.000000]
-            ],
-            "matches": [
-              {
-                "seq": "CAGG",
-                "p": 441,
-                "n": 304,
-                "pvalue": "1.5e-010",
-                "evalue": "6.6e-006"
-              }, {
-                "seq": "UAGG",
-                "p": 232,
-                "n": 165,
-                "pvalue": "1.1e-004",
-                "evalue": "4.7e+000"
-              }
-            ]
-          }, {
-            "db": 0,
-            "id": "GAAGAW",
-            "alt": "DREME-3",
-            "len": 6,
-            "nsites": 89,
-            "evalue": "3.4e-005",
-            "p": 81,
-            "n": 22,
-            "pvalue": "8.2e-010",
-            "unerased_evalue": "3.5e-004",
-            "pwm": [
-              [0.000000, 0.000000, 1.000000, 0.000000], 
-              [1.000000, 0.000000, 0.000000, 0.000000], 
-              [1.000000, 0.000000, 0.000000, 0.000000], 
-              [0.000000, 0.000000, 1.000000, 0.000000], 
-              [1.000000, 0.000000, 0.000000, 0.000000], 
-              [0.494382, 0.000000, 0.000000, 0.505618]
-            ],
-            "matches": [
-              {
-                "seq": "GAAGAU",
-                "p": 45,
-                "n": 7,
-                "pvalue": "2.4e-008",
-                "evalue": "9.9e-004"
-              }, {
-                "seq": "GAAGAA",
-                "p": 40,
-                "n": 16,
-                "pvalue": "7.9e-004",
-                "evalue": "3.3e+001"
-              }
-            ]
-          }, {
-            "db": 0,
-            "id": "SMUGGA",
-            "alt": "DREME-4",
-            "len": 6,
-            "nsites": 119,
-            "evalue": "3.7e-003",
-            "p": 110,
-            "n": 47,
-            "pvalue": "9.1e-008",
-            "unerased_evalue": "2.6e-005",
-            "pwm": [
-              [0.000000, 0.529412, 0.470588, 0.000000], 
-              [0.428571, 0.571429, 0.000000, 0.000000], 
-              [0.000000, 0.000000, 0.000000, 1.000000], 
-              [0.000000, 0.000000, 1.000000, 0.000000], 
-              [0.000000, 0.000000, 1.000000, 0.000000], 
-              [1.000000, 0.000000, 0.000000, 0.000000]
-            ],
-            "matches": [
-              {
-                "seq": "GAUGGA",
-                "p": 22,
-                "n": 6,
-                "pvalue": "1.7e-003",
-                "evalue": "7.1e+001"
-              }, {
-                "seq": "GCUGGA",
-                "p": 33,
-                "n": 14,
-                "pvalue": "3.6e-003",
-                "evalue": "1.5e+002"
-              }, {
-                "seq": "CCUGGA",
-                "p": 32,
-                "n": 15,
-                "pvalue": "8.6e-003",
-                "evalue": "3.5e+002"
-              }, {
-                "seq": "CAUGGA",
-                "p": 29,
-                "n": 13,
-                "pvalue": "9.1e-003",
-                "evalue": "3.7e+002"
-              }
-            ]
-          }
-        ],
-        "runtime": {
-          "host": "ThinkPad-T450s",
-          "when": "Thu May 03 13:22:29 CEST 2018",
-          "cpu": 13.95,
-          "real": 13.95,
-          "stop": "evalue"
-        }
-      };
-    </script>
     <script>
 var site_url = "http://meme-suite.org";
 </script>
-    <script>
-
-/*
- * $
- *
- * Shorthand function for getElementById
- */
-function $(el) {
-  return document.getElementById(el);
-}
-
-
-/*
- * See http://stackoverflow.com/a/5450113/66387
- * Does string multiplication like the perl x operator.
- */
-function string_mult(pattern, count) {
-    if (count < 1) return '';
-    var result = '';
-    while (count > 1) {
-        if (count & 1) result += pattern;
-        count >>= 1, pattern += pattern;
-    }
-    return result + pattern;
-}
-
-/*
- * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript
- * Slightly modified with information from
- * https://developer.mozilla.org/en/DOM/window.location
- */
-function parse_params() {
-  "use strict";
-  var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v;
-  search = window.location.search;
-  queryStart = search.indexOf("?") + 1;
-  queryEnd   = search.indexOf("#") + 1 || search.length + 1;
-  query      = search.slice(queryStart, queryEnd - 1);
-
-  if (query === search || query === "") return {};
-
-  params  = {};
-  nvPairs = query.replace(/\+/g, " ").split("&");
-
-  for (i = 0; i < nvPairs.length; i++) {
-    nv = nvPairs[i].split("=");
-    n  = decodeURIComponent(nv[0]);
-    v  = decodeURIComponent(nv[1]);
-    // allow a name to be used multiple times
-    // storing each value in the array
-    if (!(n in params)) {
-      params[n] = [];
-    }
-    params[n].push(nv.length === 2 ? v : null);
-  }
-  return params;
-}
-
-/*
- * coords
- *
- * Calculates the x and y offset of an element.
- * From http://www.quirksmode.org/js/findpos.html
- * with alterations to take into account scrolling regions
- */
-function coords(elem) {
-  var myX = myY = 0;
-  if (elem.getBoundingClientRect) {
-    var rect;
-    rect = elem.getBoundingClientRect();
-    myX = rect.left + ((typeof window.pageXOffset !== "undefined") ?
-        window.pageXOffset : document.body.scrollLeft);
-    myY = rect.top + ((typeof window.pageYOffset !== "undefined") ?
-        window.pageYOffset : document.body.scrollTop);
-  } else {
-    // this fall back doesn't properly handle absolutely positioned elements
-    // inside a scrollable box
-    var node;
-    if (elem.offsetParent) {
-      // subtract all scrolling
-      node = elem;
-      do {
-        myX -= node.scrollLeft ? node.scrollLeft : 0;
-        myY -= node.scrollTop ? node.scrollTop : 0;
-      } while (node = node.parentNode);
-      // this will include the page scrolling (which is unwanted) so add it back on
-      myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft;
-      myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop;
-      // sum up offsets
-      node = elem;
-      do {
-        myX += node.offsetLeft;
-        myY += node.offsetTop;
-      } while (node = node.offsetParent);
-    }
-  }
-  return [myX, myY];
-}
-
-/*
- * position_popup
- *
- * Positions a popup relative to an anchor element.
- *
- * The avaliable positions are:
- * 0 - Centered below the anchor.
- */
-function position_popup(anchor, popup, position) {
-  "use strict";
-  var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h;
-  var a_xy, spacer, margin, scrollbar, page_w;
-  // define constants
-  spacer = 5;
-  margin = 15;
-  scrollbar = 15;
-  // define the positions and widths
-  a_xy = coords(anchor);
-  a_x = a_xy[0];
-  a_y = a_xy[1];
-  a_w = anchor.offsetWidth;
-  a_h = anchor.offsetHeight;
-  p_w = popup.offsetWidth;
-  p_h = popup.offsetHeight;
-  page_w = null;
-  if (window.innerWidth) {
-    page_w = window.innerWidth;
-  } else if (document.body) {
-    page_w = document.body.clientWidth;
-  }
-  // check the position type is defined
-  if (typeof position !== "number") {
-    position = 0;
-  }
-  // calculate the popup position
-  switch (position) {
-    case 1:
-      p_x = a_x + a_w + spacer;
-      p_y = a_y + (a_h / 2) - (p_h / 2);
-      break;
-    case 0:
-    default:
-      p_x = a_x + (a_w / 2) - (p_w / 2);
-      p_y = a_y + a_h + spacer;
-      break;
-  }
-  // constrain the popup position
-  if (p_x < margin) {
-    p_x = margin;
-  } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) {
-    p_x = page_w - margin - scrollbar - p_w;
-  }
-  if (p_y < margin) {
-    p_y = margin;
-  }
-  // position the popup
-  popup.style.left = p_x + "px";
-  popup.style.top = p_y + "px";
-}
-
-function lookup_help_popup(popup_id) {
-  var _body, pop, info;
-  pop = document.getElementById(popup_id);
-  if (pop == null) {
-    _body = document.getElementsByTagName("body")[0];
-    pop = document.createElement("div");
-    pop.className = "pop_content";
-    pop.id = popup_id;
-    pop.style.backgroundColor = "#FFC";
-    pop.style.borderColor = "black";
-    info = document.createElement("p");
-    info.style.fontWeight = "bold";
-    info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\"."));
-    pop.appendChild(info);
-    // this might cause problems with the menu, but as this only happens
-    // when something is already wrong I don't think that's too much of a problem
-    _body.insertBefore(pop, _body.firstChild);
-  }
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) {
-    if (!/\bauto_buttons\b/.test(pop.className)) {
-      pop.className += " auto_buttons";
-      var back_btn_sec = document.createElement("div");
-      back_btn_sec.className = "nested_only pop_back_sec";
-      var back_btn = document.createElement("span");
-      back_btn.className = "pop_back";
-      back_btn.appendChild(document.createTextNode("<< back"));
-      back_btn.addEventListener("click", function(e) {
-        help_return();
-      }, false);
-      back_btn_sec.appendChild(back_btn);
-      pop.insertBefore(back_btn_sec, pop.firstChild);
-      var close_btn_sec = document.createElement("div");
-      close_btn_sec.className = "pop_close_sec";
-      var close_btn = document.createElement("span");
-      close_btn.className = "pop_close";
-      close_btn.appendChild(document.createTextNode("close"));
-      close_btn.addEventListener("click", function(e) {
-        help_popup();
-      }, false);
-      close_btn_sec.appendChild(close_btn);
-      pop.appendChild(close_btn_sec);
-    }
-  }
-  return pop;
-}
-
-/*
- * help_popup
- *
- * Moves around help pop-ups so they appear
- * below an activator.
- */
-function help_popup(activator, popup_id) {
-  "use strict";
-  var pop;
-  // set default values
-  if (typeof help_popup.popup === "undefined") {
-    help_popup.popup = [];
-  }
-  if (typeof help_popup.activator === "undefined") {
-    help_popup.activator = null;
-  }
-  var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (typeof(activator) == "undefined") { // no activator so hide
-    if (last_pop != null) {
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-    }
-    return;
-  }
-  pop = lookup_help_popup(popup_id);
-  if (pop == last_pop) {
-    if (activator == help_popup.activator) {
-      //hide popup (as we've already shown it for the current help button)
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-      return; // toggling complete!
-    }
-  } else if (last_pop != null) {
-    //activating different popup so hide current one
-    last_pop.style.display = 'none';
-  }
-  help_popup.popup = [pop];
-  help_popup.activator = activator;
-  toggle_class(pop, "nested", false);
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = 'block';
-  position_popup(activator, pop);
-}
-
-/*
- * help_refine
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_refine(popup_id) {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not refine a help popup when one is not shown!");
-  }
-  var pop = lookup_help_popup(popup_id);
-  var last_pop = help_popup.popup[help_popup.popup.length - 1];
-  if (pop == last_pop) return; // slightly odd, but no real cause for alarm
-  help_popup.popup.push(pop);
-  toggle_class(pop, "nested", true);
-  last_pop.style.display = "none";
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = "block";
-  position_popup(help_popup.activator, pop);
-}
-
-/*
- * help_return
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_return() {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not return to a earlier help popup when one is not shown!");
-  }
-  var last_pop = help_popup.popup.pop();
-  last_pop.style.display = "none";
-  var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (pop != null) {
-    toggle_class(pop, "nested", help_popup.popup.length > 1);
-    pop.style.display = "block";
-    position_popup(help_popup.activator, pop);
-  } else {
-    help_popup.activator = null;
-  }
-}
-
-/*
- * update_scroll_pad
- *
- * Creates padding at the bottom of the page to allow
- * scrolling of anything into view.
- */
-function update_scroll_pad() {
-  var page, pad;
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  pad = $("scrollpad");
-  if (pad === null) {
-    pad = document.createElement("div");
-    pad.id = 'scrollpad';
-    document.getElementsByTagName('body')[0].appendChild(pad);
-  }
-  pad.style.height = Math.abs(page.clientHeight - 100) + "px";
-}
-
-function substitute_classes(node, remove, add) {
-  "use strict";
-  var list, all, i, cls, classes;
-  list = node.className.split(/\s+/);
-  all = {};
-  for (i = 0; i < list.length; i++) {
-    if (list[i].length > 0) all[list[i]] = true;
-  }
-  for (i = 0; i < remove.length; i++) {
-    if (all.hasOwnProperty(remove[i])) {
-      delete all[remove[i]];
-    }
-  }
-  for (i = 0; i < add.length; i++) {
-    all[add[i]] = true;
-  }
-  classes = "";
-  for (cls in all) {
-    classes += cls + " ";
-  }
-  node.className = classes;
-}
-
-/*
- * toggle_class
- *
- * Adds or removes a class from the node. If the parameter 'enabled' is not 
- * passed then the existence of the class will be toggled, otherwise it will be
- * included if enabled is true.
- */
-function toggle_class(node, cls, enabled) {
-  var classes = node.className;
-  var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/);
-  var found = false;
-  for (var i = 0; i < list.length; i++) {
-    if (list[i] == cls) {
-      list.splice(i, 1);
-      i--;
-      found = true;
-    }
-  }
-  if (typeof enabled == "undefined") {
-    if (!found) list.push(cls);
-  } else {
-    if (enabled) list.push(cls);
-  }
-  node.className = list.join(" ");
-}
-
-/*
- * find_child
- *
- * Searches child nodes in depth first order and returns the first it finds
- * with the className specified.
- * TODO replace with querySelector
- */
-function find_child(node, className) {
-  var pattern;
-  if (node == null || typeof node !== "object") {
-    return null;
-  }
-  if (typeof className === "string") {
-    pattern = new RegExp("\\b" + className + "\\b");
-  } else {
-    pattern = className;
-  }
-  if (node.nodeType == Node.ELEMENT_NODE && 
-      pattern.test(node.className)) {
-    return node;
-  } else {
-    var result = null;
-    for (var i = 0; i < node.childNodes.length; i++) {
-      result = find_child(node.childNodes[i], pattern);
-      if (result != null) break;
-    }
-    return result;
-  }
-}
-
-/*
- * find_parent
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the className specified.
- */
-function find_parent(node, className) {
-  var pattern;
-  pattern = new RegExp("\\b" + className + "\\b");
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && 
-        pattern.test(node.className)) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * find_parent_tag
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the tag name specified. HTML tags should be specified in upper case.
- */
-function find_parent_tag(node, tag_name) {
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * __toggle_help
- *
- * Uses the 'topic' property of the this object to
- * toggle display of a help topic.
- *
- * This function is not intended to be called directly.
- */
-function __toggle_help(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-
-  help_popup(this, this.getAttribute("data-topic"));
-}
-
-function setup_help_button(button) {
-  "use strict";
-  var topic;
-  if (button.hasAttribute("data-topic")) {
-    topic = button.getAttribute("data-topic");
-    if (document.getElementById(topic) != null) {
-      button.tabIndex = "0"; // make keyboard selectable
-      button.addEventListener("click", function() {
-        help_popup(button, topic);
-      }, false);
-      button.addEventListener("keydown", function(e) {
-        // toggle only on Enter or Spacebar, let other keys do their thing
-        if (e.keyCode !== 13 && e.keyCode !== 32) return;
-        // stop a submit or something like that
-        e.preventDefault();
-        help_popup(button, topic);
-      }, false);
-    } else {
-      button.style.visibility = "hidden";
-    }
-  }
-  button.className += " active";
-}
-
-/*
- * help_button
- *
- * Makes a help button for the passed topic.
- */
-function help_button(topic) {
-  var btn = document.createElement("div");
-  btn.className = "help";
-  btn.setAttribute("data-topic", topic);
-  setup_help_button(btn);
-  return btn;
-}
-
-/*
- * prepare_download
- *
- * Sets the attributes of a link to setup a file download using the given content.
- * If no link is provided then create one and click it.
- */
-function prepare_download(content, mimetype, filename, link) {
-  "use strict";
-  // if no link is provided then create one and click it
-  var click_link = false;
-  if (!link) {
-    link = document.createElement("a");
-    click_link = true;
-  }
-  try {
-    // Use a BLOB to convert the text into a data URL.
-    // We could do this manually with a base 64 conversion.
-    // This will only be supported on modern browsers,
-    // hence the try block.
-    var blob = new Blob([content], {type: mimetype});
-    var reader = new FileReader();
-    reader.onloadend = function() {
-      // If we're lucky the browser will also support the download
-      // attribute which will let us suggest a file name to save the link.
-      // Otherwise it is likely that the filename will be unintelligible. 
-      link.setAttribute("download", filename);
-      link.href = reader.result;
-      if (click_link) {
-        // must add the link to click it
-        document.body.appendChild(link);
-        link.click();
-        document.body.removeChild(link);
-      }
-    }
-    reader.readAsDataURL(blob);
-  } catch (error) {
-    if (console && console.log) console.log(error);
-    // probably an old browser
-    link.href = "";
-    link.visible = false;
-  }
-}
-
-/*
- * add_cell
- *
- * Add a cell to the table row.
- */
-function add_cell(row, node, cls, click_action) {
-  var cell = row.insertCell(row.cells.length);
-  if (node) cell.appendChild(node);
-  if (cls && cls !== "") cell.className = cls;
-  if (click_action) cell.addEventListener("click", click_action, false);
-}
-
-/*
- * add_header_cell
- *
- * Add a header cell to the table row.
- */
-function add_header_cell(row, node, help_topic, cls, colspan) {
-  var th = document.createElement("th");
-  if (node) th.appendChild(node);
-  if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic));
-  if (cls && cls !== "") th.className = cls;
-  if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan;
-  row.appendChild(th);
-}
-
-/*
- * add_text_cell
- *
- * Add a text cell to the table row.
- */
-function add_text_cell(row, text, cls, action) {
-  var node = null;
-  if (typeof(text) != 'undefined') node = document.createTextNode(text);
-  add_cell(row, node, cls, action);
-}
-
-/*
- * add_text_header_cell
- *
- * Add a text header cell to the table row.
- */
-function add_text_header_cell(row, text, help_topic, cls, action, colspan) {
-  var node = null;
-  if (typeof(text) != 'undefined') {
-    var nbsp = (help_topic ? "\u00A0" : "");
-    var str = "" + text;
-    var parts = str.split(/\n/);
-    if (parts.length === 1) {
-      if (action) {
-        node = document.createElement("span");
-        node.appendChild(document.createTextNode(str + nbsp));
-      } else {
-        node = document.createTextNode(str + nbsp);
-      }
-    } else {
-      node = document.createElement("span");
-      for (var i = 0; i < parts.length; i++) {
-        if (i !== 0) {
-          node.appendChild(document.createElement("br"));
-        }
-        node.appendChild(document.createTextNode(parts[i]));
-      }
-    }
-    if (action) {
-      node.addEventListener("click", action, false);
-      node.style.cursor = "pointer";
-    }
-  }
-  add_header_cell(row, node, help_topic, cls, colspan);
-}
-
-function setup_help() {
-  "use strict";
-  var help_buttons, i;
-  help_buttons = document.querySelectorAll(".help:not(.active)");
-  for (i = 0; i < help_buttons.length; i++) {
-    setup_help_button(help_buttons[i]);
-  }
-}
-
-function setup_scrollpad() {
-  "use strict";
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) {
-    window.addEventListener("resize", update_scroll_pad, false);
-    update_scroll_pad();
-  }
-}
-
-// anon function to avoid polluting global scope
-(function() {
-  "use strict";
-  window.addEventListener("load", function load(evt) {
-    window.removeEventListener("load", load, false);
-    setup_help();
-    setup_scrollpad();
-  }, false);
-})();
-
-/*
- *  make_link
- *
- *  Creates a text node and if a URL is specified it surrounds it with a link.
- *  If the URL doesn't begin with "http://" it automatically adds it, as
- *  relative links don't make much sense in this context.
- */
-function make_link(text, url) {
-  var textNode = null;
-  var link = null;
-  if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text);
-  if (typeof url === "string") {
-    if (url.indexOf("//") == -1) {
-      url = "http://" + url;
-    }
-    link = document.createElement('a');
-    link.href = url;
-    if (textNode) link.appendChild(textNode);
-    return link;
-  }
-  return textNode;
-}
-</script>
-    <script>
-function motif_logo_template(inputs) {
-  function _input(name) {
-    if (typeof inputs[name] === "undefined") {
-      throw new Error("Missing template variable: " + name);
-    }
-    return inputs[name];
-  }
-  return (
-"%!PS-Adobe-3.0 EPSF-3.0\n" +
-"%%Title: Sequence Logo : " + _input("TITLE") + "\n" +
-"%%Creator: " + _input("CREATOR") + "\n" +
-"%%CreationDate: " + _input("CREATIONDATE") + "\n" +
-"%%BoundingBox:   0  0  " + _input("BOUNDINGWIDTH") + " " + _input("BOUNDINGHEIGHT") + " \n" +
-"%%Pages: 0\n" +
-"%%DocumentFonts: \n" +
-"%%EndComments\n" +
-"\n" +
-"% ---- CONSTANTS ----\n" +
-"\/cmfactor 72 2.54 div def % defines points -> cm conversion\n" +
-"\/cm {cmfactor mul} bind def % defines centimeters\n" +
-"\n" +
-"% ---- VARIABLES ----\n" +
-"\n" +
-"% NA = Nucleic Acid, AA = Amino Acid\n" +
-"\/logoType (" + _input("LOGOTYPE") + ") def \n" +
-"\n" +
-"\/logoTitle (" + _input("TITLE") + ") def\n" +
-"\n" +
-"% Dimensions in cm\n" +
-"\/logoWidth " + _input("LOGOWIDTH") + " cm def\n" +
-"\/logoHeight " + _input("LOGOLINEHEIGHT") + " cm def\n" +
-"\/totalHeight " + _input("LOGOHEIGHT") + " cm def\n" +
-"\n" +
-"\/yaxis " + _input("YAXIS") + " def\n" +
-"\/yaxisLabel (" + _input("YAXISLABEL") + ") def\n" +
-"\/yaxisBits  " + _input("BARBITS") + " def % bits\n" +
-"\/yaxisTicBits " + _input("TICBITS") + " def\n" +
-"\n" +
-"\/xaxis " + _input("NUMBERING") + " def\n" +
-"\/xaxisLabel (" + _input("XAXISLABEL") + ") def\n" +
-"\/showEnds (" + _input("SHOWENDS") + ") def \n" +
-"\n" +
-"\/showFineprint true def\n" +
-"\/fineprint (" + _input("FINEPRINT") + ") def\n" +
-"\n" +
-"\/charsPerLine " + _input("CHARSPERLINE") + " def\n" +
-"\n" +
-"\/showingBox " + _input("SHOWINGBOX") + " def    \n" +
-"\/shrinking false def   % true falses\n" +
-"\/shrink  1.0 def\n" +
-"\/outline " + _input("OUTLINE") + " def\n" +
-"\n" +
-"\/IbeamFraction  " + _input("ERRORBARFRACTION") + " def\n" +
-"\/IbeamGray      0.50 def\n" +
-"\/IbeamLineWidth 0.5 def\n" +
-"\n" +
-"\/fontsize       " + _input("FONTSIZE") + " def\n" +
-"\/titleFontsize  " + _input("TITLEFONTSIZE") + " def\n" +
-"\/smallFontsize  " + _input("SMALLFONTSIZE") + " def\n" +
-"\n" +
-"\/topMargin      " + _input("TOPMARGIN") + " cm def\n" +
-"\/bottomMargin   " + _input("BOTTOMMARGIN") + " cm def\n" +
-"\n" +
-"\/defaultColor [0 0 0] def \n" +
-"\n" +
-_input("COLORDICT") + "\n" +
-"\n" +
-"\/colorDict fullColourDict def\n" +
-"\n" +
-"% ---- DERIVED PARAMETERS ----\n" +
-"\n" +
-"\/leftMargin\n" +
-"  fontsize 3.5 mul\n" +
-"\n" +
-"def \n" +
-"\n" +
-"\/rightMargin \n" +
-"  %Add extra room if showing ends\n" +
-"  showEnds (false) eq { fontsize}{fontsize 1.5 mul} ifelse\n" +
-"def\n" +
-"\n" +
-"\/yaxisHeight \n" +
-"  logoHeight \n" +
-"  bottomMargin sub  \n" +
-"  topMargin sub\n" +
-"def\n" +
-"\n" +
-"\/ticWidth fontsize 2 div def\n" +
-"\n" +
-"\/pointsPerBit yaxisHeight yaxisBits div  def\n" +
-"\n" +
-"\/stackMargin 1 def\n" +
-"\n" +
-"% Do not add space aroung characters if characters are boxed\n" +
-"\/charRightMargin \n" +
-"  showingBox { 0.0 } {stackMargin} ifelse\n" +
-"def\n" +
-"\n" +
-"\/charTopMargin \n" +
-"  showingBox { 0.0 } {stackMargin} ifelse\n" +
-"def\n" +
-"\n" +
-"\/charWidth\n" +
-"  logoWidth\n" +
-"  leftMargin sub\n" +
-"  rightMargin sub\n" +
-"  charsPerLine div\n" +
-"  charRightMargin sub\n" +
-"def\n" +
-"\n" +
-"\/charWidth4 charWidth 4 div def\n" +
-"\/charWidth2 charWidth 2 div def\n" +
-"\n" +
-"\/stackWidth \n" +
-"  charWidth charRightMargin add\n" +
-"def\n" +
-" \n" +
-"\/numberFontsize \n" +
-"  fontsize charWidth lt {fontsize}{charWidth} ifelse\n" +
-"def\n" +
-"\n" +
-"% movements to place 5'\/N and 3'\/C symbols\n" +
-"\/leftEndDeltaX  fontsize neg         def\n" +
-"\/leftEndDeltaY  fontsize 1.5 mul neg def\n" +
-"\/rightEndDeltaX fontsize 0.25 mul     def\n" +
-"\/rightEndDeltaY leftEndDeltaY        def\n" +
-"\n" +
-"% Outline width is proporional to charWidth, \n" +
-"% but no less that 1 point\n" +
-"\/outlinewidth \n" +
-"  charWidth 32 div dup 1 gt  {}{pop 1} ifelse\n" +
-"def\n" +
-"\n" +
-"\n" +
-"% ---- PROCEDURES ----\n" +
-"\n" +
-"\/StartLogo { \n" +
-"  % Save state\n" +
-"  save \n" +
-"  gsave \n" +
-"\n" +
-"  % Print Logo Title, top center \n" +
-"  gsave \n" +
-"    SetStringFont\n" +
-"\n" +
-"    logoWidth 2 div\n" +
-"    logoTitle\n" +
-"    stringwidth pop 2 div sub\n" +
-"    totalHeight\n" +
-"    titleFontsize sub\n" +
-"    moveto\n" +
-"\n" +
-"    logoTitle\n" +
-"    show\n" +
-"  grestore\n" +
-"\n" +
-"  % Print X-axis label, bottom center\n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"\n" +
-"    logoWidth 2 div\n" +
-"    xaxisLabel\n" +
-"    stringwidth pop 2 div sub\n" +
-"    0\n" +
-"    titleFontsize 3 div\n" +
-"    add\n" +
-"    moveto\n" +
-"\n" +
-"    xaxisLabel\n" +
-"    show\n" +
-"  grestore\n" +
-"\n" +
-"  % Show Fine Print\n" +
-"  showFineprint {\n" +
-"    gsave\n" +
-"      SetSmallFont\n" +
-"      logoWidth\n" +
-"        fineprint stringwidth pop sub\n" +
-"        smallFontsize sub\n" +
-"          smallFontsize 3 div\n" +
-"      moveto\n" +
-"    \n" +
-"      fineprint show\n" +
-"    grestore\n" +
-"  } if\n" +
-"\n" +
-"  % Move to lower left corner of last line, first stack\n" +
-"  leftMargin bottomMargin translate\n" +
-"\n" +
-"  % Move above first line ready for StartLine \n" +
-"  0 totalHeight translate\n" +
-"\n" +
-"  SetLogoFont\n" +
-"} bind def\n" +
-"\n" +
-"\/EndLogo { \n" +
-"  grestore \n" +
-"  showpage \n" +
-"  restore \n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/StartLine { \n" +
-"  % move down to the bottom of the line:\n" +
-"  0 logoHeight neg translate\n" +
-"  \n" +
-"  gsave \n" +
-"    yaxis { MakeYaxis } if\n" +
-"    xaxis { showEnds (true) eq {ShowLeftEnd} if } if\n" +
-"} bind def\n" +
-"\n" +
-"\/EndLine{ \n" +
-"    xaxis { showEnds (true) eq {ShowRightEnd} if } if\n" +
-"  grestore \n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/MakeYaxis {\n" +
-"  gsave    \n" +
-"    stackMargin neg 0 translate\n" +
-"    ShowYaxisBar\n" +
-"    ShowYaxisLabel\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowYaxisBar { \n" +
-"  gsave  \n" +
-"    SetStringFont\n" +
-"\n" +
-"    \/str 10 string def % string to hold number  \n" +
-"    \/smallgap stackMargin 2 div def\n" +
-"\n" +
-"    % Draw first tic and bar\n" +
-"    gsave    \n" +
-"      ticWidth neg 0 moveto \n" +
-"      ticWidth 0 rlineto \n" +
-"      0 yaxisHeight rlineto\n" +
-"      stroke\n" +
-"    grestore\n" +
-"\n" +
-"   \n" +
-"    % Draw the tics\n" +
-"    % initial increment limit proc for\n" +
-"    0 yaxisTicBits yaxisBits abs %cvi\n" +
-"    {\/loopnumber exch def\n" +
-"\n" +
-"      % convert the number coming from the loop to a string\n" +
-"      % and find its width\n" +
-"      loopnumber 10 str cvrs\n" +
-"      \/stringnumber exch def % string representing the number\n" +
-"\n" +
-"      stringnumber stringwidth pop\n" +
-"      \/numberwidth exch def % width of number to show\n" +
-"\n" +
-"      \/halfnumberheight\n" +
-"         stringnumber CharBoxHeight 2 div\n" +
-"      def\n" +
-"\n" +
-"      numberwidth % move back width of number\n" +
-"      neg loopnumber pointsPerBit mul % shift on y axis\n" +
-"      halfnumberheight sub % down half the digit\n" +
-"\n" +
-"      moveto % move back the width of the string\n" +
-"\n" +
-"      ticWidth neg smallgap sub % Move back a bit more  \n" +
-"      0 rmoveto % move back the width of the tic  \n" +
-"\n" +
-"      stringnumber show\n" +
-"      smallgap 0 rmoveto % Make a small gap  \n" +
-"\n" +
-"      % now show the tic mark\n" +
-"      0 halfnumberheight rmoveto % shift up again\n" +
-"      ticWidth 0 rlineto\n" +
-"      stroke\n" +
-"    } for\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\/ShowYaxisLabel {\n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"\n" +
-"    % How far we move left depends on the size of\n" +
-"    % the tic labels.\n" +
-"    \/str 10 string def % string to hold number  \n" +
-"    yaxisBits yaxisTicBits div cvi yaxisTicBits mul \n" +
-"    str cvs stringwidth pop\n" +
-"    ticWidth 1.5 mul  add neg  \n" +
-"\n" +
-"\n" +
-"    yaxisHeight\n" +
-"    yaxisLabel stringwidth pop\n" +
-"    sub 2 div\n" +
-"\n" +
-"    translate\n" +
-"    90 rotate\n" +
-"    0 0 moveto\n" +
-"    yaxisLabel show\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/StartStack {  % <stackNumber> startstack\n" +
-"  xaxis {MakeNumber}{pop} ifelse\n" +
-"  gsave\n" +
-"} bind def\n" +
-"\n" +
-"\/EndStack {\n" +
-"  grestore\n" +
-"  stackWidth 0 translate\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"% Draw a character whose height is proportional to symbol bits\n" +
-"\/MakeSymbol{ % charbits character MakeSymbol\n" +
-"  gsave\n" +
-"    \/char exch def\n" +
-"    \/bits exch def\n" +
-"\n" +
-"    \/bitsHeight \n" +
-"       bits pointsPerBit mul \n" +
-"    def\n" +
-"\n" +
-"    \/charHeight \n" +
-"       bitsHeight charTopMargin sub\n" +
-"       dup \n" +
-"       0.0 gt {}{pop 0.0} ifelse % if neg replace with zero \n" +
-"    def \n" +
-" \n" +
-"    charHeight 0.0 gt {\n" +
-"      char SetColor\n" +
-"      charWidth charHeight char ShowChar\n" +
-"\n" +
-"      showingBox { % Unfilled box\n" +
-"        0 0 charWidth charHeight false ShowBox\n" +
-"      } if\n" +
-"\n" +
-"\n" +
-"    } if\n" +
-"\n" +
-"  grestore\n" +
-"\n" +
-"  0 bitsHeight translate \n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowChar { % <width> <height> <char> ShowChar\n" +
-"  gsave\n" +
-"    \/tc exch def    % The character\n" +
-"    \/ysize exch def % the y size of the character\n" +
-"    \/xsize exch def % the x size of the character\n" +
-"\n" +
-"    \/xmulfactor 1 def \n" +
-"    \/ymulfactor 1 def\n" +
-"    \/limmulfactor 0.01 def\n" +
-"    \/drawable true def\n" +
-"\n" +
-"  \n" +
-"    % if ysize is negative, make everything upside down!\n" +
-"    ysize 0 lt {\n" +
-"      % put ysize normal in this orientation\n" +
-"      \/ysize ysize abs def\n" +
-"      xsize ysize translate\n" +
-"      180 rotate\n" +
-"    } if\n" +
-"\n" +
-"    shrinking {\n" +
-"      xsize 1 shrink sub 2 div mul\n" +
-"        ysize 1 shrink sub 2 div mul translate \n" +
-"\n" +
-"      shrink shrink scale\n" +
-"    } if\n" +
-"\n" +
-"    % Calculate the font scaling factors\n" +
-"    % Loop twice to catch small correction due to first scaling\n" +
-"    2 {\n" +
-"      gsave\n" +
-"        xmulfactor ymulfactor scale\n" +
-"      \n" +
-"        ysize % desired size of character in points\n" +
-"        tc CharBoxHeight \n" +
-"        dup 0.0 ne {\n" +
-"          div % factor by which to scale up the character\n" +
-"          \/ymulfactor exch def\n" +
-"        } % end if\n" +
-"        {pop pop}\n" +
-"        ifelse\n" +
-"\n" +
-"        xsize % desired size of character in points\n" +
-"        tc CharBoxWidth  \n" +
-"        dup 0.0 ne {\n" +
-"          div % factor by which to scale up the character\n" +
-"          \/xmulfactor exch def\n" +
-"        } % end if\n" +
-"        {pop pop}\n" +
-"        ifelse\n" +
-"      grestore\n" +
-"      % if the multiplication factors get too small we need to avoid a crash\n" +
-"      xmulfactor limmulfactor lt {\n" +
-"        \/xmulfactor 1 def\n" +
-"        \/drawable false def\n" +
-"      } if\n" +
-"      ymulfactor limmulfactor lt {\n" +
-"        \/ymulfactor 1 def\n" +
-"        \/drawable false def\n" +
-"      } if\n" +
-"    } repeat\n" +
-"\n" +
-"    % Adjust horizontal position if the symbol is an I\n" +
-"    tc (I) eq {\n" +
-"      charWidth 2 div % half of requested character width\n" +
-"      tc CharBoxWidth 2 div % half of the actual character\n" +
-"      sub 0 translate\n" +
-"      % Avoid x scaling for I \n" +
-"      \/xmulfactor 1 def \n" +
-"    } if\n" +
-"\n" +
-"\n" +
-"    % ---- Finally, draw the character\n" +
-"    drawable { \n" +
-"      newpath\n" +
-"      xmulfactor ymulfactor scale\n" +
-"\n" +
-"      % Move lower left corner of character to start point\n" +
-"      tc CharBox pop pop % llx lly : Lower left corner\n" +
-"      exch neg exch neg\n" +
-"      moveto\n" +
-"\n" +
-"      outline {  % outline characters:\n" +
-"        outlinewidth setlinewidth\n" +
-"        tc true charpath\n" +
-"        gsave 1 setgray fill grestore\n" +
-"        clip stroke\n" +
-"      } { % regular characters\n" +
-"        tc show\n" +
-"      } ifelse\n" +
-"    } if\n" +
-"\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowBox { % x1 y1 x2 y2 filled ShowBox\n" +
-"  gsave\n" +
-"    \/filled exch def \n" +
-"    \/y2 exch def\n" +
-"    \/x2 exch def\n" +
-"    \/y1 exch def\n" +
-"    \/x1 exch def\n" +
-"    newpath\n" +
-"    x1 y1 moveto\n" +
-"    x2 y1 lineto\n" +
-"    x2 y2 lineto\n" +
-"    x1 y2 lineto\n" +
-"    closepath\n" +
-"\n" +
-"    clip\n" +
-"    \n" +
-"    filled {\n" +
-"      fill\n" +
-"    }{ \n" +
-"      0 setgray stroke   \n" +
-"    } ifelse\n" +
-"\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/MakeNumber { % number MakeNumber\n" +
-"  gsave\n" +
-"    SetNumberFont\n" +
-"    stackWidth 0 translate\n" +
-"    90 rotate % rotate so the number fits\n" +
-"    dup stringwidth pop % find the length of the number\n" +
-"    neg % prepare for move\n" +
-"    stackMargin sub % Move back a bit\n" +
-"    charWidth (0) CharBoxHeight % height of numbers\n" +
-"    sub 2 div %\n" +
-"    moveto % move back to provide space\n" +
-"    show\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/Ibeam{ % heightInBits Ibeam\n" +
-"  gsave\n" +
-"    % Make an Ibeam of twice the given height in bits\n" +
-"    \/height exch  pointsPerBit mul def \n" +
-"    \/heightDRAW height IbeamFraction mul def\n" +
-"\n" +
-"    IbeamLineWidth setlinewidth\n" +
-"    IbeamGray setgray \n" +
-"\n" +
-"    charWidth2 height neg translate\n" +
-"    ShowIbar\n" +
-"    newpath\n" +
-"      0 0 moveto\n" +
-"      0 heightDRAW rlineto\n" +
-"    stroke\n" +
-"    newpath\n" +
-"      0 height moveto\n" +
-"      0 height rmoveto\n" +
-"      currentpoint translate\n" +
-"    ShowIbar\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    0 heightDRAW neg rlineto\n" +
-"    currentpoint translate\n" +
-"    stroke\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowIbar { % make a horizontal bar\n" +
-"  gsave\n" +
-"    newpath\n" +
-"      charWidth4 neg 0 moveto\n" +
-"      charWidth4 0 lineto\n" +
-"    stroke\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowLeftEnd {\n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"    leftEndDeltaX leftEndDeltaY moveto\n" +
-"    logoType (NA) eq {(5) show ShowPrime} if\n" +
-"    logoType (AA) eq {(N) show} if\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowRightEnd { \n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"    rightEndDeltaX rightEndDeltaY moveto\n" +
-"    logoType (NA) eq {(3) show ShowPrime} if\n" +
-"    logoType (AA) eq {(C) show} if\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowPrime {\n" +
-"  gsave\n" +
-"    SetPrimeFont\n" +
-"    (\\242) show \n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-" \n" +
-"\/SetColor{ % <char> SetColor\n" +
-"  dup colorDict exch known {\n" +
-"    colorDict exch get aload pop setrgbcolor\n" +
-"  } {\n" +
-"    pop\n" +
-"    defaultColor aload pop setrgbcolor\n" +
-"  } ifelse \n" +
-"} bind def\n" +
-"\n" +
-"% define fonts\n" +
-"\/SetTitleFont {\/Times-Bold findfont titleFontsize scalefont setfont} bind def\n" +
-"\/SetLogoFont  {\/Helvetica-Bold findfont charWidth  scalefont setfont} bind def\n" +
-"\/SetStringFont{\/Helvetica-Bold findfont fontsize scalefont setfont} bind def\n" +
-"\/SetPrimeFont {\/Symbol findfont fontsize scalefont setfont} bind def\n" +
-"\/SetSmallFont {\/Helvetica findfont smallFontsize scalefont setfont} bind def\n" +
-"\n" +
-"\/SetNumberFont {\n" +
-"    \/Helvetica-Bold findfont \n" +
-"    numberFontsize\n" +
-"    scalefont\n" +
-"    setfont\n" +
-"} bind def\n" +
-"\n" +
-"%Take a single character and return the bounding box\n" +
-"\/CharBox { % <char> CharBox <lx> <ly> <ux> <uy>\n" +
-"  gsave\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    % take the character off the stack and use it here:\n" +
-"    true charpath \n" +
-"    flattenpath \n" +
-"    pathbbox % compute bounding box of 1 pt. char => lx ly ux uy\n" +
-"    % the path is here, but toss it away ...\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"% The height of a characters bounding box\n" +
-"\/CharBoxHeight { % <char> CharBoxHeight <num>\n" +
-"  CharBox\n" +
-"  exch pop sub neg exch pop\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"% The width of a characters bounding box\n" +
-"\/CharBoxWidth { % <char> CharBoxHeight <num>\n" +
-"  CharBox\n" +
-"  pop exch pop sub neg \n" +
-"} bind def\n" +
-"\n" +
-"% Set the colour scheme to be faded to indicate trimming\n" +
-"\/MuteColour {\n" +
-"  \/colorDict mutedColourDict def\n" +
-"} def\n" +
-"\n" +
-"% Restore the colour scheme to the normal colours\n" +
-"\/RestoreColour {\n" +
-"  \/colorDict fullColourDict def\n" +
-"} def\n" +
-"\n" +
-"% Draw the background for a trimmed section\n" +
-"% takes the number of columns as a parameter\n" +
-"\/DrawTrimBg { % <num> DrawTrimBox\n" +
-"  \/col exch def\n" +
-"  \n" +
-"  \/boxwidth \n" +
-"    col stackWidth mul \n" +
-"  def\n" +
-" \n" +
-"  gsave\n" +
-"    0.97 setgray\n" +
-"\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    boxwidth 0 rlineto\n" +
-"    0 yaxisHeight rlineto\n" +
-"    0 yaxisHeight lineto\n" +
-"    closepath\n" +
-"    \n" +
-"    fill\n" +
-"  grestore\n" +
-"} def\n" +
-"\n" +
-"\/DrawTrimEdge {\n" +
-"  gsave\n" +
-"    0.2 setgray\n" +
-"    [2] 0 setdash\n" +
-"\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    0 yaxisHeight lineto\n" +
-"    \n" +
-"    stroke\n" +
-"\n" +
-"} def\n" +
-"\n" +
-"\n" +
-"% Deprecated names\n" +
-"\/startstack {StartStack} bind  def\n" +
-"\/endstack {EndStack}     bind def\n" +
-"\/makenumber {MakeNumber} bind def\n" +
-"\/numchar { MakeSymbol }  bind def\n" +
-"\n" +
-"%%EndProlog\n" +
-"\n" +
-"%%Page: 1 1\n" +
-"StartLogo\n" +
-"\n" +
-_input("DATA") + "\n" +
-"\n" +
-"EndLogo\n" +
-"\n" +
-"%%EOF\n"
-  );
-}</script>
-    <script>
-//======================================================================
-// start Alphabet object
-//======================================================================
-var Alphabet = function(alphabet, background) {
-  "use strict";
-  var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background;
-  generate_background = (background == null);
-  if (generate_background) {
-    background = [];
-    for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore;
-  } else if (alphabet.ncore != background.length) {
-    throw new Error("The background length does not match the alphabet length.");
-  }
-  this.name = alphabet.name;
-  this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null);
-  this.ncore = alphabet.ncore;
-  this.symbols = alphabet.symbols;
-  this.background = background;
-  this.genbg = generate_background;
-  this.encode = {};
-  this.encode2core = {};
-  this.complement = {};
-  // check if all symbols are same case
-  var seen_uc = false;
-  var seen_lc = false;
-  var check_case = function (syms) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        if (sym >= 'a' && sym <= 'z') seen_lc = true;
-        else if (sym >= 'A' && sym <= 'Z') seen_uc = true;
-      }
-    }
-  };
-  for (i = 0; i < this.symbols.length; i++) {
-    check_case(this.symbols[i].symbol);
-    check_case(this.symbols[i].aliases);
-  }
-  // now map symbols to indexes
-  var update_array = function(array, syms, index) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        array[sym] = index;
-        // when only a single case is used, then encode as case insensitive
-        if (seen_uc != seen_lc) {
-          if (sym >= 'a' && sym <= 'z') {
-            array[sym.toUpperCase()] = index;
-          } else if (sym >= 'A' && sym <= 'Z') {
-            array[sym.toLowerCase()] = index;
-          }
-        }
-      }
-    }
-  }
-  // map core symbols to index
-  for (i = 0; i < this.ncore; i++) {
-    update_array(this.encode2core, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode2core, this.symbols[i].aliases, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-  }
-  // map ambigous symbols to index
-  ambigs = {};
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-    ambigs[this.symbols[i].equals] = i;
-  }
-  // determine complements
-  for (i = 0; i < this.ncore; i++) {
-    complement = this.symbols[i].complement;
-    if (typeof complement === "string") {
-      this.complement[i] = this.encode2core[complement];
-    }
-  }
-  next_symbol:
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    complement = "";
-    for (j = 0; j < this.symbols[i].equals.length; j++) {
-      comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]];
-      if (typeof comp_e_sym !== "number") continue next_symbol;
-      complement += this.symbols[comp_e_sym].symbol;
-    }
-    complement = complement.split("").sort().join("");
-    if (typeof ambigs[complement] === "number") {
-      this.complement[i] = ambigs[complement];
-    }
-  }
-  // determine case insensitivity
-  this.case_insensitive = true;
-  if (seen_uc == seen_lc) {
-    // when there is a mixture of cases it probably won't
-    // be case insensitive but we still need to check
-    loop:
-    for (i = 0; i < this.symbols.length; i++) {
-      sym = this.symbols[i].symbol;
-      if (sym >= 'A' && sym <= 'Z') {
-        if (this.encode[sym.toLowerCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      } else if (sym >= 'a' && sym <= 'z') {
-        if (this.encode[sym.toUpperCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      }
-      aliases = this.symbols[i].aliases;
-      if (aliases != null) {
-        for (j = 0; j < aliases.length; j++) {
-          sym = aliases.charAt(j);
-          if (sym >= 'A' && sym <= 'Z') {
-            if (this.encode[sym.toLowerCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          } else if (sym >= 'a' && sym <= 'z') {
-            if (this.encode[sym.toUpperCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          }
-        }
-      }
-    }
-  }
-  // normalise aliases to remove the prime symbol and eliminate
-  // the alternate cases when the alphabet is case insensitive
-  var seen, out;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym = this.symbols[i].symbol;
-    aliases = this.symbols[i].aliases;
-    if (typeof aliases != "string") aliases = "";
-    seen = {};
-    out = [];
-    if (this.case_insensitive) {
-      sym = sym.toUpperCase();
-      aliases = aliases.toUpperCase();
-    }
-    seen[sym] = true;
-    for (j = 0; j < aliases.length; j++) {
-      if (!seen[aliases.charAt(j)]) {
-        seen[aliases.charAt(j)] = true;
-        out.push(aliases.charAt(j));
-      }
-    }
-    this.symbols[i].aliases = out.sort().join("");
-  }
-};
-// return the name of the alphabet
-Alphabet.prototype.get_alphabet_name = function() {
-  return this.name;
-};
-// return if the alphabet can be complemented
-Alphabet.prototype.has_complement = function() {
-  return (typeof this.symbols[0].complement === "string");
-};
-// return true if an uppercase letter has the same meaning as the lowercase form
-Alphabet.prototype.is_case_insensitive = function() {
-  return this.case_insensitive;
-};
-// return the information content of an alphabet letter
-Alphabet.prototype.get_ic = function() {
-  return Math.log(this.ncore) / Math.LN2;
-};
-// return the count of the core alphabet symbols
-Alphabet.prototype.get_size_core = function() {
-  return this.ncore;
-};
-// return the count of all alphabet symbols
-Alphabet.prototype.get_size_full = function() {
-  return this.symbols.length;
-};
-// return the symbol for the given alphabet index
-Alphabet.prototype.get_symbol = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  return this.symbols[alph_index].symbol;
-};
-// return the aliases for the given alphabet index
-Alphabet.prototype.get_aliases = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  var sym_obj = this.symbols[alph_index];
-  return (sym_obj.aliases != null ? sym_obj.aliases : "");
-};
-// return the name for the given alphabet index
-Alphabet.prototype.get_name = function(alph_index) {
-  "use strict";
-  var sym;
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  sym = this.symbols[alph_index];
-  return (typeof sym.name === "string" ? sym.name : sym.symbol);
-};
-// return the alphabet it is like or null
-Alphabet.prototype.get_like = function() {
-  "use strict";
-  return this.like;
-};
-// return the index of the complement for the given alphabet index
-Alphabet.prototype.get_complement = function(alph_index) {
-  var comp_e_sym = this.complement[alph_index];
-  if (typeof comp_e_sym === "number") {
-    return comp_e_sym;
-  } else {
-    return -1;
-  }
-};
-// return a string containing the core symbols
-Alphabet.prototype.get_symbols = function() {
-  "use strict";
-  var i, core_symbols;
-  core_symbols = "";
-  for (i = 0; i < this.ncore; i++) {
-    core_symbols += this.symbols[i].symbol;
-  }
-  return core_symbols;
-};
-// return if the background was not a uniform generated background
-Alphabet.prototype.has_bg = function() {
-  "use strict";
-  return !this.genbg;
-};
-// get the background frequency for the index
-Alphabet.prototype.get_bg_freq = function(alph_index) {
-  "use strict";
-  var freq, i, symbols;
-  if (alph_index >= 0) {
-    if (alph_index < this.ncore) {
-      return this.background[alph_index];
-    } else if (alph_index < this.symbols.length) {
-      freq = 0;
-      symbols = this.symbols[alph_index].equals;
-      for (i = 0; i < symbols.length; i++) {
-        freq += this.background[this.encode2core[symbols.charAt(i)]];
-      }
-      return freq;
-    } 
-  }
-  throw new Error("The alphabet index is out of range.");
-};
-// get the colour of the index
-Alphabet.prototype.get_colour = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return "black";
-  }
-  return "#" + this.symbols[alph_index].colour;
-};
-// get the rgb componets of the colour at the index
-Alphabet.prototype.get_rgb = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return {"red": 0, "green": 0, "blue": 0};
-  }
-  var colour = this.symbols[alph_index].colour;
-  var red = parseInt(colour.substr(0, 2), 16) / 255;
-  var green = parseInt(colour.substr(2, 2), 16) / 255;
-  var blue = parseInt(colour.substr(4, 2), 16) / 255;
-  return {"red": red, "green": green, "blue": blue};
-};
-// convert a symbol into the index
-Alphabet.prototype.get_index = function(letter) {
-  "use strict";
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    return -1;
-  }
-  return alph_index;
-};
-// convert a symbol into the list of core indexes that it equals
-Alphabet.prototype.get_indexes = function(letter) {
-  "use strict";
-  var alph_index, comprise_str, i, comprise_list;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    throw new Error("Unknown letter");
-  }
-  comprise_str = this.symbols[alph_index].equals;
-  comprise_list = [];
-  if (typeof comprise_str == "string") {
-    for (i = 0; i < comprise_str.length; i++) {
-      comprise_list.push(this.encode2core[comprise_str.charAt(i)]);
-    }
-  } else {
-    comprise_list.push(alph_index);
-  }
-  return comprise_list;
-};
-// check if a symbol is the primary way of representing the symbol in the alphabet
-Alphabet.prototype.is_prime_symbol = function(letter) {
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (alph_index == null) return false;
-  if (this.is_case_insensitive()) {
-    return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase());
-  } else {
-    return (this.symbols[alph_index].symbol == letter);
-  }
-};
-// compare 2 alphabets
-Alphabet.prototype.equals = function(other) {
-  "use strict";
-  var i, sym1, sym2;
-  // first check that it's actually an alphabet object
-  if (!(typeof other === "object" && other != null && other instanceof Alphabet)) {
-    return false;
-  }
-  // second shortcircuit if it's the same object
-  if (this === other) return true;
-  // compare
-  if (this.name !== other.name) return false;
-  if (this.ncore !== other.ncore) return false;
-  if (this.symbols.length !== other.symbols.length) return false;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym1 = this.symbols[i];
-    sym2 = other.symbols[i];
-    if (sym1.symbol !== sym2.symbol) return false;
-    if (sym1.aliases !== sym2.aliases) return false;
-    if (sym1.name !== sym2.name) return false;
-    if (typeof sym1.colour !== typeof sym2.colour || 
-        (typeof sym1.colour === "string" && typeof sym2.colour === "string" &&
-         parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) {
-      return false;
-    }
-    if (sym1.complement !== sym2.complement) return false;
-    if (sym1.equals !== sym2.equals) return false;
-  }
-  return true;
-};
-Alphabet.prototype.check_core_subset = function(super_alph) {
-  var complement_same = true;
-  var seen_set = {};
-  var sub_i, sub_symbol, super_i, super_symbol;
-  for (sub_i = 0; sub_i < this.ncore; sub_i++) {
-    sub_symbol = this.symbols[sub_i];
-    super_i = super_alph.encode[sub_symbol.symbol]; 
-    if (super_i == null) return 0;
-    super_symbol = super_alph.symbols[super_i];
-    if (seen_set[super_i]) return 0;
-    seen_set[super_i] = true;
-    // check complement
-    if (sub_symbol.complement != null && super_symbol.complement != null) {
-      if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) {
-        complement_same = false;
-      }
-    } else if (sub_symbol.complement != null || super_symbol.complement != null) {
-      complement_same = false;
-    }
-  }
-  return (complement_same ? 1 : -1);
-};
-// convert a sequence to its reverse complement
-Alphabet.prototype.invcomp_seq = function(seq) {
-  "use strict";
-  var syms, i, e_sym, comp_e_sym;
-  if (!this.has_complement()) throw new Error("Alphabet must be complementable");
-  syms = seq.split("");
-  for (i = 0; i < syms.length; i++) {
-    e_sym = this.encode[syms[i]];
-    if (typeof e_sym === "undefined") {
-      e_sym = this.ncore; // wildcard
-    }
-    comp_e_sym = this.complement[e_sym];
-    if (typeof comp_e_sym === "undefined") {
-      comp_e_sym = e_sym; // not complementable
-    }
-    syms[i] = this.symbols[comp_e_sym].symbol;
-  }
-  return syms.reverse().join("");
-};
-// convert the alphabet to the text version
-Alphabet.prototype.as_text = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  function symbol_as_text(sym) {
-    var out;
-    out = sym.symbol;
-    if (typeof sym.name === "string" && sym.name != sym.symbol) {
-      out += " " + name_as_text(sym.name);
-    }
-    if (typeof sym.colour === "string") {
-      out += " " + sym.colour;
-    }
-    return out;
-  }
-  var out, i, j, c, sym;
-  out = "";
-  // output core symbols with 2 way complements
-  for (i = 0; i < this.ncore; i++) {
-    c = this.complement[i];
-    if (typeof c === "number" && i < c && this.complement[c] === i) {
-      out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n";  
-    }
-  }
-  // output core symbols with no complement
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.complement[i] === "undefined") {
-      out += symbol_as_text(this.symbols[i]) + "\n";
-    }
-  }
-  // output ambiguous symbols that have comprising characters
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    if (this.symbols[i].equals.length == 0) break;
-    out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n";
-      }
-    }
-  }
-  // output aliases of core symbols
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n";
-      }
-    }
-  }
-  // output gap symbols
-  i = this.symbols.length - 1;
-  if (this.symbols[i].equals.length == 0) {
-    out += symbol_as_text(this.symbols[i]) + " =\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " =\n";
-      }
-    }
-  }
-  return out;
-};
-// output the alphabet as it appears in minimal MEME format
-Alphabet.prototype.as_meme = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  if (this.equals(AlphStd.DNA)) {
-    return "ALPHABET= ACGT\n";
-  } else if (this.equals(AlphStd.PROTEIN)) {
-    return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n";
-  } else {
-    return "ALPHABET" + 
-      (this.name != null ? " " + name_as_text(this.name) : "") + 
-      (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" +
-      this.as_text() + "END ALPHABET\n";
-  }
-};
-
-// Returns a table showing all the letters in the alphabet
-Alphabet.prototype.as_table = function() {
-  "use strict";
-  var i, j, row, th, td, aliases, equals, sym;
-  var table = document.createElement("table");
-  // create the core symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  if (this.has_complement()) {
-    th.appendChild(document.createTextNode("Complement"));
-  }
-  row.appendChild(th);
-  // list the core symbols
-  for (i = 0; i < this.ncore; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].complement != null) {
-      td.style.color = this.get_colour(this.get_index(this.symbols[i].complement));
-      td.appendChild(document.createTextNode(this.symbols[i].complement));
-    }
-    row.appendChild(td);
-  }
-  // create the ambiguous symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Matches"));
-  row.appendChild(th);
-  // list the ambiguous symbols
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    equals = this.symbols[i].equals.split('');
-    for (j = 0; j < equals.length; j++) {
-      if (j != 0) td.appendChild(document.createTextNode(' '));
-      sym = document.createElement("span");
-      sym.style.color = this.get_colour(this.get_index(equals[j]));
-      sym.appendChild(document.createTextNode(equals[j]));
-      td.appendChild(sym);
-    }
-    row.appendChild(td);
-  }
-  return table;
-};
-
-// returns a dictionary of the colours for EPS
-Alphabet.prototype._as_eps_dict = function() {
-  "use strict";
-  var i, sym, rgb;
-  var out = "/fullColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = this.get_rgb(i);
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  out += "/mutedColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = Alphabet.lighten_colour(this.get_rgb(i));
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  return out;
-};
-
-// return the alphabet name or a list of primary symbols
-Alphabet.prototype.toString = function() {
-  "use strict";
-  if (this.name != null) {
-    return this.name;
-  } else {
-    return this.get_symbols();
-  }
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Helper functions
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-// Convert a colour specified in RGB colourspace values into LAB colourspace
-Alphabet.rgb2lab = function(rgb) {
-  "use strict";
-  var xyzHelper, labHelper;
-  // XYZ helper
-  xyzHelper = function(value) {
-    if (value > 0.0445) {
-      value = (value + 0.055) / 1.055;
-      value = Math.pow(value, 2.4);
-    } else {
-      value /= 12.92;
-    }
-    value *= 100;
-    return value;
-  };
-  // lab helper
-  labHelper = function(value) {
-    if (value > 0.008856) {
-      value = Math.pow(value, 1.0 / 3.0);
-    } else {
-      value = (7.787 * value) + (16.0 / 116.0);
-    }
-    return value;
-  };
-  // convert into XYZ colourspace
-  var c1, c2, c3;
-  if (typeof rgb == "number") {
-    c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0);
-    c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0);
-    c3 = xyzHelper((rgb & 0xFF) / 255.0);
-  } else {
-    c1 = xyzHelper(rgb.red);
-    c2 = xyzHelper(rgb.green);
-    c3 = xyzHelper(rgb.blue);
-  }
-  var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805);
-  var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722);
-  var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505);
-  // convert into Lab colourspace
-  c1 = labHelper(x / 95.047);
-  c2 = labHelper(y / 100.0);
-  c3 = labHelper(z / 108.883);
-  var l = (116.0 * c2) - 16;
-  var a = 500.0 * (c1 - c2);
-  var b = 200.0 * (c2 - c3);
-  return {"l": l, "a": a, "b": b};
-};
-
-// Convert a colour specified in HSV colourspace into RGB colourspace
-Alphabet.hsv2rgb = function(hue, sat, value, output_object) {
-  // achromatic (grey)
-  var r = value;
-  var g = value;
-  var b = value;
-  if (sat != 0) {
-    var h = hue / 60.0;
-    var i = Math.floor(h);
-    var f = h - i;
-    var p = value * (1.0 - sat);
-    var q = value * (1.0 - (sat * f));
-    var t = value * (1.0 - (sat * (1.0 - f)));
-    if (i == 0) {
-      r = value;
-      g = t;
-      b = p;
-    } else if (i == 1) {
-      r = q;
-      g = value;
-      b = p;
-    } else if (i == 2) {
-      r = p;
-      g = value;
-      b = t;
-    } else if (i == 3) {
-      r = p;
-      g = q;
-      b = value;
-    } else if (i == 4) {
-      r = t;
-      g = p;
-      b = value;
-    } else {
-      r = value;
-      g = p;
-      b = q;
-    }
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-// Calculate a distance score between two colours in LAB colourspace
-Alphabet.lab_dist = function(lab1, lab2) {
-  var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a));
-  var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a));
-  var dc = c1 - c2;
-  var dl = lab1.l - lab2.l;
-  var da = lab1.a - lab2.a;
-  var db = lab1.b - lab2.b;
-  // we don't want NaN due to rounding errors so fudge things a bit...
-  var dh = 0;
-  var dh_squared = (da * da) + (db * db) - (dc * dc);
-  if (dh_squared > 0) {
-    dh = Math.sqrt(dh_squared);
-  }
-  var first = dl;
-  var second = dc / (1.0 + (0.045 * c1));
-  var third = dh / (1.0 + (0.015 * c1));
-  return Math.sqrt((first * first) + (second * second) + (third * third));
-};
-
-// convert an RGB value into a HSL value
-Alphabet.rgb2hsl = function(rgb) {
-  "use strict";
-  var min, max, delta, h, s, l, r, g, b;
-  if (typeof rgb == "number") {
-    r = ((rgb >> 16) & 0xFF) / 255.0;
-    g = ((rgb >> 8) & 0xFF) / 255.0;
-    b = (rgb & 0xFF) / 255.0;
-  } else {
-    r = rgb.red;
-    g = rgb.green;
-    b = rgb.blue;
-  }
-  min = Math.min(r, g, b);
-  max = Math.max(r, g, b);
-  delta = max - min;
-  l = min + (delta / 2);
-  if (max == min) {
-    h = 0; // achromatic (grayscale)
-    s = 0;
-  } else {
-    if (l > 0.5) {
-      s = delta / (2 - max - min);
-    } else {
-      s = delta / (max + min);
-    }
-    if (max == r) {
-      h = (g - b) / delta;
-      if (g < b) h += 6;
-    } else if (max == g) {
-      h = ((b - r) / delta) + 2;
-    } else {
-      h = ((r - g) / delta) + 4;
-    }
-    h /= 6;
-  }
-  return {"h": h, "s": s, "l": l};
-};
-
-// convert a HSL value into an RGB value
-Alphabet.hsl2rgb = function(hsl, output_object) {
-  "use strict";
-  function _hue(p, q, t) {
-    "use strict";
-    if (t < 0) t += 1;
-    else if (t > 1) t -= 1;
-    if (t < (1.0 / 6.0)) {
-      return p + ((q - p) * 6.0 * t);
-    } else if (t < 0.5) {
-      return q;
-    } else if (t < (2.0 / 3.0)) {
-      return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0);
-    } else {
-      return p;
-    }
-  }
-  var r, g, b, p, q;
-  if (hsl.s == 0) {
-    // achromatic (grayscale)
-    r = hsl.l;
-    g = hsl.l;
-    b = hsl.l;
-  } else {
-    if (hsl.l < 0.5) {
-      q = hsl.l * (1 + hsl.s);
-    } else {
-      q = hsl.l + hsl.s - (hsl.l * hsl.s);
-    }
-    p = (2 * hsl.l) - q;
-    r = _hue(p, q, hsl.h + (1.0 / 3.0));
-    g = _hue(p, q, hsl.h);
-    b = _hue(p, q, hsl.h - (1.0 / 3.0));
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-Alphabet.lighten_colour = function(rgb) {
-  "use strict";
-  var hsl = Alphabet.rgb2hsl(rgb);
-  hsl.l += (1.0 - hsl.l) * 2 / 3;
-  return Alphabet.hsl2rgb(hsl, typeof rgb != "number");
-};
-
-//======================================================================
-// end Alphabet object
-//======================================================================
-
-//======================================================================
-// start StandardAlphabet object
-//======================================================================
-
-// an extension of the alphabet object to support some additional fields 
-// only present in standard alphabets.
-var StandardAlphabet = function(enum_code, enum_name, alphabet_data) {
-  Alphabet.apply(this, [alphabet_data]);
-  this.enum_code = enum_code;
-  this.enum_name = enum_name;
-};
-StandardAlphabet.prototype = Alphabet.prototype;
-StandardAlphabet.prototype.constructor = StandardAlphabet;
-
-// A unique code for this standard alphabet.
-// This code will be a power of 2 to enable creation of bitsets for
-// a selection of standard alphabets.
-StandardAlphabet.prototype.get_code = function() {
-  return this.enum_code;
-};
-
-// A unique name for this standard alphabet.
-// this name will be all upper case and the same as the property that
-// refers to this alphabet in the AlphStd collection.
-StandardAlphabet.prototype.get_enum = function() {
-  return this.enum_name;
-};
-
-//======================================================================
-// end StandardAlphabet object
-//======================================================================
-
-// A collection of standard alphabets.
-var AlphStd = {
-  RNA: new StandardAlphabet(1, "RNA", {
-    "name": "RNA",
-    "like": "RNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300"},
-      {"symbol": "U", "name": "Uracil", "colour": "008000",
-        "aliases": "T"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."},
-      {"symbol": "V", "name": "Not U", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACU"},
-      {"symbol": "D", "name": "Not C", "equals": "AGU"},
-      {"symbol": "B", "name": "Not A", "equals": "CGU"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AU"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"},
-      {"symbol": "K", "name": "Keto", "equals": "GU"}
-    ]
-  }), 
-  DNA: new StandardAlphabet(2, "DNA", {
-    "name": "DNA",
-    "like": "DNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"},
-      {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A",
-        "aliases": "U"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."},
-      {"symbol": "V", "name": "Not T", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACT"},
-      {"symbol": "D", "name": "Not C", "equals": "AGT"},
-      {"symbol": "B", "name": "Not A", "equals": "CGT"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AT"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"},
-      {"symbol": "K", "name": "Keto", "equals": "GT"}
-    ]
-  }), 
-  PROTEIN: new StandardAlphabet(4, "PROTEIN", {
-    "name": "Protein",
-    "like": "PROTEIN",
-    "ncore": 20,
-    "symbols": [
-      {"symbol": "A", "name": "Alanine", "colour": "0000CC"},
-      {"symbol": "C", "name": "Cysteine", "colour": "0000CC"},
-      {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"},
-      {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"},
-      {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Glycine", "colour": "FFB300"},
-      {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"},
-      {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"},
-      {"symbol": "K", "name": "Lysine", "colour": "CC0000"},
-      {"symbol": "L", "name": "Leucine", "colour": "0000CC"},
-      {"symbol": "M", "name": "Methionine", "colour": "0000CC"},
-      {"symbol": "N", "name": "Asparagine", "colour": "008000"},
-      {"symbol": "P", "name": "Proline", "colour": "FFFF00"},
-      {"symbol": "Q", "name": "Glutamine", "colour": "008000"},
-      {"symbol": "R", "name": "Arginine", "colour": "CC0000"},
-      {"symbol": "S", "name": "Serine", "colour": "008000"},
-      {"symbol": "T", "name": "Threonine", "colour": "008000"},
-      {"symbol": "V", "name": "Valine", "colour": "0000CC"},
-      {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"},
-      {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"},
-      {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."},
-      {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, 
-      {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, 
-      {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"}
-    ]
-  })
-};
-
-//======================================================================
-// start Symbol object
-//======================================================================
-var Symbol = function(alph_index, scale, alphabet) {
-  "use strict";
-  //variable prototype
-  this.symbol = alphabet.get_symbol(alph_index);
-  this.scale = scale;
-  this.colour = alphabet.get_colour(alph_index);
-};
-
-Symbol.prototype.get_symbol = function() {
-  "use strict";
-  return this.symbol;
-};
-
-Symbol.prototype.get_scale = function() {
-  "use strict";
-  return this.scale;
-};
-
-Symbol.prototype.get_colour = function() {
-  "use strict";
-  return this.colour;
-};
-
-Symbol.prototype.toString = function() {
-  "use strict";
-  return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%";
-};
-
-function compare_symbol(sym1, sym2) {
-  "use strict";
-  if (sym1.get_scale() < sym2.get_scale()) {
-    return -1;
-  } else if (sym1.get_scale() > sym2.get_scale()) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-//======================================================================
-// end Symbol object
-//======================================================================
-
-//======================================================================
-// start Pspm object
-//======================================================================
-var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) {
-  "use strict";
-  var row, col, data, row_sum, delta, evalue_re;
-  if (typeof name !== "string") {
-    name = "";
-  }
-  this.name = name;
-  //construct
-  if (matrix instanceof Pspm) {
-    // copy constructor
-    this.alph_length = matrix.alph_length;
-    this.motif_length = matrix.motif_length;
-    this.name = matrix.name;
-    this.alt = matrix.alt;
-    this.nsites = matrix.nsites;
-    this.evalue = matrix.evalue;
-    this.ltrim = matrix.ltrim;
-    this.rtrim = matrix.rtrim;
-    this.pspm = [];
-    for (row = 0; row < matrix.motif_length; row++) {
-      this.pspm[row] = [];
-      for (col = 0; col < matrix.alph_length; col++) {
-        this.pspm[row][col] = matrix.pspm[row][col];
-      }
-    }
-    if (matrix.pssm != null) {
-      this.pssm = [];
-      for (row = 0; row < matrix.motif_length; row++) {
-        this.pspm[row] = [];
-        for (col = 0; col < matrix.alph_length; col++) {
-          this.pssm[row][col] = matrix.pssm[row][col];
-        }
-      }
-    }
-  } else {
-    // check parameters
-    if (ltrim == null) {
-      ltrim = 0;
-    } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) {
-      throw new Error("ltrim must be a non-negative integer, got: " + ltrim);
-    }
-    if (rtrim == null) {
-      rtrim = 0;
-    } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) {
-      throw new Error("rtrim must be a non-negative integer, got: " + rtrim);
-    }
-    if (nsites != null) {
-      if (typeof nsites !== "number" || nsites < 0) {
-        throw new Error("nsites must be a positive number, got: " + nsites);
-      } else if (nsites == 0) {
-        nsites = null;
-      }
-    }
-    if (evalue != null) {
-      if (typeof evalue === "number") {
-        if (evalue < 0) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else if (typeof evalue === "string") {
-        evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-        if (!evalue_re.test(evalue)) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else {
-        throw new Error("evalue must be a non-negative number, got: " + evalue);
-      }
-    }
-    // set properties
-    this.name = name;
-    this.alt = alt;
-    this.nsites = nsites;
-    this.evalue = evalue;
-    this.ltrim = ltrim;
-    this.rtrim = rtrim;
-    if (typeof matrix === "string") {
-      // string constructor
-      data = parse_pspm_string(matrix);
-      this.alph_length = data["alph_length"];
-      this.motif_length = data["motif_length"];
-      this.pspm = data["pspm"];
-      if (this.evalue == null) {
-        if (data["evalue"] != null) {
-          this.evalue = data["evalue"];
-        } else {
-          this.evalue = 0;
-        }
-      }
-      if (this.nsites == null) {
-        if (typeof data["nsites"] === "number") {
-          this.nsites = data["nsites"];
-        } else {
-          this.nsites = 20;
-        }
-      }
-    } else {
-      // assume pspm is a nested array
-      this.motif_length = matrix.length;
-      this.alph_length = (matrix.length > 0 ? matrix[0].length : 0);
-      if (this.nsites == null) {
-        this.nsites = 20;
-      }
-      if (this.evalue == null) {
-        this.evalue = 0;
-      }
-      this.pspm = [];
-      // copy pspm and check
-      for (row = 0; row < this.motif_length; row++) {
-        if (this.alph_length != matrix[row].length) {
-          throw new Error("COLUMN_MISMATCH");
-        }
-        this.pspm[row] = [];
-        row_sum = 0;
-        for (col = 0; col < this.alph_length; col++) {
-          this.pspm[row][col] = matrix[row][col];
-          row_sum += this.pspm[row][col];
-        }
-        delta = 0.1;
-        if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || 
-            (row_sum < 1 && (1 - row_sum) > delta)) {
-          throw new Error("INVALID_SUM");
-        }
-      }
-      // copy pssm
-      if (pssm != null) {
-        this.pssm = [];
-        for (row = 0; row < this.motif_length; row++) {
-          this.pssm[row] = [];
-          for (col = 0; col < this.alph_length; col++) {
-            this.pssm[row][col] = pssm[row][col];
-          }
-        }
-      }
-    }
-  }
-};
-
-Pspm.prototype.copy = function() {
-  "use strict";
-  return new Pspm(this);
-};
-
-Pspm.prototype.reverse = function() {
-  "use strict";
-  var x, y, temp, temp_trim;
-  //reverse
-  x = 0;
-  y = this.motif_length-1;
-  while (x < y) {
-    temp = this.pspm[x];
-    this.pspm[x] = this.pspm[y];
-    this.pspm[y] = temp;
-    x++;
-    y--;
-  }
-  // reverse pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //reverse
-    x = 0;
-    y = this.motif_length-1;
-    while (x < y) {
-      temp = this.pssm[x];
-      this.pspm[x] = this.pssm[y];
-      this.pssm[y] = temp;
-      x++;
-      y--;
-    }
-  }
-  //swap triming
-  temp_trim = this.ltrim;
-  this.ltrim = this.rtrim;
-  this.rtrim = temp_trim;
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.reverse_complement = function(alphabet) {
-  "use strict";
-  var x, y, temp, i, row, c, temp_trim;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  if (!alphabet.has_complement()) {
-    throw new Error("The specified alphabet can not be complemented.");
-  }
-  // reverse motif
-  this.reverse();
-  //complement
-  for (x = 0; x < this.motif_length; x++) {
-    row = this.pspm[x];
-    for (i = 0; i < row.length; i++) {
-      c = alphabet.get_complement(i);
-      if (c < i) continue;
-      temp = row[i];
-      row[i] = row[c];
-      row[c] = temp;
-    }
-  }
-  // complement pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //complement
-    for (x = 0; x < this.motif_length; x++) {
-      row = this.pssm[x];
-      for (i = 0; i < row.length; i++) {
-        c = alphabet.get_complement(i);
-        if (c < i) continue;
-        temp = row[i];
-        row[i] = row[c];
-        row[c] = temp;
-      }
-    }
-  }
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.get_stack = function(position, alphabet, ssc) {
-  "use strict";
-  var row, stack_ic, alphabet_ic, stack, i, sym;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  row = this.pspm[position];
-  stack_ic = this.get_stack_ic(position, alphabet);
-  if (ssc) stack_ic -= this.get_error(alphabet);
-  alphabet_ic = alphabet.get_ic();
-  stack = [];
-  for (i = 0; i < this.alph_length; i++) {
-    sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet);
-    if (sym.get_scale() <= 0) {
-      continue;
-    }
-    stack.push(sym);
-  }
-  stack.sort(compare_symbol);
-  return stack;
-};
-
-Pspm.prototype.get_stack_ic = function(position, alphabet) {
-  "use strict";
-  var row, H, i;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size fo the pspm.");
-  }
-  row = this.pspm[position];
-  H = 0;
-  for (i = 0; i < this.alph_length; i++) {
-    if (row[i] === 0) {
-      continue;
-    }
-    H -= (row[i] * (Math.log(row[i]) / Math.LN2));
-  }
-  return alphabet.get_ic() - H;
-};
-
-Pspm.prototype.get_error = function(alphabet) {
-  "use strict";
-  if (this.nsites === 0) {
-    return 0;
-  }
-  return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites);
-};
-
-Pspm.prototype.get_motif_length = function() {
-  "use strict";
-  return this.motif_length;
-};
-
-Pspm.prototype.get_alph_length = function() {
-  "use strict";
-  return this.alph_length;
-};
-
-Pspm.prototype.get_left_trim = function() {
-  "use strict";
-  return this.ltrim;
-};
-
-Pspm.prototype.get_right_trim = function() {
-  "use strict";
-  return this.rtrim;
-};
-
-Pspm.prototype.as_best_match = function(alphabet) {
-  "use strict";
-  var match, odds, best_odds, best_index;
-  var i, j;
-  match = "";
-  for (i = 0; i < this.motif_length; i++) {
-    best_index = 0;
-    best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0);
-    for (j = 1; j < this.alph_length; j++) {
-      odds = this.pspm[i][j] / alphabet.get_bg_freq(j);
-      if (odds > best_odds) {
-        best_odds = odds;
-        best_index = j;
-      }
-    }
-    match += alphabet.get_symbol(best_index);
-  }
-  return match;
-};
-
-Pspm.prototype.as_count_matrix = function() {
-  "use strict";
-  var count, count_text, text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      count = Math.round(this.nsites * this.pspm[i][j]);
-      count_text = "" + count;
-      // pad up to length of 4
-      if (count_text.length < 4) {
-        text += (new Array(5 - count_text.length)).join(" ") + count_text;
-      } else {
-        text += count_text;
-      }
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_probability_matrix = function() {
-  "use strict";
-  var text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      text += this.pspm[i][j].toFixed(6);
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_score_matrix = function(alphabet, pseudo) {
-  "use strict";
-  var me, score, out, row, col, score_text;
-  me = this;
-  if (typeof this.pssm === "undefined") {
-    if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) {
-      throw new Error("The alphabet is required to generate the pssm.");
-    }
-    if (typeof pseudo === "undefined") {
-      pseudo = 0.01;
-    } else if (typeof pseudo !== "number" || pseudo < 0) {
-      throw new Error("Expected positive number for pseudocount");
-    }
-    score = function(row, col) {
-      "use strict";
-      var p, bg, p2;
-      p = me.pspm[row][col];
-      bg = alphabet.get_bg_freq(col);
-      p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo);
-      return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000);
-    };
-  } else {
-    score = function(row, col) {
-      "use strict";
-      return me.pssm[row][col];
-    };
-  }
-  out = "";
-  for (row = 0; row < this.motif_length; row++) {
-    for (col = 0; col < this.alph_length; col++) {
-      if (col !== 0) {
-        out += " ";
-      }
-      score_text = "" + score(row, col);
-      // pad out to 6 characters
-      if (score_text.length < 6) {
-        out += (new Array(7 - score_text.length)).join(" ") + score_text;
-      } else {
-        out += score_text;
-      }
-    }
-    out += "\n";
-  }
-  return out;
-}
-
-Pspm.prototype.as_pspm = function() {
-  "use strict";
-  return "letter-probability matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + " nsites= " + this.nsites + 
-      " E= " + (typeof this.evalue === "number" ? 
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_probability_matrix();
-};
-
-Pspm.prototype.as_pssm = function(alphabet, pseudo) {
-  "use strict";
-  return "log-odds matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + 
-      " E= " + (typeof this.evalue == "number" ?
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_score_matrix(alphabet, pseudo);
-};
-
-Pspm.prototype.as_meme = function(options) {
-  var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands;
-  var out, alen, i;
-  // get the options
-  if (typeof options !== "object" || options === null) {
-    options = {};
-  }
-  with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false);
-  with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false);
-  with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false);
-  if (!with_pspm && !with_pssm) with_pspm = true;
-  if (with_header) {
-    if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) {
-      version = options["version"];
-    } else if (typeof options["version"] === "number") {
-      version = options["version"].toFixed(0);
-    } else {
-      version = "4";
-    }
-    if (typeof options["strands"] === "number" && options["strands"] === 1) {
-      strands = 1;
-    } else {
-      strands = 2;
-    }
-    if (typeof options["bg_source"] === "string") {
-      bg_source = options["bg_source"];
-    } else {
-      bg_source = "unknown source";
-    }
-    if (typeof options["alphabet"] === "object" && options["alphabet"] != null
-        && options["alphabet"] instanceof Alphabet) {
-      alphabet = options["alphabet"];
-    } else {
-      throw new Error("The alphabet is required to generate the header.");
-    }
-  }
-  // now create the output
-  out = "";
-  if (with_header) {
-    out = "MEME version " + version + "\n\n";
-    out += alphabet.as_meme() + "\n";
-    if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified
-      out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n";
-    }
-    out += "Background letter frequencies (from " + bg_source + "):\n";
-    alen = alphabet.get_size_core();
-    for (i = 0; i < alen; i++) {
-      if (i !== 0) {
-        if (i % 9 === 0) { // maximum of nine entries per line
-          out += "\n";
-        } else {
-          out += " ";
-        }
-      }
-      out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3);
-    }
-  }
-  out += "\n\n";
-  out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt);
-  if (with_pssm) {
-    out += "\n\n";
-    out += this.as_pssm(options["alphabet"], options["pseudocount"]);
-  }
-  if (with_pspm) {
-    out += "\n\n";
-    out += this.as_pspm();
-  }
-  return out;
-}
-
-Pspm.prototype.toString = function() {
-  "use strict";
-  var str, i, row;
-  str = "";
-  for (i = 0; i < this.pspm.length; i++) {
-    row = this.pspm[i];
-    str += row.join("\t") + "\n";
-  }
-  return str;
-};
-
-function parse_pspm_properties(str) {
-  "use strict";
-  var parts, i, eqpos, before, after, properties, prop, num, num_re;
-  num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-  parts = trim(str).split(/\s+/);
-  // split up words containing =
-  for (i = 0; i < parts.length;) {
-    eqpos = parts[i].indexOf("=");
-    if (eqpos != -1) {
-      before = parts[i].substr(0, eqpos);
-      after = parts[i].substr(eqpos+1);
-      if (before.length > 0 && after.length > 0) {
-        parts.splice(i, 1, before, "=", after);
-        i += 3;
-      } else if (before.length > 0) {
-        parts.splice(i, 1, before, "=");
-        i += 2;
-      } else if (after.length > 0) {
-        parts.splice(i, 1, "=", after);
-        i += 2;
-      } else {
-        parts.splice(i, 1, "=");
-        i++;
-      }
-    } else {
-      i++;
-    }
-  }
-  properties = {};
-  for (i = 0; i < parts.length; i += 3) {
-    if (parts.length - i < 3) {
-      throw new Error("Expected PSPM property was incomplete. "+
-          "Remaing parts are: " + parts.slice(i).join(" "));
-    }
-    if (parts[i+1] !== "=") {
-      throw new Error("Expected '=' in PSPM property between key and " +
-          "value but got " + parts[i+1]); 
-    }
-    prop = parts[i].toLowerCase();
-    num = parts[i+2];
-    if (!num_re.test(num)) {
-      throw new Error("Expected numeric value for PSPM property '" + 
-          prop + "' but got '" + num + "'");
-    }
-    properties[prop] = num;
-  }
-  return properties;
-}
-
-function parse_pspm_string(pspm_string) {
-  "use strict";
-  var header_re, lines, first_line, line_num, col_num, alph_length, 
-      motif_length, nsites, evalue, pspm, i, line, match, props, parts,
-      j, prob;
-  header_re = /^letter-probability\s+matrix:(.*)$/i;
-  lines = pspm_string.split(/\n/);
-  first_line = true;
-  line_num = 0;
-  col_num = 0;
-  alph_length;
-  motif_length;
-  nsites;
-  evalue;
-  pspm = [];
-  for (i = 0; i < lines.length; i++) {
-    line = trim(lines[i]);
-    if (line.length === 0) { 
-      continue;
-    }
-    // check the first line for a header though allow matrices without it
-    if (first_line) {
-      first_line = false;
-      match = header_re.exec(line);
-      if (match !== null) {
-        props = parse_pspm_properties(match[1]);
-        if (props.hasOwnProperty("alength")) {
-          alph_length = parseFloat(props["alength"]);
-          if (alph_length != 4 && alph_length != 20) {
-            throw new Error("PSPM property alength should be 4 or 20" +
-                " but got " + alph_length);
-          }
-        }
-        if (props.hasOwnProperty("w")) {
-          motif_length = parseFloat(props["w"]);
-          if (motif_length % 1 !== 0 || motif_length < 1) {
-            throw new Error("PSPM property w should be an integer larger " +
-                "than zero but got " + motif_length);
-          }
-        }
-        if (props.hasOwnProperty("nsites")) {
-          nsites = parseFloat(props["nsites"]);
-          if (nsites <= 0) {
-            throw new Error("PSPM property nsites should be larger than " +
-                "zero but got " + nsites);
-          }
-        }
-        if (props.hasOwnProperty("e")) {
-          evalue = props["e"];
-          if (evalue < 0) {
-            throw new Error("PSPM property evalue should be " +
-                "non-negative but got " + evalue);
-          }
-        }
-        continue;
-      }
-    }
-    pspm[line_num] = [];
-    col_num = 0;
-    parts = line.split(/\s+/);
-    for (j = 0; j < parts.length; j++) {
-      prob = parseFloat(parts[j]);
-      if (prob != parts[j] || prob < 0 || prob > 1) {
-        throw new Error("Expected probability but got '" + parts[j] + "'"); 
-      }
-      pspm[line_num][col_num] = prob;
-      col_num++;
-    }
-    line_num++;
-  }
-  if (typeof motif_length === "number") {
-    if (pspm.length != motif_length) {
-      throw new Error("Expected PSPM to have a motif length of " + 
-          motif_length + " but it was actually " + pspm.length);
-    }
-  } else {
-    motif_length = pspm.length;
-  }
-  if (typeof alph_length !== "number") {
-    alph_length = pspm[0].length;
-    if (alph_length != 4 && alph_length != 20) {
-      throw new Error("Expected length of first row in the PSPM to be " +
-          "either 4 or 20 but got " + alph_length);
-    }
-  }
-  for (i = 0; i < pspm.length; i++) {
-    if (pspm[i].length != alph_length) {
-      throw new Error("Expected PSPM row " + i + " to have a length of " + 
-          alph_length + " but the length was " + pspm[i].length);
-    }
-  }
-  return {"pspm": pspm, "motif_length": motif_length, 
-    "alph_length": alph_length, "nsites": nsites, "evalue": evalue};
-}
-//======================================================================
-// end Pspm object
-//======================================================================
-
-//======================================================================
-// start Logo object
-//======================================================================
-
-var Logo = function(alphabet, options) {
-  "use strict";
-  this.alphabet = alphabet;
-  this.fine_text = "";
-  this.x_axis = 1;
-  this.y_axis = true;
-  this.xlate_nsyms = 1;
-  this.xlate_start = null;
-  this.xlate_end = null;
-  this.pspm_list = [];
-  this.pspm_column = [];
-  this.rows = 0;
-  this.columns = 0;
-  if (typeof options === "string") {
-    // the old method signature had fine_text here so we support that
-    this.fine_text = options;
-  } else if (typeof options === "object" && options != null) {
-    this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : "");
-    this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1);
-    if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1;
-    this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true);
-    this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms);
-    this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start);
-    this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end);
-  }
-};
-
-Logo.prototype.add_pspm = function(pspm, column) {
-  "use strict";
-  var col;
-  if (typeof column === "undefined") {
-    column = 0;
-  } else if (column < 0) {
-    throw new Error("Column index out of bounds.");
-  }
-  this.pspm_list[this.rows] = pspm;
-  this.pspm_column[this.rows] = column;
-  this.rows++;
-  col = column + pspm.get_motif_length();
-  if (col > this.columns) {
-    this.columns = col;
-  }
-};
-
-Logo.prototype.get_columns = function() {
-  "use strict";
-  return this.columns;
-};
-
-Logo.prototype.get_xlate_nsyms = function() {
-  "use strict";
-  return this.xlate_nsyms;
-};
-
-Logo.prototype.get_xlate_start = function() {
-  "use strict";
-  return (this.xlate_start != null ? this.xlate_start : 0);
-};
-
-Logo.prototype.get_xlate_end = function() {
-  "use strict";
-  return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms);
-};
-
-Logo.prototype.get_xlate_columns = function() {
-  "use strict";
-  return this.get_xlate_end() - this.get_xlate_start();
-};
-
-Logo.prototype.get_rows = function() {
-  "use strict";
-  return this.rows;
-};
-
-Logo.prototype.get_pspm = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_list[row_index];
-};
-
-Logo.prototype.get_offset = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_column[row_index];
-};
-
-Logo.prototype._as_eps_data = function(ssc, errbars) {
-  var i, j, pos, stack_pos, pspm, stack, sym, out;
-  out = "";
-  for (i = 0; i < this.rows; i++) {
-    out += "\nStartLine\n";
-    // Indent
-    for (j = 0; j < this.pspm_column[i]; j++) {
-      out += "() startstack\nendstack\n\n";
-    }
-    pspm = this.pspm_list[i];
-    if (pspm.get_left_trim() > 0) {
-      out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n";
-    }
-    for (pos = 0; pos < pspm.get_motif_length(); pos++) {
-      if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour
-        out += "DrawTrimEdge\nRestoreColour\n";
-      } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) {
-        out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n";
-      }
-      out += "(" + (pos + 1) + ") startstack\n";
-      stack = pspm.get_stack(pos, this.alphabet, ssc);
-      for (stack_pos = 0; stack_pos < stack.length; stack_pos++) {
-        sym = stack[stack_pos];
-        out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n";
-      }
-      if (errbars) {
-        out += " " + pspm.get_error(this.alphabet) + " Ibeam\n";
-      }
-      out += "endstack\n\n";
-    }
-    if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) {
-      out += "RestoreColour\n";
-    }
-    out += "EndLine\n";
-  }
-  return out;
-};
-
-Logo.prototype.as_eps = function(options) {
-  "use strict";
-  if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS");
-  if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS");
-  if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS");
-
-  var LOGOHEIGHT = 7.5; // default height of line in cm
-  var cm2pts, height, width, now, ssc, errbars;
-  if (typeof options === "undefined") {
-    options = {};
-  }
-  cm2pts = 72 / 2.54;
-  if (typeof options.logo_height == "number") {
-    height = options.logo_height;
-  } else {
-    height = LOGOHEIGHT * this.rows;
-  }
-  if (typeof options.logo_width == "number") {
-    width = options.logo_width;
-  } else {
-    width = this.columns + 2;
-  }
-  now = new Date();
-  ssc = (typeof options.ssc == "boolean" ? options.ssc : false);
-  errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc);
-  var values = {
-    "LOGOHEIGHT": height,
-    "LOGOWIDTH": width,
-    "BOUNDINGHEIGHT": Math.round(height * cm2pts),
-    "BOUNDINGWIDTH": Math.round(width * cm2pts),
-    "LOGOLINEHEIGHT": (height / this.rows),
-    "CHARSPERLINE": this.columns,
-    "BARBITS": this.alphabet.get_ic(),
-    "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"),
-    "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(),
-    "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0),
-    "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0),
-    "TITLE": (typeof options.title == "string" ? options.title : ""),
-    "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text),
-    "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""),
-    "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"),
-    "SSC": ssc,
-    "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis),
-    "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false),
-    "ERRBAR": errbars,
-    "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false),
-    "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0),
-    "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false),
-    "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"),
-    "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12),
-    "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12),
-    "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6),
-    "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9),
-    "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9),
-    "COLORDICT": this.alphabet._as_eps_dict(),
-    "DATA": this._as_eps_data(ssc, errbars)
-  };
-  // now this requires that the script containing the template has been imported!
-  return motif_logo_template(values);
-};
-
-//======================================================================
-// end Logo object
-//======================================================================
-
-// calculate the exact size (in pixels) of an object drawn on the
-// canvas assuming that the background of the canvas is transparent.
-function canvas_bounds(ctx, cwidth, cheight) {
-  "use strict";
-  var data, r, c, top_line, bottom_line, left_line, right_line, 
-      txt_width, txt_height;
-
-  // extract the image data
-  data = ctx.getImageData(0, 0, cwidth, cheight).data;
-
-  // set initial values
-  top_line = -1; bottom_line = -1; left_line = -1; right_line = -1;
-  txt_width = 0; txt_height = 0;
-
-  // Find the top-most line with a non-transparent pixel
-  for (r = 0; r < cheight; r++) {
-    for (c = 0; c < cwidth; c++) {
-      if (data[r * cwidth * 4 + c * 4 + 3]) {
-        top_line = r;
-        break;
-      }
-    }
-    if (top_line != -1) {
-      break;
-    }
-  }
-  
-  // Only bother looking if we found at least one set pixel... 
-  if (top_line != -1) {
-
-    //find the last line with a non-transparent pixel
-    for (r = cheight-1; r >= top_line; r--) {
-      for(c = 0; c < cwidth; c++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          bottom_line = r;
-          break;
-        }
-      }
-      if (bottom_line != -1) {
-        break;
-      }
-    }
-    // calculate height
-    txt_height = bottom_line - top_line + 1;
-
-    // Find the left-most line with a non-transparent pixel
-    for (c = 0; c < cwidth; c++) {
-      for (r = top_line; r <= bottom_line; r++) {
-        if (data[r * cwidth * 4 + c * 4 + 3]) {
-          left_line = c;
-          break;
-        }
-      }
-      if (left_line != -1) {
-        break;
-      }
-    }
-
-    //find the right most line with a non-transparent pixel
-    for (c = cwidth-1; c >= left_line; c--) {
-      for(r = top_line; r <= bottom_line; r++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          right_line = c;
-          break;
-        }
-      }
-      if (right_line != -1) {
-        break;
-      }
-    }
-    txt_width = right_line - left_line + 1;
-  }
-
-  //return the bounds
-  return {bound_top: top_line, bound_bottom: bottom_line, 
-    bound_left: left_line, bound_right: right_line, width: txt_width, 
-    height: txt_height};
-}
-
-//======================================================================
-// start RasterizedAlphabet
-//======================================================================
-
-// Rasterize Alphabet
-// 1) Measure width of text at default font for all symbols in alphabet
-// 2) sort in width ascending
-// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I')
-// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob).
-// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font
-// 6) Draw text onto temp canvas at calculated scale
-// 7) Find bounds of drawn text
-// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger).
-var RasterizedAlphabet = function(alphabet, logo_scale, font, width) {
-  "use strict";
-  var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes,
-      i, sym, size, tenpercent, avg_width, scale, 
-      target_width, target_height;
-  //variable prototypes
-  this.alphabet = alphabet;
-  this.scale = logo_scale;
-  this.sym_cache = {};
-  this.stack_num_cache = [];
-  this.scale_num_cache = [];
-  // size of canvas
-  default_size = 60; // size of measuring canvas
-  safety_pad = 20; // pixels to pad around so we don't miss the edges
-  // create a canvas to do our measuring
-  canvas = document.createElement("canvas");
-  if (!canvas.getContext) throw new Error("No canvas support");
-  canvas.width = default_size + 2 * safety_pad;
-  canvas.height = default_size + 2 * safety_pad;
-  middle = Math.round(canvas.width / 2);
-  baseline = Math.round(canvas.height - safety_pad);
-  ctx = canvas.getContext('2d');
-  if (!supports_text(ctx)) throw new Error("Canvas does not support text");
-  ctx.font = font;
-  ctx.textAlign = "center";
-  ctx.translate(middle, baseline);
-  // list of widths
-  widths = [];
-  sizes = [];
-  //now measure each letter in the alphabet
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    // reset the canvas
-    ctx.clearRect(0, 0, canvas.width, canvas.height);
-    ctx.fillStyle = alphabet.get_colour(i);
-    // draw the test text
-    ctx.fillText(alphabet.get_symbol(i), 0, 0);
-    //measure
-    size = canvas_bounds(ctx, canvas.width, canvas.height);
-    if (size.width === 0) throw new Error("Invisible symbol!");
-    widths.push(size.width);
-    sizes[i] = size;
-  }
-  //sort the widths
-  widths.sort(function(a,b) {return a - b;});
-  //drop 10% of the items off each end
-  tenpercent = Math.floor(widths.length / 10);
-  for (i = 0; i < tenpercent; ++i) {
-    widths.pop();
-    widths.shift();
-  }
-  //calculate average width
-  avg_width = 0;
-  for (i = 0; i < widths.length; ++i) {
-    avg_width += widths[i];
-  }
-  avg_width /= widths.length;
-  // calculate the target width
-  target_width = width * this.scale * 2;
-  // calculate scales
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    sym = alphabet.get_symbol(i);
-    size = sizes[i];
-    // calculate scale
-    scale = target_width / Math.max(avg_width, size.width);
-    // estimate scaled height
-    target_height = size.height * scale;
-    // create an appropriately sized canvas
-    canvas = document.createElement("canvas");
-    canvas.width = target_width;
-    canvas.height = target_height + safety_pad * 2;
-    // calculate the middle
-    middle = Math.round(canvas.width / 2);
-    // calculate the baseline
-    baseline = Math.round(canvas.height - safety_pad);
-    // get the context and prepare to draw the rasterized text
-    ctx = canvas.getContext('2d');
-    ctx.font = font;
-    ctx.fillStyle = alphabet.get_colour(i);
-    ctx.textAlign = "center";
-    ctx.translate(middle, baseline);
-    ctx.save();
-    ctx.scale(scale, scale);
-    // draw the text
-    ctx.fillText(sym, 0, 0);
-    ctx.restore();
-    this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)};
-  }
-};
-
-RasterizedAlphabet.prototype.get_alphabet = function() {
-  return this.alphabet;
-};
-
-RasterizedAlphabet.prototype.get_scale = function() {
-  return this.scale;
-};
-
-RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) {
-  "use strict";
-  var entry, image, size;
-  entry = this.sym_cache[letter];
-  image = entry.image;
-  size = entry.size;
-  ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight);
-};
-
-RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) {
-  var image, image_ctx, text_length;
-  if (index >= this.stack_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.save();
-    image_ctx.font = font;
-    text_length = image_ctx.measureText("" + (index + 1)).width;
-    image_ctx.restore();
-    // resize the canvas to fit
-    image.width = Math.ceil(stack_width);
-    image.height = Math.ceil(text_length);
-    // draw the text
-    image_ctx = image.getContext('2d');
-    image_ctx.translate(Math.round(stack_width / 2), 0);
-    image_ctx.font = font;
-    image_ctx.textBaseline = "middle";
-    image_ctx.textAlign = "right";
-    image_ctx.rotate(-(Math.PI / 2));
-    image_ctx.fillText("" + (index + 1), 0, 0);
-    this.stack_num_cache[index] = image;
-  } else {
-    image = this.stack_num_cache[index];
-  }
-  ctx.drawImage(image, 0, 0);
-}
-
-RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) {
-  var image, image_ctx, text_size, m_length;
-  if (num >= this.scale_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.font = font;
-    text_size = image_ctx.measureText("" + num);
-    if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) {
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent);
-    } else {
-      // measure width of 'm' to approximate height, we double it later anyway
-      m_length = image_ctx.measureText("m").width;
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(2 * m_length);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.textBaseline = "middle";
-      image_ctx.fillText("" + num, image.width, m_length);
-    }
-    this.scale_num_cache[num] = image;
-  } else {
-    image = this.scale_num_cache[num];
-  }
-  ctx.drawImage(image, -image.width, -Math.round(image.height / 2))
-}
-
-//======================================================================
-// end RasterizedAlphabet
-//======================================================================
-
-//======================================================================
-// start LogoMetrics object
-//======================================================================
-
-var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) {
-  "use strict";
-  var i, row_height;
-  //variable prototypes
-  this.pad_top = (has_names ? 5 : 0);
-  this.pad_left = (y_axis ? 10 : 0);
-  this.pad_right = (has_finetext ? 15 : 0);
-  this.pad_bottom = 0;
-  this.pad_middle = 20;
-  this.name_height = 14;
-  this.name_font = "bold " + this.name_height + "px Times, sans-serif";
-  this.name_spacer = 0;
-  this.y_axis = y_axis;
-  this.y_label = "bits";
-  this.y_label_height = 12;
-  this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif";
-  this.y_label_spacer = 3;
-  this.y_num_height = 12;
-  this.y_num_width = 0;
-  this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif";
-  this.y_tic_width = 5;
-  this.stack_pad_left = 0;
-  this.stack_font = "bold 25px Helvetica, sans-serif";
-  this.stack_height = 90;
-  this.stack_width = 26;
-  this.stacks_pad_right = 5;
-  this.x_axis = x_axis;
-  this.x_num_above = 2;
-  this.x_num_height = 12;
-  this.x_num_width = 0;
-  this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif";
-  this.fine_txt_height = 6;
-  this.fine_txt_above = 2;
-  this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif";
-  this.letter_metrics = new Array();
-  this.summed_width = 0;
-  this.summed_height = 0;
-  //calculate the width of the y axis numbers
-  ctx.font = this.y_num_font;
-  for (i = 0; i <= 2; i++) {
-    this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width);
-  }
-  //calculate the width of the x axis numbers (but they are rotated so it becomes height)
-  if (x_axis == 1) {
-    ctx.font = this.x_num_font;
-    for (i = 1; i <= logo_columns; i++) {
-      this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width);
-    }
-  } else if (x_axis == 0) {
-    this.x_num_height = 4;
-    this.x_num_width = 4;
-  } else {
-    this.x_num_height = 0;
-    this.x_num_width = 0;
-  }
-  
-  //calculate how much vertical space we want to draw this
-  //first we add the padding at the top and bottom since that's always there
-  this.summed_height += this.pad_top + this.pad_bottom;
-  //all except the last row have the same amount of space allocated to them
-  if (logo_rows > 1) {
-    row_height = this.stack_height + this.pad_middle;
-    if (has_names) {
-      row_height += this.name_height;
-      //the label is allowed to overlap into the spacer
-      row_height += Math.max(this.y_num_height/2, this.name_spacer); 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    } else {
-      row_height += this.y_num_height/2; 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    }
-    this.summed_height += row_height * (logo_rows - 1);
-  }
-  //the last row has the name and fine text below it but no padding
-  this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0);
-
-  var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0);
-  if (has_names) {
-    this.summed_height += fine_txt_total + this.name_height;
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + this.name_spacer);
-  } else {
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + fine_txt_total);
-  }
-
-  //calculate how much horizontal space we want to draw this
-  //first add the padding at the left and right since that's always there
-  this.summed_width += this.pad_left + this.pad_right;
-  if (this.y_axis) {
-    //add on the space for the y-axis label
-    this.summed_width += this.y_label_height + this.y_label_spacer;
-    //add on the space for the y-axis
-    this.summed_width += this.y_num_width + this.y_tic_width;
-  }
-  //add on the space for the stacks
-  this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns;
-  //add on the padding after the stacks (an offset from the fine text)
-  this.summed_width += this.stacks_pad_right;
-
-};
-
-//======================================================================
-// end LogoMetrics object
-//======================================================================
-
-//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm
-function image_ok(img) {
-  "use strict";
-  // During the onload event, IE correctly identifies any images that
-  // weren't downloaded as not complete. Others should too. Gecko-based
-  // browsers act like NS4 in that they report this incorrectly.
-  if (!img.complete) {
-    return false;
-  }
-  // However, they do have two very useful properties: naturalWidth and
-  // naturalHeight. These give the true size of the image. If it failed
-  // to load, either of these should be zero.
-  if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) {
-    return false;
-  }
-  // No other way of checking: assume it's ok.
-  return true;
-}
-  
-function supports_text(ctx) {
-  "use strict";
-  if (!ctx.fillText) {
-    return false;
-  }
-  if (!ctx.measureText) {
-    return false;
-  }
-  return true;
-}
-
-//draws the scale, returns the width
-function draw_scale(ctx, metrics, alphabet_ic, raster) {
-  "use strict";
-  var tic_height, i;
-  tic_height = metrics.stack_height / alphabet_ic;
-  ctx.save();
-  ctx.translate(metrics.y_label_height, metrics.y_num_height/2);
-  //draw the axis label
-  ctx.save();
-  ctx.font = metrics.y_label_font;
-  ctx.translate(0, metrics.stack_height/2);
-  ctx.rotate(-(Math.PI / 2));
-  ctx.textAlign = "center";
-  ctx.fillText("bits", 0, 0);
-  ctx.restore();
-
-  ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0);
-
-  //draw the axis tics
-  ctx.save();
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i <= alphabet_ic; i++) {
-    //draw the number
-    ctx.save();
-    ctx.translate(-1, 0);
-    raster.draw_scale_num(ctx, metrics.y_num_font, i);
-    ctx.restore();
-    //draw the tic
-    ctx.fillRect(0, -1, metrics.y_tic_width, 2);
-    //prepare for next tic
-    ctx.translate(0, -tic_height);
-  }
-  ctx.restore();
-
-  ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height)
-
-  ctx.restore();
-}
-
-function draw_stack_num(ctx, metrics, row_index, raster) {
-  "use strict";
-  ctx.save();
-  ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above));
-  if (metrics.x_axis == 1) {
-    raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index);
-  } else if (metrics.x_axis == 0) {
-    // draw dots instead of the numbers (good for small logos)
-    ctx.beginPath();
-    var radius = Math.round(metrics.x_num_height / 2);
-    ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false);
-    ctx.fill();
-  }
-  ctx.restore();
-}
-
-function draw_stack(ctx, metrics, symbols, raster) {
-  "use strict";
-  var preferred_pad, sym_min, i, sym, sym_height, pad;
-  preferred_pad = 0;
-  sym_min = 5;
-
-  ctx.save();//1
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i < symbols.length; i++) {
-    sym = symbols[i];
-    sym_height = metrics.stack_height * sym.get_scale();
-    
-    pad = preferred_pad;
-    if (sym_height - pad < sym_min) {
-      pad = Math.min(pad, Math.max(0, sym_height - sym_min));
-    }
-    sym_height -= pad;
-
-    //translate to the correct position
-    ctx.translate(0, -(pad/2 + sym_height));
-
-    //draw
-    raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height);
-    //translate past the padding
-    ctx.translate(0, -(pad/2));
-  }
-  ctx.restore();//1
-}
-
-function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) {
-  "use strict";
-  var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly;
-  dx = x2 - x1;
-  dy = y2 - y1;
-  tlen = Math.pow(dx*dx + dy*dy, 0.5);
-  theta = Math.atan2(dy,dx);
-  mulx = Math.cos(theta);
-  muly = Math.sin(theta);
-  lx = [];
-  ly = [];
-  for (i = 0; i < pattern; ++i) {
-    lx.push(pattern[i] * mulx);
-    ly.push(pattern[i] * muly);
-  }
-  i = start;
-  x = x1;
-  y = y1;
-  len = 0;
-  ctx.beginPath();
-  while (len + pattern[i] < tlen) {
-    ctx.moveTo(x, y);
-    x += lx[i];
-    y += ly[i];
-    ctx.lineTo(x, y);
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-    x += lx[i];
-    y += ly[i];
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-  }
-  if (len < tlen) {
-    ctx.moveTo(x, y);
-    x += mulx * (tlen - len);
-    y += muly * (tlen - len);
-    ctx.lineTo(x, y);
-  }
-  ctx.stroke();
-}
-
-function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) {
-  "use strict";
-  var left_size = left_end - left_start;
-  var right_size = right_end - right_start;
-  var line_x;
-
-  ctx.save();//s8
-  ctx.fillStyle = "rgb(240, 240, 240)";
-  if (left_size > 0) {
-    ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height);
-  }
-  if (right_size > 0) {
-    ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height);
-  }
-  ctx.fillStyle = "rgb(51, 51, 51)";
-  if (left_size > 0 && left_divider) {
-    line_x = (left_end * metrics.stack_width) - 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  if (right_size > 0 && right_divider) {
-    line_x = (right_start * metrics.stack_width) + 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  ctx.restore();//s8
-}
-
-function size_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var draw_name, draw_finetext, metrics;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  if (canvas.width !== 0 && canvas.height !== 0) {
-    return;
-  }
-  metrics = new LogoMetrics(canvas.getContext('2d'), 
-      logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height);
-    } else if (canvas.height === 0) {
-      canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width);
-    }
-  }
-}
-
-function draw_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, 
-      offset, col_index, motif_position, ssc;
-  ssc = false;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  ctx = canvas.getContext('2d');
-  //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be
-  metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      scale = 1;
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      scale = canvas.height / metrics.summed_height;
-      canvas.width = metrics.summed_width * scale;
-    } else if (canvas.height === 0) {
-      scale = canvas.width / metrics.summed_width;
-      canvas.height = metrics.summed_height * scale;
-    } else {
-      scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height);
-    }
-  }
-  // cache the raster based on the assumption that we will be drawing a lot
-  // of logos the same size and alphabet
-  if (typeof draw_logo_on_canvas.raster_cache === "undefined") {
-    draw_logo_on_canvas.raster_cache = [];
-  }
-  for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) {
-    raster = draw_logo_on_canvas.raster_cache[i];
-    if (raster.get_alphabet().equals(logo.alphabet) &&
-        Math.abs(raster.get_scale() - scale) < 0.1) break;
-    raster = null;
-  }
-  if (raster == null) {
-    raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width);
-    draw_logo_on_canvas.raster_cache.push(raster);
-  }
-  ctx = canvas.getContext('2d');
-  ctx.save();//s1
-  ctx.scale(scale, scale);
-  ctx.save();//s2
-  ctx.save();//s7
-  //create margin
-  ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top));
-  for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) {
-    pspm = logo.get_pspm(pspm_i);
-    offset = logo.get_offset(pspm_i);
-    //optionally draw name if this isn't the last row or is the only row 
-    if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) {
-      ctx.save();//s4
-      ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height));
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s4
-      ctx.translate(0, Math.round(metrics.name_height + 
-          Math.min(0, metrics.name_spacer - metrics.y_num_height/2)));
-    }
-    //draw scale
-    if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster);
-    ctx.save();//s5
-    //translate across past the scale
-    if (logo.y_axis) {
-      ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + 
-        metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2));
-    }
-    //draw the trimming background
-    if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) {
-      var left_start = offset * logo.get_xlate_nsyms();
-      var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms();
-      var left_divider = true;
-      if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) {
-        // no overlap
-        left_start = 0;
-        left_end = 0;
-        left_divider = false;
-      } else {
-        if (left_start < logo.get_xlate_start()) {
-          left_start = logo.get_xlate_start();
-        }
-        if (left_end > logo.get_xlate_end()) {
-          left_end = logo.get_xlate_end();
-          left_divider = false;
-        }
-        left_start -= logo.get_xlate_start();
-        left_end -= logo.get_xlate_start();
-        if (left_end < left_start) {
-          left_start = 0;
-          left_end = 0;
-          left_divider = false;
-        }
-      }
-      var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms();
-      //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms());
-      var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms());
-      var right_divider = true;
-      if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) {
-        // no overlap
-        right_start = 0;
-        right_end = 0;
-        right_divider = false;
-      } else {
-        if (right_start < logo.get_xlate_start()) {
-          right_start = logo.get_xlate_start();
-          right_divider = false;
-        }
-        if (right_end > logo.get_xlate_end()) {
-          right_end = logo.get_xlate_end();
-        }
-        right_start -= logo.get_xlate_start();
-        right_end -= logo.get_xlate_start();
-        if (right_end < right_start) {
-          right_start = 0;
-          right_end = 0;
-          right_divider = false;
-        }
-      }
-      draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider);
-    }
-    //draw letters
-    var xlate_col;
-    for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) {
-      ctx.translate(metrics.stack_pad_left,0);
-      col_index = Math.floor(xlate_col / logo.get_xlate_nsyms());
-      if (xlate_col % logo.get_xlate_nsyms() == 0) {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          motif_position = col_index - offset;
-          draw_stack_num(ctx, metrics, motif_position, raster);
-          draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster);
-        }
-      } else {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          ctx.save();// s5.1
-          ctx.translate(0, Math.round(metrics.stack_height));
-          // TODO draw a dot or dash or something to indicate continuity of the motif
-          ctx.restore(); //s5.1
-        }
-      }
-      ctx.translate(Math.round(metrics.stack_width), 0);
-    }
-    ctx.restore();//s5
-    ////optionally draw name if this is the last row but isn't the only row 
-    if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer));
-
-      ctx.save();//s6
-      ctx.translate(metrics.summed_width/2, metrics.name_height);
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s6
-      ctx.translate(0, metrics.name_height);
-    } else {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width));
-    }
-    //if not the last row then add middle padding
-    if (pspm_i != (logo.get_rows() -1)) {
-      ctx.translate(0, metrics.pad_middle);
-    }
-  }
-  ctx.restore();//s7
-  if (logo.fine_text.length > 0) {
-    ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom);
-    ctx.font = metrics.fine_txt_font;
-    ctx.textAlign = "right";
-    ctx.fillText(logo.fine_text, 0,0);
-  }
-  ctx.restore();//s2
-  ctx.restore();//s1
-}
-
-function create_canvas(c_width, c_height, c_id, c_title, c_display) {
-  "use strict";
-  var canvas = document.createElement("canvas");
-  //check for canvas support before attempting anything
-  if (!canvas.getContext) {
-    return null;
-  }
-  var ctx = canvas.getContext('2d');
-  //check for html5 text drawing support
-  if (!supports_text(ctx)) {
-    return null;
-  }
-  //size the canvas
-  canvas.width = c_width;
-  canvas.height = c_height;
-  canvas.id = c_id;
-  canvas.title = c_title;
-  canvas.style.display = c_display;
-  return canvas;
-}
-
-function logo_1(alphabet, fine_text, pspm) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  logo.add_pspm(pspm);
-  return logo;
-}
-
-function logo_2(alphabet, fine_text, target, query, query_offset) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  if (query_offset < 0) {
-    logo.add_pspm(target, -query_offset);
-    logo.add_pspm(query);
-  } else {
-    logo.add_pspm(target);
-    logo.add_pspm(query, query_offset);
-  }      
-  return logo;
-}
-
-/*
- * Specifies an alternate source for an image.
- * If the image with the image_id specified has
- * not loaded then a generated logo will be used 
- * to replace it.
- *
- * Note that the image must either have dimensions
- * or a scale must be set.
- */
-function alternate_logo(logo, image_id, scale) {
-  "use strict";
-  var image = document.getElementById(image_id);
-  if (!image) {
-    alert("Can't find specified image id (" +  image_id + ")");
-    return;
-  }
-  //if the image has loaded then there is no reason to use the canvas
-  if (image_ok(image)) {
-    return;
-  }
-  //the image has failed to load so replace it with a canvas if we can.
-  var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the image with the canvas
-  image.parentNode.replaceChild(canvas, image);
-}
-
-/*
- * Specifes that the element with the specified id
- * should be replaced with a generated logo.
- */
-function replace_logo(logo, replace_id, scale, title_txt, display_style) {
-  "use strict";
-  var element = document.getElementById(replace_id);
-  if (!replace_id) {
-    alert("Can't find specified id (" + replace_id + ")");
-    return;
-  }
-  //found the element!
-  var canvas = create_canvas(50, 120, replace_id, title_txt, display_style);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the element with the canvas
-  element.parentNode.replaceChild(canvas, element);
-}
-
-/*
- * Fast string trimming implementation found at
- * http://blog.stevenlevithan.com/archives/faster-trim-javascript
- *
- * Note that regex is good at removing leading space but
- * bad at removing trailing space as it has to first go through
- * the whole string.
- */
-function trim (str) {
-  "use strict";
-  var ws, i;
-  str = str.replace(/^\s\s*/, '');
-  ws = /\s/; i = str.length;
-  while (ws.test(str.charAt(--i)));
-  return str.slice(0, i + 1);
-}
-</script>
-    <script>
-var current_motif = 0;
-var dreme_alphabet = new Alphabet(data.alphabet, data.control_db.freqs);
-
-/*
- * Create a pspm for the given motif data
- */
-function motif_pspm(m) {
-  return new Pspm(m.pwm, m.id, 0, 0, m.nsites, m.evalue);
-}
-
-/*
- * Create a count matrix from the given motif data
- */
-function motif_count_matrix(motif) {
-  return motif_pspm(motif).as_count_matrix();
-}
-
-/*
- * Create a probablity matrix from the given motif data
- */
-function motif_prob_matrix(motif) {
-  return motif_pspm(motif).as_probability_matrix();
-}
-
-/*
- * Create a minimal meme format motif from the given motif data
- */
-function motif_minimal_meme(motif) {
-  return motif_pspm(motif).as_meme({
-    "with_header": true, 
-    "with_pspm": true,
-    "with_pssm": false,
-    "version": data["version"],
-    "alphabet": dreme_alphabet,
-    "strands": (data.options.revcomp ? 2 : 1)
-  });
-}
-
-/*
- * Fill in a template variable
- */
-function set_tvar(template, tvar, value) {
-  var node;
-  node = find_child(template, tvar);
-  if (node === null) {
-    throw new Error("Template does not contain variable " + tvar);
-  }
-  node.innerHTML = "";
-  if (typeof value !== "object") {
-    node.appendChild(document.createTextNode(value));
-  } else {
-    node.appendChild(value);
-  }
-}
-
-/*
- * Make a canvas with the motif logo drawn on it. 
- */
-function make_logo(motif, height, rc) {
-  var pspm = new Pspm(motif["pwm"]);
-  if (rc) pspm = pspm.copy().reverse_complement(dreme_alphabet);
-  var logo = new Logo(dreme_alphabet);
-  logo.add_pspm(pspm, 0);
-  var canvas = document.createElement('canvas');
-  canvas.height = height;
-  canvas.width = 0;
-  draw_logo_on_canvas(logo, canvas, false);
-  return canvas;
-}
-
-/*
- * Create a button designed to contain a single symbol
- */
-function make_sym_btn(symbol, title, action) {
-  var box, sbox;
-  box = document.createElement("div");
-  box.tabIndex = 0;
-  box.className = "sym_btn";
-  sbox = document.createElement("span");
-  if (typeof symbol == "string") {
-    sbox.appendChild(document.createTextNode(symbol));
-  } else {
-    sbox.appendChild(symbol);
-  }
-  box.appendChild(sbox);
-  box.title = title;
-  box.addEventListener('click', action, false);
-  box.addEventListener('keydown', action, false);
-  return box;
-}
-
-/*
- * Create a pair of text spans with different classes.
- * This is useful when using CSS to only display one of them.
- */
-function text_pair(txt1, cls1, txt2, cls2) {
-  var container, part1, part2;
-  container = document.createElement("span");
-  part1 = document.createElement("span");
-  part1.appendChild(document.createTextNode(txt1));
-  part1.className = cls1;
-  container.appendChild(part1);
-  part2 = document.createElement("span");
-  part2.appendChild(document.createTextNode(txt2));
-  part2.className = cls2;
-  container.appendChild(part2);
-  return container;
-}
-
-/*
- * Make a colourised sequence.
- */
-function make_seq(seq) {
-  var i, j, letter, lbox, sbox;
-  sbox = document.createElement("span");
-  for (i = 0; i < seq.length; i = j) {
-    letter = seq.charAt(i);
-    for (j = i+1; j < seq.length; j++) {
-      if (seq.charAt(j) !== letter) {
-        break;
-      }
-    }
-    lbox = document.createElement("span");
-    lbox.style.color = dreme_alphabet.get_colour(dreme_alphabet.get_index(letter));
-    lbox.appendChild(document.createTextNode(seq.substring(i, j)));
-    sbox.appendChild(lbox);
-  }
-  return sbox;
-}
-
-/*
- * Create a description element taking into account the newlines in the source text.
- */
-function make_description(text) {
-  var i, j, lines, p;
-  var container = document.createElement("div");
-  var paragraphs = text.split(/\n\n+/);
-  for (i = 0; i < paragraphs.length; i++) {
-    lines = paragraphs[i].split(/\n/);
-    p = document.createElement("p");
-    p.appendChild(document.createTextNode(lines[0]));
-    for (j = 1; j < lines.length; j++) {
-      p.appendChild(document.createElement("br"));
-      p.appendChild(document.createTextNode(lines[j]));
-    }
-    container.appendChild(p);
-  }
-  return container;
-}
-
-/*
- * Make the table header for the discovered motifs.
- */
-function make_motif_header() {
-  var row = document.createElement("tr");
-  add_text_header_cell(row, "", "", "motif_ordinal");
-  add_text_header_cell(row, "Motif", "pop_motifs_word", "motif_word");
-  add_text_header_cell(row, "Logo", "pop_motifs_logo", "motif_logo");
-  if (data.options.revcomp) {
-    add_text_header_cell(row, "RC Logo", "pop_motifs_rc_logo", "motif_logo");
-  }
-  add_text_header_cell(row, "E-value", "pop_motifs_evalue", "motif_evalue");
-  add_text_header_cell(row, "Unerased E-value", "pop_motifs_uevalue", "motif_evalue");
-  add_text_header_cell(row, "More", "pop_more", "motif_more");
-  add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit");
-  row.className = "more";
-  return row;
-}
-
-/*
- * Make a compact motif summary row for the discovered motifs.
- */
-function make_motif_row(tbody, ordinal, motif) {
-  var row = document.createElement("tr");
-  add_text_cell(row, "" + ordinal + ".", "motif_ordinal");
-  add_text_cell(row, motif["id"], "motif_word");
-  add_cell(row, make_logo(motif, 50, false), "motif_logo");
-  if (data.options.revcomp) {
-    add_cell(row, make_logo(motif, 50, true), "motif_logo");
-  }
-  add_text_cell(row, motif["evalue"], "motif_evalue");
-  add_text_cell(row, motif["unerased_evalue"], "motif_evalue");
-  add_cell(row, make_sym_btn(text_pair("\u21A7", "less", "\u21A5", "more"), "Show more information.", function(e) { toggle_class(tbody, "collapsed"); }, "\u21A5", ""), "motif_more");
-  add_cell(row, make_sym_btn("\u21E2", "Submit the motif to another MEME Suite program or download it.", function(e) { action_show_outpop(e, ordinal); }), "motif_submit");
-  return row;
-}
-
-/*
- * Make a sortable table of enriched matching rows.
- */
-function make_motif_words(motif) {
-  var row, i, match;
-  var table = document.createElement("table");
-  var thead = document.createElement("thead");
-  row = document.createElement("tr");
-  add_text_header_cell(row, "Word", "pop_match_word", "match_word", function(e) {sort_table(this, compare_words);});
-  add_text_header_cell(row, "Positives", "pop_match_pos", "match_count", function(e) {sort_table(this, compare_counts);});
-  add_text_header_cell(row, "Negatives", "pop_match_neg", "match_count", function(e) {sort_table(this, compare_counts);});
-  add_text_header_cell(row, "P-value", "pop_match_pval", "match_evalue", function(e) {sort_table(this, compare_evalues);});
-  add_text_header_cell(row, "E-value", "pop_match_eval", "match_evalue", function(e) {sort_table(this, compare_evalues);});
-  thead.appendChild(row);
-  table.appendChild(thead);
-  var tbody = document.createElement("tbody");
-  for (i = 0; i < motif.matches.length; i++) {
-    match = motif.matches[i];
-    row = document.createElement("tr");
-    add_cell(row, make_seq(match.seq), "match_word");
-    add_text_cell(row, match.p + " / " + data.sequence_db.count, "match_count");
-    add_text_cell(row, match.n + " / " + data.control_db.count, "match_count");
-    add_text_cell(row, match.pvalue, "match_evalue");
-    add_text_cell(row, match.evalue, "match_evalue");
-    tbody.appendChild(row);
-  }
-  table.appendChild(tbody);
-  return table;
-}
-
-/*
- * Make an expanded view of a discovered motif.
- */
-function make_motif_exp(tbody, ordinal, motif) {
-  "use strict";
-  var box, pspm, logo_box;
-  box = $("tmpl_motif_expanded").cloneNode(true);
-  toggle_class(box, "template", false);
-  box.id = "";
-  find_child(box, "tvar_logo").appendChild(make_logo(motif, 150, false));
-  if (data.options.revcomp) {
-    find_child(box, "tvar_rclogo").appendChild(make_logo(motif, 150, true));
-  }
-  set_tvar(box, "tvar_p", motif["p"]);
-  set_tvar(box, "tvar_p_total", data.sequence_db.count);
-  set_tvar(box, "tvar_n", motif["n"]);
-  set_tvar(box, "tvar_n_total", data.control_db.count);
-  set_tvar(box, "tvar_pvalue", motif["pvalue"]);
-  set_tvar(box, "tvar_evalue", motif["evalue"]);
-  set_tvar(box, "tvar_uevalue", motif["unerased_evalue"]);
-  set_tvar(box, "tvar_words", make_motif_words(motif));
-  var cell = document.createElement("td");
-  cell.colSpan = 8;
-  cell.appendChild(box);
-  var row = document.createElement("tr");
-  row.className = "more";
-  row.appendChild(cell);
-  return row;
-}
-
-/*
- * Convert a string containing a scientific number into the log of that number
- * without having an intermediate representation of the number.
- * This is intended to avoid underflow problems with the tiny evalues that
- * MEME and DREME can create.
- */
-function sci2log(scinum) {
-  "use strict";
-  var ev_re, match, sig, exp;
-  ev_re = /^(.*)e(.*)$/;
-  if (match = ev_re.exec(scinum)) {
-    sig = parseFloat(match[1]);
-    exp = parseInt(match[2]);
-    return Math.log(sig) + (exp * Math.log(10));
-  }
-  return 0;
-}
-
-/*
- * Create a table of discovered motifs. A fresh table body is used for each
- * motif to make hiding/showing rows with css easier.
- */
-function make_motifs() {
-  "use strict";
-  var i, row, tbody, motif, ordinal;
-  // make the motifs table
-  var container = $("motifs");
-  container.innerHTML = ""; // clear content
-  var table = document.createElement("table");
-  // add a header that is always shown
-  var thead = document.createElement("thead");
-  thead.appendChild(make_motif_header());
-  table.appendChild(thead);
-  for (i = 0; i < data.motifs.length; i++) {
-    ordinal = i + 1;
-    motif = data.motifs[i];
-    tbody = document.createElement("tbody");
-    tbody.className = "collapsed";
-    tbody.appendChild(make_motif_row(tbody, ordinal, motif));
-    tbody.appendChild(make_motif_exp(tbody, ordinal, motif));
-    // create a following header for every row except the last one
-    if ((i + 1) < data.motifs.length) tbody.appendChild(make_motif_header());
-    table.appendChild(tbody);
-  }
-  container.appendChild(table);
-}
-
-/*
- * Create a table showing all the alphabet symbols, their names and frequencies.
- */
-function make_alpha_bg(alph, freqs) {
-  function colour_symbol(index) {
-    var span = document.createElement("span");
-    span.appendChild(document.createTextNode(alph.get_symbol(index)));
-    span.style.color = alph.get_colour(index);
-    span.className = "alpha_symbol";
-    return span;
-  }
-  var table, thead, tbody, row, th, span, i;
-  // create table
-  table = document.createElement("table");
-  table.className = "inputs";
-  // create header
-  thead = document.createElement("thead");
-  table.appendChild(thead);
-  row = thead.insertRow(thead.rows.length);
-  if (alph.has_complement()) {
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    add_text_header_cell(row, "Bg.", "pop_alph_control");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "Bg.", "pop_alph_control");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-  } else {
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    add_text_header_cell(row, "Bg.", "pop_alph_control");
-  }
-  // add alphabet entries
-  tbody = document.createElement("tbody");
-  table.appendChild(tbody);
-  if (alph.has_complement()) {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      var c = alph.get_complement(i);
-      if (i > c) continue;
-      row = tbody.insertRow(tbody.rows.length);
-      add_text_cell(row, alph.get_name(i));
-      add_text_cell(row, "" + freqs[i].toFixed(3));
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, "~");
-      add_cell(row, colour_symbol(c)); 
-      add_text_cell(row, "" + freqs[c].toFixed(3));
-      add_text_cell(row, alph.get_name(c));
-    }
-  } else {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      row = tbody.insertRow(tbody.rows.length);
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, alph.get_name(i));
-      add_text_cell(row, "" + freqs[i].toFixed(3));
-    }
-  }
-  return table;
-}
-
-/*
- * Updates the format download text in the popup.
- * This is called when either the format or current motif changes.
- */
-function update_outpop_format(index) {
-  var motif = data.motifs[index];
-  var fn = [motif_count_matrix, motif_prob_matrix, motif_minimal_meme];
-  var suffix = ["_counts.txt", "_freqs.txt", ".meme"];
-  var format = parseInt($("text_format").value);
-  var text = fn[format](motif);
-  prepare_download(text, "text/plain", motif.id + suffix[format], $("outpop_text_dl"));
-  $("outpop_text").value = text;
-}
-
-/*
- * Updates the motif logos and format download text in the popup.
- * This is called whenever the current motif changes.
- */
-function update_outpop_motif(index) {
-  "use strict";
-  var motifs, motif, pspm, logo, canvas, num;
-  motifs = data["motifs"];
-  if (index < 0 || index >= motifs.length) {return;}
-  current_motif = index;
-  motif = motifs[index];
-  pspm = new Pspm(motif["pwm"]);
-  logo = new Logo(dreme_alphabet, "");
-  logo.add_pspm(pspm, 0);
-  canvas = $("outpop_logo");
-  canvas.width = canvas.width; // clear canvas
-  draw_logo_on_canvas(logo, canvas, false);
-  canvas = $("outpop_logo_rc");
-  canvas.width = canvas.width; // clear rc canvas
-  if (data.options.revcomp) {
-    pspm.reverse_complement(dreme_alphabet);
-    logo = new Logo(dreme_alphabet, "");
-    logo.add_pspm(pspm, 0);
-    draw_logo_on_canvas(logo, canvas, false);
-  }
-  num = $("outpop_num");
-  num.innerHTML = "";
-  num.appendChild(document.createTextNode("" + (index + 1)));
-  update_outpop_format(index);
-}
-
-
-/*
- * Initialise and display the download popup.
- */
-function action_show_outpop(e, ordinal) {
-  "use strict";
-  function init() {
-    "use strict";
-    var close_btn, next_btn, prev_btn, cancel_btn, do_btn;
-    var tab1, tab2, tab3;
-    var pnl1, pnl2, pnl3;
-    var format_list;
-    var tbl_submit, inputs, i, default_prog;
-    close_btn = $("outpop_close");
-    close_btn.addEventListener("click", action_hide_outpop, false);
-    close_btn.addEventListener("keydown", action_hide_outpop, false);
-    next_btn = $("outpop_next");
-    next_btn.addEventListener("click", action_outpop_next, false);
-    next_btn.addEventListener("keydown", action_outpop_next, false);
-    prev_btn = $("outpop_prev");
-    prev_btn.addEventListener("click", action_outpop_prev, false);
-    prev_btn.addEventListener("keydown", action_outpop_prev, false);
-    cancel_btn = $("outpop_cancel");
-    cancel_btn.addEventListener("click", action_hide_outpop, false);
-    do_btn = $("outpop_do");
-    do_btn.addEventListener("click", action_outpop_submit, false);
-    tab1 = $("outpop_tab_1");
-    tab1.tabIndex = 0;
-    tab1.addEventListener("click", action_outpop_tab, false);
-    tab1.addEventListener("keydown", action_outpop_tab, false);
-    tab2 = $("outpop_tab_2");
-    tab2.tabIndex = 0;
-    tab2.addEventListener("click", action_outpop_tab, false);
-    tab2.addEventListener("keydown", action_outpop_tab, false);
-    tab3 = $("outpop_tab_3");
-    tab3.tabIndex = 0;
-    tab3.addEventListener("click", action_outpop_tab, false);
-    tab3.addEventListener("keydown", action_outpop_tab, false);
-    pnl1 = $("outpop_pnl_1");
-    pnl2 = $("outpop_pnl_2");
-    pnl3 = $("outpop_pnl_3");
-    toggle_class(tab1, "activeTab", true);
-    toggle_class(tab2, "activeTab", false);
-    toggle_class(tab3, "activeTab", false);
-    pnl1.style.display = "block";
-    pnl2.style.display = "none";
-    pnl3.style.display = "none";
-    format_list = $("text_format");
-    format_list.addEventListener("change", action_outpop_format, false);
-    // setup program selection
-    tbl_submit = $("programs");
-    // when not dna, hide the inputs for programs that require dna motifs
-    toggle_class(tbl_submit, "alphabet_dna", dreme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets
-    // add a click listener for the radio buttons
-    inputs = tbl_submit.querySelectorAll("input[type='radio']");
-    for (i = 0; i < inputs.length; i++) {
-      inputs[i].addEventListener("click", action_outpop_program, false);
-    }
-    // ensure that a default program option is selected for DNA and Protein
-    default_prog = document.getElementById(dreme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo");
-    default_prog.checked = true;
-    action_outpop_program.call(default_prog);
-    // disable reverse-complement when not DNA
-    $("logo_rc_option").disabled = !dreme_alphabet.has_complement(); 
-    // set errorbars on when ssc is on
-    $("logo_ssc").addEventListener("change", action_outpop_ssc, false);
-  }
-  // store the focused element
-  action_hide_outpop.last_active = document.activeElement;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  // hide the help popup
-  help_popup();
-  // on first load initilize the popup
-  if (!action_show_outpop.ready) {
-    init();
-    action_show_outpop.ready = true;
-  }
-  update_outpop_motif(ordinal - 1);
-  // display the download popup
-  $("grey_out_page").style.display = "block";
-  $("download").style.display = "block";
-  $("outpop_close").focus();
-}
-
-/*
- * Hide the download popup.
- */
-function action_hide_outpop(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  $("download").style.display = "none";
-  $("grey_out_page").style.display = "none";
-  if (typeof action_hide_outpop.last_active !== "undefined") {
-    action_hide_outpop.last_active.focus();
-  }
-}
-
-/*
- * Show the next motif in the download popup.
- */
-function action_outpop_next(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif + 1);
-}
-
-/*
- * Show the previous motif in the download popup.
- */
-function action_outpop_prev(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif - 1);
-}
-
-/*
- * Highlight the selected row in the program list.
- */
-function action_outpop_program() {
-  "use strict";
-  var table, tr, rows, i;
-  tr = find_parent_tag(this, "TR");
-  table = find_parent_tag(tr, "TABLE");
-  rows = table.querySelectorAll("tr");
-  for (i = 0; i < rows.length; i++) {
-    toggle_class(rows[i], "selected", rows[i] === tr);
-  }
-}
-
-/*
- * Enable error bars when small sample correction is enabled.
- */
-function action_outpop_ssc() {
-  "use strict";
-  $("logo_err").value = $("logo_ssc").value;
-}
-
-/*
- * Submit the motif to the selected program.
- */
-function action_outpop_submit(e) {
-  "use strict";
-  var form, input, program, motifs;
-  // find out which program is selected
-  var radios, i;
-  radios = document.getElementsByName("program");
-  program = "fimo"; // default to fimo, since it works with all alphabet types
-  for (i = 0; i < radios.length; i++) {
-    if (radios[i].checked) program = radios[i].value;
-  }
-
-  motifs = motif_minimal_meme(data.motifs[current_motif]);
-  form = document.createElement("form");
-  form.setAttribute("method", "post");
-  form.setAttribute("action", site_url + "/tools/" + program);
-  
-  input = document.createElement("input");
-  input.setAttribute("type", "hidden");
-  input.setAttribute("name", "motifs_embed");
-  input.setAttribute("value", motifs);
-  form.appendChild(input);
-
-  document.body.appendChild(form);
-  form.submit();
-  document.body.removeChild(form);
-}
-
-/*
- * Download the format text.
- * Wire the link containing the data URI text to a download button so it looks
- * the same as the server submit stuff.
- */
-function action_outpop_download_motif(e) {
-  $("outpop_text_dl").click();
-}
-
-/*
- * Download the motif logo.
- * The EPS format can be calculated locally in Javascript
- */
-function action_outpop_download_logo(e) {
-  "use strict";
-  var pspm, logo, eps;
-  var logo_rc, logo_ssc, logo_width, logo_height;
-  var motif = data.motifs[current_motif];
-  if ($("logo_format").value == "0") { // EPS
-    logo_rc = ($("logo_rc").value == "1");
-    logo_ssc = ($("logo_ssc").value == "1");
-    logo_width = parseFloat($("logo_width").value);
-    if (isNaN(logo_width) || !isFinite(logo_width) || logo_width <= 0) logo_width = null;
-    logo_height = parseFloat($("logo_height").value);
-    if (isNaN(logo_height) || !isFinite(logo_height) || logo_height <= 0) logo_height = null;
-    // create a PSPM from the motif
-    pspm = motif_pspm(motif);
-    if (logo_rc) pspm.reverse_complement(dreme_alphabet);
-    logo = new Logo(dreme_alphabet);
-    logo.add_pspm(pspm, 0);
-    eps = logo.as_eps({"ssc": logo_ssc, "logo_width": logo_width, "logo_height": logo_height});
-    prepare_download(eps, "application/postscript", motif.id + ".eps");
-  } else {
-    $("logo_motifs").value = motif_minimal_meme(motif);
-    $("logo_form").submit();
-  }
-}
-
-/*
- * Change the selected tab in the download popup.
- */
-function action_outpop_tab(e) {
-  "use strict";
-  var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  tab1 = $("outpop_tab_1");
-  tab2 = $("outpop_tab_2");
-  tab3 = $("outpop_tab_3");
-  pnl1 = $("outpop_pnl_1");
-  pnl2 = $("outpop_pnl_2");
-  pnl3 = $("outpop_pnl_3");
-  do_btn = $("outpop_do");
-
-  toggle_class(tab1, "activeTab", (this === tab1));
-  toggle_class(tab2, "activeTab", (this === tab2));
-  toggle_class(tab3, "activeTab", (this === tab3));
-  pnl1.style.display = ((this === tab1) ? "block" : "none");
-  pnl2.style.display = ((this === tab2) ? "block" : "none");
-  pnl3.style.display = ((this === tab3) ? "block" : "none");
-  do_btn.value = ((this === tab1) ? "Submit" : "Download");
-  do_btn.removeEventListener("click", action_outpop_submit, false);
-  do_btn.removeEventListener("click", action_outpop_download_logo, false);
-  do_btn.removeEventListener("click", action_outpop_download_motif, false);
-  if (this === tab1) {
-    do_btn.addEventListener("click", action_outpop_submit, false);
-  } else if (this === tab2) {
-    do_btn.addEventListener("click", action_outpop_download_motif, false);
-  } else {
-    do_btn.addEventListener("click", action_outpop_download_logo, false);
-  }
-}
-
-/*
- * Update the text in the download format popup.
- */
-function action_outpop_format() {
-  update_outpop_format(current_motif);
-}
-
-/*
- * Find all text nodes in the given container.
- */
-function text_nodes(container) {
-  var textNodes = [];
-  var stack = [container];
-  // depth first search to maintain ordering when flattened 
-  while (stack.length > 0) {
-    var node = stack.pop();
-    if (node.nodeType == Node.TEXT_NODE) {
-      textNodes.push(node);
-    } else {
-      for (var i = node.childNodes.length-1; i >= 0; i--) {
-        stack.push(node.childNodes[i]);
-      }
-    }
-  }
-  return textNodes;
-}
-
-/*
- * Get the text out of a specific text node.
- */
-function node_text(node) {
-  if (node === undefined) {
-    return '';
-  } else if (node.textContent) {
-    return node.textContent;
-  } else if (node.innerText) {
-    return node.innerText;
-  } else {
-    return '';
-  }
-}
-
-/*
- * Get the text contained within the element.
- */
-function elem_text(elem, separator) {
-  if (separator === undefined) separator = '';
-  return text_nodes(elem).map(node_text).join(separator);
-}
-
-/*
- * Sort all rows in the first table body based on the column of the given element and the comparison function.
- * The sort is not very fast and is intended for small tables only.
- */
-function sort_table(colEle, compare_function) {
-  //find the parent of colEle that is either a td or th
-  var i, j;
-  var cell = colEle;
-  while (true) {
-    if (cell == null) return;
-    if (cell.nodeType == Node.ELEMENT_NODE && 
-        (cell.tagName.toLowerCase() == "td" || cell.tagName.toLowerCase() == "th")) {
-      break;
-    }
-    cell = cell.parentNode;
-  }
-  //find the parent of cell that is a tr
-  var row = cell;
-  while (true) {
-    if (row == null) return;
-    if (row.nodeType == Node.ELEMENT_NODE && row.tagName.toLowerCase() == "tr") {
-      break;
-    }
-    row = row.parentNode;
-  }
-  //find the parent of row that is a table
-  var table = row;
-  while (true) {
-    if (table == null) return;
-    if (table.nodeType == Node.ELEMENT_NODE && table.tagName.toLowerCase() == "table") {
-      break;
-    }
-    table = table.parentNode;
-  }
-  var column_index = cell.cellIndex;
-  // do a bubble sort, because the tables are so small it doesn't matter
-  var change;
-  var trs = table.tBodies[0].getElementsByTagName('tr');
-  var already_sorted = true;
-  var reverse = false;
-  while (true) {
-    do {
-      change = false;
-      for (i = 0; i < trs.length -1; i++) {
-        var v1 = elem_text(trs[i].cells[column_index]);
-        var v2 = elem_text(trs[i+1].cells[column_index]);
-        if (reverse) {
-          var tmp = v1;
-          v1 = v2;
-          v2 = tmp;
-        }
-        if (compare_function(v1, v2) > 0) {
-          exchange(trs[i], trs[i+1], table);
-          change = true;
-          already_sorted = false;
-          trs = table.tBodies[0].getElementsByTagName('tr');
-        }
-      }
-    } while (change);
-    if (reverse) break;// we've sorted twice so exit
-    if (!already_sorted) break;// sort did something so exit
-    // when it's sorted one way already then sort the opposite way
-    reverse = true;
-  }
-  // put arrows on the headers
-  var headers = table.tHead.getElementsByTagName('tr');
-  for (i = 0; i < headers.length; i++) {
-    for (j = 0; j < headers[i].cells.length; j++) {
-      var cell = headers[i].cells[j];
-      var arrows = cell.getElementsByClassName("sort_arrow");
-      var arrow;
-      if (arrows.length == 0) {
-        arrow = document.createElement("span");
-        arrow.className = "sort_arrow";
-        cell.insertBefore(arrow, cell.firstChild);
-      } else {
-        arrow = arrows[0];
-      }
-      arrow.innerHTML = "";
-      if (j == column_index) {
-        arrow.appendChild(document.createTextNode(reverse ? "\u25B2" : "\u25BC"));
-      }
-    }
-  }
-}
-
-/*
- * Swap two rows in a table.
- */
-function exchange(oRowI, oRowJ, oTable) {
-  var i = oRowI.rowIndex;
-  var j = oRowJ.rowIndex;
-   if (i == j+1) {
-    oTable.tBodies[0].insertBefore(oRowI, oRowJ);
-  } if (j == i+1) {
-    oTable.tBodies[0].insertBefore(oRowJ, oRowI);
-  } else {
-    var tmpNode = oTable.tBodies[0].replaceChild(oRowI, oRowJ);
-    if(typeof(oRowI) != "undefined") {
-      oTable.tBodies[0].insertBefore(tmpNode, oRowI);
-    } else {
-      oTable.appendChild(tmpNode);
-    }
-  }
-}
-
-/*
- * Compare two E-values which may be very small.
- */
-function compare_evalues(v1, v2) {
-  var e1 = sci2log(v1);
-  var e2 = sci2log(v2);
-  if (e1 < e2) return -1;
-  else if (e1 > e2) return 1;
-  return 0;
-}
-
-/*
- * Compare two counts.
- */
-function compare_counts(v1, v2) {
-  var re = /(\d+)\s*\/\s*\d+/;
-  var m1 = re.exec(v1);
-  var m2 = re.exec(v2);
-  if (m1 == null && m2 == null) return 0;
-  if (m1 == null) return -1;
-  if (m2 == null) return 1;
-  return parseInt(m2[1]) - parseInt(m1[1]);
-}
-
-/*
- * Compare two sequence words.
- */
-function compare_words(v1, v2) {
-  return v1.localeCompare(v2);
-}
-
-
-</script>
-    <style>
-/* The following is the content of meme.css */
-body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;}
-
-div.help {
-  display: inline-block;
-  margin: 0px;
-  padding: 0px;
-  width: 12px;
-  height: 13px;
-  cursor: pointer;
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==);
-}
-
-div.help:hover {
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==);
-}
-
-p.spaced { line-height: 1.8em;}
-
-span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;}
-
-p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-td.jump { font-size: 13px; color: #ffffff; background-color: #00666a;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps;
-  font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0;
-  font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal;
-  margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal;
-  margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h5 {margin: 0px}
-
-a.help { font-size: 9px; font-style: normal; text-transform: uppercase;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-div.pad1 { margin: 10px 5px;}
-
-div.pad2 { margin: 25px 5px 5px;}
-h2.pad2 { padding: 25px 5px 5px;}
-
-div.pad3 { padding: 5px 0px 10px 30px;}
-
-div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;}
-
-div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; }
-
-div.subsection {margin:25px 0px;}
-
-img {border:0px none;}
-
-th.majorth {text-align:left;}
-th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;}
-th.actionth {font-weight:normal; text-align:left;}
-
-.explain h5 {font-size:1em; margin-left: 1em;}
-
-div.doc {margin-left: 2em; margin-bottom: 3em;}
-
-th.trainingset {
-  border-bottom: thin dashed black; 
-  font-weight:normal; 
-  padding:0px 10px;
-}
-div.pop_content {
-  position:absolute;
-  z-index:50;
-  width:300px;
-  padding: 5px;
-  background: #E4ECEC;
-  font-size: 12px;
-  font-family: Arial;
-  border-style: double;
-  border-width: 3px;
-  border-color: #AA2244;
-  display:none;
-}
-
-div.pop_content > *:first-child {
-  margin-top: 0px;
-}
-
-div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, 
-div.pop_content h5, div.pop_content h6, div.pop_content p {
-  margin: 0px;
-}
-
-div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, 
-div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 {
-  margin-top: 5px;
-}
-
-div.pop_content p + p {
-  margin-top: 5px;
-}
-
-div.pop_content > *:last-child {
-  margin-bottom: 0px;
-}
-
-div.pop_content div.pop_close {
-  /* old definition */
-  float:right;
-  bottom: 0;
-}
-
-div.pop_content span.pop_close, div.pop_content span.pop_back {
-  display: inline-block;
-  border: 2px outset #661429;
-  background-color: #CCC;
-  padding-left: 1px;
-  padding-right: 1px;
-  padding-top: 0px;
-  padding-bottom: 0px;
-  cursor: pointer;
-  color: #AA2244; /*#661429;*/
-  font-weight: bold;
-}
-
-div.pop_content span.pop_close:active, div.pop_content span.pop_back:active {
-  border-style: inset;
-}
-
-div.pop_content span.pop_close {
-  float:right;
-  /*border: 2px outset #AA002B;*/
-  /*color: #AA2244;*/
-}
-
-div.pop_content:not(.nested) .nested_only {
-  display: none;
-}
-
-div.pop_back_sec {
-  margin-bottom: 5px;
-}
-
-div.pop_close_sec {
-  margin-top: 5px;
-}
-
-table.hide_advanced tr.advanced {
-  display: none;
-}
-span.show_more {
-  display: none;
-}
-table.hide_advanced span.show_more {
-  display: inline;
-}
-table.hide_advanced span.show_less {
-  display: none;
-}
-
-
-/*****************************************************************************
- * Program logo styling
- ****************************************************************************/
-div.prog_logo {
-  border-bottom: 0.25em solid #0f5f60;
-  height: 4.5em;
-  width: 24em;
-  display:inline-block;
-}
-div.prog_logo img {
-  float:left;
-  width: 4em;
-  border-style: none;
-  margin-right: 0.2em;
-}
-div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited {
-  margin:0;
-  padding:0;
-  font-family: Arial, Helvetica,  sans-serif;
-  font-size: 3.2em;
-  line-height: 1em;
-  vertical-align: top;
-  display: block;
-  color: #026666;
-  letter-spacing: -0.06em;
-  text-shadow: 0.04em 0.06em 0.05em #666;
-}
-div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited {
-  display: block;
-  margin:0;
-  padding:0;
-  font-family: Helvetica, sans-serif;
-  font-size: 0.9em;
-  line-height: 1em;
-  letter-spacing: -0.06em;
-  color: black;
-}
-
-div.big.prog_logo {
-  font-size: 18px;
-}
-
-</style>
-    <style>
 /* dreme output specific css */
-div.header {
-  position: relative;
-  overflow: hidden;
-  margin-top: 15px;
-  margin-bottom: 5px;
-  margin-right: 3px;
-  margin-left: 3px;
-}
-div.header > h2 {
-  font-size: 1.5em;
-  font-style: normal;
-  margin: 0;
-  font-variant: small-caps; 
-  font-family: Georgia, "Times New Roman", Times, serif;
-}
-div.header > span {
-  position: absolute;
-  right: 0;
-  bottom: 0;
-}
-
-div.template {
-  position: absolute;
-  z-index: 1;
-  left: 0;
-  top: 0;
-  visibility: hidden;
-}
-
-div.sym_btn {
-  display:inline-block;
-  text-decoration: underline;
-  cursor: pointer;
-  font-size: 20px;
-  line-height:20px; 
-  text-align: center;
-  width: 20px;
-  height: 20px;
-  color: blue;
-}
-div.sym_btn:hover {
-  color: white;
-  background-color: blue;
-}
-
-div.sym_btn.positioned {
-  position: absolute;
-  top: 0px;
-}
-
-div.box + div.box {
-  margin-top: 5px;
-}
-
-th.motif_ordinal {
-
-}
-td.motif_ordinal {
-  text-align: right;
-  padding-right: 10px;
-  font-weight: bold;
-  font-size: large;
-}
-th.motif_word {
-  padding-right: 10px;
-}
-td.motif_word {
-  font-size:15px; 
-  font-family: 'Courier New', Courier, monospace;
-  padding-right: 10px;
-}
-th.motif_logo {
-  padding-right: 10px;
-}
-td.motif_logo {
-  padding-right: 10px;
-}
-th.motif_evalue {
-  text-align:right;
-  padding-right: 10px;
-}
-td.motif_evalue {
-  text-align: right;
-  white-space: nowrap;
-  padding-right: 20px;
-}
-th.motif_more {
-  padding: 0 5px;
-}
-td.motif_more {
-  text-align: center;
-  padding: 0 5px;
-}
-th.motif_submit {
-  padding: 0 5px;
-}
-td.motif_submit {
-  text-align: center;
-  padding: 0 5px;
-}
-th.match_word {
-  padding-right: 10px;
-}
-td.match_word {
-  padding-right: 10px;
-  font-weight: bold;
-  font-size: large; 
-  font-family: 'Courier New', Courier, monospace;
-}
-th.match_evalue, th.match_count {
-  text-align: right;
-  padding-right: 10px;
-}
-td.match_evalue, td.match_count {
-  text-align: right;
-  white-space: nowrap;
-  padding-right: 20px;
-}
-
-div.tabArea {
-  font-size: 80%;
-  font-weight: bold;
-}
-
-.norc div.tabArea {
-  display: none;
-}
-
-span.tab, span.tab:visited {
-  cursor: pointer;
-  color: #888;
-  background-color: #ddd;
-  border: 2px solid #ccc;
-  padding: 2px 1em;
-  text-decoration: none;
-}
-span.tab.middle {
-  border-left-width: 0px;
-}
-div.tabArea.base span.tab {
-  border-top-width: 0px;
-}
-div.tabArea.top span.tab {
-  border-bottom-width: 0px;
-}
-
-span.tab:hover {
-  background-color: #bbb;
-  border-color: #bbb;
-  color: #666;
-}
-span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited {
-  background-color: white;
-  color: black;
-  cursor: default;
-}
-div.tabMain {
-  border: 2px solid #ccc;
-  background-color: white;
-  padding: 10px;
-}
-div.tabMain.base {
-  margin-top: 5px;
-  display: inline-block;
-  max-width: 98%;
-}
-
-div.tabMain.top {
-  margin-bottom: 5px;
-}
-
-div.grey_background {
-  position:fixed; 
-  z-index: 8;
-  background-color: #000;
-  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
-  opacity: 0.5;
-  left: 0;
-  top: 0;
-  width: 100%;
-  height: 100%;
-}
-
-div.popup_wrapper {
-  position:fixed; 
-  z-index:9;
-  width:100%; 
-  height:0; 
-  top:50%; 
-  left:0;
-}
-
-div.popup {
-  width: 600px; 
-  z-index:9;
-  margin-left: auto;
-  margin-right: auto;
-  padding: 5px;
-  background-color: #FFF;
-  border-style: double;
-  border-width: 5px;
-  border-color: #00666a;
-  position:relative; 
-}
-div.close {
-  cursor: pointer;
-  border: 1px solid black; 
-  width:15px; 
-  height:15px; 
-  line-height:15px; /* this causes vertical centering */
-  text-align:center; 
-  background-color:#FFF; 
-  color:#000; 
-  font-size:15px;
-  font-family:monospace;
-}
-
-div.close:hover {
-  color:#FFF;
-  background-color:#000; 
-}
-
-div.navnum {
-  width:100%; 
-  height:20px; 
-  line-height:20px; 
-  text-align:center; 
-  font-size:medium;
-}
-
-div.navarrow {
-  font-size: 30px;
-  text-decoration:none;
-  cursor: pointer;
-  -moz-user-select: none;  
-  -webkit-user-select: none;  
-  -ms-user-select: none;
-}
-
-div.navarrow > span.inactive {
-  display: inline;
-}
-div.navarrow > span.active {
-  display: none;
-}
-
-div.navarrow:hover > span.active {
-  display: inline;
-}
-div.navarrow:hover > span.inactive {
-  display: none;
-}
-
-table.programs {
-  width: 100%;
-}
-
-table.programs tr {
-  background-color: #EFE;
-}
-
-table.programs tr.selected {
-  background-color: #262;
-  color: #FFF;
-}
-
-table.programs tr.dna_only {
-  display: none;
-}
-
-table.programs.alphabet_dna tr.dna_only {
-  display: table-row;
-}
-
-table.inputs {
-  margin-top: 20px;
-  border-collapse:collapse;
-}
-table.inputs * td, table.inputs * th {
-  padding-left: 15px;
-  padding-right: 15px;
-  padding-top: 1px;
-  padding-bottom: 1px;
-}
-
 /* program settings */
-span.strand_none, span.strand_given, span.strand_both {
-  display: none;
-}
-td.none span.strand_none, td.given span.strand_given, td.both span.strand_both {
-  display: inline;
-}
-
-/* show the expanded motif only when the collapsed one is hidden */
-tbody *.less, tbody.collapsed *.more {
-  display: none;
-}
-
-tbody.collapsed *.less {
-  display: inline;
-}
-
 </style>
   </head>
   <body data-scrollpad="true">
-    <!--  -->
-    <div id="grey_out_page" class="grey_background" style="display:none;">
-    </div>
-
-    <!-- Help popups -->
-    <div class="pop_content" id="pop_">
-      <p>Help poup.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_motifs_word">
-      <p>
         The name of the motif uses the IUPAC codes for nucleotides which has 
         a different letter to represent each of the 15 possible combinations.
-      </p>
-      <p>
         The name is itself a representation of the motif though the position
-        weight matrix is not directly equalivant as it is generated from the
+        weight matrix is not directly equivalent as it is generated from the
         sites found that matched the letters given in the name.
-      </p>
-      <p>
-        <a id="doc_alphabets_url" href="#">
-        Read more about the MEME suite's use of the IUPAC alphabets.
-        </a>
-        <script>$("doc_alphabets_url").href = site_url + "/doc/alphabets.html";</script>
-      </p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_logo">
-      <p>The logo of the motif.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_rc_logo">
-      <p>The logo of the reverse complement motif.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_evalue">
       <p>The E-value is the enrichment p-value times the number of candidate 
         motifs tested.</p>
       <p>The enrichment p-value is calculated using Fisher's Exact Test for 
         enrichment of the motif in the positive sequences.</p>
       <p>Note that the counts used in Fisher's Exact Test are made after 
         erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_uevalue">
       <p>The E-value of the motif calculated without erasing the sites of 
         previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_more">
       <p>Show more information on the motif.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_submit_dl">
       <p>Submit your motif to another MEME Suite program or download your motif.</p>
       <h5>Supported Programs</h5>
-      <dl>
         <dt>Tomtom</dt>
         <dd>Tomtom is a tool for searching for similar known motifs. 
-          </dd>
         <dt>MAST</dt>
         <dd>MAST is a tool for searching biological sequence databases for 
           sequences that contain one or more of a group of known motifs.
-          </dd>
         <dt>FIMO</dt>
         <dd>FIMO is a tool for searching biological sequence databases for 
           sequences that contain one or more known motifs.
-          </dd>
-        <dt>GOMO</dt>
-        <dd>GOMO is a tool for identifying possible roles (Gene Ontology 
+        <dt>GOMo</dt>
+        <dd>GOMo is a tool for identifying possible roles (Gene Ontology 
           terms) for DNA binding motifs.
-          </dd>
         <dt>SpaMo</dt>
         <dd>SpaMo is a tool for inferring possible transcription factor
           complexes by finding motifs with enriched spacings.
-          </dd>
-      </dl>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_positives">
-      <p># positive sequences matching the motif / # positive sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_negatives">
-      <p># negative sequences matching the motif / # negative sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_pvalue">
-      <p>The p-value of Fisher's Exact Test for enrichment of the motif in 
-        the positive sequences.</p>
-      <p>Note that the counts used in Fisher's Exact Test are made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_evalue">
-      <p>The E-value is the motif p-value times the number of candidate motifs 
-        tested.</p>
-      <p>Note that the p-value was calculated with counts made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_uevalue">
-      <p>The E-value of the motif calculated without erasing the sites of 
-        previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_word">
-      <p>All words matching the motif whose uncorrected p-value is less than
-      <span id="help_add_pv_thresh"></span>.</p>
-      <script>$("help_add_pv_thresh").innerHTML = data.options.add_pv_thresh;</script>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_pos">
-      <p># positive sequences with matches to the word / # positive sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_neg">
-      <p># negative sequences with matches to the word / # negative sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_pval">
-      <p>The p-value of Fisher's Exact Test for enrichment of the word in 
-        the positive sequences.</p>
-      <p>Note that the counts used in Fisher's Exact Test are made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_eval">
-      <p>The word p-value times the number of candidates tested.</p>
-      <p>Note that the p-value was calculated with counts made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_source">
-      <p>The sequence file used by DREME to find the motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_alph">
-      <p>The alphabet of the sequences.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_count">
-      <p>The count of the sequences.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_alph_name">
-      <p>The name of the alphabet symbol.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_alph_control">
-      <p>The frequency of the alphabet symbol in the control dataset.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <!-- templates -->
-
-    <div class="template box expanded_motif" id="tmpl_motif_expanded">
-      <div>
-        <span class="tvar_logo"></span>
-        <span class="tvar_rclogo"></span>
-      </div>
-      <h4>Details</h4>
-      <table class="details">
-        <thead>
-          <tr>
-            <th class="match_count">Positives <div class="help" data-topic="pop_motif_positives"></div></th>
-            <th class="match_count">Negatives <div class="help" data-topic="pop_motif_negatives"></div></th>
-            <th class="match_evalue">P-value <div class="help" data-topic="pop_motif_pvalue"></div></th>
-            <th class="match_evalue">E-value <div class="help" data-topic="pop_motif_evalue"></div></th>
-            <th class="match_evalue">Unerased E-value <div class="help" data-topic="pop_motif_uevalue"></div></th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr>
-            <td class="match_count">
-              <span class="tvar_p"></span> / <span class="tvar_p_total"></span>
-            </td>
-            <td class="match_count">
-              <span class="tvar_n"></span> / <span class="tvar_n_total"></span>
-            </td>
-            <td class="tvar_pvalue match_evalue"></td>
-            <td class="tvar_evalue match_evalue"></td>
-            <td class="tvar_uevalue match_evalue"></td>
-          </tr>
-        </tbody>
-      </table>
-      <h4>Enriched Matching Words</h4>
-      <div class="tvar_words"></div>
-    </div>
-
-
-    <div class="popup_wrapper">
-      <div class="popup" style="display:none; top: -150px;" id="download">
-        <div>
-          <div style="float:right; ">
-            <div id="outpop_close" class="close" tabindex="0">x</div>
-          </div>
-          <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2>
-          <div style="clear:both"></div>
-        </div>
-          <div style="height:100px">
-            <div style="float:right; width: 30px;">
-              <div id="outpop_prev" class="navarrow" tabindex="0">
-                <span class="inactive">&#8679;</span><span class="active">&#11014;</span>
-              </div>
-              <div id="outpop_num" class="navnum"></div>
-              <div id="outpop_next" class="navarrow" tabindex="0">
-                <span class="inactive">&#8681;</span><span class="active">&#11015;</span>
-              </div>
-            </div>
-            <div id="logo_box" style="height: 100px; margin-right: 40px;">
-              <canvas id="outpop_logo" height="100" width="250"></canvas>
-              <canvas id="outpop_logo_rc" height="100" width="250"></canvas>
-            </div>
-          </div>
-          <div>
-            <!-- tabs start -->
-            <div class="tabArea top">
-              <span id="outpop_tab_1" class="tab">Submit Motif</span><span
-                id="outpop_tab_2" class="tab middle">Download Motif</span><span 
-                id="outpop_tab_3" class="tab middle">Download Logo</span>
-            </div>
-            <div class="tabMain top">
-              <!-- Submit to another program -->
-              <div id="outpop_pnl_1">
-                <h4 class="compact">Submit to program</h4>
-                <table id="programs" class="programs">
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td>
-                    <td><label for="submit_tomtom">Tomtom</label></td>
-                    <td><label for="submit_tomtom">Find similar motifs in
-                        published libraries or a library you supply.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td>
-                    <td><label for="submit_fimo">FIMO</label></td>
-                    <td><label for="submit_fimo">Find motif occurrences in
-                        sequence data.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="mast" id="submit_mast"></td>
-                    <td><label for="submit_mast">MAST</label></td>
-                    <td><label for="submit_mast">Rank sequences by affinity to
-                        groups of motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td>
-                    <td><label for="submit_gomo">GOMo</label></td>
-                    <td><label for="submit_gomo">Identify possible roles (Gene
-                        Ontology terms) for motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td>
-                    <td><label for="submit_spamo">SpaMo</label></td>
-                    <td><label for="submit_spamo">Find other motifs that are
-                        enriched at specific close spacings which might imply the existance of a complex.</label></td>
-                  </tr>
-                </table>
-              </div>
-              <!-- download text format  -->
-              <div id="outpop_pnl_2">
-                <div>
-                  <label for="text_format">Format:</label>
-                  <select id="text_format">
-                    <option value="0">Count Matrix</option>
-                    <option value="1">Probability Matrix</option>
-                    <option value="2">Minimal MEME</option>
-                  </select>
-                </div>
-                <textarea id="outpop_text" name="content"
-                  style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" 
-                  rows="8" readonly="readonly" wrap="off"></textarea>
-                <a id="outpop_text_dl" download="meme.txt" href=""></a>
-              </div>
-              <!-- download logo format -->
-              <div id="outpop_pnl_3">
-                <form id="logo_form" method="post" action="">
-                  <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script>
-                  <input type="hidden" name="program" value="DREME"/>
-                  <input type="hidden" id="logo_motifs" name="motifs" value=""/>
-                  <table>
-                    <tr>
-                      <td><label for="logo_format">Format:</label></td>
-                      <td>
-                        <select id="logo_format" name="png">
-                          <option value="1">PNG (for web)</option>
-                          <option value="0">EPS (for publication)</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_rc">Orientation:</label></td>
-                      <td>
-                        <select id="logo_rc" name="rc1">
-                          <option value="0">Normal</option>
-                          <option value="1" id="logo_rc_option">Reverse Complement</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_ssc">Small Sample Correction:</label></td>
-                      <td>
-                        <input type="hidden" id="logo_err" name="errbars" value="0"/>
-                        <select id="logo_ssc" name="ssc">
-                          <option value="0">Off</option>
-                          <option value="1">On</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_width">Width:</label></td>
-                      <td>
-                        <input type="text" id="logo_width" size="4" placeholder="default" name="width"/>&nbsp;cm
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_height">Height:</label></td>
-                      <td>
-                        <input type="text" id="logo_height" size="4" placeholder="default" name="height"/>&nbsp;cm
-                      </td>
-                    </tr>
-                  </table>
-                </form>
-              </div>
-              <!-- Buttons -->
-              <div>
-                <div style="float:left;">
-                  <input type="button" id="outpop_do" value="Submit" />
-                </div>
-                <div style="float:right;">
-                  <input id="outpop_cancel" type="button" value="Cancel" />
-                </div>
-                <div style="clear:both;"></div>
-              </div>
-            </div>
-        </div>
-      </div>
-    </div>
-
-
-
-    <!-- Page starts here -->
-    <div id="top" class="pad1">
-      <div class="prog_logo big">
-        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAAAd0SU1FB9wLGwYBMoyhiwgAACAASURBVHja7Z13fFRV9sC/503JpIeaKFVREBQVEEFFQVcUuyDouuraFoVV17IrayPjDP4U3XXXhrpiXxuKKF1dV8WCiEgXRUAQlJIYAilMf+f3x3szmVSSkICyOR/eh8wr9717z7mn3XPOhRZogRbYLQiQJiJGy1D8D0LHjh1/XrZsmQK9gU3Ap0mE0QL7KTx411136Z///GdV1ZhpmvrYY4+pqsZUVceNG6dAz5Zh2j/hnpKSEtM0TVVVrfq/qmosFtMxY8Yo8CPQHejucDjyfm0dbZFp1WGaxmJ3ppSWSiQUIhQKIWJxehGhpKSE1LQ0uvfowQHZ2exYt65D8dq1qzUaXR2LxTYCP7UM4a8MVFWA9mY0+nLhmjV63LHH6vMvvKATJkzQfn366CtPPKEDjjtOV61apeeedZZqMKgaCKju2KFmYaFqJKJaWqqqqoACR/9a+u5sQT+IiD77zDPbKCnR00aOZPHSpcydO5fLf/972rdvTzgcZsEnnzDmqquYPmsW/PxzxbMOB4NPOokRZ5+tB3XrJsAUYKmqOkQkVuVVKUBGDRbGz/vSvPlfBHcVDpB7XP/+Gz9/5x1mzJ/P1i1buPbaa1m/fj1du3alW5curPvqqxobCoVCpKSkIO3a1Wc89bCuBy51OZwu1RgiBqGYGf1uw09/Bd5t4QDNT+wKfPXoxIl9jzm6gkt/OmsWn3/4oRIMyrfLlzPuzjvp27cvHTt2ZNGXX+K/7baaW8zJITM1lflz5wL8ZtWqVWm9evXaVcv7Q2cN6hM68tAuR2MIhirFpUEef+MdBFK1RQQ0v6g/MC9PLxk5Uq+/7joIBECSJmwwKKqKR4RTTjyR0885h2effZaNa9Ywa9YstKQkoQzGwSwuJhwIwK5ddO3a9b+9evWqjQPoSf16qUOQles2gYLL5WDaBwu5dtSw8L/eeKdFB2huaJWTo0NOOMF8wOs1qiG/QhfghtGj+dMNN4DblhJlZVBaWg35AIYI7NgBbjcbNmwwjz766I+WLl16OfCDfUs3YB3AAdke6d7tYNR2Jv6wuZA2rbIwxbFPxfD/jBn4t7vv5uUnnzRsTNelEEIoBKWl1qH1YM7hMAXffWcsWbBgMLAB+AgoAtYC5SJCp86dUTPG89M/ACASi1mDH4u2+AH2Bvzhpps+p3Xrmi+mp2Oa5h613y4nh1WLFuHxeHTq1KmDVbWVqjJjxozU4cOH88rsj1FXKteMOh3D4eQ/ny/hjnwfn32zyWUYxtAWK6D54YW1X355WbcePSr32elk1EUX8cYbb1gzvvG+BEzA2b49msQ1RARVZe7cuTzzjwl079qB6R8s4PhThjF58mQADjroIDZs2CAtBLAXFMEaTwaDe4R8ALKzEbcbVUVVE4hP/t/lctGnTx9+c8op3HvffQm9YubMmZx77rlic2Rzbw7I/5oreNzJgwapqqI7dqA7d1pHSUnyVG5Uw0MGD6agoCCB7IQ+kcQFIpEIkydPZszYsQmuoaqEw2H95JNPdOHChTHgervJT4DTWzhA08OjwGWT7r8/u3xXhckei8W47c47obwcMjMtsy9OEHUojdhI/M2oUXwwb16dIqKqJVFaWkJmZlal60OGDJk7b968M1SVsWPH8uSTTxYC7WmBvQIbV6xcGQK0aM0a3bRsmW5fu1b1559NLSzUakdBgXXYawC7A0CXLVtW7fzMmTOrnTNNU03T1OXLl5u1ia4WaA4lQbXVmDFjcoFcIHfJ0qUXqKqaBQXVCMC0kZ+MtNogEAjoli1bar0ef/bee++tiXDMFszsQ+jbt+/r1111leqOHZWJIBBQ7913azgc1qaAeABCVUKqQgBvAO8BL7RgZu9xhd6nnnpqNLpzp8559VXVkhL9ZOZM/X79+j1Bdm1sP2KaZix+rqioSBctWqSqejPw2KhRo+IPxjp06KC0rOg2p82AkE8O4zkbiAJ6ySWXVJLRjUW2qmqrVq30+eefr3RrFWYQf4+pqjpq1Khq7zYMY4/0g5agxppgPCnARcC1GPRFSUF5gAn0VNVz69vMkiVLWLNmDRdeeGGt93Tu3JmNGzfu1slkGAZbt24lNze30jWHw4Fpmo3GYwv7SIY7GYKD8UA/INteQFaKEL7iqBNPPPHYhjTXp08f+vTpU+O1rVu38sc//pE5c+ZgmiaGUbtLJu5HqMNdfYXT6VwdjUY/b+EAdXm9DMNlmmYrAA/I6SKe6ao/JM38v2Pw52oPrgV9Seu06RugTzT62ZogNzeXbdu2ISIYhpFmmmagxRNYC7Gbptlnw5Il29Z/9dW2H1ev3jpddQPwQ79+/f5k32NNsSpStdeSXonZ99JLL+0RAkWEG2+8samUU7Zt2xb3KKppmptbREAd43Vwly5fdDniCLS42DoRDILb3fnRiRPzLzzrrIdVlX9MeoKCw36GSMUIpaWlJVh0UVHRHiPt4YcfbhqKruxyFiDUIsfrhpWAfjprlpplZVZUb1UHTyBgRfnGD1Xt0KlTvR0++xIcDodecMEFCvxDVXv/79nrM2lnzuAanUWdnV8InzocDu104IGqO3aY+vPPWqOrt7BQdds2jcRijTLzmsg5VO93RCyCNa+88kotKCgosTnC6f8rIkD/PGcsQ044AYAZL9XOgkdfdlnxibEYuzZvjkpOjrN1q1Yc1Llz4p4Lzz+fcePH21qBidMwGDhwIA8++CAn2O1XZcWjR4/mmmuuoX///k2ruIjw9ttvc/755+9enjudAGIYBu3atctUVXr16vXOqlWrOovIpv169pszeX/yP/9Z+0xOPqLRymy+yvHp7Nl61tChetbQoTpt6tRaF2x+qSLh6quvTvw9adIkE3hrw4YNjv3WDNSZDEZ5/6Hl9zhvGjsWzKZbOykH0tu2Tdjie9H9XCmYpCHPjR49mqeffjqZi5iq+jQwVkTM/c4MVCUfcM564y6u+8ufmxRRV1xxxb6xWUUSR0Ofa2clqdgSzOTVV181otHoNTNnzjxjv9MBzBl0EeUUNeD9e2Dkfc/z53xPnUGeN4wezcFHHlmvwX1j1iwAJk6cuNf7tmLFit16CavCww8/jMPhSHZ+sWDBAi688EL97W9/O0tVPSIS2m9EgDmda8XgSRRFKvqjigooQh85h+Xx819BaxO2nQ/ODGAjrA5A9WyeTA4kg1y2UCnO75cOJ510Eh9//HGN10aOHKmLFi2a98MPP5y834gAEYaikIx8+7wAhpr8oabnpgMvA5/Av4C+1Y5bWMRoIJUXBg0apL8G5KsqH3/8cY0iUFWZOnWqnHfeeUNUtcPeJoBUwFPHkdoYbqQ+BBiitYVMWYs57iqnYskv0trEoGlzjXGMX7du3R3RaNMlcDz55JN1c7VGKrFVg1DjiE++duutt6phGAtV1dhbBHBW6+zM0iM6tSkccFTPwv6HH1o44KiehUd0ap34PahPr0Kga4MJ4CjOUWgjUgvxKIiDc8yZpMVPReEkrZ/uk2hz69atr7344ot2i3sOY8aMqRXJt99+e40yf9q0aU2iRHbs2FEGDhx4wPr1689sbiXwcDEck3My044ePWKo4dRwRjQUILPtgZRt34rDeTCxWJSs1rk8PmUOKSkeCYWCDSR5OiXQpLYggLCCS8TCv0CmmBWELtDNThPeKZBdzzdtuPrqqyU1NVXPPPNMsrKyqs26hkJtil12dnaN7HvEiBEN1kPatGnD9OnTOe+88yqdnzRpkoiIpzk5wMnZGWkrhxxz+HG3XHRqqsPplPKyMlxZ7dkVCODMaEtZeRlpOe3419S5dOt8ANFYrDHy/5i4wocgKH9Xg0MFvkiewVolqNKexu+p5TFIq+/7fve733Wcm5PzStzbJyK43e4mHbjbbrutmgyvmmdQX+jatSu1ia4tW7asbS4O0Mntcn5wxx9GaUlJiQQiiivFQKNhHAaEy8pwuj1kt8njqTfepXvXA+nToyvzvlzZCK2HYxGsf8oKPNxunE5U3+Kv6uBdBI8qHlEOB76sLiBQA04GfPV840/dIPDEV1/dd5lhXP0TLAmrzveIyKlnnXV3z549uSknp/Qf27dnDh06lGHDhu2RLG+M4ygOmzZt4swzz+SCCy6o8f7PPvtsS3MRwPI22Zn61LT3JRwoQw0noIg4UP0Wp8uNwzAQEbp3PZDB/Xqxs2xXwzs8B6dGcNvs3BST2+V0ogAynI/N6SwTYYCCC8FTnQEkwNEwqYNDwbgZCoAPROSBL6CLMXv2rctmz85eC5suX7Yss3fv5lmMi0QiqGo1ziMiZGdns2LFCjp37kynTp3w+/01EoqtDJY0FwEEI6FAzgF5OQw6vi/ZuZ2qsDTFYRj4n5pKSXmAwcc0cqBCHC0ODrFlf1TdLK6CqWUKA5IxvhwkDCfsoSY3AHhCLQKIZ+x4gNgy0KOgpP9RR5kh1QNVVZrafEx28lRF7M6dO+vFXbZt2zYzLiKbRQfof2QvBg/sh5HZlrJdAcp2BSgPBO0jRFnAUvaGDuhNWKVR+XhacQiwQkJsq9RRk9fFVgvjKCgHUTjY/j0TCNOApItnraacWAUgNgI9kr4n8Hu4HejxCVwhIufbkT9ah07RoD5PmTIFwzBqVCDrS2hjxozh0ksvzW1WP4DGPTGqlO/4GTEMMGMJRBticGiXA4hEYxAO1J17V7sCmJpkq70vw6shsrwWV6fadPGFQkSg+6dW9a7dQtuK7glgSAXxuA3IFbgnaQhmPvroo2kvvviiTJkyhfnz51ebsa+++mqD+nzRRRdVUxAbsu6hqvztb3/ToqKi9LfeessNuJqFAFJcTsx4UqXhsIY8o03i7x+3FfH1uk10ymvbKOTbLP4uxEaFWb3CVtw5ZP9f0yw37OttU6mkI9QK7SALONh+7geFTp9bhHBI8jsdkGkTQeDyyy+XRy6++MCJQ4aQ4jJwuxy4nQYOw2DqM4/w6KOPNsi/EJ/p4XCYYDCIiDBz5sz6IF9FhKysLFHVZ4YPH74DiDQLAfxnwTI8bhcA6QceCmrCrh1JyFGcDgebC7ZbMe+N0XohB0BNtkuUFdUNapYqrBTlWnawIPnRKm8z+sHO+rzTsPP3HfCdAcUKrRwWAcTZglj0WNmpNV+15OgLYMLYU/nsoYP4+w0D6NPzIFYu/YqbLDEhDZ3NW7duZf369agq55xzTr0IZ+TIkfTs2fMqEflns4qAXcEQD7000+pQeBehcMTqY0paJXZkGILDYbDw63UYTkcjGQGFMrJ6oUXjZEKEOEHOZbJcTsy+1wW018revtKvbGKqr3SzxYgA6tiNFxFg1nhy+x4coaA0g+8Lc1mxqSsOw8CMmYrAIYcc8pWIMGHCBD744IN4mjGzZ8+u9UM6d+5Mz5496yP7TWDh+PHj5c0337z5m2++eS75YnNYAUuBYcUlZRTtLKNtNjhTMyAWhkAJVCm57zAMPl60ktRUD4FG+Nu1jjUEYxQlVe51A22A4hDsTIEihdxwPXUAJ7QywWXP9gKgvQluhSyjMmEkOqmzOBqTawpLiKalf+WcumQkaZ7VRCMRwsEyycnKCq9bt+4e4G2v1wswbs2aNfcfcsghnH322XsU26CqFBQUGHl5eZMsCca/apSDTQxnAEsNw+Bfb7yDw+nAiIYs5ljDfguC4HQ5oQEeOX2LTsDRtgqwraHjIrDhBNgKfA+kOmFIPblNOhADchXuAGKm1auOSRbJarGqh6PT6YPJuTj4dvgDrPv7zJNp3+pHwsEQS77bqNlpLkrLylxVfBEP9OvXL7t169bFzzzzTKMJIO4YysvLU9216wWgNRDYGwQAdrFkj8dj6WmGUaupVx4MIohCDXK8ts45SMewuJdq40usaoUdbzRABDgU3hZrrwBxWs/GrdJLgamAQ+dyACnI1PlDNslZW5Z/tvxC98at82MSLg+nOwkhEvnHy+8QicYEeDP5JSUlJSXFxcVnXH311Yfcd999DepTfJFpxIgRiAgbFi+Oh8gJtWnCzQBvJ3ynBdvrObkaKPs18aDRAIRrfcVHLc9nWRYoOTbCU0LWgpJD4Zn+VoiBiIGDCA+tWt/5xElPnb/11uzhOfD6tNUb1sy654XZcx+c8v5MPPpM4Q0l5yb67k36tnyuwcsaYN2bb7652lbidzvjwUpIFZFvZ8yY8U9AFi1bJpgmpw4e7Hn8iSfa7y0C2BFXmMLRmGUFZOVZXKBKR9I8KbYzr/khDVphKYJxKGggAXSsgWhjapmBAfueoKTQ86ftbd4cNvZv342KPtj3b/4FC4C/AOfbxygC/BGYjJerKymY+dyNn6fwsR1g8eLFh4kFNdr+yev9IsLAgQMBnjFN8xawah8RCjH12Wfd2dnZf9pbBHCl9U1JXj61TfHUrEZX4tpTiMJRgEcrMPiuzbu7NcDqSDYHDCzF0p0w5WBtaSDd3fGKDwdc1/rO464bt+kZbmRrjY35yQMW4+VBNNH0kYnr3sS5/r17917bt29fzjzzzER0kmmaiAiHdu/OgL59WfzBB0QikUqv+L/HHoNWrcjOztY/33jjnap6dnNbAYmPq8S2DAcYTUdvWuGTq7PAnzmdozEpM4azNsmMe99G5nr791H1fGerJCL4RKCvEzpbcSd8Y99jOohFx7cfNf/JS9Yu5C4b+V5yUcZWoiA/d+NjCV4mIVxGPjvwVzJJ7yGfUvxMXLly5aH2uRduvfXW30+bNo1Vq1bN9Hg8Zxd8842069TJKoAdDlf65uVLl743b/bsUwcff7zx1xtvVBE5CpjV7ARAJbepQGlBHaK+gSqA4BZLoIeBGnOAzHcRCeJVAy9wElbd3jgU1TyhdwuH2Q+8HYMrndaagClgKBTbDao4gtnzTlr93YZ/sslm688AF+InM2l2tyKfAEIaPo7HyybCDALgrwzEzTx8pPR6rJesYlXyN1z+97///fKMjAyXx+OJANF2HTo4CNSaFX76I5Mn6+Djj+emcePkhWnTzli6ePH/NbcIALghMcBij7DhqHGkXbYTyOPxXFw/9sJVGveKhqkWSWK+TT8JsdJGfk1UmdKYDomle84Pw4VRCKj1uyPQmQo38I8pMe75eGqSVePnanxJyAfwUYyfVOAa+3enj679aMW9H99bFLwn+Ln6NWKapq66flWNxFlWVhZpqNiipIQ+3bufoKr/anYCcDqdyypZ+6oEgoGqwbuEI1Fuu/J8cjLTFOhUrw4ZpCS5X6uy/KEYzEfoJdVV/Y72gMQX0x0NHIc0gc3HQ2SQlXi5zrAcLO74esMxML8//LsBQ/U1+TyOFx3yxJCH7njjjpM9Lo+ISIZhGPVhjY7vvv66Tg722cKF4HKBKrfecIOKyEnNTgAulyvJTWmha9eW7xEUl9NRKcwpHImi2mCTrDboIVW2hEl65veSNCkUFoiFyH71fGc/S5dMNBKxiSgSg28bOVSfIUxC+fCREY+s59GKHIZ6Qu+1dRealq0FBectWLBAAXr26SM9DjnksCVLlvTdGzoAYhgEy3bgycgmvU0eGijhgHatq/mw60fsu9ccpGK5tyZiidp/L7bPXwakaP11ALcJHye1G8WS/+4YBBs1QD4U+Bo45U/+PzXK9e5yuSq6XD3aWIEZp40cKSUbNyrl5fLa5Mn06dMnrVk5gL0Vm+XtKy4EEVLSMkGEDZsLKsKi7aybmy85m2CwYWOoDSeUDvbfZQthmgF3S8NCvdVIcqfO5oznT2POfxww5Xj4jn0Dg6KRSJyd0uGgg2q8qbSs7IzNP/0ksViMjPR0Jk+e3LwcQERmqypqmrTueDCoJpb+K0W0CIgKu4JNU91E6yYE077+qgGt1FoXkPrQ0nJwhaBrhUqxsN/duLIBTz+YyL6DBWaSuR0Oh2vMZDZEPuzQu3eJqmYempe3CXikua2ADBGxAkOo0AUioSrmSkome6sWssI2+0vi9nz8w7IWWG7eWmGXpVekAz/Cyr5geCD2M5hL+IWAmiaFRUU1LiCZqiERWSYiAaDL3jADUVW6dcy1RlmsSOBoMgGoWg6iRkYFST3PKbDQ0tYHUF0/UIEsl4XcOtcRBCKTuMYNWg6aB/IK9Iv9UghARKo5gqrg46SsrKz2e8MVXAnHoJDexqbS5HAMgWBZk7J7Tfo/mfdErb46arLt6/MuAzmojPSVU7i4OwT7gsyDfr+oqlyqWrHbWS1QUlJSvldcwTWlMZmmSVp2a3YW7UiSylEUSE9NaeIPoFwAFdJFCRh7mAp/LLo5j9e+DZAxEPgDHFP6S0G8y+UCtxsxDFrl5OAwjB9i9UwwbRYCSE1NTVFV0jzuauxZq85XO7Pz+Rkf4XanEA7Xf1JJ7d66dUQZpk7mohyCtQCkdbUT3s1YCItag7YB9wg4KvhLmvnDkmoR2/L/jfo+21wi4OGYaeqNvzuLmGnaYeL2QDprZlE/7yhtsC9Aa+7RQkyOM0awNp4cqyYxo3osQPJvtxN+U/fbytdD/zN/aciPm9zxgwZyuuYiAAUkGAoTLN2BiAFlRVbwlMOdUFhcTme1Ldb2WBE6h4XG+RRW0gOcGAYcYfdXbeSLwncmPG/fuxsZNHj3PNXLoc2K6b9wYigSupwbGNug527nZrxMx8uBe4sAKsynnUVWSFgSbYgITofBh4u+xu1qvBTanQEvlf9ok6R6isKiGBzeiJjCuuD4ZhvIfN7DyTtRjT6vj+gk7iJGvrUEXQdBtsPL53qvrsbHefjYvNcJoE3nQzFj8awgC11tsjO57OzB/PDTNis82jSJRmON4TMOcXNCXaZbTQShMMMJJw5M8utT+e+KJmJEGvBF/ya/0rJz04Gf05hIevq49C4dHuwgOkEnTr94+pXG3UYxXsprQH4PrEDQITEz1mGvKoGVNP9YLCGI4/hwuxw899qHiQCRcCRK6a5Ag6phYWn4DkyOISnAIXFtFjlqkpcsEW1q+MgDI3tXlIOOV1o+A3im0uRQbuGeKtE8Xt6ASkEoG/BhpeH6MPEyGS95+GqJAtpTeIiNm9kssk3ye3ftfT3wb5SX8PIZJrOZwL3cxFCUTvh5FqB/Xv8ruZNcHDyBn6K9SgAJuW6HhyngcDj3SN5rZQO+ZtYRpZc4yNDqzy5OQj6KpS9QOd4PDCbhY2MVNjwNHyOqEMQBeNmAcjF+PsdysZ6FFR3cfJDKSyu2rTDwsxYvxUC7Nultvp7749z/e+ubt7hv6H3xYNO3T+t2WtclY5fcszeVwKpmScULDQc7Nm+o17NL4IAaiUoxRHfLHQ6KZ2mQTlShVy3WY827bFRFvsWGR9Rw3xZ8dMXP53h5Dx8BlEnNrvr7+R5hjv0NrVCuL7qtqMexHY+VNFcaqvoR+UTxcf7EoRPz97YVUAnh5TsqZ25Z6wG1Y3ARdPsSvozC+Fq8iy8ma/k1EolB3wSq04hRS9yfNOVChDKKfD7GT64d5CE1yOamLBjQm3y+sAniIfJR8vnD+Nnjh8pd0gc/zqlfTxXqSH5tdgIQh5NYknPHNGO07nCQlRHkMFizcUul+7+EEQrLgWMEMudXDuOOY62Iiiz002tBRq5URnQ8O2JHLZ/q+XRPRaKfnfg5iXyOAYIog2v4rqvx8h7eSvpG48BHCD8D8NolboQr8PM0afyH/yP7uSXP6cjDR6qIPLbPCKDs581ktM2rpIkbTjfZGWm4nE4Wrfo+ce30aPQ0gdelIk1suLPCfKvNDGxXTfGciaHKwBruj5kwt5bmfmoSVuAlHcGNn1uQJI+cl1S8BPDzND5Ow5fIB2gKOAkvgo8X8LIVH4KXdVf2uVLI54p94QhKhP6nt26PiGHrAla9gFgsyvUXDSMQDNOv18EJVt5F9US1F2xs5LqB3+7GE5ii06tk95aSJkJ2LSKiqkNnrcIcAy48sWZTsKGzshyYZn/gNXjJJp8XUVrjs4paNDn4OBl4CC9ulP72uW54KUCYXdejzWYFHNyhPSJimYGGEzSGQ6Ns27KJtq1y2BUKgcbo0eVAAqEwrbMyMIp3uqtYbS7g8M/BcVwVbV8FEUUx6KIx+gIfJC5mcCbQVuIpRy5q3WHTgMIoXNKPKra0lwwUL5L0XqsYXVHco4iSDfyIn8cT8t0K8boLL0OB2cBDwN0Im5uV1fqI70S1KencbncdbzYC2Fq0w1oRVAVPBlq+nSlzP+LIzq1p1+aYRKZQLFEfUCv7kSvs80tdcC8VSRyIEFOTXRikq5WVcYr5Jh8aF6Dm2xgoN2Hlo/5HlFOD82kLdsx9FehnvW5HFXOvLVao9yuAQRTFQRQoRVmAUGqXoC0CnHgZh9IJpTtesvDxNF6eQ/Hhr+Id9HIYVuyBAEvwsU/jCZptLSAQClcIanEQDEdZvbmYEjMlYRq63W6m/OdzAqEwRTvLksmgIMlec8bssiwJ2Mk6YGVivV8ZKS477l7JQ+hjhyGEENAwTir0it33WSgGvkH4FlhVMr4kHViG8D1CayAHP53x0wc/vfHRFZgBPAisw0suEKiG/HwUK5l0FfD1HiE/n3FNgahm4QDJAaEgEA3iSXFxxx9GgghqmoghqEKq221XXDLi4rnIztm7LE4ADhgO/DfR4qWY5vREHJGqcChwhU5nKvCICh5bh1ibrAQohBywsR7sNEZS8GeWL+sTVT1fRKYnIWAW8Cx+W977GW4j/jzgRdTOcfAyFzgN2IKvCU1AaRrcNRcHGNOtY57l7bM9gPEUIVEzyTsIwXAET4qb1tnpcc3RNGGjWCHcaiPy5K9qswbssvCi/E2Fb9XgAtFEINKcKq7gsEKjQpAqId9C+NkIHrxMJZ8rbcLZBrwOvIcQxcst+DgDHw58VTyNzQVeO9MI4E+cz1+rW0PNzgFEhB8LiiqigtQEhxuJhSElA8JWZdBIOMzFw04gEAqT17YV5s/FCEwOw/1uuFEgw9L36Bi1qm58DqBvISqsUOhvl4lVxMrSTSDf0hVMtf6PU44a0wAADOxJREFUn3I2qcD18YqtJ1js3Y/gs7dq86JNMuO9OFBS8e+GcL38AZiAz/ae3sIgfVD/DVwo98veNwMPaJNTMdMjAUhrXaurWFUZecoATNMkBl96rLy7Fyo8v2Q54KoEgQ1HxeRf8ZTqeLl4iXMEQTD5UiN8KyDFy+gOuAVGD6SGlbOmYcmLbUSk2cUeXE3UsgehG16OrOJFrIrVc/FxAF4EL7dKpqwTkUzJl6v3jR+g0lqAQLicJKldjWNErcgh0wFb+kFU4Lvk5VyF3E+pZEerUPtSrQg7RXAA6wrnkgrc1h9ea0YzrJ9tBu6yZ36sidotx8cylP/aJibkEyJ5BTSfyfiIb2t/JcpoRXfh5SGEW+pyPze7J9CMRSzEh8vt11X+lnhmcHFJGbtgmwkLbYTPxpbX9hMnpVvr2xb2f2IpymqtzUOovI6DHRRzZHgbT/SHvze7/PUlqZy+Jk528NMOr+3UEYL4WJbk2ppuE8Ig4EH8dMfaMfRW/Gys61uanQBKCjYj8WqhalZUDgXEcLD42/VEojEem/IuLpcz8aUGbLft7PipzCgk0seN64iqEJUaOI/d/Eo5n1K5nED/2v3/vzaovnI5nmKdoGWMYxTwHj5a4eVRfLyOb/fBLM1OAK7UNKLhoB2IZev0CfvOwdpNW4nFYjgEypTCATbCTYvdB5NYhgGc+kVyAoda8Xw1sIAdmKxkfwMf99j6Raatb/TAYCxw76Aeg/6CnzTyeRz4x742AxOQ2ToPrSNGPVEvwDA40TTzAeZDZwP+A/TQCnkPMESS6wka/KhKTLWyG1FMJhvDKWV/BCUdtXZCE6QNPl57/MvHp8/fNH+aPaAd8FV4TfeZK7hCyzdxuOrOVkn1uGmdlU7fguDOhTBArLp58Uze5AQfF3AmtoUg5bxDGisQjrb3CUSEsLIXAjL2FfjZBTyLl+s0omNV9XC5XT5iIifjJYqvYTjdK9vGWYtCUWKRcC1EAqaVMpYr8K5ABxvzPyu8lMQFDIE+iXZ/S7kq/1TTrk5v7Rs03TiXH9jfQXno5d++/FdLg+YW8nkJu0DnL44A4gpf8eYNSKisxpKx9se8FN/JS+FHE07TuPPHeqrs2zwrGijJ3HsT4d9qEkL5gihj+F8AofCSIy+ZLSJiHGCkImTga7jes3cIQBwI0LZL90T5uNQUN0n1+uJOI6ddSvI7gcEDYEnMEgfrDNh16ZVMuOyaymvqci7l4uCPAscS5UQZYVXr+kWCFw/5XNpErT2Bl3mQKA/bqHLre4cAnCnWHLZdww7D4PE33sPpMDBVCYYjyRtHLVc49RirkDMu+DkTplx/Mb5VnVmFn8+q0ddZlMl5LDdGNCiGf19o8UHgVbw82ARtTQBOAejVvtdCfAxvHAHk4yOfmXjrXTO/8X7BlIxEQfUtQ4sItg9y5KGdMU0zTsWLIzDk2KSghmPAPOxe5n9+KFvxVY///xUqcTEaUBl9N0QQA/j6uq+vNk1zTuMkSYU78SWEQpQZ+PlwT74rNTVVO7RvzUWnHR93BliewMxcKN2G4XDwwLzpDOvQhz7du7Jm4xZ6z/n46xNUj64WljWeS1Bi3NOMbtx9AfHFoyYA0zQLDcNot2ciwM+l+LgZYSNeFC+X4G1qEWFxggm5r+PY6CAtxY0gvDx7Hk+53RdUQ76X36HsqIz8+Zn7iTkn5DeByPJiNhb5NesAPtbZixkLgbHkN5VHTatSLa/O+RhPiguny8VmkUiVGTKSGC7uSQ5qXDQK3K79hgsIfcnn/AZwjYer/P4C355NUqfdkA+pISJWWY6fI8hnIjALP5820htklYhRZYO7gKtWnMorfMp5pwwkGI4kfAVJbP8iYDJBKuLJ+eIWYCZEOmCtE/z6wccK8rmMpP0V6pjpU/BxUdLvl/FZNY/2nAD8NdfUxcsg8ilE6IFyCV5W4KvfDluVIFwOqZmwcyuSYmA4LKI9uEP76hWtLLb/AlBi+Ym/NICnQB8FvRKMf+5nFv3h9UD+DnxJSnp+EwWb7NYM9PEpftqhBBC6AB3twMbdTPgqhWAMB5QUgOEg3eXh6TffQ0Qo2F6FlsZzMcrLdrybsOVQB+gLIK+CXAuOt2BA4X6Ffj9nkV9rsgp4ObkS8r1kIPRtqtcb9fzIAPA8ynm28vJinaJNhEAwnCAGQwwrLkuVVzM/AXFgqtIxtyLML3RuaBjCYwl1IepciCttEX89+Wt6z/kdyELo+2UT59b9UnSBTnWoTq/ZiBe8DEK5CB9L9i4BWNxgJX7uxctHwH/JR/FyYhJbOiX+ZyQa5dQB1qbQhsNBSeFPliQIlFVgT8HjdlG0s8yOCMZEWWR/1TpWn5rJc08fyf0fLGHFsC/gmOftJw8mn6f2G+RbBH2pHcxRVel7Fz/xfX4PQTkFfxPkFO6RJ9DHEPy8gHAqMA8vx9lX1sRr0LicTuZ9ZW1yoKaJM8WDqsmM7C+4qei8Srs0/LClEIfDIGVGynsIp+HmFe5eOJVpvkugJAbGRXDsU/ZglaL0wZ8U+frrVwQVH0uRiiLUSVCSxAmm4cff1K937sGH/9f2JBaTz834eZ58lgNHqipOO9RLVUnNbGU5AtOzeOfdJXhS3PHVPwxDCF4TRLbLQGLi5a4VCrumoOEfIethkDH2bFhUbdOFX+aMdgC/QdmF8AJWfkFOPcLCT8FLb3yVts9bYre5EpLkfjwFLZ9DgG74G7913p7HA/hpRT7r8PIwPrLx8qg8IDbRWmG7ajggFkVRHA4rUbRjbmvmZixma7diPE95UId+ESyb1xVCr8Gx38PCiRC8CU6M4OXf+DjmVzKjY8B7NpK6JbHzOVh7FK/Cz4QanvwUrVjqTngKrXE9osq9t5DPQIQVifI0+4wALCLoRj4R8jkaMEzsDaPsAD1JyYRdxYm9/qKeGMHLggzddjzlgRCPx94lFnr8jyAvQb/vYeEEcE7Ce2w7YAE+OjdgBrpQ2iEU1icmrllZe+UxOrMScoUsfElRSz6ieHkT7L4KP9Rg++cA3yRi/5tEBHiTskkra58K5FCRVJFVp+3px0U+EZQRsQGxQ9Z/UnCa3RErGFSE7Fg6ZZlBUtJcXLJtCAK0ykq3zcZYAI5dAgvvwBF7lbuOPQblM6TyTty78ZTFgHeAMfALthYsS6ojXlYB1wMz8KGChBQFL2vw0ZX8JP+Ml09QzsHfdMiPc4D7azFNFDgQiODjbnuAb0bwxNGKcritqMzBzyybCFbHesZSnfMrPLYhwrgEWpmZzB+0mq7rc3FJ5eVrd9qNzwWdb9/K1cMGk7F9O7ABfz02dsznLWA7wiZ8jVsT30dE8CPQCS9DUd4ARuoOvfH292/X+96574JEZpFVfHKUbYI3eXSz7IadrrQR3BqlE0IaVkxeCJ+dj5/PowijgFyUE4AhrlmuAZGzI+fesXkkgrI6awcHl+XwwAFvcvyMXmwpLOZ3ZwyC9Na4gsXc88xbRA+68TPOes4gs+hKrMIQB9jf9yjCw/iS4vy8ZAPHAq/gox2/ZogrdF6+xcdhtnjItJXHTsBIfM2X0+DcjRw7ogbNcztwpR2eHEM5AR834KUz8APCBZEhkb84J7pY/4dtFLp2MiDSn+ScTDNeNNL2GEZvimA8mPeymVW0EFiDErMVIAOftRN3Jflp+c4v+NUjP1lX8HEYXhaggM8eLC/rsfYoajYCkEZSbW+U9ggG8B5KCTADP5fhZYkUSh5l5LXrlMXBgVx+Ez0JgqXMT/+G0vcCDO53OKkeD2ZaNs+lvc62B0rR0bHbtJ1+AzjxMy1pZjyFtd9uJjAK+BTffpPoUZNIU1tHUGAw/hr9A/vYD1DZVhW8HIdyDfkoyunaVt+lLRRHykihE0TDoCZhiWCq0io7g03fLufLo8ro9+khvNd9GeHW0ZsQXsbHX2wl9HK7ysZMhEvw8R/2d7C8gr9JKIp7xQvd9J24C2UGWLlrKeoiKjFu2zycmGny3oIVnH1aX/xZr3PnllGoKve2mUrqI6ndAuMCG7Ayf0pQyvGTQQs0KzRHUOgw/CyPk9ag8p5cuv0UAhKh+KfvibYx+XDV19y5ZRTRcIiH8mbieMZJcHRwNMpbKCUoHVqQ/2slAB+D8CKe+z0XuF9wU2IGOCCYzbK0DSw8ooRdrYJsWlWEAu+3W4G37CLMo00Q0hA+x4/gb+aKWi3QrBwAfKiIFOKEHms74ED4MHsF3QMHkvdjNtt3lmkwFObbnVujTy59d6drvnOjpmm0Vp9EC/zKCMAGx2ZHzAyHYmXbC2JXLTgilrOmNHZc58xYaSDMP16cPsN4zXHk+sHbMsO7wl1wM67Jc+pboJmsgPrBAlXNKy8uIJN0XA7LMxiOmfGNnQpLS8tIeO/2cb28FmiBFmiBFmiBFmiBFmiBFmiBFmiB/wH4f+jryq6sRdUDAAAAAElFTkSuQmCC" alt="DREME Logo"/>
-        <h1>DREME</h1>
-        <h2>Discriminative Regular Expression Motif Elicitation</h2>
-      </div>
-      <p class="spaced">
-        For further information on how to interpret these results or to get a 
-        copy of the MEME software please access 
-        <a href="http://meme.nbcr.net/">http://meme.nbcr.net</a>. 
-      </p>
-      <p>
-        If you use DREME in your research please cite the following paper:<br />
-        <span class="citation">
-          Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011.
-          <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a>
-        </span>
-      </p>
-    </div>
-    <!-- navigation -->
-    <div class="pad2">
-      <a class="jump" href="#motifs_sec">Discovered Motifs</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#inputs_sec">Inputs &amp; Settings</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#info_sec">Program information</a>
-    </div>
-    <!-- alert the user when their browser is not up to the task -->
-    <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript>
-    <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1>
-    <script>
-      if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block";
-    </script>
-    <!-- description -->
-    <div id="description_section" style="display:none">
-      <div id="description" class="header">
-        <h2>Description</h2>
-      </div>
-      <div id="description_text" class="box">
-      </div>
-    </div>
-    <script>
-      if (data.description) {
-        $("description_text").innerHTML = "";
-        $("description_text").appendChild(make_description(data.description));
-        $("description_section").style.display = "block";
-      }
-    </script>
-    <!-- motifs -->
-    <div id="motifs_sec" class="header">
-      <h2>Discovered Motifs</h2>
-      <span><a href="#inputs_sec">Next</a>&nbsp;<a href="#">Top</a></span>
-    </div>
-    <div id="motifs" class="box">
-      <p>No motifs were discovered!</p>
-    </div>
-    <script>make_motifs();</script>
-    <!-- inputs and settings -->
-    <div id="inputs_sec" class="header">
-      <h2>Inputs &amp; Settings</h2>
-      <span><a href="#motifs_sec">Previous</a>&nbsp;<a href="#info_sec">Next</a>&nbsp;<a href="#">Top</a></span>
-    </div>
-    <div class="box">
-      <h4>Sequences</h4>
-      <table id="seq_info" class="inputs">
-        <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th>
-          <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th>
-          <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th>
-        </tr>
-        <tr>
-          <td id="ins_seq_source"></td>
-          <td id="ins_seq_alphabet"></td>
-          <td id="ins_seq_count"></td>
-        </tr>
-      </table>
-      <script>
-      {
-        var db = data.sequence_db;
-        $("ins_seq_source").innerHTML = db.file;
-        $("ins_seq_alphabet").innerHTML = dreme_alphabet.get_alphabet_name();
-        $("ins_seq_count").innerHTML = db.count;
-      }
-      </script>
-      <h4>Control Sequences</h4>
-      <table id="seq_info" class="inputs">
-        <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th>
-          <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th>
-        </tr>
-        <tr>
-          <td id="ins_cseq_source"></td>
-          <td id="ins_cseq_count"></td>
-        </tr>
-      </table>
-      <script>
-      {
-        var db = data.control_db;
-        if (db.from == "shuffled") {
-          $("ins_cseq_source").innerHTML = "Shuffled Sequences";
-        } else {
-          $("ins_cseq_source").innerHTML = db.file;
-        }
-        $("ins_cseq_count").innerHTML = db.count;
-      }
-      </script>
-      <h4>Background</h4>
-      <span id="alpha_bg"></span>
-      <script>
-      {
-        $("alpha_bg").appendChild(make_alpha_bg(dreme_alphabet, data.control_db.freqs));
-      }
-      </script>
-      <h4>Other Settings</h4>
-      <table id="tbl_settings" class="inputs hide_advanced">
-        <tr>
-          <th>Strand Handling</th>
-          <td id="opt_strand">
-            <span class="strand_none">This alphabet only has one strand</span>
-            <span class="strand_given">Only the given strand is processed</span>
-            <span class="strand_both">Both the given and reverse complement strands are processed</span>
-          </td>
-        </tr>
-        <tr><th># REs to Generalize</th><td id="opt_ngen"></td></tr>
-        <tr><th>Shuffle Seed</th><td id="opt_seed"></td></tr>
-        <tr><th>E-value Threshold</th><td id="opt_stop_evalue"></td></tr>
-        <tr><th>Max Motif Count</th><td id="opt_stop_count"></td></tr>
-        <tr><th>Max Run Time</th><td id="opt_stop_time"></td></tr>
-      </table>
-      <script>
-      {
-        $("opt_strand").className = (dreme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none");
-        $("opt_ngen").innerHTML = data.options.ngen;
-        $("opt_seed").innerHTML = data.options.seed;
-        $("opt_stop_evalue").innerHTML = data.options.stop.evalue;
-        $("opt_stop_count").innerHTML = (typeof data.options.stop.count == "number" ? data.options.stop.count : "No maximum motif count.");
-        $("opt_stop_time").innerHTML = (typeof data.options.stop.time == "number" ? data.options.stop.time + " seconds." : "No maximum running time.");
-      }
-      </script>
-    </div>
-    <!-- list information on this program -->
-    <div id="info_sec" class="bar" style="position:relative">
-      <div style="position: absolute; right: 0;"><a href="#inputs_sec">Previous</a> <a href="#">Top</a></div>
-      <div class="subsection">
-        <h5 id="version">DREME version</h5>
-        <span id="ins_version"></span> 
-        (Release date: <span id="ins_release"></span>)<br>
-      </div>
-      <script>
-        $("ins_version").innerHTML = data["version"];
-        $("ins_release").innerHTML = data["release"];
-      </script>
-      <div class="subsection">
-        <h5 id="reference">Reference</h5>
-        <span class="citation">
-          Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011.
-          <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a>
-        </span>
-      </div>
-      <div class="subsection">
-        <h5 id="command">Command line</h5>
-        <textarea id="cmd" rows="3" style="width:100%;" readonly="readonly">
-        </textarea>
-        <script>$("cmd").value = data["cmd"].join(" ");</script>
-      </div>
-    </div>
-    
   </body>
 </html>
--- a/test-data/dreme_output_test1.txt	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/dreme_output_test1.txt	Wed Dec 11 18:05:15 2019 -0500
@@ -1,12 +1,7 @@
-# DREME 4.12.0
-#     command: dreme -o ./dreme_test1_out -p dreme_test_sites.fa -norc -rna -s 1
-#   positives: 1000 from dreme_test_sites.fa (Thu Apr 26 15:09:03 CEST 2018)
+# DREME 5.0.5
 #   negatives: 1000 from shuffled positives
-#        host: ThinkPad-T450s
-#        when: Thu May 03 13:22:29 CEST 2018
 
-MEME version 4.12.0
-
+MEME version 5.0.5
 ALPHABET "RNA" RNA-LIKE
 A "Adenine" CC0000
 C "Cytosine" 0000CC
@@ -27,20 +22,15 @@
 K "Keto" = GU
 T = U
 END ALPHABET
-
 Background letter frequencies (from dataset):
 A 0.221 C 0.245 G 0.221 U 0.312
-
-
 MOTIF UUYUCY DREME-1
-
 #             Word        Pos        Neg    P-value    E-value
 # BEST      UUYUCY        387        210   2.6e-018   1.2e-013
 #           UUUUCC        147         75   1.8e-007   8.1e-003
 #           UUUUCU        155         94   2.2e-005   1.0e+000
 #           UUCUCU         94         51   1.3e-004   6.1e+000
 #           UUCUCC         75         42   1.1e-003   5.0e+001
-
 letter-probability matrix: alength= 4 w= 6 nsites= 459 E= 1.2e-013
 0.000000 0.000000 0.000000 1.000000
 0.000000 0.000000 0.000000 1.000000
@@ -48,29 +38,21 @@
 0.000000 0.000000 0.000000 1.000000
 0.000000 1.000000 0.000000 0.000000
 0.000000 0.474946 0.000000 0.525054
-
-
 MOTIF YAGG DREME-2
-
 #             Word        Pos        Neg    P-value    E-value
 # BEST        YAGG        600        416   1.1e-016   5.1e-012
 #             CAGG        441        304   1.5e-010   6.6e-006
 #             UAGG        232        165   1.1e-004   4.7e+000
-
 letter-probability matrix: alength= 4 w= 4 nsites= 793 E= 5.1e-012
 0.000000 0.692308 0.000000 0.307692
 1.000000 0.000000 0.000000 0.000000
 0.000000 0.000000 1.000000 0.000000
 0.000000 0.000000 1.000000 0.000000
-
-
 MOTIF GAAGAW DREME-3
-
 #             Word        Pos        Neg    P-value    E-value
 # BEST      GAAGAW         81         22   8.2e-010   3.4e-005
 #           GAAGAU         45          7   2.4e-008   9.9e-004
 #           GAAGAA         40         16   7.9e-004   3.3e+001
-
 letter-probability matrix: alength= 4 w= 6 nsites= 89 E= 3.4e-005
 0.000000 0.000000 1.000000 0.000000
 1.000000 0.000000 0.000000 0.000000
@@ -78,17 +60,13 @@
 0.000000 0.000000 1.000000 0.000000
 1.000000 0.000000 0.000000 0.000000
 0.494382 0.000000 0.000000 0.505618
-
-
 MOTIF SMUGGA DREME-4
-
 #             Word        Pos        Neg    P-value    E-value
 # BEST      SMUGGA        110         47   9.1e-008   3.7e-003
 #           GAUGGA         22          6   1.7e-003   7.1e+001
 #           GCUGGA         33         14   3.6e-003   1.5e+002
 #           CCUGGA         32         15   8.6e-003   3.5e+002
 #           CAUGGA         29         13   9.1e-003   3.7e+002
-
 letter-probability matrix: alength= 4 w= 6 nsites= 119 E= 3.7e-003
 0.000000 0.529412 0.470588 0.000000
 0.428571 0.571429 0.000000 0.000000
@@ -96,7 +74,4 @@
 0.000000 0.000000 1.000000 0.000000
 0.000000 0.000000 1.000000 0.000000
 1.000000 0.000000 0.000000 0.000000
-
-
 # Stopping reason: E-value threshold exceeded
-#    Running time: 13.95 seconds
--- a/test-data/dreme_output_test1.xml	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/dreme_output_test1.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -1,7 +1,5 @@
-<dreme version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700">
+<dreme version="5.0.5" release="Mon Mar 18 20:12:19 2019 -0700">
   <model>
-    <command_line>dreme -o ./dreme_test1_out -p dreme_test_sites.fa -norc -rna -s 1</command_line>
-    <positives name="dreme test sites" count="1000" file="dreme_test_sites.fa" last_mod_date="Thu Apr 26 15:09:03 CEST 2018" />
     <negatives name="shuffled positive sequences" count="1000" from="shuffled"/>
     <alphabet name="RNA" like="rna">
       <letter id="A" symbol="A" name="Adenine" colour="CC0000"/>
@@ -26,8 +24,6 @@
     <ngen>100</ngen>
     <add_pv_thresh>0.01</add_pv_thresh>
     <seed>1</seed>
-    <host>ThinkPad-T450s</host>
-    <when>Thu May 03 13:22:29 CEST 2018</when>
   </model>
   <motifs>
     <motif id="m01" alt="DREME-1" seq="UUYUCY" length="6" nsites="459" p="387" n="210" pvalue="2.6e-018" evalue="1.2e-013" unerased_evalue="1.2e-013">
@@ -73,5 +69,4 @@
       <match seq="CAUGGA" p="29" n="13" pvalue="9.1e-003" evalue="3.7e+002"/>
     </motif>
   </motifs>
-  <run_time cpu="13.95" real="13.95" stop="evalue"/>
 </dreme>
--- a/test-data/dreme_output_test2.html	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/dreme_output_test2.html	Wed Dec 11 18:05:15 2019 -0500
@@ -7,10 +7,10 @@
       // @JSON_VAR data
       var data = {
         "program": "dreme",
-        "version": "4.12.0",
-        "release": "Tue Jun 27 16:22:50 2017 -0700",
+        "version": "5.0.5",
+        "release": "Mon Mar 18 20:12:19 2019 -0700",
         "cmd": [
-          "dreme", "-o", "./dreme_test2_out", "-p", "dreme_test_sites.fa",
+          "dreme", "-o", "./dreme_out", "-p",
           "-norc", "-rna", "-s", "1", "-e", "1e-05", "-g", "100", "-mink",
           "4", "-maxk", "10"
         ],
@@ -36,80 +36,57 @@
               "symbol": "C",
               "name": "Cytosine",
               "colour": "0000CC"
-            }, {
               "symbol": "G",
               "name": "Guanine",
               "colour": "FFB300"
-            }, {
               "symbol": "U",
               "aliases": "T",
               "name": "Uracil",
               "colour": "008000"
-            }, {
               "symbol": "N",
               "aliases": "X.",
               "name": "Any base",
               "equals": "ACGU"
-            }, {
               "symbol": "V",
               "name": "Not U",
               "equals": "ACG"
-            }, {
               "symbol": "H",
               "name": "Not G",
               "equals": "ACU"
-            }, {
               "symbol": "D",
               "name": "Not C",
               "equals": "AGU"
-            }, {
               "symbol": "B",
               "name": "Not A",
               "equals": "CGU"
-            }, {
               "symbol": "M",
               "name": "Amino",
               "equals": "AC"
-            }, {
               "symbol": "R",
               "name": "Purine",
               "equals": "AG"
-            }, {
               "symbol": "W",
               "name": "Weak",
               "equals": "AU"
-            }, {
               "symbol": "S",
               "name": "Strong",
               "equals": "CG"
-            }, {
               "symbol": "Y",
               "name": "Pyrimidine",
               "equals": "CU"
-            }, {
               "symbol": "K",
               "name": "Keto",
               "equals": "GU"
-            }
-          ]
-        },
         "background": {
           "freqs": [0.221, 0.245, 0.221, 0.312]
-        },
         "sequence_db": {
-          "name": "dreme test sites",
-          "file": "dreme_test_sites.fa",
-          "lmod": "Thu Apr 26 15:09:03 CEST 2018",
           "count": 1000
-        },
         "control_db": {
           "name": "shuffled positive sequences",
           "from": "shuffled",
           "count": 1000,
           "freqs": [0.221, 0.245, 0.221, 0.312]
-        },
         "motifs": [
-          {
             "db": 0,
             "id": "UUYUCY",
             "alt": "DREME-1",
@@ -127,5993 +104,64 @@
               [0.000000, 0.000000, 0.000000, 1.000000], 
               [0.000000, 1.000000, 0.000000, 0.000000], 
               [0.000000, 0.474946, 0.000000, 0.525054]
-            ],
             "matches": [
-              {
                 "seq": "UUUUCC",
                 "p": 147,
                 "n": 75,
                 "pvalue": "1.8e-007",
                 "evalue": "2.2e-002"
-              }, {
-                "seq": "UUUUCU",
-                "p": 155,
-                "n": 94,
-                "pvalue": "2.2e-005",
-                "evalue": "2.8e+000"
-              }, {
-                "seq": "UUCUCU",
-                "p": 94,
-                "n": 51,
-                "pvalue": "1.3e-004",
-                "evalue": "1.7e+001"
-              }, {
-                "seq": "UUCUCC",
-                "p": 75,
-                "n": 42,
-                "pvalue": "1.1e-003",
-                "evalue": "1.4e+002"
-              }
-            ]
-          }, {
-            "db": 0,
-            "id": "YAGG",
-            "alt": "DREME-2",
-            "len": 4,
-            "nsites": 793,
-            "evalue": "1.4e-011",
-            "p": 600,
-            "n": 416,
-            "pvalue": "1.1e-016",
-            "unerased_evalue": "6.3e-012",
-            "pwm": [
-              [0.000000, 0.692308, 0.000000, 0.307692], 
-              [1.000000, 0.000000, 0.000000, 0.000000], 
-              [0.000000, 0.000000, 1.000000, 0.000000], 
-              [0.000000, 0.000000, 1.000000, 0.000000]
-            ],
-            "matches": [
-              {
-                "seq": "CAGG",
-                "p": 441,
-                "n": 304,
-                "pvalue": "1.5e-010",
-                "evalue": "1.8e-005"
-              }, {
-                "seq": "UAGG",
-                "p": 232,
-                "n": 165,
-                "pvalue": "1.1e-004",
-                "evalue": "1.3e+001"
-              }
-            ]
-          }
-        ],
-        "runtime": {
-          "host": "ThinkPad-T450s",
-          "when": "Thu May 03 13:22:11 CEST 2018",
-          "cpu": 15.97,
-          "real": 15.97,
-          "stop": "evalue"
-        }
-      };
     </script>
-    <script>
 var site_url = "http://meme-suite.org";
-</script>
-    <script>
-
-/*
- * $
- *
- * Shorthand function for getElementById
- */
-function $(el) {
-  return document.getElementById(el);
-}
-
-
-/*
- * See http://stackoverflow.com/a/5450113/66387
- * Does string multiplication like the perl x operator.
- */
-function string_mult(pattern, count) {
-    if (count < 1) return '';
-    var result = '';
-    while (count > 1) {
-        if (count & 1) result += pattern;
-        count >>= 1, pattern += pattern;
-    }
-    return result + pattern;
-}
-
-/*
- * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript
- * Slightly modified with information from
- * https://developer.mozilla.org/en/DOM/window.location
- */
-function parse_params() {
-  "use strict";
-  var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v;
-  search = window.location.search;
-  queryStart = search.indexOf("?") + 1;
-  queryEnd   = search.indexOf("#") + 1 || search.length + 1;
-  query      = search.slice(queryStart, queryEnd - 1);
-
-  if (query === search || query === "") return {};
-
-  params  = {};
-  nvPairs = query.replace(/\+/g, " ").split("&");
-
-  for (i = 0; i < nvPairs.length; i++) {
-    nv = nvPairs[i].split("=");
-    n  = decodeURIComponent(nv[0]);
-    v  = decodeURIComponent(nv[1]);
-    // allow a name to be used multiple times
-    // storing each value in the array
-    if (!(n in params)) {
-      params[n] = [];
-    }
-    params[n].push(nv.length === 2 ? v : null);
-  }
-  return params;
-}
-
-/*
- * coords
- *
- * Calculates the x and y offset of an element.
- * From http://www.quirksmode.org/js/findpos.html
- * with alterations to take into account scrolling regions
- */
-function coords(elem) {
-  var myX = myY = 0;
-  if (elem.getBoundingClientRect) {
-    var rect;
-    rect = elem.getBoundingClientRect();
-    myX = rect.left + ((typeof window.pageXOffset !== "undefined") ?
-        window.pageXOffset : document.body.scrollLeft);
-    myY = rect.top + ((typeof window.pageYOffset !== "undefined") ?
-        window.pageYOffset : document.body.scrollTop);
-  } else {
-    // this fall back doesn't properly handle absolutely positioned elements
-    // inside a scrollable box
-    var node;
-    if (elem.offsetParent) {
-      // subtract all scrolling
-      node = elem;
-      do {
-        myX -= node.scrollLeft ? node.scrollLeft : 0;
-        myY -= node.scrollTop ? node.scrollTop : 0;
-      } while (node = node.parentNode);
-      // this will include the page scrolling (which is unwanted) so add it back on
-      myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft;
-      myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop;
-      // sum up offsets
-      node = elem;
-      do {
-        myX += node.offsetLeft;
-        myY += node.offsetTop;
-      } while (node = node.offsetParent);
-    }
-  }
-  return [myX, myY];
-}
-
-/*
- * position_popup
- *
- * Positions a popup relative to an anchor element.
- *
- * The avaliable positions are:
- * 0 - Centered below the anchor.
- */
-function position_popup(anchor, popup, position) {
-  "use strict";
-  var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h;
-  var a_xy, spacer, margin, scrollbar, page_w;
-  // define constants
-  spacer = 5;
-  margin = 15;
-  scrollbar = 15;
-  // define the positions and widths
-  a_xy = coords(anchor);
-  a_x = a_xy[0];
-  a_y = a_xy[1];
-  a_w = anchor.offsetWidth;
-  a_h = anchor.offsetHeight;
-  p_w = popup.offsetWidth;
-  p_h = popup.offsetHeight;
-  page_w = null;
-  if (window.innerWidth) {
-    page_w = window.innerWidth;
-  } else if (document.body) {
-    page_w = document.body.clientWidth;
-  }
-  // check the position type is defined
-  if (typeof position !== "number") {
-    position = 0;
-  }
-  // calculate the popup position
-  switch (position) {
-    case 1:
-      p_x = a_x + a_w + spacer;
-      p_y = a_y + (a_h / 2) - (p_h / 2);
-      break;
-    case 0:
-    default:
-      p_x = a_x + (a_w / 2) - (p_w / 2);
-      p_y = a_y + a_h + spacer;
-      break;
-  }
-  // constrain the popup position
-  if (p_x < margin) {
-    p_x = margin;
-  } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) {
-    p_x = page_w - margin - scrollbar - p_w;
-  }
-  if (p_y < margin) {
-    p_y = margin;
-  }
-  // position the popup
-  popup.style.left = p_x + "px";
-  popup.style.top = p_y + "px";
-}
-
-function lookup_help_popup(popup_id) {
-  var _body, pop, info;
-  pop = document.getElementById(popup_id);
-  if (pop == null) {
-    _body = document.getElementsByTagName("body")[0];
-    pop = document.createElement("div");
-    pop.className = "pop_content";
-    pop.id = popup_id;
-    pop.style.backgroundColor = "#FFC";
-    pop.style.borderColor = "black";
-    info = document.createElement("p");
-    info.style.fontWeight = "bold";
-    info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\"."));
-    pop.appendChild(info);
-    // this might cause problems with the menu, but as this only happens
-    // when something is already wrong I don't think that's too much of a problem
-    _body.insertBefore(pop, _body.firstChild);
-  }
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) {
-    if (!/\bauto_buttons\b/.test(pop.className)) {
-      pop.className += " auto_buttons";
-      var back_btn_sec = document.createElement("div");
-      back_btn_sec.className = "nested_only pop_back_sec";
-      var back_btn = document.createElement("span");
-      back_btn.className = "pop_back";
-      back_btn.appendChild(document.createTextNode("<< back"));
-      back_btn.addEventListener("click", function(e) {
-        help_return();
-      }, false);
-      back_btn_sec.appendChild(back_btn);
-      pop.insertBefore(back_btn_sec, pop.firstChild);
-      var close_btn_sec = document.createElement("div");
-      close_btn_sec.className = "pop_close_sec";
-      var close_btn = document.createElement("span");
-      close_btn.className = "pop_close";
-      close_btn.appendChild(document.createTextNode("close"));
-      close_btn.addEventListener("click", function(e) {
-        help_popup();
-      }, false);
-      close_btn_sec.appendChild(close_btn);
-      pop.appendChild(close_btn_sec);
-    }
-  }
-  return pop;
-}
-
-/*
- * help_popup
- *
- * Moves around help pop-ups so they appear
- * below an activator.
- */
-function help_popup(activator, popup_id) {
-  "use strict";
-  var pop;
-  // set default values
-  if (typeof help_popup.popup === "undefined") {
-    help_popup.popup = [];
-  }
-  if (typeof help_popup.activator === "undefined") {
-    help_popup.activator = null;
-  }
-  var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (typeof(activator) == "undefined") { // no activator so hide
-    if (last_pop != null) {
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-    }
-    return;
-  }
-  pop = lookup_help_popup(popup_id);
-  if (pop == last_pop) {
-    if (activator == help_popup.activator) {
-      //hide popup (as we've already shown it for the current help button)
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-      return; // toggling complete!
-    }
-  } else if (last_pop != null) {
-    //activating different popup so hide current one
-    last_pop.style.display = 'none';
-  }
-  help_popup.popup = [pop];
-  help_popup.activator = activator;
-  toggle_class(pop, "nested", false);
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = 'block';
-  position_popup(activator, pop);
-}
-
-/*
- * help_refine
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_refine(popup_id) {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not refine a help popup when one is not shown!");
-  }
-  var pop = lookup_help_popup(popup_id);
-  var last_pop = help_popup.popup[help_popup.popup.length - 1];
-  if (pop == last_pop) return; // slightly odd, but no real cause for alarm
-  help_popup.popup.push(pop);
-  toggle_class(pop, "nested", true);
-  last_pop.style.display = "none";
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = "block";
-  position_popup(help_popup.activator, pop);
-}
-
-/*
- * help_return
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_return() {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not return to a earlier help popup when one is not shown!");
-  }
-  var last_pop = help_popup.popup.pop();
-  last_pop.style.display = "none";
-  var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (pop != null) {
-    toggle_class(pop, "nested", help_popup.popup.length > 1);
-    pop.style.display = "block";
-    position_popup(help_popup.activator, pop);
-  } else {
-    help_popup.activator = null;
-  }
-}
-
-/*
- * update_scroll_pad
- *
- * Creates padding at the bottom of the page to allow
- * scrolling of anything into view.
- */
-function update_scroll_pad() {
-  var page, pad;
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  pad = $("scrollpad");
-  if (pad === null) {
-    pad = document.createElement("div");
-    pad.id = 'scrollpad';
-    document.getElementsByTagName('body')[0].appendChild(pad);
-  }
-  pad.style.height = Math.abs(page.clientHeight - 100) + "px";
-}
-
-function substitute_classes(node, remove, add) {
-  "use strict";
-  var list, all, i, cls, classes;
-  list = node.className.split(/\s+/);
-  all = {};
-  for (i = 0; i < list.length; i++) {
-    if (list[i].length > 0) all[list[i]] = true;
-  }
-  for (i = 0; i < remove.length; i++) {
-    if (all.hasOwnProperty(remove[i])) {
-      delete all[remove[i]];
-    }
-  }
-  for (i = 0; i < add.length; i++) {
-    all[add[i]] = true;
-  }
-  classes = "";
-  for (cls in all) {
-    classes += cls + " ";
-  }
-  node.className = classes;
-}
-
-/*
- * toggle_class
- *
- * Adds or removes a class from the node. If the parameter 'enabled' is not 
- * passed then the existence of the class will be toggled, otherwise it will be
- * included if enabled is true.
- */
-function toggle_class(node, cls, enabled) {
-  var classes = node.className;
-  var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/);
-  var found = false;
-  for (var i = 0; i < list.length; i++) {
-    if (list[i] == cls) {
-      list.splice(i, 1);
-      i--;
-      found = true;
-    }
-  }
-  if (typeof enabled == "undefined") {
-    if (!found) list.push(cls);
-  } else {
-    if (enabled) list.push(cls);
-  }
-  node.className = list.join(" ");
-}
-
-/*
- * find_child
- *
- * Searches child nodes in depth first order and returns the first it finds
- * with the className specified.
- * TODO replace with querySelector
- */
-function find_child(node, className) {
-  var pattern;
-  if (node == null || typeof node !== "object") {
-    return null;
-  }
-  if (typeof className === "string") {
-    pattern = new RegExp("\\b" + className + "\\b");
-  } else {
-    pattern = className;
-  }
-  if (node.nodeType == Node.ELEMENT_NODE && 
-      pattern.test(node.className)) {
-    return node;
-  } else {
-    var result = null;
-    for (var i = 0; i < node.childNodes.length; i++) {
-      result = find_child(node.childNodes[i], pattern);
-      if (result != null) break;
-    }
-    return result;
-  }
-}
-
-/*
- * find_parent
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the className specified.
- */
-function find_parent(node, className) {
-  var pattern;
-  pattern = new RegExp("\\b" + className + "\\b");
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && 
-        pattern.test(node.className)) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * find_parent_tag
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the tag name specified. HTML tags should be specified in upper case.
- */
-function find_parent_tag(node, tag_name) {
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * __toggle_help
- *
- * Uses the 'topic' property of the this object to
- * toggle display of a help topic.
- *
- * This function is not intended to be called directly.
- */
-function __toggle_help(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-
-  help_popup(this, this.getAttribute("data-topic"));
-}
-
-function setup_help_button(button) {
-  "use strict";
-  var topic;
-  if (button.hasAttribute("data-topic")) {
-    topic = button.getAttribute("data-topic");
-    if (document.getElementById(topic) != null) {
-      button.tabIndex = "0"; // make keyboard selectable
-      button.addEventListener("click", function() {
-        help_popup(button, topic);
-      }, false);
-      button.addEventListener("keydown", function(e) {
-        // toggle only on Enter or Spacebar, let other keys do their thing
-        if (e.keyCode !== 13 && e.keyCode !== 32) return;
-        // stop a submit or something like that
-        e.preventDefault();
-        help_popup(button, topic);
-      }, false);
-    } else {
-      button.style.visibility = "hidden";
-    }
-  }
-  button.className += " active";
-}
-
-/*
- * help_button
- *
- * Makes a help button for the passed topic.
- */
-function help_button(topic) {
-  var btn = document.createElement("div");
-  btn.className = "help";
-  btn.setAttribute("data-topic", topic);
-  setup_help_button(btn);
-  return btn;
-}
-
-/*
- * prepare_download
- *
- * Sets the attributes of a link to setup a file download using the given content.
- * If no link is provided then create one and click it.
- */
-function prepare_download(content, mimetype, filename, link) {
-  "use strict";
-  // if no link is provided then create one and click it
-  var click_link = false;
-  if (!link) {
-    link = document.createElement("a");
-    click_link = true;
-  }
-  try {
-    // Use a BLOB to convert the text into a data URL.
-    // We could do this manually with a base 64 conversion.
-    // This will only be supported on modern browsers,
-    // hence the try block.
-    var blob = new Blob([content], {type: mimetype});
-    var reader = new FileReader();
-    reader.onloadend = function() {
-      // If we're lucky the browser will also support the download
-      // attribute which will let us suggest a file name to save the link.
-      // Otherwise it is likely that the filename will be unintelligible. 
-      link.setAttribute("download", filename);
-      link.href = reader.result;
-      if (click_link) {
-        // must add the link to click it
-        document.body.appendChild(link);
-        link.click();
-        document.body.removeChild(link);
-      }
-    }
-    reader.readAsDataURL(blob);
-  } catch (error) {
-    if (console && console.log) console.log(error);
-    // probably an old browser
-    link.href = "";
-    link.visible = false;
-  }
-}
-
-/*
- * add_cell
- *
- * Add a cell to the table row.
- */
-function add_cell(row, node, cls, click_action) {
-  var cell = row.insertCell(row.cells.length);
-  if (node) cell.appendChild(node);
-  if (cls && cls !== "") cell.className = cls;
-  if (click_action) cell.addEventListener("click", click_action, false);
-}
-
-/*
- * add_header_cell
- *
- * Add a header cell to the table row.
- */
-function add_header_cell(row, node, help_topic, cls, colspan) {
-  var th = document.createElement("th");
-  if (node) th.appendChild(node);
-  if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic));
-  if (cls && cls !== "") th.className = cls;
-  if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan;
-  row.appendChild(th);
-}
-
-/*
- * add_text_cell
- *
- * Add a text cell to the table row.
- */
-function add_text_cell(row, text, cls, action) {
-  var node = null;
-  if (typeof(text) != 'undefined') node = document.createTextNode(text);
-  add_cell(row, node, cls, action);
-}
-
-/*
- * add_text_header_cell
- *
- * Add a text header cell to the table row.
- */
-function add_text_header_cell(row, text, help_topic, cls, action, colspan) {
-  var node = null;
-  if (typeof(text) != 'undefined') {
-    var nbsp = (help_topic ? "\u00A0" : "");
-    var str = "" + text;
-    var parts = str.split(/\n/);
-    if (parts.length === 1) {
-      if (action) {
-        node = document.createElement("span");
-        node.appendChild(document.createTextNode(str + nbsp));
-      } else {
-        node = document.createTextNode(str + nbsp);
-      }
-    } else {
-      node = document.createElement("span");
-      for (var i = 0; i < parts.length; i++) {
-        if (i !== 0) {
-          node.appendChild(document.createElement("br"));
-        }
-        node.appendChild(document.createTextNode(parts[i]));
-      }
-    }
-    if (action) {
-      node.addEventListener("click", action, false);
-      node.style.cursor = "pointer";
-    }
-  }
-  add_header_cell(row, node, help_topic, cls, colspan);
-}
-
-function setup_help() {
-  "use strict";
-  var help_buttons, i;
-  help_buttons = document.querySelectorAll(".help:not(.active)");
-  for (i = 0; i < help_buttons.length; i++) {
-    setup_help_button(help_buttons[i]);
-  }
-}
-
-function setup_scrollpad() {
-  "use strict";
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) {
-    window.addEventListener("resize", update_scroll_pad, false);
-    update_scroll_pad();
-  }
-}
-
-// anon function to avoid polluting global scope
-(function() {
-  "use strict";
-  window.addEventListener("load", function load(evt) {
-    window.removeEventListener("load", load, false);
-    setup_help();
-    setup_scrollpad();
-  }, false);
-})();
-
-/*
- *  make_link
- *
- *  Creates a text node and if a URL is specified it surrounds it with a link.
- *  If the URL doesn't begin with "http://" it automatically adds it, as
- *  relative links don't make much sense in this context.
- */
-function make_link(text, url) {
-  var textNode = null;
-  var link = null;
-  if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text);
-  if (typeof url === "string") {
-    if (url.indexOf("//") == -1) {
-      url = "http://" + url;
-    }
-    link = document.createElement('a');
-    link.href = url;
-    if (textNode) link.appendChild(textNode);
-    return link;
-  }
-  return textNode;
-}
-</script>
-    <script>
-function motif_logo_template(inputs) {
-  function _input(name) {
-    if (typeof inputs[name] === "undefined") {
-      throw new Error("Missing template variable: " + name);
-    }
-    return inputs[name];
-  }
-  return (
-"%!PS-Adobe-3.0 EPSF-3.0\n" +
-"%%Title: Sequence Logo : " + _input("TITLE") + "\n" +
-"%%Creator: " + _input("CREATOR") + "\n" +
-"%%CreationDate: " + _input("CREATIONDATE") + "\n" +
-"%%BoundingBox:   0  0  " + _input("BOUNDINGWIDTH") + " " + _input("BOUNDINGHEIGHT") + " \n" +
-"%%Pages: 0\n" +
-"%%DocumentFonts: \n" +
-"%%EndComments\n" +
-"\n" +
-"% ---- CONSTANTS ----\n" +
-"\/cmfactor 72 2.54 div def % defines points -> cm conversion\n" +
-"\/cm {cmfactor mul} bind def % defines centimeters\n" +
-"\n" +
-"% ---- VARIABLES ----\n" +
-"\n" +
-"% NA = Nucleic Acid, AA = Amino Acid\n" +
-"\/logoType (" + _input("LOGOTYPE") + ") def \n" +
-"\n" +
-"\/logoTitle (" + _input("TITLE") + ") def\n" +
-"\n" +
-"% Dimensions in cm\n" +
-"\/logoWidth " + _input("LOGOWIDTH") + " cm def\n" +
-"\/logoHeight " + _input("LOGOLINEHEIGHT") + " cm def\n" +
-"\/totalHeight " + _input("LOGOHEIGHT") + " cm def\n" +
-"\n" +
-"\/yaxis " + _input("YAXIS") + " def\n" +
-"\/yaxisLabel (" + _input("YAXISLABEL") + ") def\n" +
-"\/yaxisBits  " + _input("BARBITS") + " def % bits\n" +
-"\/yaxisTicBits " + _input("TICBITS") + " def\n" +
-"\n" +
-"\/xaxis " + _input("NUMBERING") + " def\n" +
-"\/xaxisLabel (" + _input("XAXISLABEL") + ") def\n" +
-"\/showEnds (" + _input("SHOWENDS") + ") def \n" +
-"\n" +
-"\/showFineprint true def\n" +
-"\/fineprint (" + _input("FINEPRINT") + ") def\n" +
-"\n" +
-"\/charsPerLine " + _input("CHARSPERLINE") + " def\n" +
-"\n" +
-"\/showingBox " + _input("SHOWINGBOX") + " def    \n" +
-"\/shrinking false def   % true falses\n" +
-"\/shrink  1.0 def\n" +
-"\/outline " + _input("OUTLINE") + " def\n" +
-"\n" +
-"\/IbeamFraction  " + _input("ERRORBARFRACTION") + " def\n" +
-"\/IbeamGray      0.50 def\n" +
-"\/IbeamLineWidth 0.5 def\n" +
-"\n" +
-"\/fontsize       " + _input("FONTSIZE") + " def\n" +
-"\/titleFontsize  " + _input("TITLEFONTSIZE") + " def\n" +
-"\/smallFontsize  " + _input("SMALLFONTSIZE") + " def\n" +
-"\n" +
-"\/topMargin      " + _input("TOPMARGIN") + " cm def\n" +
-"\/bottomMargin   " + _input("BOTTOMMARGIN") + " cm def\n" +
-"\n" +
-"\/defaultColor [0 0 0] def \n" +
-"\n" +
-_input("COLORDICT") + "\n" +
-"\n" +
-"\/colorDict fullColourDict def\n" +
-"\n" +
-"% ---- DERIVED PARAMETERS ----\n" +
-"\n" +
-"\/leftMargin\n" +
-"  fontsize 3.5 mul\n" +
-"\n" +
-"def \n" +
-"\n" +
-"\/rightMargin \n" +
-"  %Add extra room if showing ends\n" +
-"  showEnds (false) eq { fontsize}{fontsize 1.5 mul} ifelse\n" +
-"def\n" +
-"\n" +
-"\/yaxisHeight \n" +
-"  logoHeight \n" +
-"  bottomMargin sub  \n" +
-"  topMargin sub\n" +
-"def\n" +
-"\n" +
-"\/ticWidth fontsize 2 div def\n" +
-"\n" +
-"\/pointsPerBit yaxisHeight yaxisBits div  def\n" +
-"\n" +
-"\/stackMargin 1 def\n" +
-"\n" +
-"% Do not add space aroung characters if characters are boxed\n" +
-"\/charRightMargin \n" +
-"  showingBox { 0.0 } {stackMargin} ifelse\n" +
-"def\n" +
-"\n" +
-"\/charTopMargin \n" +
-"  showingBox { 0.0 } {stackMargin} ifelse\n" +
-"def\n" +
-"\n" +
-"\/charWidth\n" +
-"  logoWidth\n" +
-"  leftMargin sub\n" +
-"  rightMargin sub\n" +
-"  charsPerLine div\n" +
-"  charRightMargin sub\n" +
-"def\n" +
-"\n" +
-"\/charWidth4 charWidth 4 div def\n" +
-"\/charWidth2 charWidth 2 div def\n" +
-"\n" +
-"\/stackWidth \n" +
-"  charWidth charRightMargin add\n" +
-"def\n" +
-" \n" +
-"\/numberFontsize \n" +
-"  fontsize charWidth lt {fontsize}{charWidth} ifelse\n" +
-"def\n" +
-"\n" +
-"% movements to place 5'\/N and 3'\/C symbols\n" +
-"\/leftEndDeltaX  fontsize neg         def\n" +
-"\/leftEndDeltaY  fontsize 1.5 mul neg def\n" +
-"\/rightEndDeltaX fontsize 0.25 mul     def\n" +
-"\/rightEndDeltaY leftEndDeltaY        def\n" +
-"\n" +
-"% Outline width is proporional to charWidth, \n" +
-"% but no less that 1 point\n" +
-"\/outlinewidth \n" +
-"  charWidth 32 div dup 1 gt  {}{pop 1} ifelse\n" +
-"def\n" +
-"\n" +
-"\n" +
-"% ---- PROCEDURES ----\n" +
-"\n" +
-"\/StartLogo { \n" +
-"  % Save state\n" +
-"  save \n" +
-"  gsave \n" +
-"\n" +
-"  % Print Logo Title, top center \n" +
-"  gsave \n" +
-"    SetStringFont\n" +
-"\n" +
-"    logoWidth 2 div\n" +
-"    logoTitle\n" +
-"    stringwidth pop 2 div sub\n" +
-"    totalHeight\n" +
-"    titleFontsize sub\n" +
-"    moveto\n" +
-"\n" +
-"    logoTitle\n" +
-"    show\n" +
-"  grestore\n" +
-"\n" +
-"  % Print X-axis label, bottom center\n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"\n" +
-"    logoWidth 2 div\n" +
-"    xaxisLabel\n" +
-"    stringwidth pop 2 div sub\n" +
-"    0\n" +
-"    titleFontsize 3 div\n" +
-"    add\n" +
-"    moveto\n" +
-"\n" +
-"    xaxisLabel\n" +
-"    show\n" +
-"  grestore\n" +
-"\n" +
-"  % Show Fine Print\n" +
-"  showFineprint {\n" +
-"    gsave\n" +
-"      SetSmallFont\n" +
-"      logoWidth\n" +
-"        fineprint stringwidth pop sub\n" +
-"        smallFontsize sub\n" +
-"          smallFontsize 3 div\n" +
-"      moveto\n" +
-"    \n" +
-"      fineprint show\n" +
-"    grestore\n" +
-"  } if\n" +
-"\n" +
-"  % Move to lower left corner of last line, first stack\n" +
-"  leftMargin bottomMargin translate\n" +
-"\n" +
-"  % Move above first line ready for StartLine \n" +
-"  0 totalHeight translate\n" +
-"\n" +
-"  SetLogoFont\n" +
-"} bind def\n" +
-"\n" +
-"\/EndLogo { \n" +
-"  grestore \n" +
-"  showpage \n" +
-"  restore \n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/StartLine { \n" +
-"  % move down to the bottom of the line:\n" +
-"  0 logoHeight neg translate\n" +
-"  \n" +
-"  gsave \n" +
-"    yaxis { MakeYaxis } if\n" +
-"    xaxis { showEnds (true) eq {ShowLeftEnd} if } if\n" +
-"} bind def\n" +
-"\n" +
-"\/EndLine{ \n" +
-"    xaxis { showEnds (true) eq {ShowRightEnd} if } if\n" +
-"  grestore \n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/MakeYaxis {\n" +
-"  gsave    \n" +
-"    stackMargin neg 0 translate\n" +
-"    ShowYaxisBar\n" +
-"    ShowYaxisLabel\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowYaxisBar { \n" +
-"  gsave  \n" +
-"    SetStringFont\n" +
-"\n" +
-"    \/str 10 string def % string to hold number  \n" +
-"    \/smallgap stackMargin 2 div def\n" +
-"\n" +
-"    % Draw first tic and bar\n" +
-"    gsave    \n" +
-"      ticWidth neg 0 moveto \n" +
-"      ticWidth 0 rlineto \n" +
-"      0 yaxisHeight rlineto\n" +
-"      stroke\n" +
-"    grestore\n" +
-"\n" +
-"   \n" +
-"    % Draw the tics\n" +
-"    % initial increment limit proc for\n" +
-"    0 yaxisTicBits yaxisBits abs %cvi\n" +
-"    {\/loopnumber exch def\n" +
-"\n" +
-"      % convert the number coming from the loop to a string\n" +
-"      % and find its width\n" +
-"      loopnumber 10 str cvrs\n" +
-"      \/stringnumber exch def % string representing the number\n" +
-"\n" +
-"      stringnumber stringwidth pop\n" +
-"      \/numberwidth exch def % width of number to show\n" +
-"\n" +
-"      \/halfnumberheight\n" +
-"         stringnumber CharBoxHeight 2 div\n" +
-"      def\n" +
-"\n" +
-"      numberwidth % move back width of number\n" +
-"      neg loopnumber pointsPerBit mul % shift on y axis\n" +
-"      halfnumberheight sub % down half the digit\n" +
-"\n" +
-"      moveto % move back the width of the string\n" +
-"\n" +
-"      ticWidth neg smallgap sub % Move back a bit more  \n" +
-"      0 rmoveto % move back the width of the tic  \n" +
-"\n" +
-"      stringnumber show\n" +
-"      smallgap 0 rmoveto % Make a small gap  \n" +
-"\n" +
-"      % now show the tic mark\n" +
-"      0 halfnumberheight rmoveto % shift up again\n" +
-"      ticWidth 0 rlineto\n" +
-"      stroke\n" +
-"    } for\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\/ShowYaxisLabel {\n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"\n" +
-"    % How far we move left depends on the size of\n" +
-"    % the tic labels.\n" +
-"    \/str 10 string def % string to hold number  \n" +
-"    yaxisBits yaxisTicBits div cvi yaxisTicBits mul \n" +
-"    str cvs stringwidth pop\n" +
-"    ticWidth 1.5 mul  add neg  \n" +
-"\n" +
-"\n" +
-"    yaxisHeight\n" +
-"    yaxisLabel stringwidth pop\n" +
-"    sub 2 div\n" +
-"\n" +
-"    translate\n" +
-"    90 rotate\n" +
-"    0 0 moveto\n" +
-"    yaxisLabel show\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/StartStack {  % <stackNumber> startstack\n" +
-"  xaxis {MakeNumber}{pop} ifelse\n" +
-"  gsave\n" +
-"} bind def\n" +
-"\n" +
-"\/EndStack {\n" +
-"  grestore\n" +
-"  stackWidth 0 translate\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"% Draw a character whose height is proportional to symbol bits\n" +
-"\/MakeSymbol{ % charbits character MakeSymbol\n" +
-"  gsave\n" +
-"    \/char exch def\n" +
-"    \/bits exch def\n" +
-"\n" +
-"    \/bitsHeight \n" +
-"       bits pointsPerBit mul \n" +
-"    def\n" +
-"\n" +
-"    \/charHeight \n" +
-"       bitsHeight charTopMargin sub\n" +
-"       dup \n" +
-"       0.0 gt {}{pop 0.0} ifelse % if neg replace with zero \n" +
-"    def \n" +
-" \n" +
-"    charHeight 0.0 gt {\n" +
-"      char SetColor\n" +
-"      charWidth charHeight char ShowChar\n" +
-"\n" +
-"      showingBox { % Unfilled box\n" +
-"        0 0 charWidth charHeight false ShowBox\n" +
-"      } if\n" +
-"\n" +
-"\n" +
-"    } if\n" +
-"\n" +
-"  grestore\n" +
-"\n" +
-"  0 bitsHeight translate \n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowChar { % <width> <height> <char> ShowChar\n" +
-"  gsave\n" +
-"    \/tc exch def    % The character\n" +
-"    \/ysize exch def % the y size of the character\n" +
-"    \/xsize exch def % the x size of the character\n" +
-"\n" +
-"    \/xmulfactor 1 def \n" +
-"    \/ymulfactor 1 def\n" +
-"    \/limmulfactor 0.01 def\n" +
-"    \/drawable true def\n" +
-"\n" +
-"  \n" +
-"    % if ysize is negative, make everything upside down!\n" +
-"    ysize 0 lt {\n" +
-"      % put ysize normal in this orientation\n" +
-"      \/ysize ysize abs def\n" +
-"      xsize ysize translate\n" +
-"      180 rotate\n" +
-"    } if\n" +
-"\n" +
-"    shrinking {\n" +
-"      xsize 1 shrink sub 2 div mul\n" +
-"        ysize 1 shrink sub 2 div mul translate \n" +
-"\n" +
-"      shrink shrink scale\n" +
-"    } if\n" +
-"\n" +
-"    % Calculate the font scaling factors\n" +
-"    % Loop twice to catch small correction due to first scaling\n" +
-"    2 {\n" +
-"      gsave\n" +
-"        xmulfactor ymulfactor scale\n" +
-"      \n" +
-"        ysize % desired size of character in points\n" +
-"        tc CharBoxHeight \n" +
-"        dup 0.0 ne {\n" +
-"          div % factor by which to scale up the character\n" +
-"          \/ymulfactor exch def\n" +
-"        } % end if\n" +
-"        {pop pop}\n" +
-"        ifelse\n" +
-"\n" +
-"        xsize % desired size of character in points\n" +
-"        tc CharBoxWidth  \n" +
-"        dup 0.0 ne {\n" +
-"          div % factor by which to scale up the character\n" +
-"          \/xmulfactor exch def\n" +
-"        } % end if\n" +
-"        {pop pop}\n" +
-"        ifelse\n" +
-"      grestore\n" +
-"      % if the multiplication factors get too small we need to avoid a crash\n" +
-"      xmulfactor limmulfactor lt {\n" +
-"        \/xmulfactor 1 def\n" +
-"        \/drawable false def\n" +
-"      } if\n" +
-"      ymulfactor limmulfactor lt {\n" +
-"        \/ymulfactor 1 def\n" +
-"        \/drawable false def\n" +
-"      } if\n" +
-"    } repeat\n" +
-"\n" +
-"    % Adjust horizontal position if the symbol is an I\n" +
-"    tc (I) eq {\n" +
-"      charWidth 2 div % half of requested character width\n" +
-"      tc CharBoxWidth 2 div % half of the actual character\n" +
-"      sub 0 translate\n" +
-"      % Avoid x scaling for I \n" +
-"      \/xmulfactor 1 def \n" +
-"    } if\n" +
-"\n" +
-"\n" +
-"    % ---- Finally, draw the character\n" +
-"    drawable { \n" +
-"      newpath\n" +
-"      xmulfactor ymulfactor scale\n" +
-"\n" +
-"      % Move lower left corner of character to start point\n" +
-"      tc CharBox pop pop % llx lly : Lower left corner\n" +
-"      exch neg exch neg\n" +
-"      moveto\n" +
-"\n" +
-"      outline {  % outline characters:\n" +
-"        outlinewidth setlinewidth\n" +
-"        tc true charpath\n" +
-"        gsave 1 setgray fill grestore\n" +
-"        clip stroke\n" +
-"      } { % regular characters\n" +
-"        tc show\n" +
-"      } ifelse\n" +
-"    } if\n" +
-"\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowBox { % x1 y1 x2 y2 filled ShowBox\n" +
-"  gsave\n" +
-"    \/filled exch def \n" +
-"    \/y2 exch def\n" +
-"    \/x2 exch def\n" +
-"    \/y1 exch def\n" +
-"    \/x1 exch def\n" +
-"    newpath\n" +
-"    x1 y1 moveto\n" +
-"    x2 y1 lineto\n" +
-"    x2 y2 lineto\n" +
-"    x1 y2 lineto\n" +
-"    closepath\n" +
-"\n" +
-"    clip\n" +
-"    \n" +
-"    filled {\n" +
-"      fill\n" +
-"    }{ \n" +
-"      0 setgray stroke   \n" +
-"    } ifelse\n" +
-"\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/MakeNumber { % number MakeNumber\n" +
-"  gsave\n" +
-"    SetNumberFont\n" +
-"    stackWidth 0 translate\n" +
-"    90 rotate % rotate so the number fits\n" +
-"    dup stringwidth pop % find the length of the number\n" +
-"    neg % prepare for move\n" +
-"    stackMargin sub % Move back a bit\n" +
-"    charWidth (0) CharBoxHeight % height of numbers\n" +
-"    sub 2 div %\n" +
-"    moveto % move back to provide space\n" +
-"    show\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/Ibeam{ % heightInBits Ibeam\n" +
-"  gsave\n" +
-"    % Make an Ibeam of twice the given height in bits\n" +
-"    \/height exch  pointsPerBit mul def \n" +
-"    \/heightDRAW height IbeamFraction mul def\n" +
-"\n" +
-"    IbeamLineWidth setlinewidth\n" +
-"    IbeamGray setgray \n" +
-"\n" +
-"    charWidth2 height neg translate\n" +
-"    ShowIbar\n" +
-"    newpath\n" +
-"      0 0 moveto\n" +
-"      0 heightDRAW rlineto\n" +
-"    stroke\n" +
-"    newpath\n" +
-"      0 height moveto\n" +
-"      0 height rmoveto\n" +
-"      currentpoint translate\n" +
-"    ShowIbar\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    0 heightDRAW neg rlineto\n" +
-"    currentpoint translate\n" +
-"    stroke\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowIbar { % make a horizontal bar\n" +
-"  gsave\n" +
-"    newpath\n" +
-"      charWidth4 neg 0 moveto\n" +
-"      charWidth4 0 lineto\n" +
-"    stroke\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowLeftEnd {\n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"    leftEndDeltaX leftEndDeltaY moveto\n" +
-"    logoType (NA) eq {(5) show ShowPrime} if\n" +
-"    logoType (AA) eq {(N) show} if\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowRightEnd { \n" +
-"  gsave\n" +
-"    SetStringFont\n" +
-"    rightEndDeltaX rightEndDeltaY moveto\n" +
-"    logoType (NA) eq {(3) show ShowPrime} if\n" +
-"    logoType (AA) eq {(C) show} if\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"\/ShowPrime {\n" +
-"  gsave\n" +
-"    SetPrimeFont\n" +
-"    (\\242) show \n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-" \n" +
-"\/SetColor{ % <char> SetColor\n" +
-"  dup colorDict exch known {\n" +
-"    colorDict exch get aload pop setrgbcolor\n" +
-"  } {\n" +
-"    pop\n" +
-"    defaultColor aload pop setrgbcolor\n" +
-"  } ifelse \n" +
-"} bind def\n" +
-"\n" +
-"% define fonts\n" +
-"\/SetTitleFont {\/Times-Bold findfont titleFontsize scalefont setfont} bind def\n" +
-"\/SetLogoFont  {\/Helvetica-Bold findfont charWidth  scalefont setfont} bind def\n" +
-"\/SetStringFont{\/Helvetica-Bold findfont fontsize scalefont setfont} bind def\n" +
-"\/SetPrimeFont {\/Symbol findfont fontsize scalefont setfont} bind def\n" +
-"\/SetSmallFont {\/Helvetica findfont smallFontsize scalefont setfont} bind def\n" +
-"\n" +
-"\/SetNumberFont {\n" +
-"    \/Helvetica-Bold findfont \n" +
-"    numberFontsize\n" +
-"    scalefont\n" +
-"    setfont\n" +
-"} bind def\n" +
-"\n" +
-"%Take a single character and return the bounding box\n" +
-"\/CharBox { % <char> CharBox <lx> <ly> <ux> <uy>\n" +
-"  gsave\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    % take the character off the stack and use it here:\n" +
-"    true charpath \n" +
-"    flattenpath \n" +
-"    pathbbox % compute bounding box of 1 pt. char => lx ly ux uy\n" +
-"    % the path is here, but toss it away ...\n" +
-"  grestore\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"% The height of a characters bounding box\n" +
-"\/CharBoxHeight { % <char> CharBoxHeight <num>\n" +
-"  CharBox\n" +
-"  exch pop sub neg exch pop\n" +
-"} bind def\n" +
-"\n" +
-"\n" +
-"% The width of a characters bounding box\n" +
-"\/CharBoxWidth { % <char> CharBoxHeight <num>\n" +
-"  CharBox\n" +
-"  pop exch pop sub neg \n" +
-"} bind def\n" +
-"\n" +
-"% Set the colour scheme to be faded to indicate trimming\n" +
-"\/MuteColour {\n" +
-"  \/colorDict mutedColourDict def\n" +
-"} def\n" +
-"\n" +
-"% Restore the colour scheme to the normal colours\n" +
-"\/RestoreColour {\n" +
-"  \/colorDict fullColourDict def\n" +
-"} def\n" +
-"\n" +
-"% Draw the background for a trimmed section\n" +
-"% takes the number of columns as a parameter\n" +
-"\/DrawTrimBg { % <num> DrawTrimBox\n" +
-"  \/col exch def\n" +
-"  \n" +
-"  \/boxwidth \n" +
-"    col stackWidth mul \n" +
-"  def\n" +
-" \n" +
-"  gsave\n" +
-"    0.97 setgray\n" +
-"\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    boxwidth 0 rlineto\n" +
-"    0 yaxisHeight rlineto\n" +
-"    0 yaxisHeight lineto\n" +
-"    closepath\n" +
-"    \n" +
-"    fill\n" +
-"  grestore\n" +
-"} def\n" +
-"\n" +
-"\/DrawTrimEdge {\n" +
-"  gsave\n" +
-"    0.2 setgray\n" +
-"    [2] 0 setdash\n" +
-"\n" +
-"    newpath\n" +
-"    0 0 moveto\n" +
-"    0 yaxisHeight lineto\n" +
-"    \n" +
-"    stroke\n" +
-"\n" +
-"} def\n" +
-"\n" +
-"\n" +
-"% Deprecated names\n" +
-"\/startstack {StartStack} bind  def\n" +
-"\/endstack {EndStack}     bind def\n" +
-"\/makenumber {MakeNumber} bind def\n" +
-"\/numchar { MakeSymbol }  bind def\n" +
-"\n" +
-"%%EndProlog\n" +
-"\n" +
-"%%Page: 1 1\n" +
-"StartLogo\n" +
-"\n" +
-_input("DATA") + "\n" +
-"\n" +
-"EndLogo\n" +
-"\n" +
-"%%EOF\n"
-  );
-}</script>
-    <script>
-//======================================================================
-// start Alphabet object
-//======================================================================
-var Alphabet = function(alphabet, background) {
-  "use strict";
-  var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background;
-  generate_background = (background == null);
-  if (generate_background) {
-    background = [];
-    for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore;
-  } else if (alphabet.ncore != background.length) {
-    throw new Error("The background length does not match the alphabet length.");
-  }
-  this.name = alphabet.name;
-  this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null);
-  this.ncore = alphabet.ncore;
-  this.symbols = alphabet.symbols;
-  this.background = background;
-  this.genbg = generate_background;
-  this.encode = {};
-  this.encode2core = {};
-  this.complement = {};
-  // check if all symbols are same case
-  var seen_uc = false;
-  var seen_lc = false;
-  var check_case = function (syms) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        if (sym >= 'a' && sym <= 'z') seen_lc = true;
-        else if (sym >= 'A' && sym <= 'Z') seen_uc = true;
-      }
-    }
-  };
-  for (i = 0; i < this.symbols.length; i++) {
-    check_case(this.symbols[i].symbol);
-    check_case(this.symbols[i].aliases);
-  }
-  // now map symbols to indexes
-  var update_array = function(array, syms, index) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        array[sym] = index;
-        // when only a single case is used, then encode as case insensitive
-        if (seen_uc != seen_lc) {
-          if (sym >= 'a' && sym <= 'z') {
-            array[sym.toUpperCase()] = index;
-          } else if (sym >= 'A' && sym <= 'Z') {
-            array[sym.toLowerCase()] = index;
-          }
-        }
-      }
-    }
-  }
-  // map core symbols to index
-  for (i = 0; i < this.ncore; i++) {
-    update_array(this.encode2core, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode2core, this.symbols[i].aliases, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-  }
-  // map ambigous symbols to index
-  ambigs = {};
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-    ambigs[this.symbols[i].equals] = i;
-  }
-  // determine complements
-  for (i = 0; i < this.ncore; i++) {
-    complement = this.symbols[i].complement;
-    if (typeof complement === "string") {
-      this.complement[i] = this.encode2core[complement];
-    }
-  }
-  next_symbol:
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    complement = "";
-    for (j = 0; j < this.symbols[i].equals.length; j++) {
-      comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]];
-      if (typeof comp_e_sym !== "number") continue next_symbol;
-      complement += this.symbols[comp_e_sym].symbol;
-    }
-    complement = complement.split("").sort().join("");
-    if (typeof ambigs[complement] === "number") {
-      this.complement[i] = ambigs[complement];
-    }
-  }
-  // determine case insensitivity
-  this.case_insensitive = true;
-  if (seen_uc == seen_lc) {
-    // when there is a mixture of cases it probably won't
-    // be case insensitive but we still need to check
-    loop:
-    for (i = 0; i < this.symbols.length; i++) {
-      sym = this.symbols[i].symbol;
-      if (sym >= 'A' && sym <= 'Z') {
-        if (this.encode[sym.toLowerCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      } else if (sym >= 'a' && sym <= 'z') {
-        if (this.encode[sym.toUpperCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      }
-      aliases = this.symbols[i].aliases;
-      if (aliases != null) {
-        for (j = 0; j < aliases.length; j++) {
-          sym = aliases.charAt(j);
-          if (sym >= 'A' && sym <= 'Z') {
-            if (this.encode[sym.toLowerCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          } else if (sym >= 'a' && sym <= 'z') {
-            if (this.encode[sym.toUpperCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          }
-        }
-      }
-    }
-  }
-  // normalise aliases to remove the prime symbol and eliminate
-  // the alternate cases when the alphabet is case insensitive
-  var seen, out;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym = this.symbols[i].symbol;
-    aliases = this.symbols[i].aliases;
-    if (typeof aliases != "string") aliases = "";
-    seen = {};
-    out = [];
-    if (this.case_insensitive) {
-      sym = sym.toUpperCase();
-      aliases = aliases.toUpperCase();
-    }
-    seen[sym] = true;
-    for (j = 0; j < aliases.length; j++) {
-      if (!seen[aliases.charAt(j)]) {
-        seen[aliases.charAt(j)] = true;
-        out.push(aliases.charAt(j));
-      }
-    }
-    this.symbols[i].aliases = out.sort().join("");
-  }
-};
-// return the name of the alphabet
-Alphabet.prototype.get_alphabet_name = function() {
-  return this.name;
-};
-// return if the alphabet can be complemented
-Alphabet.prototype.has_complement = function() {
-  return (typeof this.symbols[0].complement === "string");
-};
-// return true if an uppercase letter has the same meaning as the lowercase form
-Alphabet.prototype.is_case_insensitive = function() {
-  return this.case_insensitive;
-};
-// return the information content of an alphabet letter
-Alphabet.prototype.get_ic = function() {
-  return Math.log(this.ncore) / Math.LN2;
-};
-// return the count of the core alphabet symbols
-Alphabet.prototype.get_size_core = function() {
-  return this.ncore;
-};
-// return the count of all alphabet symbols
-Alphabet.prototype.get_size_full = function() {
-  return this.symbols.length;
-};
-// return the symbol for the given alphabet index
-Alphabet.prototype.get_symbol = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  return this.symbols[alph_index].symbol;
-};
-// return the aliases for the given alphabet index
-Alphabet.prototype.get_aliases = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  var sym_obj = this.symbols[alph_index];
-  return (sym_obj.aliases != null ? sym_obj.aliases : "");
-};
-// return the name for the given alphabet index
-Alphabet.prototype.get_name = function(alph_index) {
-  "use strict";
-  var sym;
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  sym = this.symbols[alph_index];
-  return (typeof sym.name === "string" ? sym.name : sym.symbol);
-};
-// return the alphabet it is like or null
-Alphabet.prototype.get_like = function() {
-  "use strict";
-  return this.like;
-};
-// return the index of the complement for the given alphabet index
-Alphabet.prototype.get_complement = function(alph_index) {
-  var comp_e_sym = this.complement[alph_index];
-  if (typeof comp_e_sym === "number") {
-    return comp_e_sym;
-  } else {
-    return -1;
-  }
-};
-// return a string containing the core symbols
-Alphabet.prototype.get_symbols = function() {
-  "use strict";
-  var i, core_symbols;
-  core_symbols = "";
-  for (i = 0; i < this.ncore; i++) {
-    core_symbols += this.symbols[i].symbol;
-  }
-  return core_symbols;
-};
-// return if the background was not a uniform generated background
-Alphabet.prototype.has_bg = function() {
-  "use strict";
-  return !this.genbg;
-};
-// get the background frequency for the index
-Alphabet.prototype.get_bg_freq = function(alph_index) {
-  "use strict";
-  var freq, i, symbols;
-  if (alph_index >= 0) {
-    if (alph_index < this.ncore) {
-      return this.background[alph_index];
-    } else if (alph_index < this.symbols.length) {
-      freq = 0;
-      symbols = this.symbols[alph_index].equals;
-      for (i = 0; i < symbols.length; i++) {
-        freq += this.background[this.encode2core[symbols.charAt(i)]];
-      }
-      return freq;
-    } 
-  }
-  throw new Error("The alphabet index is out of range.");
-};
-// get the colour of the index
-Alphabet.prototype.get_colour = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return "black";
-  }
-  return "#" + this.symbols[alph_index].colour;
-};
-// get the rgb componets of the colour at the index
-Alphabet.prototype.get_rgb = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return {"red": 0, "green": 0, "blue": 0};
-  }
-  var colour = this.symbols[alph_index].colour;
-  var red = parseInt(colour.substr(0, 2), 16) / 255;
-  var green = parseInt(colour.substr(2, 2), 16) / 255;
-  var blue = parseInt(colour.substr(4, 2), 16) / 255;
-  return {"red": red, "green": green, "blue": blue};
-};
-// convert a symbol into the index
-Alphabet.prototype.get_index = function(letter) {
-  "use strict";
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    return -1;
-  }
-  return alph_index;
-};
-// convert a symbol into the list of core indexes that it equals
-Alphabet.prototype.get_indexes = function(letter) {
-  "use strict";
-  var alph_index, comprise_str, i, comprise_list;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    throw new Error("Unknown letter");
-  }
-  comprise_str = this.symbols[alph_index].equals;
-  comprise_list = [];
-  if (typeof comprise_str == "string") {
-    for (i = 0; i < comprise_str.length; i++) {
-      comprise_list.push(this.encode2core[comprise_str.charAt(i)]);
-    }
-  } else {
-    comprise_list.push(alph_index);
-  }
-  return comprise_list;
-};
-// check if a symbol is the primary way of representing the symbol in the alphabet
-Alphabet.prototype.is_prime_symbol = function(letter) {
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (alph_index == null) return false;
-  if (this.is_case_insensitive()) {
-    return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase());
-  } else {
-    return (this.symbols[alph_index].symbol == letter);
-  }
-};
-// compare 2 alphabets
-Alphabet.prototype.equals = function(other) {
-  "use strict";
-  var i, sym1, sym2;
-  // first check that it's actually an alphabet object
-  if (!(typeof other === "object" && other != null && other instanceof Alphabet)) {
-    return false;
-  }
-  // second shortcircuit if it's the same object
-  if (this === other) return true;
-  // compare
-  if (this.name !== other.name) return false;
-  if (this.ncore !== other.ncore) return false;
-  if (this.symbols.length !== other.symbols.length) return false;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym1 = this.symbols[i];
-    sym2 = other.symbols[i];
-    if (sym1.symbol !== sym2.symbol) return false;
-    if (sym1.aliases !== sym2.aliases) return false;
-    if (sym1.name !== sym2.name) return false;
-    if (typeof sym1.colour !== typeof sym2.colour || 
-        (typeof sym1.colour === "string" && typeof sym2.colour === "string" &&
-         parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) {
-      return false;
-    }
-    if (sym1.complement !== sym2.complement) return false;
-    if (sym1.equals !== sym2.equals) return false;
-  }
-  return true;
-};
-Alphabet.prototype.check_core_subset = function(super_alph) {
-  var complement_same = true;
-  var seen_set = {};
-  var sub_i, sub_symbol, super_i, super_symbol;
-  for (sub_i = 0; sub_i < this.ncore; sub_i++) {
-    sub_symbol = this.symbols[sub_i];
-    super_i = super_alph.encode[sub_symbol.symbol]; 
-    if (super_i == null) return 0;
-    super_symbol = super_alph.symbols[super_i];
-    if (seen_set[super_i]) return 0;
-    seen_set[super_i] = true;
-    // check complement
-    if (sub_symbol.complement != null && super_symbol.complement != null) {
-      if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) {
-        complement_same = false;
-      }
-    } else if (sub_symbol.complement != null || super_symbol.complement != null) {
-      complement_same = false;
-    }
-  }
-  return (complement_same ? 1 : -1);
-};
-// convert a sequence to its reverse complement
-Alphabet.prototype.invcomp_seq = function(seq) {
-  "use strict";
-  var syms, i, e_sym, comp_e_sym;
-  if (!this.has_complement()) throw new Error("Alphabet must be complementable");
-  syms = seq.split("");
-  for (i = 0; i < syms.length; i++) {
-    e_sym = this.encode[syms[i]];
-    if (typeof e_sym === "undefined") {
-      e_sym = this.ncore; // wildcard
-    }
-    comp_e_sym = this.complement[e_sym];
-    if (typeof comp_e_sym === "undefined") {
-      comp_e_sym = e_sym; // not complementable
-    }
-    syms[i] = this.symbols[comp_e_sym].symbol;
-  }
-  return syms.reverse().join("");
-};
-// convert the alphabet to the text version
-Alphabet.prototype.as_text = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  function symbol_as_text(sym) {
-    var out;
-    out = sym.symbol;
-    if (typeof sym.name === "string" && sym.name != sym.symbol) {
-      out += " " + name_as_text(sym.name);
-    }
-    if (typeof sym.colour === "string") {
-      out += " " + sym.colour;
-    }
-    return out;
-  }
-  var out, i, j, c, sym;
-  out = "";
-  // output core symbols with 2 way complements
-  for (i = 0; i < this.ncore; i++) {
-    c = this.complement[i];
-    if (typeof c === "number" && i < c && this.complement[c] === i) {
-      out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n";  
-    }
-  }
-  // output core symbols with no complement
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.complement[i] === "undefined") {
-      out += symbol_as_text(this.symbols[i]) + "\n";
-    }
-  }
-  // output ambiguous symbols that have comprising characters
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    if (this.symbols[i].equals.length == 0) break;
-    out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n";
-      }
-    }
-  }
-  // output aliases of core symbols
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n";
-      }
-    }
-  }
-  // output gap symbols
-  i = this.symbols.length - 1;
-  if (this.symbols[i].equals.length == 0) {
-    out += symbol_as_text(this.symbols[i]) + " =\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " =\n";
-      }
-    }
-  }
-  return out;
-};
-// output the alphabet as it appears in minimal MEME format
-Alphabet.prototype.as_meme = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  if (this.equals(AlphStd.DNA)) {
-    return "ALPHABET= ACGT\n";
-  } else if (this.equals(AlphStd.PROTEIN)) {
-    return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n";
-  } else {
-    return "ALPHABET" + 
-      (this.name != null ? " " + name_as_text(this.name) : "") + 
-      (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" +
-      this.as_text() + "END ALPHABET\n";
-  }
-};
-
-// Returns a table showing all the letters in the alphabet
-Alphabet.prototype.as_table = function() {
-  "use strict";
-  var i, j, row, th, td, aliases, equals, sym;
-  var table = document.createElement("table");
-  // create the core symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  if (this.has_complement()) {
-    th.appendChild(document.createTextNode("Complement"));
-  }
-  row.appendChild(th);
-  // list the core symbols
-  for (i = 0; i < this.ncore; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].complement != null) {
-      td.style.color = this.get_colour(this.get_index(this.symbols[i].complement));
-      td.appendChild(document.createTextNode(this.symbols[i].complement));
-    }
-    row.appendChild(td);
-  }
-  // create the ambiguous symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Matches"));
-  row.appendChild(th);
-  // list the ambiguous symbols
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    equals = this.symbols[i].equals.split('');
-    for (j = 0; j < equals.length; j++) {
-      if (j != 0) td.appendChild(document.createTextNode(' '));
-      sym = document.createElement("span");
-      sym.style.color = this.get_colour(this.get_index(equals[j]));
-      sym.appendChild(document.createTextNode(equals[j]));
-      td.appendChild(sym);
-    }
-    row.appendChild(td);
-  }
-  return table;
-};
-
-// returns a dictionary of the colours for EPS
-Alphabet.prototype._as_eps_dict = function() {
-  "use strict";
-  var i, sym, rgb;
-  var out = "/fullColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = this.get_rgb(i);
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  out += "/mutedColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = Alphabet.lighten_colour(this.get_rgb(i));
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  return out;
-};
-
-// return the alphabet name or a list of primary symbols
-Alphabet.prototype.toString = function() {
-  "use strict";
-  if (this.name != null) {
-    return this.name;
-  } else {
-    return this.get_symbols();
-  }
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Helper functions
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-// Convert a colour specified in RGB colourspace values into LAB colourspace
-Alphabet.rgb2lab = function(rgb) {
-  "use strict";
-  var xyzHelper, labHelper;
-  // XYZ helper
-  xyzHelper = function(value) {
-    if (value > 0.0445) {
-      value = (value + 0.055) / 1.055;
-      value = Math.pow(value, 2.4);
-    } else {
-      value /= 12.92;
-    }
-    value *= 100;
-    return value;
-  };
-  // lab helper
-  labHelper = function(value) {
-    if (value > 0.008856) {
-      value = Math.pow(value, 1.0 / 3.0);
-    } else {
-      value = (7.787 * value) + (16.0 / 116.0);
-    }
-    return value;
-  };
-  // convert into XYZ colourspace
-  var c1, c2, c3;
-  if (typeof rgb == "number") {
-    c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0);
-    c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0);
-    c3 = xyzHelper((rgb & 0xFF) / 255.0);
-  } else {
-    c1 = xyzHelper(rgb.red);
-    c2 = xyzHelper(rgb.green);
-    c3 = xyzHelper(rgb.blue);
-  }
-  var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805);
-  var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722);
-  var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505);
-  // convert into Lab colourspace
-  c1 = labHelper(x / 95.047);
-  c2 = labHelper(y / 100.0);
-  c3 = labHelper(z / 108.883);
-  var l = (116.0 * c2) - 16;
-  var a = 500.0 * (c1 - c2);
-  var b = 200.0 * (c2 - c3);
-  return {"l": l, "a": a, "b": b};
-};
-
-// Convert a colour specified in HSV colourspace into RGB colourspace
-Alphabet.hsv2rgb = function(hue, sat, value, output_object) {
-  // achromatic (grey)
-  var r = value;
-  var g = value;
-  var b = value;
-  if (sat != 0) {
-    var h = hue / 60.0;
-    var i = Math.floor(h);
-    var f = h - i;
-    var p = value * (1.0 - sat);
-    var q = value * (1.0 - (sat * f));
-    var t = value * (1.0 - (sat * (1.0 - f)));
-    if (i == 0) {
-      r = value;
-      g = t;
-      b = p;
-    } else if (i == 1) {
-      r = q;
-      g = value;
-      b = p;
-    } else if (i == 2) {
-      r = p;
-      g = value;
-      b = t;
-    } else if (i == 3) {
-      r = p;
-      g = q;
-      b = value;
-    } else if (i == 4) {
-      r = t;
-      g = p;
-      b = value;
-    } else {
-      r = value;
-      g = p;
-      b = q;
-    }
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-// Calculate a distance score between two colours in LAB colourspace
-Alphabet.lab_dist = function(lab1, lab2) {
-  var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a));
-  var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a));
-  var dc = c1 - c2;
-  var dl = lab1.l - lab2.l;
-  var da = lab1.a - lab2.a;
-  var db = lab1.b - lab2.b;
-  // we don't want NaN due to rounding errors so fudge things a bit...
-  var dh = 0;
-  var dh_squared = (da * da) + (db * db) - (dc * dc);
-  if (dh_squared > 0) {
-    dh = Math.sqrt(dh_squared);
-  }
-  var first = dl;
-  var second = dc / (1.0 + (0.045 * c1));
-  var third = dh / (1.0 + (0.015 * c1));
-  return Math.sqrt((first * first) + (second * second) + (third * third));
-};
-
-// convert an RGB value into a HSL value
-Alphabet.rgb2hsl = function(rgb) {
-  "use strict";
-  var min, max, delta, h, s, l, r, g, b;
-  if (typeof rgb == "number") {
-    r = ((rgb >> 16) & 0xFF) / 255.0;
-    g = ((rgb >> 8) & 0xFF) / 255.0;
-    b = (rgb & 0xFF) / 255.0;
-  } else {
-    r = rgb.red;
-    g = rgb.green;
-    b = rgb.blue;
-  }
-  min = Math.min(r, g, b);
-  max = Math.max(r, g, b);
-  delta = max - min;
-  l = min + (delta / 2);
-  if (max == min) {
-    h = 0; // achromatic (grayscale)
-    s = 0;
-  } else {
-    if (l > 0.5) {
-      s = delta / (2 - max - min);
-    } else {
-      s = delta / (max + min);
-    }
-    if (max == r) {
-      h = (g - b) / delta;
-      if (g < b) h += 6;
-    } else if (max == g) {
-      h = ((b - r) / delta) + 2;
-    } else {
-      h = ((r - g) / delta) + 4;
-    }
-    h /= 6;
-  }
-  return {"h": h, "s": s, "l": l};
-};
-
-// convert a HSL value into an RGB value
-Alphabet.hsl2rgb = function(hsl, output_object) {
-  "use strict";
-  function _hue(p, q, t) {
-    "use strict";
-    if (t < 0) t += 1;
-    else if (t > 1) t -= 1;
-    if (t < (1.0 / 6.0)) {
-      return p + ((q - p) * 6.0 * t);
-    } else if (t < 0.5) {
-      return q;
-    } else if (t < (2.0 / 3.0)) {
-      return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0);
-    } else {
-      return p;
-    }
-  }
-  var r, g, b, p, q;
-  if (hsl.s == 0) {
-    // achromatic (grayscale)
-    r = hsl.l;
-    g = hsl.l;
-    b = hsl.l;
-  } else {
-    if (hsl.l < 0.5) {
-      q = hsl.l * (1 + hsl.s);
-    } else {
-      q = hsl.l + hsl.s - (hsl.l * hsl.s);
-    }
-    p = (2 * hsl.l) - q;
-    r = _hue(p, q, hsl.h + (1.0 / 3.0));
-    g = _hue(p, q, hsl.h);
-    b = _hue(p, q, hsl.h - (1.0 / 3.0));
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-Alphabet.lighten_colour = function(rgb) {
-  "use strict";
-  var hsl = Alphabet.rgb2hsl(rgb);
-  hsl.l += (1.0 - hsl.l) * 2 / 3;
-  return Alphabet.hsl2rgb(hsl, typeof rgb != "number");
-};
-
-//======================================================================
-// end Alphabet object
-//======================================================================
-
-//======================================================================
-// start StandardAlphabet object
-//======================================================================
-
-// an extension of the alphabet object to support some additional fields 
-// only present in standard alphabets.
-var StandardAlphabet = function(enum_code, enum_name, alphabet_data) {
-  Alphabet.apply(this, [alphabet_data]);
-  this.enum_code = enum_code;
-  this.enum_name = enum_name;
-};
-StandardAlphabet.prototype = Alphabet.prototype;
-StandardAlphabet.prototype.constructor = StandardAlphabet;
-
-// A unique code for this standard alphabet.
-// This code will be a power of 2 to enable creation of bitsets for
-// a selection of standard alphabets.
-StandardAlphabet.prototype.get_code = function() {
-  return this.enum_code;
-};
-
-// A unique name for this standard alphabet.
-// this name will be all upper case and the same as the property that
-// refers to this alphabet in the AlphStd collection.
-StandardAlphabet.prototype.get_enum = function() {
-  return this.enum_name;
-};
-
-//======================================================================
-// end StandardAlphabet object
-//======================================================================
-
-// A collection of standard alphabets.
-var AlphStd = {
-  RNA: new StandardAlphabet(1, "RNA", {
-    "name": "RNA",
-    "like": "RNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300"},
-      {"symbol": "U", "name": "Uracil", "colour": "008000",
-        "aliases": "T"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."},
-      {"symbol": "V", "name": "Not U", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACU"},
-      {"symbol": "D", "name": "Not C", "equals": "AGU"},
-      {"symbol": "B", "name": "Not A", "equals": "CGU"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AU"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"},
-      {"symbol": "K", "name": "Keto", "equals": "GU"}
-    ]
-  }), 
-  DNA: new StandardAlphabet(2, "DNA", {
-    "name": "DNA",
-    "like": "DNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"},
-      {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A",
-        "aliases": "U"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."},
-      {"symbol": "V", "name": "Not T", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACT"},
-      {"symbol": "D", "name": "Not C", "equals": "AGT"},
-      {"symbol": "B", "name": "Not A", "equals": "CGT"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AT"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"},
-      {"symbol": "K", "name": "Keto", "equals": "GT"}
-    ]
-  }), 
-  PROTEIN: new StandardAlphabet(4, "PROTEIN", {
-    "name": "Protein",
-    "like": "PROTEIN",
-    "ncore": 20,
-    "symbols": [
-      {"symbol": "A", "name": "Alanine", "colour": "0000CC"},
-      {"symbol": "C", "name": "Cysteine", "colour": "0000CC"},
-      {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"},
-      {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"},
-      {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Glycine", "colour": "FFB300"},
-      {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"},
-      {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"},
-      {"symbol": "K", "name": "Lysine", "colour": "CC0000"},
-      {"symbol": "L", "name": "Leucine", "colour": "0000CC"},
-      {"symbol": "M", "name": "Methionine", "colour": "0000CC"},
-      {"symbol": "N", "name": "Asparagine", "colour": "008000"},
-      {"symbol": "P", "name": "Proline", "colour": "FFFF00"},
-      {"symbol": "Q", "name": "Glutamine", "colour": "008000"},
-      {"symbol": "R", "name": "Arginine", "colour": "CC0000"},
-      {"symbol": "S", "name": "Serine", "colour": "008000"},
-      {"symbol": "T", "name": "Threonine", "colour": "008000"},
-      {"symbol": "V", "name": "Valine", "colour": "0000CC"},
-      {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"},
-      {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"},
-      {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."},
-      {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, 
-      {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, 
-      {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"}
-    ]
-  })
-};
-
-//======================================================================
-// start Symbol object
-//======================================================================
-var Symbol = function(alph_index, scale, alphabet) {
-  "use strict";
-  //variable prototype
-  this.symbol = alphabet.get_symbol(alph_index);
-  this.scale = scale;
-  this.colour = alphabet.get_colour(alph_index);
-};
-
-Symbol.prototype.get_symbol = function() {
-  "use strict";
-  return this.symbol;
-};
-
-Symbol.prototype.get_scale = function() {
-  "use strict";
-  return this.scale;
-};
-
-Symbol.prototype.get_colour = function() {
-  "use strict";
-  return this.colour;
-};
-
-Symbol.prototype.toString = function() {
-  "use strict";
-  return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%";
-};
-
-function compare_symbol(sym1, sym2) {
-  "use strict";
-  if (sym1.get_scale() < sym2.get_scale()) {
-    return -1;
-  } else if (sym1.get_scale() > sym2.get_scale()) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-//======================================================================
-// end Symbol object
-//======================================================================
-
-//======================================================================
-// start Pspm object
-//======================================================================
-var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) {
-  "use strict";
-  var row, col, data, row_sum, delta, evalue_re;
-  if (typeof name !== "string") {
-    name = "";
-  }
-  this.name = name;
-  //construct
-  if (matrix instanceof Pspm) {
-    // copy constructor
-    this.alph_length = matrix.alph_length;
-    this.motif_length = matrix.motif_length;
-    this.name = matrix.name;
-    this.alt = matrix.alt;
-    this.nsites = matrix.nsites;
-    this.evalue = matrix.evalue;
-    this.ltrim = matrix.ltrim;
-    this.rtrim = matrix.rtrim;
-    this.pspm = [];
-    for (row = 0; row < matrix.motif_length; row++) {
-      this.pspm[row] = [];
-      for (col = 0; col < matrix.alph_length; col++) {
-        this.pspm[row][col] = matrix.pspm[row][col];
-      }
-    }
-    if (matrix.pssm != null) {
-      this.pssm = [];
-      for (row = 0; row < matrix.motif_length; row++) {
-        this.pspm[row] = [];
-        for (col = 0; col < matrix.alph_length; col++) {
-          this.pssm[row][col] = matrix.pssm[row][col];
-        }
-      }
-    }
-  } else {
-    // check parameters
-    if (ltrim == null) {
-      ltrim = 0;
-    } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) {
-      throw new Error("ltrim must be a non-negative integer, got: " + ltrim);
-    }
-    if (rtrim == null) {
-      rtrim = 0;
-    } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) {
-      throw new Error("rtrim must be a non-negative integer, got: " + rtrim);
-    }
-    if (nsites != null) {
-      if (typeof nsites !== "number" || nsites < 0) {
-        throw new Error("nsites must be a positive number, got: " + nsites);
-      } else if (nsites == 0) {
-        nsites = null;
-      }
-    }
-    if (evalue != null) {
-      if (typeof evalue === "number") {
-        if (evalue < 0) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else if (typeof evalue === "string") {
-        evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-        if (!evalue_re.test(evalue)) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else {
-        throw new Error("evalue must be a non-negative number, got: " + evalue);
-      }
-    }
-    // set properties
-    this.name = name;
-    this.alt = alt;
-    this.nsites = nsites;
-    this.evalue = evalue;
-    this.ltrim = ltrim;
-    this.rtrim = rtrim;
-    if (typeof matrix === "string") {
-      // string constructor
-      data = parse_pspm_string(matrix);
-      this.alph_length = data["alph_length"];
-      this.motif_length = data["motif_length"];
-      this.pspm = data["pspm"];
-      if (this.evalue == null) {
-        if (data["evalue"] != null) {
-          this.evalue = data["evalue"];
-        } else {
-          this.evalue = 0;
-        }
-      }
-      if (this.nsites == null) {
-        if (typeof data["nsites"] === "number") {
-          this.nsites = data["nsites"];
-        } else {
-          this.nsites = 20;
-        }
-      }
-    } else {
-      // assume pspm is a nested array
-      this.motif_length = matrix.length;
-      this.alph_length = (matrix.length > 0 ? matrix[0].length : 0);
-      if (this.nsites == null) {
-        this.nsites = 20;
-      }
-      if (this.evalue == null) {
-        this.evalue = 0;
-      }
-      this.pspm = [];
-      // copy pspm and check
-      for (row = 0; row < this.motif_length; row++) {
-        if (this.alph_length != matrix[row].length) {
-          throw new Error("COLUMN_MISMATCH");
-        }
-        this.pspm[row] = [];
-        row_sum = 0;
-        for (col = 0; col < this.alph_length; col++) {
-          this.pspm[row][col] = matrix[row][col];
-          row_sum += this.pspm[row][col];
-        }
-        delta = 0.1;
-        if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || 
-            (row_sum < 1 && (1 - row_sum) > delta)) {
-          throw new Error("INVALID_SUM");
-        }
-      }
-      // copy pssm
-      if (pssm != null) {
-        this.pssm = [];
-        for (row = 0; row < this.motif_length; row++) {
-          this.pssm[row] = [];
-          for (col = 0; col < this.alph_length; col++) {
-            this.pssm[row][col] = pssm[row][col];
-          }
-        }
-      }
-    }
-  }
-};
-
-Pspm.prototype.copy = function() {
-  "use strict";
-  return new Pspm(this);
-};
-
-Pspm.prototype.reverse = function() {
-  "use strict";
-  var x, y, temp, temp_trim;
-  //reverse
-  x = 0;
-  y = this.motif_length-1;
-  while (x < y) {
-    temp = this.pspm[x];
-    this.pspm[x] = this.pspm[y];
-    this.pspm[y] = temp;
-    x++;
-    y--;
-  }
-  // reverse pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //reverse
-    x = 0;
-    y = this.motif_length-1;
-    while (x < y) {
-      temp = this.pssm[x];
-      this.pspm[x] = this.pssm[y];
-      this.pssm[y] = temp;
-      x++;
-      y--;
-    }
-  }
-  //swap triming
-  temp_trim = this.ltrim;
-  this.ltrim = this.rtrim;
-  this.rtrim = temp_trim;
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.reverse_complement = function(alphabet) {
-  "use strict";
-  var x, y, temp, i, row, c, temp_trim;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  if (!alphabet.has_complement()) {
-    throw new Error("The specified alphabet can not be complemented.");
-  }
-  // reverse motif
-  this.reverse();
-  //complement
-  for (x = 0; x < this.motif_length; x++) {
-    row = this.pspm[x];
-    for (i = 0; i < row.length; i++) {
-      c = alphabet.get_complement(i);
-      if (c < i) continue;
-      temp = row[i];
-      row[i] = row[c];
-      row[c] = temp;
-    }
-  }
-  // complement pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //complement
-    for (x = 0; x < this.motif_length; x++) {
-      row = this.pssm[x];
-      for (i = 0; i < row.length; i++) {
-        c = alphabet.get_complement(i);
-        if (c < i) continue;
-        temp = row[i];
-        row[i] = row[c];
-        row[c] = temp;
-      }
-    }
-  }
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.get_stack = function(position, alphabet, ssc) {
-  "use strict";
-  var row, stack_ic, alphabet_ic, stack, i, sym;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  row = this.pspm[position];
-  stack_ic = this.get_stack_ic(position, alphabet);
-  if (ssc) stack_ic -= this.get_error(alphabet);
-  alphabet_ic = alphabet.get_ic();
-  stack = [];
-  for (i = 0; i < this.alph_length; i++) {
-    sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet);
-    if (sym.get_scale() <= 0) {
-      continue;
-    }
-    stack.push(sym);
-  }
-  stack.sort(compare_symbol);
-  return stack;
-};
-
-Pspm.prototype.get_stack_ic = function(position, alphabet) {
-  "use strict";
-  var row, H, i;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size fo the pspm.");
-  }
-  row = this.pspm[position];
-  H = 0;
-  for (i = 0; i < this.alph_length; i++) {
-    if (row[i] === 0) {
-      continue;
-    }
-    H -= (row[i] * (Math.log(row[i]) / Math.LN2));
-  }
-  return alphabet.get_ic() - H;
-};
-
-Pspm.prototype.get_error = function(alphabet) {
-  "use strict";
-  if (this.nsites === 0) {
-    return 0;
-  }
-  return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites);
-};
-
-Pspm.prototype.get_motif_length = function() {
-  "use strict";
-  return this.motif_length;
-};
-
-Pspm.prototype.get_alph_length = function() {
-  "use strict";
-  return this.alph_length;
-};
-
-Pspm.prototype.get_left_trim = function() {
-  "use strict";
-  return this.ltrim;
-};
-
-Pspm.prototype.get_right_trim = function() {
-  "use strict";
-  return this.rtrim;
-};
-
-Pspm.prototype.as_best_match = function(alphabet) {
-  "use strict";
-  var match, odds, best_odds, best_index;
-  var i, j;
-  match = "";
-  for (i = 0; i < this.motif_length; i++) {
-    best_index = 0;
-    best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0);
-    for (j = 1; j < this.alph_length; j++) {
-      odds = this.pspm[i][j] / alphabet.get_bg_freq(j);
-      if (odds > best_odds) {
-        best_odds = odds;
-        best_index = j;
-      }
-    }
-    match += alphabet.get_symbol(best_index);
-  }
-  return match;
-};
-
-Pspm.prototype.as_count_matrix = function() {
-  "use strict";
-  var count, count_text, text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      count = Math.round(this.nsites * this.pspm[i][j]);
-      count_text = "" + count;
-      // pad up to length of 4
-      if (count_text.length < 4) {
-        text += (new Array(5 - count_text.length)).join(" ") + count_text;
-      } else {
-        text += count_text;
-      }
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_probability_matrix = function() {
-  "use strict";
-  var text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      text += this.pspm[i][j].toFixed(6);
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_score_matrix = function(alphabet, pseudo) {
-  "use strict";
-  var me, score, out, row, col, score_text;
-  me = this;
-  if (typeof this.pssm === "undefined") {
-    if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) {
-      throw new Error("The alphabet is required to generate the pssm.");
-    }
-    if (typeof pseudo === "undefined") {
-      pseudo = 0.01;
-    } else if (typeof pseudo !== "number" || pseudo < 0) {
-      throw new Error("Expected positive number for pseudocount");
-    }
-    score = function(row, col) {
-      "use strict";
-      var p, bg, p2;
-      p = me.pspm[row][col];
-      bg = alphabet.get_bg_freq(col);
-      p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo);
-      return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000);
-    };
-  } else {
-    score = function(row, col) {
-      "use strict";
-      return me.pssm[row][col];
-    };
-  }
-  out = "";
-  for (row = 0; row < this.motif_length; row++) {
-    for (col = 0; col < this.alph_length; col++) {
-      if (col !== 0) {
-        out += " ";
-      }
-      score_text = "" + score(row, col);
-      // pad out to 6 characters
-      if (score_text.length < 6) {
-        out += (new Array(7 - score_text.length)).join(" ") + score_text;
-      } else {
-        out += score_text;
-      }
-    }
-    out += "\n";
-  }
-  return out;
-}
-
-Pspm.prototype.as_pspm = function() {
-  "use strict";
-  return "letter-probability matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + " nsites= " + this.nsites + 
-      " E= " + (typeof this.evalue === "number" ? 
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_probability_matrix();
-};
-
-Pspm.prototype.as_pssm = function(alphabet, pseudo) {
-  "use strict";
-  return "log-odds matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + 
-      " E= " + (typeof this.evalue == "number" ?
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_score_matrix(alphabet, pseudo);
-};
-
-Pspm.prototype.as_meme = function(options) {
-  var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands;
-  var out, alen, i;
-  // get the options
-  if (typeof options !== "object" || options === null) {
-    options = {};
-  }
-  with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false);
-  with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false);
-  with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false);
-  if (!with_pspm && !with_pssm) with_pspm = true;
-  if (with_header) {
-    if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) {
-      version = options["version"];
-    } else if (typeof options["version"] === "number") {
-      version = options["version"].toFixed(0);
-    } else {
-      version = "4";
-    }
-    if (typeof options["strands"] === "number" && options["strands"] === 1) {
-      strands = 1;
-    } else {
-      strands = 2;
-    }
-    if (typeof options["bg_source"] === "string") {
-      bg_source = options["bg_source"];
-    } else {
-      bg_source = "unknown source";
-    }
-    if (typeof options["alphabet"] === "object" && options["alphabet"] != null
-        && options["alphabet"] instanceof Alphabet) {
-      alphabet = options["alphabet"];
-    } else {
-      throw new Error("The alphabet is required to generate the header.");
-    }
-  }
-  // now create the output
-  out = "";
-  if (with_header) {
-    out = "MEME version " + version + "\n\n";
-    out += alphabet.as_meme() + "\n";
-    if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified
-      out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n";
-    }
-    out += "Background letter frequencies (from " + bg_source + "):\n";
-    alen = alphabet.get_size_core();
-    for (i = 0; i < alen; i++) {
-      if (i !== 0) {
-        if (i % 9 === 0) { // maximum of nine entries per line
-          out += "\n";
-        } else {
-          out += " ";
-        }
-      }
-      out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3);
-    }
-  }
-  out += "\n\n";
-  out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt);
-  if (with_pssm) {
-    out += "\n\n";
-    out += this.as_pssm(options["alphabet"], options["pseudocount"]);
-  }
-  if (with_pspm) {
-    out += "\n\n";
-    out += this.as_pspm();
-  }
-  return out;
-}
-
-Pspm.prototype.toString = function() {
-  "use strict";
-  var str, i, row;
-  str = "";
-  for (i = 0; i < this.pspm.length; i++) {
-    row = this.pspm[i];
-    str += row.join("\t") + "\n";
-  }
-  return str;
-};
-
-function parse_pspm_properties(str) {
-  "use strict";
-  var parts, i, eqpos, before, after, properties, prop, num, num_re;
-  num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-  parts = trim(str).split(/\s+/);
-  // split up words containing =
-  for (i = 0; i < parts.length;) {
-    eqpos = parts[i].indexOf("=");
-    if (eqpos != -1) {
-      before = parts[i].substr(0, eqpos);
-      after = parts[i].substr(eqpos+1);
-      if (before.length > 0 && after.length > 0) {
-        parts.splice(i, 1, before, "=", after);
-        i += 3;
-      } else if (before.length > 0) {
-        parts.splice(i, 1, before, "=");
-        i += 2;
-      } else if (after.length > 0) {
-        parts.splice(i, 1, "=", after);
-        i += 2;
-      } else {
-        parts.splice(i, 1, "=");
-        i++;
-      }
-    } else {
-      i++;
-    }
-  }
-  properties = {};
-  for (i = 0; i < parts.length; i += 3) {
-    if (parts.length - i < 3) {
-      throw new Error("Expected PSPM property was incomplete. "+
-          "Remaing parts are: " + parts.slice(i).join(" "));
-    }
-    if (parts[i+1] !== "=") {
-      throw new Error("Expected '=' in PSPM property between key and " +
-          "value but got " + parts[i+1]); 
-    }
-    prop = parts[i].toLowerCase();
-    num = parts[i+2];
-    if (!num_re.test(num)) {
-      throw new Error("Expected numeric value for PSPM property '" + 
-          prop + "' but got '" + num + "'");
-    }
-    properties[prop] = num;
-  }
-  return properties;
-}
-
-function parse_pspm_string(pspm_string) {
-  "use strict";
-  var header_re, lines, first_line, line_num, col_num, alph_length, 
-      motif_length, nsites, evalue, pspm, i, line, match, props, parts,
-      j, prob;
-  header_re = /^letter-probability\s+matrix:(.*)$/i;
-  lines = pspm_string.split(/\n/);
-  first_line = true;
-  line_num = 0;
-  col_num = 0;
-  alph_length;
-  motif_length;
-  nsites;
-  evalue;
-  pspm = [];
-  for (i = 0; i < lines.length; i++) {
-    line = trim(lines[i]);
-    if (line.length === 0) { 
-      continue;
-    }
-    // check the first line for a header though allow matrices without it
-    if (first_line) {
-      first_line = false;
-      match = header_re.exec(line);
-      if (match !== null) {
-        props = parse_pspm_properties(match[1]);
-        if (props.hasOwnProperty("alength")) {
-          alph_length = parseFloat(props["alength"]);
-          if (alph_length != 4 && alph_length != 20) {
-            throw new Error("PSPM property alength should be 4 or 20" +
-                " but got " + alph_length);
-          }
-        }
-        if (props.hasOwnProperty("w")) {
-          motif_length = parseFloat(props["w"]);
-          if (motif_length % 1 !== 0 || motif_length < 1) {
-            throw new Error("PSPM property w should be an integer larger " +
-                "than zero but got " + motif_length);
-          }
-        }
-        if (props.hasOwnProperty("nsites")) {
-          nsites = parseFloat(props["nsites"]);
-          if (nsites <= 0) {
-            throw new Error("PSPM property nsites should be larger than " +
-                "zero but got " + nsites);
-          }
-        }
-        if (props.hasOwnProperty("e")) {
-          evalue = props["e"];
-          if (evalue < 0) {
-            throw new Error("PSPM property evalue should be " +
-                "non-negative but got " + evalue);
-          }
-        }
-        continue;
-      }
-    }
-    pspm[line_num] = [];
-    col_num = 0;
-    parts = line.split(/\s+/);
-    for (j = 0; j < parts.length; j++) {
-      prob = parseFloat(parts[j]);
-      if (prob != parts[j] || prob < 0 || prob > 1) {
-        throw new Error("Expected probability but got '" + parts[j] + "'"); 
-      }
-      pspm[line_num][col_num] = prob;
-      col_num++;
-    }
-    line_num++;
-  }
-  if (typeof motif_length === "number") {
-    if (pspm.length != motif_length) {
-      throw new Error("Expected PSPM to have a motif length of " + 
-          motif_length + " but it was actually " + pspm.length);
-    }
-  } else {
-    motif_length = pspm.length;
-  }
-  if (typeof alph_length !== "number") {
-    alph_length = pspm[0].length;
-    if (alph_length != 4 && alph_length != 20) {
-      throw new Error("Expected length of first row in the PSPM to be " +
-          "either 4 or 20 but got " + alph_length);
-    }
-  }
-  for (i = 0; i < pspm.length; i++) {
-    if (pspm[i].length != alph_length) {
-      throw new Error("Expected PSPM row " + i + " to have a length of " + 
-          alph_length + " but the length was " + pspm[i].length);
-    }
-  }
-  return {"pspm": pspm, "motif_length": motif_length, 
-    "alph_length": alph_length, "nsites": nsites, "evalue": evalue};
-}
-//======================================================================
-// end Pspm object
-//======================================================================
-
-//======================================================================
-// start Logo object
-//======================================================================
-
-var Logo = function(alphabet, options) {
-  "use strict";
-  this.alphabet = alphabet;
-  this.fine_text = "";
-  this.x_axis = 1;
-  this.y_axis = true;
-  this.xlate_nsyms = 1;
-  this.xlate_start = null;
-  this.xlate_end = null;
-  this.pspm_list = [];
-  this.pspm_column = [];
-  this.rows = 0;
-  this.columns = 0;
-  if (typeof options === "string") {
-    // the old method signature had fine_text here so we support that
-    this.fine_text = options;
-  } else if (typeof options === "object" && options != null) {
-    this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : "");
-    this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1);
-    if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1;
-    this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true);
-    this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms);
-    this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start);
-    this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end);
-  }
-};
-
-Logo.prototype.add_pspm = function(pspm, column) {
-  "use strict";
-  var col;
-  if (typeof column === "undefined") {
-    column = 0;
-  } else if (column < 0) {
-    throw new Error("Column index out of bounds.");
-  }
-  this.pspm_list[this.rows] = pspm;
-  this.pspm_column[this.rows] = column;
-  this.rows++;
-  col = column + pspm.get_motif_length();
-  if (col > this.columns) {
-    this.columns = col;
-  }
-};
-
-Logo.prototype.get_columns = function() {
-  "use strict";
-  return this.columns;
-};
-
-Logo.prototype.get_xlate_nsyms = function() {
-  "use strict";
-  return this.xlate_nsyms;
-};
-
-Logo.prototype.get_xlate_start = function() {
-  "use strict";
-  return (this.xlate_start != null ? this.xlate_start : 0);
-};
-
-Logo.prototype.get_xlate_end = function() {
-  "use strict";
-  return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms);
-};
-
-Logo.prototype.get_xlate_columns = function() {
-  "use strict";
-  return this.get_xlate_end() - this.get_xlate_start();
-};
-
-Logo.prototype.get_rows = function() {
-  "use strict";
-  return this.rows;
-};
-
-Logo.prototype.get_pspm = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_list[row_index];
-};
-
-Logo.prototype.get_offset = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_column[row_index];
-};
-
-Logo.prototype._as_eps_data = function(ssc, errbars) {
-  var i, j, pos, stack_pos, pspm, stack, sym, out;
-  out = "";
-  for (i = 0; i < this.rows; i++) {
-    out += "\nStartLine\n";
-    // Indent
-    for (j = 0; j < this.pspm_column[i]; j++) {
-      out += "() startstack\nendstack\n\n";
-    }
-    pspm = this.pspm_list[i];
-    if (pspm.get_left_trim() > 0) {
-      out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n";
-    }
-    for (pos = 0; pos < pspm.get_motif_length(); pos++) {
-      if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour
-        out += "DrawTrimEdge\nRestoreColour\n";
-      } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) {
-        out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n";
-      }
-      out += "(" + (pos + 1) + ") startstack\n";
-      stack = pspm.get_stack(pos, this.alphabet, ssc);
-      for (stack_pos = 0; stack_pos < stack.length; stack_pos++) {
-        sym = stack[stack_pos];
-        out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n";
-      }
-      if (errbars) {
-        out += " " + pspm.get_error(this.alphabet) + " Ibeam\n";
-      }
-      out += "endstack\n\n";
-    }
-    if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) {
-      out += "RestoreColour\n";
-    }
-    out += "EndLine\n";
-  }
-  return out;
-};
-
-Logo.prototype.as_eps = function(options) {
-  "use strict";
-  if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS");
-  if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS");
-  if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS");
-
-  var LOGOHEIGHT = 7.5; // default height of line in cm
-  var cm2pts, height, width, now, ssc, errbars;
-  if (typeof options === "undefined") {
-    options = {};
-  }
-  cm2pts = 72 / 2.54;
-  if (typeof options.logo_height == "number") {
-    height = options.logo_height;
-  } else {
-    height = LOGOHEIGHT * this.rows;
-  }
-  if (typeof options.logo_width == "number") {
-    width = options.logo_width;
-  } else {
-    width = this.columns + 2;
-  }
-  now = new Date();
-  ssc = (typeof options.ssc == "boolean" ? options.ssc : false);
-  errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc);
-  var values = {
-    "LOGOHEIGHT": height,
-    "LOGOWIDTH": width,
-    "BOUNDINGHEIGHT": Math.round(height * cm2pts),
-    "BOUNDINGWIDTH": Math.round(width * cm2pts),
-    "LOGOLINEHEIGHT": (height / this.rows),
-    "CHARSPERLINE": this.columns,
-    "BARBITS": this.alphabet.get_ic(),
-    "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"),
-    "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(),
-    "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0),
-    "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0),
-    "TITLE": (typeof options.title == "string" ? options.title : ""),
-    "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text),
-    "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""),
-    "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"),
-    "SSC": ssc,
-    "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis),
-    "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false),
-    "ERRBAR": errbars,
-    "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false),
-    "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0),
-    "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false),
-    "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"),
-    "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12),
-    "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12),
-    "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6),
-    "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9),
-    "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9),
-    "COLORDICT": this.alphabet._as_eps_dict(),
-    "DATA": this._as_eps_data(ssc, errbars)
-  };
-  // now this requires that the script containing the template has been imported!
-  return motif_logo_template(values);
-};
-
-//======================================================================
-// end Logo object
-//======================================================================
-
-// calculate the exact size (in pixels) of an object drawn on the
-// canvas assuming that the background of the canvas is transparent.
-function canvas_bounds(ctx, cwidth, cheight) {
-  "use strict";
-  var data, r, c, top_line, bottom_line, left_line, right_line, 
-      txt_width, txt_height;
-
-  // extract the image data
-  data = ctx.getImageData(0, 0, cwidth, cheight).data;
-
-  // set initial values
-  top_line = -1; bottom_line = -1; left_line = -1; right_line = -1;
-  txt_width = 0; txt_height = 0;
-
-  // Find the top-most line with a non-transparent pixel
-  for (r = 0; r < cheight; r++) {
-    for (c = 0; c < cwidth; c++) {
-      if (data[r * cwidth * 4 + c * 4 + 3]) {
-        top_line = r;
-        break;
-      }
-    }
-    if (top_line != -1) {
-      break;
-    }
-  }
-  
-  // Only bother looking if we found at least one set pixel... 
-  if (top_line != -1) {
-
-    //find the last line with a non-transparent pixel
-    for (r = cheight-1; r >= top_line; r--) {
-      for(c = 0; c < cwidth; c++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          bottom_line = r;
-          break;
-        }
-      }
-      if (bottom_line != -1) {
-        break;
-      }
-    }
-    // calculate height
-    txt_height = bottom_line - top_line + 1;
-
-    // Find the left-most line with a non-transparent pixel
-    for (c = 0; c < cwidth; c++) {
-      for (r = top_line; r <= bottom_line; r++) {
-        if (data[r * cwidth * 4 + c * 4 + 3]) {
-          left_line = c;
-          break;
-        }
-      }
-      if (left_line != -1) {
-        break;
-      }
-    }
-
-    //find the right most line with a non-transparent pixel
-    for (c = cwidth-1; c >= left_line; c--) {
-      for(r = top_line; r <= bottom_line; r++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          right_line = c;
-          break;
-        }
-      }
-      if (right_line != -1) {
-        break;
-      }
-    }
-    txt_width = right_line - left_line + 1;
-  }
-
-  //return the bounds
-  return {bound_top: top_line, bound_bottom: bottom_line, 
-    bound_left: left_line, bound_right: right_line, width: txt_width, 
-    height: txt_height};
-}
-
-//======================================================================
-// start RasterizedAlphabet
-//======================================================================
-
-// Rasterize Alphabet
-// 1) Measure width of text at default font for all symbols in alphabet
-// 2) sort in width ascending
-// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I')
-// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob).
-// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font
-// 6) Draw text onto temp canvas at calculated scale
-// 7) Find bounds of drawn text
-// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger).
-var RasterizedAlphabet = function(alphabet, logo_scale, font, width) {
-  "use strict";
-  var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes,
-      i, sym, size, tenpercent, avg_width, scale, 
-      target_width, target_height;
-  //variable prototypes
-  this.alphabet = alphabet;
-  this.scale = logo_scale;
-  this.sym_cache = {};
-  this.stack_num_cache = [];
-  this.scale_num_cache = [];
-  // size of canvas
-  default_size = 60; // size of measuring canvas
-  safety_pad = 20; // pixels to pad around so we don't miss the edges
-  // create a canvas to do our measuring
-  canvas = document.createElement("canvas");
-  if (!canvas.getContext) throw new Error("No canvas support");
-  canvas.width = default_size + 2 * safety_pad;
-  canvas.height = default_size + 2 * safety_pad;
-  middle = Math.round(canvas.width / 2);
-  baseline = Math.round(canvas.height - safety_pad);
-  ctx = canvas.getContext('2d');
-  if (!supports_text(ctx)) throw new Error("Canvas does not support text");
-  ctx.font = font;
-  ctx.textAlign = "center";
-  ctx.translate(middle, baseline);
-  // list of widths
-  widths = [];
-  sizes = [];
-  //now measure each letter in the alphabet
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    // reset the canvas
-    ctx.clearRect(0, 0, canvas.width, canvas.height);
-    ctx.fillStyle = alphabet.get_colour(i);
-    // draw the test text
-    ctx.fillText(alphabet.get_symbol(i), 0, 0);
-    //measure
-    size = canvas_bounds(ctx, canvas.width, canvas.height);
-    if (size.width === 0) throw new Error("Invisible symbol!");
-    widths.push(size.width);
-    sizes[i] = size;
-  }
-  //sort the widths
-  widths.sort(function(a,b) {return a - b;});
-  //drop 10% of the items off each end
-  tenpercent = Math.floor(widths.length / 10);
-  for (i = 0; i < tenpercent; ++i) {
-    widths.pop();
-    widths.shift();
-  }
-  //calculate average width
-  avg_width = 0;
-  for (i = 0; i < widths.length; ++i) {
-    avg_width += widths[i];
-  }
-  avg_width /= widths.length;
-  // calculate the target width
-  target_width = width * this.scale * 2;
-  // calculate scales
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    sym = alphabet.get_symbol(i);
-    size = sizes[i];
-    // calculate scale
-    scale = target_width / Math.max(avg_width, size.width);
-    // estimate scaled height
-    target_height = size.height * scale;
-    // create an appropriately sized canvas
-    canvas = document.createElement("canvas");
-    canvas.width = target_width;
-    canvas.height = target_height + safety_pad * 2;
-    // calculate the middle
-    middle = Math.round(canvas.width / 2);
-    // calculate the baseline
-    baseline = Math.round(canvas.height - safety_pad);
-    // get the context and prepare to draw the rasterized text
-    ctx = canvas.getContext('2d');
-    ctx.font = font;
-    ctx.fillStyle = alphabet.get_colour(i);
-    ctx.textAlign = "center";
-    ctx.translate(middle, baseline);
-    ctx.save();
-    ctx.scale(scale, scale);
-    // draw the text
-    ctx.fillText(sym, 0, 0);
-    ctx.restore();
-    this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)};
-  }
-};
-
-RasterizedAlphabet.prototype.get_alphabet = function() {
-  return this.alphabet;
-};
-
-RasterizedAlphabet.prototype.get_scale = function() {
-  return this.scale;
-};
-
-RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) {
-  "use strict";
-  var entry, image, size;
-  entry = this.sym_cache[letter];
-  image = entry.image;
-  size = entry.size;
-  ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight);
-};
-
-RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) {
-  var image, image_ctx, text_length;
-  if (index >= this.stack_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.save();
-    image_ctx.font = font;
-    text_length = image_ctx.measureText("" + (index + 1)).width;
-    image_ctx.restore();
-    // resize the canvas to fit
-    image.width = Math.ceil(stack_width);
-    image.height = Math.ceil(text_length);
-    // draw the text
-    image_ctx = image.getContext('2d');
-    image_ctx.translate(Math.round(stack_width / 2), 0);
-    image_ctx.font = font;
-    image_ctx.textBaseline = "middle";
-    image_ctx.textAlign = "right";
-    image_ctx.rotate(-(Math.PI / 2));
-    image_ctx.fillText("" + (index + 1), 0, 0);
-    this.stack_num_cache[index] = image;
-  } else {
-    image = this.stack_num_cache[index];
-  }
-  ctx.drawImage(image, 0, 0);
-}
-
-RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) {
-  var image, image_ctx, text_size, m_length;
-  if (num >= this.scale_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.font = font;
-    text_size = image_ctx.measureText("" + num);
-    if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) {
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent);
-    } else {
-      // measure width of 'm' to approximate height, we double it later anyway
-      m_length = image_ctx.measureText("m").width;
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(2 * m_length);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.textBaseline = "middle";
-      image_ctx.fillText("" + num, image.width, m_length);
-    }
-    this.scale_num_cache[num] = image;
-  } else {
-    image = this.scale_num_cache[num];
-  }
-  ctx.drawImage(image, -image.width, -Math.round(image.height / 2))
-}
-
 //======================================================================
 // end RasterizedAlphabet
 //======================================================================
-
 //======================================================================
 // start LogoMetrics object
 //======================================================================
-
-var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) {
-  "use strict";
-  var i, row_height;
-  //variable prototypes
-  this.pad_top = (has_names ? 5 : 0);
-  this.pad_left = (y_axis ? 10 : 0);
-  this.pad_right = (has_finetext ? 15 : 0);
-  this.pad_bottom = 0;
-  this.pad_middle = 20;
-  this.name_height = 14;
-  this.name_font = "bold " + this.name_height + "px Times, sans-serif";
-  this.name_spacer = 0;
-  this.y_axis = y_axis;
-  this.y_label = "bits";
-  this.y_label_height = 12;
-  this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif";
-  this.y_label_spacer = 3;
-  this.y_num_height = 12;
-  this.y_num_width = 0;
-  this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif";
-  this.y_tic_width = 5;
-  this.stack_pad_left = 0;
-  this.stack_font = "bold 25px Helvetica, sans-serif";
-  this.stack_height = 90;
-  this.stack_width = 26;
-  this.stacks_pad_right = 5;
-  this.x_axis = x_axis;
-  this.x_num_above = 2;
-  this.x_num_height = 12;
-  this.x_num_width = 0;
-  this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif";
-  this.fine_txt_height = 6;
-  this.fine_txt_above = 2;
-  this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif";
-  this.letter_metrics = new Array();
-  this.summed_width = 0;
-  this.summed_height = 0;
-  //calculate the width of the y axis numbers
-  ctx.font = this.y_num_font;
-  for (i = 0; i <= 2; i++) {
-    this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width);
-  }
-  //calculate the width of the x axis numbers (but they are rotated so it becomes height)
-  if (x_axis == 1) {
-    ctx.font = this.x_num_font;
-    for (i = 1; i <= logo_columns; i++) {
-      this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width);
-    }
-  } else if (x_axis == 0) {
-    this.x_num_height = 4;
-    this.x_num_width = 4;
-  } else {
-    this.x_num_height = 0;
-    this.x_num_width = 0;
-  }
-  
-  //calculate how much vertical space we want to draw this
-  //first we add the padding at the top and bottom since that's always there
-  this.summed_height += this.pad_top + this.pad_bottom;
-  //all except the last row have the same amount of space allocated to them
-  if (logo_rows > 1) {
-    row_height = this.stack_height + this.pad_middle;
-    if (has_names) {
-      row_height += this.name_height;
-      //the label is allowed to overlap into the spacer
-      row_height += Math.max(this.y_num_height/2, this.name_spacer); 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    } else {
-      row_height += this.y_num_height/2; 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    }
-    this.summed_height += row_height * (logo_rows - 1);
-  }
-  //the last row has the name and fine text below it but no padding
-  this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0);
-
-  var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0);
-  if (has_names) {
-    this.summed_height += fine_txt_total + this.name_height;
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + this.name_spacer);
-  } else {
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + fine_txt_total);
-  }
-
-  //calculate how much horizontal space we want to draw this
-  //first add the padding at the left and right since that's always there
-  this.summed_width += this.pad_left + this.pad_right;
-  if (this.y_axis) {
-    //add on the space for the y-axis label
-    this.summed_width += this.y_label_height + this.y_label_spacer;
-    //add on the space for the y-axis
-    this.summed_width += this.y_num_width + this.y_tic_width;
-  }
-  //add on the space for the stacks
-  this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns;
-  //add on the padding after the stacks (an offset from the fine text)
-  this.summed_width += this.stacks_pad_right;
-
-};
-
-//======================================================================
-// end LogoMetrics object
-//======================================================================
-
-//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm
-function image_ok(img) {
-  "use strict";
-  // During the onload event, IE correctly identifies any images that
-  // weren't downloaded as not complete. Others should too. Gecko-based
-  // browsers act like NS4 in that they report this incorrectly.
-  if (!img.complete) {
-    return false;
-  }
-  // However, they do have two very useful properties: naturalWidth and
-  // naturalHeight. These give the true size of the image. If it failed
-  // to load, either of these should be zero.
-  if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) {
-    return false;
-  }
-  // No other way of checking: assume it's ok.
-  return true;
-}
-  
-function supports_text(ctx) {
-  "use strict";
-  if (!ctx.fillText) {
-    return false;
-  }
-  if (!ctx.measureText) {
-    return false;
-  }
-  return true;
-}
-
-//draws the scale, returns the width
-function draw_scale(ctx, metrics, alphabet_ic, raster) {
-  "use strict";
-  var tic_height, i;
-  tic_height = metrics.stack_height / alphabet_ic;
-  ctx.save();
-  ctx.translate(metrics.y_label_height, metrics.y_num_height/2);
-  //draw the axis label
-  ctx.save();
-  ctx.font = metrics.y_label_font;
-  ctx.translate(0, metrics.stack_height/2);
-  ctx.rotate(-(Math.PI / 2));
-  ctx.textAlign = "center";
-  ctx.fillText("bits", 0, 0);
-  ctx.restore();
-
-  ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0);
-
-  //draw the axis tics
-  ctx.save();
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i <= alphabet_ic; i++) {
-    //draw the number
-    ctx.save();
-    ctx.translate(-1, 0);
-    raster.draw_scale_num(ctx, metrics.y_num_font, i);
-    ctx.restore();
-    //draw the tic
-    ctx.fillRect(0, -1, metrics.y_tic_width, 2);
-    //prepare for next tic
-    ctx.translate(0, -tic_height);
-  }
-  ctx.restore();
-
-  ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height)
-
-  ctx.restore();
-}
-
-function draw_stack_num(ctx, metrics, row_index, raster) {
-  "use strict";
-  ctx.save();
-  ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above));
-  if (metrics.x_axis == 1) {
-    raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index);
-  } else if (metrics.x_axis == 0) {
-    // draw dots instead of the numbers (good for small logos)
-    ctx.beginPath();
-    var radius = Math.round(metrics.x_num_height / 2);
-    ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false);
-    ctx.fill();
-  }
-  ctx.restore();
-}
-
-function draw_stack(ctx, metrics, symbols, raster) {
-  "use strict";
-  var preferred_pad, sym_min, i, sym, sym_height, pad;
-  preferred_pad = 0;
-  sym_min = 5;
-
-  ctx.save();//1
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i < symbols.length; i++) {
-    sym = symbols[i];
-    sym_height = metrics.stack_height * sym.get_scale();
-    
-    pad = preferred_pad;
-    if (sym_height - pad < sym_min) {
-      pad = Math.min(pad, Math.max(0, sym_height - sym_min));
-    }
-    sym_height -= pad;
-
-    //translate to the correct position
-    ctx.translate(0, -(pad/2 + sym_height));
-
-    //draw
-    raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height);
-    //translate past the padding
-    ctx.translate(0, -(pad/2));
-  }
-  ctx.restore();//1
-}
-
-function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) {
-  "use strict";
-  var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly;
-  dx = x2 - x1;
-  dy = y2 - y1;
-  tlen = Math.pow(dx*dx + dy*dy, 0.5);
-  theta = Math.atan2(dy,dx);
-  mulx = Math.cos(theta);
-  muly = Math.sin(theta);
-  lx = [];
-  ly = [];
-  for (i = 0; i < pattern; ++i) {
-    lx.push(pattern[i] * mulx);
-    ly.push(pattern[i] * muly);
-  }
-  i = start;
-  x = x1;
-  y = y1;
-  len = 0;
-  ctx.beginPath();
-  while (len + pattern[i] < tlen) {
-    ctx.moveTo(x, y);
-    x += lx[i];
-    y += ly[i];
-    ctx.lineTo(x, y);
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-    x += lx[i];
-    y += ly[i];
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-  }
-  if (len < tlen) {
-    ctx.moveTo(x, y);
-    x += mulx * (tlen - len);
-    y += muly * (tlen - len);
-    ctx.lineTo(x, y);
-  }
-  ctx.stroke();
-}
-
-function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) {
-  "use strict";
-  var left_size = left_end - left_start;
-  var right_size = right_end - right_start;
-  var line_x;
-
-  ctx.save();//s8
-  ctx.fillStyle = "rgb(240, 240, 240)";
-  if (left_size > 0) {
-    ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height);
-  }
-  if (right_size > 0) {
-    ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height);
-  }
-  ctx.fillStyle = "rgb(51, 51, 51)";
-  if (left_size > 0 && left_divider) {
-    line_x = (left_end * metrics.stack_width) - 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  if (right_size > 0 && right_divider) {
-    line_x = (right_start * metrics.stack_width) + 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  ctx.restore();//s8
-}
-
-function size_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var draw_name, draw_finetext, metrics;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  if (canvas.width !== 0 && canvas.height !== 0) {
-    return;
-  }
-  metrics = new LogoMetrics(canvas.getContext('2d'), 
-      logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height);
-    } else if (canvas.height === 0) {
-      canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width);
-    }
-  }
-}
-
-function draw_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, 
-      offset, col_index, motif_position, ssc;
-  ssc = false;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  ctx = canvas.getContext('2d');
-  //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be
-  metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      scale = 1;
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      scale = canvas.height / metrics.summed_height;
-      canvas.width = metrics.summed_width * scale;
-    } else if (canvas.height === 0) {
-      scale = canvas.width / metrics.summed_width;
-      canvas.height = metrics.summed_height * scale;
-    } else {
-      scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height);
-    }
-  }
-  // cache the raster based on the assumption that we will be drawing a lot
-  // of logos the same size and alphabet
-  if (typeof draw_logo_on_canvas.raster_cache === "undefined") {
-    draw_logo_on_canvas.raster_cache = [];
-  }
-  for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) {
-    raster = draw_logo_on_canvas.raster_cache[i];
-    if (raster.get_alphabet().equals(logo.alphabet) &&
-        Math.abs(raster.get_scale() - scale) < 0.1) break;
-    raster = null;
-  }
-  if (raster == null) {
-    raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width);
-    draw_logo_on_canvas.raster_cache.push(raster);
-  }
-  ctx = canvas.getContext('2d');
-  ctx.save();//s1
-  ctx.scale(scale, scale);
-  ctx.save();//s2
-  ctx.save();//s7
-  //create margin
-  ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top));
-  for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) {
-    pspm = logo.get_pspm(pspm_i);
-    offset = logo.get_offset(pspm_i);
-    //optionally draw name if this isn't the last row or is the only row 
-    if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) {
-      ctx.save();//s4
-      ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height));
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s4
-      ctx.translate(0, Math.round(metrics.name_height + 
-          Math.min(0, metrics.name_spacer - metrics.y_num_height/2)));
-    }
-    //draw scale
-    if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster);
-    ctx.save();//s5
-    //translate across past the scale
-    if (logo.y_axis) {
-      ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + 
-        metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2));
-    }
-    //draw the trimming background
-    if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) {
-      var left_start = offset * logo.get_xlate_nsyms();
-      var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms();
-      var left_divider = true;
-      if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) {
-        // no overlap
-        left_start = 0;
-        left_end = 0;
-        left_divider = false;
-      } else {
-        if (left_start < logo.get_xlate_start()) {
-          left_start = logo.get_xlate_start();
-        }
-        if (left_end > logo.get_xlate_end()) {
-          left_end = logo.get_xlate_end();
-          left_divider = false;
-        }
-        left_start -= logo.get_xlate_start();
-        left_end -= logo.get_xlate_start();
-        if (left_end < left_start) {
-          left_start = 0;
-          left_end = 0;
-          left_divider = false;
-        }
-      }
-      var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms();
-      //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms());
-      var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms());
-      var right_divider = true;
-      if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) {
-        // no overlap
-        right_start = 0;
-        right_end = 0;
-        right_divider = false;
-      } else {
-        if (right_start < logo.get_xlate_start()) {
-          right_start = logo.get_xlate_start();
-          right_divider = false;
-        }
-        if (right_end > logo.get_xlate_end()) {
-          right_end = logo.get_xlate_end();
-        }
-        right_start -= logo.get_xlate_start();
-        right_end -= logo.get_xlate_start();
-        if (right_end < right_start) {
-          right_start = 0;
-          right_end = 0;
-          right_divider = false;
-        }
-      }
-      draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider);
-    }
-    //draw letters
-    var xlate_col;
-    for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) {
-      ctx.translate(metrics.stack_pad_left,0);
-      col_index = Math.floor(xlate_col / logo.get_xlate_nsyms());
-      if (xlate_col % logo.get_xlate_nsyms() == 0) {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          motif_position = col_index - offset;
-          draw_stack_num(ctx, metrics, motif_position, raster);
-          draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster);
-        }
-      } else {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          ctx.save();// s5.1
-          ctx.translate(0, Math.round(metrics.stack_height));
-          // TODO draw a dot or dash or something to indicate continuity of the motif
-          ctx.restore(); //s5.1
-        }
-      }
-      ctx.translate(Math.round(metrics.stack_width), 0);
-    }
-    ctx.restore();//s5
-    ////optionally draw name if this is the last row but isn't the only row 
-    if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer));
-
-      ctx.save();//s6
-      ctx.translate(metrics.summed_width/2, metrics.name_height);
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s6
-      ctx.translate(0, metrics.name_height);
-    } else {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width));
-    }
-    //if not the last row then add middle padding
-    if (pspm_i != (logo.get_rows() -1)) {
-      ctx.translate(0, metrics.pad_middle);
-    }
-  }
-  ctx.restore();//s7
-  if (logo.fine_text.length > 0) {
-    ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom);
-    ctx.font = metrics.fine_txt_font;
-    ctx.textAlign = "right";
-    ctx.fillText(logo.fine_text, 0,0);
-  }
-  ctx.restore();//s2
-  ctx.restore();//s1
-}
-
-function create_canvas(c_width, c_height, c_id, c_title, c_display) {
-  "use strict";
-  var canvas = document.createElement("canvas");
-  //check for canvas support before attempting anything
-  if (!canvas.getContext) {
-    return null;
-  }
-  var ctx = canvas.getContext('2d');
-  //check for html5 text drawing support
-  if (!supports_text(ctx)) {
-    return null;
-  }
-  //size the canvas
-  canvas.width = c_width;
-  canvas.height = c_height;
-  canvas.id = c_id;
-  canvas.title = c_title;
-  canvas.style.display = c_display;
-  return canvas;
-}
-
-function logo_1(alphabet, fine_text, pspm) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  logo.add_pspm(pspm);
-  return logo;
-}
-
-function logo_2(alphabet, fine_text, target, query, query_offset) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  if (query_offset < 0) {
-    logo.add_pspm(target, -query_offset);
-    logo.add_pspm(query);
-  } else {
-    logo.add_pspm(target);
-    logo.add_pspm(query, query_offset);
-  }      
-  return logo;
-}
-
-/*
- * Specifies an alternate source for an image.
- * If the image with the image_id specified has
- * not loaded then a generated logo will be used 
- * to replace it.
- *
- * Note that the image must either have dimensions
- * or a scale must be set.
- */
-function alternate_logo(logo, image_id, scale) {
-  "use strict";
-  var image = document.getElementById(image_id);
-  if (!image) {
-    alert("Can't find specified image id (" +  image_id + ")");
-    return;
-  }
-  //if the image has loaded then there is no reason to use the canvas
-  if (image_ok(image)) {
-    return;
-  }
-  //the image has failed to load so replace it with a canvas if we can.
-  var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the image with the canvas
-  image.parentNode.replaceChild(canvas, image);
-}
-
-/*
- * Specifes that the element with the specified id
- * should be replaced with a generated logo.
- */
-function replace_logo(logo, replace_id, scale, title_txt, display_style) {
-  "use strict";
-  var element = document.getElementById(replace_id);
-  if (!replace_id) {
-    alert("Can't find specified id (" + replace_id + ")");
-    return;
-  }
-  //found the element!
-  var canvas = create_canvas(50, 120, replace_id, title_txt, display_style);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the element with the canvas
-  element.parentNode.replaceChild(canvas, element);
-}
-
-/*
- * Fast string trimming implementation found at
- * http://blog.stevenlevithan.com/archives/faster-trim-javascript
- *
- * Note that regex is good at removing leading space but
- * bad at removing trailing space as it has to first go through
- * the whole string.
- */
-function trim (str) {
-  "use strict";
-  var ws, i;
-  str = str.replace(/^\s\s*/, '');
-  ws = /\s/; i = str.length;
-  while (ws.test(str.charAt(--i)));
-  return str.slice(0, i + 1);
-}
-</script>
-    <script>
-var current_motif = 0;
-var dreme_alphabet = new Alphabet(data.alphabet, data.control_db.freqs);
-
-/*
- * Create a pspm for the given motif data
- */
-function motif_pspm(m) {
-  return new Pspm(m.pwm, m.id, 0, 0, m.nsites, m.evalue);
-}
-
-/*
- * Create a count matrix from the given motif data
- */
-function motif_count_matrix(motif) {
-  return motif_pspm(motif).as_count_matrix();
-}
-
-/*
- * Create a probablity matrix from the given motif data
- */
-function motif_prob_matrix(motif) {
-  return motif_pspm(motif).as_probability_matrix();
-}
-
-/*
- * Create a minimal meme format motif from the given motif data
- */
-function motif_minimal_meme(motif) {
-  return motif_pspm(motif).as_meme({
-    "with_header": true, 
-    "with_pspm": true,
-    "with_pssm": false,
-    "version": data["version"],
-    "alphabet": dreme_alphabet,
-    "strands": (data.options.revcomp ? 2 : 1)
-  });
-}
-
-/*
- * Fill in a template variable
- */
-function set_tvar(template, tvar, value) {
-  var node;
-  node = find_child(template, tvar);
-  if (node === null) {
-    throw new Error("Template does not contain variable " + tvar);
-  }
-  node.innerHTML = "";
-  if (typeof value !== "object") {
-    node.appendChild(document.createTextNode(value));
-  } else {
-    node.appendChild(value);
-  }
-}
-
-/*
- * Make a canvas with the motif logo drawn on it. 
- */
-function make_logo(motif, height, rc) {
-  var pspm = new Pspm(motif["pwm"]);
-  if (rc) pspm = pspm.copy().reverse_complement(dreme_alphabet);
-  var logo = new Logo(dreme_alphabet);
-  logo.add_pspm(pspm, 0);
-  var canvas = document.createElement('canvas');
-  canvas.height = height;
-  canvas.width = 0;
-  draw_logo_on_canvas(logo, canvas, false);
-  return canvas;
-}
-
-/*
- * Create a button designed to contain a single symbol
- */
-function make_sym_btn(symbol, title, action) {
-  var box, sbox;
-  box = document.createElement("div");
-  box.tabIndex = 0;
-  box.className = "sym_btn";
-  sbox = document.createElement("span");
-  if (typeof symbol == "string") {
-    sbox.appendChild(document.createTextNode(symbol));
-  } else {
-    sbox.appendChild(symbol);
-  }
-  box.appendChild(sbox);
-  box.title = title;
-  box.addEventListener('click', action, false);
-  box.addEventListener('keydown', action, false);
-  return box;
-}
-
-/*
- * Create a pair of text spans with different classes.
- * This is useful when using CSS to only display one of them.
- */
-function text_pair(txt1, cls1, txt2, cls2) {
-  var container, part1, part2;
-  container = document.createElement("span");
-  part1 = document.createElement("span");
-  part1.appendChild(document.createTextNode(txt1));
-  part1.className = cls1;
-  container.appendChild(part1);
-  part2 = document.createElement("span");
-  part2.appendChild(document.createTextNode(txt2));
-  part2.className = cls2;
-  container.appendChild(part2);
-  return container;
-}
-
-/*
- * Make a colourised sequence.
- */
-function make_seq(seq) {
-  var i, j, letter, lbox, sbox;
-  sbox = document.createElement("span");
-  for (i = 0; i < seq.length; i = j) {
-    letter = seq.charAt(i);
-    for (j = i+1; j < seq.length; j++) {
-      if (seq.charAt(j) !== letter) {
-        break;
-      }
-    }
-    lbox = document.createElement("span");
-    lbox.style.color = dreme_alphabet.get_colour(dreme_alphabet.get_index(letter));
-    lbox.appendChild(document.createTextNode(seq.substring(i, j)));
-    sbox.appendChild(lbox);
-  }
-  return sbox;
-}
-
-/*
- * Create a description element taking into account the newlines in the source text.
- */
-function make_description(text) {
-  var i, j, lines, p;
-  var container = document.createElement("div");
-  var paragraphs = text.split(/\n\n+/);
-  for (i = 0; i < paragraphs.length; i++) {
-    lines = paragraphs[i].split(/\n/);
-    p = document.createElement("p");
-    p.appendChild(document.createTextNode(lines[0]));
-    for (j = 1; j < lines.length; j++) {
-      p.appendChild(document.createElement("br"));
-      p.appendChild(document.createTextNode(lines[j]));
-    }
-    container.appendChild(p);
-  }
-  return container;
-}
-
-/*
- * Make the table header for the discovered motifs.
- */
-function make_motif_header() {
-  var row = document.createElement("tr");
-  add_text_header_cell(row, "", "", "motif_ordinal");
-  add_text_header_cell(row, "Motif", "pop_motifs_word", "motif_word");
-  add_text_header_cell(row, "Logo", "pop_motifs_logo", "motif_logo");
-  if (data.options.revcomp) {
-    add_text_header_cell(row, "RC Logo", "pop_motifs_rc_logo", "motif_logo");
-  }
-  add_text_header_cell(row, "E-value", "pop_motifs_evalue", "motif_evalue");
-  add_text_header_cell(row, "Unerased E-value", "pop_motifs_uevalue", "motif_evalue");
-  add_text_header_cell(row, "More", "pop_more", "motif_more");
-  add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit");
-  row.className = "more";
-  return row;
-}
-
-/*
- * Make a compact motif summary row for the discovered motifs.
- */
-function make_motif_row(tbody, ordinal, motif) {
-  var row = document.createElement("tr");
-  add_text_cell(row, "" + ordinal + ".", "motif_ordinal");
-  add_text_cell(row, motif["id"], "motif_word");
-  add_cell(row, make_logo(motif, 50, false), "motif_logo");
-  if (data.options.revcomp) {
-    add_cell(row, make_logo(motif, 50, true), "motif_logo");
-  }
-  add_text_cell(row, motif["evalue"], "motif_evalue");
-  add_text_cell(row, motif["unerased_evalue"], "motif_evalue");
-  add_cell(row, make_sym_btn(text_pair("\u21A7", "less", "\u21A5", "more"), "Show more information.", function(e) { toggle_class(tbody, "collapsed"); }, "\u21A5", ""), "motif_more");
-  add_cell(row, make_sym_btn("\u21E2", "Submit the motif to another MEME Suite program or download it.", function(e) { action_show_outpop(e, ordinal); }), "motif_submit");
-  return row;
-}
-
-/*
- * Make a sortable table of enriched matching rows.
- */
-function make_motif_words(motif) {
-  var row, i, match;
-  var table = document.createElement("table");
-  var thead = document.createElement("thead");
-  row = document.createElement("tr");
-  add_text_header_cell(row, "Word", "pop_match_word", "match_word", function(e) {sort_table(this, compare_words);});
-  add_text_header_cell(row, "Positives", "pop_match_pos", "match_count", function(e) {sort_table(this, compare_counts);});
-  add_text_header_cell(row, "Negatives", "pop_match_neg", "match_count", function(e) {sort_table(this, compare_counts);});
-  add_text_header_cell(row, "P-value", "pop_match_pval", "match_evalue", function(e) {sort_table(this, compare_evalues);});
-  add_text_header_cell(row, "E-value", "pop_match_eval", "match_evalue", function(e) {sort_table(this, compare_evalues);});
-  thead.appendChild(row);
-  table.appendChild(thead);
-  var tbody = document.createElement("tbody");
-  for (i = 0; i < motif.matches.length; i++) {
-    match = motif.matches[i];
-    row = document.createElement("tr");
-    add_cell(row, make_seq(match.seq), "match_word");
-    add_text_cell(row, match.p + " / " + data.sequence_db.count, "match_count");
-    add_text_cell(row, match.n + " / " + data.control_db.count, "match_count");
-    add_text_cell(row, match.pvalue, "match_evalue");
-    add_text_cell(row, match.evalue, "match_evalue");
-    tbody.appendChild(row);
-  }
-  table.appendChild(tbody);
-  return table;
-}
-
-/*
- * Make an expanded view of a discovered motif.
- */
-function make_motif_exp(tbody, ordinal, motif) {
-  "use strict";
-  var box, pspm, logo_box;
-  box = $("tmpl_motif_expanded").cloneNode(true);
-  toggle_class(box, "template", false);
-  box.id = "";
-  find_child(box, "tvar_logo").appendChild(make_logo(motif, 150, false));
-  if (data.options.revcomp) {
-    find_child(box, "tvar_rclogo").appendChild(make_logo(motif, 150, true));
-  }
-  set_tvar(box, "tvar_p", motif["p"]);
-  set_tvar(box, "tvar_p_total", data.sequence_db.count);
-  set_tvar(box, "tvar_n", motif["n"]);
-  set_tvar(box, "tvar_n_total", data.control_db.count);
-  set_tvar(box, "tvar_pvalue", motif["pvalue"]);
-  set_tvar(box, "tvar_evalue", motif["evalue"]);
-  set_tvar(box, "tvar_uevalue", motif["unerased_evalue"]);
-  set_tvar(box, "tvar_words", make_motif_words(motif));
-  var cell = document.createElement("td");
-  cell.colSpan = 8;
-  cell.appendChild(box);
-  var row = document.createElement("tr");
-  row.className = "more";
-  row.appendChild(cell);
-  return row;
-}
-
-/*
- * Convert a string containing a scientific number into the log of that number
- * without having an intermediate representation of the number.
- * This is intended to avoid underflow problems with the tiny evalues that
- * MEME and DREME can create.
- */
-function sci2log(scinum) {
-  "use strict";
-  var ev_re, match, sig, exp;
-  ev_re = /^(.*)e(.*)$/;
-  if (match = ev_re.exec(scinum)) {
-    sig = parseFloat(match[1]);
-    exp = parseInt(match[2]);
-    return Math.log(sig) + (exp * Math.log(10));
-  }
-  return 0;
-}
-
-/*
- * Create a table of discovered motifs. A fresh table body is used for each
- * motif to make hiding/showing rows with css easier.
- */
-function make_motifs() {
-  "use strict";
-  var i, row, tbody, motif, ordinal;
-  // make the motifs table
-  var container = $("motifs");
-  container.innerHTML = ""; // clear content
-  var table = document.createElement("table");
-  // add a header that is always shown
-  var thead = document.createElement("thead");
-  thead.appendChild(make_motif_header());
-  table.appendChild(thead);
-  for (i = 0; i < data.motifs.length; i++) {
-    ordinal = i + 1;
-    motif = data.motifs[i];
-    tbody = document.createElement("tbody");
-    tbody.className = "collapsed";
-    tbody.appendChild(make_motif_row(tbody, ordinal, motif));
-    tbody.appendChild(make_motif_exp(tbody, ordinal, motif));
-    // create a following header for every row except the last one
-    if ((i + 1) < data.motifs.length) tbody.appendChild(make_motif_header());
-    table.appendChild(tbody);
-  }
-  container.appendChild(table);
-}
-
-/*
- * Create a table showing all the alphabet symbols, their names and frequencies.
- */
-function make_alpha_bg(alph, freqs) {
-  function colour_symbol(index) {
-    var span = document.createElement("span");
-    span.appendChild(document.createTextNode(alph.get_symbol(index)));
-    span.style.color = alph.get_colour(index);
-    span.className = "alpha_symbol";
-    return span;
-  }
-  var table, thead, tbody, row, th, span, i;
-  // create table
-  table = document.createElement("table");
-  table.className = "inputs";
-  // create header
-  thead = document.createElement("thead");
-  table.appendChild(thead);
-  row = thead.insertRow(thead.rows.length);
-  if (alph.has_complement()) {
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    add_text_header_cell(row, "Bg.", "pop_alph_control");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "Bg.", "pop_alph_control");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-  } else {
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    add_text_header_cell(row, "Bg.", "pop_alph_control");
-  }
-  // add alphabet entries
-  tbody = document.createElement("tbody");
-  table.appendChild(tbody);
-  if (alph.has_complement()) {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      var c = alph.get_complement(i);
-      if (i > c) continue;
-      row = tbody.insertRow(tbody.rows.length);
-      add_text_cell(row, alph.get_name(i));
-      add_text_cell(row, "" + freqs[i].toFixed(3));
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, "~");
-      add_cell(row, colour_symbol(c)); 
-      add_text_cell(row, "" + freqs[c].toFixed(3));
-      add_text_cell(row, alph.get_name(c));
-    }
-  } else {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      row = tbody.insertRow(tbody.rows.length);
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, alph.get_name(i));
-      add_text_cell(row, "" + freqs[i].toFixed(3));
-    }
-  }
-  return table;
-}
-
-/*
- * Updates the format download text in the popup.
- * This is called when either the format or current motif changes.
- */
-function update_outpop_format(index) {
-  var motif = data.motifs[index];
-  var fn = [motif_count_matrix, motif_prob_matrix, motif_minimal_meme];
-  var suffix = ["_counts.txt", "_freqs.txt", ".meme"];
-  var format = parseInt($("text_format").value);
-  var text = fn[format](motif);
-  prepare_download(text, "text/plain", motif.id + suffix[format], $("outpop_text_dl"));
-  $("outpop_text").value = text;
-}
-
-/*
- * Updates the motif logos and format download text in the popup.
- * This is called whenever the current motif changes.
- */
-function update_outpop_motif(index) {
-  "use strict";
-  var motifs, motif, pspm, logo, canvas, num;
-  motifs = data["motifs"];
-  if (index < 0 || index >= motifs.length) {return;}
-  current_motif = index;
-  motif = motifs[index];
-  pspm = new Pspm(motif["pwm"]);
-  logo = new Logo(dreme_alphabet, "");
-  logo.add_pspm(pspm, 0);
-  canvas = $("outpop_logo");
-  canvas.width = canvas.width; // clear canvas
-  draw_logo_on_canvas(logo, canvas, false);
-  canvas = $("outpop_logo_rc");
-  canvas.width = canvas.width; // clear rc canvas
-  if (data.options.revcomp) {
-    pspm.reverse_complement(dreme_alphabet);
-    logo = new Logo(dreme_alphabet, "");
-    logo.add_pspm(pspm, 0);
-    draw_logo_on_canvas(logo, canvas, false);
-  }
-  num = $("outpop_num");
-  num.innerHTML = "";
-  num.appendChild(document.createTextNode("" + (index + 1)));
-  update_outpop_format(index);
-}
-
-
-/*
  * Initialise and display the download popup.
- */
-function action_show_outpop(e, ordinal) {
-  "use strict";
-  function init() {
-    "use strict";
-    var close_btn, next_btn, prev_btn, cancel_btn, do_btn;
-    var tab1, tab2, tab3;
-    var pnl1, pnl2, pnl3;
-    var format_list;
-    var tbl_submit, inputs, i, default_prog;
-    close_btn = $("outpop_close");
-    close_btn.addEventListener("click", action_hide_outpop, false);
-    close_btn.addEventListener("keydown", action_hide_outpop, false);
-    next_btn = $("outpop_next");
-    next_btn.addEventListener("click", action_outpop_next, false);
-    next_btn.addEventListener("keydown", action_outpop_next, false);
-    prev_btn = $("outpop_prev");
-    prev_btn.addEventListener("click", action_outpop_prev, false);
-    prev_btn.addEventListener("keydown", action_outpop_prev, false);
-    cancel_btn = $("outpop_cancel");
-    cancel_btn.addEventListener("click", action_hide_outpop, false);
-    do_btn = $("outpop_do");
-    do_btn.addEventListener("click", action_outpop_submit, false);
-    tab1 = $("outpop_tab_1");
-    tab1.tabIndex = 0;
-    tab1.addEventListener("click", action_outpop_tab, false);
-    tab1.addEventListener("keydown", action_outpop_tab, false);
-    tab2 = $("outpop_tab_2");
-    tab2.tabIndex = 0;
-    tab2.addEventListener("click", action_outpop_tab, false);
-    tab2.addEventListener("keydown", action_outpop_tab, false);
-    tab3 = $("outpop_tab_3");
-    tab3.tabIndex = 0;
-    tab3.addEventListener("click", action_outpop_tab, false);
-    tab3.addEventListener("keydown", action_outpop_tab, false);
-    pnl1 = $("outpop_pnl_1");
-    pnl2 = $("outpop_pnl_2");
-    pnl3 = $("outpop_pnl_3");
-    toggle_class(tab1, "activeTab", true);
-    toggle_class(tab2, "activeTab", false);
-    toggle_class(tab3, "activeTab", false);
-    pnl1.style.display = "block";
-    pnl2.style.display = "none";
-    pnl3.style.display = "none";
-    format_list = $("text_format");
-    format_list.addEventListener("change", action_outpop_format, false);
-    // setup program selection
-    tbl_submit = $("programs");
-    // when not dna, hide the inputs for programs that require dna motifs
-    toggle_class(tbl_submit, "alphabet_dna", dreme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets
-    // add a click listener for the radio buttons
-    inputs = tbl_submit.querySelectorAll("input[type='radio']");
-    for (i = 0; i < inputs.length; i++) {
-      inputs[i].addEventListener("click", action_outpop_program, false);
-    }
-    // ensure that a default program option is selected for DNA and Protein
-    default_prog = document.getElementById(dreme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo");
-    default_prog.checked = true;
-    action_outpop_program.call(default_prog);
-    // disable reverse-complement when not DNA
-    $("logo_rc_option").disabled = !dreme_alphabet.has_complement(); 
-    // set errorbars on when ssc is on
-    $("logo_ssc").addEventListener("change", action_outpop_ssc, false);
-  }
-  // store the focused element
-  action_hide_outpop.last_active = document.activeElement;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  // hide the help popup
-  help_popup();
-  // on first load initilize the popup
-  if (!action_show_outpop.ready) {
-    init();
-    action_show_outpop.ready = true;
-  }
-  update_outpop_motif(ordinal - 1);
-  // display the download popup
-  $("grey_out_page").style.display = "block";
-  $("download").style.display = "block";
-  $("outpop_close").focus();
-}
-
-/*
- * Hide the download popup.
- */
-function action_hide_outpop(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  $("download").style.display = "none";
-  $("grey_out_page").style.display = "none";
-  if (typeof action_hide_outpop.last_active !== "undefined") {
-    action_hide_outpop.last_active.focus();
-  }
-}
-
-/*
- * Show the next motif in the download popup.
- */
-function action_outpop_next(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif + 1);
-}
-
-/*
- * Show the previous motif in the download popup.
- */
-function action_outpop_prev(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif - 1);
-}
-
-/*
- * Highlight the selected row in the program list.
- */
-function action_outpop_program() {
-  "use strict";
-  var table, tr, rows, i;
-  tr = find_parent_tag(this, "TR");
-  table = find_parent_tag(tr, "TABLE");
-  rows = table.querySelectorAll("tr");
-  for (i = 0; i < rows.length; i++) {
-    toggle_class(rows[i], "selected", rows[i] === tr);
-  }
-}
-
-/*
- * Enable error bars when small sample correction is enabled.
- */
-function action_outpop_ssc() {
-  "use strict";
-  $("logo_err").value = $("logo_ssc").value;
-}
-
-/*
- * Submit the motif to the selected program.
- */
-function action_outpop_submit(e) {
-  "use strict";
-  var form, input, program, motifs;
-  // find out which program is selected
-  var radios, i;
-  radios = document.getElementsByName("program");
-  program = "fimo"; // default to fimo, since it works with all alphabet types
-  for (i = 0; i < radios.length; i++) {
-    if (radios[i].checked) program = radios[i].value;
-  }
-
-  motifs = motif_minimal_meme(data.motifs[current_motif]);
-  form = document.createElement("form");
-  form.setAttribute("method", "post");
-  form.setAttribute("action", site_url + "/tools/" + program);
-  
-  input = document.createElement("input");
-  input.setAttribute("type", "hidden");
-  input.setAttribute("name", "motifs_embed");
-  input.setAttribute("value", motifs);
-  form.appendChild(input);
-
-  document.body.appendChild(form);
-  form.submit();
-  document.body.removeChild(form);
-}
-
-/*
- * Download the format text.
- * Wire the link containing the data URI text to a download button so it looks
- * the same as the server submit stuff.
- */
-function action_outpop_download_motif(e) {
-  $("outpop_text_dl").click();
-}
-
-/*
- * Download the motif logo.
- * The EPS format can be calculated locally in Javascript
- */
-function action_outpop_download_logo(e) {
-  "use strict";
-  var pspm, logo, eps;
-  var logo_rc, logo_ssc, logo_width, logo_height;
-  var motif = data.motifs[current_motif];
-  if ($("logo_format").value == "0") { // EPS
-    logo_rc = ($("logo_rc").value == "1");
-    logo_ssc = ($("logo_ssc").value == "1");
-    logo_width = parseFloat($("logo_width").value);
-    if (isNaN(logo_width) || !isFinite(logo_width) || logo_width <= 0) logo_width = null;
-    logo_height = parseFloat($("logo_height").value);
-    if (isNaN(logo_height) || !isFinite(logo_height) || logo_height <= 0) logo_height = null;
-    // create a PSPM from the motif
-    pspm = motif_pspm(motif);
-    if (logo_rc) pspm.reverse_complement(dreme_alphabet);
-    logo = new Logo(dreme_alphabet);
-    logo.add_pspm(pspm, 0);
-    eps = logo.as_eps({"ssc": logo_ssc, "logo_width": logo_width, "logo_height": logo_height});
-    prepare_download(eps, "application/postscript", motif.id + ".eps");
-  } else {
-    $("logo_motifs").value = motif_minimal_meme(motif);
-    $("logo_form").submit();
-  }
-}
-
-/*
- * Change the selected tab in the download popup.
- */
-function action_outpop_tab(e) {
-  "use strict";
-  var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  tab1 = $("outpop_tab_1");
-  tab2 = $("outpop_tab_2");
-  tab3 = $("outpop_tab_3");
-  pnl1 = $("outpop_pnl_1");
-  pnl2 = $("outpop_pnl_2");
-  pnl3 = $("outpop_pnl_3");
-  do_btn = $("outpop_do");
-
-  toggle_class(tab1, "activeTab", (this === tab1));
-  toggle_class(tab2, "activeTab", (this === tab2));
-  toggle_class(tab3, "activeTab", (this === tab3));
-  pnl1.style.display = ((this === tab1) ? "block" : "none");
-  pnl2.style.display = ((this === tab2) ? "block" : "none");
-  pnl3.style.display = ((this === tab3) ? "block" : "none");
-  do_btn.value = ((this === tab1) ? "Submit" : "Download");
-  do_btn.removeEventListener("click", action_outpop_submit, false);
-  do_btn.removeEventListener("click", action_outpop_download_logo, false);
-  do_btn.removeEventListener("click", action_outpop_download_motif, false);
-  if (this === tab1) {
-    do_btn.addEventListener("click", action_outpop_submit, false);
-  } else if (this === tab2) {
-    do_btn.addEventListener("click", action_outpop_download_motif, false);
-  } else {
-    do_btn.addEventListener("click", action_outpop_download_logo, false);
-  }
-}
-
-/*
- * Update the text in the download format popup.
- */
-function action_outpop_format() {
-  update_outpop_format(current_motif);
-}
-
-/*
- * Find all text nodes in the given container.
- */
-function text_nodes(container) {
-  var textNodes = [];
-  var stack = [container];
-  // depth first search to maintain ordering when flattened 
-  while (stack.length > 0) {
-    var node = stack.pop();
-    if (node.nodeType == Node.TEXT_NODE) {
-      textNodes.push(node);
-    } else {
-      for (var i = node.childNodes.length-1; i >= 0; i--) {
-        stack.push(node.childNodes[i]);
-      }
-    }
-  }
-  return textNodes;
-}
-
-/*
- * Get the text out of a specific text node.
- */
-function node_text(node) {
-  if (node === undefined) {
-    return '';
-  } else if (node.textContent) {
-    return node.textContent;
-  } else if (node.innerText) {
-    return node.innerText;
-  } else {
-    return '';
-  }
-}
-
-/*
- * Get the text contained within the element.
- */
-function elem_text(elem, separator) {
-  if (separator === undefined) separator = '';
-  return text_nodes(elem).map(node_text).join(separator);
-}
-
-/*
- * Sort all rows in the first table body based on the column of the given element and the comparison function.
- * The sort is not very fast and is intended for small tables only.
- */
-function sort_table(colEle, compare_function) {
-  //find the parent of colEle that is either a td or th
-  var i, j;
-  var cell = colEle;
-  while (true) {
-    if (cell == null) return;
-    if (cell.nodeType == Node.ELEMENT_NODE && 
-        (cell.tagName.toLowerCase() == "td" || cell.tagName.toLowerCase() == "th")) {
-      break;
-    }
-    cell = cell.parentNode;
-  }
-  //find the parent of cell that is a tr
-  var row = cell;
-  while (true) {
-    if (row == null) return;
-    if (row.nodeType == Node.ELEMENT_NODE && row.tagName.toLowerCase() == "tr") {
-      break;
-    }
-    row = row.parentNode;
-  }
-  //find the parent of row that is a table
-  var table = row;
-  while (true) {
-    if (table == null) return;
-    if (table.nodeType == Node.ELEMENT_NODE && table.tagName.toLowerCase() == "table") {
-      break;
-    }
-    table = table.parentNode;
-  }
-  var column_index = cell.cellIndex;
-  // do a bubble sort, because the tables are so small it doesn't matter
-  var change;
-  var trs = table.tBodies[0].getElementsByTagName('tr');
-  var already_sorted = true;
-  var reverse = false;
-  while (true) {
-    do {
-      change = false;
-      for (i = 0; i < trs.length -1; i++) {
-        var v1 = elem_text(trs[i].cells[column_index]);
-        var v2 = elem_text(trs[i+1].cells[column_index]);
-        if (reverse) {
-          var tmp = v1;
-          v1 = v2;
-          v2 = tmp;
-        }
-        if (compare_function(v1, v2) > 0) {
-          exchange(trs[i], trs[i+1], table);
-          change = true;
-          already_sorted = false;
-          trs = table.tBodies[0].getElementsByTagName('tr');
-        }
-      }
-    } while (change);
-    if (reverse) break;// we've sorted twice so exit
-    if (!already_sorted) break;// sort did something so exit
-    // when it's sorted one way already then sort the opposite way
-    reverse = true;
-  }
-  // put arrows on the headers
-  var headers = table.tHead.getElementsByTagName('tr');
-  for (i = 0; i < headers.length; i++) {
-    for (j = 0; j < headers[i].cells.length; j++) {
-      var cell = headers[i].cells[j];
-      var arrows = cell.getElementsByClassName("sort_arrow");
-      var arrow;
-      if (arrows.length == 0) {
-        arrow = document.createElement("span");
-        arrow.className = "sort_arrow";
-        cell.insertBefore(arrow, cell.firstChild);
-      } else {
-        arrow = arrows[0];
-      }
-      arrow.innerHTML = "";
-      if (j == column_index) {
-        arrow.appendChild(document.createTextNode(reverse ? "\u25B2" : "\u25BC"));
-      }
-    }
-  }
-}
-
-/*
- * Swap two rows in a table.
- */
-function exchange(oRowI, oRowJ, oTable) {
-  var i = oRowI.rowIndex;
-  var j = oRowJ.rowIndex;
-   if (i == j+1) {
-    oTable.tBodies[0].insertBefore(oRowI, oRowJ);
-  } if (j == i+1) {
-    oTable.tBodies[0].insertBefore(oRowJ, oRowI);
-  } else {
-    var tmpNode = oTable.tBodies[0].replaceChild(oRowI, oRowJ);
-    if(typeof(oRowI) != "undefined") {
-      oTable.tBodies[0].insertBefore(tmpNode, oRowI);
-    } else {
-      oTable.appendChild(tmpNode);
-    }
-  }
-}
-
-/*
- * Compare two E-values which may be very small.
- */
-function compare_evalues(v1, v2) {
-  var e1 = sci2log(v1);
-  var e2 = sci2log(v2);
-  if (e1 < e2) return -1;
-  else if (e1 > e2) return 1;
-  return 0;
-}
-
-/*
- * Compare two counts.
- */
-function compare_counts(v1, v2) {
-  var re = /(\d+)\s*\/\s*\d+/;
-  var m1 = re.exec(v1);
-  var m2 = re.exec(v2);
-  if (m1 == null && m2 == null) return 0;
-  if (m1 == null) return -1;
-  if (m2 == null) return 1;
-  return parseInt(m2[1]) - parseInt(m1[1]);
-}
-
-/*
- * Compare two sequence words.
- */
-function compare_words(v1, v2) {
-  return v1.localeCompare(v2);
-}
-
-
-</script>
-    <style>
-/* The following is the content of meme.css */
-body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;}
-
-div.help {
-  display: inline-block;
-  margin: 0px;
-  padding: 0px;
-  width: 12px;
-  height: 13px;
-  cursor: pointer;
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==);
-}
-
-div.help:hover {
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==);
-}
-
-p.spaced { line-height: 1.8em;}
-
-span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;}
-
-p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-td.jump { font-size: 13px; color: #ffffff; background-color: #00666a;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps;
-  font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0;
-  font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal;
-  margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal;
-  margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h5 {margin: 0px}
-
-a.help { font-size: 9px; font-style: normal; text-transform: uppercase;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-div.pad1 { margin: 10px 5px;}
-
-div.pad2 { margin: 25px 5px 5px;}
-h2.pad2 { padding: 25px 5px 5px;}
-
-div.pad3 { padding: 5px 0px 10px 30px;}
-
-div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;}
-
-div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; }
-
-div.subsection {margin:25px 0px;}
-
-img {border:0px none;}
-
-th.majorth {text-align:left;}
-th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;}
-th.actionth {font-weight:normal; text-align:left;}
-
-.explain h5 {font-size:1em; margin-left: 1em;}
-
-div.doc {margin-left: 2em; margin-bottom: 3em;}
-
-th.trainingset {
-  border-bottom: thin dashed black; 
-  font-weight:normal; 
-  padding:0px 10px;
-}
-div.pop_content {
-  position:absolute;
-  z-index:50;
-  width:300px;
-  padding: 5px;
-  background: #E4ECEC;
-  font-size: 12px;
-  font-family: Arial;
-  border-style: double;
-  border-width: 3px;
-  border-color: #AA2244;
-  display:none;
-}
-
-div.pop_content > *:first-child {
-  margin-top: 0px;
-}
-
-div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, 
-div.pop_content h5, div.pop_content h6, div.pop_content p {
-  margin: 0px;
-}
-
-div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, 
-div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 {
-  margin-top: 5px;
-}
-
-div.pop_content p + p {
-  margin-top: 5px;
-}
-
-div.pop_content > *:last-child {
-  margin-bottom: 0px;
-}
-
-div.pop_content div.pop_close {
-  /* old definition */
-  float:right;
-  bottom: 0;
-}
-
-div.pop_content span.pop_close, div.pop_content span.pop_back {
-  display: inline-block;
-  border: 2px outset #661429;
-  background-color: #CCC;
-  padding-left: 1px;
-  padding-right: 1px;
-  padding-top: 0px;
-  padding-bottom: 0px;
-  cursor: pointer;
-  color: #AA2244; /*#661429;*/
-  font-weight: bold;
-}
-
-div.pop_content span.pop_close:active, div.pop_content span.pop_back:active {
-  border-style: inset;
-}
-
-div.pop_content span.pop_close {
-  float:right;
-  /*border: 2px outset #AA002B;*/
-  /*color: #AA2244;*/
-}
-
-div.pop_content:not(.nested) .nested_only {
-  display: none;
-}
-
-div.pop_back_sec {
-  margin-bottom: 5px;
-}
-
-div.pop_close_sec {
-  margin-top: 5px;
-}
-
-table.hide_advanced tr.advanced {
-  display: none;
-}
-span.show_more {
-  display: none;
-}
-table.hide_advanced span.show_more {
-  display: inline;
-}
-table.hide_advanced span.show_less {
-  display: none;
-}
-
-
-/*****************************************************************************
- * Program logo styling
- ****************************************************************************/
-div.prog_logo {
-  border-bottom: 0.25em solid #0f5f60;
-  height: 4.5em;
-  width: 24em;
-  display:inline-block;
-}
-div.prog_logo img {
-  float:left;
-  width: 4em;
-  border-style: none;
-  margin-right: 0.2em;
-}
-div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited {
-  margin:0;
-  padding:0;
-  font-family: Arial, Helvetica,  sans-serif;
-  font-size: 3.2em;
-  line-height: 1em;
-  vertical-align: top;
-  display: block;
-  color: #026666;
-  letter-spacing: -0.06em;
-  text-shadow: 0.04em 0.06em 0.05em #666;
-}
-div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited {
-  display: block;
-  margin:0;
-  padding:0;
-  font-family: Helvetica, sans-serif;
-  font-size: 0.9em;
-  line-height: 1em;
-  letter-spacing: -0.06em;
-  color: black;
-}
-
-div.big.prog_logo {
-  font-size: 18px;
-}
-
-</style>
-    <style>
-/* dreme output specific css */
-div.header {
-  position: relative;
-  overflow: hidden;
-  margin-top: 15px;
-  margin-bottom: 5px;
-  margin-right: 3px;
-  margin-left: 3px;
-}
-div.header > h2 {
-  font-size: 1.5em;
-  font-style: normal;
-  margin: 0;
-  font-variant: small-caps; 
-  font-family: Georgia, "Times New Roman", Times, serif;
-}
-div.header > span {
-  position: absolute;
-  right: 0;
-  bottom: 0;
-}
-
-div.template {
-  position: absolute;
-  z-index: 1;
-  left: 0;
-  top: 0;
-  visibility: hidden;
-}
-
-div.sym_btn {
-  display:inline-block;
-  text-decoration: underline;
-  cursor: pointer;
-  font-size: 20px;
-  line-height:20px; 
-  text-align: center;
-  width: 20px;
-  height: 20px;
-  color: blue;
-}
-div.sym_btn:hover {
-  color: white;
-  background-color: blue;
-}
-
-div.sym_btn.positioned {
-  position: absolute;
-  top: 0px;
-}
-
-div.box + div.box {
-  margin-top: 5px;
-}
-
-th.motif_ordinal {
-
-}
-td.motif_ordinal {
-  text-align: right;
-  padding-right: 10px;
-  font-weight: bold;
-  font-size: large;
-}
-th.motif_word {
-  padding-right: 10px;
-}
-td.motif_word {
-  font-size:15px; 
-  font-family: 'Courier New', Courier, monospace;
-  padding-right: 10px;
-}
-th.motif_logo {
-  padding-right: 10px;
-}
-td.motif_logo {
-  padding-right: 10px;
-}
-th.motif_evalue {
-  text-align:right;
-  padding-right: 10px;
-}
-td.motif_evalue {
-  text-align: right;
-  white-space: nowrap;
-  padding-right: 20px;
-}
-th.motif_more {
-  padding: 0 5px;
-}
-td.motif_more {
-  text-align: center;
-  padding: 0 5px;
-}
-th.motif_submit {
-  padding: 0 5px;
-}
-td.motif_submit {
-  text-align: center;
-  padding: 0 5px;
-}
-th.match_word {
-  padding-right: 10px;
-}
-td.match_word {
-  padding-right: 10px;
-  font-weight: bold;
-  font-size: large; 
-  font-family: 'Courier New', Courier, monospace;
-}
-th.match_evalue, th.match_count {
-  text-align: right;
-  padding-right: 10px;
-}
-td.match_evalue, td.match_count {
-  text-align: right;
-  white-space: nowrap;
-  padding-right: 20px;
-}
-
-div.tabArea {
-  font-size: 80%;
-  font-weight: bold;
-}
-
-.norc div.tabArea {
-  display: none;
-}
-
-span.tab, span.tab:visited {
-  cursor: pointer;
-  color: #888;
-  background-color: #ddd;
-  border: 2px solid #ccc;
-  padding: 2px 1em;
-  text-decoration: none;
-}
-span.tab.middle {
-  border-left-width: 0px;
-}
-div.tabArea.base span.tab {
-  border-top-width: 0px;
-}
-div.tabArea.top span.tab {
-  border-bottom-width: 0px;
-}
-
-span.tab:hover {
-  background-color: #bbb;
-  border-color: #bbb;
-  color: #666;
-}
-span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited {
-  background-color: white;
-  color: black;
-  cursor: default;
-}
-div.tabMain {
-  border: 2px solid #ccc;
-  background-color: white;
-  padding: 10px;
-}
-div.tabMain.base {
-  margin-top: 5px;
-  display: inline-block;
-  max-width: 98%;
-}
-
-div.tabMain.top {
-  margin-bottom: 5px;
-}
-
-div.grey_background {
-  position:fixed; 
-  z-index: 8;
-  background-color: #000;
-  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
-  opacity: 0.5;
-  left: 0;
-  top: 0;
-  width: 100%;
-  height: 100%;
-}
-
-div.popup_wrapper {
-  position:fixed; 
-  z-index:9;
-  width:100%; 
-  height:0; 
-  top:50%; 
-  left:0;
-}
-
-div.popup {
-  width: 600px; 
-  z-index:9;
-  margin-left: auto;
-  margin-right: auto;
-  padding: 5px;
-  background-color: #FFF;
-  border-style: double;
-  border-width: 5px;
-  border-color: #00666a;
-  position:relative; 
-}
-div.close {
-  cursor: pointer;
-  border: 1px solid black; 
-  width:15px; 
-  height:15px; 
-  line-height:15px; /* this causes vertical centering */
-  text-align:center; 
-  background-color:#FFF; 
-  color:#000; 
-  font-size:15px;
-  font-family:monospace;
-}
-
-div.close:hover {
-  color:#FFF;
-  background-color:#000; 
-}
-
-div.navnum {
-  width:100%; 
-  height:20px; 
-  line-height:20px; 
-  text-align:center; 
-  font-size:medium;
-}
-
-div.navarrow {
-  font-size: 30px;
-  text-decoration:none;
-  cursor: pointer;
-  -moz-user-select: none;  
-  -webkit-user-select: none;  
-  -ms-user-select: none;
-}
-
-div.navarrow > span.inactive {
-  display: inline;
-}
-div.navarrow > span.active {
-  display: none;
-}
-
-div.navarrow:hover > span.active {
-  display: inline;
-}
-div.navarrow:hover > span.inactive {
-  display: none;
-}
-
-table.programs {
-  width: 100%;
-}
-
-table.programs tr {
-  background-color: #EFE;
-}
-
-table.programs tr.selected {
-  background-color: #262;
-  color: #FFF;
-}
-
-table.programs tr.dna_only {
-  display: none;
-}
-
-table.programs.alphabet_dna tr.dna_only {
-  display: table-row;
-}
-
-table.inputs {
-  margin-top: 20px;
-  border-collapse:collapse;
-}
-table.inputs * td, table.inputs * th {
-  padding-left: 15px;
-  padding-right: 15px;
-  padding-top: 1px;
-  padding-bottom: 1px;
-}
-
-/* program settings */
-span.strand_none, span.strand_given, span.strand_both {
-  display: none;
-}
-td.none span.strand_none, td.given span.strand_given, td.both span.strand_both {
-  display: inline;
-}
-
-/* show the expanded motif only when the collapsed one is hidden */
-tbody *.less, tbody.collapsed *.more {
-  display: none;
-}
-
-tbody.collapsed *.less {
-  display: inline;
-}
-
 </style>
   </head>
   <body data-scrollpad="true">
     <!--  -->
     <div id="grey_out_page" class="grey_background" style="display:none;">
-    </div>
-
-    <!-- Help popups -->
-    <div class="pop_content" id="pop_">
-      <p>Help poup.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_motifs_word">
-      <p>
         The name of the motif uses the IUPAC codes for nucleotides which has 
         a different letter to represent each of the 15 possible combinations.
-      </p>
-      <p>
         The name is itself a representation of the motif though the position
-        weight matrix is not directly equalivant as it is generated from the
+        weight matrix is not directly equivalent as it is generated from the
         sites found that matched the letters given in the name.
-      </p>
-      <p>
-        <a id="doc_alphabets_url" href="#">
-        Read more about the MEME suite's use of the IUPAC alphabets.
-        </a>
-        <script>$("doc_alphabets_url").href = site_url + "/doc/alphabets.html";</script>
-      </p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_logo">
       <p>The logo of the motif.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_rc_logo">
       <p>The logo of the reverse complement motif.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_evalue">
       <p>The E-value is the enrichment p-value times the number of candidate 
         motifs tested.</p>
       <p>The enrichment p-value is calculated using Fisher's Exact Test for 
         enrichment of the motif in the positive sequences.</p>
       <p>Note that the counts used in Fisher's Exact Test are made after 
         erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motifs_uevalue">
       <p>The E-value of the motif calculated without erasing the sites of 
         previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_more">
       <p>Show more information on the motif.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_submit_dl">
       <p>Submit your motif to another MEME Suite program or download your motif.</p>
       <h5>Supported Programs</h5>
-      <dl>
         <dt>Tomtom</dt>
         <dd>Tomtom is a tool for searching for similar known motifs. 
-          </dd>
         <dt>MAST</dt>
         <dd>MAST is a tool for searching biological sequence databases for 
           sequences that contain one or more of a group of known motifs.
-          </dd>
         <dt>FIMO</dt>
         <dd>FIMO is a tool for searching biological sequence databases for 
           sequences that contain one or more known motifs.
-          </dd>
-        <dt>GOMO</dt>
-        <dd>GOMO is a tool for identifying possible roles (Gene Ontology 
+        <dt>GOMo</dt>
+        <dd>GOMo is a tool for identifying possible roles (Gene Ontology 
           terms) for DNA binding motifs.
-          </dd>
         <dt>SpaMo</dt>
         <dd>SpaMo is a tool for inferring possible transcription factor
           complexes by finding motifs with enriched spacings.
-          </dd>
-      </dl>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_positives">
-      <p># positive sequences matching the motif / # positive sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_negatives">
-      <p># negative sequences matching the motif / # negative sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_pvalue">
-      <p>The p-value of Fisher's Exact Test for enrichment of the motif in 
-        the positive sequences.</p>
-      <p>Note that the counts used in Fisher's Exact Test are made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_evalue">
-      <p>The E-value is the motif p-value times the number of candidate motifs 
-        tested.</p>
-      <p>Note that the p-value was calculated with counts made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_uevalue">
-      <p>The E-value of the motif calculated without erasing the sites of 
-        previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_word">
-      <p>All words matching the motif whose uncorrected p-value is less than
-      <span id="help_add_pv_thresh"></span>.</p>
-      <script>$("help_add_pv_thresh").innerHTML = data.options.add_pv_thresh;</script>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_pos">
-      <p># positive sequences with matches to the word / # positive sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_neg">
-      <p># negative sequences with matches to the word / # negative sequences.</p>
-      <p>Note these counts are made after erasing sites that match previously
-        found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_pval">
-      <p>The p-value of Fisher's Exact Test for enrichment of the word in 
-        the positive sequences.</p>
-      <p>Note that the counts used in Fisher's Exact Test are made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_match_eval">
-      <p>The word p-value times the number of candidates tested.</p>
-      <p>Note that the p-value was calculated with counts made after 
-        erasing sites that match previously found motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_source">
-      <p>The sequence file used by DREME to find the motifs.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_alph">
-      <p>The alphabet of the sequences.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_count">
-      <p>The count of the sequences.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_alph_name">
-      <p>The name of the alphabet symbol.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_alph_control">
-      <p>The frequency of the alphabet symbol in the control dataset.</p>
-      <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <!-- templates -->
-
-    <div class="template box expanded_motif" id="tmpl_motif_expanded">
-      <div>
-        <span class="tvar_logo"></span>
-        <span class="tvar_rclogo"></span>
-      </div>
-      <h4>Details</h4>
-      <table class="details">
-        <thead>
-          <tr>
-            <th class="match_count">Positives <div class="help" data-topic="pop_motif_positives"></div></th>
-            <th class="match_count">Negatives <div class="help" data-topic="pop_motif_negatives"></div></th>
-            <th class="match_evalue">P-value <div class="help" data-topic="pop_motif_pvalue"></div></th>
-            <th class="match_evalue">E-value <div class="help" data-topic="pop_motif_evalue"></div></th>
-            <th class="match_evalue">Unerased E-value <div class="help" data-topic="pop_motif_uevalue"></div></th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr>
-            <td class="match_count">
-              <span class="tvar_p"></span> / <span class="tvar_p_total"></span>
-            </td>
-            <td class="match_count">
-              <span class="tvar_n"></span> / <span class="tvar_n_total"></span>
-            </td>
-            <td class="tvar_pvalue match_evalue"></td>
-            <td class="tvar_evalue match_evalue"></td>
-            <td class="tvar_uevalue match_evalue"></td>
-          </tr>
-        </tbody>
-      </table>
-      <h4>Enriched Matching Words</h4>
-      <div class="tvar_words"></div>
-    </div>
-
-
-    <div class="popup_wrapper">
-      <div class="popup" style="display:none; top: -150px;" id="download">
-        <div>
-          <div style="float:right; ">
-            <div id="outpop_close" class="close" tabindex="0">x</div>
-          </div>
-          <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2>
-          <div style="clear:both"></div>
-        </div>
-          <div style="height:100px">
-            <div style="float:right; width: 30px;">
-              <div id="outpop_prev" class="navarrow" tabindex="0">
-                <span class="inactive">&#8679;</span><span class="active">&#11014;</span>
-              </div>
-              <div id="outpop_num" class="navnum"></div>
-              <div id="outpop_next" class="navarrow" tabindex="0">
-                <span class="inactive">&#8681;</span><span class="active">&#11015;</span>
-              </div>
-            </div>
-            <div id="logo_box" style="height: 100px; margin-right: 40px;">
-              <canvas id="outpop_logo" height="100" width="250"></canvas>
-              <canvas id="outpop_logo_rc" height="100" width="250"></canvas>
-            </div>
-          </div>
-          <div>
-            <!-- tabs start -->
-            <div class="tabArea top">
-              <span id="outpop_tab_1" class="tab">Submit Motif</span><span
-                id="outpop_tab_2" class="tab middle">Download Motif</span><span 
-                id="outpop_tab_3" class="tab middle">Download Logo</span>
-            </div>
-            <div class="tabMain top">
-              <!-- Submit to another program -->
-              <div id="outpop_pnl_1">
-                <h4 class="compact">Submit to program</h4>
-                <table id="programs" class="programs">
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td>
-                    <td><label for="submit_tomtom">Tomtom</label></td>
-                    <td><label for="submit_tomtom">Find similar motifs in
-                        published libraries or a library you supply.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td>
-                    <td><label for="submit_fimo">FIMO</label></td>
-                    <td><label for="submit_fimo">Find motif occurrences in
-                        sequence data.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="mast" id="submit_mast"></td>
-                    <td><label for="submit_mast">MAST</label></td>
-                    <td><label for="submit_mast">Rank sequences by affinity to
-                        groups of motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td>
-                    <td><label for="submit_gomo">GOMo</label></td>
-                    <td><label for="submit_gomo">Identify possible roles (Gene
-                        Ontology terms) for motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td>
-                    <td><label for="submit_spamo">SpaMo</label></td>
-                    <td><label for="submit_spamo">Find other motifs that are
-                        enriched at specific close spacings which might imply the existance of a complex.</label></td>
-                  </tr>
-                </table>
-              </div>
-              <!-- download text format  -->
-              <div id="outpop_pnl_2">
-                <div>
-                  <label for="text_format">Format:</label>
-                  <select id="text_format">
-                    <option value="0">Count Matrix</option>
-                    <option value="1">Probability Matrix</option>
-                    <option value="2">Minimal MEME</option>
-                  </select>
-                </div>
-                <textarea id="outpop_text" name="content"
-                  style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" 
-                  rows="8" readonly="readonly" wrap="off"></textarea>
-                <a id="outpop_text_dl" download="meme.txt" href=""></a>
-              </div>
-              <!-- download logo format -->
-              <div id="outpop_pnl_3">
-                <form id="logo_form" method="post" action="">
-                  <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script>
-                  <input type="hidden" name="program" value="DREME"/>
-                  <input type="hidden" id="logo_motifs" name="motifs" value=""/>
-                  <table>
-                    <tr>
-                      <td><label for="logo_format">Format:</label></td>
-                      <td>
-                        <select id="logo_format" name="png">
-                          <option value="1">PNG (for web)</option>
-                          <option value="0">EPS (for publication)</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_rc">Orientation:</label></td>
-                      <td>
-                        <select id="logo_rc" name="rc1">
-                          <option value="0">Normal</option>
-                          <option value="1" id="logo_rc_option">Reverse Complement</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_ssc">Small Sample Correction:</label></td>
-                      <td>
-                        <input type="hidden" id="logo_err" name="errbars" value="0"/>
-                        <select id="logo_ssc" name="ssc">
-                          <option value="0">Off</option>
-                          <option value="1">On</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_width">Width:</label></td>
-                      <td>
-                        <input type="text" id="logo_width" size="4" placeholder="default" name="width"/>&nbsp;cm
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_height">Height:</label></td>
-                      <td>
-                        <input type="text" id="logo_height" size="4" placeholder="default" name="height"/>&nbsp;cm
-                      </td>
-                    </tr>
-                  </table>
-                </form>
-              </div>
-              <!-- Buttons -->
-              <div>
-                <div style="float:left;">
-                  <input type="button" id="outpop_do" value="Submit" />
-                </div>
-                <div style="float:right;">
-                  <input id="outpop_cancel" type="button" value="Cancel" />
-                </div>
-                <div style="clear:both;"></div>
-              </div>
-            </div>
-        </div>
-      </div>
-    </div>
-
-
-
     <!-- Page starts here -->
-    <div id="top" class="pad1">
-      <div class="prog_logo big">
-        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAAAd0SU1FB9wLGwYBMoyhiwgAACAASURBVHja7Z13fFRV9sC/503JpIeaKFVREBQVEEFFQVcUuyDouuraFoVV17IrayPjDP4U3XXXhrpiXxuKKF1dV8WCiEgXRUAQlJIYAilMf+f3x3szmVSSkICyOR/eh8wr9717z7mn3XPOhRZogRbYLQiQJiJGy1D8D0LHjh1/XrZsmQK9gU3Ap0mE0QL7KTx411136Z///GdV1ZhpmvrYY4+pqsZUVceNG6dAz5Zh2j/hnpKSEtM0TVVVrfq/qmosFtMxY8Yo8CPQHejucDjyfm0dbZFp1WGaxmJ3ppSWSiQUIhQKIWJxehGhpKSE1LQ0uvfowQHZ2exYt65D8dq1qzUaXR2LxTYCP7UM4a8MVFWA9mY0+nLhmjV63LHH6vMvvKATJkzQfn366CtPPKEDjjtOV61apeeedZZqMKgaCKju2KFmYaFqJKJaWqqqqoACR/9a+u5sQT+IiD77zDPbKCnR00aOZPHSpcydO5fLf/972rdvTzgcZsEnnzDmqquYPmsW/PxzxbMOB4NPOokRZ5+tB3XrJsAUYKmqOkQkVuVVKUBGDRbGz/vSvPlfBHcVDpB7XP/+Gz9/5x1mzJ/P1i1buPbaa1m/fj1du3alW5curPvqqxobCoVCpKSkIO3a1Wc89bCuBy51OZwu1RgiBqGYGf1uw09/Bd5t4QDNT+wKfPXoxIl9jzm6gkt/OmsWn3/4oRIMyrfLlzPuzjvp27cvHTt2ZNGXX+K/7baaW8zJITM1lflz5wL8ZtWqVWm9evXaVcv7Q2cN6hM68tAuR2MIhirFpUEef+MdBFK1RQQ0v6g/MC9PLxk5Uq+/7joIBECSJmwwKKqKR4RTTjyR0885h2effZaNa9Ywa9YstKQkoQzGwSwuJhwIwK5ddO3a9b+9evWqjQPoSf16qUOQles2gYLL5WDaBwu5dtSw8L/eeKdFB2huaJWTo0NOOMF8wOs1qiG/QhfghtGj+dMNN4DblhJlZVBaWg35AIYI7NgBbjcbNmwwjz766I+WLl16OfCDfUs3YB3AAdke6d7tYNR2Jv6wuZA2rbIwxbFPxfD/jBn4t7vv5uUnnzRsTNelEEIoBKWl1qH1YM7hMAXffWcsWbBgMLAB+AgoAtYC5SJCp86dUTPG89M/ACASi1mDH4u2+AH2Bvzhpps+p3Xrmi+mp2Oa5h613y4nh1WLFuHxeHTq1KmDVbWVqjJjxozU4cOH88rsj1FXKteMOh3D4eQ/ny/hjnwfn32zyWUYxtAWK6D54YW1X355WbcePSr32elk1EUX8cYbb1gzvvG+BEzA2b49msQ1RARVZe7cuTzzjwl079qB6R8s4PhThjF58mQADjroIDZs2CAtBLAXFMEaTwaDe4R8ALKzEbcbVUVVE4hP/t/lctGnTx9+c8op3HvffQm9YubMmZx77rlic2Rzbw7I/5oreNzJgwapqqI7dqA7d1pHSUnyVG5Uw0MGD6agoCCB7IQ+kcQFIpEIkydPZszYsQmuoaqEw2H95JNPdOHChTHgervJT4DTWzhA08OjwGWT7r8/u3xXhckei8W47c47obwcMjMtsy9OEHUojdhI/M2oUXwwb16dIqKqJVFaWkJmZlal60OGDJk7b968M1SVsWPH8uSTTxYC7WmBvQIbV6xcGQK0aM0a3bRsmW5fu1b1559NLSzUakdBgXXYawC7A0CXLVtW7fzMmTOrnTNNU03T1OXLl5u1ia4WaA4lQbXVmDFjcoFcIHfJ0qUXqKqaBQXVCMC0kZ+MtNogEAjoli1bar0ef/bee++tiXDMFszsQ+jbt+/r1111leqOHZWJIBBQ7913azgc1qaAeABCVUKqQgBvAO8BL7RgZu9xhd6nnnpqNLpzp8559VXVkhL9ZOZM/X79+j1Bdm1sP2KaZix+rqioSBctWqSqejPw2KhRo+IPxjp06KC0rOg2p82AkE8O4zkbiAJ6ySWXVJLRjUW2qmqrVq30+eefr3RrFWYQf4+pqjpq1Khq7zYMY4/0g5agxppgPCnARcC1GPRFSUF5gAn0VNVz69vMkiVLWLNmDRdeeGGt93Tu3JmNGzfu1slkGAZbt24lNze30jWHw4Fpmo3GYwv7SIY7GYKD8UA/INteQFaKEL7iqBNPPPHYhjTXp08f+vTpU+O1rVu38sc//pE5c+ZgmiaGUbtLJu5HqMNdfYXT6VwdjUY/b+EAdXm9DMNlmmYrAA/I6SKe6ao/JM38v2Pw52oPrgV9Seu06RugTzT62ZogNzeXbdu2ISIYhpFmmmagxRNYC7Gbptlnw5Il29Z/9dW2H1ev3jpddQPwQ79+/f5k32NNsSpStdeSXonZ99JLL+0RAkWEG2+8samUU7Zt2xb3KKppmptbREAd43Vwly5fdDniCLS42DoRDILb3fnRiRPzLzzrrIdVlX9MeoKCw36GSMUIpaWlJVh0UVHRHiPt4YcfbhqKruxyFiDUIsfrhpWAfjprlpplZVZUb1UHTyBgRfnGD1Xt0KlTvR0++xIcDodecMEFCvxDVXv/79nrM2lnzuAanUWdnV8InzocDu104IGqO3aY+vPPWqOrt7BQdds2jcRijTLzmsg5VO93RCyCNa+88kotKCgosTnC6f8rIkD/PGcsQ044AYAZL9XOgkdfdlnxibEYuzZvjkpOjrN1q1Yc1Llz4p4Lzz+fcePH21qBidMwGDhwIA8++CAn2O1XZcWjR4/mmmuuoX///k2ruIjw9ttvc/755+9enjudAGIYBu3atctUVXr16vXOqlWrOovIpv169pszeX/yP/9Z+0xOPqLRymy+yvHp7Nl61tChetbQoTpt6tRaF2x+qSLh6quvTvw9adIkE3hrw4YNjv3WDNSZDEZ5/6Hl9zhvGjsWzKZbOykH0tu2Tdjie9H9XCmYpCHPjR49mqeffjqZi5iq+jQwVkTM/c4MVCUfcM564y6u+8ufmxRRV1xxxb6xWUUSR0Ofa2clqdgSzOTVV181otHoNTNnzjxjv9MBzBl0EeUUNeD9e2Dkfc/z53xPnUGeN4wezcFHHlmvwX1j1iwAJk6cuNf7tmLFit16CavCww8/jMPhSHZ+sWDBAi688EL97W9/O0tVPSIS2m9EgDmda8XgSRRFKvqjigooQh85h+Xx819BaxO2nQ/ODGAjrA5A9WyeTA4kg1y2UCnO75cOJ510Eh9//HGN10aOHKmLFi2a98MPP5y834gAEYaikIx8+7wAhpr8oabnpgMvA5/Av4C+1Y5bWMRoIJUXBg0apL8G5KsqH3/8cY0iUFWZOnWqnHfeeUNUtcPeJoBUwFPHkdoYbqQ+BBiitYVMWYs57iqnYskv0trEoGlzjXGMX7du3R3RaNMlcDz55JN1c7VGKrFVg1DjiE++duutt6phGAtV1dhbBHBW6+zM0iM6tSkccFTPwv6HH1o44KiehUd0ap34PahPr0Kga4MJ4CjOUWgjUgvxKIiDc8yZpMVPReEkrZ/uk2hz69atr7344ot2i3sOY8aMqRXJt99+e40yf9q0aU2iRHbs2FEGDhx4wPr1689sbiXwcDEck3My044ePWKo4dRwRjQUILPtgZRt34rDeTCxWJSs1rk8PmUOKSkeCYWCDSR5OiXQpLYggLCCS8TCv0CmmBWELtDNThPeKZBdzzdtuPrqqyU1NVXPPPNMsrKyqs26hkJtil12dnaN7HvEiBEN1kPatGnD9OnTOe+88yqdnzRpkoiIpzk5wMnZGWkrhxxz+HG3XHRqqsPplPKyMlxZ7dkVCODMaEtZeRlpOe3419S5dOt8ANFYrDHy/5i4wocgKH9Xg0MFvkiewVolqNKexu+p5TFIq+/7fve733Wcm5PzStzbJyK43e4mHbjbbrutmgyvmmdQX+jatSu1ia4tW7asbS4O0Mntcn5wxx9GaUlJiQQiiivFQKNhHAaEy8pwuj1kt8njqTfepXvXA+nToyvzvlzZCK2HYxGsf8oKPNxunE5U3+Kv6uBdBI8qHlEOB76sLiBQA04GfPV840/dIPDEV1/dd5lhXP0TLAmrzveIyKlnnXV3z549uSknp/Qf27dnDh06lGHDhu2RLG+M4ygOmzZt4swzz+SCCy6o8f7PPvtsS3MRwPI22Zn61LT3JRwoQw0noIg4UP0Wp8uNwzAQEbp3PZDB/Xqxs2xXwzs8B6dGcNvs3BST2+V0ogAynI/N6SwTYYCCC8FTnQEkwNEwqYNDwbgZCoAPROSBL6CLMXv2rctmz85eC5suX7Yss3fv5lmMi0QiqGo1ziMiZGdns2LFCjp37kynTp3w+/01EoqtDJY0FwEEI6FAzgF5OQw6vi/ZuZ2qsDTFYRj4n5pKSXmAwcc0cqBCHC0ODrFlf1TdLK6CqWUKA5IxvhwkDCfsoSY3AHhCLQKIZ+x4gNgy0KOgpP9RR5kh1QNVVZrafEx28lRF7M6dO+vFXbZt2zYzLiKbRQfof2QvBg/sh5HZlrJdAcp2BSgPBO0jRFnAUvaGDuhNWKVR+XhacQiwQkJsq9RRk9fFVgvjKCgHUTjY/j0TCNOApItnraacWAUgNgI9kr4n8Hu4HejxCVwhIufbkT9ah07RoD5PmTIFwzBqVCDrS2hjxozh0ksvzW1WP4DGPTGqlO/4GTEMMGMJRBticGiXA4hEYxAO1J17V7sCmJpkq70vw6shsrwWV6fadPGFQkSg+6dW9a7dQtuK7glgSAXxuA3IFbgnaQhmPvroo2kvvviiTJkyhfnz51ebsa+++mqD+nzRRRdVUxAbsu6hqvztb3/ToqKi9LfeessNuJqFAFJcTsx4UqXhsIY8o03i7x+3FfH1uk10ymvbKOTbLP4uxEaFWb3CVtw5ZP9f0yw37OttU6mkI9QK7SALONh+7geFTp9bhHBI8jsdkGkTQeDyyy+XRy6++MCJQ4aQ4jJwuxy4nQYOw2DqM4/w6KOPNsi/EJ/p4XCYYDCIiDBz5sz6IF9FhKysLFHVZ4YPH74DiDQLAfxnwTI8bhcA6QceCmrCrh1JyFGcDgebC7ZbMe+N0XohB0BNtkuUFdUNapYqrBTlWnawIPnRKm8z+sHO+rzTsPP3HfCdAcUKrRwWAcTZglj0WNmpNV+15OgLYMLYU/nsoYP4+w0D6NPzIFYu/YqbLDEhDZ3NW7duZf369agq55xzTr0IZ+TIkfTs2fMqEflns4qAXcEQD7000+pQeBehcMTqY0paJXZkGILDYbDw63UYTkcjGQGFMrJ6oUXjZEKEOEHOZbJcTsy+1wW018revtKvbGKqr3SzxYgA6tiNFxFg1nhy+x4coaA0g+8Lc1mxqSsOw8CMmYrAIYcc8pWIMGHCBD744IN4mjGzZ8+u9UM6d+5Mz5496yP7TWDh+PHj5c0337z5m2++eS75YnNYAUuBYcUlZRTtLKNtNjhTMyAWhkAJVCm57zAMPl60ktRUD4FG+Nu1jjUEYxQlVe51A22A4hDsTIEihdxwPXUAJ7QywWXP9gKgvQluhSyjMmEkOqmzOBqTawpLiKalf+WcumQkaZ7VRCMRwsEyycnKCq9bt+4e4G2v1wswbs2aNfcfcsghnH322XsU26CqFBQUGHl5eZMsCca/apSDTQxnAEsNw+Bfb7yDw+nAiIYs5ljDfguC4HQ5oQEeOX2LTsDRtgqwraHjIrDhBNgKfA+kOmFIPblNOhADchXuAGKm1auOSRbJarGqh6PT6YPJuTj4dvgDrPv7zJNp3+pHwsEQS77bqNlpLkrLylxVfBEP9OvXL7t169bFzzzzTKMJIO4YysvLU9216wWgNRDYGwQAdrFkj8dj6WmGUaupVx4MIohCDXK8ts45SMewuJdq40usaoUdbzRABDgU3hZrrwBxWs/GrdJLgamAQ+dyACnI1PlDNslZW5Z/tvxC98at82MSLg+nOwkhEvnHy+8QicYEeDP5JSUlJSXFxcVnXH311Yfcd999DepTfJFpxIgRiAgbFi+Oh8gJtWnCzQBvJ3ynBdvrObkaKPs18aDRAIRrfcVHLc9nWRYoOTbCU0LWgpJD4Zn+VoiBiIGDCA+tWt/5xElPnb/11uzhOfD6tNUb1sy654XZcx+c8v5MPPpM4Q0l5yb67k36tnyuwcsaYN2bb7652lbidzvjwUpIFZFvZ8yY8U9AFi1bJpgmpw4e7Hn8iSfa7y0C2BFXmMLRmGUFZOVZXKBKR9I8KbYzr/khDVphKYJxKGggAXSsgWhjapmBAfueoKTQ86ftbd4cNvZv342KPtj3b/4FC4C/AOfbxygC/BGYjJerKymY+dyNn6fwsR1g8eLFh4kFNdr+yev9IsLAgQMBnjFN8xawah8RCjH12Wfd2dnZf9pbBHCl9U1JXj61TfHUrEZX4tpTiMJRgEcrMPiuzbu7NcDqSDYHDCzF0p0w5WBtaSDd3fGKDwdc1/rO464bt+kZbmRrjY35yQMW4+VBNNH0kYnr3sS5/r17917bt29fzjzzzER0kmmaiAiHdu/OgL59WfzBB0QikUqv+L/HHoNWrcjOztY/33jjnap6dnNbAYmPq8S2DAcYTUdvWuGTq7PAnzmdozEpM4azNsmMe99G5nr791H1fGerJCL4RKCvEzpbcSd8Y99jOohFx7cfNf/JS9Yu5C4b+V5yUcZWoiA/d+NjCV4mIVxGPjvwVzJJ7yGfUvxMXLly5aH2uRduvfXW30+bNo1Vq1bN9Hg8Zxd8842069TJKoAdDlf65uVLl743b/bsUwcff7zx1xtvVBE5CpjV7ARAJbepQGlBHaK+gSqA4BZLoIeBGnOAzHcRCeJVAy9wElbd3jgU1TyhdwuH2Q+8HYMrndaagClgKBTbDao4gtnzTlr93YZ/sslm688AF+InM2l2tyKfAEIaPo7HyybCDALgrwzEzTx8pPR6rJesYlXyN1z+97///fKMjAyXx+OJANF2HTo4CNSaFX76I5Mn6+Djj+emcePkhWnTzli6ePH/NbcIALghMcBij7DhqHGkXbYTyOPxXFw/9sJVGveKhqkWSWK+TT8JsdJGfk1UmdKYDomle84Pw4VRCKj1uyPQmQo38I8pMe75eGqSVePnanxJyAfwUYyfVOAa+3enj679aMW9H99bFLwn+Ln6NWKapq66flWNxFlWVhZpqNiipIQ+3bufoKr/anYCcDqdyypZ+6oEgoGqwbuEI1Fuu/J8cjLTFOhUrw4ZpCS5X6uy/KEYzEfoJdVV/Y72gMQX0x0NHIc0gc3HQ2SQlXi5zrAcLO74esMxML8//LsBQ/U1+TyOFx3yxJCH7njjjpM9Lo+ISIZhGPVhjY7vvv66Tg722cKF4HKBKrfecIOKyEnNTgAulyvJTWmha9eW7xEUl9NRKcwpHImi2mCTrDboIVW2hEl65veSNCkUFoiFyH71fGc/S5dMNBKxiSgSg28bOVSfIUxC+fCREY+s59GKHIZ6Qu+1dRealq0FBectWLBAAXr26SM9DjnksCVLlvTdGzoAYhgEy3bgycgmvU0eGijhgHatq/mw60fsu9ccpGK5tyZiidp/L7bPXwakaP11ALcJHye1G8WS/+4YBBs1QD4U+Bo45U/+PzXK9e5yuSq6XD3aWIEZp40cKSUbNyrl5fLa5Mn06dMnrVk5gL0Vm+XtKy4EEVLSMkGEDZsLKsKi7aybmy85m2CwYWOoDSeUDvbfZQthmgF3S8NCvdVIcqfO5oznT2POfxww5Xj4jn0Dg6KRSJyd0uGgg2q8qbSs7IzNP/0ksViMjPR0Jk+e3LwcQERmqypqmrTueDCoJpb+K0W0CIgKu4JNU91E6yYE077+qgGt1FoXkPrQ0nJwhaBrhUqxsN/duLIBTz+YyL6DBWaSuR0Oh2vMZDZEPuzQu3eJqmYempe3CXikua2ADBGxAkOo0AUioSrmSkome6sWssI2+0vi9nz8w7IWWG7eWmGXpVekAz/Cyr5geCD2M5hL+IWAmiaFRUU1LiCZqiERWSYiAaDL3jADUVW6dcy1RlmsSOBoMgGoWg6iRkYFST3PKbDQ0tYHUF0/UIEsl4XcOtcRBCKTuMYNWg6aB/IK9Iv9UghARKo5gqrg46SsrKz2e8MVXAnHoJDexqbS5HAMgWBZk7J7Tfo/mfdErb46arLt6/MuAzmojPSVU7i4OwT7gsyDfr+oqlyqWrHbWS1QUlJSvldcwTWlMZmmSVp2a3YW7UiSylEUSE9NaeIPoFwAFdJFCRh7mAp/LLo5j9e+DZAxEPgDHFP6S0G8y+UCtxsxDFrl5OAwjB9i9UwwbRYCSE1NTVFV0jzuauxZq85XO7Pz+Rkf4XanEA7Xf1JJ7d66dUQZpk7mohyCtQCkdbUT3s1YCItag7YB9wg4KvhLmvnDkmoR2/L/jfo+21wi4OGYaeqNvzuLmGnaYeL2QDprZlE/7yhtsC9Aa+7RQkyOM0awNp4cqyYxo3osQPJvtxN+U/fbytdD/zN/aciPm9zxgwZyuuYiAAUkGAoTLN2BiAFlRVbwlMOdUFhcTme1Ldb2WBE6h4XG+RRW0gOcGAYcYfdXbeSLwncmPG/fuxsZNHj3PNXLoc2K6b9wYigSupwbGNug527nZrxMx8uBe4sAKsynnUVWSFgSbYgITofBh4u+xu1qvBTanQEvlf9ok6R6isKiGBzeiJjCuuD4ZhvIfN7DyTtRjT6vj+gk7iJGvrUEXQdBtsPL53qvrsbHefjYvNcJoE3nQzFj8awgC11tsjO57OzB/PDTNis82jSJRmON4TMOcXNCXaZbTQShMMMJJw5M8utT+e+KJmJEGvBF/ya/0rJz04Gf05hIevq49C4dHuwgOkEnTr94+pXG3UYxXsprQH4PrEDQITEz1mGvKoGVNP9YLCGI4/hwuxw899qHiQCRcCRK6a5Ag6phYWn4DkyOISnAIXFtFjlqkpcsEW1q+MgDI3tXlIOOV1o+A3im0uRQbuGeKtE8Xt6ASkEoG/BhpeH6MPEyGS95+GqJAtpTeIiNm9kssk3ye3ftfT3wb5SX8PIZJrOZwL3cxFCUTvh5FqB/Xv8ruZNcHDyBn6K9SgAJuW6HhyngcDj3SN5rZQO+ZtYRpZc4yNDqzy5OQj6KpS9QOd4PDCbhY2MVNjwNHyOqEMQBeNmAcjF+PsdysZ6FFR3cfJDKSyu2rTDwsxYvxUC7Nultvp7749z/e+ubt7hv6H3xYNO3T+t2WtclY5fcszeVwKpmScULDQc7Nm+o17NL4IAaiUoxRHfLHQ6KZ2mQTlShVy3WY827bFRFvsWGR9Rw3xZ8dMXP53h5Dx8BlEnNrvr7+R5hjv0NrVCuL7qtqMexHY+VNFcaqvoR+UTxcf7EoRPz97YVUAnh5TsqZ25Z6wG1Y3ARdPsSvozC+Fq8iy8ma/k1EolB3wSq04hRS9yfNOVChDKKfD7GT64d5CE1yOamLBjQm3y+sAniIfJR8vnD+Nnjh8pd0gc/zqlfTxXqSH5tdgIQh5NYknPHNGO07nCQlRHkMFizcUul+7+EEQrLgWMEMudXDuOOY62Iiiz002tBRq5URnQ8O2JHLZ/q+XRPRaKfnfg5iXyOAYIog2v4rqvx8h7eSvpG48BHCD8D8NolboQr8PM0afyH/yP7uSXP6cjDR6qIPLbPCKDs581ktM2rpIkbTjfZGWm4nE4Wrfo+ce30aPQ0gdelIk1suLPCfKvNDGxXTfGciaHKwBruj5kwt5bmfmoSVuAlHcGNn1uQJI+cl1S8BPDzND5Ow5fIB2gKOAkvgo8X8LIVH4KXdVf2uVLI54p94QhKhP6nt26PiGHrAla9gFgsyvUXDSMQDNOv18EJVt5F9US1F2xs5LqB3+7GE5ii06tk95aSJkJ2LSKiqkNnrcIcAy48sWZTsKGzshyYZn/gNXjJJp8XUVrjs4paNDn4OBl4CC9ulP72uW54KUCYXdejzWYFHNyhPSJimYGGEzSGQ6Ns27KJtq1y2BUKgcbo0eVAAqEwrbMyMIp3uqtYbS7g8M/BcVwVbV8FEUUx6KIx+gIfJC5mcCbQVuIpRy5q3WHTgMIoXNKPKra0lwwUL5L0XqsYXVHco4iSDfyIn8cT8t0K8boLL0OB2cBDwN0Im5uV1fqI70S1KencbncdbzYC2Fq0w1oRVAVPBlq+nSlzP+LIzq1p1+aYRKZQLFEfUCv7kSvs80tdcC8VSRyIEFOTXRikq5WVcYr5Jh8aF6Dm2xgoN2Hlo/5HlFOD82kLdsx9FehnvW5HFXOvLVao9yuAQRTFQRQoRVmAUGqXoC0CnHgZh9IJpTtesvDxNF6eQ/Hhr+Id9HIYVuyBAEvwsU/jCZptLSAQClcIanEQDEdZvbmYEjMlYRq63W6m/OdzAqEwRTvLksmgIMlec8bssiwJ2Mk6YGVivV8ZKS477l7JQ+hjhyGEENAwTir0it33WSgGvkH4FlhVMr4kHViG8D1CayAHP53x0wc/vfHRFZgBPAisw0suEKiG/HwUK5l0FfD1HiE/n3FNgahm4QDJAaEgEA3iSXFxxx9GgghqmoghqEKq221XXDLi4rnIztm7LE4ADhgO/DfR4qWY5vREHJGqcChwhU5nKvCICh5bh1ibrAQohBywsR7sNEZS8GeWL+sTVT1fRKYnIWAW8Cx+W977GW4j/jzgRdTOcfAyFzgN2IKvCU1AaRrcNRcHGNOtY57l7bM9gPEUIVEzyTsIwXAET4qb1tnpcc3RNGGjWCHcaiPy5K9qswbssvCi/E2Fb9XgAtFEINKcKq7gsEKjQpAqId9C+NkIHrxMJZ8rbcLZBrwOvIcQxcst+DgDHw58VTyNzQVeO9MI4E+cz1+rW0PNzgFEhB8LiiqigtQEhxuJhSElA8JWZdBIOMzFw04gEAqT17YV5s/FCEwOw/1uuFEgw9L36Bi1qm58DqBvISqsUOhvl4lVxMrSTSDf0hVMtf6PU44a0wAADOxJREFUn3I2qcD18YqtJ1js3Y/gs7dq86JNMuO9OFBS8e+GcL38AZiAz/ae3sIgfVD/DVwo98veNwMPaJNTMdMjAUhrXaurWFUZecoATNMkBl96rLy7Fyo8v2Q54KoEgQ1HxeRf8ZTqeLl4iXMEQTD5UiN8KyDFy+gOuAVGD6SGlbOmYcmLbUSk2cUeXE3UsgehG16OrOJFrIrVc/FxAF4EL7dKpqwTkUzJl6v3jR+g0lqAQLicJKldjWNErcgh0wFb+kFU4Lvk5VyF3E+pZEerUPtSrQg7RXAA6wrnkgrc1h9ea0YzrJ9tBu6yZ36sidotx8cylP/aJibkEyJ5BTSfyfiIb2t/JcpoRXfh5SGEW+pyPze7J9CMRSzEh8vt11X+lnhmcHFJGbtgmwkLbYTPxpbX9hMnpVvr2xb2f2IpymqtzUOovI6DHRRzZHgbT/SHvze7/PUlqZy+Jk528NMOr+3UEYL4WJbk2ppuE8Ig4EH8dMfaMfRW/Gys61uanQBKCjYj8WqhalZUDgXEcLD42/VEojEem/IuLpcz8aUGbLft7PipzCgk0seN64iqEJUaOI/d/Eo5n1K5nED/2v3/vzaovnI5nmKdoGWMYxTwHj5a4eVRfLyOb/fBLM1OAK7UNKLhoB2IZev0CfvOwdpNW4nFYjgEypTCATbCTYvdB5NYhgGc+kVyAoda8Xw1sIAdmKxkfwMf99j6Raatb/TAYCxw76Aeg/6CnzTyeRz4x742AxOQ2ToPrSNGPVEvwDA40TTzAeZDZwP+A/TQCnkPMESS6wka/KhKTLWyG1FMJhvDKWV/BCUdtXZCE6QNPl57/MvHp8/fNH+aPaAd8FV4TfeZK7hCyzdxuOrOVkn1uGmdlU7fguDOhTBArLp58Uze5AQfF3AmtoUg5bxDGisQjrb3CUSEsLIXAjL2FfjZBTyLl+s0omNV9XC5XT5iIifjJYqvYTjdK9vGWYtCUWKRcC1EAqaVMpYr8K5ABxvzPyu8lMQFDIE+iXZ/S7kq/1TTrk5v7Rs03TiXH9jfQXno5d++/FdLg+YW8nkJu0DnL44A4gpf8eYNSKisxpKx9se8FN/JS+FHE07TuPPHeqrs2zwrGijJ3HsT4d9qEkL5gihj+F8AofCSIy+ZLSJiHGCkImTga7jes3cIQBwI0LZL90T5uNQUN0n1+uJOI6ddSvI7gcEDYEnMEgfrDNh16ZVMuOyaymvqci7l4uCPAscS5UQZYVXr+kWCFw/5XNpErT2Bl3mQKA/bqHLre4cAnCnWHLZdww7D4PE33sPpMDBVCYYjyRtHLVc49RirkDMu+DkTplx/Mb5VnVmFn8+q0ddZlMl5LDdGNCiGf19o8UHgVbw82ARtTQBOAejVvtdCfAxvHAHk4yOfmXjrXTO/8X7BlIxEQfUtQ4sItg9y5KGdMU0zTsWLIzDk2KSghmPAPOxe5n9+KFvxVY///xUqcTEaUBl9N0QQA/j6uq+vNk1zTuMkSYU78SWEQpQZ+PlwT74rNTVVO7RvzUWnHR93BliewMxcKN2G4XDwwLzpDOvQhz7du7Jm4xZ6z/n46xNUj64WljWeS1Bi3NOMbtx9AfHFoyYA0zQLDcNot2ciwM+l+LgZYSNeFC+X4G1qEWFxggm5r+PY6CAtxY0gvDx7Hk+53RdUQ76X36HsqIz8+Zn7iTkn5DeByPJiNhb5NesAPtbZixkLgbHkN5VHTatSLa/O+RhPiguny8VmkUiVGTKSGC7uSQ5qXDQK3K79hgsIfcnn/AZwjYer/P4C355NUqfdkA+pISJWWY6fI8hnIjALP5820htklYhRZYO7gKtWnMorfMp5pwwkGI4kfAVJbP8iYDJBKuLJ+eIWYCZEOmCtE/z6wccK8rmMpP0V6pjpU/BxUdLvl/FZNY/2nAD8NdfUxcsg8ilE6IFyCV5W4KvfDluVIFwOqZmwcyuSYmA4LKI9uEP76hWtLLb/AlBi+Ym/NICnQB8FvRKMf+5nFv3h9UD+DnxJSnp+EwWb7NYM9PEpftqhBBC6AB3twMbdTPgqhWAMB5QUgOEg3eXh6TffQ0Qo2F6FlsZzMcrLdrybsOVQB+gLIK+CXAuOt2BA4X6Ffj9nkV9rsgp4ObkS8r1kIPRtqtcb9fzIAPA8ynm28vJinaJNhEAwnCAGQwwrLkuVVzM/AXFgqtIxtyLML3RuaBjCYwl1IepciCttEX89+Wt6z/kdyELo+2UT59b9UnSBTnWoTq/ZiBe8DEK5CB9L9i4BWNxgJX7uxctHwH/JR/FyYhJbOiX+ZyQa5dQB1qbQhsNBSeFPliQIlFVgT8HjdlG0s8yOCMZEWWR/1TpWn5rJc08fyf0fLGHFsC/gmOftJw8mn6f2G+RbBH2pHcxRVel7Fz/xfX4PQTkFfxPkFO6RJ9DHEPy8gHAqMA8vx9lX1sRr0LicTuZ9ZW1yoKaJM8WDqsmM7C+4qei8Srs0/LClEIfDIGVGynsIp+HmFe5eOJVpvkugJAbGRXDsU/ZglaL0wZ8U+frrVwQVH0uRiiLUSVCSxAmm4cff1K937sGH/9f2JBaTz834eZ58lgNHqipOO9RLVUnNbGU5AtOzeOfdJXhS3PHVPwxDCF4TRLbLQGLi5a4VCrumoOEfIethkDH2bFhUbdOFX+aMdgC/QdmF8AJWfkFOPcLCT8FLb3yVts9bYre5EpLkfjwFLZ9DgG74G7913p7HA/hpRT7r8PIwPrLx8qg8IDbRWmG7ajggFkVRHA4rUbRjbmvmZixma7diPE95UId+ESyb1xVCr8Gx38PCiRC8CU6M4OXf+DjmVzKjY8B7NpK6JbHzOVh7FK/Cz4QanvwUrVjqTngKrXE9osq9t5DPQIQVifI0+4wALCLoRj4R8jkaMEzsDaPsAD1JyYRdxYm9/qKeGMHLggzddjzlgRCPx94lFnr8jyAvQb/vYeEEcE7Ce2w7YAE+OjdgBrpQ2iEU1icmrllZe+UxOrMScoUsfElRSz6ieHkT7L4KP9Rg++cA3yRi/5tEBHiTskkra58K5FCRVJFVp+3px0U+EZQRsQGxQ9Z/UnCa3RErGFSE7Fg6ZZlBUtJcXLJtCAK0ykq3zcZYAI5dAgvvwBF7lbuOPQblM6TyTty78ZTFgHeAMfALthYsS6ojXlYB1wMz8KGChBQFL2vw0ZX8JP+Ml09QzsHfdMiPc4D7azFNFDgQiODjbnuAb0bwxNGKcritqMzBzyybCFbHesZSnfMrPLYhwrgEWpmZzB+0mq7rc3FJ5eVrd9qNzwWdb9/K1cMGk7F9O7ABfz02dsznLWA7wiZ8jVsT30dE8CPQCS9DUd4ARuoOvfH292/X+96574JEZpFVfHKUbYI3eXSz7IadrrQR3BqlE0IaVkxeCJ+dj5/PowijgFyUE4AhrlmuAZGzI+fesXkkgrI6awcHl+XwwAFvcvyMXmwpLOZ3ZwyC9Na4gsXc88xbRA+68TPOes4gs+hKrMIQB9jf9yjCw/iS4vy8ZAPHAq/gox2/ZogrdF6+xcdhtnjItJXHTsBIfM2X0+DcjRw7ogbNcztwpR2eHEM5AR834KUz8APCBZEhkb84J7pY/4dtFLp2MiDSn+ScTDNeNNL2GEZvimA8mPeymVW0EFiDErMVIAOftRN3Jflp+c4v+NUjP1lX8HEYXhaggM8eLC/rsfYoajYCkEZSbW+U9ggG8B5KCTADP5fhZYkUSh5l5LXrlMXBgVx+Ez0JgqXMT/+G0vcCDO53OKkeD2ZaNs+lvc62B0rR0bHbtJ1+AzjxMy1pZjyFtd9uJjAK+BTffpPoUZNIU1tHUGAw/hr9A/vYD1DZVhW8HIdyDfkoyunaVt+lLRRHykihE0TDoCZhiWCq0io7g03fLufLo8ro9+khvNd9GeHW0ZsQXsbHX2wl9HK7ysZMhEvw8R/2d7C8gr9JKIp7xQvd9J24C2UGWLlrKeoiKjFu2zycmGny3oIVnH1aX/xZr3PnllGoKve2mUrqI6ndAuMCG7Ayf0pQyvGTQQs0KzRHUOgw/CyPk9ag8p5cuv0UAhKh+KfvibYx+XDV19y5ZRTRcIiH8mbieMZJcHRwNMpbKCUoHVqQ/2slAB+D8CKe+z0XuF9wU2IGOCCYzbK0DSw8ooRdrYJsWlWEAu+3W4G37CLMo00Q0hA+x4/gb+aKWi3QrBwAfKiIFOKEHms74ED4MHsF3QMHkvdjNtt3lmkwFObbnVujTy59d6drvnOjpmm0Vp9EC/zKCMAGx2ZHzAyHYmXbC2JXLTgilrOmNHZc58xYaSDMP16cPsN4zXHk+sHbMsO7wl1wM67Jc+pboJmsgPrBAlXNKy8uIJN0XA7LMxiOmfGNnQpLS8tIeO/2cb28FmiBFmiBFmiBFmiBFmiBFmiBFmiB/wH4f+jryq6sRdUDAAAAAElFTkSuQmCC" alt="DREME Logo"/>
         <h1>DREME</h1>
         <h2>Discriminative Regular Expression Motif Elicitation</h2>
-      </div>
-      <p class="spaced">
-        For further information on how to interpret these results or to get a 
-        copy of the MEME software please access 
-        <a href="http://meme.nbcr.net/">http://meme.nbcr.net</a>. 
-      </p>
-      <p>
+        For further information on how to interpret these results please access
+        To get a copy of the MEME software please access 
         If you use DREME in your research please cite the following paper:<br />
-        <span class="citation">
           Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011.
-          <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a>
-        </span>
-      </p>
-    </div>
-    <!-- navigation -->
-    <div class="pad2">
-      <a class="jump" href="#motifs_sec">Discovered Motifs</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#inputs_sec">Inputs &amp; Settings</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#info_sec">Program information</a>
-    </div>
-    <!-- alert the user when their browser is not up to the task -->
-    <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript>
-    <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1>
-    <script>
-      if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block";
-    </script>
-    <!-- description -->
-    <div id="description_section" style="display:none">
-      <div id="description" class="header">
-        <h2>Description</h2>
-      </div>
-      <div id="description_text" class="box">
-      </div>
-    </div>
-    <script>
-      if (data.description) {
-        $("description_text").innerHTML = "";
-        $("description_text").appendChild(make_description(data.description));
-        $("description_section").style.display = "block";
-      }
-    </script>
-    <!-- motifs -->
-    <div id="motifs_sec" class="header">
-      <h2>Discovered Motifs</h2>
-      <span><a href="#inputs_sec">Next</a>&nbsp;<a href="#">Top</a></span>
-    </div>
-    <div id="motifs" class="box">
-      <p>No motifs were discovered!</p>
-    </div>
-    <script>make_motifs();</script>
-    <!-- inputs and settings -->
-    <div id="inputs_sec" class="header">
-      <h2>Inputs &amp; Settings</h2>
-      <span><a href="#motifs_sec">Previous</a>&nbsp;<a href="#info_sec">Next</a>&nbsp;<a href="#">Top</a></span>
-    </div>
-    <div class="box">
-      <h4>Sequences</h4>
-      <table id="seq_info" class="inputs">
-        <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th>
-          <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th>
-          <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th>
-        </tr>
-        <tr>
-          <td id="ins_seq_source"></td>
-          <td id="ins_seq_alphabet"></td>
-          <td id="ins_seq_count"></td>
-        </tr>
-      </table>
-      <script>
-      {
-        var db = data.sequence_db;
-        $("ins_seq_source").innerHTML = db.file;
-        $("ins_seq_alphabet").innerHTML = dreme_alphabet.get_alphabet_name();
-        $("ins_seq_count").innerHTML = db.count;
-      }
-      </script>
-      <h4>Control Sequences</h4>
-      <table id="seq_info" class="inputs">
-        <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th>
-          <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th>
-        </tr>
-        <tr>
-          <td id="ins_cseq_source"></td>
-          <td id="ins_cseq_count"></td>
-        </tr>
-      </table>
-      <script>
-      {
-        var db = data.control_db;
-        if (db.from == "shuffled") {
-          $("ins_cseq_source").innerHTML = "Shuffled Sequences";
-        } else {
-          $("ins_cseq_source").innerHTML = db.file;
-        }
-        $("ins_cseq_count").innerHTML = db.count;
-      }
-      </script>
-      <h4>Background</h4>
-      <span id="alpha_bg"></span>
-      <script>
-      {
-        $("alpha_bg").appendChild(make_alpha_bg(dreme_alphabet, data.control_db.freqs));
-      }
-      </script>
-      <h4>Other Settings</h4>
-      <table id="tbl_settings" class="inputs hide_advanced">
-        <tr>
-          <th>Strand Handling</th>
-          <td id="opt_strand">
-            <span class="strand_none">This alphabet only has one strand</span>
-            <span class="strand_given">Only the given strand is processed</span>
-            <span class="strand_both">Both the given and reverse complement strands are processed</span>
-          </td>
-        </tr>
-        <tr><th># REs to Generalize</th><td id="opt_ngen"></td></tr>
-        <tr><th>Shuffle Seed</th><td id="opt_seed"></td></tr>
-        <tr><th>E-value Threshold</th><td id="opt_stop_evalue"></td></tr>
-        <tr><th>Max Motif Count</th><td id="opt_stop_count"></td></tr>
-        <tr><th>Max Run Time</th><td id="opt_stop_time"></td></tr>
-      </table>
-      <script>
-      {
-        $("opt_strand").className = (dreme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none");
-        $("opt_ngen").innerHTML = data.options.ngen;
-        $("opt_seed").innerHTML = data.options.seed;
-        $("opt_stop_evalue").innerHTML = data.options.stop.evalue;
-        $("opt_stop_count").innerHTML = (typeof data.options.stop.count == "number" ? data.options.stop.count : "No maximum motif count.");
-        $("opt_stop_time").innerHTML = (typeof data.options.stop.time == "number" ? data.options.stop.time + " seconds." : "No maximum running time.");
-      }
-      </script>
-    </div>
-    <!-- list information on this program -->
-    <div id="info_sec" class="bar" style="position:relative">
-      <div style="position: absolute; right: 0;"><a href="#inputs_sec">Previous</a> <a href="#">Top</a></div>
-      <div class="subsection">
-        <h5 id="version">DREME version</h5>
-        <span id="ins_version"></span> 
-        (Release date: <span id="ins_release"></span>)<br>
-      </div>
-      <script>
-        $("ins_version").innerHTML = data["version"];
-        $("ins_release").innerHTML = data["release"];
-      </script>
-      <div class="subsection">
-        <h5 id="reference">Reference</h5>
-        <span class="citation">
-          Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011.
-          <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a>
-        </span>
-      </div>
-      <div class="subsection">
-        <h5 id="command">Command line</h5>
-        <textarea id="cmd" rows="3" style="width:100%;" readonly="readonly">
-        </textarea>
-        <script>$("cmd").value = data["cmd"].join(" ");</script>
-      </div>
-    </div>
-    
   </body>
 </html>
--- a/test-data/dreme_output_test2.txt	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/dreme_output_test2.txt	Wed Dec 11 18:05:15 2019 -0500
@@ -1,12 +1,7 @@
-# DREME 4.12.0
-#     command: dreme -o ./dreme_test2_out -p dreme_test_sites.fa -norc -rna -s 1 -e 1e-05 -g 100 -mink 4 -maxk 10
-#   positives: 1000 from dreme_test_sites.fa (Thu Apr 26 15:09:03 CEST 2018)
+# DREME 5.0.5
 #   negatives: 1000 from shuffled positives
-#        host: ThinkPad-T450s
-#        when: Thu May 03 13:22:11 CEST 2018
 
-MEME version 4.12.0
-
+MEME version 5.0.5
 ALPHABET "RNA" RNA-LIKE
 A "Adenine" CC0000
 C "Cytosine" 0000CC
@@ -27,20 +22,15 @@
 K "Keto" = GU
 T = U
 END ALPHABET
-
 Background letter frequencies (from dataset):
 A 0.221 C 0.245 G 0.221 U 0.312
-
-
 MOTIF UUYUCY DREME-1
-
 #             Word        Pos        Neg    P-value    E-value
 # BEST      UUYUCY        387        210   2.6e-018   3.3e-013
 #           UUUUCC        147         75   1.8e-007   2.2e-002
 #           UUUUCU        155         94   2.2e-005   2.8e+000
 #           UUCUCU         94         51   1.3e-004   1.7e+001
 #           UUCUCC         75         42   1.1e-003   1.4e+002
-
 letter-probability matrix: alength= 4 w= 6 nsites= 459 E= 3.3e-013
 0.000000 0.000000 0.000000 1.000000
 0.000000 0.000000 0.000000 1.000000
@@ -48,21 +38,14 @@
 0.000000 0.000000 0.000000 1.000000
 0.000000 1.000000 0.000000 0.000000
 0.000000 0.474946 0.000000 0.525054
-
-
 MOTIF YAGG DREME-2
-
 #             Word        Pos        Neg    P-value    E-value
 # BEST        YAGG        600        416   1.1e-016   1.4e-011
 #             CAGG        441        304   1.5e-010   1.8e-005
 #             UAGG        232        165   1.1e-004   1.3e+001
-
 letter-probability matrix: alength= 4 w= 4 nsites= 793 E= 1.4e-011
 0.000000 0.692308 0.000000 0.307692
 1.000000 0.000000 0.000000 0.000000
 0.000000 0.000000 1.000000 0.000000
 0.000000 0.000000 1.000000 0.000000
-
-
 # Stopping reason: E-value threshold exceeded
-#    Running time: 15.97 seconds
--- a/test-data/dreme_output_test2.xml	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/dreme_output_test2.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -1,7 +1,5 @@
-<dreme version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700">
+<dreme version="5.0.5" release="Mon Mar 18 20:12:19 2019 -0700">
   <model>
-    <command_line>dreme -o ./dreme_test2_out -p dreme_test_sites.fa -norc -rna -s 1 -e 1e-05 -g 100 -mink 4 -maxk 10</command_line>
-    <positives name="dreme test sites" count="1000" file="dreme_test_sites.fa" last_mod_date="Thu Apr 26 15:09:03 CEST 2018" />
     <negatives name="shuffled positive sequences" count="1000" from="shuffled"/>
     <alphabet name="RNA" like="rna">
       <letter id="A" symbol="A" name="Adenine" colour="CC0000"/>
@@ -26,8 +24,6 @@
     <ngen>100</ngen>
     <add_pv_thresh>0.01</add_pv_thresh>
     <seed>1</seed>
-    <host>ThinkPad-T450s</host>
-    <when>Thu May 03 13:22:11 CEST 2018</when>
   </model>
   <motifs>
     <motif id="m01" alt="DREME-1" seq="UUYUCY" length="6" nsites="459" p="387" n="210" pvalue="2.6e-018" evalue="3.3e-013" unerased_evalue="3.3e-013">
@@ -51,5 +47,4 @@
       <match seq="UAGG" p="232" n="165" pvalue="1.1e-004" evalue="1.3e+001"/>
     </motif>
   </motifs>
-  <run_time cpu="15.97" real="15.97" stop="evalue"/>
 </dreme>
--- a/test-data/fimo_output_test1.gff	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test1.gff	Wed Dec 11 18:05:15 2019 -0500
@@ -1,9 +1,9 @@
 ##gff-version 3
-chrM	fimo	nucleotide_motif	2299	2306	46.6	-	.	Name=TACTAAYM_chrM-;Alias=MEME-1;ID=TACTAAYM-MEME-1-1-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
-chrM	fimo	nucleotide_motif	6529	6536	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-2-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
-chrM	fimo	nucleotide_motif	7741	7748	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-3-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
-chrM	fimo	nucleotide_motif	13656	13663	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-4-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
-chrM	fimo	nucleotide_motif	13740	13747	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-5-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
+chrM	fimo	nucleotide_motif	6529	6536	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-1-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
+chrM	fimo	nucleotide_motif	7741	7748	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-2-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
+chrM	fimo	nucleotide_motif	13656	13663	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-3-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
+chrM	fimo	nucleotide_motif	13740	13747	46.6	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-4-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
+chrM	fimo	nucleotide_motif	2299	2306	46.6	-	.	Name=TACTAAYM_chrM-;Alias=MEME-1;ID=TACTAAYM-MEME-1-5-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA;
 chrM	fimo	nucleotide_motif	861	868	 44	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-6-chrM;pvalue=3.96e-05;qvalue= 0.185;sequence=TACTAACC;
 chrM	fimo	nucleotide_motif	9346	9353	 44	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-7-chrM;pvalue=3.96e-05;qvalue= 0.185;sequence=TACTAACC;
 chrM	fimo	nucleotide_motif	3767	3774	41.8	+	.	Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-8-chrM;pvalue=6.62e-05;qvalue= 0.216;sequence=TACTAATA;
--- a/test-data/fimo_output_test1.html	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test1.html	Wed Dec 11 18:05:15 2019 -0500
@@ -7,9 +7,8 @@
 <style type="text/css">
 td.left {text-align: left;}
 td.right {text-align: right; padding-right: 1cm;}
-</style>
 </head>
-<body bgcolor="#D5F0FF">
+<body color="#000000">
 <a name="top_buttons"></a>
 <hr>
 <table summary="buttons" align="left" cellspacing="0">
@@ -17,98 +16,36 @@
 <td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td>
 <td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td>
 <td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td>
+<td bgcolor="#FFDD00"><a href="fimo.tsv""><b>Results in TSV Format</b></a></td>
+<td bgcolor="#FFDDFF"><a href="fimo.gff""><b>Results in GFF3 Format</b></a></td>
 </tr>
 </table>
-<br/>
-<br/>
-<hr/>
 <center><big><b>FIMO - Motif search tool</b></big></center>
-<hr>
-<p>
-FIMO version 4.12.0, (Release date: Tue Jun 27 16:22:50 2017 -0700)
-</p>
-<p>
-For further information on how to interpret these results
-or to get a copy of the FIMO software please access
-<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p>
+FIMO version 5.0.5, (Release date: Mon Mar 18 20:12:19 2019 -0700)
+For further information on how to interpret these results please access <a href="http://meme-suite.org/doc/fimo-output-format.html">http://meme-suite.org/doc/fimo-output-format.html</a>.<br>
+To get a copy of the FIMO software please access <a href="http://meme-suite.org">http://meme-suite.org</a>
 <p>If you use FIMO in your research, please cite the following paper:<br>
 Charles E. Grant, Timothy L. Bailey, and William Stafford Noble,
 "FIMO: Scanning for occurrences of a given motif",
 <i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011.
-<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p>
-<hr>
 <center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center>
-<hr>
-<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;">
-<p>
-  DATABASE hsa_chrM.fa
-  <br />
   Database contains 1 sequences, 16569 residues
-</p>
-<p>
-  MOTIFS meme_fimo_input_1.xml (DNA)
-  <table>
-    <thead>
-      <tr>
-        <th style="border-bottom: 1px dashed;">MOTIF</th>
-        <th style="border-bottom: 1px dashed; padding-left: 1em;">WIDTH</th>
-        <th style="border-bottom: 1px dashed; padding-left: 1em;text-align:left;" >
          BEST POSSIBLE MATCH
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td style="text-align:right;">TACTAAYM</td>
-        <td style="text-align:right;padding-left: 1em;">8</td>
-        <td style="text-align:left;padding-left: 1em;">TACTAACA</td>
-       </tr>
-    </tbody>
-  </table>
-</p>
-<p>
 Random model letter frequencies (--nrdb--):
-<br/>
-
 A 0.275 C 0.225 G 0.225 T 0.275 </p>
-</div>
-<hr>
 <center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center>
-<hr>
-<ul>
-<li>
 There were 11 motif occurences with a p-value less than 0.0001.
-
 The full set of motif occurences can be seen in the
-tab-delimited plain text output file
-<a href="fimo.txt">fimo.txt</a>, 
-the GFF file 
-<a href="fimo.gff">fimo.gff</a> 
-which may be suitable for uploading to the 
-<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a>
-(assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format),
-or the XML file 
-<a href="fimo.xml">fimo.xml</a>.
-</li>
-<li>
-The p-value of a motif occurrence is defined as the
+TSV (tab-delimited values) output file
+The <i>p</i>-value of a motif occurrence is defined as the
 probability of a random sequence of the same length as the motif
 matching that position of the sequence with as good or better a score.
-</li>
-<li>
 The score for the match of a position in a sequence to a motif
 is computed by summing the appropriate entries from each column of
 the position-dependent scoring matrix that represents the motif.
-</li>
-<li>
 The q-value of a motif occurrence is defined as the
 false discovery rate if the occurrence is accepted as significant.
-</li>
-<li>The table is sorted by increasing p-value.</li>
-</ul>
-<table border="1">
-<thead>
-<tr>
+<li>The table is sorted by increasing <i>p</i>-value.</li>
 <th>Motif ID</th>
 <th>Alt ID</th>
 <th>Sequence Name</th>
@@ -118,21 +55,6 @@
 <th>p-value</th>
 <th>q-value</th>
 <th>Matched Sequence</th>
-</tr>
-</thead>
-<tbody>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2299</td>
-      <td style="text-align:left;">2306</td>
-      <td style="text-align:left;">2.18e-05</td>
-      <td style="text-align:left;">0.142</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td>
-   </tr>
-    <tr>
       <td style="text-align:left;">TACTAAYM</td>
       <td style="text-align:left;">MEME-1</td>
       <td style="text-align:left;">chrM</td>
@@ -142,159 +64,10 @@
       <td style="text-align:left;">2.18e-05</td>
       <td style="text-align:left;">0.142</td>
       <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7741</td>
-      <td style="text-align:left;">7748</td>
-      <td style="text-align:left;">2.18e-05</td>
-      <td style="text-align:left;">0.142</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13656</td>
-      <td style="text-align:left;">13663</td>
-      <td style="text-align:left;">2.18e-05</td>
-      <td style="text-align:left;">0.142</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13740</td>
-      <td style="text-align:left;">13747</td>
-      <td style="text-align:left;">2.18e-05</td>
-      <td style="text-align:left;">0.142</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">861</td>
-      <td style="text-align:left;">868</td>
-      <td style="text-align:left;">3.96e-05</td>
-      <td style="text-align:left;">0.185</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9346</td>
-      <td style="text-align:left;">9353</td>
-      <td style="text-align:left;">3.96e-05</td>
-      <td style="text-align:left;">0.185</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3767</td>
-      <td style="text-align:left;">3774</td>
-      <td style="text-align:left;">6.62e-05</td>
-      <td style="text-align:left;">0.216</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5497</td>
-      <td style="text-align:left;">5504</td>
-      <td style="text-align:left;">6.62e-05</td>
-      <td style="text-align:left;">0.216</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10105</td>
-      <td style="text-align:left;">10112</td>
-      <td style="text-align:left;">6.62e-05</td>
-      <td style="text-align:left;">0.216</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">TACTAAYM</td>
-      <td style="text-align:left;">MEME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10959</td>
-      <td style="text-align:left;">10966</td>
-      <td style="text-align:left;">8.79e-05</td>
-      <td style="text-align:left;">0.261</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACT</td>
-   </tr>
-</tbody>
 </table>
-
 <hr>
 <center><big><b><a name="debugging_information">DEBUGGING INFORMATION</a></b></big></center>
-<hr>
-<p>
-Command line:
-</p>
-<pre>
-fimo -oc fimo_test1_out meme_fimo_input_1.xml hsa_chrM.fa
-</pre>
-<p>
-Settings:
-</p>
-<pre>
-<table>
-  <tr>
-    <td style="padding-right: 2em">output_directory = fimo_test1_out</td>
-    <td style="padding-left: 5em; padding-right: 2em">MEME file name = meme_fimo_input_1.xml</td>
-    <td style="padding-left: 5em; padding-right: 2em">sequence file name = hsa_chrM.fa</td>
-  </tr>  <tr>
-    <td style="padding-right: 2em">background file name = --nrdb--</td>
-    <td style="padding-left: 5em; padding-right: 2em">alphabet = DNA</td>
-    <td style="padding-left: 5em; padding-right: 2em">max stored scores = 100000</td>
-  </tr>  <tr>
-    <td style="padding-right: 2em">allow clobber = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">compute q-values = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">parse genomic coord. = false</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">text only = false</td>
-    <td style="padding-left: 5em; padding-right: 2em">scan both strands = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">max strand = false</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">threshold type = p-value</td>
-    <td style="padding-left: 5em; padding-right: 2em">output theshold = 0.0001</td>
-    <td style="padding-left: 5em; padding-right: 2em">pseudocount = 0.1</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">alpha = 1</td>
-    <td style="padding-left: 5em; padding-right: 2em">verbosity = 2</td>
-    <td style="padding-left: 5em; padding-right: 2em"></td>
-  </tr>
-
-</table>
-</pre>
-<p>
 This information can be useful in the event you wish to report a
 problem with the FIMO software.
-</p>
-<hr>
-<span style="background-color: #DDDDFF"><a href="#top_buttons"><b>Go to top</b></a></span>
 </body>
 </html>
--- a/test-data/fimo_output_test1.txt	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test1.txt	Wed Dec 11 18:05:15 2019 -0500
@@ -1,9 +1,9 @@
-# motif_id	motif_alt_id	sequence_name	start	stop	strand	score	p-value	q-value	matched_sequence
-TACTAAYM	MEME-1	chrM	2299	2306	-	12.9701	2.18e-05	0.142	TACTAACA
+motif_id	motif_alt_id	sequence_name	start	stop	strand	score	p-value	q-value	matched_sequence
 TACTAAYM	MEME-1	chrM	6529	6536	+	12.9701	2.18e-05	0.142	TACTAACA
 TACTAAYM	MEME-1	chrM	7741	7748	+	12.9701	2.18e-05	0.142	TACTAACA
 TACTAAYM	MEME-1	chrM	13656	13663	+	12.9701	2.18e-05	0.142	TACTAACA
 TACTAAYM	MEME-1	chrM	13740	13747	+	12.9701	2.18e-05	0.142	TACTAACA
+TACTAAYM	MEME-1	chrM	2299	2306	-	12.9701	2.18e-05	0.142	TACTAACA
 TACTAAYM	MEME-1	chrM	861	868	+	12.2836	3.96e-05	0.185	TACTAACC
 TACTAAYM	MEME-1	chrM	9346	9353	+	12.2836	3.96e-05	0.185	TACTAACC
 TACTAAYM	MEME-1	chrM	3767	3774	+	11.7164	6.62e-05	0.216	TACTAATA
--- a/test-data/fimo_output_test1.xml	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test1.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -1,16 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Begin document body -->
-<fimo version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700">
+<fimo version="5.0.5" release="Mon Mar 18 20:12:19 2019 -0700">
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation=  xmlns:fimo="http://noble.gs.washington.edu/schema/fimo"
 >
-<command-line>fimo -oc fimo_test1_out meme_fimo_input_1.xml hsa_chrM.fa</command-line>
 <settings>
-<setting name="output directory">fimo_test1_out</setting>
-<setting name="MEME file name">meme_fimo_input_1.xml</setting>
-<setting name="sequence file name">hsa_chrM.fa</setting>
 <setting name="background file name">--nrdb--</setting>
-<setting name="allow clobber">true</setting>
+<setting name="allow clobber">false</setting>
 <setting name="compute q-values">true</setting>
 <setting name="parse genomic coord.">false</setting>
 <setting name="text only">false</setting>
--- a/test-data/fimo_output_test2.gff	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test2.gff	Wed Dec 11 18:05:15 2019 -0500
@@ -1,12 +1,12 @@
 ##gff-version 3
-chrM	fimo	nucleotide_motif	440	446	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-1-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	2093	2099	40.9	-	.	Name=ACTAAYH_chrM-;Alias=DREME-1;ID=ACTAAYH-DREME-1-2-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	2299	2305	40.9	-	.	Name=ACTAAYH_chrM-;Alias=DREME-1;ID=ACTAAYH-DREME-1-3-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	5186	5192	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-4-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	6530	6536	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-5-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	7742	7748	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-6-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	13657	13663	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-7-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	13741	13747	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-8-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA;
-chrM	fimo	nucleotide_motif	510	516	43.8	+	.	Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-1-chrM;pvalue=4.15e-05;qvalue= 0.668;sequence=CCAGCAC;
-chrM	fimo	nucleotide_motif	5137	5143	43.8	+	.	Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-2-chrM;pvalue=4.15e-05;qvalue= 0.668;sequence=CCAGCAC;
+chrM	fimo	nucleotide_motif	440	446	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-1-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	2093	2099	40.9	-	.	Name=ACTAAYH_chrM-;Alias=DREME-1;ID=ACTAAYH-DREME-1-2-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	2299	2305	40.9	-	.	Name=ACTAAYH_chrM-;Alias=DREME-1;ID=ACTAAYH-DREME-1-3-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	5186	5192	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-4-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	6530	6536	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-5-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	7742	7748	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-6-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	13657	13663	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-7-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	13741	13747	40.9	+	.	Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-8-chrM;pvalue=8.2e-05;qvalue= 0.332;sequence=ACTAACA;
+chrM	fimo	nucleotide_motif	510	516	43.8	+	.	Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-1-chrM;pvalue=4.15e-05;qvalue= 0.683;sequence=CCAGCAC;
+chrM	fimo	nucleotide_motif	5137	5143	43.8	+	.	Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-2-chrM;pvalue=4.15e-05;qvalue= 0.683;sequence=CCAGCAC;
 chrM	fimo	nucleotide_motif	4241	4247	40.3	+	.	Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-3-chrM;pvalue=9.37e-05;qvalue= 1;sequence=CCAGCAT;
--- a/test-data/fimo_output_test2.html	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test2.html	Wed Dec 11 18:05:15 2019 -0500
@@ -9,7 +9,7 @@
 td.right {text-align: right; padding-right: 1cm;}
 </style>
 </head>
-<body bgcolor="#D5F0FF">
+<body color="#000000">
 <a name="top_buttons"></a>
 <hr>
 <table summary="buttons" align="left" cellspacing="0">
@@ -17,123 +17,44 @@
 <td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td>
 <td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td>
 <td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td>
+<td bgcolor="#FFDD00"><a href="fimo.tsv""><b>Results in TSV Format</b></a></td>
+<td bgcolor="#FFDDFF"><a href="fimo.gff""><b>Results in GFF3 Format</b></a></td>
 </tr>
 </table>
-<br/>
-<br/>
-<hr/>
 <center><big><b>FIMO - Motif search tool</b></big></center>
-<hr>
-<p>
-FIMO version 4.12.0, (Release date: Tue Jun 27 16:22:50 2017 -0700)
-</p>
-<p>
-For further information on how to interpret these results
-or to get a copy of the FIMO software please access
-<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p>
+FIMO version 5.0.5, (Release date: Mon Mar 18 20:12:19 2019 -0700)
+For further information on how to interpret these results please access <a href="http://meme-suite.org/doc/fimo-output-format.html">http://meme-suite.org/doc/fimo-output-format.html</a>.<br>
+To get a copy of the FIMO software please access <a href="http://meme-suite.org">http://meme-suite.org</a>
 <p>If you use FIMO in your research, please cite the following paper:<br>
 Charles E. Grant, Timothy L. Bailey, and William Stafford Noble,
 "FIMO: Scanning for occurrences of a given motif",
 <i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011.
-<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p>
-<hr>
 <center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center>
-<hr>
-<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;">
-<p>
-  DATABASE hsa_chrM.fa
-  <br />
   Database contains 1 sequences, 16569 residues
-</p>
-<p>
-  MOTIFS dreme_fimo_input_1.xml (DNA)
   <table>
     <thead>
-      <tr>
-        <th style="border-bottom: 1px dashed;">MOTIF</th>
-        <th style="border-bottom: 1px dashed; padding-left: 1em;">WIDTH</th>
-        <th style="border-bottom: 1px dashed; padding-left: 1em;text-align:left;" >
-         BEST POSSIBLE MATCH
-        </th>
-      </tr>
     </thead>
     <tbody>
-      <tr>
-        <td style="text-align:right;">ACTAAYH</td>
-        <td style="text-align:right;padding-left: 1em;">7</td>
-        <td style="text-align:left;padding-left: 1em;">ACTAACA</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">YTAACA</td>
-        <td style="text-align:right;padding-left: 1em;">6</td>
-        <td style="text-align:left;padding-left: 1em;">TTAACA</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">TCTGT</td>
-        <td style="text-align:right;padding-left: 1em;">5</td>
-        <td style="text-align:left;padding-left: 1em;">TCTGT</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">SCCAGG</td>
-        <td style="text-align:right;padding-left: 1em;">6</td>
-        <td style="text-align:left;padding-left: 1em;">CCCAGG</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">CCAGCAY</td>
-        <td style="text-align:right;padding-left: 1em;">7</td>
-        <td style="text-align:left;padding-left: 1em;">CCAGCAC</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">GMATGT</td>
-        <td style="text-align:right;padding-left: 1em;">6</td>
-        <td style="text-align:left;padding-left: 1em;">GAATGT</td>
-       </tr>
     </tbody>
   </table>
-</p>
-<p>
-Random model letter frequencies (fimo_background_probs_hsa_chrM.txt):
-<br/>
-
 A 0.278 C 0.222 G 0.222 T 0.278 </p>
-</div>
-<hr>
 <center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center>
-<hr>
-<ul>
-<li>
 There were 11 motif occurences with a p-value less than 0.0001.
-
 The full set of motif occurences can be seen in the
-tab-delimited plain text output file
-<a href="fimo.txt">fimo.txt</a>, 
-the GFF file 
-<a href="fimo.gff">fimo.gff</a> 
+TSV (tab-delimited values) output file
+the GFF3 file 
 which may be suitable for uploading to the 
-<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a>
 (assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format),
 or the XML file 
-<a href="fimo.xml">fimo.xml</a>.
-</li>
-<li>
-The p-value of a motif occurrence is defined as the
+The <i>p</i>-value of a motif occurrence is defined as the
 probability of a random sequence of the same length as the motif
 matching that position of the sequence with as good or better a score.
-</li>
-<li>
 The score for the match of a position in a sequence to a motif
 is computed by summing the appropriate entries from each column of
 the position-dependent scoring matrix that represents the motif.
-</li>
-<li>
 The q-value of a motif occurrence is defined as the
 false discovery rate if the occurrence is accepted as significant.
-</li>
-<li>The table is sorted by increasing p-value.</li>
-</ul>
-<table border="1">
-<thead>
-<tr>
+<li>The table is sorted by increasing <i>p</i>-value.</li>
 <th>Motif ID</th>
 <th>Alt ID</th>
 <th>Sequence Name</th>
@@ -143,9 +64,6 @@
 <th>p-value</th>
 <th>q-value</th>
 <th>Matched Sequence</th>
-</tr>
-</thead>
-<tbody>
     <tr>
       <td style="text-align:left;">CCAGCAY</td>
       <td style="text-align:left;">DREME-5</td>
@@ -154,172 +72,19 @@
       <td style="text-align:left;">510</td>
       <td style="text-align:left;">516</td>
       <td style="text-align:left;">4.15e-05</td>
-      <td style="text-align:left;">0.668</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCAGCAC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">CCAGCAY</td>
-      <td style="text-align:left;">DREME-5</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5137</td>
-      <td style="text-align:left;">5143</td>
-      <td style="text-align:left;">4.15e-05</td>
-      <td style="text-align:left;">0.668</td>
+      <td style="text-align:left;">0.683</td>
       <td style="text-align:left;font-size:x-large;font-family:monospace;">CCAGCAC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">440</td>
-      <td style="text-align:left;">446</td>
-      <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
       <td style="text-align:left;">2093</td>
       <td style="text-align:left;">2099</td>
       <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2299</td>
-      <td style="text-align:left;">2305</td>
-      <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5186</td>
-      <td style="text-align:left;">5192</td>
-      <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6530</td>
-      <td style="text-align:left;">6536</td>
-      <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7742</td>
-      <td style="text-align:left;">7748</td>
-      <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13657</td>
-      <td style="text-align:left;">13663</td>
-      <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
+      <td style="text-align:left;">0.332</td>
       <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
    </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13741</td>
-      <td style="text-align:left;">13747</td>
-      <td style="text-align:left;">8.2e-05</td>
-      <td style="text-align:left;">0.327</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">CCAGCAY</td>
-      <td style="text-align:left;">DREME-5</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4241</td>
-      <td style="text-align:left;">4247</td>
-      <td style="text-align:left;">9.37e-05</td>
-      <td style="text-align:left;">1</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCAGCAT</td>
-   </tr>
-</tbody>
-</table>
-
 <hr>
 <center><big><b><a name="debugging_information">DEBUGGING INFORMATION</a></b></big></center>
-<hr>
-<p>
 Command line:
-</p>
-<pre>
-fimo -oc fimo_test2_out --bgfile fimo_background_probs_hsa_chrM.txt dreme_fimo_input_1.xml hsa_chrM.fa
-</pre>
-<p>
 Settings:
-</p>
-<pre>
-<table>
-  <tr>
-    <td style="padding-right: 2em">output_directory = fimo_test2_out</td>
-    <td style="padding-left: 5em; padding-right: 2em">MEME file name = dreme_fimo_input_1.xml</td>
-    <td style="padding-left: 5em; padding-right: 2em">sequence file name = hsa_chrM.fa</td>
-  </tr>  <tr>
-    <td style="padding-right: 2em">background file name = fimo_background_probs_hsa_chrM.txt</td>
-    <td style="padding-left: 5em; padding-right: 2em">alphabet = DNA</td>
-    <td style="padding-left: 5em; padding-right: 2em">max stored scores = 100000</td>
-  </tr>  <tr>
-    <td style="padding-right: 2em">allow clobber = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">compute q-values = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">parse genomic coord. = false</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">text only = false</td>
-    <td style="padding-left: 5em; padding-right: 2em">scan both strands = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">max strand = false</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">threshold type = p-value</td>
-    <td style="padding-left: 5em; padding-right: 2em">output theshold = 0.0001</td>
-    <td style="padding-left: 5em; padding-right: 2em">pseudocount = 0.1</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">alpha = 1</td>
-    <td style="padding-left: 5em; padding-right: 2em">verbosity = 2</td>
-    <td style="padding-left: 5em; padding-right: 2em"></td>
-  </tr>
-
-</table>
-</pre>
-<p>
 This information can be useful in the event you wish to report a
 problem with the FIMO software.
-</p>
-<hr>
-<span style="background-color: #DDDDFF"><a href="#top_buttons"><b>Go to top</b></a></span>
 </body>
 </html>
--- a/test-data/fimo_output_test2.txt	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test2.txt	Wed Dec 11 18:05:15 2019 -0500
@@ -1,12 +1,12 @@
-# motif_id	motif_alt_id	sequence_name	start	stop	strand	score	p-value	q-value	matched_sequence
-CCAGCAY	DREME-5	chrM	510	516	+	13.5843	4.15e-05	0.668	CCAGCAC
-CCAGCAY	DREME-5	chrM	5137	5143	+	13.5843	4.15e-05	0.668	CCAGCAC
-ACTAAYH	DREME-1	chrM	440	446	+	11.7385	8.2e-05	0.327	ACTAACA
-ACTAAYH	DREME-1	chrM	2093	2099	-	11.7385	8.2e-05	0.327	ACTAACA
-ACTAAYH	DREME-1	chrM	2299	2305	-	11.7385	8.2e-05	0.327	ACTAACA
-ACTAAYH	DREME-1	chrM	5186	5192	+	11.7385	8.2e-05	0.327	ACTAACA
-ACTAAYH	DREME-1	chrM	6530	6536	+	11.7385	8.2e-05	0.327	ACTAACA
-ACTAAYH	DREME-1	chrM	7742	7748	+	11.7385	8.2e-05	0.327	ACTAACA
-ACTAAYH	DREME-1	chrM	13657	13663	+	11.7385	8.2e-05	0.327	ACTAACA
-ACTAAYH	DREME-1	chrM	13741	13747	+	11.7385	8.2e-05	0.327	ACTAACA
+motif_id	motif_alt_id	sequence_name	start	stop	strand	score	p-value	q-value	matched_sequence
+CCAGCAY	DREME-5	chrM	510	516	+	13.5843	4.15e-05	0.683	CCAGCAC
+CCAGCAY	DREME-5	chrM	5137	5143	+	13.5843	4.15e-05	0.683	CCAGCAC
+ACTAAYH	DREME-1	chrM	440	446	+	11.7286	8.2e-05	0.332	ACTAACA
+ACTAAYH	DREME-1	chrM	2093	2099	-	11.7286	8.2e-05	0.332	ACTAACA
+ACTAAYH	DREME-1	chrM	2299	2305	-	11.7286	8.2e-05	0.332	ACTAACA
+ACTAAYH	DREME-1	chrM	5186	5192	+	11.7286	8.2e-05	0.332	ACTAACA
+ACTAAYH	DREME-1	chrM	6530	6536	+	11.7286	8.2e-05	0.332	ACTAACA
+ACTAAYH	DREME-1	chrM	7742	7748	+	11.7286	8.2e-05	0.332	ACTAACA
+ACTAAYH	DREME-1	chrM	13657	13663	+	11.7286	8.2e-05	0.332	ACTAACA
+ACTAAYH	DREME-1	chrM	13741	13747	+	11.7286	8.2e-05	0.332	ACTAACA
 CCAGCAY	DREME-5	chrM	4241	4247	+	13.1461	9.37e-05	1	CCAGCAT
--- a/test-data/fimo_output_test2.xml	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test2.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -1,16 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Begin document body -->
-<fimo version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700">
+<fimo version="5.0.5" release="Mon Mar 18 20:12:19 2019 -0700">
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation=  xmlns:fimo="http://noble.gs.washington.edu/schema/fimo"
 >
-<command-line>fimo -oc fimo_test2_out --bgfile fimo_background_probs_hsa_chrM.txt dreme_fimo_input_1.xml hsa_chrM.fa</command-line>
 <settings>
-<setting name="output directory">fimo_test2_out</setting>
-<setting name="MEME file name">dreme_fimo_input_1.xml</setting>
-<setting name="sequence file name">hsa_chrM.fa</setting>
-<setting name="background file name">fimo_background_probs_hsa_chrM.txt</setting>
-<setting name="allow clobber">true</setting>
+<setting name="allow clobber">false</setting>
 <setting name="compute q-values">true</setting>
 <setting name="parse genomic coord.">false</setting>
 <setting name="text only">false</setting>
@@ -45,7 +40,6 @@
 <motif name="SCCAGG" alt="DREME-4" width="6" best-possible-match="CCCAGG"/>
 <motif name="CCAGCAY" alt="DREME-5" width="7" best-possible-match="CCAGCAC"/>
 <motif name="GMATGT" alt="DREME-6" width="6" best-possible-match="GAATGT"/>
-<background source="fimo_background_probs_hsa_chrM.txt">
 <value letter="A">0.278</value>
 <value letter="C">0.222</value>
 <value letter="G">0.222</value>
--- a/test-data/fimo_output_test3.html	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test3.html	Wed Dec 11 18:05:15 2019 -0500
@@ -5,48 +5,23 @@
 <meta charset="UTF-8">
 <title>FIMO Results</title>
 <style type="text/css">
-td.left {text-align: left;}
-td.right {text-align: right; padding-right: 1cm;}
-</style>
 </head>
-<body bgcolor="#D5F0FF">
-<a name="top_buttons"></a>
-<hr>
-<table summary="buttons" align="left" cellspacing="0">
-<tr>
+<body color="#000000">
 <td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td>
 <td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td>
 <td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td>
-</tr>
-</table>
-<br/>
-<br/>
-<hr/>
+<td bgcolor="#FFDD00"><a href="fimo.tsv""><b>Results in TSV Format</b></a></td>
+<td bgcolor="#FFDDFF"><a href="fimo.gff""><b>Results in GFF3 Format</b></a></td>
 <center><big><b>FIMO - Motif search tool</b></big></center>
-<hr>
-<p>
-FIMO version 4.12.0, (Release date: Tue Jun 27 16:22:50 2017 -0700)
-</p>
-<p>
-For further information on how to interpret these results
-or to get a copy of the FIMO software please access
-<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p>
+FIMO version 5.0.5, (Release date: Mon Mar 18 20:12:19 2019 -0700)
+For further information on how to interpret these results please access <a href="http://meme-suite.org/doc/fimo-output-format.html">http://meme-suite.org/doc/fimo-output-format.html</a>.<br>
+To get a copy of the FIMO software please access <a href="http://meme-suite.org">http://meme-suite.org</a>
 <p>If you use FIMO in your research, please cite the following paper:<br>
 Charles E. Grant, Timothy L. Bailey, and William Stafford Noble,
 "FIMO: Scanning for occurrences of a given motif",
 <i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011.
-<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p>
-<hr>
 <center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center>
-<hr>
-<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;">
-<p>
-  DATABASE hsa_chrM.fa
-  <br />
   Database contains 1 sequences, 16569 residues
-</p>
-<p>
-  MOTIFS dreme_fimo_input_1.xml (DNA)
   <table>
     <thead>
       <tr>
@@ -63,74 +38,29 @@
         <td style="text-align:right;padding-left: 1em;">7</td>
         <td style="text-align:left;padding-left: 1em;">ACTAACA</td>
        </tr>
-      <tr>
-        <td style="text-align:right;">YTAACA</td>
-        <td style="text-align:right;padding-left: 1em;">6</td>
-        <td style="text-align:left;padding-left: 1em;">TTAACA</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">TCTGT</td>
-        <td style="text-align:right;padding-left: 1em;">5</td>
-        <td style="text-align:left;padding-left: 1em;">TCTGT</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">SCCAGG</td>
-        <td style="text-align:right;padding-left: 1em;">6</td>
-        <td style="text-align:left;padding-left: 1em;">CCCAGG</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">CCAGCAY</td>
-        <td style="text-align:right;padding-left: 1em;">7</td>
-        <td style="text-align:left;padding-left: 1em;">CCAGCAC</td>
-       </tr>
-      <tr>
-        <td style="text-align:right;">GMATGT</td>
-        <td style="text-align:right;padding-left: 1em;">6</td>
-        <td style="text-align:left;padding-left: 1em;">GAATGT</td>
-       </tr>
     </tbody>
   </table>
 </p>
 <p>
 Random model letter frequencies (--uniform--):
-<br/>
-
 A 0.250 C 0.250 G 0.250 T 0.250 </p>
-</div>
-<hr>
 <center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center>
-<hr>
-<ul>
-<li>
 There were 517 motif occurences with a p-value less than 0.01.
-
 The full set of motif occurences can be seen in the
-tab-delimited plain text output file
-<a href="fimo.txt">fimo.txt</a>, 
-the GFF file 
-<a href="fimo.gff">fimo.gff</a> 
+TSV (tab-delimited values) output file
+the GFF3 file 
 which may be suitable for uploading to the 
-<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a>
 (assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format),
 or the XML file 
-<a href="fimo.xml">fimo.xml</a>.
-</li>
-<li>
-The p-value of a motif occurrence is defined as the
+The <i>p</i>-value of a motif occurrence is defined as the
 probability of a random sequence of the same length as the motif
 matching that position of the sequence with as good or better a score.
-</li>
-<li>
 The score for the match of a position in a sequence to a motif
 is computed by summing the appropriate entries from each column of
 the position-dependent scoring matrix that represents the motif.
-</li>
-<li>
 The q-value of a motif occurrence is defined as the
 false discovery rate if the occurrence is accepted as significant.
-</li>
-<li>The table is sorted by increasing p-value.</li>
-</ul>
+<li>The table is sorted by increasing <i>p</i>-value.</li>
 <table border="1">
 <thead>
 <tr>
@@ -156,5736 +86,7 @@
       <td style="text-align:left;">6.1e-05</td>
       <td style="text-align:left;">0.239</td>
       <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2093</td>
-      <td style="text-align:left;">2099</td>
-      <td style="text-align:left;">6.1e-05</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2299</td>
-      <td style="text-align:left;">2305</td>
-      <td style="text-align:left;">6.1e-05</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5186</td>
-      <td style="text-align:left;">5192</td>
-      <td style="text-align:left;">6.1e-05</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6530</td>
-      <td style="text-align:left;">6536</td>
-      <td style="text-align:left;">6.1e-05</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7742</td>
-      <td style="text-align:left;">7748</td>
-      <td style="text-align:left;">6.1e-05</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13657</td>
-      <td style="text-align:left;">13663</td>
-      <td style="text-align:left;">6.1e-05</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13741</td>
-      <td style="text-align:left;">13747</td>
-      <td style="text-align:left;">6.1e-05</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3768</td>
-      <td style="text-align:left;">3774</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5498</td>
-      <td style="text-align:left;">5504</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7736</td>
-      <td style="text-align:left;">7742</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9872</td>
-      <td style="text-align:left;">9878</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10106</td>
-      <td style="text-align:left;">10112</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10313</td>
-      <td style="text-align:left;">10319</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11818</td>
-      <td style="text-align:left;">11824</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15903</td>
-      <td style="text-align:left;">15909</td>
-      <td style="text-align:left;">0.000122</td>
-      <td style="text-align:left;">0.239</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7732</td>
-      <td style="text-align:left;">7738</td>
-      <td style="text-align:left;">0.000183</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10960</td>
-      <td style="text-align:left;">10966</td>
-      <td style="text-align:left;">0.000183</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">862</td>
-      <td style="text-align:left;">868</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1832</td>
-      <td style="text-align:left;">1838</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8679</td>
-      <td style="text-align:left;">8685</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8770</td>
-      <td style="text-align:left;">8776</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9347</td>
-      <td style="text-align:left;">9353</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9359</td>
-      <td style="text-align:left;">9365</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10302</td>
-      <td style="text-align:left;">10308</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14765</td>
-      <td style="text-align:left;">14771</td>
-      <td style="text-align:left;">0.000244</td>
-      <td style="text-align:left;">0.294</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4466</td>
-      <td style="text-align:left;">4472</td>
-      <td style="text-align:left;">0.000305</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11248</td>
-      <td style="text-align:left;">11254</td>
-      <td style="text-align:left;">0.000305</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">475</td>
-      <td style="text-align:left;">481</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7930</td>
-      <td style="text-align:left;">7936</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8649</td>
-      <td style="text-align:left;">8655</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8670</td>
-      <td style="text-align:left;">8676</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10768</td>
-      <td style="text-align:left;">10774</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11053</td>
-      <td style="text-align:left;">11059</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11101</td>
-      <td style="text-align:left;">11107</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12720</td>
-      <td style="text-align:left;">12726</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13149</td>
-      <td style="text-align:left;">13155</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14216</td>
-      <td style="text-align:left;">14222</td>
-      <td style="text-align:left;">0.000366</td>
-      <td style="text-align:left;">0.302</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">678</td>
-      <td style="text-align:left;">684</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1435</td>
-      <td style="text-align:left;">1441</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1524</td>
-      <td style="text-align:left;">1530</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2035</td>
-      <td style="text-align:left;">2041</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8440</td>
-      <td style="text-align:left;">8446</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">9995</td>
-      <td style="text-align:left;">10001</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10225</td>
-      <td style="text-align:left;">10231</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">12725</td>
-      <td style="text-align:left;">12731</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14393</td>
-      <td style="text-align:left;">14399</td>
-      <td style="text-align:left;">0.000549</td>
-      <td style="text-align:left;">0.366</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2294</td>
-      <td style="text-align:left;">2300</td>
-      <td style="text-align:left;">0.00061</td>
-      <td style="text-align:left;">0.398</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">206</td>
-      <td style="text-align:left;">212</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">237</td>
-      <td style="text-align:left;">243</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">370</td>
-      <td style="text-align:left;">376</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1630</td>
-      <td style="text-align:left;">1636</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1702</td>
-      <td style="text-align:left;">1708</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2309</td>
-      <td style="text-align:left;">2315</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2363</td>
-      <td style="text-align:left;">2369</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2370</td>
-      <td style="text-align:left;">2376</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2395</td>
-      <td style="text-align:left;">2401</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2761</td>
-      <td style="text-align:left;">2767</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2784</td>
-      <td style="text-align:left;">2790</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3191</td>
-      <td style="text-align:left;">3197</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3756</td>
-      <td style="text-align:left;">3762</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3873</td>
-      <td style="text-align:left;">3879</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3991</td>
-      <td style="text-align:left;">3997</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">4445</td>
-      <td style="text-align:left;">4451</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4734</td>
-      <td style="text-align:left;">4740</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5061</td>
-      <td style="text-align:left;">5067</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5177</td>
-      <td style="text-align:left;">5183</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5391</td>
-      <td style="text-align:left;">5397</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5680</td>
-      <td style="text-align:left;">5686</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">5686</td>
-      <td style="text-align:left;">5692</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6595</td>
-      <td style="text-align:left;">6601</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7146</td>
-      <td style="text-align:left;">7152</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7286</td>
-      <td style="text-align:left;">7292</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7714</td>
-      <td style="text-align:left;">7720</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7720</td>
-      <td style="text-align:left;">7726</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8344</td>
-      <td style="text-align:left;">8350</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8374</td>
-      <td style="text-align:left;">8380</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8460</td>
-      <td style="text-align:left;">8466</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9010</td>
-      <td style="text-align:left;">9016</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9257</td>
-      <td style="text-align:left;">9263</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9351</td>
-      <td style="text-align:left;">9357</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10127</td>
-      <td style="text-align:left;">10133</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10295</td>
-      <td style="text-align:left;">10301</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10496</td>
-      <td style="text-align:left;">10502</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10792</td>
-      <td style="text-align:left;">10798</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10798</td>
-      <td style="text-align:left;">10804</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10939</td>
-      <td style="text-align:left;">10945</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11023</td>
-      <td style="text-align:left;">11029</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11258</td>
-      <td style="text-align:left;">11264</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11314</td>
-      <td style="text-align:left;">11320</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11593</td>
-      <td style="text-align:left;">11599</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11650</td>
-      <td style="text-align:left;">11656</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11768</td>
-      <td style="text-align:left;">11774</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">11901</td>
-      <td style="text-align:left;">11907</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11941</td>
-      <td style="text-align:left;">11947</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12026</td>
-      <td style="text-align:left;">12032</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12245</td>
-      <td style="text-align:left;">12251</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12412</td>
-      <td style="text-align:left;">12418</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12530</td>
-      <td style="text-align:left;">12536</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">12617</td>
-      <td style="text-align:left;">12623</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12736</td>
-      <td style="text-align:left;">12742</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13161</td>
-      <td style="text-align:left;">13167</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13626</td>
-      <td style="text-align:left;">13632</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13797</td>
-      <td style="text-align:left;">13803</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13830</td>
-      <td style="text-align:left;">13836</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13858</td>
-      <td style="text-align:left;">13864</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14185</td>
-      <td style="text-align:left;">14191</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14189</td>
-      <td style="text-align:left;">14195</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14548</td>
-      <td style="text-align:left;">14554</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14569</td>
-      <td style="text-align:left;">14575</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15469</td>
-      <td style="text-align:left;">15475</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15599</td>
-      <td style="text-align:left;">15605</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16227</td>
-      <td style="text-align:left;">16233</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16277</td>
-      <td style="text-align:left;">16283</td>
-      <td style="text-align:left;">0.00165</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">852</td>
-      <td style="text-align:left;">858</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">1449</td>
-      <td style="text-align:left;">1455</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4913</td>
-      <td style="text-align:left;">4919</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11278</td>
-      <td style="text-align:left;">11284</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13686</td>
-      <td style="text-align:left;">13692</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14582</td>
-      <td style="text-align:left;">14588</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14636</td>
-      <td style="text-align:left;">14642</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15703</td>
-      <td style="text-align:left;">15709</td>
-      <td style="text-align:left;">0.00177</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">152</td>
-      <td style="text-align:left;">158</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">234</td>
-      <td style="text-align:left;">240</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">472</td>
-      <td style="text-align:left;">478</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">645</td>
-      <td style="text-align:left;">651</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">671</td>
-      <td style="text-align:left;">677</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2305</td>
-      <td style="text-align:left;">2311</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2529</td>
-      <td style="text-align:left;">2535</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2744</td>
-      <td style="text-align:left;">2750</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2880</td>
-      <td style="text-align:left;">2886</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4158</td>
-      <td style="text-align:left;">4164</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4206</td>
-      <td style="text-align:left;">4212</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4301</td>
-      <td style="text-align:left;">4307</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4679</td>
-      <td style="text-align:left;">4685</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4728</td>
-      <td style="text-align:left;">4734</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4754</td>
-      <td style="text-align:left;">4760</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5036</td>
-      <td style="text-align:left;">5042</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5103</td>
-      <td style="text-align:left;">5109</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5153</td>
-      <td style="text-align:left;">5159</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">5962</td>
-      <td style="text-align:left;">5968</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6110</td>
-      <td style="text-align:left;">6116</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6155</td>
-      <td style="text-align:left;">6161</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6527</td>
-      <td style="text-align:left;">6533</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">6973</td>
-      <td style="text-align:left;">6979</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7295</td>
-      <td style="text-align:left;">7301</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7301</td>
-      <td style="text-align:left;">7307</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">7300</td>
-      <td style="text-align:left;">7306</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7349</td>
-      <td style="text-align:left;">7355</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">7351</td>
-      <td style="text-align:left;">7357</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">7522</td>
-      <td style="text-align:left;">7528</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8739</td>
-      <td style="text-align:left;">8745</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">8738</td>
-      <td style="text-align:left;">8744</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">8945</td>
-      <td style="text-align:left;">8951</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8982</td>
-      <td style="text-align:left;">8988</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">9613</td>
-      <td style="text-align:left;">9619</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9656</td>
-      <td style="text-align:left;">9662</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10055</td>
-      <td style="text-align:left;">10061</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10103</td>
-      <td style="text-align:left;">10109</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10246</td>
-      <td style="text-align:left;">10252</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10315</td>
-      <td style="text-align:left;">10321</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10336</td>
-      <td style="text-align:left;">10342</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10368</td>
-      <td style="text-align:left;">10374</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10526</td>
-      <td style="text-align:left;">10532</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10525</td>
-      <td style="text-align:left;">10531</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10574</td>
-      <td style="text-align:left;">10580</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10657</td>
-      <td style="text-align:left;">10663</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10699</td>
-      <td style="text-align:left;">10705</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10788</td>
-      <td style="text-align:left;">10794</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10858</td>
-      <td style="text-align:left;">10864</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10954</td>
-      <td style="text-align:left;">10960</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11873</td>
-      <td style="text-align:left;">11879</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">11958</td>
-      <td style="text-align:left;">11964</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12333</td>
-      <td style="text-align:left;">12339</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12349</td>
-      <td style="text-align:left;">12355</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12425</td>
-      <td style="text-align:left;">12431</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">12471</td>
-      <td style="text-align:left;">12477</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12933</td>
-      <td style="text-align:left;">12939</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12972</td>
-      <td style="text-align:left;">12978</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13269</td>
-      <td style="text-align:left;">13275</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">13274</td>
-      <td style="text-align:left;">13280</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">13566</td>
-      <td style="text-align:left;">13572</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14210</td>
-      <td style="text-align:left;">14216</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14213</td>
-      <td style="text-align:left;">14219</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14251</td>
-      <td style="text-align:left;">14257</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14314</td>
-      <td style="text-align:left;">14320</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14510</td>
-      <td style="text-align:left;">14516</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14545</td>
-      <td style="text-align:left;">14551</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14773</td>
-      <td style="text-align:left;">14779</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">15627</td>
-      <td style="text-align:left;">15633</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15838</td>
-      <td style="text-align:left;">15844</td>
-      <td style="text-align:left;">0.00269</td>
-      <td style="text-align:left;">0.441</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">193</td>
-      <td style="text-align:left;">199</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">714</td>
-      <td style="text-align:left;">720</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1860</td>
-      <td style="text-align:left;">1866</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1870</td>
-      <td style="text-align:left;">1876</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2220</td>
-      <td style="text-align:left;">2226</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2901</td>
-      <td style="text-align:left;">2907</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4154</td>
-      <td style="text-align:left;">4160</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">4283</td>
-      <td style="text-align:left;">4289</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5099</td>
-      <td style="text-align:left;">5105</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5156</td>
-      <td style="text-align:left;">5162</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">5555</td>
-      <td style="text-align:left;">5561</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6142</td>
-      <td style="text-align:left;">6148</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6678</td>
-      <td style="text-align:left;">6684</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7169</td>
-      <td style="text-align:left;">7175</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8304</td>
-      <td style="text-align:left;">8310</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8456</td>
-      <td style="text-align:left;">8462</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8817</td>
-      <td style="text-align:left;">8823</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">8949</td>
-      <td style="text-align:left;">8955</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9120</td>
-      <td style="text-align:left;">9126</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9852</td>
-      <td style="text-align:left;">9858</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10025</td>
-      <td style="text-align:left;">10031</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10964</td>
-      <td style="text-align:left;">10970</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11293</td>
-      <td style="text-align:left;">11299</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11347</td>
-      <td style="text-align:left;">11353</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12226</td>
-      <td style="text-align:left;">12232</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">12516</td>
-      <td style="text-align:left;">12522</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13850</td>
-      <td style="text-align:left;">13856</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13862</td>
-      <td style="text-align:left;">13868</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14206</td>
-      <td style="text-align:left;">14212</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15185</td>
-      <td style="text-align:left;">15191</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15189</td>
-      <td style="text-align:left;">15195</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15603</td>
-      <td style="text-align:left;">15609</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15844</td>
-      <td style="text-align:left;">15850</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15848</td>
-      <td style="text-align:left;">15854</td>
-      <td style="text-align:left;">0.0036</td>
-      <td style="text-align:left;">0.501</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">21</td>
-      <td style="text-align:left;">27</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">381</td>
-      <td style="text-align:left;">387</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">529</td>
-      <td style="text-align:left;">535</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">547</td>
-      <td style="text-align:left;">553</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">823</td>
-      <td style="text-align:left;">829</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">873</td>
-      <td style="text-align:left;">879</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">910</td>
-      <td style="text-align:left;">916</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">978</td>
-      <td style="text-align:left;">984</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">1569</td>
-      <td style="text-align:left;">1575</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1596</td>
-      <td style="text-align:left;">1602</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1991</td>
-      <td style="text-align:left;">1997</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2578</td>
-      <td style="text-align:left;">2584</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2765</td>
-      <td style="text-align:left;">2771</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3031</td>
-      <td style="text-align:left;">3037</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3225</td>
-      <td style="text-align:left;">3231</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3883</td>
-      <td style="text-align:left;">3889</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4101</td>
-      <td style="text-align:left;">4107</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4191</td>
-      <td style="text-align:left;">4197</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4598</td>
-      <td style="text-align:left;">4604</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4874</td>
-      <td style="text-align:left;">4880</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5237</td>
-      <td style="text-align:left;">5243</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5839</td>
-      <td style="text-align:left;">5845</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5931</td>
-      <td style="text-align:left;">5937</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6335</td>
-      <td style="text-align:left;">6341</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7228</td>
-      <td style="text-align:left;">7234</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7781</td>
-      <td style="text-align:left;">7787</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8315</td>
-      <td style="text-align:left;">8321</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8508</td>
-      <td style="text-align:left;">8514</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8721</td>
-      <td style="text-align:left;">8727</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8805</td>
-      <td style="text-align:left;">8811</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9003</td>
-      <td style="text-align:left;">9009</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9076</td>
-      <td style="text-align:left;">9082</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9124</td>
-      <td style="text-align:left;">9130</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11548</td>
-      <td style="text-align:left;">11554</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11852</td>
-      <td style="text-align:left;">11858</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11876</td>
-      <td style="text-align:left;">11882</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11905</td>
-      <td style="text-align:left;">11911</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12013</td>
-      <td style="text-align:left;">12019</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12336</td>
-      <td style="text-align:left;">12342</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12363</td>
-      <td style="text-align:left;">12369</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13295</td>
-      <td style="text-align:left;">13301</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13672</td>
-      <td style="text-align:left;">13678</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13854</td>
-      <td style="text-align:left;">13860</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13998</td>
-      <td style="text-align:left;">14004</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14124</td>
-      <td style="text-align:left;">14130</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14384</td>
-      <td style="text-align:left;">14390</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14401</td>
-      <td style="text-align:left;">14407</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14624</td>
-      <td style="text-align:left;">14630</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14786</td>
-      <td style="text-align:left;">14792</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14910</td>
-      <td style="text-align:left;">14916</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15193</td>
-      <td style="text-align:left;">15199</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15631</td>
-      <td style="text-align:left;">15637</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15748</td>
-      <td style="text-align:left;">15754</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16066</td>
-      <td style="text-align:left;">16072</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16281</td>
-      <td style="text-align:left;">16287</td>
-      <td style="text-align:left;">0.00452</td>
-      <td style="text-align:left;">0.505</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">211</td>
-      <td style="text-align:left;">217</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">210</td>
-      <td style="text-align:left;">216</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">214</td>
-      <td style="text-align:left;">220</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">1961</td>
-      <td style="text-align:left;">1967</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2188</td>
-      <td style="text-align:left;">2194</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3771</td>
-      <td style="text-align:left;">3777</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3923</td>
-      <td style="text-align:left;">3929</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">4469</td>
-      <td style="text-align:left;">4475</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4543</td>
-      <td style="text-align:left;">4549</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5085</td>
-      <td style="text-align:left;">5091</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6146</td>
-      <td style="text-align:left;">6152</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7087</td>
-      <td style="text-align:left;">7093</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7304</td>
-      <td style="text-align:left;">7310</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8041</td>
-      <td style="text-align:left;">8047</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8221</td>
-      <td style="text-align:left;">8227</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">8220</td>
-      <td style="text-align:left;">8226</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8795</td>
-      <td style="text-align:left;">8801</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8946</td>
-      <td style="text-align:left;">8952</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8973</td>
-      <td style="text-align:left;">8979</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9042</td>
-      <td style="text-align:left;">9048</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9111</td>
-      <td style="text-align:left;">9117</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">9538</td>
-      <td style="text-align:left;">9544</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9680</td>
-      <td style="text-align:left;">9686</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9953</td>
-      <td style="text-align:left;">9959</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10004</td>
-      <td style="text-align:left;">10010</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10029</td>
-      <td style="text-align:left;">10035</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10028</td>
-      <td style="text-align:left;">10034</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10109</td>
-      <td style="text-align:left;">10115</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10112</td>
-      <td style="text-align:left;">10118</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10402</td>
-      <td style="text-align:left;">10408</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10438</td>
-      <td style="text-align:left;">10444</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10852</td>
-      <td style="text-align:left;">10858</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10855</td>
-      <td style="text-align:left;">10861</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10876</td>
-      <td style="text-align:left;">10882</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11500</td>
-      <td style="text-align:left;">11506</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12378</td>
-      <td style="text-align:left;">12384</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12584</td>
-      <td style="text-align:left;">12590</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">12679</td>
-      <td style="text-align:left;">12685</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12708</td>
-      <td style="text-align:left;">12714</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">13013</td>
-      <td style="text-align:left;">13019</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13350</td>
-      <td style="text-align:left;">13356</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13611</td>
-      <td style="text-align:left;">13617</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">14296</td>
-      <td style="text-align:left;">14302</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14782</td>
-      <td style="text-align:left;">14788</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">14781</td>
-      <td style="text-align:left;">14787</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14793</td>
-      <td style="text-align:left;">14799</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15178</td>
-      <td style="text-align:left;">15184</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15856</td>
-      <td style="text-align:left;">15862</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16003</td>
-      <td style="text-align:left;">16009</td>
-      <td style="text-align:left;">0.00543</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATT</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">1074</td>
-      <td style="text-align:left;">1080</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2270</td>
-      <td style="text-align:left;">2276</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3081</td>
-      <td style="text-align:left;">3087</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3345</td>
-      <td style="text-align:left;">3351</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3824</td>
-      <td style="text-align:left;">3830</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3924</td>
-      <td style="text-align:left;">3930</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4470</td>
-      <td style="text-align:left;">4476</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4520</td>
-      <td style="text-align:left;">4526</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4737</td>
-      <td style="text-align:left;">4743</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4747</td>
-      <td style="text-align:left;">4753</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4757</td>
-      <td style="text-align:left;">4763</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5120</td>
-      <td style="text-align:left;">5126</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5354</td>
-      <td style="text-align:left;">5360</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5378</td>
-      <td style="text-align:left;">5384</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5453</td>
-      <td style="text-align:left;">5459</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5501</td>
-      <td style="text-align:left;">5507</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5707</td>
-      <td style="text-align:left;">5713</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5921</td>
-      <td style="text-align:left;">5927</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6095</td>
-      <td style="text-align:left;">6101</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">6145</td>
-      <td style="text-align:left;">6151</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6158</td>
-      <td style="text-align:left;">6164</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6307</td>
-      <td style="text-align:left;">6313</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6467</td>
-      <td style="text-align:left;">6473</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6659</td>
-      <td style="text-align:left;">6665</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6682</td>
-      <td style="text-align:left;">6688</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">6982</td>
-      <td style="text-align:left;">6988</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">8007</td>
-      <td style="text-align:left;">8013</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8422</td>
-      <td style="text-align:left;">8428</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8589</td>
-      <td style="text-align:left;">8595</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9093</td>
-      <td style="text-align:left;">9099</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9214</td>
-      <td style="text-align:left;">9220</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10079</td>
-      <td style="text-align:left;">10085</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10337</td>
-      <td style="text-align:left;">10343</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10387</td>
-      <td style="text-align:left;">10393</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10658</td>
-      <td style="text-align:left;">10664</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10700</td>
-      <td style="text-align:left;">10706</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11007</td>
-      <td style="text-align:left;">11013</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11065</td>
-      <td style="text-align:left;">11071</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11134</td>
-      <td style="text-align:left;">11140</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11239</td>
-      <td style="text-align:left;">11245</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11290</td>
-      <td style="text-align:left;">11296</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11734</td>
-      <td style="text-align:left;">11740</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11959</td>
-      <td style="text-align:left;">11965</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12676</td>
-      <td style="text-align:left;">12682</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12699</td>
-      <td style="text-align:left;">12705</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12952</td>
-      <td style="text-align:left;">12958</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13113</td>
-      <td style="text-align:left;">13119</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13419</td>
-      <td style="text-align:left;">13425</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14118</td>
-      <td style="text-align:left;">14124</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14136</td>
-      <td style="text-align:left;">14142</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14366</td>
-      <td style="text-align:left;">14372</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14890</td>
-      <td style="text-align:left;">14896</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14907</td>
-      <td style="text-align:left;">14913</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15475</td>
-      <td style="text-align:left;">15481</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15652</td>
-      <td style="text-align:left;">15658</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15832</td>
-      <td style="text-align:left;">15838</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15951</td>
-      <td style="text-align:left;">15957</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16013</td>
-      <td style="text-align:left;">16019</td>
-      <td style="text-align:left;">0.00635</td>
-      <td style="text-align:left;">0.514</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">197</td>
-      <td style="text-align:left;">203</td>
-      <td style="text-align:left;">0.00647</td>
-      <td style="text-align:left;">0.521</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8713</td>
-      <td style="text-align:left;">8719</td>
-      <td style="text-align:left;">0.00647</td>
-      <td style="text-align:left;">0.521</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">28</td>
-      <td style="text-align:left;">34</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">1322</td>
-      <td style="text-align:left;">1328</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2910</td>
-      <td style="text-align:left;">2916</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3035</td>
-      <td style="text-align:left;">3041</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5106</td>
-      <td style="text-align:left;">5112</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">7218</td>
-      <td style="text-align:left;">7224</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8381</td>
-      <td style="text-align:left;">8387</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10580</td>
-      <td style="text-align:left;">10586</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11760</td>
-      <td style="text-align:left;">11766</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13546</td>
-      <td style="text-align:left;">13552</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13663</td>
-      <td style="text-align:left;">13669</td>
-      <td style="text-align:left;">0.00739</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACG</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">57</td>
-      <td style="text-align:left;">63</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">284</td>
-      <td style="text-align:left;">290</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">331</td>
-      <td style="text-align:left;">337</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">361</td>
-      <td style="text-align:left;">367</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">608</td>
-      <td style="text-align:left;">614</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">682</td>
-      <td style="text-align:left;">688</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">946</td>
-      <td style="text-align:left;">952</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">972</td>
-      <td style="text-align:left;">978</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1019</td>
-      <td style="text-align:left;">1025</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1057</td>
-      <td style="text-align:left;">1063</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1142</td>
-      <td style="text-align:left;">1148</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1162</td>
-      <td style="text-align:left;">1168</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1384</td>
-      <td style="text-align:left;">1390</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1864</td>
-      <td style="text-align:left;">1870</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1894</td>
-      <td style="text-align:left;">1900</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1922</td>
-      <td style="text-align:left;">1928</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">1932</td>
-      <td style="text-align:left;">1938</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2124</td>
-      <td style="text-align:left;">2130</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2148</td>
-      <td style="text-align:left;">2154</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2175</td>
-      <td style="text-align:left;">2181</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2192</td>
-      <td style="text-align:left;">2198</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2224</td>
-      <td style="text-align:left;">2230</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2350</td>
-      <td style="text-align:left;">2356</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2463</td>
-      <td style="text-align:left;">2469</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2500</td>
-      <td style="text-align:left;">2506</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">2658</td>
-      <td style="text-align:left;">2664</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2798</td>
-      <td style="text-align:left;">2804</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">2855</td>
-      <td style="text-align:left;">2861</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">3065</td>
-      <td style="text-align:left;">3071</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3262</td>
-      <td style="text-align:left;">3268</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3378</td>
-      <td style="text-align:left;">3384</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3441</td>
-      <td style="text-align:left;">3447</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3486</td>
-      <td style="text-align:left;">3492</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3558</td>
-      <td style="text-align:left;">3564</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">3677</td>
-      <td style="text-align:left;">3683</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4021</td>
-      <td style="text-align:left;">4027</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4087</td>
-      <td style="text-align:left;">4093</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4259</td>
-      <td style="text-align:left;">4265</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4334</td>
-      <td style="text-align:left;">4340</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">4586</td>
-      <td style="text-align:left;">4592</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4602</td>
-      <td style="text-align:left;">4608</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4778</td>
-      <td style="text-align:left;">4784</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4784</td>
-      <td style="text-align:left;">4790</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">4807</td>
-      <td style="text-align:left;">4813</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">4868</td>
-      <td style="text-align:left;">4874</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">5002</td>
-      <td style="text-align:left;">5008</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">5075</td>
-      <td style="text-align:left;">5081</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5128</td>
-      <td style="text-align:left;">5134</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5280</td>
-      <td style="text-align:left;">5286</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5405</td>
-      <td style="text-align:left;">5411</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5533</td>
-      <td style="text-align:left;">5539</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5670</td>
-      <td style="text-align:left;">5676</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">5938</td>
-      <td style="text-align:left;">5944</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">6106</td>
-      <td style="text-align:left;">6112</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">6376</td>
-      <td style="text-align:left;">6382</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">6451</td>
-      <td style="text-align:left;">6457</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">7445</td>
-      <td style="text-align:left;">7451</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">7581</td>
-      <td style="text-align:left;">7587</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">7692</td>
-      <td style="text-align:left;">7698</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">7800</td>
-      <td style="text-align:left;">7806</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8230</td>
-      <td style="text-align:left;">8236</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">8323</td>
-      <td style="text-align:left;">8329</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8335</td>
-      <td style="text-align:left;">8341</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8494</td>
-      <td style="text-align:left;">8500</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8521</td>
-      <td style="text-align:left;">8527</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8531</td>
-      <td style="text-align:left;">8537</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">8757</td>
-      <td style="text-align:left;">8763</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8881</td>
-      <td style="text-align:left;">8887</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">8887</td>
-      <td style="text-align:left;">8893</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">9173</td>
-      <td style="text-align:left;">9179</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">9236</td>
-      <td style="text-align:left;">9242</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">9706</td>
-      <td style="text-align:left;">9712</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">9796</td>
-      <td style="text-align:left;">9802</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">9987</td>
-      <td style="text-align:left;">9993</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10075</td>
-      <td style="text-align:left;">10081</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10243</td>
-      <td style="text-align:left;">10249</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10333</td>
-      <td style="text-align:left;">10339</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10376</td>
-      <td style="text-align:left;">10382</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10379</td>
-      <td style="text-align:left;">10385</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">10630</td>
-      <td style="text-align:left;">10636</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">10762</td>
-      <td style="text-align:left;">10768</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11029</td>
-      <td style="text-align:left;">11035</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">11367</td>
-      <td style="text-align:left;">11373</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11602</td>
-      <td style="text-align:left;">11608</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">11646</td>
-      <td style="text-align:left;">11652</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11751</td>
-      <td style="text-align:left;">11757</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">11757</td>
-      <td style="text-align:left;">11763</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12152</td>
-      <td style="text-align:left;">12158</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">12295</td>
-      <td style="text-align:left;">12301</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">12311</td>
-      <td style="text-align:left;">12317</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12327</td>
-      <td style="text-align:left;">12333</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12352</td>
-      <td style="text-align:left;">12358</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12416</td>
-      <td style="text-align:left;">12422</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12509</td>
-      <td style="text-align:left;">12515</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">12662</td>
-      <td style="text-align:left;">12668</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">13109</td>
-      <td style="text-align:left;">13115</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13263</td>
-      <td style="text-align:left;">13269</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13422</td>
-      <td style="text-align:left;">13428</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13667</td>
-      <td style="text-align:left;">13673</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13791</td>
-      <td style="text-align:left;">13797</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13866</td>
-      <td style="text-align:left;">13872</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">13872</td>
-      <td style="text-align:left;">13878</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">13894</td>
-      <td style="text-align:left;">13900</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14007</td>
-      <td style="text-align:left;">14013</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14023</td>
-      <td style="text-align:left;">14029</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14405</td>
-      <td style="text-align:left;">14411</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14501</td>
-      <td style="text-align:left;">14507</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14687</td>
-      <td style="text-align:left;">14693</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14732</td>
-      <td style="text-align:left;">14738</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">14776</td>
-      <td style="text-align:left;">14782</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15072</td>
-      <td style="text-align:left;">15078</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15607</td>
-      <td style="text-align:left;">15613</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15874</td>
-      <td style="text-align:left;">15880</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">-</td>
-      <td style="text-align:left;">15892</td>
-      <td style="text-align:left;">15898</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">15995</td>
-      <td style="text-align:left;">16001</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16269</td>
-      <td style="text-align:left;">16275</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td>
-   </tr>
-    <tr>
-      <td style="text-align:left;">ACTAAYH</td>
-      <td style="text-align:left;">DREME-1</td>
-      <td style="text-align:left;">chrM</td>
-      <td style="text-align:center;">+</td>
-      <td style="text-align:left;">16553</td>
-      <td style="text-align:left;">16559</td>
-      <td style="text-align:left;">0.00922</td>
-      <td style="text-align:left;">0.559</td>
-      <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAGA</td>
-   </tr>
-</tbody>
-</table>
-
-<hr>
-<center><big><b><a name="debugging_information">DEBUGGING INFORMATION</a></b></big></center>
-<hr>
-<p>
-Command line:
-</p>
-<pre>
-fimo -o ./fimo_test4_out --thresh 0.01 --bgfile --uniform-- --max-stored-scores 100000 --motif ACTAAYH --motif-pseudo 0.1 dreme_fimo_input_1.xml hsa_chrM.fa
-</pre>
-<p>
-Settings:
-</p>
-<pre>
-<table>
-  <tr>
-    <td style="padding-right: 2em">output_directory = ./fimo_test4_out</td>
-    <td style="padding-left: 5em; padding-right: 2em">MEME file name = dreme_fimo_input_1.xml</td>
-    <td style="padding-left: 5em; padding-right: 2em">sequence file name = hsa_chrM.fa</td>
-  </tr>  <tr>
-    <td style="padding-right: 2em">background file name = --uniform--</td>
-    <td style="padding-left: 5em; padding-right: 2em">alphabet = DNA</td>
-    <td style="padding-left: 5em; padding-right: 2em">max stored scores = 100000</td>
-  </tr>  <tr>
-    <td style="padding-right: 2em">allow clobber = false</td>
-    <td style="padding-left: 5em; padding-right: 2em">compute q-values = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">parse genomic coord. = false</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">text only = false</td>
-    <td style="padding-left: 5em; padding-right: 2em">scan both strands = true</td>
-    <td style="padding-left: 5em; padding-right: 2em">max strand = false</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">threshold type = p-value</td>
-    <td style="padding-left: 5em; padding-right: 2em">output theshold = 0.01</td>
-    <td style="padding-left: 5em; padding-right: 2em">pseudocount = 0.1</td>
-  </tr>
-  <tr>
-    <td style="padding-right: 2em">alpha = 1</td>
-    <td style="padding-left: 5em; padding-right: 2em">verbosity = 2</td>
-    <td style="padding-left: 5em; padding-right: 2em"></td>
-  </tr>
-
-</table>
-</pre>
-<p>
 This information can be useful in the event you wish to report a
 problem with the FIMO software.
-</p>
-<hr>
-<span style="background-color: #DDDDFF"><a href="#top_buttons"><b>Go to top</b></a></span>
 </body>
 </html>
--- a/test-data/fimo_output_test3.txt	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test3.txt	Wed Dec 11 18:05:15 2019 -0500
@@ -1,4 +1,4 @@
-# motif_id	motif_alt_id	sequence_name	start	stop	strand	score	p-value	q-value	matched_sequence
+motif_id	motif_alt_id	sequence_name	start	stop	strand	score	p-value	q-value	matched_sequence
 ACTAAYH	DREME-1	chrM	440	446	+	12.1831	6.1e-05	0.239	ACTAACA
 ACTAAYH	DREME-1	chrM	2093	2099	-	12.1831	6.1e-05	0.239	ACTAACA
 ACTAAYH	DREME-1	chrM	2299	2305	-	12.1831	6.1e-05	0.239	ACTAACA
@@ -20,499 +20,3 @@
 ACTAAYH	DREME-1	chrM	862	868	+	11.2394	0.000244	0.294	ACTAACC
 ACTAAYH	DREME-1	chrM	1832	1838	+	11.2394	0.000244	0.294	ACTAACC
 ACTAAYH	DREME-1	chrM	8679	8685	+	11.2394	0.000244	0.294	ACTAACC
-ACTAAYH	DREME-1	chrM	8770	8776	+	11.2394	0.000244	0.294	ACTAACC
-ACTAAYH	DREME-1	chrM	9347	9353	+	11.2394	0.000244	0.294	ACTAACC
-ACTAAYH	DREME-1	chrM	9359	9365	+	11.2394	0.000244	0.294	ACTAACC
-ACTAAYH	DREME-1	chrM	10302	10308	+	11.2394	0.000244	0.294	ACTAACC
-ACTAAYH	DREME-1	chrM	14765	14771	+	11.2394	0.000244	0.294	ACTAACC
-ACTAAYH	DREME-1	chrM	4466	4472	+	10.8592	0.000305	0.302	ACTAATT
-ACTAAYH	DREME-1	chrM	11248	11254	+	10.8592	0.000305	0.302	ACTAATT
-ACTAAYH	DREME-1	chrM	475	481	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	7930	7936	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	8649	8655	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	8670	8676	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	10768	10774	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	11053	11059	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	11101	11107	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	12720	12726	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	13149	13155	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	14216	14222	+	10.6479	0.000366	0.302	ACTAATC
-ACTAAYH	DREME-1	chrM	678	684	-	-1.07042	0.000549	0.366	ACTAAGA
-ACTAAYH	DREME-1	chrM	1435	1441	+	-1.07042	0.000549	0.366	ACTAAGA
-ACTAAYH	DREME-1	chrM	1524	1530	+	-1.07042	0.000549	0.366	ACTAAAA
-ACTAAYH	DREME-1	chrM	2035	2041	-	-1.07042	0.000549	0.366	ACTAAGA
-ACTAAYH	DREME-1	chrM	8440	8446	+	-1.07042	0.000549	0.366	ACTAAAA
-ACTAAYH	DREME-1	chrM	9995	10001	-	-1.07042	0.000549	0.366	ACTAAAA
-ACTAAYH	DREME-1	chrM	10225	10231	-	-1.07042	0.000549	0.366	ACTAAGA
-ACTAAYH	DREME-1	chrM	12725	12731	-	-1.07042	0.000549	0.366	ACTAAGA
-ACTAAYH	DREME-1	chrM	14393	14399	+	-1.07042	0.000549	0.366	ACTAAAA
-ACTAAYH	DREME-1	chrM	2294	2300	+	-1.30986	0.00061	0.398	ACTAATG
-ACTAAYH	DREME-1	chrM	206	212	-	-1.80282	0.00165	0.441	ATTAACA
-ACTAAYH	DREME-1	chrM	237	243	+	-1.80282	0.00165	0.441	AATAACA
-ACTAAYH	DREME-1	chrM	370	376	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	1630	1636	+	-1.80282	0.00165	0.441	ACTTACA
-ACTAAYH	DREME-1	chrM	1702	1708	+	-1.80282	0.00165	0.441	ACTACCA
-ACTAAYH	DREME-1	chrM	2309	2315	+	-1.80282	0.00165	0.441	AGTAACA
-ACTAAYH	DREME-1	chrM	2363	2369	+	-1.80282	0.00165	0.441	ACTGACA
-ACTAAYH	DREME-1	chrM	2370	2376	+	-1.80282	0.00165	0.441	ATTAACA
-ACTAAYH	DREME-1	chrM	2395	2401	+	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	2761	2767	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	2784	2790	+	-1.80282	0.00165	0.441	ACTACCA
-ACTAAYH	DREME-1	chrM	3191	3197	-	-1.80282	0.00165	0.441	ACTAAGT
-ACTAAYH	DREME-1	chrM	3756	3762	+	-1.80282	0.00165	0.441	ACTATCA
-ACTAAYH	DREME-1	chrM	3873	3879	+	-1.80282	0.00165	0.441	ACTAGCA
-ACTAAYH	DREME-1	chrM	3991	3997	+	-1.80282	0.00165	0.441	ACAAACA
-ACTAAYH	DREME-1	chrM	4445	4451	-	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	4734	4740	+	-1.80282	0.00165	0.441	ACTACCA
-ACTAAYH	DREME-1	chrM	5061	5067	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	5177	5183	+	-1.80282	0.00165	0.441	GCTAACA
-ACTAAYH	DREME-1	chrM	5391	5397	+	-1.80282	0.00165	0.441	TCTAACA
-ACTAAYH	DREME-1	chrM	5680	5686	+	-1.80282	0.00165	0.441	ACAAACA
-ACTAAYH	DREME-1	chrM	5686	5692	-	-1.80282	0.00165	0.441	ACTAAGT
-ACTAAYH	DREME-1	chrM	6595	6601	+	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	7146	7152	+	-1.80282	0.00165	0.441	ACTATCA
-ACTAAYH	DREME-1	chrM	7286	7292	+	-1.80282	0.00165	0.441	TCTAACA
-ACTAAYH	DREME-1	chrM	7714	7720	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	7720	7726	+	-1.80282	0.00165	0.441	ACTCACA
-ACTAAYH	DREME-1	chrM	8344	8350	+	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	8374	8380	+	-1.80282	0.00165	0.441	ACTAAAT
-ACTAAYH	DREME-1	chrM	8460	8466	+	-1.80282	0.00165	0.441	ACTACCA
-ACTAAYH	DREME-1	chrM	9010	9016	+	-1.80282	0.00165	0.441	GCTAACA
-ACTAAYH	DREME-1	chrM	9257	9263	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	9351	9357	+	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	10127	10133	+	-1.80282	0.00165	0.441	ACTACCA
-ACTAAYH	DREME-1	chrM	10295	10301	+	-1.80282	0.00165	0.441	ACAAACA
-ACTAAYH	DREME-1	chrM	10496	10502	+	-1.80282	0.00165	0.441	ACTAGCA
-ACTAAYH	DREME-1	chrM	10792	10798	+	-1.80282	0.00165	0.441	ACTACCA
-ACTAAYH	DREME-1	chrM	10798	10804	+	-1.80282	0.00165	0.441	ACTGACA
-ACTAAYH	DREME-1	chrM	10939	10945	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	11023	11029	+	-1.80282	0.00165	0.441	ACTATCA
-ACTAAYH	DREME-1	chrM	11258	11264	+	-1.80282	0.00165	0.441	ACTCACA
-ACTAAYH	DREME-1	chrM	11314	11320	+	-1.80282	0.00165	0.441	ACTATCA
-ACTAAYH	DREME-1	chrM	11593	11599	+	-1.80282	0.00165	0.441	ACAAACA
-ACTAAYH	DREME-1	chrM	11650	11656	+	-1.80282	0.00165	0.441	AGTAACA
-ACTAAYH	DREME-1	chrM	11768	11774	+	-1.80282	0.00165	0.441	ACTCACA
-ACTAAYH	DREME-1	chrM	11901	11907	-	-1.80282	0.00165	0.441	ACTAGCA
-ACTAAYH	DREME-1	chrM	11941	11947	+	-1.80282	0.00165	0.441	ACTTACA
-ACTAAYH	DREME-1	chrM	12026	12032	+	-1.80282	0.00165	0.441	ATTAACA
-ACTAAYH	DREME-1	chrM	12245	12251	+	-1.80282	0.00165	0.441	TCTAACA
-ACTAAYH	DREME-1	chrM	12412	12418	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	12530	12536	+	-1.80282	0.00165	0.441	ACTGACA
-ACTAAYH	DREME-1	chrM	12617	12623	-	-1.80282	0.00165	0.441	ACGAACA
-ACTAAYH	DREME-1	chrM	12736	12742	+	-1.80282	0.00165	0.441	GCTAACA
-ACTAAYH	DREME-1	chrM	13161	13167	+	-1.80282	0.00165	0.441	TCTAACA
-ACTAAYH	DREME-1	chrM	13626	13632	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	13797	13803	+	-1.80282	0.00165	0.441	ACTCACA
-ACTAAYH	DREME-1	chrM	13830	13836	+	-1.80282	0.00165	0.441	TCTAACA
-ACTAAYH	DREME-1	chrM	13858	13864	+	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	14185	14191	+	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	14189	14195	+	-1.80282	0.00165	0.441	ACAAACA
-ACTAAYH	DREME-1	chrM	14548	14554	+	-1.80282	0.00165	0.441	AATAACA
-ACTAAYH	DREME-1	chrM	14569	14575	+	-1.80282	0.00165	0.441	GCTAACA
-ACTAAYH	DREME-1	chrM	15469	15475	+	-1.80282	0.00165	0.441	ATTAACA
-ACTAAYH	DREME-1	chrM	15599	15605	+	-1.80282	0.00165	0.441	CCTAACA
-ACTAAYH	DREME-1	chrM	16227	16233	+	-1.80282	0.00165	0.441	ACTATCA
-ACTAAYH	DREME-1	chrM	16277	16283	+	-1.80282	0.00165	0.441	ACCAACA
-ACTAAYH	DREME-1	chrM	852	858	+	-2.01408	0.00177	0.441	ACTAAGC
-ACTAAYH	DREME-1	chrM	1449	1455	-	-2.01408	0.00177	0.441	ACTAAGC
-ACTAAYH	DREME-1	chrM	4913	4919	+	-2.01408	0.00177	0.441	ACTAAAC
-ACTAAYH	DREME-1	chrM	11278	11284	+	-2.01408	0.00177	0.441	ACTAAAC
-ACTAAYH	DREME-1	chrM	13686	13692	+	-2.01408	0.00177	0.441	ACTAAAC
-ACTAAYH	DREME-1	chrM	14582	14588	+	-2.01408	0.00177	0.441	ACTAAAC
-ACTAAYH	DREME-1	chrM	14636	14642	+	-2.01408	0.00177	0.441	ACTAAAC
-ACTAAYH	DREME-1	chrM	15703	15709	+	-2.01408	0.00177	0.441	ACTAAGC
-ACTAAYH	DREME-1	chrM	152	158	-	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	234	240	+	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	472	478	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	645	651	+	-2.39437	0.00269	0.441	ACAAATA
-ACTAAYH	DREME-1	chrM	671	677	-	-2.39437	0.00269	0.441	GCTAATA
-ACTAAYH	DREME-1	chrM	2305	2311	-	-2.39437	0.00269	0.441	ACTTATA
-ACTAAYH	DREME-1	chrM	2529	2535	-	-2.39437	0.00269	0.441	TCTAATA
-ACTAAYH	DREME-1	chrM	2744	2750	-	-2.39437	0.00269	0.441	ATTAATA
-ACTAAYH	DREME-1	chrM	2880	2886	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	4158	4164	+	-2.39437	0.00269	0.441	ACTCATA
-ACTAAYH	DREME-1	chrM	4206	4212	+	-2.39437	0.00269	0.441	ACTTATA
-ACTAAYH	DREME-1	chrM	4301	4307	+	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	4679	4685	+	-2.39437	0.00269	0.441	TCTAATA
-ACTAAYH	DREME-1	chrM	4728	4734	+	-2.39437	0.00269	0.441	ACCAATA
-ACTAAYH	DREME-1	chrM	4754	4760	+	-2.39437	0.00269	0.441	ATTAATA
-ACTAAYH	DREME-1	chrM	5036	5042	+	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	5103	5109	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	5153	5159	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	5962	5968	-	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	6110	6116	+	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	6155	6161	+	-2.39437	0.00269	0.441	CCTAATA
-ACTAAYH	DREME-1	chrM	6527	6533	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	6973	6979	-	-2.39437	0.00269	0.441	GCTAATA
-ACTAAYH	DREME-1	chrM	7295	7301	+	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	7301	7307	+	-2.39437	0.00269	0.441	ATTAATA
-ACTAAYH	DREME-1	chrM	7300	7306	-	-2.39437	0.00269	0.441	ATTAATA
-ACTAAYH	DREME-1	chrM	7349	7355	+	-2.39437	0.00269	0.441	CCTAATA
-ACTAAYH	DREME-1	chrM	7351	7357	-	-2.39437	0.00269	0.441	ACTATTA
-ACTAAYH	DREME-1	chrM	7522	7528	-	-2.39437	0.00269	0.441	TCTAATA
-ACTAAYH	DREME-1	chrM	8739	8745	+	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	8738	8744	-	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	8945	8951	-	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	8982	8988	+	-2.39437	0.00269	0.441	ACCAATA
-ACTAAYH	DREME-1	chrM	9613	9619	-	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	9656	9662	+	-2.39437	0.00269	0.441	TCTAATA
-ACTAAYH	DREME-1	chrM	10055	10061	+	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	10103	10109	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	10246	10252	-	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	10315	10321	-	-2.39437	0.00269	0.441	ACTATTA
-ACTAAYH	DREME-1	chrM	10336	10342	-	-2.39437	0.00269	0.441	ATTAATA
-ACTAAYH	DREME-1	chrM	10368	10374	-	-2.39437	0.00269	0.441	ACTCATA
-ACTAAYH	DREME-1	chrM	10526	10532	+	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	10525	10531	-	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	10574	10580	+	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	10657	10663	-	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	10699	10705	-	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	10788	10794	-	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	10858	10864	-	-2.39437	0.00269	0.441	GCTAATA
-ACTAAYH	DREME-1	chrM	10954	10960	+	-2.39437	0.00269	0.441	CCTAATA
-ACTAAYH	DREME-1	chrM	11873	11879	+	-2.39437	0.00269	0.441	ACTATTA
-ACTAAYH	DREME-1	chrM	11958	11964	-	-2.39437	0.00269	0.441	ACTAGTA
-ACTAAYH	DREME-1	chrM	12333	12339	+	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	12349	12355	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	12425	12431	+	-2.39437	0.00269	0.441	ACTCATA
-ACTAAYH	DREME-1	chrM	12471	12477	-	-2.39437	0.00269	0.441	ACTGATA
-ACTAAYH	DREME-1	chrM	12933	12939	+	-2.39437	0.00269	0.441	ACAAATA
-ACTAAYH	DREME-1	chrM	12972	12978	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	13269	13275	+	-2.39437	0.00269	0.441	ACTCATA
-ACTAAYH	DREME-1	chrM	13274	13280	-	-2.39437	0.00269	0.441	ACTATTA
-ACTAAYH	DREME-1	chrM	13566	13572	-	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	14210	14216	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	14213	14219	+	-2.39437	0.00269	0.441	ACTACTA
-ACTAAYH	DREME-1	chrM	14251	14257	+	-2.39437	0.00269	0.441	ACCAATA
-ACTAAYH	DREME-1	chrM	14314	14320	+	-2.39437	0.00269	0.441	ACTATTA
-ACTAAYH	DREME-1	chrM	14510	14516	+	-2.39437	0.00269	0.441	ACTATTA
-ACTAAYH	DREME-1	chrM	14545	14551	+	-2.39437	0.00269	0.441	AATAATA
-ACTAAYH	DREME-1	chrM	14773	14779	+	-2.39437	0.00269	0.441	CCTAATA
-ACTAAYH	DREME-1	chrM	15627	15633	-	-2.39437	0.00269	0.441	AGTAATA
-ACTAAYH	DREME-1	chrM	15838	15844	+	-2.39437	0.00269	0.441	CCTAATA
-ACTAAYH	DREME-1	chrM	193	199	+	-2.53521	0.0036	0.501	ACTTACT
-ACTAAYH	DREME-1	chrM	714	720	-	-2.53521	0.0036	0.501	ACTCACT
-ACTAAYH	DREME-1	chrM	1860	1866	+	-2.53521	0.0036	0.501	ATTAACT
-ACTAAYH	DREME-1	chrM	1870	1876	+	-2.53521	0.0036	0.501	AATAACT
-ACTAAYH	DREME-1	chrM	2220	2226	+	-2.53521	0.0036	0.501	ACTACCT
-ACTAAYH	DREME-1	chrM	2901	2907	+	-2.53521	0.0036	0.501	AATAACT
-ACTAAYH	DREME-1	chrM	4154	4160	+	-2.53521	0.0036	0.501	ACCAACT
-ACTAAYH	DREME-1	chrM	4283	4289	-	-2.53521	0.0036	0.501	AGTAACT
-ACTAAYH	DREME-1	chrM	5099	5105	+	-2.53521	0.0036	0.501	CCTAACT
-ACTAAYH	DREME-1	chrM	5156	5162	+	-2.53521	0.0036	0.501	ACTATCT
-ACTAAYH	DREME-1	chrM	5555	5561	-	-2.53521	0.0036	0.501	ACTTACT
-ACTAAYH	DREME-1	chrM	6142	6148	+	-2.53521	0.0036	0.501	ACTGACT
-ACTAAYH	DREME-1	chrM	6678	6684	+	-2.53521	0.0036	0.501	ACTTACT
-ACTAAYH	DREME-1	chrM	7169	7175	+	-2.53521	0.0036	0.501	TCTAACT
-ACTAAYH	DREME-1	chrM	8304	8310	+	-2.53521	0.0036	0.501	GCTAACT
-ACTAAYH	DREME-1	chrM	8456	8462	+	-2.53521	0.0036	0.501	ACAAACT
-ACTAAYH	DREME-1	chrM	8817	8823	+	-2.53521	0.0036	0.501	ACTATCT
-ACTAAYH	DREME-1	chrM	8949	8955	-	-2.53521	0.0036	0.501	AATAACT
-ACTAAYH	DREME-1	chrM	9120	9126	+	-2.53521	0.0036	0.501	ACTGACT
-ACTAAYH	DREME-1	chrM	9852	9858	+	-2.53521	0.0036	0.501	ACTATCT
-ACTAAYH	DREME-1	chrM	10025	10031	+	-2.53521	0.0036	0.501	ATTAACT
-ACTAAYH	DREME-1	chrM	10964	10970	+	-2.53521	0.0036	0.501	ACTACCT
-ACTAAYH	DREME-1	chrM	11293	11299	+	-2.53521	0.0036	0.501	ACTCACT
-ACTAAYH	DREME-1	chrM	11347	11353	+	-2.53521	0.0036	0.501	ACTAGCT
-ACTAAYH	DREME-1	chrM	12226	12232	+	-2.53521	0.0036	0.501	GCTAACT
-ACTAAYH	DREME-1	chrM	12516	12522	-	-2.53521	0.0036	0.501	AATAACT
-ACTAAYH	DREME-1	chrM	13850	13856	+	-2.53521	0.0036	0.501	ACTACCT
-ACTAAYH	DREME-1	chrM	13862	13868	+	-2.53521	0.0036	0.501	ACAAACT
-ACTAAYH	DREME-1	chrM	14206	14212	+	-2.53521	0.0036	0.501	AGTAACT
-ACTAAYH	DREME-1	chrM	15185	15191	+	-2.53521	0.0036	0.501	ACAAACT
-ACTAAYH	DREME-1	chrM	15189	15195	+	-2.53521	0.0036	0.501	ACTTACT
-ACTAAYH	DREME-1	chrM	15603	15609	+	-2.53521	0.0036	0.501	ACAAACT
-ACTAAYH	DREME-1	chrM	15844	15850	+	-2.53521	0.0036	0.501	ACCAACT
-ACTAAYH	DREME-1	chrM	15848	15854	+	-2.53521	0.0036	0.501	ACTATCT
-ACTAAYH	DREME-1	chrM	21	27	+	-2.74648	0.00452	0.505	ATTAACC
-ACTAAYH	DREME-1	chrM	381	387	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	529	535	+	-2.74648	0.00452	0.505	GCTAACC
-ACTAAYH	DREME-1	chrM	547	553	+	-2.74648	0.00452	0.505	ACCAACC
-ACTAAYH	DREME-1	chrM	823	829	+	-2.74648	0.00452	0.505	ATTAACC
-ACTAAYH	DREME-1	chrM	873	879	-	-2.74648	0.00452	0.505	ACCAACC
-ACTAAYH	DREME-1	chrM	910	916	+	-2.74648	0.00452	0.505	ATTAACC
-ACTAAYH	DREME-1	chrM	978	984	+	-2.74648	0.00452	0.505	ACTCACC
-ACTAAYH	DREME-1	chrM	1569	1575	-	-2.74648	0.00452	0.505	ACTTACC
-ACTAAYH	DREME-1	chrM	1596	1602	+	-2.74648	0.00452	0.505	ACGAACC
-ACTAAYH	DREME-1	chrM	1991	1997	+	-2.74648	0.00452	0.505	ACAAACC
-ACTAAYH	DREME-1	chrM	2578	2584	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	2765	2771	+	-2.74648	0.00452	0.505	ACAAACC
-ACTAAYH	DREME-1	chrM	3031	3037	-	-2.74648	0.00452	0.505	ACGAACC
-ACTAAYH	DREME-1	chrM	3225	3231	-	-2.74648	0.00452	0.505	ACAAACC
-ACTAAYH	DREME-1	chrM	3883	3889	+	-2.74648	0.00452	0.505	ACCAACC
-ACTAAYH	DREME-1	chrM	4101	4107	+	-2.74648	0.00452	0.505	TCTAACC
-ACTAAYH	DREME-1	chrM	4191	4197	+	-2.74648	0.00452	0.505	ACTCACC
-ACTAAYH	DREME-1	chrM	4598	4604	+	-2.74648	0.00452	0.505	TCTAACC
-ACTAAYH	DREME-1	chrM	4874	4880	+	-2.74648	0.00452	0.505	ACTAGCC
-ACTAAYH	DREME-1	chrM	5237	5243	+	-2.74648	0.00452	0.505	GCTAACC
-ACTAAYH	DREME-1	chrM	5839	5845	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	5931	5937	+	-2.74648	0.00452	0.505	ACAAACC
-ACTAAYH	DREME-1	chrM	6335	6341	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	7228	7234	+	-2.74648	0.00452	0.505	ACTACCC
-ACTAAYH	DREME-1	chrM	7781	7787	+	-2.74648	0.00452	0.505	ACTATCC
-ACTAAYH	DREME-1	chrM	8315	8321	+	-2.74648	0.00452	0.505	ATTAACC
-ACTAAYH	DREME-1	chrM	8508	8514	+	-2.74648	0.00452	0.505	ACAAACC
-ACTAAYH	DREME-1	chrM	8721	8727	+	-2.74648	0.00452	0.505	ACGAACC
-ACTAAYH	DREME-1	chrM	8805	8811	+	-2.74648	0.00452	0.505	ACCAACC
-ACTAAYH	DREME-1	chrM	9003	9009	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	9076	9082	+	-2.74648	0.00452	0.505	ATTAACC
-ACTAAYH	DREME-1	chrM	9124	9130	+	-2.74648	0.00452	0.505	ACTATCC
-ACTAAYH	DREME-1	chrM	11548	11554	+	-2.74648	0.00452	0.505	ACTATCC
-ACTAAYH	DREME-1	chrM	11852	11858	+	-2.74648	0.00452	0.505	GCTAACC
-ACTAAYH	DREME-1	chrM	11876	11882	+	-2.74648	0.00452	0.505	ATTAACC
-ACTAAYH	DREME-1	chrM	11905	11911	+	-2.74648	0.00452	0.505	AGTAACC
-ACTAAYH	DREME-1	chrM	12013	12019	+	-2.74648	0.00452	0.505	ACTCACC
-ACTAAYH	DREME-1	chrM	12336	12342	+	-2.74648	0.00452	0.505	AATAACC
-ACTAAYH	DREME-1	chrM	12363	12369	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	13295	13301	+	-2.74648	0.00452	0.505	ACCAACC
-ACTAAYH	DREME-1	chrM	13672	13678	+	-2.74648	0.00452	0.505	AATAACC
-ACTAAYH	DREME-1	chrM	13854	13860	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	13998	14004	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	14124	14130	+	-2.74648	0.00452	0.505	CCTAACC
-ACTAAYH	DREME-1	chrM	14384	14390	+	-2.74648	0.00452	0.505	GCTAACC
-ACTAAYH	DREME-1	chrM	14401	14407	+	-2.74648	0.00452	0.505	ACTCACC
-ACTAAYH	DREME-1	chrM	14624	14630	+	-2.74648	0.00452	0.505	ACAAACC
-ACTAAYH	DREME-1	chrM	14786	14792	+	-2.74648	0.00452	0.505	ATTAACC
-ACTAAYH	DREME-1	chrM	14910	14916	+	-2.74648	0.00452	0.505	ACTCACC
-ACTAAYH	DREME-1	chrM	15193	15199	+	-2.74648	0.00452	0.505	ACTATCC
-ACTAAYH	DREME-1	chrM	15631	15637	+	-2.74648	0.00452	0.505	ACTATCC
-ACTAAYH	DREME-1	chrM	15748	15754	+	-2.74648	0.00452	0.505	TCTAACC
-ACTAAYH	DREME-1	chrM	16066	16072	+	-2.74648	0.00452	0.505	ACTCACC
-ACTAAYH	DREME-1	chrM	16281	16287	+	-2.74648	0.00452	0.505	ACAAACC
-ACTAAYH	DREME-1	chrM	211	217	+	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	210	216	-	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	214	220	-	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	1961	1967	-	-3.12676	0.00543	0.514	ACTATTT
-ACTAAYH	DREME-1	chrM	2188	2194	+	-3.12676	0.00543	0.514	ACCAATT
-ACTAAYH	DREME-1	chrM	3771	3777	-	-3.12676	0.00543	0.514	ACTTATT
-ACTAAYH	DREME-1	chrM	3923	3929	-	-3.12676	0.00543	0.514	ACTAGTT
-ACTAAYH	DREME-1	chrM	4469	4475	-	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	4543	4549	+	-3.12676	0.00543	0.514	ACTGATT
-ACTAAYH	DREME-1	chrM	5085	5091	+	-3.12676	0.00543	0.514	ACTATTT
-ACTAAYH	DREME-1	chrM	6146	6152	+	-3.12676	0.00543	0.514	ACTAGTT
-ACTAAYH	DREME-1	chrM	7087	7093	+	-3.12676	0.00543	0.514	ACTGATT
-ACTAAYH	DREME-1	chrM	7304	7310	+	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	8041	8047	+	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	8221	8227	+	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	8220	8226	-	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	8795	8801	+	-3.12676	0.00543	0.514	ACTCATT
-ACTAAYH	DREME-1	chrM	8946	8952	+	-3.12676	0.00543	0.514	ACTAGTT
-ACTAAYH	DREME-1	chrM	8973	8979	+	-3.12676	0.00543	0.514	ACTCATT
-ACTAAYH	DREME-1	chrM	9042	9048	+	-3.12676	0.00543	0.514	CCTAATT
-ACTAAYH	DREME-1	chrM	9111	9117	+	-3.12676	0.00543	0.514	TCTAATT
-ACTAAYH	DREME-1	chrM	9538	9544	-	-3.12676	0.00543	0.514	CCTAATT
-ACTAAYH	DREME-1	chrM	9680	9686	+	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	9953	9959	+	-3.12676	0.00543	0.514	ACTATTT
-ACTAAYH	DREME-1	chrM	10004	10010	-	-3.12676	0.00543	0.514	ACTATTT
-ACTAAYH	DREME-1	chrM	10029	10035	+	-3.12676	0.00543	0.514	ACTAGTT
-ACTAAYH	DREME-1	chrM	10028	10034	-	-3.12676	0.00543	0.514	ACTAGTT
-ACTAAYH	DREME-1	chrM	10109	10115	+	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	10112	10118	-	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	10402	10408	-	-3.12676	0.00543	0.514	ACCAATT
-ACTAAYH	DREME-1	chrM	10438	10444	+	-3.12676	0.00543	0.514	ACTCATT
-ACTAAYH	DREME-1	chrM	10852	10858	+	-3.12676	0.00543	0.514	CCTAATT
-ACTAAYH	DREME-1	chrM	10855	10861	-	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	10876	10882	+	-3.12676	0.00543	0.514	ACTATTT
-ACTAAYH	DREME-1	chrM	11500	11506	+	-3.12676	0.00543	0.514	ACTCATT
-ACTAAYH	DREME-1	chrM	12378	12384	+	-3.12676	0.00543	0.514	CCTAATT
-ACTAAYH	DREME-1	chrM	12584	12590	+	-3.12676	0.00543	0.514	ACTACTT
-ACTAAYH	DREME-1	chrM	12679	12685	-	-3.12676	0.00543	0.514	ACTGATT
-ACTAAYH	DREME-1	chrM	12708	12714	+	-3.12676	0.00543	0.514	CCTAATT
-ACTAAYH	DREME-1	chrM	13013	13019	-	-3.12676	0.00543	0.514	CCTAATT
-ACTAAYH	DREME-1	chrM	13350	13356	+	-3.12676	0.00543	0.514	ACTATTT
-ACTAAYH	DREME-1	chrM	13611	13617	+	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	14296	14302	-	-3.12676	0.00543	0.514	AATAATT
-ACTAAYH	DREME-1	chrM	14782	14788	+	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	14781	14787	-	-3.12676	0.00543	0.514	ATTAATT
-ACTAAYH	DREME-1	chrM	14793	14799	+	-3.12676	0.00543	0.514	ACTCATT
-ACTAAYH	DREME-1	chrM	15178	15184	+	-3.12676	0.00543	0.514	AGTAATT
-ACTAAYH	DREME-1	chrM	15856	15862	+	-3.12676	0.00543	0.514	CCTAATT
-ACTAAYH	DREME-1	chrM	16003	16009	+	-3.12676	0.00543	0.514	TCTAATT
-ACTAAYH	DREME-1	chrM	1074	1080	-	-3.33803	0.00635	0.514	TCTAATC
-ACTAAYH	DREME-1	chrM	2270	2276	+	-3.33803	0.00635	0.514	ACCAATC
-ACTAAYH	DREME-1	chrM	3081	3087	+	-3.33803	0.00635	0.514	AGTAATC
-ACTAAYH	DREME-1	chrM	3345	3351	+	-3.33803	0.00635	0.514	TCTAATC
-ACTAAYH	DREME-1	chrM	3824	3830	-	-3.33803	0.00635	0.514	AGTAATC
-ACTAAYH	DREME-1	chrM	3924	3930	+	-3.33803	0.00635	0.514	ACTAGTC
-ACTAAYH	DREME-1	chrM	4470	4476	+	-3.33803	0.00635	0.514	ATTAATC
-ACTAAYH	DREME-1	chrM	4520	4526	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	4737	4743	+	-3.33803	0.00635	0.514	ACCAATC
-ACTAAYH	DREME-1	chrM	4747	4753	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	4757	4763	+	-3.33803	0.00635	0.514	AATAATC
-ACTAAYH	DREME-1	chrM	5120	5126	+	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	5354	5360	+	-3.33803	0.00635	0.514	CCTAATC
-ACTAAYH	DREME-1	chrM	5378	5384	+	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	5453	5459	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	5501	5507	+	-3.33803	0.00635	0.514	AATAATC
-ACTAAYH	DREME-1	chrM	5707	5713	+	-3.33803	0.00635	0.514	CCTAATC
-ACTAAYH	DREME-1	chrM	5921	5927	+	-3.33803	0.00635	0.514	ACTATTC
-ACTAAYH	DREME-1	chrM	6095	6101	+	-3.33803	0.00635	0.514	AATAATC
-ACTAAYH	DREME-1	chrM	6145	6151	-	-3.33803	0.00635	0.514	ACTAGTC
-ACTAAYH	DREME-1	chrM	6158	6164	+	-3.33803	0.00635	0.514	AATAATC
-ACTAAYH	DREME-1	chrM	6307	6313	+	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	6467	6473	+	-3.33803	0.00635	0.514	CCTAATC
-ACTAAYH	DREME-1	chrM	6659	6665	+	-3.33803	0.00635	0.514	AATAATC
-ACTAAYH	DREME-1	chrM	6682	6688	+	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	6982	6988	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	8007	8013	-	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	8422	8428	+	-3.33803	0.00635	0.514	ACTATTC
-ACTAAYH	DREME-1	chrM	8589	8595	+	-3.33803	0.00635	0.514	ACTGATC
-ACTAAYH	DREME-1	chrM	9093	9099	+	-3.33803	0.00635	0.514	ACTTATC
-ACTAAYH	DREME-1	chrM	9214	9220	+	-3.33803	0.00635	0.514	ACCAATC
-ACTAAYH	DREME-1	chrM	10079	10085	+	-3.33803	0.00635	0.514	AATAATC
-ACTAAYH	DREME-1	chrM	10337	10343	+	-3.33803	0.00635	0.514	ATTAATC
-ACTAAYH	DREME-1	chrM	10387	10393	-	-3.33803	0.00635	0.514	TCTAATC
-ACTAAYH	DREME-1	chrM	10658	10664	+	-3.33803	0.00635	0.514	ACTAGTC
-ACTAAYH	DREME-1	chrM	10700	10706	+	-3.33803	0.00635	0.514	ACTAGTC
-ACTAAYH	DREME-1	chrM	11007	11013	+	-3.33803	0.00635	0.514	ACTTATC
-ACTAAYH	DREME-1	chrM	11065	11071	+	-3.33803	0.00635	0.514	ACAAATC
-ACTAAYH	DREME-1	chrM	11134	11140	+	-3.33803	0.00635	0.514	ACTTATC
-ACTAAYH	DREME-1	chrM	11239	11245	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	11290	11296	+	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	11734	11740	+	-3.33803	0.00635	0.514	ACTATTC
-ACTAAYH	DREME-1	chrM	11959	11965	+	-3.33803	0.00635	0.514	ACTAGTC
-ACTAAYH	DREME-1	chrM	12676	12682	+	-3.33803	0.00635	0.514	ATTAATC
-ACTAAYH	DREME-1	chrM	12699	12705	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	12952	12958	+	-3.33803	0.00635	0.514	GCTAATC
-ACTAAYH	DREME-1	chrM	13113	13119	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	13419	13425	+	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	14118	14124	+	-3.33803	0.00635	0.514	ACTCATC
-ACTAAYH	DREME-1	chrM	14136	14142	+	-3.33803	0.00635	0.514	CCTAATC
-ACTAAYH	DREME-1	chrM	14366	14372	+	-3.33803	0.00635	0.514	ACCAATC
-ACTAAYH	DREME-1	chrM	14890	14896	+	-3.33803	0.00635	0.514	ACTATTC
-ACTAAYH	DREME-1	chrM	14907	14913	+	-3.33803	0.00635	0.514	ACTACTC
-ACTAAYH	DREME-1	chrM	15475	15481	+	-3.33803	0.00635	0.514	ACTATTC
-ACTAAYH	DREME-1	chrM	15652	15658	+	-3.33803	0.00635	0.514	AATAATC
-ACTAAYH	DREME-1	chrM	15832	15838	+	-3.33803	0.00635	0.514	CCTAATC
-ACTAAYH	DREME-1	chrM	15951	15957	+	-3.33803	0.00635	0.514	ACAAATC
-ACTAAYH	DREME-1	chrM	16013	16019	+	-3.33803	0.00635	0.514	ACTATTC
-ACTAAYH	DREME-1	chrM	197	203	+	-13.9718	0.00647	0.521	ACTAAAG
-ACTAAYH	DREME-1	chrM	8713	8719	+	-13.9718	0.00647	0.521	ACTAAAG
-ACTAAYH	DREME-1	chrM	28	34	+	-14.7042	0.00739	0.559	ACTCACG
-ACTAAYH	DREME-1	chrM	1322	1328	-	-14.7042	0.00739	0.559	CCTAACG
-ACTAAYH	DREME-1	chrM	2910	2916	+	-14.7042	0.00739	0.559	ACCAACG
-ACTAAYH	DREME-1	chrM	3035	3041	-	-14.7042	0.00739	0.559	ACAAACG
-ACTAAYH	DREME-1	chrM	5106	5112	+	-14.7042	0.00739	0.559	ACTACCG
-ACTAAYH	DREME-1	chrM	7218	7224	-	-14.7042	0.00739	0.559	AGTAACG
-ACTAAYH	DREME-1	chrM	8381	8387	+	-14.7042	0.00739	0.559	ACTACCG
-ACTAAYH	DREME-1	chrM	10580	10586	+	-14.7042	0.00739	0.559	ACTATCG
-ACTAAYH	DREME-1	chrM	11760	11766	+	-14.7042	0.00739	0.559	ACGAACG
-ACTAAYH	DREME-1	chrM	13546	13552	+	-14.7042	0.00739	0.559	ACAAACG
-ACTAAYH	DREME-1	chrM	13663	13669	+	-14.7042	0.00739	0.559	ATTAACG
-ACTAAYH	DREME-1	chrM	57	63	-	-15.0563	0.00922	0.559	ACGAAAA
-ACTAAYH	DREME-1	chrM	284	290	+	-15.0563	0.00922	0.559	ACAAAAA
-ACTAAYH	DREME-1	chrM	331	337	+	-15.0563	0.00922	0.559	ACTTAAA
-ACTAAYH	DREME-1	chrM	361	367	+	-15.0563	0.00922	0.559	ACAAAGA
-ACTAAYH	DREME-1	chrM	608	614	+	-15.0563	0.00922	0.559	ACTGAAA
-ACTAAYH	DREME-1	chrM	682	688	+	-15.0563	0.00922	0.559	AGTAAGA
-ACTAAYH	DREME-1	chrM	946	952	-	-15.0563	0.00922	0.559	TCTAAAA
-ACTAAYH	DREME-1	chrM	972	978	+	-15.0563	0.00922	0.559	GCTAAAA
-ACTAAYH	DREME-1	chrM	1019	1025	+	-15.0563	0.00922	0.559	ACTACGA
-ACTAAYH	DREME-1	chrM	1057	1063	+	-15.0563	0.00922	0.559	GCTAAGA
-ACTAAYH	DREME-1	chrM	1142	1148	+	-15.0563	0.00922	0.559	ACTACGA
-ACTAAYH	DREME-1	chrM	1162	1168	+	-15.0563	0.00922	0.559	ACTCAAA
-ACTAAYH	DREME-1	chrM	1384	1390	+	-15.0563	0.00922	0.559	ACTACGA
-ACTAAYH	DREME-1	chrM	1864	1870	+	-15.0563	0.00922	0.559	ACTAGAA
-ACTAAYH	DREME-1	chrM	1894	1900	+	-15.0563	0.00922	0.559	GCTAAGA
-ACTAAYH	DREME-1	chrM	1922	1928	+	-15.0563	0.00922	0.559	CCTAAGA
-ACTAAYH	DREME-1	chrM	1932	1938	+	-15.0563	0.00922	0.559	GCTAAAA
-ACTAAYH	DREME-1	chrM	2124	2130	+	-15.0563	0.00922	0.559	ACTAGGA
-ACTAAYH	DREME-1	chrM	2148	2154	+	-15.0563	0.00922	0.559	AGTAAAA
-ACTAAYH	DREME-1	chrM	2175	2181	+	-15.0563	0.00922	0.559	CCTAAAA
-ACTAAYH	DREME-1	chrM	2192	2198	+	-15.0563	0.00922	0.559	ATTAAGA
-ACTAAYH	DREME-1	chrM	2224	2230	+	-15.0563	0.00922	0.559	CCTAAAA
-ACTAAYH	DREME-1	chrM	2350	2356	+	-15.0563	0.00922	0.559	ATTAAAA
-ACTAAYH	DREME-1	chrM	2463	2469	+	-15.0563	0.00922	0.559	AGTAAAA
-ACTAAYH	DREME-1	chrM	2500	2506	+	-15.0563	0.00922	0.559	ACCAAAA
-ACTAAYH	DREME-1	chrM	2658	2664	-	-15.0563	0.00922	0.559	AGTAAGA
-ACTAAYH	DREME-1	chrM	2798	2804	+	-15.0563	0.00922	0.559	ATTAAAA
-ACTAAYH	DREME-1	chrM	2855	2861	+	-15.0563	0.00922	0.559	GCTAAGA
-ACTAAYH	DREME-1	chrM	3065	3071	-	-15.0563	0.00922	0.559	ACTCAGA
-ACTAAYH	DREME-1	chrM	3262	3268	+	-15.0563	0.00922	0.559	ACTTAAA
-ACTAAYH	DREME-1	chrM	3378	3384	+	-15.0563	0.00922	0.559	ACGAAAA
-ACTAAYH	DREME-1	chrM	3441	3447	+	-15.0563	0.00922	0.559	ACTACAA
-ACTAAYH	DREME-1	chrM	3486	3492	+	-15.0563	0.00922	0.559	CCTAAAA
-ACTAAYH	DREME-1	chrM	3558	3564	+	-15.0563	0.00922	0.559	ACTATGA
-ACTAAYH	DREME-1	chrM	3677	3683	+	-15.0563	0.00922	0.559	ACTCAAA
-ACTAAYH	DREME-1	chrM	4021	4027	+	-15.0563	0.00922	0.559	ACTACAA
-ACTAAYH	DREME-1	chrM	4087	4093	+	-15.0563	0.00922	0.559	ACCAAGA
-ACTAAYH	DREME-1	chrM	4259	4265	+	-15.0563	0.00922	0.559	CCTAAGA
-ACTAAYH	DREME-1	chrM	4334	4340	+	-15.0563	0.00922	0.559	ACTATGA
-ACTAAYH	DREME-1	chrM	4586	4592	-	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	4602	4608	+	-15.0563	0.00922	0.559	ACCAAAA
-ACTAAYH	DREME-1	chrM	4778	4784	+	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	4784	4790	+	-15.0563	0.00922	0.559	ACTAGGA
-ACTAAYH	DREME-1	chrM	4807	4813	-	-15.0563	0.00922	0.559	ACTCAGA
-ACTAAYH	DREME-1	chrM	4868	4874	+	-15.0563	0.00922	0.559	ACAAAAA
-ACTAAYH	DREME-1	chrM	5002	5008	-	-15.0563	0.00922	0.559	GCTAAGA
-ACTAAYH	DREME-1	chrM	5075	5081	-	-15.0563	0.00922	0.559	ATTAAGA
-ACTAAYH	DREME-1	chrM	5128	5134	+	-15.0563	0.00922	0.559	ACTTAAA
-ACTAAYH	DREME-1	chrM	5280	5286	+	-15.0563	0.00922	0.559	ACAAAAA
-ACTAAYH	DREME-1	chrM	5405	5411	+	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	5533	5539	+	-15.0563	0.00922	0.559	ACCAAGA
-ACTAAYH	DREME-1	chrM	5670	5676	+	-15.0563	0.00922	0.559	ACTTAAA
-ACTAAYH	DREME-1	chrM	5938	5944	+	-15.0563	0.00922	0.559	ACAAAGA
-ACTAAYH	DREME-1	chrM	6106	6112	-	-15.0563	0.00922	0.559	ACTATGA
-ACTAAYH	DREME-1	chrM	6376	6382	-	-15.0563	0.00922	0.559	CCTAAGA
-ACTAAYH	DREME-1	chrM	6451	6457	-	-15.0563	0.00922	0.559	ACGAAGA
-ACTAAYH	DREME-1	chrM	7445	7451	+	-15.0563	0.00922	0.559	ACAAAAA
-ACTAAYH	DREME-1	chrM	7581	7587	-	-15.0563	0.00922	0.559	ATTAAGA
-ACTAAYH	DREME-1	chrM	7692	7698	-	-15.0563	0.00922	0.559	ACTAGGA
-ACTAAYH	DREME-1	chrM	7800	7806	-	-15.0563	0.00922	0.559	ACTAGGA
-ACTAAYH	DREME-1	chrM	8230	8236	+	-15.0563	0.00922	0.559	CCTAAAA
-ACTAAYH	DREME-1	chrM	8323	8329	-	-15.0563	0.00922	0.559	ACTTAAA
-ACTAAYH	DREME-1	chrM	8335	8341	+	-15.0563	0.00922	0.559	ATTAAGA
-ACTAAYH	DREME-1	chrM	8494	8500	+	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	8521	8527	+	-15.0563	0.00922	0.559	ACCAAAA
-ACTAAYH	DREME-1	chrM	8531	8537	+	-15.0563	0.00922	0.559	ACGAAAA
-ACTAAYH	DREME-1	chrM	8757	8763	-	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	8881	8887	+	-15.0563	0.00922	0.559	TCTAAGA
-ACTAAYH	DREME-1	chrM	8887	8893	+	-15.0563	0.00922	0.559	ATTAAAA
-ACTAAYH	DREME-1	chrM	9173	9179	-	-15.0563	0.00922	0.559	ACTAGAA
-ACTAAYH	DREME-1	chrM	9236	9242	+	-15.0563	0.00922	0.559	AGTAAAA
-ACTAAYH	DREME-1	chrM	9706	9712	-	-15.0563	0.00922	0.559	AGTAAAA
-ACTAAYH	DREME-1	chrM	9796	9802	-	-15.0563	0.00922	0.559	ACAAAAA
-ACTAAYH	DREME-1	chrM	9987	9993	-	-15.0563	0.00922	0.559	AGTAAGA
-ACTAAYH	DREME-1	chrM	10075	10081	-	-15.0563	0.00922	0.559	ATTAAAA
-ACTAAYH	DREME-1	chrM	10243	10249	-	-15.0563	0.00922	0.559	AATAAGA
-ACTAAYH	DREME-1	chrM	10333	10339	-	-15.0563	0.00922	0.559	AATAAGA
-ACTAAYH	DREME-1	chrM	10376	10382	+	-15.0563	0.00922	0.559	ACTACAA
-ACTAAYH	DREME-1	chrM	10379	10385	+	-15.0563	0.00922	0.559	ACAAAAA
-ACTAAYH	DREME-1	chrM	10630	10636	-	-15.0563	0.00922	0.559	GCTAAGA
-ACTAAYH	DREME-1	chrM	10762	10768	+	-15.0563	0.00922	0.559	GCTAAAA
-ACTAAYH	DREME-1	chrM	11029	11035	+	-15.0563	0.00922	0.559	ACGAAAA
-ACTAAYH	DREME-1	chrM	11367	11373	-	-15.0563	0.00922	0.559	ACTATAA
-ACTAAYH	DREME-1	chrM	11602	11608	+	-15.0563	0.00922	0.559	CCTAAAA
-ACTAAYH	DREME-1	chrM	11646	11652	-	-15.0563	0.00922	0.559	ACTACGA
-ACTAAYH	DREME-1	chrM	11751	11757	+	-15.0563	0.00922	0.559	ACTCAAA
-ACTAAYH	DREME-1	chrM	11757	11763	+	-15.0563	0.00922	0.559	ACTACGA
-ACTAAYH	DREME-1	chrM	12152	12158	+	-15.0563	0.00922	0.559	ACCAAAA
-ACTAAYH	DREME-1	chrM	12295	12301	-	-15.0563	0.00922	0.559	CCTAAGA
-ACTAAYH	DREME-1	chrM	12311	12317	-	-15.0563	0.00922	0.559	ACCAAAA
-ACTAAYH	DREME-1	chrM	12327	12333	+	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	12352	12358	+	-15.0563	0.00922	0.559	ACTATAA
-ACTAAYH	DREME-1	chrM	12416	12422	+	-15.0563	0.00922	0.559	ACAAAAA
-ACTAAYH	DREME-1	chrM	12509	12515	+	-15.0563	0.00922	0.559	ACCAAGA
-ACTAAYH	DREME-1	chrM	12662	12668	+	-15.0563	0.00922	0.559	ACTCAGA
-ACTAAYH	DREME-1	chrM	13109	13115	-	-15.0563	0.00922	0.559	AGTAAGA
-ACTAAYH	DREME-1	chrM	13263	13269	+	-15.0563	0.00922	0.559	ACTAGGA
-ACTAAYH	DREME-1	chrM	13422	13428	+	-15.0563	0.00922	0.559	ACTCAAA
-ACTAAYH	DREME-1	chrM	13667	13673	+	-15.0563	0.00922	0.559	ACGAAAA
-ACTAAYH	DREME-1	chrM	13791	13797	+	-15.0563	0.00922	0.559	CCTAAAA
-ACTAAYH	DREME-1	chrM	13866	13872	+	-15.0563	0.00922	0.559	ACTTAAA
-ACTAAYH	DREME-1	chrM	13872	13878	+	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	13894	13900	-	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	14007	14013	+	-15.0563	0.00922	0.559	ACTAGAA
-ACTAAYH	DREME-1	chrM	14023	14029	+	-15.0563	0.00922	0.559	CCTAAAA
-ACTAAYH	DREME-1	chrM	14405	14411	+	-15.0563	0.00922	0.559	ACCAAGA
-ACTAAYH	DREME-1	chrM	14501	14507	+	-15.0563	0.00922	0.559	ATTAAAA
-ACTAAYH	DREME-1	chrM	14687	14693	+	-15.0563	0.00922	0.559	ACTACAA
-ACTAAYH	DREME-1	chrM	14732	14738	+	-15.0563	0.00922	0.559	ACTACAA
-ACTAAYH	DREME-1	chrM	14776	14782	+	-15.0563	0.00922	0.559	AATAAAA
-ACTAAYH	DREME-1	chrM	15072	15078	+	-15.0563	0.00922	0.559	ACTCAGA
-ACTAAYH	DREME-1	chrM	15607	15613	+	-15.0563	0.00922	0.559	ACTAGGA
-ACTAAYH	DREME-1	chrM	15874	15880	+	-15.0563	0.00922	0.559	ACTCAAA
-ACTAAYH	DREME-1	chrM	15892	15898	-	-15.0563	0.00922	0.559	ACTACAA
-ACTAAYH	DREME-1	chrM	15995	16001	+	-15.0563	0.00922	0.559	GCTAAGA
-ACTAAYH	DREME-1	chrM	16269	16275	+	-15.0563	0.00922	0.559	ACTAGGA
-ACTAAYH	DREME-1	chrM	16553	16559	+	-15.0563	0.00922	0.559	AATAAGA
--- a/test-data/fimo_output_test3.xml	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/fimo_output_test3.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -1,14 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Begin document body -->
-<fimo version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700">
+<fimo version="5.0.5" release="Mon Mar 18 20:12:19 2019 -0700">
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation=  xmlns:fimo="http://noble.gs.washington.edu/schema/fimo"
 >
-<command-line>fimo -o ./fimo_test4_out --thresh 0.01 --bgfile --uniform-- --max-stored-scores 100000 --motif ACTAAYH --motif-pseudo 0.1 dreme_fimo_input_1.xml hsa_chrM.fa</command-line>
 <settings>
-<setting name="output directory">./fimo_test4_out</setting>
-<setting name="MEME file name">dreme_fimo_input_1.xml</setting>
-<setting name="sequence file name">hsa_chrM.fa</setting>
 <setting name="background file name">--uniform--</setting>
 <setting name="allow clobber">false</setting>
 <setting name="compute q-values">true</setting>
--- a/test-data/meme_output_test1.html	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/meme_output_test1.html	Wed Dec 11 18:05:15 2019 -0500
@@ -7,7999 +7,18 @@
       // @JSON_VAR data
       var data = {
         "program": "MEME",
-        "version": "4.12.0",
-        "release": "Tue Jun 27 16:22:50 2017 -0700",
+        "version": "5.0.5",
+        "release": "Mon Mar 18 20:12:19 2019 -0700",
         "stop_reason": "Stopped because requested number of motifs (1) found.",
         "cmd": [
-          "meme", "meme_input_1.fasta", "-o", "meme_test1_out", "-nostatus",
-          "-maxsize", "1000000"
+          "meme",
+          "-o",
+          "-nostatus", "-maxsize", "1000000"
         ],
         "options": {
-          "mod": "zoops",
-          "revcomp": false,
-          "nmotifs": 1,
-          "minw": 8,
-          "maxw": 50,
-          "minsites": 2,
-          "maxsites": 30,
-          "wnsites": 0.8,
-          "spmap": "pam",
-          "spfuzz": 120,
-          "maxwords": -1,
-          "prior": "megap",
-          "b": 7500,
-          "maxiter": 50,
-          "distance": 1e-05,
-          "wg": 11,
-          "ws": 1,
-          "noendgaps": false,
-          "substring": true
-        },
-        "alphabet": {
-          "name": "Protein",
-          "like": "protein",
-          "ncore": 20,
-          "symbols": [
-            {
-              "symbol": "A",
-              "name": "Alanine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "C",
-              "name": "Cysteine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "D",
-              "name": "Aspartic acid",
-              "colour": "FF00FF"
-            }, {
-              "symbol": "E",
-              "name": "Glutamic acid",
-              "colour": "FF00FF"
-            }, {
-              "symbol": "F",
-              "name": "Phenylalanine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "G",
-              "name": "Glycine",
-              "colour": "FFB300"
-            }, {
-              "symbol": "H",
-              "name": "Histidine",
-              "colour": "FFCCCC"
-            }, {
-              "symbol": "I",
-              "name": "Isoleucine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "K",
-              "name": "Lysine",
-              "colour": "CC0000"
-            }, {
-              "symbol": "L",
-              "name": "Leucine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "M",
-              "name": "Methionine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "N",
-              "name": "Asparagine",
-              "colour": "008000"
-            }, {
-              "symbol": "P",
-              "name": "Proline",
-              "colour": "FFFF00"
-            }, {
-              "symbol": "Q",
-              "name": "Glutamine",
-              "colour": "008000"
-            }, {
-              "symbol": "R",
-              "name": "Arginine",
-              "colour": "CC0000"
-            }, {
-              "symbol": "S",
-              "name": "Serine",
-              "colour": "008000"
-            }, {
-              "symbol": "T",
-              "name": "Threonine",
-              "colour": "008000"
-            }, {
-              "symbol": "V",
-              "name": "Valine",
-              "colour": "0000CC"
-            }, {
-              "symbol": "W",
-              "name": "Tryptophan",
-              "colour": "0000CC"
-            }, {
-              "symbol": "Y",
-              "name": "Tyrosine",
-              "colour": "33E6CC"
-            }, {
-              "symbol": "X",
-              "aliases": "*.",
-              "name": "Any amino acid",
-              "equals": "ACDEFGHIKLMNPQRSTVWY"
-            }, {
-              "symbol": "B",
-              "name": "Asparagine or Aspartic acid",
-              "equals": "DN"
-            }, {
-              "symbol": "Z",
-              "name": "Glutamine or Glutamic acid",
-              "equals": "EQ"
-            }, {
-              "symbol": "J",
-              "name": "Leucine or Isoleucine",
-              "equals": "IL"
-            }
-          ]
-        },
-        "background": {
-          "freqs": [
-            0.291, 0.229, 0.001, 0.001, 0.001, 0.255, 0.001, 0.001, 0.001,
-            0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.215, 0.001,
-            0.001, 0.001
-          ]
-        },
-        "sequence_db": {
-          "source": "meme_input_1.fasta",
-          "psp_source": "prior30.plib",
-          "freqs": [
-            0.294, 0.231, 0.000, 0.000, 0.000, 0.257, 0.000, 0.000, 0.000,
-            0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.217, 0.000,
-            0.000, 0.000
-          ],
-          "sequences": [
-            {
-              "name": "chr21_19617074_19617124_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_26934381_26934431_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_28217753_28217803_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31710037_31710087_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31744582_31744632_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31768316_31768366_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31914206_31914256_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31933633_31933683_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31962741_31962791_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31964683_31964733_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31973364_31973414_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31992870_31992920_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32185595_32185645_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32202076_32202126_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32253899_32253949_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32410820_32410870_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_36411748_36411798_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_37838750_37838800_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45705687_45705737_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45971413_45971463_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45978668_45978718_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45993530_45993580_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46020421_46020471_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46031920_46031970_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46046964_46047014_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46057197_46057247_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46086869_46086919_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46102103_46102153_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_47517957_47518007_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_47575506_47575556_-",
-              "length": 50,
-              "weight": 1.000000
-            }
-          ]
         },
         "motifs": [
-          {
-            "db": 0,
-            "id": "GGGGTATAAAA",
-            "alt": "MEME-1",
-            "len": 11,
-            "nsites": 25,
-            "evalue": "2.4e-011",
-            "ic": 40.0,
-            "re": 13.8,
-            "llr": 239,
-            "bt": 5.33554,
-            "time": 0.772000,
-            "psm": [
-              [
-                -32, -680, 91, 77, 7, 138, -20, 55, 64, 107, 11, 150, 142, 72,
-                87, 396, -148, 221, -140, -36
-              ], [
-                -11, -680, 89, 76, 7, 137, -21, 55, 63, 107, 10, 149, 141, 71,
-                87, 396, -239, 220, -140, -36
-              ], [
-                -79, 41, 4, 21, -7, 44, -62, 42, -5, 99, 0, 99, 138, 52, 42,
-                399, -46, 223, -173, -68
-              ], [
-                11, -677, 48, 47, -2, 127, -43, 46, 27, 101, 3, 124, 138, 60,
-                62, 397, -235, 220, -160, -55
-              ], [
-                -596, -820, 12, -21, -53, -267, -74, 37, 16, 44, -37, 98, 31,
-                9, 19, 319, 212, 127, -193, -95
-              ], [
-                165, -261, 70, 110, 77, -521, -4, 147, 95, 201, 90, 121, 124,
-                91, 107, 425, -527, 314, -95, 8
-              ], [
-                -838, -990, -89, -149, -151, -841, -161, -117, -113, -66,
-                -209, -68, -69, -129, -91, 111, 221, -55, -255, -173
-              ], [
-                176, -858, -79, -103, -115, -717, -148, -95, -108, -17, -162,
-                -61, -12, -95, -69, 193, -737, 52, -240, -153
-              ], [
-                134, -686, 0, 16, -12, -553, -68, 44, -8, 96, -9, 88, 124, 41,
-                36, 384, 11, 216, -177, -71
-              ], [
-                165, -261, 70, 110, 77, -521, -4, 147, 95, 201, 90, 121, 124,
-                91, 107, 425, -527, 314, -95, 8
-              ], [
-                147, -614, 89, 129, 93, -121, 12, 160, 113, 217, 108, 144,
-                144, 111, 125, 447, -241, 332, -81, 22
-              ]
-            ],
-            "pwm": [
-              [
-                0.240000, 0.000000, 0.000000, 0.000000, 0.000000, 0.680000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.080000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.280000, 0.000000, 0.000000, 0.000000, 0.000000, 0.680000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.040000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.160000, 0.320000, 0.000000, 0.000000, 0.000000, 0.360000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.160000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.320000, 0.000000, 0.000000, 0.000000, 0.000000, 0.640000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.040000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.040000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.960000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.960000, 0.040000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.760000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.240000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.960000, 0.040000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000
-              ], [
-                0.840000, 0.000000, 0.000000, 0.000000, 0.000000, 0.120000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-                0.000000, 0.000000, 0.000000, 0.000000, 0.040000, 0.000000,
-                0.000000, 0.000000
-              ]
-            ],
-            "sites": [
-              {
-                "seq": 24,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 1.06e-06,
-                "lflank": "AAGGCCAGGA",
-                "match": "GGGGTATAAAA",
-                "rflank": "GCCTGAGAGC"
-              }, {
-                "seq": 25,
-                "pos": 36,
-                "rc": false,
-                "pvalue": 3.41e-06,
-                "lflank": "ACAGGCCCTG",
-                "match": "GGCATATAAAA",
-                "rflank": "GCC"
-              }, {
-                "seq": 19,
-                "pos": 9,
-                "rc": false,
-                "pvalue": 3.41e-06,
-                "lflank": "CAGGCCCTG",
-                "match": "GGCATATAAAA",
-                "rflank": "GCCCCAGCAG"
-              }, {
-                "seq": 9,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 3.41e-06,
-                "lflank": "GATTCACTGA",
-                "match": "GGCATATAAAA",
-                "rflank": "GGCCCTCTGC"
-              }, {
-                "seq": 21,
-                "pos": 7,
-                "rc": false,
-                "pvalue": 4.00e-06,
-                "lflank": "CCAAGGA",
-                "match": "GGAGTATAAAA",
-                "rflank": "GCCCCACAAA"
-              }, {
-                "seq": 13,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 5.01e-06,
-                "lflank": "CCACCAGCTT",
-                "match": "GAGGTATAAAA",
-                "rflank": "AGCCCTGTAC"
-              }, {
-                "seq": 23,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 6.06e-06,
-                "lflank": "ATACCCAGGG",
-                "match": "AGGGTATAAAA",
-                "rflank": "CCTCAGCAGC"
-              }, {
-                "seq": 15,
-                "pos": 21,
-                "rc": false,
-                "pvalue": 8.67e-06,
-                "lflank": "AATCACTGAG",
-                "match": "GATGTATAAAA",
-                "rflank": "GTCCCAGGGA"
-              }, {
-                "seq": 12,
-                "pos": 18,
-                "rc": false,
-                "pvalue": 8.67e-06,
-                "lflank": "CACCAGAGCT",
-                "match": "GGGATATATAA",
-                "rflank": "AGAAGGTTCT"
-              }, {
-                "seq": 11,
-                "pos": 16,
-                "rc": false,
-                "pvalue": 8.67e-06,
-                "lflank": "CACTATTGAA",
-                "match": "GATGTATAAAA",
-                "rflank": "TTTCATTTGC"
-              }, {
-                "seq": 22,
-                "pos": 2,
-                "rc": false,
-                "pvalue": 1.21e-05,
-                "lflank": "GA",
-                "match": "GACATATAAAA",
-                "rflank": "GCCAACATCC"
-              }, {
-                "seq": 28,
-                "pos": 32,
-                "rc": false,
-                "pvalue": 1.59e-05,
-                "lflank": "CCGGCGGGGC",
-                "match": "GGGGTATAAAG",
-                "rflank": "GGGGCGG"
-              }, {
-                "seq": 20,
-                "pos": 4,
-                "rc": false,
-                "pvalue": 1.59e-05,
-                "lflank": "CAGA",
-                "match": "GGGGTATAAAG",
-                "rflank": "GTTCCGACCA"
-              }, {
-                "seq": 6,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 1.68e-05,
-                "lflank": "CCCACTACTT",
-                "match": "AGAGTATAAAA",
-                "rflank": "TCATTCTGAG"
-              }, {
-                "seq": 14,
-                "pos": 19,
-                "rc": false,
-                "pvalue": 2.03e-05,
-                "lflank": "CACCAGCAAG",
-                "match": "GATATATAAAA",
-                "rflank": "GCTCAGGAGT"
-              }, {
-                "seq": 4,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 3.06e-05,
-                "lflank": "CAGGTCTAAG",
-                "match": "AGCATATATAA",
-                "rflank": "CTTGGAGTCC"
-              }, {
-                "seq": 0,
-                "pos": 39,
-                "rc": false,
-                "pvalue": 3.06e-05,
-                "lflank": "CCTCGGGACG",
-                "match": "TGGGTATATAA",
-                "rflank": ""
-              }, {
-                "seq": 18,
-                "pos": 37,
-                "rc": false,
-                "pvalue": 3.82e-05,
-                "lflank": "CGTGGTCGCG",
-                "match": "GGGGTATAACA",
-                "rflank": "GC"
-              }, {
-                "seq": 5,
-                "pos": 0,
-                "rc": false,
-                "pvalue": 3.82e-05,
-                "lflank": "",
-                "match": "AACGTATATAA",
-                "rflank": "ATGGTCCTGT"
-              }, {
-                "seq": 29,
-                "pos": 30,
-                "rc": false,
-                "pvalue": 4.02e-05,
-                "lflank": "GCTGCCGGTG",
-                "match": "AGCGTATAAAG",
-                "rflank": "GCCCTGGCG"
-              }, {
-                "seq": 1,
-                "pos": 27,
-                "rc": false,
-                "pvalue": 5.52e-05,
-                "lflank": "AGTCACAAGT",
-                "match": "GAGTTATAAAA",
-                "rflank": "GGGTCGCACG"
-              }, {
-                "seq": 3,
-                "pos": 14,
-                "rc": false,
-                "pvalue": 5.94e-05,
-                "lflank": "CCCAGGTTTC",
-                "match": "TGAGTATATAA",
-                "rflank": "TCGCCGCACC"
-              }, {
-                "seq": 16,
-                "pos": 22,
-                "rc": false,
-                "pvalue": 6.78e-05,
-                "lflank": "AGTTTCAGTT",
-                "match": "GGCATCTAAAA",
-                "rflank": "attatataac"
-              }, {
-                "seq": 7,
-                "pos": 2,
-                "rc": false,
-                "pvalue": 2.08e-04,
-                "lflank": "TC",
-                "match": "AGAGTATATAT",
-                "rflank": "AAATGTTCCT"
-              }, {
-                "seq": 8,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 4.05e-04,
-                "lflank": "TATAACTCAG",
-                "match": "GTTGGATAAAA",
-                "rflank": "TAATTTGTAC"
-              }
-            ]
-          }
-        ],
         "scan": [
-          {
-            "pvalue": 1.22e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 39,
-                "rc": false,
-                "pvalue": 3.06e-05
-              }
-            ]
-          }, {
-            "pvalue": 2.21e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 27,
-                "rc": false,
-                "pvalue": 5.52e-05
-              }
-            ]
-          }, {
-            "pvalue": 7.29e-01,
-            "sites": []
-          }, {
-            "pvalue": 2.37e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 14,
-                "rc": false,
-                "pvalue": 5.94e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.22e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 3.06e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.53e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 0,
-                "rc": false,
-                "pvalue": 3.82e-05
-              }
-            ]
-          }, {
-            "pvalue": 6.70e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 1.68e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.81e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 4,
-                "rc": false,
-                "pvalue": 4.54e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.61e-02,
-            "sites": []
-          }, {
-            "pvalue": 1.36e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 3.41e-06
-              }
-            ]
-          }, {
-            "pvalue": 1.99e-01,
-            "sites": []
-          }, {
-            "pvalue": 3.47e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 16,
-                "rc": false,
-                "pvalue": 8.67e-06
-              }
-            ]
-          }, {
-            "pvalue": 3.47e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 18,
-                "rc": false,
-                "pvalue": 8.67e-06
-              }
-            ]
-          }, {
-            "pvalue": 2.01e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 5.01e-06
-              }
-            ]
-          }, {
-            "pvalue": 8.11e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 19,
-                "rc": false,
-                "pvalue": 2.03e-05
-              }
-            ]
-          }, {
-            "pvalue": 3.47e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 21,
-                "rc": false,
-                "pvalue": 8.67e-06
-              }
-            ]
-          }, {
-            "pvalue": 2.71e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 22,
-                "rc": false,
-                "pvalue": 6.78e-05
-              }
-            ]
-          }, {
-            "pvalue": 8.23e-02,
-            "sites": []
-          }, {
-            "pvalue": 1.53e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 37,
-                "rc": false,
-                "pvalue": 3.82e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.36e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 9,
-                "rc": false,
-                "pvalue": 3.41e-06
-              }
-            ]
-          }, {
-            "pvalue": 6.37e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 4,
-                "rc": false,
-                "pvalue": 1.59e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.60e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 7,
-                "rc": false,
-                "pvalue": 4.00e-06
-              }
-            ]
-          }, {
-            "pvalue": 4.83e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 2,
-                "rc": false,
-                "pvalue": 1.21e-05
-              }
-            ]
-          }, {
-            "pvalue": 2.43e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 6.06e-06
-              }
-            ]
-          }, {
-            "pvalue": 4.26e-05,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 1.06e-06
-              }
-            ]
-          }, {
-            "pvalue": 1.36e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 36,
-                "rc": false,
-                "pvalue": 3.41e-06
-              }
-            ]
-          }, {
-            "pvalue": 4.30e-02,
-            "sites": []
-          }, {
-            "pvalue": 4.30e-02,
-            "sites": []
-          }, {
-            "pvalue": 6.37e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 32,
-                "rc": false,
-                "pvalue": 1.59e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.61e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 30,
-                "rc": false,
-                "pvalue": 4.02e-05
-              }
-            ]
-          }
-        ]
-      };
     </script>
-    <script>
 var site_url = "http://meme-suite.org";
-</script>
-    <script>
-
-/*
- * $
- *
- * Shorthand function for getElementById
- */
-function $(el) {
-  return document.getElementById(el);
-}
-
-
-/*
- * See http://stackoverflow.com/a/5450113/66387
- * Does string multiplication like the perl x operator.
- */
-function string_mult(pattern, count) {
-    if (count < 1) return '';
-    var result = '';
-    while (count > 1) {
-        if (count & 1) result += pattern;
-        count >>= 1, pattern += pattern;
-    }
-    return result + pattern;
-}
-
-/*
- * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript
- * Slightly modified with information from
- * https://developer.mozilla.org/en/DOM/window.location
- */
-function parse_params() {
-  "use strict";
-  var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v;
-  search = window.location.search;
-  queryStart = search.indexOf("?") + 1;
-  queryEnd   = search.indexOf("#") + 1 || search.length + 1;
-  query      = search.slice(queryStart, queryEnd - 1);
-
-  if (query === search || query === "") return {};
-
-  params  = {};
-  nvPairs = query.replace(/\+/g, " ").split("&");
-
-  for (i = 0; i < nvPairs.length; i++) {
-    nv = nvPairs[i].split("=");
-    n  = decodeURIComponent(nv[0]);
-    v  = decodeURIComponent(nv[1]);
-    // allow a name to be used multiple times
-    // storing each value in the array
-    if (!(n in params)) {
-      params[n] = [];
-    }
-    params[n].push(nv.length === 2 ? v : null);
-  }
-  return params;
-}
-
-/*
- * coords
- *
- * Calculates the x and y offset of an element.
- * From http://www.quirksmode.org/js/findpos.html
- * with alterations to take into account scrolling regions
- */
-function coords(elem) {
-  var myX = myY = 0;
-  if (elem.getBoundingClientRect) {
-    var rect;
-    rect = elem.getBoundingClientRect();
-    myX = rect.left + ((typeof window.pageXOffset !== "undefined") ?
-        window.pageXOffset : document.body.scrollLeft);
-    myY = rect.top + ((typeof window.pageYOffset !== "undefined") ?
-        window.pageYOffset : document.body.scrollTop);
-  } else {
-    // this fall back doesn't properly handle absolutely positioned elements
-    // inside a scrollable box
-    var node;
-    if (elem.offsetParent) {
-      // subtract all scrolling
-      node = elem;
-      do {
-        myX -= node.scrollLeft ? node.scrollLeft : 0;
-        myY -= node.scrollTop ? node.scrollTop : 0;
-      } while (node = node.parentNode);
-      // this will include the page scrolling (which is unwanted) so add it back on
-      myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft;
-      myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop;
-      // sum up offsets
-      node = elem;
-      do {
-        myX += node.offsetLeft;
-        myY += node.offsetTop;
-      } while (node = node.offsetParent);
-    }
-  }
-  return [myX, myY];
-}
-
-/*
- * position_popup
- *
- * Positions a popup relative to an anchor element.
- *
- * The avaliable positions are:
- * 0 - Centered below the anchor.
- */
-function position_popup(anchor, popup, position) {
-  "use strict";
-  var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h;
-  var a_xy, spacer, margin, scrollbar, page_w;
-  // define constants
-  spacer = 5;
-  margin = 15;
-  scrollbar = 15;
-  // define the positions and widths
-  a_xy = coords(anchor);
-  a_x = a_xy[0];
-  a_y = a_xy[1];
-  a_w = anchor.offsetWidth;
-  a_h = anchor.offsetHeight;
-  p_w = popup.offsetWidth;
-  p_h = popup.offsetHeight;
-  page_w = null;
-  if (window.innerWidth) {
-    page_w = window.innerWidth;
-  } else if (document.body) {
-    page_w = document.body.clientWidth;
-  }
-  // check the position type is defined
-  if (typeof position !== "number") {
-    position = 0;
-  }
-  // calculate the popup position
-  switch (position) {
-    case 1:
-      p_x = a_x + a_w + spacer;
-      p_y = a_y + (a_h / 2) - (p_h / 2);
-      break;
-    case 0:
-    default:
-      p_x = a_x + (a_w / 2) - (p_w / 2);
-      p_y = a_y + a_h + spacer;
-      break;
-  }
-  // constrain the popup position
-  if (p_x < margin) {
-    p_x = margin;
-  } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) {
-    p_x = page_w - margin - scrollbar - p_w;
-  }
-  if (p_y < margin) {
-    p_y = margin;
-  }
-  // position the popup
-  popup.style.left = p_x + "px";
-  popup.style.top = p_y + "px";
-}
-
-function lookup_help_popup(popup_id) {
-  var _body, pop, info;
-  pop = document.getElementById(popup_id);
-  if (pop == null) {
-    _body = document.getElementsByTagName("body")[0];
-    pop = document.createElement("div");
-    pop.className = "pop_content";
-    pop.id = popup_id;
-    pop.style.backgroundColor = "#FFC";
-    pop.style.borderColor = "black";
-    info = document.createElement("p");
-    info.style.fontWeight = "bold";
-    info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\"."));
-    pop.appendChild(info);
-    // this might cause problems with the menu, but as this only happens
-    // when something is already wrong I don't think that's too much of a problem
-    _body.insertBefore(pop, _body.firstChild);
-  }
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) {
-    if (!/\bauto_buttons\b/.test(pop.className)) {
-      pop.className += " auto_buttons";
-      var back_btn_sec = document.createElement("div");
-      back_btn_sec.className = "nested_only pop_back_sec";
-      var back_btn = document.createElement("span");
-      back_btn.className = "pop_back";
-      back_btn.appendChild(document.createTextNode("<< back"));
-      back_btn.addEventListener("click", function(e) {
-        help_return();
-      }, false);
-      back_btn_sec.appendChild(back_btn);
-      pop.insertBefore(back_btn_sec, pop.firstChild);
-      var close_btn_sec = document.createElement("div");
-      close_btn_sec.className = "pop_close_sec";
-      var close_btn = document.createElement("span");
-      close_btn.className = "pop_close";
-      close_btn.appendChild(document.createTextNode("close"));
-      close_btn.addEventListener("click", function(e) {
-        help_popup();
-      }, false);
-      close_btn_sec.appendChild(close_btn);
-      pop.appendChild(close_btn_sec);
-    }
-  }
-  return pop;
-}
-
-/*
- * help_popup
- *
- * Moves around help pop-ups so they appear
- * below an activator.
- */
-function help_popup(activator, popup_id) {
-  "use strict";
-  var pop;
-  // set default values
-  if (typeof help_popup.popup === "undefined") {
-    help_popup.popup = [];
-  }
-  if (typeof help_popup.activator === "undefined") {
-    help_popup.activator = null;
-  }
-  var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (typeof(activator) == "undefined") { // no activator so hide
-    if (last_pop != null) {
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-    }
-    return;
-  }
-  pop = lookup_help_popup(popup_id);
-  if (pop == last_pop) {
-    if (activator == help_popup.activator) {
-      //hide popup (as we've already shown it for the current help button)
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-      return; // toggling complete!
-    }
-  } else if (last_pop != null) {
-    //activating different popup so hide current one
-    last_pop.style.display = 'none';
-  }
-  help_popup.popup = [pop];
-  help_popup.activator = activator;
-  toggle_class(pop, "nested", false);
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = 'block';
-  position_popup(activator, pop);
-}
-
-/*
- * help_refine
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_refine(popup_id) {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not refine a help popup when one is not shown!");
-  }
-  var pop = lookup_help_popup(popup_id);
-  var last_pop = help_popup.popup[help_popup.popup.length - 1];
-  if (pop == last_pop) return; // slightly odd, but no real cause for alarm
-  help_popup.popup.push(pop);
-  toggle_class(pop, "nested", true);
-  last_pop.style.display = "none";
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = "block";
-  position_popup(help_popup.activator, pop);
-}
-
-/*
- * help_return
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_return() {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not return to a earlier help popup when one is not shown!");
-  }
-  var last_pop = help_popup.popup.pop();
-  last_pop.style.display = "none";
-  var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (pop != null) {
-    toggle_class(pop, "nested", help_popup.popup.length > 1);
-    pop.style.display = "block";
-    position_popup(help_popup.activator, pop);
-  } else {
-    help_popup.activator = null;
-  }
-}
-
-/*
- * update_scroll_pad
- *
- * Creates padding at the bottom of the page to allow
- * scrolling of anything into view.
- */
-function update_scroll_pad() {
-  var page, pad;
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  pad = $("scrollpad");
-  if (pad === null) {
-    pad = document.createElement("div");
-    pad.id = 'scrollpad';
-    document.getElementsByTagName('body')[0].appendChild(pad);
-  }
-  pad.style.height = Math.abs(page.clientHeight - 100) + "px";
-}
-
-function substitute_classes(node, remove, add) {
-  "use strict";
-  var list, all, i, cls, classes;
-  list = node.className.split(/\s+/);
-  all = {};
-  for (i = 0; i < list.length; i++) {
-    if (list[i].length > 0) all[list[i]] = true;
-  }
-  for (i = 0; i < remove.length; i++) {
-    if (all.hasOwnProperty(remove[i])) {
-      delete all[remove[i]];
-    }
-  }
-  for (i = 0; i < add.length; i++) {
-    all[add[i]] = true;
-  }
-  classes = "";
-  for (cls in all) {
-    classes += cls + " ";
-  }
-  node.className = classes;
-}
-
-/*
- * toggle_class
- *
- * Adds or removes a class from the node. If the parameter 'enabled' is not 
- * passed then the existence of the class will be toggled, otherwise it will be
- * included if enabled is true.
- */
-function toggle_class(node, cls, enabled) {
-  var classes = node.className;
-  var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/);
-  var found = false;
-  for (var i = 0; i < list.length; i++) {
-    if (list[i] == cls) {
-      list.splice(i, 1);
-      i--;
-      found = true;
-    }
-  }
-  if (typeof enabled == "undefined") {
-    if (!found) list.push(cls);
-  } else {
-    if (enabled) list.push(cls);
-  }
-  node.className = list.join(" ");
-}
-
-/*
- * find_child
- *
- * Searches child nodes in depth first order and returns the first it finds
- * with the className specified.
- * TODO replace with querySelector
- */
-function find_child(node, className) {
-  var pattern;
-  if (node == null || typeof node !== "object") {
-    return null;
-  }
-  if (typeof className === "string") {
-    pattern = new RegExp("\\b" + className + "\\b");
-  } else {
-    pattern = className;
-  }
-  if (node.nodeType == Node.ELEMENT_NODE && 
-      pattern.test(node.className)) {
-    return node;
-  } else {
-    var result = null;
-    for (var i = 0; i < node.childNodes.length; i++) {
-      result = find_child(node.childNodes[i], pattern);
-      if (result != null) break;
-    }
-    return result;
-  }
-}
-
-/*
- * find_parent
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the className specified.
- */
-function find_parent(node, className) {
-  var pattern;
-  pattern = new RegExp("\\b" + className + "\\b");
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && 
-        pattern.test(node.className)) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * find_parent_tag
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the tag name specified. HTML tags should be specified in upper case.
- */
-function find_parent_tag(node, tag_name) {
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * __toggle_help
- *
- * Uses the 'topic' property of the this object to
- * toggle display of a help topic.
- *
- * This function is not intended to be called directly.
- */
-function __toggle_help(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-
-  help_popup(this, this.getAttribute("data-topic"));
-}
-
-function setup_help_button(button) {
-  "use strict";
-  var topic;
-  if (button.hasAttribute("data-topic")) {
-    topic = button.getAttribute("data-topic");
-    if (document.getElementById(topic) != null) {
-      button.tabIndex = "0"; // make keyboard selectable
-      button.addEventListener("click", function() {
-        help_popup(button, topic);
-      }, false);
-      button.addEventListener("keydown", function(e) {
-        // toggle only on Enter or Spacebar, let other keys do their thing
-        if (e.keyCode !== 13 && e.keyCode !== 32) return;
-        // stop a submit or something like that
-        e.preventDefault();
-        help_popup(button, topic);
-      }, false);
-    } else {
-      button.style.visibility = "hidden";
-    }
-  }
-  button.className += " active";
-}
-
-/*
- * help_button
- *
- * Makes a help button for the passed topic.
- */
-function help_button(topic) {
-  var btn = document.createElement("div");
-  btn.className = "help";
-  btn.setAttribute("data-topic", topic);
-  setup_help_button(btn);
-  return btn;
-}
-
-/*
- * prepare_download
- *
- * Sets the attributes of a link to setup a file download using the given content.
- * If no link is provided then create one and click it.
- */
-function prepare_download(content, mimetype, filename, link) {
-  "use strict";
-  // if no link is provided then create one and click it
-  var click_link = false;
-  if (!link) {
-    link = document.createElement("a");
-    click_link = true;
-  }
-  try {
-    // Use a BLOB to convert the text into a data URL.
-    // We could do this manually with a base 64 conversion.
-    // This will only be supported on modern browsers,
-    // hence the try block.
-    var blob = new Blob([content], {type: mimetype});
-    var reader = new FileReader();
-    reader.onloadend = function() {
-      // If we're lucky the browser will also support the download
-      // attribute which will let us suggest a file name to save the link.
-      // Otherwise it is likely that the filename will be unintelligible. 
-      link.setAttribute("download", filename);
-      link.href = reader.result;
-      if (click_link) {
-        // must add the link to click it
-        document.body.appendChild(link);
-        link.click();
-        document.body.removeChild(link);
-      }
-    }
-    reader.readAsDataURL(blob);
-  } catch (error) {
-    if (console && console.log) console.log(error);
-    // probably an old browser
-    link.href = "";
-    link.visible = false;
-  }
-}
-
-/*
- * add_cell
- *
- * Add a cell to the table row.
- */
-function add_cell(row, node, cls, click_action) {
-  var cell = row.insertCell(row.cells.length);
-  if (node) cell.appendChild(node);
-  if (cls && cls !== "") cell.className = cls;
-  if (click_action) cell.addEventListener("click", click_action, false);
-}
-
-/*
- * add_header_cell
- *
- * Add a header cell to the table row.
- */
-function add_header_cell(row, node, help_topic, cls, colspan) {
-  var th = document.createElement("th");
-  if (node) th.appendChild(node);
-  if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic));
-  if (cls && cls !== "") th.className = cls;
-  if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan;
-  row.appendChild(th);
-}
-
-/*
- * add_text_cell
- *
- * Add a text cell to the table row.
- */
-function add_text_cell(row, text, cls, action) {
-  var node = null;
-  if (typeof(text) != 'undefined') node = document.createTextNode(text);
-  add_cell(row, node, cls, action);
-}
-
-/*
- * add_text_header_cell
- *
- * Add a text header cell to the table row.
- */
-function add_text_header_cell(row, text, help_topic, cls, action, colspan) {
-  var node = null;
-  if (typeof(text) != 'undefined') {
-    var nbsp = (help_topic ? "\u00A0" : "");
-    var str = "" + text;
-    var parts = str.split(/\n/);
-    if (parts.length === 1) {
-      if (action) {
-        node = document.createElement("span");
-        node.appendChild(document.createTextNode(str + nbsp));
-      } else {
-        node = document.createTextNode(str + nbsp);
-      }
-    } else {
-      node = document.createElement("span");
-      for (var i = 0; i < parts.length; i++) {
-        if (i !== 0) {
-          node.appendChild(document.createElement("br"));
-        }
-        node.appendChild(document.createTextNode(parts[i]));
-      }
-    }
-    if (action) {
-      node.addEventListener("click", action, false);
-      node.style.cursor = "pointer";
-    }
-  }
-  add_header_cell(row, node, help_topic, cls, colspan);
-}
-
-function setup_help() {
-  "use strict";
-  var help_buttons, i;
-  help_buttons = document.querySelectorAll(".help:not(.active)");
-  for (i = 0; i < help_buttons.length; i++) {
-    setup_help_button(help_buttons[i]);
-  }
-}
-
-function setup_scrollpad() {
-  "use strict";
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) {
-    window.addEventListener("resize", update_scroll_pad, false);
-    update_scroll_pad();
-  }
-}
-
-// anon function to avoid polluting global scope
-(function() {
-  "use strict";
-  window.addEventListener("load", function load(evt) {
-    window.removeEventListener("load", load, false);
-    setup_help();
-    setup_scrollpad();
-  }, false);
-})();
-
-/*
- *  make_link
- *
- *  Creates a text node and if a URL is specified it surrounds it with a link.
- *  If the URL doesn't begin with "http://" it automatically adds it, as
- *  relative links don't make much sense in this context.
- */
-function make_link(text, url) {
-  var textNode = null;
-  var link = null;
-  if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text);
-  if (typeof url === "string") {
-    if (url.indexOf("//") == -1) {
-      url = "http://" + url;
-    }
-    link = document.createElement('a');
-    link.href = url;
-    if (textNode) link.appendChild(textNode);
-    return link;
-  }
-  return textNode;
-}
-</script>
-    <script>
-      // 
-      // return true if any part of the passed element is visible in the viewport
-      //
-      function element_in_viewport(elem) {
-        var rect;
-        try {
-          rect = elem.getBoundingClientRect();
-        } catch (e) {
-          return false;
-        }
-        return (
-            rect.top < (window.innerHeight || document.body.clientHeight) &&
-            rect.bottom > 0 &&
-            rect.left < (window.innerWidth || document.body.clientWidth) &&
-            rect.right > 0
-            );
-      }
-
-      //
-      // Functions to delay a drawing task until it is required or it would not lag the display to do so
-      //
-
-      // a list of items still to be drawn
-      var drawable_list = [];
-      // the delay between drawing objects that are not currently visible
-      var draw_delay = 1;
-      // the delay after a user interaction
-      var user_delay = 300;
-      // the delay after a user has stopped scrolling and is viewing the stuff drawn on the current page
-      var stop_delay = 300;
-      // the timer handle; allows resetting of the timer after user interactions
-      var draw_timer = null;
-
-      //
-      // Drawable
-      //
-      // elem - a page element which defines the position on the page that drawing is to be done
-      // task - an object with the method run which takes care of painting the object
-      //
-      var Drawable = function(elem, task) {
-        this.elem = elem;
-        this.task = task;
-      }
-
-      //
-      // Drawable.is_visible
-      //
-      // Determines if the element is visible in the viewport
-      //
-      Drawable.prototype.is_visible = function() {
-        return element_in_viewport(this.elem);
-      }
-
-      //
-      // Drawable.run
-      //
-      // Run the task held by the drawable
-      Drawable.prototype.run = function() {
-        if (this.task) this.task.run();
-        this.task = null;
-      }
-
-      //
-      // Drawable.run
-      //
-      // Run the task iff visible
-      // returns true if the task ran or has already run
-      Drawable.prototype.run_visible = function() {
-        if (this.task) {
-          if (element_in_viewport(this.elem)) {
-            this.task.run();
-            this.task = null;
-            return true;
-          }
-          return false;
-        } else {
-          return true;
-        }
-      }
-
-      //
-      // draw_on_screen
-      //
-      // Checks each drawable object and draws those on screen.
-      //
-      function draw_on_screen() {
-        var found = false;
-        for (var i = 0; i < drawable_list.length; i++) {
-          if (drawable_list[i].run_visible()) {
-            drawable_list.splice(i--, 1);
-            found = true;
-          }
-        }
-        return found;
-      }
-
-      //
-      // process_draw_tasks
-      //
-      // Called on a delay to process the next avaliable
-      // draw task.
-      //
-      function process_draw_tasks() {
-        var delay = draw_delay;
-        draw_timer = null;
-        if (drawable_list.length == 0) return; //no more tasks
-        if (draw_on_screen()) {
-          delay = stop_delay; //give the user a chance to scroll
-        } else {
-          //get next task
-          var drawable = drawable_list.shift();
-          drawable.task.run();
-        }
-        //allow UI updates between tasks
-        draw_timer = window.setTimeout("process_draw_tasks()", delay);
-      }
-
-      //
-      // delayed_process_draw_tasks
-      //
-      // Call process_draw_tasks after a short delay.
-      // The delay serves to group multiple redundant events.       
-      // Should be set as event handler for onscroll and onresize.
-      //
-      function delayed_process_draw_tasks() {
-        //reset the timer
-        if (drawable_list.length > 0) { 
-          if (draw_timer != null) clearTimeout(draw_timer);
-          draw_timer = window.setTimeout("process_draw_tasks()", user_delay);
-        }
-      }
-
-      //
-      // add_draw_task
-      //
-      // Add a drawing task to be called immediately if it is
-      // visible, or to be called on a delay to reduce stuttering
-      // effect on the web browser.
-      function add_draw_task(elem, task) {
-        drawable = new Drawable(elem, task);
-        if (drawable.is_visible()) {
-          task.run();
-        } else {
-          drawable_list.push(drawable);
-          //reset timer
-          if (draw_timer != null) clearTimeout(draw_timer);
-          draw_timer = window.setTimeout("process_draw_tasks()", user_delay);
-        }
-      }
-
-</script>
-    <script>
-//======================================================================
-// start Alphabet object
-//======================================================================
-var Alphabet = function(alphabet, background) {
-  "use strict";
-  var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background;
-  generate_background = (background == null);
-  if (generate_background) {
-    background = [];
-    for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore;
-  } else if (alphabet.ncore != background.length) {
-    throw new Error("The background length does not match the alphabet length.");
-  }
-  this.name = alphabet.name;
-  this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null);
-  this.ncore = alphabet.ncore;
-  this.symbols = alphabet.symbols;
-  this.background = background;
-  this.genbg = generate_background;
-  this.encode = {};
-  this.encode2core = {};
-  this.complement = {};
-  // check if all symbols are same case
-  var seen_uc = false;
-  var seen_lc = false;
-  var check_case = function (syms) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        if (sym >= 'a' && sym <= 'z') seen_lc = true;
-        else if (sym >= 'A' && sym <= 'Z') seen_uc = true;
-      }
-    }
-  };
-  for (i = 0; i < this.symbols.length; i++) {
-    check_case(this.symbols[i].symbol);
-    check_case(this.symbols[i].aliases);
-  }
-  // now map symbols to indexes
-  var update_array = function(array, syms, index) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        array[sym] = index;
-        // when only a single case is used, then encode as case insensitive
-        if (seen_uc != seen_lc) {
-          if (sym >= 'a' && sym <= 'z') {
-            array[sym.toUpperCase()] = index;
-          } else if (sym >= 'A' && sym <= 'Z') {
-            array[sym.toLowerCase()] = index;
-          }
-        }
-      }
-    }
-  }
-  // map core symbols to index
-  for (i = 0; i < this.ncore; i++) {
-    update_array(this.encode2core, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode2core, this.symbols[i].aliases, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-  }
-  // map ambigous symbols to index
-  ambigs = {};
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-    ambigs[this.symbols[i].equals] = i;
-  }
-  // determine complements
-  for (i = 0; i < this.ncore; i++) {
-    complement = this.symbols[i].complement;
-    if (typeof complement === "string") {
-      this.complement[i] = this.encode2core[complement];
-    }
-  }
-  next_symbol:
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    complement = "";
-    for (j = 0; j < this.symbols[i].equals.length; j++) {
-      comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]];
-      if (typeof comp_e_sym !== "number") continue next_symbol;
-      complement += this.symbols[comp_e_sym].symbol;
-    }
-    complement = complement.split("").sort().join("");
-    if (typeof ambigs[complement] === "number") {
-      this.complement[i] = ambigs[complement];
-    }
-  }
-  // determine case insensitivity
-  this.case_insensitive = true;
-  if (seen_uc == seen_lc) {
-    // when there is a mixture of cases it probably won't
-    // be case insensitive but we still need to check
-    loop:
-    for (i = 0; i < this.symbols.length; i++) {
-      sym = this.symbols[i].symbol;
-      if (sym >= 'A' && sym <= 'Z') {
-        if (this.encode[sym.toLowerCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      } else if (sym >= 'a' && sym <= 'z') {
-        if (this.encode[sym.toUpperCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      }
-      aliases = this.symbols[i].aliases;
-      if (aliases != null) {
-        for (j = 0; j < aliases.length; j++) {
-          sym = aliases.charAt(j);
-          if (sym >= 'A' && sym <= 'Z') {
-            if (this.encode[sym.toLowerCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          } else if (sym >= 'a' && sym <= 'z') {
-            if (this.encode[sym.toUpperCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          }
-        }
-      }
-    }
-  }
-  // normalise aliases to remove the prime symbol and eliminate
-  // the alternate cases when the alphabet is case insensitive
-  var seen, out;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym = this.symbols[i].symbol;
-    aliases = this.symbols[i].aliases;
-    if (typeof aliases != "string") aliases = "";
-    seen = {};
-    out = [];
-    if (this.case_insensitive) {
-      sym = sym.toUpperCase();
-      aliases = aliases.toUpperCase();
-    }
-    seen[sym] = true;
-    for (j = 0; j < aliases.length; j++) {
-      if (!seen[aliases.charAt(j)]) {
-        seen[aliases.charAt(j)] = true;
-        out.push(aliases.charAt(j));
-      }
-    }
-    this.symbols[i].aliases = out.sort().join("");
-  }
-};
-// return the name of the alphabet
-Alphabet.prototype.get_alphabet_name = function() {
-  return this.name;
-};
-// return if the alphabet can be complemented
-Alphabet.prototype.has_complement = function() {
-  return (typeof this.symbols[0].complement === "string");
-};
-// return true if an uppercase letter has the same meaning as the lowercase form
-Alphabet.prototype.is_case_insensitive = function() {
-  return this.case_insensitive;
-};
-// return the information content of an alphabet letter
-Alphabet.prototype.get_ic = function() {
-  return Math.log(this.ncore) / Math.LN2;
-};
-// return the count of the core alphabet symbols
-Alphabet.prototype.get_size_core = function() {
-  return this.ncore;
-};
-// return the count of all alphabet symbols
-Alphabet.prototype.get_size_full = function() {
-  return this.symbols.length;
-};
-// return the symbol for the given alphabet index
-Alphabet.prototype.get_symbol = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  return this.symbols[alph_index].symbol;
-};
-// return the aliases for the given alphabet index
-Alphabet.prototype.get_aliases = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  var sym_obj = this.symbols[alph_index];
-  return (sym_obj.aliases != null ? sym_obj.aliases : "");
-};
-// return the name for the given alphabet index
-Alphabet.prototype.get_name = function(alph_index) {
-  "use strict";
-  var sym;
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  sym = this.symbols[alph_index];
-  return (typeof sym.name === "string" ? sym.name : sym.symbol);
-};
-// return the alphabet it is like or null
-Alphabet.prototype.get_like = function() {
-  "use strict";
-  return this.like;
-};
-// return the index of the complement for the given alphabet index
-Alphabet.prototype.get_complement = function(alph_index) {
-  var comp_e_sym = this.complement[alph_index];
-  if (typeof comp_e_sym === "number") {
-    return comp_e_sym;
-  } else {
-    return -1;
-  }
-};
-// return a string containing the core symbols
-Alphabet.prototype.get_symbols = function() {
-  "use strict";
-  var i, core_symbols;
-  core_symbols = "";
-  for (i = 0; i < this.ncore; i++) {
-    core_symbols += this.symbols[i].symbol;
-  }
-  return core_symbols;
-};
-// return if the background was not a uniform generated background
-Alphabet.prototype.has_bg = function() {
-  "use strict";
-  return !this.genbg;
-};
-// get the background frequency for the index
-Alphabet.prototype.get_bg_freq = function(alph_index) {
-  "use strict";
-  var freq, i, symbols;
-  if (alph_index >= 0) {
-    if (alph_index < this.ncore) {
-      return this.background[alph_index];
-    } else if (alph_index < this.symbols.length) {
-      freq = 0;
-      symbols = this.symbols[alph_index].equals;
-      for (i = 0; i < symbols.length; i++) {
-        freq += this.background[this.encode2core[symbols.charAt(i)]];
-      }
-      return freq;
-    } 
-  }
-  throw new Error("The alphabet index is out of range.");
-};
-// get the colour of the index
-Alphabet.prototype.get_colour = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return "black";
-  }
-  return "#" + this.symbols[alph_index].colour;
-};
-// get the rgb componets of the colour at the index
-Alphabet.prototype.get_rgb = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return {"red": 0, "green": 0, "blue": 0};
-  }
-  var colour = this.symbols[alph_index].colour;
-  var red = parseInt(colour.substr(0, 2), 16) / 255;
-  var green = parseInt(colour.substr(2, 2), 16) / 255;
-  var blue = parseInt(colour.substr(4, 2), 16) / 255;
-  return {"red": red, "green": green, "blue": blue};
-};
-// convert a symbol into the index
-Alphabet.prototype.get_index = function(letter) {
-  "use strict";
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    return -1;
-  }
-  return alph_index;
-};
-// convert a symbol into the list of core indexes that it equals
-Alphabet.prototype.get_indexes = function(letter) {
-  "use strict";
-  var alph_index, comprise_str, i, comprise_list;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    throw new Error("Unknown letter");
-  }
-  comprise_str = this.symbols[alph_index].equals;
-  comprise_list = [];
-  if (typeof comprise_str == "string") {
-    for (i = 0; i < comprise_str.length; i++) {
-      comprise_list.push(this.encode2core[comprise_str.charAt(i)]);
-    }
-  } else {
-    comprise_list.push(alph_index);
-  }
-  return comprise_list;
-};
-// check if a symbol is the primary way of representing the symbol in the alphabet
-Alphabet.prototype.is_prime_symbol = function(letter) {
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (alph_index == null) return false;
-  if (this.is_case_insensitive()) {
-    return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase());
-  } else {
-    return (this.symbols[alph_index].symbol == letter);
-  }
-};
-// compare 2 alphabets
-Alphabet.prototype.equals = function(other) {
-  "use strict";
-  var i, sym1, sym2;
-  // first check that it's actually an alphabet object
-  if (!(typeof other === "object" && other != null && other instanceof Alphabet)) {
-    return false;
-  }
-  // second shortcircuit if it's the same object
-  if (this === other) return true;
-  // compare
-  if (this.name !== other.name) return false;
-  if (this.ncore !== other.ncore) return false;
-  if (this.symbols.length !== other.symbols.length) return false;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym1 = this.symbols[i];
-    sym2 = other.symbols[i];
-    if (sym1.symbol !== sym2.symbol) return false;
-    if (sym1.aliases !== sym2.aliases) return false;
-    if (sym1.name !== sym2.name) return false;
-    if (typeof sym1.colour !== typeof sym2.colour || 
-        (typeof sym1.colour === "string" && typeof sym2.colour === "string" &&
-         parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) {
-      return false;
-    }
-    if (sym1.complement !== sym2.complement) return false;
-    if (sym1.equals !== sym2.equals) return false;
-  }
-  return true;
-};
-Alphabet.prototype.check_core_subset = function(super_alph) {
-  var complement_same = true;
-  var seen_set = {};
-  var sub_i, sub_symbol, super_i, super_symbol;
-  for (sub_i = 0; sub_i < this.ncore; sub_i++) {
-    sub_symbol = this.symbols[sub_i];
-    super_i = super_alph.encode[sub_symbol.symbol]; 
-    if (super_i == null) return 0;
-    super_symbol = super_alph.symbols[super_i];
-    if (seen_set[super_i]) return 0;
-    seen_set[super_i] = true;
-    // check complement
-    if (sub_symbol.complement != null && super_symbol.complement != null) {
-      if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) {
-        complement_same = false;
-      }
-    } else if (sub_symbol.complement != null || super_symbol.complement != null) {
-      complement_same = false;
-    }
-  }
-  return (complement_same ? 1 : -1);
-};
-// convert a sequence to its reverse complement
-Alphabet.prototype.invcomp_seq = function(seq) {
-  "use strict";
-  var syms, i, e_sym, comp_e_sym;
-  if (!this.has_complement()) throw new Error("Alphabet must be complementable");
-  syms = seq.split("");
-  for (i = 0; i < syms.length; i++) {
-    e_sym = this.encode[syms[i]];
-    if (typeof e_sym === "undefined") {
-      e_sym = this.ncore; // wildcard
-    }
-    comp_e_sym = this.complement[e_sym];
-    if (typeof comp_e_sym === "undefined") {
-      comp_e_sym = e_sym; // not complementable
-    }
-    syms[i] = this.symbols[comp_e_sym].symbol;
-  }
-  return syms.reverse().join("");
-};
-// convert the alphabet to the text version
-Alphabet.prototype.as_text = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  function symbol_as_text(sym) {
-    var out;
-    out = sym.symbol;
-    if (typeof sym.name === "string" && sym.name != sym.symbol) {
-      out += " " + name_as_text(sym.name);
-    }
-    if (typeof sym.colour === "string") {
-      out += " " + sym.colour;
-    }
-    return out;
-  }
-  var out, i, j, c, sym;
-  out = "";
-  // output core symbols with 2 way complements
-  for (i = 0; i < this.ncore; i++) {
-    c = this.complement[i];
-    if (typeof c === "number" && i < c && this.complement[c] === i) {
-      out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n";  
-    }
-  }
-  // output core symbols with no complement
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.complement[i] === "undefined") {
-      out += symbol_as_text(this.symbols[i]) + "\n";
-    }
-  }
-  // output ambiguous symbols that have comprising characters
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    if (this.symbols[i].equals.length == 0) break;
-    out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n";
-      }
-    }
-  }
-  // output aliases of core symbols
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n";
-      }
-    }
-  }
-  // output gap symbols
-  i = this.symbols.length - 1;
-  if (this.symbols[i].equals.length == 0) {
-    out += symbol_as_text(this.symbols[i]) + " =\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " =\n";
-      }
-    }
-  }
-  return out;
-};
-// output the alphabet as it appears in minimal MEME format
-Alphabet.prototype.as_meme = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  if (this.equals(AlphStd.DNA)) {
-    return "ALPHABET= ACGT\n";
-  } else if (this.equals(AlphStd.PROTEIN)) {
-    return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n";
-  } else {
-    return "ALPHABET" + 
-      (this.name != null ? " " + name_as_text(this.name) : "") + 
-      (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" +
-      this.as_text() + "END ALPHABET\n";
-  }
-};
-
-// Returns a table showing all the letters in the alphabet
-Alphabet.prototype.as_table = function() {
-  "use strict";
-  var i, j, row, th, td, aliases, equals, sym;
-  var table = document.createElement("table");
-  // create the core symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  if (this.has_complement()) {
-    th.appendChild(document.createTextNode("Complement"));
-  }
-  row.appendChild(th);
-  // list the core symbols
-  for (i = 0; i < this.ncore; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].complement != null) {
-      td.style.color = this.get_colour(this.get_index(this.symbols[i].complement));
-      td.appendChild(document.createTextNode(this.symbols[i].complement));
-    }
-    row.appendChild(td);
-  }
-  // create the ambiguous symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Matches"));
-  row.appendChild(th);
-  // list the ambiguous symbols
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    equals = this.symbols[i].equals.split('');
-    for (j = 0; j < equals.length; j++) {
-      if (j != 0) td.appendChild(document.createTextNode(' '));
-      sym = document.createElement("span");
-      sym.style.color = this.get_colour(this.get_index(equals[j]));
-      sym.appendChild(document.createTextNode(equals[j]));
-      td.appendChild(sym);
-    }
-    row.appendChild(td);
-  }
-  return table;
-};
-
-// returns a dictionary of the colours for EPS
-Alphabet.prototype._as_eps_dict = function() {
-  "use strict";
-  var i, sym, rgb;
-  var out = "/fullColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = this.get_rgb(i);
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  out += "/mutedColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = Alphabet.lighten_colour(this.get_rgb(i));
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  return out;
-};
-
-// return the alphabet name or a list of primary symbols
-Alphabet.prototype.toString = function() {
-  "use strict";
-  if (this.name != null) {
-    return this.name;
-  } else {
-    return this.get_symbols();
-  }
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Helper functions
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-// Convert a colour specified in RGB colourspace values into LAB colourspace
-Alphabet.rgb2lab = function(rgb) {
-  "use strict";
-  var xyzHelper, labHelper;
-  // XYZ helper
-  xyzHelper = function(value) {
-    if (value > 0.0445) {
-      value = (value + 0.055) / 1.055;
-      value = Math.pow(value, 2.4);
-    } else {
-      value /= 12.92;
-    }
-    value *= 100;
-    return value;
-  };
-  // lab helper
-  labHelper = function(value) {
-    if (value > 0.008856) {
-      value = Math.pow(value, 1.0 / 3.0);
-    } else {
-      value = (7.787 * value) + (16.0 / 116.0);
-    }
-    return value;
-  };
-  // convert into XYZ colourspace
-  var c1, c2, c3;
-  if (typeof rgb == "number") {
-    c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0);
-    c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0);
-    c3 = xyzHelper((rgb & 0xFF) / 255.0);
-  } else {
-    c1 = xyzHelper(rgb.red);
-    c2 = xyzHelper(rgb.green);
-    c3 = xyzHelper(rgb.blue);
-  }
-  var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805);
-  var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722);
-  var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505);
-  // convert into Lab colourspace
-  c1 = labHelper(x / 95.047);
-  c2 = labHelper(y / 100.0);
-  c3 = labHelper(z / 108.883);
-  var l = (116.0 * c2) - 16;
-  var a = 500.0 * (c1 - c2);
-  var b = 200.0 * (c2 - c3);
-  return {"l": l, "a": a, "b": b};
-};
-
-// Convert a colour specified in HSV colourspace into RGB colourspace
-Alphabet.hsv2rgb = function(hue, sat, value, output_object) {
-  // achromatic (grey)
-  var r = value;
-  var g = value;
-  var b = value;
-  if (sat != 0) {
-    var h = hue / 60.0;
-    var i = Math.floor(h);
-    var f = h - i;
-    var p = value * (1.0 - sat);
-    var q = value * (1.0 - (sat * f));
-    var t = value * (1.0 - (sat * (1.0 - f)));
-    if (i == 0) {
-      r = value;
-      g = t;
-      b = p;
-    } else if (i == 1) {
-      r = q;
-      g = value;
-      b = p;
-    } else if (i == 2) {
-      r = p;
-      g = value;
-      b = t;
-    } else if (i == 3) {
-      r = p;
-      g = q;
-      b = value;
-    } else if (i == 4) {
-      r = t;
-      g = p;
-      b = value;
-    } else {
-      r = value;
-      g = p;
-      b = q;
-    }
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-// Calculate a distance score between two colours in LAB colourspace
-Alphabet.lab_dist = function(lab1, lab2) {
-  var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a));
-  var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a));
-  var dc = c1 - c2;
-  var dl = lab1.l - lab2.l;
-  var da = lab1.a - lab2.a;
-  var db = lab1.b - lab2.b;
-  // we don't want NaN due to rounding errors so fudge things a bit...
-  var dh = 0;
-  var dh_squared = (da * da) + (db * db) - (dc * dc);
-  if (dh_squared > 0) {
-    dh = Math.sqrt(dh_squared);
-  }
-  var first = dl;
-  var second = dc / (1.0 + (0.045 * c1));
-  var third = dh / (1.0 + (0.015 * c1));
-  return Math.sqrt((first * first) + (second * second) + (third * third));
-};
-
-// convert an RGB value into a HSL value
-Alphabet.rgb2hsl = function(rgb) {
-  "use strict";
-  var min, max, delta, h, s, l, r, g, b;
-  if (typeof rgb == "number") {
-    r = ((rgb >> 16) & 0xFF) / 255.0;
-    g = ((rgb >> 8) & 0xFF) / 255.0;
-    b = (rgb & 0xFF) / 255.0;
-  } else {
-    r = rgb.red;
-    g = rgb.green;
-    b = rgb.blue;
-  }
-  min = Math.min(r, g, b);
-  max = Math.max(r, g, b);
-  delta = max - min;
-  l = min + (delta / 2);
-  if (max == min) {
-    h = 0; // achromatic (grayscale)
-    s = 0;
-  } else {
-    if (l > 0.5) {
-      s = delta / (2 - max - min);
-    } else {
-      s = delta / (max + min);
-    }
-    if (max == r) {
-      h = (g - b) / delta;
-      if (g < b) h += 6;
-    } else if (max == g) {
-      h = ((b - r) / delta) + 2;
-    } else {
-      h = ((r - g) / delta) + 4;
-    }
-    h /= 6;
-  }
-  return {"h": h, "s": s, "l": l};
-};
-
-// convert a HSL value into an RGB value
-Alphabet.hsl2rgb = function(hsl, output_object) {
-  "use strict";
-  function _hue(p, q, t) {
-    "use strict";
-    if (t < 0) t += 1;
-    else if (t > 1) t -= 1;
-    if (t < (1.0 / 6.0)) {
-      return p + ((q - p) * 6.0 * t);
-    } else if (t < 0.5) {
-      return q;
-    } else if (t < (2.0 / 3.0)) {
-      return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0);
-    } else {
-      return p;
-    }
-  }
-  var r, g, b, p, q;
-  if (hsl.s == 0) {
-    // achromatic (grayscale)
-    r = hsl.l;
-    g = hsl.l;
-    b = hsl.l;
-  } else {
-    if (hsl.l < 0.5) {
-      q = hsl.l * (1 + hsl.s);
-    } else {
-      q = hsl.l + hsl.s - (hsl.l * hsl.s);
-    }
-    p = (2 * hsl.l) - q;
-    r = _hue(p, q, hsl.h + (1.0 / 3.0));
-    g = _hue(p, q, hsl.h);
-    b = _hue(p, q, hsl.h - (1.0 / 3.0));
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-Alphabet.lighten_colour = function(rgb) {
-  "use strict";
-  var hsl = Alphabet.rgb2hsl(rgb);
-  hsl.l += (1.0 - hsl.l) * 2 / 3;
-  return Alphabet.hsl2rgb(hsl, typeof rgb != "number");
-};
-
-//======================================================================
-// end Alphabet object
-//======================================================================
-
-//======================================================================
-// start StandardAlphabet object
-//======================================================================
-
-// an extension of the alphabet object to support some additional fields 
-// only present in standard alphabets.
-var StandardAlphabet = function(enum_code, enum_name, alphabet_data) {
-  Alphabet.apply(this, [alphabet_data]);
-  this.enum_code = enum_code;
-  this.enum_name = enum_name;
-};
-StandardAlphabet.prototype = Alphabet.prototype;
-StandardAlphabet.prototype.constructor = StandardAlphabet;
-
-// A unique code for this standard alphabet.
-// This code will be a power of 2 to enable creation of bitsets for
-// a selection of standard alphabets.
-StandardAlphabet.prototype.get_code = function() {
-  return this.enum_code;
-};
-
-// A unique name for this standard alphabet.
-// this name will be all upper case and the same as the property that
-// refers to this alphabet in the AlphStd collection.
-StandardAlphabet.prototype.get_enum = function() {
-  return this.enum_name;
-};
-
-//======================================================================
-// end StandardAlphabet object
-//======================================================================
-
-// A collection of standard alphabets.
-var AlphStd = {
-  RNA: new StandardAlphabet(1, "RNA", {
-    "name": "RNA",
-    "like": "RNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300"},
-      {"symbol": "U", "name": "Uracil", "colour": "008000",
-        "aliases": "T"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."},
-      {"symbol": "V", "name": "Not U", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACU"},
-      {"symbol": "D", "name": "Not C", "equals": "AGU"},
-      {"symbol": "B", "name": "Not A", "equals": "CGU"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AU"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"},
-      {"symbol": "K", "name": "Keto", "equals": "GU"}
-    ]
-  }), 
-  DNA: new StandardAlphabet(2, "DNA", {
-    "name": "DNA",
-    "like": "DNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"},
-      {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A",
-        "aliases": "U"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."},
-      {"symbol": "V", "name": "Not T", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACT"},
-      {"symbol": "D", "name": "Not C", "equals": "AGT"},
-      {"symbol": "B", "name": "Not A", "equals": "CGT"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AT"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"},
-      {"symbol": "K", "name": "Keto", "equals": "GT"}
-    ]
-  }), 
-  PROTEIN: new StandardAlphabet(4, "PROTEIN", {
-    "name": "Protein",
-    "like": "PROTEIN",
-    "ncore": 20,
-    "symbols": [
-      {"symbol": "A", "name": "Alanine", "colour": "0000CC"},
-      {"symbol": "C", "name": "Cysteine", "colour": "0000CC"},
-      {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"},
-      {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"},
-      {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Glycine", "colour": "FFB300"},
-      {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"},
-      {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"},
-      {"symbol": "K", "name": "Lysine", "colour": "CC0000"},
-      {"symbol": "L", "name": "Leucine", "colour": "0000CC"},
-      {"symbol": "M", "name": "Methionine", "colour": "0000CC"},
-      {"symbol": "N", "name": "Asparagine", "colour": "008000"},
-      {"symbol": "P", "name": "Proline", "colour": "FFFF00"},
-      {"symbol": "Q", "name": "Glutamine", "colour": "008000"},
-      {"symbol": "R", "name": "Arginine", "colour": "CC0000"},
-      {"symbol": "S", "name": "Serine", "colour": "008000"},
-      {"symbol": "T", "name": "Threonine", "colour": "008000"},
-      {"symbol": "V", "name": "Valine", "colour": "0000CC"},
-      {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"},
-      {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"},
-      {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."},
-      {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, 
-      {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, 
-      {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"}
-    ]
-  })
-};
-
-//======================================================================
-// start Symbol object
-//======================================================================
-var Symbol = function(alph_index, scale, alphabet) {
-  "use strict";
-  //variable prototype
-  this.symbol = alphabet.get_symbol(alph_index);
-  this.scale = scale;
-  this.colour = alphabet.get_colour(alph_index);
-};
-
-Symbol.prototype.get_symbol = function() {
-  "use strict";
-  return this.symbol;
-};
-
-Symbol.prototype.get_scale = function() {
-  "use strict";
-  return this.scale;
-};
-
-Symbol.prototype.get_colour = function() {
-  "use strict";
-  return this.colour;
-};
-
-Symbol.prototype.toString = function() {
-  "use strict";
-  return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%";
-};
-
-function compare_symbol(sym1, sym2) {
-  "use strict";
-  if (sym1.get_scale() < sym2.get_scale()) {
-    return -1;
-  } else if (sym1.get_scale() > sym2.get_scale()) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-//======================================================================
-// end Symbol object
-//======================================================================
-
-//======================================================================
-// start Pspm object
-//======================================================================
-var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) {
-  "use strict";
-  var row, col, data, row_sum, delta, evalue_re;
-  if (typeof name !== "string") {
-    name = "";
-  }
-  this.name = name;
-  //construct
-  if (matrix instanceof Pspm) {
-    // copy constructor
-    this.alph_length = matrix.alph_length;
-    this.motif_length = matrix.motif_length;
-    this.name = matrix.name;
-    this.alt = matrix.alt;
-    this.nsites = matrix.nsites;
-    this.evalue = matrix.evalue;
-    this.ltrim = matrix.ltrim;
-    this.rtrim = matrix.rtrim;
-    this.pspm = [];
-    for (row = 0; row < matrix.motif_length; row++) {
-      this.pspm[row] = [];
-      for (col = 0; col < matrix.alph_length; col++) {
-        this.pspm[row][col] = matrix.pspm[row][col];
-      }
-    }
-    if (matrix.pssm != null) {
-      this.pssm = [];
-      for (row = 0; row < matrix.motif_length; row++) {
-        this.pspm[row] = [];
-        for (col = 0; col < matrix.alph_length; col++) {
-          this.pssm[row][col] = matrix.pssm[row][col];
-        }
-      }
-    }
-  } else {
-    // check parameters
-    if (ltrim == null) {
-      ltrim = 0;
-    } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) {
-      throw new Error("ltrim must be a non-negative integer, got: " + ltrim);
-    }
-    if (rtrim == null) {
-      rtrim = 0;
-    } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) {
-      throw new Error("rtrim must be a non-negative integer, got: " + rtrim);
-    }
-    if (nsites != null) {
-      if (typeof nsites !== "number" || nsites < 0) {
-        throw new Error("nsites must be a positive number, got: " + nsites);
-      } else if (nsites == 0) {
-        nsites = null;
-      }
-    }
-    if (evalue != null) {
-      if (typeof evalue === "number") {
-        if (evalue < 0) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else if (typeof evalue === "string") {
-        evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-        if (!evalue_re.test(evalue)) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else {
-        throw new Error("evalue must be a non-negative number, got: " + evalue);
-      }
-    }
-    // set properties
-    this.name = name;
-    this.alt = alt;
-    this.nsites = nsites;
-    this.evalue = evalue;
-    this.ltrim = ltrim;
-    this.rtrim = rtrim;
-    if (typeof matrix === "string") {
-      // string constructor
-      data = parse_pspm_string(matrix);
-      this.alph_length = data["alph_length"];
-      this.motif_length = data["motif_length"];
-      this.pspm = data["pspm"];
-      if (this.evalue == null) {
-        if (data["evalue"] != null) {
-          this.evalue = data["evalue"];
-        } else {
-          this.evalue = 0;
-        }
-      }
-      if (this.nsites == null) {
-        if (typeof data["nsites"] === "number") {
-          this.nsites = data["nsites"];
-        } else {
-          this.nsites = 20;
-        }
-      }
-    } else {
-      // assume pspm is a nested array
-      this.motif_length = matrix.length;
-      this.alph_length = (matrix.length > 0 ? matrix[0].length : 0);
-      if (this.nsites == null) {
-        this.nsites = 20;
-      }
-      if (this.evalue == null) {
-        this.evalue = 0;
-      }
-      this.pspm = [];
-      // copy pspm and check
-      for (row = 0; row < this.motif_length; row++) {
-        if (this.alph_length != matrix[row].length) {
-          throw new Error("COLUMN_MISMATCH");
-        }
-        this.pspm[row] = [];
-        row_sum = 0;
-        for (col = 0; col < this.alph_length; col++) {
-          this.pspm[row][col] = matrix[row][col];
-          row_sum += this.pspm[row][col];
-        }
-        delta = 0.1;
-        if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || 
-            (row_sum < 1 && (1 - row_sum) > delta)) {
-          throw new Error("INVALID_SUM");
-        }
-      }
-      // copy pssm
-      if (pssm != null) {
-        this.pssm = [];
-        for (row = 0; row < this.motif_length; row++) {
-          this.pssm[row] = [];
-          for (col = 0; col < this.alph_length; col++) {
-            this.pssm[row][col] = pssm[row][col];
-          }
-        }
-      }
-    }
-  }
-};
-
-Pspm.prototype.copy = function() {
-  "use strict";
-  return new Pspm(this);
-};
-
-Pspm.prototype.reverse = function() {
-  "use strict";
-  var x, y, temp, temp_trim;
-  //reverse
-  x = 0;
-  y = this.motif_length-1;
-  while (x < y) {
-    temp = this.pspm[x];
-    this.pspm[x] = this.pspm[y];
-    this.pspm[y] = temp;
-    x++;
-    y--;
-  }
-  // reverse pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //reverse
-    x = 0;
-    y = this.motif_length-1;
-    while (x < y) {
-      temp = this.pssm[x];
-      this.pspm[x] = this.pssm[y];
-      this.pssm[y] = temp;
-      x++;
-      y--;
-    }
-  }
-  //swap triming
-  temp_trim = this.ltrim;
-  this.ltrim = this.rtrim;
-  this.rtrim = temp_trim;
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.reverse_complement = function(alphabet) {
-  "use strict";
-  var x, y, temp, i, row, c, temp_trim;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  if (!alphabet.has_complement()) {
-    throw new Error("The specified alphabet can not be complemented.");
-  }
-  // reverse motif
-  this.reverse();
-  //complement
-  for (x = 0; x < this.motif_length; x++) {
-    row = this.pspm[x];
-    for (i = 0; i < row.length; i++) {
-      c = alphabet.get_complement(i);
-      if (c < i) continue;
-      temp = row[i];
-      row[i] = row[c];
-      row[c] = temp;
-    }
-  }
-  // complement pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //complement
-    for (x = 0; x < this.motif_length; x++) {
-      row = this.pssm[x];
-      for (i = 0; i < row.length; i++) {
-        c = alphabet.get_complement(i);
-        if (c < i) continue;
-        temp = row[i];
-        row[i] = row[c];
-        row[c] = temp;
-      }
-    }
-  }
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.get_stack = function(position, alphabet, ssc) {
-  "use strict";
-  var row, stack_ic, alphabet_ic, stack, i, sym;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  row = this.pspm[position];
-  stack_ic = this.get_stack_ic(position, alphabet);
-  if (ssc) stack_ic -= this.get_error(alphabet);
-  alphabet_ic = alphabet.get_ic();
-  stack = [];
-  for (i = 0; i < this.alph_length; i++) {
-    sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet);
-    if (sym.get_scale() <= 0) {
-      continue;
-    }
-    stack.push(sym);
-  }
-  stack.sort(compare_symbol);
-  return stack;
-};
-
-Pspm.prototype.get_stack_ic = function(position, alphabet) {
-  "use strict";
-  var row, H, i;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size fo the pspm.");
-  }
-  row = this.pspm[position];
-  H = 0;
-  for (i = 0; i < this.alph_length; i++) {
-    if (row[i] === 0) {
-      continue;
-    }
-    H -= (row[i] * (Math.log(row[i]) / Math.LN2));
-  }
-  return alphabet.get_ic() - H;
-};
-
-Pspm.prototype.get_error = function(alphabet) {
-  "use strict";
-  if (this.nsites === 0) {
-    return 0;
-  }
-  return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites);
-};
-
-Pspm.prototype.get_motif_length = function() {
-  "use strict";
-  return this.motif_length;
-};
-
-Pspm.prototype.get_alph_length = function() {
-  "use strict";
-  return this.alph_length;
-};
-
-Pspm.prototype.get_left_trim = function() {
-  "use strict";
-  return this.ltrim;
-};
-
-Pspm.prototype.get_right_trim = function() {
-  "use strict";
-  return this.rtrim;
-};
-
-Pspm.prototype.as_best_match = function(alphabet) {
-  "use strict";
-  var match, odds, best_odds, best_index;
-  var i, j;
-  match = "";
-  for (i = 0; i < this.motif_length; i++) {
-    best_index = 0;
-    best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0);
-    for (j = 1; j < this.alph_length; j++) {
-      odds = this.pspm[i][j] / alphabet.get_bg_freq(j);
-      if (odds > best_odds) {
-        best_odds = odds;
-        best_index = j;
-      }
-    }
-    match += alphabet.get_symbol(best_index);
-  }
-  return match;
-};
-
-Pspm.prototype.as_count_matrix = function() {
-  "use strict";
-  var count, count_text, text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      count = Math.round(this.nsites * this.pspm[i][j]);
-      count_text = "" + count;
-      // pad up to length of 4
-      if (count_text.length < 4) {
-        text += (new Array(5 - count_text.length)).join(" ") + count_text;
-      } else {
-        text += count_text;
-      }
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_probability_matrix = function() {
-  "use strict";
-  var text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      text += this.pspm[i][j].toFixed(6);
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_score_matrix = function(alphabet, pseudo) {
-  "use strict";
-  var me, score, out, row, col, score_text;
-  me = this;
-  if (typeof this.pssm === "undefined") {
-    if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) {
-      throw new Error("The alphabet is required to generate the pssm.");
-    }
-    if (typeof pseudo === "undefined") {
-      pseudo = 0.01;
-    } else if (typeof pseudo !== "number" || pseudo < 0) {
-      throw new Error("Expected positive number for pseudocount");
-    }
-    score = function(row, col) {
-      "use strict";
-      var p, bg, p2;
-      p = me.pspm[row][col];
-      bg = alphabet.get_bg_freq(col);
-      p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo);
-      return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000);
-    };
-  } else {
-    score = function(row, col) {
-      "use strict";
-      return me.pssm[row][col];
-    };
-  }
-  out = "";
-  for (row = 0; row < this.motif_length; row++) {
-    for (col = 0; col < this.alph_length; col++) {
-      if (col !== 0) {
-        out += " ";
-      }
-      score_text = "" + score(row, col);
-      // pad out to 6 characters
-      if (score_text.length < 6) {
-        out += (new Array(7 - score_text.length)).join(" ") + score_text;
-      } else {
-        out += score_text;
-      }
-    }
-    out += "\n";
-  }
-  return out;
-}
-
-Pspm.prototype.as_pspm = function() {
-  "use strict";
-  return "letter-probability matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + " nsites= " + this.nsites + 
-      " E= " + (typeof this.evalue === "number" ? 
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_probability_matrix();
-};
-
-Pspm.prototype.as_pssm = function(alphabet, pseudo) {
-  "use strict";
-  return "log-odds matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + 
-      " E= " + (typeof this.evalue == "number" ?
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_score_matrix(alphabet, pseudo);
-};
-
-Pspm.prototype.as_meme = function(options) {
-  var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands;
-  var out, alen, i;
-  // get the options
-  if (typeof options !== "object" || options === null) {
-    options = {};
-  }
-  with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false);
-  with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false);
-  with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false);
-  if (!with_pspm && !with_pssm) with_pspm = true;
-  if (with_header) {
-    if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) {
-      version = options["version"];
-    } else if (typeof options["version"] === "number") {
-      version = options["version"].toFixed(0);
-    } else {
-      version = "4";
-    }
-    if (typeof options["strands"] === "number" && options["strands"] === 1) {
-      strands = 1;
-    } else {
-      strands = 2;
-    }
-    if (typeof options["bg_source"] === "string") {
-      bg_source = options["bg_source"];
-    } else {
-      bg_source = "unknown source";
-    }
-    if (typeof options["alphabet"] === "object" && options["alphabet"] != null
-        && options["alphabet"] instanceof Alphabet) {
-      alphabet = options["alphabet"];
-    } else {
-      throw new Error("The alphabet is required to generate the header.");
-    }
-  }
-  // now create the output
-  out = "";
-  if (with_header) {
-    out = "MEME version " + version + "\n\n";
-    out += alphabet.as_meme() + "\n";
-    if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified
-      out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n";
-    }
-    out += "Background letter frequencies (from " + bg_source + "):\n";
-    alen = alphabet.get_size_core();
-    for (i = 0; i < alen; i++) {
-      if (i !== 0) {
-        if (i % 9 === 0) { // maximum of nine entries per line
-          out += "\n";
-        } else {
-          out += " ";
-        }
-      }
-      out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3);
-    }
-  }
-  out += "\n\n";
-  out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt);
-  if (with_pssm) {
-    out += "\n\n";
-    out += this.as_pssm(options["alphabet"], options["pseudocount"]);
-  }
-  if (with_pspm) {
-    out += "\n\n";
-    out += this.as_pspm();
-  }
-  return out;
-}
-
-Pspm.prototype.toString = function() {
-  "use strict";
-  var str, i, row;
-  str = "";
-  for (i = 0; i < this.pspm.length; i++) {
-    row = this.pspm[i];
-    str += row.join("\t") + "\n";
-  }
-  return str;
-};
-
-function parse_pspm_properties(str) {
-  "use strict";
-  var parts, i, eqpos, before, after, properties, prop, num, num_re;
-  num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-  parts = trim(str).split(/\s+/);
-  // split up words containing =
-  for (i = 0; i < parts.length;) {
-    eqpos = parts[i].indexOf("=");
-    if (eqpos != -1) {
-      before = parts[i].substr(0, eqpos);
-      after = parts[i].substr(eqpos+1);
-      if (before.length > 0 && after.length > 0) {
-        parts.splice(i, 1, before, "=", after);
-        i += 3;
-      } else if (before.length > 0) {
-        parts.splice(i, 1, before, "=");
-        i += 2;
-      } else if (after.length > 0) {
-        parts.splice(i, 1, "=", after);
-        i += 2;
-      } else {
-        parts.splice(i, 1, "=");
-        i++;
-      }
-    } else {
-      i++;
-    }
-  }
-  properties = {};
-  for (i = 0; i < parts.length; i += 3) {
-    if (parts.length - i < 3) {
-      throw new Error("Expected PSPM property was incomplete. "+
-          "Remaing parts are: " + parts.slice(i).join(" "));
-    }
-    if (parts[i+1] !== "=") {
-      throw new Error("Expected '=' in PSPM property between key and " +
-          "value but got " + parts[i+1]); 
-    }
-    prop = parts[i].toLowerCase();
-    num = parts[i+2];
-    if (!num_re.test(num)) {
-      throw new Error("Expected numeric value for PSPM property '" + 
-          prop + "' but got '" + num + "'");
-    }
-    properties[prop] = num;
-  }
-  return properties;
-}
-
-function parse_pspm_string(pspm_string) {
-  "use strict";
-  var header_re, lines, first_line, line_num, col_num, alph_length, 
-      motif_length, nsites, evalue, pspm, i, line, match, props, parts,
-      j, prob;
-  header_re = /^letter-probability\s+matrix:(.*)$/i;
-  lines = pspm_string.split(/\n/);
-  first_line = true;
-  line_num = 0;
-  col_num = 0;
-  alph_length;
-  motif_length;
-  nsites;
-  evalue;
-  pspm = [];
-  for (i = 0; i < lines.length; i++) {
-    line = trim(lines[i]);
-    if (line.length === 0) { 
-      continue;
-    }
-    // check the first line for a header though allow matrices without it
-    if (first_line) {
-      first_line = false;
-      match = header_re.exec(line);
-      if (match !== null) {
-        props = parse_pspm_properties(match[1]);
-        if (props.hasOwnProperty("alength")) {
-          alph_length = parseFloat(props["alength"]);
-          if (alph_length != 4 && alph_length != 20) {
-            throw new Error("PSPM property alength should be 4 or 20" +
-                " but got " + alph_length);
-          }
-        }
-        if (props.hasOwnProperty("w")) {
-          motif_length = parseFloat(props["w"]);
-          if (motif_length % 1 !== 0 || motif_length < 1) {
-            throw new Error("PSPM property w should be an integer larger " +
-                "than zero but got " + motif_length);
-          }
-        }
-        if (props.hasOwnProperty("nsites")) {
-          nsites = parseFloat(props["nsites"]);
-          if (nsites <= 0) {
-            throw new Error("PSPM property nsites should be larger than " +
-                "zero but got " + nsites);
-          }
-        }
-        if (props.hasOwnProperty("e")) {
-          evalue = props["e"];
-          if (evalue < 0) {
-            throw new Error("PSPM property evalue should be " +
-                "non-negative but got " + evalue);
-          }
-        }
-        continue;
-      }
-    }
-    pspm[line_num] = [];
-    col_num = 0;
-    parts = line.split(/\s+/);
-    for (j = 0; j < parts.length; j++) {
-      prob = parseFloat(parts[j]);
-      if (prob != parts[j] || prob < 0 || prob > 1) {
-        throw new Error("Expected probability but got '" + parts[j] + "'"); 
-      }
-      pspm[line_num][col_num] = prob;
-      col_num++;
-    }
-    line_num++;
-  }
-  if (typeof motif_length === "number") {
-    if (pspm.length != motif_length) {
-      throw new Error("Expected PSPM to have a motif length of " + 
-          motif_length + " but it was actually " + pspm.length);
-    }
-  } else {
-    motif_length = pspm.length;
-  }
-  if (typeof alph_length !== "number") {
-    alph_length = pspm[0].length;
-    if (alph_length != 4 && alph_length != 20) {
-      throw new Error("Expected length of first row in the PSPM to be " +
-          "either 4 or 20 but got " + alph_length);
-    }
-  }
-  for (i = 0; i < pspm.length; i++) {
-    if (pspm[i].length != alph_length) {
-      throw new Error("Expected PSPM row " + i + " to have a length of " + 
-          alph_length + " but the length was " + pspm[i].length);
-    }
-  }
-  return {"pspm": pspm, "motif_length": motif_length, 
-    "alph_length": alph_length, "nsites": nsites, "evalue": evalue};
-}
-//======================================================================
-// end Pspm object
-//======================================================================
-
-//======================================================================
-// start Logo object
-//======================================================================
-
-var Logo = function(alphabet, options) {
-  "use strict";
-  this.alphabet = alphabet;
-  this.fine_text = "";
-  this.x_axis = 1;
-  this.y_axis = true;
-  this.xlate_nsyms = 1;
-  this.xlate_start = null;
-  this.xlate_end = null;
-  this.pspm_list = [];
-  this.pspm_column = [];
-  this.rows = 0;
-  this.columns = 0;
-  if (typeof options === "string") {
-    // the old method signature had fine_text here so we support that
-    this.fine_text = options;
-  } else if (typeof options === "object" && options != null) {
-    this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : "");
-    this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1);
-    if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1;
-    this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true);
-    this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms);
-    this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start);
-    this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end);
-  }
-};
-
-Logo.prototype.add_pspm = function(pspm, column) {
-  "use strict";
-  var col;
-  if (typeof column === "undefined") {
-    column = 0;
-  } else if (column < 0) {
-    throw new Error("Column index out of bounds.");
-  }
-  this.pspm_list[this.rows] = pspm;
-  this.pspm_column[this.rows] = column;
-  this.rows++;
-  col = column + pspm.get_motif_length();
-  if (col > this.columns) {
-    this.columns = col;
-  }
-};
-
-Logo.prototype.get_columns = function() {
-  "use strict";
-  return this.columns;
-};
-
-Logo.prototype.get_xlate_nsyms = function() {
-  "use strict";
-  return this.xlate_nsyms;
-};
-
-Logo.prototype.get_xlate_start = function() {
-  "use strict";
-  return (this.xlate_start != null ? this.xlate_start : 0);
-};
-
-Logo.prototype.get_xlate_end = function() {
-  "use strict";
-  return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms);
-};
-
-Logo.prototype.get_xlate_columns = function() {
-  "use strict";
-  return this.get_xlate_end() - this.get_xlate_start();
-};
-
-Logo.prototype.get_rows = function() {
-  "use strict";
-  return this.rows;
-};
-
-Logo.prototype.get_pspm = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_list[row_index];
-};
-
-Logo.prototype.get_offset = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_column[row_index];
-};
-
-Logo.prototype._as_eps_data = function(ssc, errbars) {
-  var i, j, pos, stack_pos, pspm, stack, sym, out;
-  out = "";
-  for (i = 0; i < this.rows; i++) {
-    out += "\nStartLine\n";
-    // Indent
-    for (j = 0; j < this.pspm_column[i]; j++) {
-      out += "() startstack\nendstack\n\n";
-    }
-    pspm = this.pspm_list[i];
-    if (pspm.get_left_trim() > 0) {
-      out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n";
-    }
-    for (pos = 0; pos < pspm.get_motif_length(); pos++) {
-      if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour
-        out += "DrawTrimEdge\nRestoreColour\n";
-      } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) {
-        out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n";
-      }
-      out += "(" + (pos + 1) + ") startstack\n";
-      stack = pspm.get_stack(pos, this.alphabet, ssc);
-      for (stack_pos = 0; stack_pos < stack.length; stack_pos++) {
-        sym = stack[stack_pos];
-        out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n";
-      }
-      if (errbars) {
-        out += " " + pspm.get_error(this.alphabet) + " Ibeam\n";
-      }
-      out += "endstack\n\n";
-    }
-    if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) {
-      out += "RestoreColour\n";
-    }
-    out += "EndLine\n";
-  }
-  return out;
-};
-
-Logo.prototype.as_eps = function(options) {
-  "use strict";
-  if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS");
-  if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS");
-  if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS");
-
-  var LOGOHEIGHT = 7.5; // default height of line in cm
-  var cm2pts, height, width, now, ssc, errbars;
-  if (typeof options === "undefined") {
-    options = {};
-  }
-  cm2pts = 72 / 2.54;
-  if (typeof options.logo_height == "number") {
-    height = options.logo_height;
-  } else {
-    height = LOGOHEIGHT * this.rows;
-  }
-  if (typeof options.logo_width == "number") {
-    width = options.logo_width;
-  } else {
-    width = this.columns + 2;
-  }
-  now = new Date();
-  ssc = (typeof options.ssc == "boolean" ? options.ssc : false);
-  errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc);
-  var values = {
-    "LOGOHEIGHT": height,
-    "LOGOWIDTH": width,
-    "BOUNDINGHEIGHT": Math.round(height * cm2pts),
-    "BOUNDINGWIDTH": Math.round(width * cm2pts),
-    "LOGOLINEHEIGHT": (height / this.rows),
-    "CHARSPERLINE": this.columns,
-    "BARBITS": this.alphabet.get_ic(),
-    "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"),
-    "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(),
-    "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0),
-    "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0),
-    "TITLE": (typeof options.title == "string" ? options.title : ""),
-    "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text),
-    "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""),
-    "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"),
-    "SSC": ssc,
-    "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis),
-    "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false),
-    "ERRBAR": errbars,
-    "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false),
-    "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0),
-    "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false),
-    "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"),
-    "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12),
-    "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12),
-    "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6),
-    "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9),
-    "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9),
-    "COLORDICT": this.alphabet._as_eps_dict(),
-    "DATA": this._as_eps_data(ssc, errbars)
-  };
-  // now this requires that the script containing the template has been imported!
-  return motif_logo_template(values);
-};
-
-//======================================================================
-// end Logo object
-//======================================================================
-
-// calculate the exact size (in pixels) of an object drawn on the
-// canvas assuming that the background of the canvas is transparent.
-function canvas_bounds(ctx, cwidth, cheight) {
-  "use strict";
-  var data, r, c, top_line, bottom_line, left_line, right_line, 
-      txt_width, txt_height;
-
-  // extract the image data
-  data = ctx.getImageData(0, 0, cwidth, cheight).data;
-
-  // set initial values
-  top_line = -1; bottom_line = -1; left_line = -1; right_line = -1;
-  txt_width = 0; txt_height = 0;
-
-  // Find the top-most line with a non-transparent pixel
-  for (r = 0; r < cheight; r++) {
-    for (c = 0; c < cwidth; c++) {
-      if (data[r * cwidth * 4 + c * 4 + 3]) {
-        top_line = r;
-        break;
-      }
-    }
-    if (top_line != -1) {
-      break;
-    }
-  }
-  
-  // Only bother looking if we found at least one set pixel... 
-  if (top_line != -1) {
-
-    //find the last line with a non-transparent pixel
-    for (r = cheight-1; r >= top_line; r--) {
-      for(c = 0; c < cwidth; c++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          bottom_line = r;
-          break;
-        }
-      }
-      if (bottom_line != -1) {
-        break;
-      }
-    }
-    // calculate height
-    txt_height = bottom_line - top_line + 1;
-
-    // Find the left-most line with a non-transparent pixel
-    for (c = 0; c < cwidth; c++) {
-      for (r = top_line; r <= bottom_line; r++) {
-        if (data[r * cwidth * 4 + c * 4 + 3]) {
-          left_line = c;
-          break;
-        }
-      }
-      if (left_line != -1) {
-        break;
-      }
-    }
-
-    //find the right most line with a non-transparent pixel
-    for (c = cwidth-1; c >= left_line; c--) {
-      for(r = top_line; r <= bottom_line; r++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          right_line = c;
-          break;
-        }
-      }
-      if (right_line != -1) {
-        break;
-      }
-    }
-    txt_width = right_line - left_line + 1;
-  }
-
-  //return the bounds
-  return {bound_top: top_line, bound_bottom: bottom_line, 
-    bound_left: left_line, bound_right: right_line, width: txt_width, 
-    height: txt_height};
-}
-
-//======================================================================
-// start RasterizedAlphabet
-//======================================================================
-
-// Rasterize Alphabet
-// 1) Measure width of text at default font for all symbols in alphabet
-// 2) sort in width ascending
-// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I')
-// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob).
-// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font
-// 6) Draw text onto temp canvas at calculated scale
-// 7) Find bounds of drawn text
-// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger).
-var RasterizedAlphabet = function(alphabet, logo_scale, font, width) {
-  "use strict";
-  var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes,
-      i, sym, size, tenpercent, avg_width, scale, 
-      target_width, target_height;
-  //variable prototypes
-  this.alphabet = alphabet;
-  this.scale = logo_scale;
-  this.sym_cache = {};
-  this.stack_num_cache = [];
-  this.scale_num_cache = [];
-  // size of canvas
-  default_size = 60; // size of measuring canvas
-  safety_pad = 20; // pixels to pad around so we don't miss the edges
-  // create a canvas to do our measuring
-  canvas = document.createElement("canvas");
-  if (!canvas.getContext) throw new Error("No canvas support");
-  canvas.width = default_size + 2 * safety_pad;
-  canvas.height = default_size + 2 * safety_pad;
-  middle = Math.round(canvas.width / 2);
-  baseline = Math.round(canvas.height - safety_pad);
-  ctx = canvas.getContext('2d');
-  if (!supports_text(ctx)) throw new Error("Canvas does not support text");
-  ctx.font = font;
-  ctx.textAlign = "center";
-  ctx.translate(middle, baseline);
-  // list of widths
-  widths = [];
-  sizes = [];
-  //now measure each letter in the alphabet
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    // reset the canvas
-    ctx.clearRect(0, 0, canvas.width, canvas.height);
-    ctx.fillStyle = alphabet.get_colour(i);
-    // draw the test text
-    ctx.fillText(alphabet.get_symbol(i), 0, 0);
-    //measure
-    size = canvas_bounds(ctx, canvas.width, canvas.height);
-    if (size.width === 0) throw new Error("Invisible symbol!");
-    widths.push(size.width);
-    sizes[i] = size;
-  }
-  //sort the widths
-  widths.sort(function(a,b) {return a - b;});
-  //drop 10% of the items off each end
-  tenpercent = Math.floor(widths.length / 10);
-  for (i = 0; i < tenpercent; ++i) {
-    widths.pop();
-    widths.shift();
-  }
-  //calculate average width
-  avg_width = 0;
-  for (i = 0; i < widths.length; ++i) {
-    avg_width += widths[i];
-  }
-  avg_width /= widths.length;
-  // calculate the target width
-  target_width = width * this.scale * 2;
-  // calculate scales
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    sym = alphabet.get_symbol(i);
-    size = sizes[i];
-    // calculate scale
-    scale = target_width / Math.max(avg_width, size.width);
-    // estimate scaled height
-    target_height = size.height * scale;
-    // create an appropriately sized canvas
-    canvas = document.createElement("canvas");
-    canvas.width = target_width;
-    canvas.height = target_height + safety_pad * 2;
-    // calculate the middle
-    middle = Math.round(canvas.width / 2);
-    // calculate the baseline
-    baseline = Math.round(canvas.height - safety_pad);
-    // get the context and prepare to draw the rasterized text
-    ctx = canvas.getContext('2d');
-    ctx.font = font;
-    ctx.fillStyle = alphabet.get_colour(i);
-    ctx.textAlign = "center";
-    ctx.translate(middle, baseline);
-    ctx.save();
-    ctx.scale(scale, scale);
-    // draw the text
-    ctx.fillText(sym, 0, 0);
-    ctx.restore();
-    this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)};
-  }
-};
-
-RasterizedAlphabet.prototype.get_alphabet = function() {
-  return this.alphabet;
-};
-
-RasterizedAlphabet.prototype.get_scale = function() {
-  return this.scale;
-};
-
-RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) {
-  "use strict";
-  var entry, image, size;
-  entry = this.sym_cache[letter];
-  image = entry.image;
-  size = entry.size;
-  ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight);
-};
-
-RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) {
-  var image, image_ctx, text_length;
-  if (index >= this.stack_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.save();
-    image_ctx.font = font;
-    text_length = image_ctx.measureText("" + (index + 1)).width;
-    image_ctx.restore();
-    // resize the canvas to fit
-    image.width = Math.ceil(stack_width);
-    image.height = Math.ceil(text_length);
-    // draw the text
-    image_ctx = image.getContext('2d');
-    image_ctx.translate(Math.round(stack_width / 2), 0);
-    image_ctx.font = font;
-    image_ctx.textBaseline = "middle";
-    image_ctx.textAlign = "right";
-    image_ctx.rotate(-(Math.PI / 2));
-    image_ctx.fillText("" + (index + 1), 0, 0);
-    this.stack_num_cache[index] = image;
-  } else {
-    image = this.stack_num_cache[index];
-  }
-  ctx.drawImage(image, 0, 0);
-}
-
-RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) {
-  var image, image_ctx, text_size, m_length;
-  if (num >= this.scale_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.font = font;
-    text_size = image_ctx.measureText("" + num);
-    if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) {
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent);
-    } else {
-      // measure width of 'm' to approximate height, we double it later anyway
-      m_length = image_ctx.measureText("m").width;
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(2 * m_length);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.textBaseline = "middle";
-      image_ctx.fillText("" + num, image.width, m_length);
-    }
-    this.scale_num_cache[num] = image;
-  } else {
-    image = this.scale_num_cache[num];
-  }
-  ctx.drawImage(image, -image.width, -Math.round(image.height / 2))
-}
-
-//======================================================================
-// end RasterizedAlphabet
-//======================================================================
-
-//======================================================================
-// start LogoMetrics object
-//======================================================================
-
-var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) {
-  "use strict";
-  var i, row_height;
-  //variable prototypes
-  this.pad_top = (has_names ? 5 : 0);
-  this.pad_left = (y_axis ? 10 : 0);
-  this.pad_right = (has_finetext ? 15 : 0);
-  this.pad_bottom = 0;
-  this.pad_middle = 20;
-  this.name_height = 14;
-  this.name_font = "bold " + this.name_height + "px Times, sans-serif";
-  this.name_spacer = 0;
-  this.y_axis = y_axis;
-  this.y_label = "bits";
-  this.y_label_height = 12;
-  this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif";
-  this.y_label_spacer = 3;
-  this.y_num_height = 12;
-  this.y_num_width = 0;
-  this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif";
-  this.y_tic_width = 5;
-  this.stack_pad_left = 0;
-  this.stack_font = "bold 25px Helvetica, sans-serif";
-  this.stack_height = 90;
-  this.stack_width = 26;
-  this.stacks_pad_right = 5;
-  this.x_axis = x_axis;
-  this.x_num_above = 2;
-  this.x_num_height = 12;
-  this.x_num_width = 0;
-  this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif";
-  this.fine_txt_height = 6;
-  this.fine_txt_above = 2;
-  this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif";
-  this.letter_metrics = new Array();
-  this.summed_width = 0;
-  this.summed_height = 0;
-  //calculate the width of the y axis numbers
-  ctx.font = this.y_num_font;
-  for (i = 0; i <= 2; i++) {
-    this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width);
-  }
-  //calculate the width of the x axis numbers (but they are rotated so it becomes height)
-  if (x_axis == 1) {
-    ctx.font = this.x_num_font;
-    for (i = 1; i <= logo_columns; i++) {
-      this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width);
-    }
-  } else if (x_axis == 0) {
-    this.x_num_height = 4;
-    this.x_num_width = 4;
-  } else {
-    this.x_num_height = 0;
-    this.x_num_width = 0;
-  }
-  
-  //calculate how much vertical space we want to draw this
-  //first we add the padding at the top and bottom since that's always there
-  this.summed_height += this.pad_top + this.pad_bottom;
-  //all except the last row have the same amount of space allocated to them
-  if (logo_rows > 1) {
-    row_height = this.stack_height + this.pad_middle;
-    if (has_names) {
-      row_height += this.name_height;
-      //the label is allowed to overlap into the spacer
-      row_height += Math.max(this.y_num_height/2, this.name_spacer); 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    } else {
-      row_height += this.y_num_height/2; 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    }
-    this.summed_height += row_height * (logo_rows - 1);
-  }
-  //the last row has the name and fine text below it but no padding
-  this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0);
-
-  var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0);
-  if (has_names) {
-    this.summed_height += fine_txt_total + this.name_height;
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + this.name_spacer);
-  } else {
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + fine_txt_total);
-  }
-
-  //calculate how much horizontal space we want to draw this
-  //first add the padding at the left and right since that's always there
-  this.summed_width += this.pad_left + this.pad_right;
-  if (this.y_axis) {
-    //add on the space for the y-axis label
-    this.summed_width += this.y_label_height + this.y_label_spacer;
-    //add on the space for the y-axis
-    this.summed_width += this.y_num_width + this.y_tic_width;
-  }
-  //add on the space for the stacks
-  this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns;
-  //add on the padding after the stacks (an offset from the fine text)
-  this.summed_width += this.stacks_pad_right;
-
-};
-
-//======================================================================
-// end LogoMetrics object
-//======================================================================
-
-//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm
-function image_ok(img) {
-  "use strict";
-  // During the onload event, IE correctly identifies any images that
-  // weren't downloaded as not complete. Others should too. Gecko-based
-  // browsers act like NS4 in that they report this incorrectly.
-  if (!img.complete) {
-    return false;
-  }
-  // However, they do have two very useful properties: naturalWidth and
-  // naturalHeight. These give the true size of the image. If it failed
-  // to load, either of these should be zero.
-  if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) {
-    return false;
-  }
-  // No other way of checking: assume it's ok.
-  return true;
-}
-  
-function supports_text(ctx) {
-  "use strict";
-  if (!ctx.fillText) {
-    return false;
-  }
-  if (!ctx.measureText) {
-    return false;
-  }
-  return true;
-}
-
-//draws the scale, returns the width
-function draw_scale(ctx, metrics, alphabet_ic, raster) {
-  "use strict";
-  var tic_height, i;
-  tic_height = metrics.stack_height / alphabet_ic;
-  ctx.save();
-  ctx.translate(metrics.y_label_height, metrics.y_num_height/2);
-  //draw the axis label
-  ctx.save();
-  ctx.font = metrics.y_label_font;
-  ctx.translate(0, metrics.stack_height/2);
-  ctx.rotate(-(Math.PI / 2));
-  ctx.textAlign = "center";
-  ctx.fillText("bits", 0, 0);
-  ctx.restore();
-
-  ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0);
-
-  //draw the axis tics
-  ctx.save();
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i <= alphabet_ic; i++) {
-    //draw the number
-    ctx.save();
-    ctx.translate(-1, 0);
-    raster.draw_scale_num(ctx, metrics.y_num_font, i);
-    ctx.restore();
-    //draw the tic
-    ctx.fillRect(0, -1, metrics.y_tic_width, 2);
-    //prepare for next tic
-    ctx.translate(0, -tic_height);
-  }
-  ctx.restore();
-
-  ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height)
-
-  ctx.restore();
-}
-
-function draw_stack_num(ctx, metrics, row_index, raster) {
-  "use strict";
-  ctx.save();
-  ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above));
-  if (metrics.x_axis == 1) {
-    raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index);
-  } else if (metrics.x_axis == 0) {
-    // draw dots instead of the numbers (good for small logos)
-    ctx.beginPath();
-    var radius = Math.round(metrics.x_num_height / 2);
-    ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false);
-    ctx.fill();
-  }
-  ctx.restore();
-}
-
-function draw_stack(ctx, metrics, symbols, raster) {
-  "use strict";
-  var preferred_pad, sym_min, i, sym, sym_height, pad;
-  preferred_pad = 0;
-  sym_min = 5;
-
-  ctx.save();//1
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i < symbols.length; i++) {
-    sym = symbols[i];
-    sym_height = metrics.stack_height * sym.get_scale();
-    
-    pad = preferred_pad;
-    if (sym_height - pad < sym_min) {
-      pad = Math.min(pad, Math.max(0, sym_height - sym_min));
-    }
-    sym_height -= pad;
-
-    //translate to the correct position
-    ctx.translate(0, -(pad/2 + sym_height));
-
-    //draw
-    raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height);
-    //translate past the padding
-    ctx.translate(0, -(pad/2));
-  }
-  ctx.restore();//1
-}
-
-function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) {
-  "use strict";
-  var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly;
-  dx = x2 - x1;
-  dy = y2 - y1;
-  tlen = Math.pow(dx*dx + dy*dy, 0.5);
-  theta = Math.atan2(dy,dx);
-  mulx = Math.cos(theta);
-  muly = Math.sin(theta);
-  lx = [];
-  ly = [];
-  for (i = 0; i < pattern; ++i) {
-    lx.push(pattern[i] * mulx);
-    ly.push(pattern[i] * muly);
-  }
-  i = start;
-  x = x1;
-  y = y1;
-  len = 0;
-  ctx.beginPath();
-  while (len + pattern[i] < tlen) {
-    ctx.moveTo(x, y);
-    x += lx[i];
-    y += ly[i];
-    ctx.lineTo(x, y);
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-    x += lx[i];
-    y += ly[i];
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-  }
-  if (len < tlen) {
-    ctx.moveTo(x, y);
-    x += mulx * (tlen - len);
-    y += muly * (tlen - len);
-    ctx.lineTo(x, y);
-  }
-  ctx.stroke();
-}
-
-function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) {
-  "use strict";
-  var left_size = left_end - left_start;
-  var right_size = right_end - right_start;
-  var line_x;
-
-  ctx.save();//s8
-  ctx.fillStyle = "rgb(240, 240, 240)";
-  if (left_size > 0) {
-    ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height);
-  }
-  if (right_size > 0) {
-    ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height);
-  }
-  ctx.fillStyle = "rgb(51, 51, 51)";
-  if (left_size > 0 && left_divider) {
-    line_x = (left_end * metrics.stack_width) - 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  if (right_size > 0 && right_divider) {
-    line_x = (right_start * metrics.stack_width) + 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  ctx.restore();//s8
-}
-
-function size_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var draw_name, draw_finetext, metrics;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  if (canvas.width !== 0 && canvas.height !== 0) {
-    return;
-  }
-  metrics = new LogoMetrics(canvas.getContext('2d'), 
-      logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height);
-    } else if (canvas.height === 0) {
-      canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width);
-    }
-  }
-}
 
-function draw_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, 
-      offset, col_index, motif_position, ssc;
-  ssc = false;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  ctx = canvas.getContext('2d');
-  //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be
-  metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      scale = 1;
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      scale = canvas.height / metrics.summed_height;
-      canvas.width = metrics.summed_width * scale;
-    } else if (canvas.height === 0) {
-      scale = canvas.width / metrics.summed_width;
-      canvas.height = metrics.summed_height * scale;
-    } else {
-      scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height);
-    }
-  }
-  // cache the raster based on the assumption that we will be drawing a lot
-  // of logos the same size and alphabet
-  if (typeof draw_logo_on_canvas.raster_cache === "undefined") {
-    draw_logo_on_canvas.raster_cache = [];
-  }
-  for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) {
-    raster = draw_logo_on_canvas.raster_cache[i];
-    if (raster.get_alphabet().equals(logo.alphabet) &&
-        Math.abs(raster.get_scale() - scale) < 0.1) break;
-    raster = null;
-  }
-  if (raster == null) {
-    raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width);
-    draw_logo_on_canvas.raster_cache.push(raster);
-  }
-  ctx = canvas.getContext('2d');
-  ctx.save();//s1
-  ctx.scale(scale, scale);
-  ctx.save();//s2
-  ctx.save();//s7
-  //create margin
-  ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top));
-  for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) {
-    pspm = logo.get_pspm(pspm_i);
-    offset = logo.get_offset(pspm_i);
-    //optionally draw name if this isn't the last row or is the only row 
-    if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) {
-      ctx.save();//s4
-      ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height));
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s4
-      ctx.translate(0, Math.round(metrics.name_height + 
-          Math.min(0, metrics.name_spacer - metrics.y_num_height/2)));
-    }
-    //draw scale
-    if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster);
-    ctx.save();//s5
-    //translate across past the scale
-    if (logo.y_axis) {
-      ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + 
-        metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2));
-    }
-    //draw the trimming background
-    if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) {
-      var left_start = offset * logo.get_xlate_nsyms();
-      var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms();
-      var left_divider = true;
-      if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) {
-        // no overlap
-        left_start = 0;
-        left_end = 0;
-        left_divider = false;
-      } else {
-        if (left_start < logo.get_xlate_start()) {
-          left_start = logo.get_xlate_start();
-        }
-        if (left_end > logo.get_xlate_end()) {
-          left_end = logo.get_xlate_end();
-          left_divider = false;
-        }
-        left_start -= logo.get_xlate_start();
-        left_end -= logo.get_xlate_start();
-        if (left_end < left_start) {
-          left_start = 0;
-          left_end = 0;
-          left_divider = false;
-        }
-      }
-      var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms();
-      //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms());
-      var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms());
-      var right_divider = true;
-      if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) {
-        // no overlap
-        right_start = 0;
-        right_end = 0;
-        right_divider = false;
-      } else {
-        if (right_start < logo.get_xlate_start()) {
-          right_start = logo.get_xlate_start();
-          right_divider = false;
-        }
-        if (right_end > logo.get_xlate_end()) {
-          right_end = logo.get_xlate_end();
-        }
-        right_start -= logo.get_xlate_start();
-        right_end -= logo.get_xlate_start();
-        if (right_end < right_start) {
-          right_start = 0;
-          right_end = 0;
-          right_divider = false;
-        }
-      }
-      draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider);
-    }
-    //draw letters
-    var xlate_col;
-    for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) {
-      ctx.translate(metrics.stack_pad_left,0);
-      col_index = Math.floor(xlate_col / logo.get_xlate_nsyms());
-      if (xlate_col % logo.get_xlate_nsyms() == 0) {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          motif_position = col_index - offset;
-          draw_stack_num(ctx, metrics, motif_position, raster);
-          draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster);
-        }
-      } else {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          ctx.save();// s5.1
-          ctx.translate(0, Math.round(metrics.stack_height));
-          // TODO draw a dot or dash or something to indicate continuity of the motif
-          ctx.restore(); //s5.1
-        }
-      }
-      ctx.translate(Math.round(metrics.stack_width), 0);
-    }
-    ctx.restore();//s5
-    ////optionally draw name if this is the last row but isn't the only row 
-    if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer));
-
-      ctx.save();//s6
-      ctx.translate(metrics.summed_width/2, metrics.name_height);
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s6
-      ctx.translate(0, metrics.name_height);
-    } else {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width));
-    }
-    //if not the last row then add middle padding
-    if (pspm_i != (logo.get_rows() -1)) {
-      ctx.translate(0, metrics.pad_middle);
-    }
-  }
-  ctx.restore();//s7
-  if (logo.fine_text.length > 0) {
-    ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom);
-    ctx.font = metrics.fine_txt_font;
-    ctx.textAlign = "right";
-    ctx.fillText(logo.fine_text, 0,0);
-  }
-  ctx.restore();//s2
-  ctx.restore();//s1
-}
-
-function create_canvas(c_width, c_height, c_id, c_title, c_display) {
-  "use strict";
-  var canvas = document.createElement("canvas");
-  //check for canvas support before attempting anything
-  if (!canvas.getContext) {
-    return null;
-  }
-  var ctx = canvas.getContext('2d');
-  //check for html5 text drawing support
-  if (!supports_text(ctx)) {
-    return null;
-  }
-  //size the canvas
-  canvas.width = c_width;
-  canvas.height = c_height;
-  canvas.id = c_id;
-  canvas.title = c_title;
-  canvas.style.display = c_display;
-  return canvas;
-}
-
-function logo_1(alphabet, fine_text, pspm) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  logo.add_pspm(pspm);
-  return logo;
-}
-
-function logo_2(alphabet, fine_text, target, query, query_offset) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  if (query_offset < 0) {
-    logo.add_pspm(target, -query_offset);
-    logo.add_pspm(query);
-  } else {
-    logo.add_pspm(target);
-    logo.add_pspm(query, query_offset);
-  }      
-  return logo;
-}
-
-/*
- * Specifies an alternate source for an image.
- * If the image with the image_id specified has
- * not loaded then a generated logo will be used 
- * to replace it.
- *
- * Note that the image must either have dimensions
- * or a scale must be set.
- */
-function alternate_logo(logo, image_id, scale) {
-  "use strict";
-  var image = document.getElementById(image_id);
-  if (!image) {
-    alert("Can't find specified image id (" +  image_id + ")");
-    return;
-  }
-  //if the image has loaded then there is no reason to use the canvas
-  if (image_ok(image)) {
-    return;
-  }
-  //the image has failed to load so replace it with a canvas if we can.
-  var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the image with the canvas
-  image.parentNode.replaceChild(canvas, image);
-}
-
-/*
- * Specifes that the element with the specified id
- * should be replaced with a generated logo.
- */
-function replace_logo(logo, replace_id, scale, title_txt, display_style) {
-  "use strict";
-  var element = document.getElementById(replace_id);
-  if (!replace_id) {
-    alert("Can't find specified id (" + replace_id + ")");
-    return;
-  }
-  //found the element!
-  var canvas = create_canvas(50, 120, replace_id, title_txt, display_style);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the element with the canvas
-  element.parentNode.replaceChild(canvas, element);
-}
-
-/*
- * Fast string trimming implementation found at
- * http://blog.stevenlevithan.com/archives/faster-trim-javascript
- *
- * Note that regex is good at removing leading space but
- * bad at removing trailing space as it has to first go through
- * the whole string.
- */
-function trim (str) {
-  "use strict";
-  var ws, i;
-  str = str.replace(/^\s\s*/, '');
-  ws = /\s/; i = str.length;
-  while (ws.test(str.charAt(--i)));
-  return str.slice(0, i + 1);
-}
-</script>
-    <script>
-
-// PRIVATE GLOBAL (uhoh)
-var _block_colour_lookup = {};
-
-function block_colour(index) {
-  function hsl2rgb(hue, saturation, lightness) {
-    "use strict";
-    function _hue(p, q, t) {
-      "use strict";
-      if (t < 0) t += 1;
-      else if (t > 1) t -= 1;
-      if (t < (1.0 / 6.0)) {
-        return p + ((q - p) * 6.0 * t);
-      } else if (t < 0.5) {
-        return q;
-      } else if (t < (2.0 / 3.0)) {
-        return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0);
-      } else {
-        return p;
-      }
-    }
-    function _pad_hex(value) {
-      var hex = Math.round(value * 255).toString(16);
-      if (hex.length < 2) hex = "0" + hex;
-      return hex;
-    }
-    var r, g, b, p, q;
-    if (saturation == 0) {
-      // achromatic (grayscale)
-      r = lightness;
-      g = lightness;
-      b = lightness;
-    } else {
-      if (lightness < 0.5) {
-        q = lightness * (1 + saturation);
-      } else {
-        q = lightness + saturation - (lightness * saturation);
-      }
-      p = (2 * lightness) - q;
-      r = _hue(p, q, hue + (1.0 / 3.0));
-      g = _hue(p, q, hue);
-      b = _hue(p, q, hue - (1.0 / 3.0));
-    }
-    return "#" + _pad_hex(r) + _pad_hex(g) + _pad_hex(b);
-  }
-  if (typeof index !== "number" || index % 1 !== 0 || index < 0) return "#000000";
-  // check for override
-  if (_block_colour_lookup[index] == null) {
-    var start = 0; //red
-    var sat = 100;
-    var light = 50;
-    var divisions = 1 << Math.ceil(Math.log(index + 1) / Math.LN2);
-    hue = start + (360 / divisions) * ((index - (divisions >> 1)) * 2 + 1);
-    // colour input fields only support values in the form #RRGGBB
-    _block_colour_lookup[index] = hsl2rgb(hue / 360, sat / 100, light / 100);
-  }
-  return _block_colour_lookup[index];
-}
-
-function set_block_colour(index, new_colour) {
-  _block_colour_lookup[index] = new_colour;
-  var blocks = document.querySelectorAll("div.block_motif[data-colour-index=\"" + index + "\"]");
-  var i;
-  for (i = 0; i < blocks.length; i++) {
-    blocks[i].style.backgroundColor = new_colour;
-  }
-  var swatches = document.querySelectorAll("div.legend_swatch[data-colour-index=\"" + index + "\"]");
-  var picker;
-  for (i = 0; i < swatches.length; i++) {
-    swatches[i].style.backgroundColor = new_colour;
-    picker = swatches[i].querySelector("input[type=\"color\"]");
-    if (picker != null) picker.value = new_colour;
-  }
-}
-
-function make_block_legend_entry(motif_name, motif_colour_index) {
-  if (typeof make_block_legend_entry.has_colour_picker !== "boolean") {
-    // test if colour picker is supported, based off Modernizer
-    // see http://stackoverflow.com/a/7787648/66387
-    make_block_legend_entry.has_colour_picker = (function() {
-      var doc_ele = document.documentElement;
-      // We first check to see if the type we give it sticks..
-      var input_ele = document.createElement('input');
-      input_ele.setAttribute('type', 'color');
-      var value_ok = input_ele.type !== 'text';
-      if (value_ok) {
-        // If the type does, we feed it a textual value, which shouldn't be valid.
-        // If the value doesn't stick, we know there's input sanitization which infers a custom UI
-        var smile = ':)';
-        input_ele.value = smile;
-        input_ele.style.cssText = 'position:absolute;visibility:hidden;';
-        // chuck into DOM and force reflow for Opera bug in 11.00
-        // github.com/Modernizr/Modernizr/issues#issue/159
-        doc_ele.appendChild(input_ele);
-        doc_ele.offsetWidth;
-        value_ok = input_ele.value != smile;
-        doc_ele.removeChild(input_ele);
-      }
-      return value_ok;
-    })();
-  }
-  var entry = document.createElement("div");
-  entry.className = "legend_entry";
-  var swatch;
-  swatch = document.createElement("div");
-  swatch.className = "legend_swatch";
-  swatch.setAttribute("data-colour-index", motif_colour_index);
-  swatch.style.backgroundColor = block_colour(motif_colour_index);
-  if (make_block_legend_entry.has_colour_picker) {
-    var picker = document.createElement("input");
-    picker.type = "color";
-    picker.value = block_colour(motif_colour_index);
-    picker.addEventListener("change", function(e) {
-      set_block_colour(motif_colour_index, picker.value);
-    }, false);
-    swatch.addEventListener("click", function(e) {
-      picker.click();
-    }, false);
-    swatch.appendChild(picker);
-  }
-  entry.appendChild(swatch);
-  var name = document.createElement("div");
-  name.className = "legend_text";
-  name.appendChild(document.createTextNode(motif_name));
-  entry.appendChild(name);
-  return entry;
-}
-
-function make_block_ruler(max_len) {
-  var container = document.createElement("div");
-  container.className = "block_container";
-  var step;
-  if (max_len < 50) {
-    step = 1;
-  } else if (max_len < 100) {
-    step = 2;
-  } else if (max_len < 200) {
-    step = 4;
-  } else if (max_len < 500) {
-    step = 10;
-  } else if (max_len < 1000) {
-    step = 20;
-  } else if (max_len < 2000) {
-    step = 40;
-  } else if (max_len < 5000) {
-    step = 100;
-  } else if (max_len < 10000) {
-    step = 200;
-  } else if (max_len < 20000) {
-    step = 400;
-  } else {
-    step = Math.floor(max_len / 20000) * 400;
-  }
-  var peroid;
-  if (max_len < 10) {
-    peroid = 1;
-  } else if (max_len < 20) {
-    peroid = 2;
-  } else {
-    peroid = 5;
-  }
-  var i, cycle, offset, tic, label;
-  for (i = 0, cycle = 0; i < max_len; i += step, cycle = (cycle + 1) % peroid) {
-    offset = "" + ((i / max_len) * 100) + "%";
-    tic = document.createElement("div");
-    tic.style.left = offset;
-    tic.className = (cycle == 0 ? "tic_major" : "tic_minor");
-    container.appendChild(tic);
-    if (cycle == 0) {
-      label = document.createElement("div");
-      label.className = "tic_label";
-      label.style.left = offset;
-      label.appendChild(document.createTextNode(i));
-      container.appendChild(label);
-    }
-  }
-  return container;
-}
-
-function _calculate_block_needle_drag_pos(e, data) {
-  var mouse;
-  e = e || window.event;
-  if (e.pageX || ev.pageY) {
-    mouse = {"x": e.pageX, "y": e.pageY};
-  } else {
-    mouse = {
-      x:e.clientX + document.body.scrollLeft - document.body.clientLeft, 
-      y:e.clientY + document.body.scrollTop  - document.body.clientTop 
-    };
-  }
-  var cont = data.container;
-  var dragable_length = cont.clientWidth - 
-    (cont.style.paddingLeft ? cont.style.paddingLeft : 0) -
-    (cont.style.paddingRight ? cont.style.paddingRight : 0);
-  //I believe that the offset parent is the body
-  //otherwise I would need to make this recursive
-  //maybe clientLeft would work, but the explanation of
-  //it is hard to understand and it apparently doesn't work
-  //in firefox 2.
-  var diff = mouse.x - cont.offsetLeft;
-  if (diff < 0) diff = 0;
-  if (diff > dragable_length) diff = dragable_length;
-  var pos = Math.round(diff / dragable_length * data.max);
-  if (pos > data.len) pos = data.len;
-  return pos;
-}
-
-function _update_block_needle_drag(e, data, done) {
-  "use strict";
-  var pos = _calculate_block_needle_drag_pos(e, data);
-  // read the needle positions
-  var left = parseInt(data.llabel.textContent, 10) - data.off - 1;
-  var right = parseInt(data.rlabel.textContent, 10) - data.off;
-  // validate needle positions
-  if (left >= data.len) left = data.len - 1;
-  if (left < 0) left = 0;
-  if (right > data.len) right = data.len;
-  if (right <= left) right = left + 1;
-  // calculate the new needle positions
-  if (data.moveboth) {
-    var size = right - left;
-    if (data.isleft) {
-      if ((pos + size) > data.len) pos = data.len - size;
-      left = pos;
-      right = pos + size;
-    } else {
-      if ((pos - size) < 0) pos = size;
-      left = pos - size;
-      right = pos;
-    }
-  } else {
-    if (data.isleft) {
-      if (pos >= right) pos = right - 1;
-      left = pos;
-    } else {
-      if (pos <= left) pos = left + 1;
-      right = pos;
-    }
-  }
-  // update the needle positions
-  data.lneedle.style.left = "" + (left / data.max * 100) + "%";
-  data.llabel.textContent = "" + (left + data.off + 1);
-  data.rneedle.style.left = "" + (right / data.max * 100) + "%";
-  data.rlabel.textContent = "" + (right + data.off);
-  data.handler(left, right, done);
-}
-
-function _make_block_needle_drag_start_handler(isleft, data) {
-  return function (e) {
-    data.isleft = isleft;
-    data.moveboth = !(e.shiftKey);
-    document.addEventListener("mousemove", data.drag_during, false);
-    document.addEventListener("mouseup", data.drag_end, false);
-  };
-}
-
-function _make_block_needle_drag_end_handler(data) {
-  return function (e) {
-    document.removeEventListener("mousemove", data.drag_during, false);
-    document.removeEventListener("mouseup", data.drag_end, false);
-    _update_block_needle_drag(e, data, true);
-  };
-}
-
-function _make_block_needle_drag_during_handler(data) {
-  return function (e) {
-    _update_block_needle_drag(e, data, false);
-  };
-}
-
-// private function used by make_block_container
-function _make_block_needle(isleft, value, data) {
-  var vbar = document.createElement('div');
-  vbar.className = "block_needle " + (isleft ? "left" : "right");
-  vbar.style.left = "" + (value / data.max * 100)+ "%";
-  var label = document.createElement('div');
-  label.className = "block_handle " + (isleft ? "left" : "right");
-  // The needles sit between the sequence positions, so the left one sits at the
-  // start and the right at the end. This is why 1 is added to the displayed
-  // value for a left handle as the user doesn't need to know about this detail
-  label.textContent = "" + (isleft ? value + data.off + 1 : value + data.off);
-  label.unselectable = "on"; // so IE and Opera don't select the text, others are done in css
-  label.title = "Drag to move the displayed range. Hold shift and drag to change " + (isleft ? "lower" : "upper") + " bound of the range.";
-  vbar.appendChild(label);
-  if (isleft) {
-    data.lneedle = vbar;
-    data.llabel = label;
-  } else {
-    data.rneedle = vbar;
-    data.rlabel = label;
-  }
-  label.addEventListener("mousedown", _make_block_needle_drag_start_handler(isleft, data), false);
-  return vbar;
-}
-
-function make_block_container(is_stranded, has_both_strands, max_len, show_len, offset, range_handler) {
-  offset = (offset != null ? offset : 0);
-  // make the container for the block diagram
-  var container = document.createElement("div");
-  container.className = "block_container";
-  container.setAttribute("data-max", max_len);
-  container.setAttribute("data-off", offset);
-  if (is_stranded) {
-    var plus = document.createElement("div");
-    plus.appendChild(document.createTextNode("+"));
-    plus.className = "block_plus_sym";
-    container.appendChild(plus);
-    if (has_both_strands) {
-      var minus = document.createElement("div");
-      minus.appendChild(document.createTextNode("-"));
-      minus.className = "block_minus_sym";
-      container.appendChild(minus);
-    }
-  }
-  var rule = document.createElement("div");
-  rule.className = "block_rule";
-  rule.style.width = ((show_len / max_len) * 100) + "%";
-  container.appendChild(rule);
-  if (range_handler != null) {
-    var range_data = {
-      "max": max_len,
-      "len": show_len,
-      "off": offset,
-      "handler": range_handler,
-      "container": container,
-      "lneedle": null, "llabel": null,
-      "rneedle": null, "rlabel": null,
-      "isleft": false, "moveboth" : false
-    };
-    range_data.drag_during = _make_block_needle_drag_during_handler(range_data);
-    range_data.drag_end = _make_block_needle_drag_end_handler(range_data);
-    container.appendChild(_make_block_needle(false, 1, range_data)); // add right first so z-index works
-    container.appendChild(_make_block_needle(true, 0, range_data));
-  }
-  return container;
-}
-
-function make_block_label(container, max_len, pos, length, message) {
-  "use strict";
-  var label = document.createElement("div");
-  label.className = "block_label";
-  label.style.left = (((pos + (length / 2)) / max_len) * 100) + "%";
-  label.appendChild(document.createTextNode(message));
-  container.appendChild(label);
-}
-
-function make_block(container, max_len,
-    site_pos, site_len, site_pvalue, site_rc, site_colour_index, site_secondary) {
-  "use strict";
-  var block_height, block, block_region1, block_region2;
-  var max_block_height = 12;
-  var max_pvalue = 1e-10;
-  // calculate the height of the block
-  block_height = (site_pvalue < max_pvalue ? max_block_height : 
-      (Math.log(site_pvalue) / Math.log(max_pvalue)) * max_block_height);
-  if (block_height < 1) block_height = 1;
-  // create a block to represent the motif
-  block = document.createElement("div");
-  block.className = "block_motif" + (site_secondary ? " scanned_site" : "") + (site_rc ? " bottom" : " top");
-  block.style.left = ((site_pos / max_len) * 100) + "%";
-  block.style.top = (!site_rc ? max_block_height - block_height : 
-      max_block_height + 1) + "px";
-  block.style.width = ((site_len / max_len) * 100) + "%";
-  block.style.height = block_height + "px";
-  block.style.backgroundColor = block_colour(site_colour_index);
-  block.setAttribute("data-colour-index", site_colour_index);
-  // add to container
-  container.appendChild(block);
-  var activator = function (e) {
-    toggle_class(block, "active", true);
-    var new_e = new e.constructor(e.type, e);
-    block.dispatchEvent(new_e);
-  };
-  var deactivator = function (e) {
-    toggle_class(block, "active", false);
-    var new_e = new e.constructor(e.type, e);
-    block.dispatchEvent(new_e);
-  }
-  // create a larger region to detect mouseover for the block
-  block_region1 = document.createElement("div");
-  block_region1.className = "block_region top" + 
-    (site_secondary ? " scanned_site" : "") + (site_rc ? "" : " main");
-  block_region1.style.left = block.style.left;
-  block_region1.style.width = block.style.width;
-  block_region1.addEventListener('mouseover', activator, false);
-  block_region1.addEventListener('mouseout', deactivator, false);
-  container.appendChild(block_region1);
-  block_region2 = document.createElement("div");
-  block_region2.className = "block_region bottom" + 
-    (site_secondary ? " scanned_site" : "") + (site_rc ? " main" : "");
-  block_region2.style.left = block.style.left;
-  block_region2.style.width = block.style.width;
-  block_region2.addEventListener('mouseover', activator, false);
-  block_region2.addEventListener('mouseout', deactivator, false);
-  container.appendChild(block_region2);
-  return block;
-}
-
-function set_block_needle_positions(containingNode, start, end) {
-  var container, lneedle, llabel, rneedle, rlabel, max, off, left, right;
-  container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container"));
-  max = parseInt(container.getAttribute("data-max"), 10);
-  off = parseInt(container.getAttribute("data-off"), 10);
-  left = start - off;
-  right = end - off;
-  lneedle = containingNode.querySelector(".block_needle.left");
-  llabel = lneedle.querySelector(".block_handle.left");
-  rneedle = containingNode.querySelector(".block_needle.right");
-  rlabel = rneedle.querySelector(".block_handle.right");
-  // update the needle positions
-  lneedle.style.left = "" + (left / max * 100) + "%";
-  llabel.textContent = "" + (left + off + 1);
-  rneedle.style.left = "" + (right / max * 100) + "%";
-  rlabel.textContent = "" + (right + off);
-}
-
-function get_block_needle_positions(containingNode) {
-  var container, llabel, rlabel, max, off, left, right;
-  container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container"));
-  max = parseInt(container.getAttribute("data-max"), 10);
-  off = parseInt(container.getAttribute("data-off"), 10);
-  llabel = containingNode.querySelector(".block_needle.left > .block_handle.left");
-  rlabel = containingNode.querySelector(".block_needle.right > .block_handle.right");
-  left = parseInt(llabel.textContent, 10) - off - 1;
-  right = parseInt(rlabel.textContent, 10) - off;
-  return {"start": left + off, "end": right + off};
-}
-</script>
-    <script>
-function make_alpha_bg_table(alph, freqs) {
-  function colour_symbol(index) {
-    var span = document.createElement("span");
-    span.appendChild(document.createTextNode(alph.get_symbol(index)));
-    span.style.color = alph.get_colour(index);
-    span.className = "alpha_symbol";
-    return span;
-  }
-  var table, thead, tbody, row, th, span, i;
-  // create table
-  table = document.createElement("table");
-  table.className = "alpha_bg_table";
-  // create header
-  thead = document.createElement("thead");
-  table.appendChild(thead);
-  row = thead.insertRow(thead.rows.length);
-  if (alph.has_complement()) {
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq");
-    if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg");
-    if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-  } else {
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq");
-    if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg");
-  }
-  // add alphabet entries
-  tbody = document.createElement("tbody");
-  table.appendChild(tbody);
-  if (alph.has_complement()) {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      var c = alph.get_complement(i);
-      if (i > c) continue;
-      row = tbody.insertRow(tbody.rows.length);
-      add_text_cell(row, alph.get_name(i));
-      if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3));
-      if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3));
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, "~");
-      add_cell(row, colour_symbol(c)); 
-      if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(c).toFixed(3));
-      if (freqs != null) add_text_cell(row, "" + freqs[c].toFixed(3));
-      add_text_cell(row, alph.get_name(c));
-    }
-  } else {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      row = tbody.insertRow(tbody.rows.length);
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, alph.get_name(i));
-      if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3));
-      if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3));
-    }
-  }
-  return table;
-}
-
-</script>
-    <script>
-var current_motif = 0;
-var meme_alphabet = new Alphabet(data.alphabet, data.background.freqs);
-
-var DelayLogoTask = function(logo, canvas) {
-  this.logo = logo;
-  this.canvas = canvas;
-};
-
-DelayLogoTask.prototype.run = function () {
-  draw_logo_on_canvas(this.logo, this.canvas, false);
-};
-
-function motif_pspm(index) {
-  var motif, pwm, psm, name, ltrim, rtrim, nsites, evalue;
-  // get motif
-  motif = data["motifs"][index];
-  // get motif paramters
-  pwm = motif["pwm"]; 
-  psm = motif["psm"];
-  name = "" + (index + 1); ltrim = 0; rtrim = 0; 
-  nsites = motif["nsites"]; evalue = motif["evalue"];
-  // make pspm
-  return new Pspm(pwm, name, ltrim, rtrim, nsites, evalue, psm);
-}
-
-function motif_count_matrix(index) {
-  return motif_pspm(index).as_count_matrix();
-}
-
-function motif_prob_matrix(index) {
-  return motif_pspm(index).as_probability_matrix();
-}
-
-function motif_minimal_meme(index) {
-  return motif_pspm(index).as_meme({
-    "with_header": true, 
-    "with_pspm": true,
-    "with_pssm": true,
-    "version": data["version"],
-    "alphabet": meme_alphabet,
-    "strands": (meme_alphabet.has_complement() && data.options.revcomp ? 2 : 1)
-  });
-}
-
-function motif_fasta(index) {
-  "use strict";
-  var motif, sites, site, seq, sequences, sequence, i, num, counter, out;
-  counter = {};
-  sequences = data["sequence_db"]["sequences"];
-  motif = data["motifs"][index];
-  sites = motif["sites"];
-  out = "";
-  for (i = 0; i < sites.length; i++) {
-    site = sites[i];
-    seq = site["seq"];
-    sequence = sequences[seq];
-    counter[seq] = (num = counter[seq]) ? (++num) : (num = 1); // inc counter
-    if (i !== 0) {out += "\n";}
-    out += ">" + sequence["name"] + "_site_" + num + " offset= " + site["pos"] + 
-      (site["rc"] ? " RC\n" : "\n");
-    out += site["match"];
-  }
-  return out;
-}
-
-function motif_raw(index) {
-  "use strict";
-  var sites, i, out;
-  sites = data["motifs"][index]["sites"];
-  out = "";
-  for (i = 0; i < sites.length; i++) {
-    if (i !== 0) {out += "\n";}
-    out += sites[i]["match"];
-  }
-  return out;
-}
-
-function clone_template(template) {
-  "use strict";
-  var node, help_btns, i, button;
-  node = $(template).cloneNode(true);
-  toggle_class(node, "template", false);
-  node.id = "";
-  help_btns = node.querySelectorAll(".help");
-  for (i = 0; i < help_btns.length; i++) {
-    button = help_btns[i];
-    if (button.hasAttribute("data-topic")) {
-      button.tabIndex = "0";
-      button.addEventListener("click", __toggle_help, false);
-      button.addEventListener("keydown", __toggle_help, false);
-    }
-  }
-  return node;
-}
-
-function set_tvar(template, tvar, value) {
-  var node;
-  node = find_child(template, tvar);
-  if (node === null) {
-    throw new Error("Template does not contain variable " + tvar);
-  }
-  node.innerHTML = "";
-  if (typeof value !== "object") {
-    node.appendChild(document.createTextNode(value));
-  } else {
-    node.appendChild(value);
-  }
-}
-
-function make_logo(alphabet, pspm, rc, offset, className) {
-  if (rc) pspm = pspm.copy().reverse_complement(alphabet);
-  var logo = new Logo(alphabet, "");
-  logo.add_pspm(pspm, offset);
-  var canvas = document.createElement('canvas');
-  canvas.height = 50;
-  canvas.width = 0;
-  canvas.className = className;
-  size_logo_on_canvas(logo, canvas, false);
-  add_draw_task(canvas, new DelayLogoTask(logo, canvas));
-  return canvas;
-}
-
-function make_small_logo(alphabet, pspm, options) {
-  if (typeof options === "undefined") options = {};
-  if (options.rc) pspm = pspm.copy().reverse_complement(alphabet);
-  var logo = new Logo(alphabet, {x_axis: false, y_axis: false});
-  logo.add_pspm(pspm, (typeof options.offset === "number" ? options.offset : 0));
-  var canvas = document.createElement('canvas');
-  if (typeof options.className === "string") canvas.className = options.className;
-  if (typeof options.width === "number" && options.width > 0) {
-    canvas.height = 0;
-    canvas.width = options.width;
-    draw_logo_on_canvas(logo, canvas, false);
-  } else {
-    draw_logo_on_canvas(logo, canvas, false, 1/3);
-  }
-  return canvas;
-}
-
-function make_large_logo(alphabet, pspm, rc, offset, className) {
-  if (rc) pspm = pspm.copy().reverse_complement(alphabet);
-  var logo = new Logo(alphabet, "");
-  logo.add_pspm(pspm, offset);
-  var canvas = document.createElement('canvas');
-  canvas.height = 200;
-  canvas.width = 0;
-  canvas.className = className;
-  size_logo_on_canvas(logo, canvas, false);
-  add_draw_task(canvas, new DelayLogoTask(logo, canvas));
-  return canvas;
-}
-
-function make_sym_btn(symbol, title, action) {
-  var box;
-  box = document.createElement("div");
-  box.tabIndex = 0;
-  box.className = "sym_btn";
-  box.appendChild(document.createTextNode(symbol));
-  box.title = title;
-  box.addEventListener('click', action, false);
-  box.addEventListener('keydown', action, false);
-  return box;
-}
-
-function make_seq(alphabet, seq) {
-  var i, j, letter, lbox, sbox;
-  sbox = document.createElement("span");
-  for (i = 0; i < seq.length; i = j) {
-    letter = seq.charAt(i);
-    for (j = i+1; j < seq.length; j++) {
-      if (seq.charAt(j) !== letter) {
-        break;
-      }
-    }
-    lbox = document.createElement("span");
-    lbox.style.color = alphabet.get_colour(alphabet.get_index(letter));
-    lbox.appendChild(document.createTextNode(seq.substring(i, j)));
-    sbox.appendChild(lbox);
-  }
-  return sbox;
-}
-
-//
-// make_pv_text
-//
-// Returns the string p-value, with the p italicised.
-///
-function make_pv_text() {
-  var pv_text = document.createElement("span");
-  var pv_italic_text = document.createElement("span");
-  pv_italic_text.appendChild(document.createTextNode("p"));
-  pv_italic_text.style.fontStyle = "italic";
-  pv_text.appendChild(pv_italic_text);
-  pv_text.appendChild(document.createTextNode("-value"));
-  return pv_text;
-}
-
-function append_site_entries(tbody, motif, site_index, count) {
-  "use strict";
-  var i, end;
-  var sites, site, sequences, sequence;
-  var rbody;
-  if (typeof count !== "number") {
-    count = 20;
-  }
-  sequences = data["sequence_db"]["sequences"];
-  sites = motif["sites"];
-  end = Math.min(site_index + count, sites.length);
-  for (i = site_index; i < end; i++) {
-    site = sites[i];
-    sequence = sequences[site["seq"]];
-
-    rbody = tbody.insertRow(tbody.rows.length);
-    add_text_cell(rbody, "" + (site["seq"] + 1) + ".", "site_num");
-    add_text_cell(rbody, sequence["name"], "site_name");
-    add_text_cell(rbody, site["rc"] ? "-" : "+", "site_strand");
-    add_text_cell(rbody, site["pos"] + 1, "site_start");
-    add_text_cell(rbody, site["pvalue"].toExponential(2), "site_pvalue");
-    add_text_cell(rbody, site["lflank"], "site lflank");
-    add_cell(rbody, make_seq(meme_alphabet, site["match"]), "site match");
-    add_text_cell(rbody, site["rflank"], "site rflank");
-  }
-  return i;
-}
-
-function make_site_entries() {
-  "use strict";
-  var region;
-  region = this;
-  if (region.data_site_index >= region.data_motif["sites"].length) {
-    // all sites created
-    region.removeEventListener('scroll', make_site_entries, false);
-    return;
-  }
-  // if there's still 100 pixels to scroll than don't do anything yet
-  if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) {
-    return;
-  }
-
-  region.data_site_index = append_site_entries(
-      find_child(region, "sites_tbl").tBodies[0], 
-      region.data_motif, region.data_site_index, 20
-    ); 
-}
-
-function make_sites(motif) {
-  "use strict";
-  function add_site_header(row, title, nopad, help_topic, tag_class) {
-    var div, divcp, th;
-    th = document.createElement("th");
-    div = document.createElement("div");
-    div.className = "sites_th_inner";
-    if (typeof title !== "object") {
-      title = document.createTextNode("" + title);
-    }
-    div.appendChild(title);
-    if (help_topic) {
-      div.appendChild(document.createTextNode("\xA0"));
-      div.appendChild(help_button(help_topic));
-    }
-    divcp = div.cloneNode(true);
-    divcp.className = "sites_th_hidden";
-    th.appendChild(div);
-    th.appendChild(divcp);
-    if (nopad) {
-      th.className = "nopad";
-    }
-    if (tag_class) {
-      th.className += " " + tag_class;
-    }
-    row.appendChild(th);
-  }
-  var outer_tbl, inner_tbl, tbl, thead, tbody, rhead;
-
-  outer_tbl = document.createElement("div");
-  outer_tbl.className = "sites_outer";
-
-  inner_tbl = document.createElement("div");
-  inner_tbl.className = "sites_inner";
-  outer_tbl.appendChild(inner_tbl);
-
-  tbl = document.createElement("table");
-  tbl.className = "sites_tbl";
-  inner_tbl.appendChild(tbl);
-
-  thead = document.createElement("thead");
-  tbl.appendChild(thead);
-  tbody = document.createElement("tbody");
-  tbl.appendChild(tbody);
-
-  rhead = thead.insertRow(thead.rows.length);
-  add_site_header(rhead, "", true);
-  add_site_header(rhead, "Name", false, "pop_seq_name");
-  add_site_header(rhead, "Strand", false, "pop_site_strand", "site_strand_title");
-  add_site_header(rhead, "Start", false, "pop_site_start");
-  add_site_header(rhead, make_pv_text(), false, "pop_site_pvalue");
-  add_site_header(rhead, "", false);
-  add_site_header(rhead, "Sites", true, "pop_site_match");
-  add_site_header(rhead, "", false);
-
-  inner_tbl.data_motif = motif;
-  inner_tbl.data_site_index = append_site_entries(tbody, motif, 0, 20);
-  if (inner_tbl.data_site_index < motif["sites"].length) {
-    inner_tbl.addEventListener('scroll', make_site_entries, false);
-  }
-  return outer_tbl;
-}
-
-function make_motif_table_entry(row, alphabet, ordinal, motif, colw) {
-  "use strict";
-  function ev_sig(evalue_str) {
-    "use strict";
-    var ev_re, match, sig, exp, num;
-    ev_re = /^(.*)e(.*)$/;
-    if (match = ev_re.exec(evalue_str)) {
-      sig = parseFloat(match[1]);
-      exp = parseInt(match[2]);
-      if (exp >= 0) {
-        return false;
-      } else if (exp <= -3) {
-        return true;
-      } else {
-        return sig * Math.pow(10, exp) <= 0.05;
-      }
-    }
-    return true;
-  }
-  function make_preview(alphabet, motif) {
-    "use strict";
-    var pspm, preview, preview_rc;
-    var box, btn_box, logo_box, btn_plus, btn_minus;
-    if (motif["preview_logo"]) {
-      preview = motif["preview_logo"];
-      preview_rc = motif["preview_logo_rc"];
-    } else {
-      pspm = new Pspm(motif["pwm"]);
-      preview = make_logo(alphabet, pspm);
-      motif["preview_logo"] = preview;
-      if (alphabet.has_complement()) {
-        preview_rc = make_logo(alphabet, pspm, true, 0, "logo_rc");
-        motif["preview_logo_rc"] = preview_rc;
-      }
-    }
-    if (preview_rc) {
-      btn_plus = document.createElement("div");
-      btn_plus.appendChild(document.createTextNode("+"));
-      btn_plus.className = "preview_btn plus";
-      btn_plus.tabIndex = "0";
-      btn_plus.addEventListener("click", action_btn_rc, false);
-      btn_plus.addEventListener("keydown", action_btn_rc, false);
-      btn_minus = document.createElement("div");
-      btn_minus.appendChild(document.createTextNode("-"));
-      btn_minus.className = "preview_btn minus";
-      btn_minus.tabIndex = "0";
-      btn_minus.addEventListener("click", action_btn_rc, false);
-      btn_minus.addEventListener("keydown", action_btn_rc, false);
-      btn_box = document.createElement("div");
-      btn_box.className = "preview_btn_box";
-      btn_box.appendChild(btn_plus);
-      btn_box.appendChild(btn_minus);
-    }
-    logo_box = document.createElement("div");
-    logo_box.className = "preview_logo_box";
-    logo_box.appendChild(preview);
-    if (preview_rc) logo_box.appendChild(preview_rc);
-    box = document.createElement("div");
-    box.className = "preview_box";
-    if (preview_rc) box.appendChild(btn_box);
-    box.appendChild(logo_box);
-    if (preview_rc) {
-      if (motif["rc"]) {
-        btn_minus.className += " active";
-        logo_box.className += " show_rc_logo";
-      } else {
-        btn_plus.className += " active";
-      }
-    }
-    return box;
-  }
-  var pspm, preview, preview_rc, c;
-  row.data_motif = motif;
-  row.data_ordinal = ordinal;
-  if (!ev_sig(motif["evalue"])) {
-    row.style.opacity = 0.4;
-  }
-  add_text_cell(row, "" + ordinal + ".", "motif_ordinal");
-  add_cell(row, make_preview(alphabet, motif), "motif_logo");
-  add_text_cell(row, motif["evalue"], "motif_evalue");
-  add_text_cell(row, motif["nsites"], "motif_nsites");
-  add_text_cell(row, motif["len"], "motif_width");
-  add_cell(row, make_sym_btn("\u21A7", "Show more information.", 
-        action_show_more), "motif_more");
-  add_cell(row, 
-      make_sym_btn("\u21E2", 
-        "Submit the motif to another MEME Suite program or download it.",
-        action_show_outpop), 
-      "motif_submit");
-  if (colw) {
-    for (c = 0; c < row.cells.length; c++) {
-      row.cells[c].style.minWidth = colw[c] + "px";
-    }
-  }
-}
-
-function make_motifs_table(alphabet, start_ordinal, motifs, colw, stop_reason) {
-  var i, j;
-  var tbl, thead, tbody, tfoot, row, preview;
-  var motif, pspm;
-
-  tbl = document.createElement("table");
-  
-  thead = document.createElement("thead");
-  tbl.appendChild(thead);
-  tbody = document.createElement("tbody");
-  tbl.appendChild(tbody);
-  tfoot = document.createElement("tfoot");
-  tbl.appendChild(tfoot);
-
-  row = thead.insertRow(thead.rows.length);
-  add_text_header_cell(row, "", "", "motif_ordinal");
-  add_text_header_cell(row, "Logo", "", "motif_logo");
-  add_text_header_cell(row, "E-value", "pop_ev", "motif_evalue");
-  add_text_header_cell(row, "Sites", "pop_sites", "motif_nsites");
-  add_text_header_cell(row, "Width", "pop_width", "motif_width");
-  add_text_header_cell(row, "More", "pop_more", "motif_more");
-  add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit");
-
-  for (i = 0; i < motifs.length; i++) {
-    row = tbody.insertRow(tbody.rows.length);
-    make_motif_table_entry(row, alphabet, start_ordinal + i, motifs[i], colw);
-  }
-
-  row = tfoot.insertRow(tfoot.rows.length);
-  add_text_header_cell(row, stop_reason, "", "stop_reason", "", 6);
-
-  return tbl;
-}
-
-function make_expanded_motif(alphabet, ordinal, motif, less_x, submit_x) {
-  "use strict";
-  var box, pspm, logo_box, large_logo, large_logo_rc, tab_logo, tab_logo_rc;
-  var btn, offset, norc;
-
-  box = clone_template("tmpl_motif_expanded");
-  box.data_motif = motif;
-  box.data_ordinal = ordinal;
-
-  pspm = new Pspm(motif["pwm"]);
-  if (typeof motif["rc"] !== "boolean") {
-    motif["rc"] = false;
-  }
-  if (motif["large_logo"]) {
-    large_logo = motif["large_logo"];
-    large_logo_rc = motif["large_logo_rc"];
-  } else {
-    large_logo = make_large_logo(alphabet, pspm, false, 0);
-    motif["large_logo"] = large_logo;
-    if (alphabet.has_complement()) {
-      large_logo_rc = make_large_logo(alphabet, pspm, true, 0, "logo_rc");
-      motif["large_logo_rc"] = large_logo_rc;
-    }
-  }
-  norc = (large_logo_rc == null);
-  toggle_class(box, "norc", norc);
-
-  logo_box = find_child(box, "tvar_logo");
-  logo_box.appendChild(large_logo);
-  if (large_logo_rc) logo_box.appendChild(large_logo_rc);
-  toggle_class(logo_box, "show_rc_logo", motif["rc"]);
-
-  tab_logo = find_child(box, "tvar_tab");
-  tab_logo_rc = find_child(box, "tvar_tab_rc");
-
-  toggle_class(tab_logo, "activeTab", !motif["rc"]);
-  toggle_class(tab_logo_rc, "activeTab", motif["rc"]);
-
-  tab_logo.addEventListener('click', action_rc_tab, false);
-  tab_logo.addEventListener('keydown', action_rc_tab, false);
-  tab_logo_rc.addEventListener('click', action_rc_tab, false);
-  tab_logo_rc.addEventListener('keydown', action_rc_tab, false);
-
-  set_tvar(box, "tvar_ordinal", ordinal); 
-  set_tvar(box, "tvar_evalue", motif["evalue"]);
-  set_tvar(box, "tvar_width", motif["len"]);
-  set_tvar(box, "tvar_site_count", motif["nsites"]);
-  set_tvar(box, "tvar_llr", motif["llr"]);
-  set_tvar(box, "tvar_ic", motif["ic"]);
-  set_tvar(box, "tvar_re", motif["re"]);
-  set_tvar(box, "tvar_bt", motif["bt"]);
-  set_tvar(box, "tvar_sites", make_sites(motif));
-
-  offset = 32; // 1* 5px padding + 2 * 10px padding + 2 * 2px border + 3px ??
-
-  btn = find_child(box, "tvar_less");
-  btn.style.left = (less_x - offset) + "px";
-  btn.addEventListener('click', action_show_less, false);
-  btn.addEventListener('keydown', action_show_less, false);
-  btn = find_child(box, "tvar_submit");
-  btn.style.left = (submit_x - offset) + "px";
-  btn.addEventListener('click', action_show_outpop, false);
-  btn.addEventListener('keydown', action_show_outpop, false);
-  return box;
-}
-
-
-//
-//
-///
-function make_motifs() {
-  "use strict";
-  function pixel_value(str_in) {
-    "use strict";
-    var px_re, match;
-    px_re = /^(\d+)px$/;
-    if (match = px_re.exec(str_in)) {
-      return parseInt(match[1], 10);
-    }
-    return 0;
-  }
-  var container, tbl;
-  var colw, r, row, c, cell, cell_style, pad_left, pad_right;
-
-  // make the motifs table
-  container = $("motifs");
-  container.innerHTML = ""; // clear content
-
-  tbl = make_motifs_table(meme_alphabet, 1, data["motifs"], colw, data["stop_reason"]);
-  container.appendChild(tbl);
-
-  // measure table column widths
-  colw = [];
-  row = tbl.tBodies[0].rows[0];
-  for (c = 0; c < row.cells.length; c++) {
-    var padLeft, padRight;
-    cell = row.cells[c];
-    cell_style = window.getComputedStyle(cell, null);
-    pad_left = pixel_value(cell_style.getPropertyValue("padding-left"));
-    pad_right = pixel_value(cell_style.getPropertyValue("padding-right"));
-    colw[c] = cell.clientWidth - pad_left - pad_right;
-    if (typeof colw[c] !== "number" || colw[c] < 0) {
-      colw[c] = 1;
-    }
-  }
-
-  // set minimum table column widths on each row so later when we remove rows it still aligns
-  for (r = 0; r < tbl.tBodies[0].rows.length; r++) {
-    row = tbl.tBodies[0].rows[r];
-    for (c = 0; c < row.cells.length; c++) {
-      row.cells[c].style.minWidth = colw[c] + "px";
-    }
-  }
-
-  // store the table column widths so we can create rows latter with the same minimums
-  container.data_colw = colw;
-
-  // calculate the x offset for the buttons
-  row = tbl.tBodies[0].rows[0];
-  container.data_more_x = coords(find_child(find_child(row, "motif_more"), "sym_btn"))[0];
-  container.data_submit_x = coords(find_child(find_child(row, "motif_submit"), "sym_btn"))[0];
-
-  draw_on_screen();
-}
-
-function make_meme_block(container, max_seq_len, is_scan, site) {
-  "use strict";
-  var motif = data.motifs[site.motif];
-  var block = make_block(container, max_seq_len, site.pos, motif.len,
-      site.pvalue, site.rc, site.motif, is_scan);
-  var handler = (is_scan ?
-      make_scan_popup(site, motif, block) :
-      make_block_popup(site, motif, block));
-  block.addEventListener("mouseover", handler, false);
-  block.addEventListener("mouseout", handler, false);
-}
-
-function append_blocks_entries(tbody, seq_index, count) {
-  "use strict";
-  var i, end, j;
-  var max_pvalue, max_block_height, max_seq_len, sequences;
-  var sequence, sites, scans, scan;
-  var container, plus, minus, rule, row;
-  // define some constants
-  max_seq_len = data.sequence_db.max_length;
-  // determine how many to load
-  end = Math.min(seq_index + count, data.sequence_db.sequences.length);
-  for (i = seq_index; i < end; i++) {
-    // get the sequence
-    sequence = data.sequence_db.sequences[i];
-    // make the containers for the block diagram
-    container = make_block_container(meme_alphabet.has_complement(),
-        data.options.revcomp, max_seq_len, sequence.length);
-    // create blocks for the motif sites
-    sites = sequence["sites"];
-    for (j = 0; j < sites.length; j++)
-      make_meme_block(container, max_seq_len, false, sites[j]);
-    // create blocks for the scanned sites
-    scan = data.scan[i];
-    for (j = 0; j < scan.sites.length; j++)
-      make_meme_block(container, max_seq_len, true, scan.sites[j]);
-    // create a row for the sequence
-    row = tbody.insertRow(tbody.rows.length);
-    toggle_class(row, "empty_seq", sites.length == 0 && scan.sites.length == 0);
-    toggle_class(row, "only_scan", sites.length == 0 && scan.sites.length > 0);
-    add_text_cell(row, (i + 1) + ".", "blockdiag_num");
-    add_text_cell(row, sequence["name"], "blockdiag_name");
-    add_text_cell(row, scan["pvalue"].toExponential(2), "blockdiag_pvalue");
-    add_cell(row, container, "block_td"); 
-  }
-  return end;
-}
-
-function make_blocks_entries() {
-  "use strict";
-  var region;
-  region = this;
-  if (region.data_blocks_index >= data["sequence_db"]["sequences"].length) {
-    // all sites created
-    region.removeEventListener('scroll', make_blocks_entries, false);
-    return;
-  }
-  // if there's still 100 pixels to scroll than don't do anything yet
-  if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) {
-    return;
-  }
-
-  region.data_blocks_index = append_blocks_entries(
-      find_child(region, "blocks_tbl").tBodies[0], 
-      region.data_blocks_index, 20
-    ); 
-}
-
-function make_blocks() {
-  "use strict";
-  function add_seqs_filter(container, id, checked, label_text, help_topic) {
-    "use strict";
-    var label, radio;
-    radio = document.createElement("input");
-    radio.type = "radio";
-    radio.name = "seqs_display";
-    radio.id = id;
-    radio.checked = checked;
-    radio.addEventListener('click', action_seqs_filter, false);
-    label = document.createElement("label");
-    label.appendChild(document.createTextNode(label_text));
-    label.htmlFor = id;
-    container.appendChild(radio);
-    container.appendChild(label);
-    if (help_topic) {
-      container.appendChild(document.createTextNode("\xA0"));
-      container.appendChild(help_button(help_topic));
-    }
-  }
-  function add_blocks_header(row, title, nopad, help_topic) {
-    "use strict";
-    var div, divcp, th;
-    th = document.createElement("th");
-    div = document.createElement("div");
-    div.className = "blocks_th_inner";
-    if (typeof title !== "object") {
-      title = document.createTextNode("" + title);
-    }
-    div.appendChild(title);
-    if (help_topic) {
-      div.appendChild(document.createTextNode("\xA0"));
-      div.appendChild(help_button(help_topic));
-    }
-    divcp = div.cloneNode(true);
-    divcp.className = "blocks_th_hidden";
-    th.appendChild(div);
-    th.appendChild(divcp);
-    if (nopad) {
-      th.className = "nopad";
-    }
-    row.appendChild(th);
-  }
-  var container;
-  var page, view_height, outer_tbl, inner_tbl, tbl, thead, tbody, rhead;
-  var in_view, i, seq_count;
-  
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  view_height = Math.max(page.clientHeight - 300, 300);
-
-  container = $("blocks");
-  toggle_class(container, "hide_empty_seqs", true);
-  toggle_class(container, "hide_only_scan", true);
-  container.innerHTML = "";
-  add_seqs_filter(container, "rdo_sites_only", true, "Only Motif Sites", "pop_motif_sites");
-  add_seqs_filter(container, "rdo_sites_and_scan", false, "Motif Sites+Scanned Sites", "pop_scanned_sites");
-  add_seqs_filter(container, "rdo_all_seqs", false, "All Sequences", "pop_all_sequences");
-
-  outer_tbl = document.createElement("div");
-  outer_tbl.className = "blocks_outer";
-
-  inner_tbl = document.createElement("div");
-  inner_tbl.id = "blocks_scroll";
-  inner_tbl.className = "blocks_inner";
-  inner_tbl.style.maxHeight = view_height + "px";
-  outer_tbl.appendChild(inner_tbl);
-
-  tbl = document.createElement("table");
-  tbl.className = "blocks_tbl";
-  inner_tbl.appendChild(tbl);
-
-  thead = document.createElement("thead");
-  tbl.appendChild(thead);
-  tbody = document.createElement("tbody");
-  tbl.appendChild(tbody);
-
-  rhead = thead.insertRow(thead.rows.length);
-  add_blocks_header(rhead, "", true);
-  add_blocks_header(rhead, "Name", false, "pop_seq_name");
-  add_blocks_header(rhead, make_pv_text(), false, "pop_seq_pvalue");
-  add_blocks_header(rhead, "Motif Location", false, "pop_motif_location");
-
-  container.appendChild(outer_tbl);
-
-  
-  seq_count = data["sequence_db"]["sequences"].length;
-  in_view = Math.max(Math.ceil(view_height / 25), 1);
-  i = append_blocks_entries(tbody, 0, in_view);
-
-  while (i < seq_count && inner_tbl.scrollHeight - (inner_tbl.scrollTop + inner_tbl.offsetHeight) < 400) {
-    i = append_blocks_entries(tbody, i, 20);
-  }
-  inner_tbl.data_blocks_index = i;
-  if (i < seq_count) {
-    inner_tbl.addEventListener('scroll', make_blocks_entries, false);
-  }
-}
-
-function make_scan_popup(site, motif) {
-  return function (e) {
-    "use strict";
-    var pop, xy, padding, edge_padding, pop_left, pop_top, page_width;
-    var lflank, match, rflank, pspm;
-    if (!e) var e = window.event;
-    pop = make_scan_popup.pop;
-    if (e.type === "mouseover") {
-      if (pop) return;
-      pop = clone_template("tmpl_scan_info");
-      pspm = new Pspm(motif.pwm);
-      if (site.rc) pspm.reverse_complement(meme_alphabet);
-      set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"className": "scan_logo"}));
-      set_tvar(pop, "tvar_motif", motif.id);
-      set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2));
-      set_tvar(pop, "tvar_start", site.pos + 1);
-      set_tvar(pop, "tvar_end", site.pos + motif.len);
-
-      document.body.appendChild(pop);
-      position_popup(this, pop);
-      make_scan_popup.pop = pop;
-    } else if (e.type === "mouseout") {
-      if (pop) {
-        pop.parentNode.removeChild(pop);
-        make_scan_popup.pop = null;
-      }
-    }
-  };
-}
-
-function make_block_popup(site, motif, block) {
-  return function (e) {
-    "use strict";
-    var pop;
-    var lflank, match, rflank, pspm, ruler, match_seq, match_width;
-    if (!e) var e = window.event;
-    pop = make_block_popup.pop;
-    if (e.type === "mouseover") {
-      if (pop) return;
-      pop = clone_template("tmpl_block_info");
-      pspm = new Pspm(motif.pwm);
-      if (site.rc) { // must be dna
-        pspm.reverse_complement(meme_alphabet);
-        lflank = meme_alphabet.invcomp_seq(site.rflank);
-        match = meme_alphabet.invcomp_seq(site.match);
-        rflank = meme_alphabet.invcomp_seq(site.lflank);
-      } else {
-        lflank = site.lflank;
-        match = site.match;
-        rflank = site.rflank;
-      }
-      ruler = document.getElementById("measure_match");
-      match_seq = make_seq(meme_alphabet, match);
-      ruler.innerHTML = "";
-      ruler.appendChild(match_seq);
-      match_width = ruler.clientWidth;
-      ruler.removeChild(match_seq);
-      set_tvar(pop, "tvar_lflank", lflank);
-      set_tvar(pop, "tvar_match", match_seq);
-      set_tvar(pop, "tvar_rflank", rflank);
-      set_tvar(pop, "tvar_logo_pad", lflank);
-      set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"width": match_width}));
-      set_tvar(pop, "tvar_motif", motif.id);
-      set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2));
-      set_tvar(pop, "tvar_start", site.pos + 1);
-      set_tvar(pop, "tvar_end", site.pos + motif.len);
-
-      document.body.appendChild(pop);
-      position_popup(block, pop);
-      make_block_popup.pop = pop;
-    } else if (e.type === "mouseout") {
-      if (pop) {
-        pop.parentNode.removeChild(pop);
-        make_block_popup.pop = null;
-      }
-    }
-  };
-}
-
-function update_outpop_format(index) {
-  switch(parseInt($("text_format").value)) {
-    case 0: // count matrix
-      $("outpop_text").value = motif_count_matrix(index);
-      $("text_name").value = "motif_" + (index + 1) + "_counts.txt";
-      break;
-    case 1: // prob matrix
-      $("outpop_text").value = motif_prob_matrix(index);
-      $("text_name").value = "motif_" + (index + 1) + "_freqs.txt";
-      break;
-    case 2: // minimal meme
-      $("outpop_text").value = motif_minimal_meme(index);
-      $("text_name").value = "motif_" + (index + 1) + ".txt";
-      break;
-    case 3: // fasta
-      $("outpop_text").value = motif_fasta(index);
-      $("text_name").value = "motif_" + (index + 1) + "_fasta.txt";
-      break;
-    case 4: // raw
-      $("outpop_text").value = motif_raw(index);
-      $("text_name").value = "motif_" + (index + 1) + "_raw.txt";
-      break;
-    default:
-      throw new Error("Unknown motif format");
-  }
-}
-
-function update_outpop_motif(index) {
-  "use strict";
-  var motifs, motif, pspm, logo, canvas, num;
-  motifs = data["motifs"];
-  if (index < 0 || index >= motifs.length) {return;}
-  current_motif = index;
-  motif = motifs[index];
-  pspm = new Pspm(motif["pwm"]);
-  logo = new Logo(meme_alphabet, "");
-  logo.add_pspm(pspm, 0);
-  canvas = $("outpop_logo");
-  canvas.width = canvas.width; // clear canvas
-  draw_logo_on_canvas(logo, canvas, false);
-  if (meme_alphabet.has_complement()) {
-    pspm.reverse_complement(meme_alphabet);
-    logo = new Logo(meme_alphabet, "");
-    canvas = $("outpop_logo_rc");
-    canvas.width = canvas.width; // clear canvas
-    draw_logo_on_canvas(logo, canvas, false);
-  }
-  num = $("outpop_num");
-  num.innerHTML = "";
-  num.appendChild(document.createTextNode("" + (index + 1)));
-  update_outpop_format(index);
-}
-
-//
-// action_show_more
-//
-// Show more information on the motif.
-///
-function action_show_more(e) {
-  var node, tr, tbody, table, container, motif, ordinal;
-  var expanded_motif;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  // find the row that contains the cell
-  node = this;
-  do {
-    if (node.tagName === "TR") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find row!?");
-  tr = node;
-  // get info
-  motif = tr.data_motif;
-  ordinal = tr.data_ordinal;
-  // find tbody
-  do {
-    if (node.tagName === "TBODY") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find tbody!?");
-  tbody = node;
-  // find table
-  do {
-    if (node.tagName === "TABLE") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find table!?");
-  table = node;
-  // find container
-  container = node.parentNode;
-  // make a expanded motif
-  motif["expanded"] = true;
-  expanded_motif = make_expanded_motif(meme_alphabet, ordinal, motif, 
-      container.data_more_x, container.data_submit_x);
-  // now determine how to place it
-  if (tbody.rows.length === 1) {
-    // only us in the table so the table can be replaced
-    container.replaceChild(expanded_motif, table);
-  } else if (tbody.rows[0] === tr) {
-    // first row, so remove and insert an expanded motif before
-    table.deleteRow(tr.rowIndex);
-    container.insertBefore(expanded_motif, table);
-  } else if (tbody.rows[tbody.rows.length -1] === tr) {
-    // last row, so remove and insert an expanded motif after
-    table.deleteRow(tr.rowIndex);
-    container.insertBefore(expanded_motif, table.nextSibling);
-  } else {
-    var table2, tbody2;
-    table2 = table.cloneNode(false);
-    table2.appendChild(table.tHead.cloneNode(true));
-    tbody2 = table.tBodies[0].cloneNode(false);
-    table2.appendChild(tbody2);
-    container.insertBefore(table2, table.nextSibling);
-    for (i = tbody.rows.length - 1; i >= 0; i--) {
-      row = tbody.rows[i];
-      row.parentNode.removeChild(row);
-      if (row === tr) {
-        break;
-      }
-      tbody2.insertBefore(row, tbody2.rows[0]);
-    }
-    container.insertBefore(expanded_motif, table2);
-  }
-  find_child(expanded_motif, "tvar_less").focus();
-}
-
-//
-// action_show_less
-//
-// Show less information on the motif.
-///
-function action_show_less(e) {
-  var btn;
-  var expanded_motif, container, motif, ordinal, colw, focus_target;
-  var table, tbody, tbody2, row, table_before, table_after;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  btn = this;
-  // find expanded motif
-  expanded_motif = find_parent(btn, "expanded_motif");
-  if (!expanded_motif) throw new Error("Expected expanded motif.");
-  // find the container
-  container = expanded_motif.parentNode;
-  // get data
-  motif = expanded_motif.data_motif;
-  ordinal = expanded_motif.data_ordinal;
-  colw = container.data_colw;
-  // get the table before
-  table_before = expanded_motif.previousSibling;
-  if (table_before && table_before.tagName !== "TABLE") {
-    table_before = null;
-  }
-  // get the table after
-  table_after = expanded_motif.nextSibling;
-  if (table_after && table_after.tagName !== "TABLE") {
-    table_after = null;
-  }
-  // see if there is a table below or above that we can put this in.
-  // if there is a table both below and above then add this motif and
-  // all ones below to the above table
-  motif["expanded"] = false;
-  if (table_before && table_after) {
-    tbody = table_before.tBodies[0];
-    row = tbody.insertRow(tbody.rows.length);
-    make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw);
-    focus_target = find_child(row.cells[5], "sym_btn");
-    container.removeChild(expanded_motif);
-    tbody2 = table_after.tBodies[0];
-    while (tbody2.rows.length > 0) {
-      row = tbody2.rows[0];
-      row.parentNode.removeChild(row);
-      tbody.appendChild(row);
-    }
-    container.removeChild(table_after);
-  } else if (table_before) {
-    tbody = table_before.tBodies[0];
-    row = tbody.insertRow(tbody.rows.length);
-    make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw);
-    focus_target = find_child(row.cells[5], "sym_btn");
-    container.removeChild(expanded_motif);
-  } else if (table_after) {
-    tbody = table_after.tBodies[0];
-    row = tbody.insertRow(0);
-    make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw);
-    focus_target = find_child(row.cells[5], "sym_btn");
-    container.removeChild(expanded_motif);
-  } else {
-    //no table above or below!
-    // make a new table
-    table = make_motifs_table(meme_alphabet, ordinal, [motif], colw, data["stop_reason"]);
-    focus_target = find_child(table.tBodies[0].rows[0].cells[5], "sym_btn");
-    container.replaceChild(table, expanded_motif);
-  }
-  focus_target.focus();
-}
-
-function action_show_outpop(e) {
-  "use strict";
-  function init() {
-    "use strict";
-    var close_btn, next_btn, prev_btn, cancel_btn, do_btn;
-    var tab1, tab2, tab3;
-    var pnl1, pnl2, pnl3;
-    var format_list;
-    var tbl_submit, inputs, i, default_prog;
-    close_btn = $("outpop_close");
-    close_btn.addEventListener("click", action_hide_outpop, false);
-    close_btn.addEventListener("keydown", action_hide_outpop, false);
-    next_btn = $("outpop_next");
-    next_btn.addEventListener("click", action_outpop_next, false);
-    next_btn.addEventListener("keydown", action_outpop_next, false);
-    prev_btn = $("outpop_prev");
-    prev_btn.addEventListener("click", action_outpop_prev, false);
-    prev_btn.addEventListener("keydown", action_outpop_prev, false);
-    cancel_btn = $("outpop_cancel");
-    cancel_btn.addEventListener("click", action_hide_outpop, false);
-    do_btn = $("outpop_do");
-    do_btn.addEventListener("click", action_outpop_submit, false);
-    tab1 = $("outpop_tab_1");
-    tab1.tabIndex = 0;
-    tab1.addEventListener("click", action_outpop_tab, false);
-    tab1.addEventListener("keydown", action_outpop_tab, false);
-    tab2 = $("outpop_tab_2");
-    tab2.tabIndex = 0;
-    tab2.addEventListener("click", action_outpop_tab, false);
-    tab2.addEventListener("keydown", action_outpop_tab, false);
-    tab3 = $("outpop_tab_3");
-    tab3.tabIndex = 0;
-    tab3.addEventListener("click", action_outpop_tab, false);
-    tab3.addEventListener("keydown", action_outpop_tab, false);
-    pnl1 = $("outpop_pnl_1");
-    pnl2 = $("outpop_pnl_2");
-    pnl3 = $("outpop_pnl_3");
-    toggle_class(tab1, "activeTab", true);
-    toggle_class(tab2, "activeTab", false);
-    toggle_class(tab3, "activeTab", false);
-    pnl1.style.display = "block";
-    pnl2.style.display = "none";
-    pnl3.style.display = "none";
-    format_list = $("text_format");
-    format_list.addEventListener("change", action_outpop_format, false);
-    // setup program selection
-    tbl_submit = $("programs");
-    // when not dna, hide the inputs for programs that require dna motifs
-    toggle_class(tbl_submit, "alphabet_dna", meme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets
-    // add a click listener for the radio buttons
-    inputs = tbl_submit.querySelectorAll("input[type='radio']");
-    for (i = 0; i < inputs.length; i++) {
-      inputs[i].addEventListener("click", action_outpop_program, false);
-    }
-    // ensure that a default program option is selected for DNA and Protein
-    default_prog = document.getElementById(meme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); //TODO FIXME Tomtom might require a more strict definition of DNA
-    default_prog.checked = true;
-    action_outpop_program.call(default_prog);
-    // disable reverse-complement when not DNA
-    $("logo_rc_option").disabled = !meme_alphabet.has_complement(); 
-    // set errorbars on when ssc is on
-    $("logo_ssc").addEventListener("change", action_outpop_ssc, false);
-  }
-  var node;
-  // store the focused element
-  action_hide_outpop.last_active = document.activeElement;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  // hide the help popup
-  help_popup();
-  // on first load initilize the popup
-  if (!action_show_outpop.ready) {
-    init();
-    action_show_outpop.ready = true;
-  }
-  // load the motif logo
-  node = this;
-  do {
-    if (/\bexpanded_motif\b/.test(node.className) || node.tagName === "TR") break;
-  } while (node = node.parentNode);
-  if (node === null) throw new Error("Expected node!");
-  update_outpop_motif(node.data_ordinal - 1);
-  // display the download popup
-  $("grey_out_page").style.display = "block";
-  $("download").style.display = "block";
-  $("outpop_close").focus();
-}
-
-function action_hide_outpop(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  $("download").style.display = "none";
-  $("grey_out_page").style.display = "none";
-  if (typeof action_hide_outpop.last_active !== "undefined") {
-    action_hide_outpop.last_active.focus();
-  }
-}
-
-function action_outpop_next(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif + 1);
-}
-
-function action_outpop_prev(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif - 1);
-}
-
-function action_outpop_program() {
-  "use strict";
-  var table, tr, rows, i;
-  tr = find_parent_tag(this, "TR");
-  table = find_parent_tag(tr, "TABLE");
-  rows = table.querySelectorAll("tr");
-  for (i = 0; i < rows.length; i++) {
-    toggle_class(rows[i], "selected", rows[i] === tr);
-  }
-}
-
-function action_outpop_ssc() {
-  "use strict";
-  $("logo_err").value = $("logo_ssc").value;
-}
-
-function action_outpop_submit(e) {
-  "use strict";
-  var form, input, program, motifs;
-  // find out which program is selected
-  var radios, i;
-  radios = document.getElementsByName("program");
-  program = "fimo"; // default to fimo, since it works with all alphabet types
-  for (i = 0; i < radios.length; i++) {
-    if (radios[i].checked) program = radios[i].value;
-  }
-
-  motifs = motif_minimal_meme(current_motif);
-  form = document.createElement("form");
-  form.setAttribute("method", "post");
-  form.setAttribute("action", site_url + "/tools/" + program);
-  
-  input = document.createElement("input");
-  input.setAttribute("type", "hidden");
-  input.setAttribute("name", "motifs_embed");
-  input.setAttribute("value", motifs);
-  form.appendChild(input);
-
-  document.body.appendChild(form);
-  form.submit();
-  document.body.removeChild(form);
-}
-
-function action_outpop_download_motif(e) {
-  $("text_form").submit();
-}
-
-function action_outpop_download_logo(e) {
-  "use strict";
-  $("logo_motifs").value = motif_minimal_meme(current_motif);
-  $("logo_form").submit();
-}
-
-function action_btn_rc(e) {
-  "use strict";
-  var node, tr, motif, box, logo_box, tab_st, tab_rc, rc;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  node = this;
-  do {
-    if (node.tagName === "TR") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find row!?");
-  tr = node;
-  // get info
-  motif = tr.data_motif;
-  box = find_parent(this, "preview_box");
-  logo_box = find_child(box, "preview_logo_box");
-  tab_st = find_child(box, "plus");
-  tab_rc = find_child(box, "minus");
-  rc = (this === tab_rc);
-  motif["rc"] = rc;
-  toggle_class(logo_box, "show_rc_logo", rc);
-  toggle_class(tab_st, "active", !rc);
-  toggle_class(tab_rc, "active", rc);
-}
-
-function action_rc_tab(e) {
-  "use strict";
-  var box, logo_box, tab_st, tab_rc, rc;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  box = find_parent(this, "expanded_motif");
-  logo_box = find_child(box, "tvar_logo");
-  tab_st = find_child(box, "tvar_tab");
-  tab_rc = find_child(box, "tvar_tab_rc");
-  rc = (this === tab_rc);
-  box.data_motif["rc"] = rc;
-  toggle_class(logo_box, "show_rc_logo", rc);
-  toggle_class(tab_st, "activeTab", !rc);
-  toggle_class(tab_rc, "activeTab", rc);
-}
-
-function action_outpop_tab(e) {
-  "use strict";
-  var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  tab1 = $("outpop_tab_1");
-  tab2 = $("outpop_tab_2");
-  tab3 = $("outpop_tab_3");
-  pnl1 = $("outpop_pnl_1");
-  pnl2 = $("outpop_pnl_2");
-  pnl3 = $("outpop_pnl_3");
-  do_btn = $("outpop_do");
-
-  toggle_class(tab1, "activeTab", (this === tab1));
-  toggle_class(tab2, "activeTab", (this === tab2));
-  toggle_class(tab3, "activeTab", (this === tab3));
-  pnl1.style.display = ((this === tab1) ? "block" : "none");
-  pnl2.style.display = ((this === tab2) ? "block" : "none");
-  pnl3.style.display = ((this === tab3) ? "block" : "none");
-  do_btn.value = ((this === tab1) ? "Submit" : "Download");
-  do_btn.removeEventListener("click", action_outpop_submit, false);
-  do_btn.removeEventListener("click", action_outpop_download_logo, false);
-  do_btn.removeEventListener("click", action_outpop_download_motif, false);
-  if (this === tab1) {
-    do_btn.addEventListener("click", action_outpop_submit, false);
-  } else if (this === tab2) {
-    do_btn.addEventListener("click", action_outpop_download_motif, false);
-  } else {
-    do_btn.addEventListener("click", action_outpop_download_logo, false);
-  }
-}
-
-function action_seqs_filter() {
-  "use strict";
-  var block_container;
-  block_container = $("blocks");
-  if ($("rdo_all_seqs").checked) {
-    toggle_class(block_container, "hide_empty_seqs", false);
-    toggle_class(block_container, "hide_only_scan", false);
-  } else if ($("rdo_sites_and_scan").checked) {
-    toggle_class(block_container, "hide_empty_seqs", true);
-    toggle_class(block_container, "hide_only_scan", false);
-  } else if ($("rdo_sites_only").checked) {
-    toggle_class(block_container, "hide_empty_seqs", true);
-    toggle_class(block_container, "hide_only_scan", true);
-  }
-}
-
-function action_outpop_format() {
-  update_outpop_format(current_motif);
-}
-
-//
-// page_loaded
-//
-// Called when the page has loaded for the first time.
-///
-function page_loaded() {
-  post_load_setup();
-}
-
-//
-// page_loaded
-//
-// Called when a cached page is reshown.
-///
-function page_shown(e) {
-  if (e.persisted) post_load_setup();
-}
-
-//
-// page_loaded
-//
-// Called when the page is resized
-///
-function page_resized() {
-  var page, blocks_scroll;
-  update_scroll_pad();
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  blocks_scroll = $("blocks_scroll");
-  if (blocks_scroll) {
-    blocks_scroll.style.maxHeight = Math.max(page.clientHeight - 300, 300) + "px";
-  }
-}
-
-//
-// pre_load_setup
-//
-// Run before the page is displayed
-///
-function pre_load_setup() {
-  var start, hue, sat, light, divisions;
-  var i, j, motifs, motif, sites, site, sequences, sequence;
-  var max_seq_len;
-  motifs = data["motifs"];
-  sequences = data["sequence_db"]["sequences"];
-  max_seq_len = 1;
-  for (i = 0; i < sequences.length; i++) {
-    sequence = sequences[i];
-    sequence["sites"] = [];
-    if (sequence["length"] > max_seq_len) {
-      max_seq_len = sequence["length"];
-    }
-  }
-  data["sequence_db"]["max_length"] = max_seq_len;
-  // use hsl colours
-  start = 0; //red
-  sat = 100;
-  light = 50;
-  for (i = 0; i < motifs.length; i++) {
-    motif = motifs[i];
-    // give the motif a colour
-    divisions = 1 << Math.ceil(Math.log(i + 1) / Math.LN2);
-    hue = start + (360 / divisions) * ((i - (divisions >> 1)) * 2 + 1);
-    motif["colour"] = "hsl(" + hue + ", " + sat + "%, " + light + "%)";
-    // associate sites with sequences as well 
-    // to make generating the block diagram easier
-    sites = motif["sites"];
-    for (j = 0; j < sites.length; j++) {
-      site = sites[j];
-      sequence = sequences[site["seq"]];
-      // record the motif index
-      site["motif"] = i;
-      // add the site to the sequence
-      sequence["sites"].push(site);
-    }
-  }
-}
-
-//
-// post_load_setup
-//
-// Run when the page has loaded, or been reloaded.
-//
-function post_load_setup() {
-  update_scroll_pad();
-  if (data["motifs"].length > 0) {
-    make_motifs();
-    make_blocks();
-  } else {
-    $("motifs").innerHTML = "<p>No significant motifs found!</p>"; // clear content
-    $("motifs").innerHTML += "<p><b>" + data["stop_reason"] + "</b></p>";
-    $("blocks").innerHTML = "<p>No significant motifs found!</p>";
-  }
-}
-
-pre_load_setup();
-</script>
-    <style>
-/* The following is the content of meme.css */
-body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;}
-
-div.help {
-  display: inline-block;
-  margin: 0px;
-  padding: 0px;
-  width: 12px;
-  height: 13px;
-  cursor: pointer;
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==);
-}
-
-div.help:hover {
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==);
-}
-
-p.spaced { line-height: 1.8em;}
-
-span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;}
-
-p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-td.jump { font-size: 13px; color: #ffffff; background-color: #00666a;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps;
-  font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0;
-  font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal;
-  margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal;
-  margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h5 {margin: 0px}
-
-a.help { font-size: 9px; font-style: normal; text-transform: uppercase;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-div.pad1 { margin: 10px 5px;}
-
-div.pad2 { margin: 25px 5px 5px;}
-h2.pad2 { padding: 25px 5px 5px;}
-
-div.pad3 { padding: 5px 0px 10px 30px;}
-
-div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;}
-
-div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; }
-
-div.subsection {margin:25px 0px;}
-
-img {border:0px none;}
-
-th.majorth {text-align:left;}
-th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;}
-th.actionth {font-weight:normal; text-align:left;}
-
-.explain h5 {font-size:1em; margin-left: 1em;}
-
-div.doc {margin-left: 2em; margin-bottom: 3em;}
-
-th.trainingset {
-  border-bottom: thin dashed black; 
-  font-weight:normal; 
-  padding:0px 10px;
-}
-div.pop_content {
-  position:absolute;
-  z-index:50;
-  width:300px;
-  padding: 5px;
-  background: #E4ECEC;
-  font-size: 12px;
-  font-family: Arial;
-  border-style: double;
-  border-width: 3px;
-  border-color: #AA2244;
-  display:none;
-}
-
-div.pop_content > *:first-child {
-  margin-top: 0px;
-}
-
-div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, 
-div.pop_content h5, div.pop_content h6, div.pop_content p {
-  margin: 0px;
-}
-
-div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, 
-div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 {
-  margin-top: 5px;
-}
-
-div.pop_content p + p {
-  margin-top: 5px;
-}
-
-div.pop_content > *:last-child {
-  margin-bottom: 0px;
-}
-
-div.pop_content div.pop_close {
-  /* old definition */
-  float:right;
-  bottom: 0;
-}
-
-div.pop_content span.pop_close, div.pop_content span.pop_back {
-  display: inline-block;
-  border: 2px outset #661429;
-  background-color: #CCC;
-  padding-left: 1px;
-  padding-right: 1px;
-  padding-top: 0px;
-  padding-bottom: 0px;
-  cursor: pointer;
-  color: #AA2244; /*#661429;*/
-  font-weight: bold;
-}
-
-div.pop_content span.pop_close:active, div.pop_content span.pop_back:active {
-  border-style: inset;
-}
-
-div.pop_content span.pop_close {
-  float:right;
-  /*border: 2px outset #AA002B;*/
-  /*color: #AA2244;*/
-}
-
-div.pop_content:not(.nested) .nested_only {
-  display: none;
-}
-
-div.pop_back_sec {
-  margin-bottom: 5px;
-}
-
-div.pop_close_sec {
-  margin-top: 5px;
-}
-
-table.hide_advanced tr.advanced {
-  display: none;
-}
-span.show_more {
-  display: none;
-}
-table.hide_advanced span.show_more {
-  display: inline;
-}
-table.hide_advanced span.show_less {
-  display: none;
-}
-
-
-/*****************************************************************************
- * Program logo styling
- ****************************************************************************/
-div.prog_logo {
-  border-bottom: 0.25em solid #0f5f60;
-  height: 4.5em;
-  width: 24em;
-  display:inline-block;
-}
-div.prog_logo img {
-  float:left;
-  width: 4em;
-  border-style: none;
-  margin-right: 0.2em;
-}
-div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited {
-  margin:0;
-  padding:0;
-  font-family: Arial, Helvetica,  sans-serif;
-  font-size: 3.2em;
-  line-height: 1em;
-  vertical-align: top;
-  display: block;
-  color: #026666;
-  letter-spacing: -0.06em;
-  text-shadow: 0.04em 0.06em 0.05em #666;
-}
-div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited {
-  display: block;
-  margin:0;
-  padding:0;
-  font-family: Helvetica, sans-serif;
-  font-size: 0.9em;
-  line-height: 1em;
-  letter-spacing: -0.06em;
-  color: black;
-}
-
-div.big.prog_logo {
-  font-size: 18px;
-}
-
-</style>
-    <style>
-.block_td {
-  height:25px;
-}
-.block_container {
-  position:relative;
-  box-sizing: border-box;
-  height: 25px;
-  padding: 0px;
-  margin: 0px;
-  margin-left: 1em;
-}
-.block_label {
-  position: absolute; 
-  display: inline-block;
-  padding: 3px;
-  z-index: 4;
-  top: 6px;
-  height: 12px;
-  line-height: 12px;
-  font-size: 12px;
-  background-color: white;
-  border: 1px solid black;
-  -moz-border-radius: 12px;
-  -webkit-border-radius: 12px;
-  border-radius: 12px;
-  transform: translateX(-50%);
-}
-.block_motif {
-  position: absolute; 
-  z-index: 3;
-  top: 0px;
-  box-sizing: border-box;
-  border: 1px solid black;
-  height: 12px;
-  background-color: cyan;
-}
-.block_motif.top {
-  border-bottom-width: 0;
-}
-.block_motif.bottom {
-  border-top-width: 0;
-}
-.block_motif.scanned_site {
-  opacity: 0.3;
-}
-.block_motif.scanned_site.active {
-  opacity: 0.9;
-}
-.block_region {
-  position:absolute; 
-  z-index:6; 
-  height:25px; 
-  top:0px; 
-}
-.block_region.main {
-  z-index:8;
-}
-.block_region.scanned_site {
-  z-index:5;
-}
-.block_region.scanned_site.main {
-  z-index:7;
-}
-.block_region.top {
-  height:13px;
-}
-.block_region.bottom {
-  height:13px;
-  top:12px;
-}
-.block_rule {
-  position:absolute;
-  z-index:2;
-  width:100%;
-  height:1px;
-  top:12px;
-  left:0px;
-  background-color:gray;
-}
-.block_plus_sym {
-  position:absolute;
-  z-index:4;
-  line-height:12px;
-  top:0px;
-  left:-1em;
-}
-.block_minus_sym {
-  position:absolute;
-  z-index:4;
-  line-height:12px;
-  top:13px;
-  left:-1em;
-}
-
-.tic_major {
-  position:absolute;
-  top:0em;
-  height:0.5em;
-  width: 2px;
-  margin-left: -1px;
-  background-color: blue;
-}
-.tic_minor {
-  position:absolute;
-  top:0em;
-  height:0.2em;
-  width: 1px;
-  margin-left: -0.5px;
-  background-color: blue;
-}
-.tic_label {
-  position:absolute;
-  display: inline-block;
-  top:0.5em;
-  height: 1em;
-  color: blue;
-  transform: translateX(-50%);
-}
-
-.block_needle {
-  position:absolute;
-  z-index:4;
-  height:30px; 
-  width:1px; 
-  top:-2px; 
-  background-color:gray;
-}
-.block_needle.right {
-  height: 60px;
-}
-.block_handle {
-  position: absolute; 
-  display: inline-block;
-  z-index: 5; 
-  top: 27px; 
-  min-width: 3ex;
-  text-align: center;
-  font-size: 12px;
-  line-height: 12px;
-  transform: translateX(-50%);
-  background-color: LightGrey; 
-  border:3px outset grey;
-  cursor: pointer;
-  -webkit-user-select: none; /* Chrome/Safari */        
-  -moz-user-select: none; /* Firefox */
-  -ms-user-select: none; /* IE10+ */
-  /* Rules below not implemented in browsers yet */
-  -o-user-select: none;
-  user-select: none;
-}
-.block_handle.right {
-  top: 47px;
-}
-
-.legend_container {
-  text-align: right;
-}
-.legend_entry {
-  display: inline-block;
-  padding: 5px;
-}
-div.legend_swatch {
-  box-sizing: border-box;
-  width: 15px;
-  height: 15px;
-  border: 1px solid black;
-  background-color: cyan;
-  float: left;
-}
-div.legend_swatch input {
-  display: none;
-}
-.legend_text {
-  line-height: 15px;
-  margin-left: 20px;
-}
-</style>
-    <style>
-/* meme output specific css */
-
-div.pop_block {
-  position:absolute;
-  z-index:5;
-  padding: 5px;
-  border: 1px solid black;
-  display: inline-block;
-  background-color: white;
-}
-
-#measure_match {
-  position: absolute;
-  visibility: hidden;
-  height: auto;
-  width: auto;
-  white-space: nowrap;
-}
-
-div.template {
-  position: absolute;
-  z-index: 1;
-  left: 0;
-  top: 0;
-  visibility: hidden;
-}
-
-table.block_information {
-  margin-left: auto;
-  margin-right: auto;
-}
-
-table.block_information * th {
-  text-align: right;
-}
-
-*.hide_empty_seqs * tr.empty_seq {
-  display: none;
-}
-
-*.hide_only_scan * tr.only_scan {
-  display: none;
-}
-
-*.hide_only_scan * div.scanned_site {
-  display: none;
-}
-
-td.symaction {
-  text-align: center;
-  text-decoration: underline;
-  font-size: 20px;
-  cursor: pointer;
-}
-div.sym_btn {
-  display:inline-block;
-  text-decoration: underline;
-  cursor: pointer;
-  font-size: 20px;
-  line-height:20px; 
-  text-align: center;
-  width: 20px;
-  height: 20px;
-  color: blue;
-}
-div.sym_btn:hover {
-  color: white;
-  background-color: blue;
-}
-
-div.sym_btn.positioned {
-  position: absolute;
-  top: 0px;
-}
-
-div.actionbutton { 
-  display:inline-block;
-  cursor: pointer;
-  font-size: 18px;
-  line-height:20px; 
-  padding: 5px; 
-  margin: 10px 0; 
-  border: 1px solid black;
-}
-
-div.actionbutton:hover {
-  color:#FFF;
-  background-color:#000;
-}
-
-div.param_box {
-  display: inline-block;
-  margin-right: 20px;
-}
-
-span.param {
-  font-weight: bold;
-}
-
-div.box + div.box {
-  margin-top: 5px;
-}
-
-div.sites_outer {
-  position: relative;
-  padding-top: 20px; /* height of header */
-  display: inline-block;
-}
-
-div.sites_inner {
-  overflow-x: hidden;
-  overflow-y: auto;
-  max-height: 200px;
-}
-table.sites_tbl {
-  border-collapse: collapse;
-}
-
-div.sites_th_inner {
-  position: absolute;
-  top: 0;
-  line-height: 20px; /* height of header */
-  text-align: left;
-  padding-left: 5px;
-}
-th.nopad div.sites_th_inner {
-  padding-left: 0;
-}
-div.sites_th_hidden {
-  visibility: hidden;
-  height: 0;
-  padding: 0 10px;
-}
-th.nopad div.sites_th_hidden {
-  padding: 0;
-}
-div.sites_inner * th {
-  height: 0;
-}
-
-table.sites_tbl {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.site_num {
-  text-align: right;
-}
-.site_name {
-  padding:0px 5px; 
-  text-align:left;
-}
-.site_strand {
-  padding:0px 5px; 
-  text-align:center;
-}
-.norc .site_strand, .norc .site_strand_title {
-  display: none;
-}
-.site_start {
-  padding:0px 15px; 
-  text-align: right;
-}
-.site_pvalue {
-  text-align:center; 
-  padding:0px 15px; 
-  text-align:right;
-  white-space: nowrap;
-}
-.lflank, .rflank, .match, .alpha_symbol {
-  font-weight:bold; 
-  font-size:15px; 
-  font-family: 'Courier New', Courier, monospace;
-  color:gray; 
-}
-
-.site.lflank {
-  text-align:right; 
-  padding-right:5px; 
-  color:gray;
-}
-.site.match {
-  text-align:center; 
-}
-.site.rflank {
-  text-align:left; 
-  padding-left:5px; 
-  padding-right: 20px;
-}
-
-th.stop_reason {
-  text-align: left;
-  padding-right: 10px;
-}
-
-th.motif_ordinal {
-
-}
-td.motif_ordinal {
-  text-align: right;
-  padding-right: 10px;
-}
-th.motif_logo {
-  padding-right: 10px;
-}
-td.motif_logo {
-  padding-right: 10px;
-}
-th.motif_evalue {
-  text-align:right;
-  padding-right: 10px;
-}
-td.motif_evalue {
-  text-align: right;
-  white-space: nowrap;
-  padding-right: 20px;
-}
-th.motif_nsites {
-  text-align: right;
-  padding-right: 10px;
-}
-td.motif_nsites {
-  text-align: right;
-  padding-right: 20px;
-}
-th.motif_width {
-  text-align: right;
-  padding-right: 5px;
-}
-td.motif_width {
-  text-align: right;
-  padding-right: 15px;
-}
-th.motif_more {
-  padding: 0 5px;
-}
-td.motif_more {
-  text-align: center;
-  padding: 0 5px;
-}
-th.motif_submit {
-  padding: 0 5px;
-}
-td.motif_submit {
-  text-align: center;
-  padding: 0 5px;
-}
-th.motif_download {
-  padding-left: 5px;
-}
-td.motif_download {
-  text-align: center;
-  padding-left: 5px;
-}
-
-
-div.tabArea {
-  font-size: 80%;
-  font-weight: bold;
-}
-
-.norc div.tabArea {
-  display: none;
-}
-
-span.tab, span.tab:visited {
-  cursor: pointer;
-  color: #888;
-  background-color: #ddd;
-  border: 2px solid #ccc;
-  padding: 2px 1em;
-  text-decoration: none;
-}
-span.tab.middle {
-  border-left-width: 0px;
-}
-div.tabArea.base span.tab {
-  border-top-width: 0px;
-}
-div.tabArea.top span.tab {
-  border-bottom-width: 0px;
-}
-
-span.tab:hover {
-  background-color: #bbb;
-  border-color: #bbb;
-  color: #666;
-}
-span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited {
-  background-color: white;
-  color: black;
-  cursor: default;
-}
-div.tabMain {
-  border: 2px solid #ccc;
-  background-color: white;
-  padding: 10px;
-}
-div.tabMain.base {
-  margin-top: 5px;
-  display: inline-block;
-  max-width: 98%;
-}
-
-div.tabMain.top {
-  margin-bottom: 5px;
-}
-
-div.tabCenter {
-  max-width: 100%;
-  overflow-x: auto;
-  height: 200px;
-  overflow-y: hidden;
-}
-
-canvas.logo_rc {
-  display:none;
-}
-.show_rc_logo > canvas {
-  display: none;
-}
-.show_rc_logo > canvas.logo_rc {
-  display: block;
-}
-
-canvas.scan_logo {
-  margin-left: 10px;
-}
-
-div.blocks_outer {
-  position: relative;
-  padding-top: 20px; /* height of header */
-}
-
-div.blocks_inner {
-  overflow-x: hidden;
-  overflow-y: auto;
-  max-height: 200px;
-}
-table.blocks_tbl {
-  border-collapse: collapse;
-  width: 100%;
-}
-
-div.blocks_th_inner {
-  position: absolute;
-  top: 0;
-  line-height: 20px; /* height of header */
-  text-align: left;
-  padding-left: 5px;
-}
-th.nopad div.blocks_th_inner {
-  padding-left: 0;
-}
-div.blocks_th_hidden {
-  visibility: hidden;
-  height: 0;
-  padding: 0 10px;
-}
-th.nopad div.blocks_th_hidden {
-  padding: 0;
-}
-div.blocks_inner * th {
-  height: 0;
-}
-
-table.blocks_tbl {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-td.block_td {
-  width: 99%;
-}
-
-*.blockdiag_num {
-  text-align: right;
-}
-
-td.blockdiag_name {
-  text-align: left;
-  padding:0px 10px; 
-}
-
-td.blockdiag_pvalue {
-  padding:0px 10px; 
-  text-align:right;
-  white-space: nowrap;
-}
-
-div.preview_btn {
-  border: 2px solid white;
-  height: 16px;
-  width: 16px;
-  font-size: 12px;
-  line-height: 16px;
-  text-align: center;
-  cursor: pointer;
-}
-div.preview_btn + div.preview_btn {
-  margin-top: 3px;
-}
-
-div.preview_btn.active {
-  border: 2px solid black;
-  cursor: default;
-}
-
-div.preview_btn:hover {
-  background-color: black;
-  color: white;
-  border-color: black;
-}
-
-div.preview_btn.active:hover {
-  background-color: white;
-  color: black;
-  border-color: black;
-}
-
-
-div.preview_btn_box {
-  position: absolute;
-  left: 0px;
-  top: 0px;
-  padding: 3px;
-}
-
-div.preview_logo_box {
-  height: 50px;
-  overflow-y: hidden;
-}
-
-div.preview_btn_box + div.preview_logo_box {
-  margin-left: 25px;
-}
-
-div.preview_box {
-  position: relative;
-}
-
-div.grey_background {
-  position:fixed; 
-  z-index: 8;
-  background-color: #000;
-  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
-  opacity: 0.5;
-  left: 0;
-  top: 0;
-  width: 100%;
-  height: 100%;
-}
-
-div.popup_wrapper {
-  position:fixed; 
-  z-index:9;
-  width:100%; 
-  height:0; 
-  top:50%; 
-  left:0;
-}
-
-div.popup {
-  width: 600px; 
-  z-index:9;
-  margin-left: auto;
-  margin-right: auto;
-  padding: 5px;
-  background-color: #FFF;
-  border-style: double;
-  border-width: 5px;
-  border-color: #00666a;
-  position:relative; 
-}
-div.close {
-  cursor: pointer;
-  border: 1px solid black; 
-  width:15px; 
-  height:15px; 
-  line-height:15px; /* this causes vertical centering */
-  text-align:center; 
-  background-color:#FFF; 
-  color:#000; 
-  font-size:15px;
-  font-family:monospace;
-}
-
-div.close:hover {
-  color:#FFF;
-  background-color:#000; 
-}
-
-div.navnum {
-  width:100%; 
-  height:20px; 
-  line-height:20px; 
-  text-align:center; 
-  font-size:medium;
-}
-
-div.navarrow {
-  font-size: 30px;
-  text-decoration:none;
-  cursor: pointer;
-  -moz-user-select: none;  
-  -webkit-user-select: none;  
-  -ms-user-select: none;
-}
-
-div.navarrow > span.inactive {
-  display: inline;
-}
-div.navarrow > span.active {
-  display: none;
-}
-
-div.navarrow:hover > span.active {
-  display: inline;
-}
-div.navarrow:hover > span.inactive {
-  display: none;
-}
-
-table.programs {
-  width: 100%;
-}
-
-table.programs tr {
-  background-color: #EFE;
-}
-
-table.programs tr.selected {
-  background-color: #262;
-  color: #FFF;
-}
-
-table.programs tr.dna_only {
-  display: none;
-}
-
-table.programs.alphabet_dna tr.dna_only {
-  display: table-row;
-}
-
-div.programs_scroll {
-  width: 100%; 
-  height: 90px; 
-  overflow-y: auto; 
-  overflow-x: hidden;
-  margin: 0 auto; 
-}
-table.inputs, table.alpha_bg_table {
-  margin-top: 20px;
-  border-collapse:collapse;
-}
-table.inputs * td, table.inputs * th, table.alpha_bg_table * td, table.alpha_bg_table * th {
-  padding-left: 15px;
-  padding-right: 15px;
-  padding-top: 1px;
-  padding-bottom: 1px;
-}
-
-table.hide_psp td.col_psp, table.hide_psp th.col_psp {
-  display: none;
-}
-
-/* program settings */
-span.mod_oops, span.mod_zoops, span.mod_anr {
-  display: none;
-}
-td.oops span.mod_oops,td.zoops span.mod_zoops, td.anr span.mod_anr  {
-  display: inline;
-}
-span.strand_none, span.strand_given, span.strand_both {
-  display: none;
-}
-td.none span.strand_none, td.given span.strand_given, td.both span.strand_both {
-  display: inline;
-}
-span.spmap_uni, span.spmap_pam {
-  display: none;
-}
-td.uni span.spmap_uni, td.pam span.spmap_pam {
-  display: inline;
-}
-span.prior_dirichlet, span.prior_dmix, span.prior_mega, span.prior_megap, span.prior_addone {
-  display: none;
-}
-td.dirichlet span.prior_dirichlet, td.dmix span.prior_dmix, td.mega span.prior_mega,
-td.megap span.prior_megap, td.addone span.prior_addone {
-  display: inline;
-}
-span.noendgaps_on, span.noendgaps_off {
-  display: none;
-}
-td.on span.noendgaps_on, td.off span.noendgaps_off {
-  display: inline;
-}
-span.substring_on, span.substring_off {
-  display: none;
-}
-td.on span.substring_on, td.off span.substring_off {
-  display: inline;
-}
-</style>
-  </head>
-  <body onload="page_loaded()" onpageshow="page_shown(event)" onresize="page_resized()">
-    <!--  -->
-    <div id="grey_out_page" class="grey_background" style="display:none;">
-    </div>
-    <!-- Help popups -->
-    <div class="pop_content" id="pop_">
-      <p>Help poup.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_ev">
-      <p>The statistical significance of the motif. MEME usually finds the most
-      statistically significant (low E-value) motifs first. It is unusual to
-      consider a motif with an E-value larger than 0.05 significant so, as an
-      additional indicator, MEME displays these partially transparent.</p> 
-      <p>The E-value of a motif is based on its log likelihood ratio, width,
-      sites, the background letter frequencies (given in the command line
-      summary), and the size of the training set.</p>
-      <p>The E-value is an estimate of the expected number of motifs with the
-      given log likelihood ratio (or higher), and with the same width and site
-      count, that one would find in a similarly sized set of random
-      sequences (sequences where each position is independent and letters are
-      chosen according to the background letter frequencies).</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_sites">
-      <p>The number of sites contributing to the construction of the motif.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_width">
-      <p>The width of the motif. Each motif describes a pattern of a fixed
-      width, as no gaps are allowed in MEME motifs.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_more">
-      <p>Click on the blue symbol below to reveal more information about this motif.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_submit_dl">
-      <p>Click on the blue symbol below to reveal options allowing you
-      to submit this motif to another MEME Suite motif analysis program, to download this
-      motif in various text formats, or to download a sequence "logo" of
-      this motif PNG or EPS format.</p>
-      <h5>Supported Programs</h5>
-      <dl>
-        <dt>Tomtom</dt>
-        <dd>Tomtom is a tool for searching for similar known motifs. 
-          [<a href="http://meme-suite.org/doc/tomtom.html?man_type=web">manual</a>]</dd>
-        <dt>MAST</dt>
-        <dd>MAST is a tool for searching biological sequence databases for 
-          sequences that contain one or more of a group of known motifs.
-          [<a href="http://meme-suite.org/doc/mast.html?man_type=web">manual</a>]</dd>
-        <dt>FIMO</dt>
-        <dd>FIMO is a tool for searching biological sequence databases for 
-          sequences that contain one or more known motifs.
-          [<a href="http://meme-suite.org/doc/fimo.html?man_type=web">manual</a>]</dd>
-        <dt>GOMO</dt>
-        <dd>GOMO is a tool for identifying possible roles (Gene Ontology 
-          terms) for DNA binding motifs.
-          [<a href="http://meme-suite.org/doc/gomo.html?man_type=web">manual</a>]</dd>
-        <dt>SpaMo</dt>
-        <dd>SpaMo is a tool for inferring possible transcription factor
-          complexes by finding motifs with enriched spacings.
-          [<a href="http://meme-suite.org/doc/spamo.html?man_type=web">manual</a>]</dd>
-      </dl>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_llr">
-      <p>The log likelihood ratio of the motif.The log likelihood ratio is the 
-      logarithm of the ratio of the probability of the occurrences of the motif
-      given the motif model (likelihood given the motif) versus their
-      probability given the background model (likelihood given the null model).
-      (Normally the background model is a 0-order Markov model using the
-      background letter frequencies, but higher order Markov models may be
-      specified via the -bfile option to MEME.).</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_ic">
-      <p>The information content of the motif in bits. It is equal to the sum
-      of the uncorrected information content, R(), in the columns of the pwm.
-      This is equal relative entropy of the motif relative to a uniform
-      background frequency model.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_re">
-      <p>The relative entropy of the motif.</p>
-
-      <p style="font-family: monospace;">re = llr / (sites * ln(2))</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_bt">
-      <p>The Bayes Threshold.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_strand">
-      <p>The strand used for the motif site.</p>
-      <dl>
-        <dt>+</dt>
-        <dd>The motif site was found in the sequence as it was supplied.</dd>
-        <dt>-</dt>
-        <dd>The motif site was found in the reverse complement of the supplied sequence.</dd>
-      </dl>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_start">
-      <p>The position in the sequence where the motif site starts. If a motif
-      started right at the begining of a sequence it would be described as
-      starting at position 1.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_pvalue">
-      <p>The probability that an equal or better site would be found in a
-      random sequence of the same length conforming to the background letter
-      frequencies.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_match">
-      <p>A motif site with the 10 flanking letters on either side.</p> 
-      <p>When the site is not on the given strand then the site
-      and both flanks are reverse complemented so they align.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_name">
-      <p>The name of the sequences as given in the FASTA file.</p>
-      <p>The number to the left of the sequence name is the ordinal
-      of the sequence.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_motif_sites">
-      <p>These are the motif sites predicted by MEME and used to build the motif.</p>
-      <p>These sites are shown in solid color and hovering the cursor
-      over a site will reveal details about the site.  Only sequences
-      that contain a motif site are shown.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_scanned_sites">
-      <p>These are the motif sites predicted by MEME plus
-      any additional sites detected using a motif scanning
-      algorithm.</p>
-      <p>These MEME sites are shown in solid color and 
-      additional scanned sites are shown in transparent color.
-      Hovering the cursor over a site will reveal details about the site.
-      Only sequences containing a predicted or scanned motif site are shown.</p>
-      <p>The scanned sites are predicted using a
-      log-odds scoring matrix constructed from the MEME sites.
-      Only scanned sites with position <i>p</i>-values less
-      than 0.0001 are shown.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_all_sequences">
-      <p>These are the same sites as shown by selecting the
-      "Motif Sites + Scanned Sites" button except that all
-      sequences, including those with no sites, are included
-      in the diagram.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_pvalue">
-      <p>This is the combined match <i>p</i>-value.</p>
-      <p>The combined match <i>p</i>-value is defined as the probability that a
-      random sequence (with the same length and conforming to the background) 
-      would have position <i>p</i>-values such that the product is smaller
-      or equal to the value calulated for the sequence under test.</p>
-      <p>The position <i>p</i>-value is defined as the probability that a
-      random sequence (with the same length and conforming to the background)
-      would have a match to the motif under test with a score greater or equal
-      to the largest found in the sequence under test.</p>
-      <p>Hovering your mouse over a motif site in the motif location 
-      block diagram will show its position <i>p</i>-value and other information
-      about the site.</p>
-       
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_location">
-      <p>This diagram shows the location of motif sites.</p>
-      <p>Each block shows the position and strength of a motif
-      site.  The height of a block gives an indication of the 
-      significance of the site as taller blocks are more significant. 
-      The height is calculated to be proportional to the negative 
-      logarithm of the <i>p</i>-value of the site, truncated at 
-      the height for a <i>p</i>-value of 1e-10.</p>
-      <p>For complementable alphabets (like DNA), sites on the 
-      positive strand are shown above the line,
-      sites on the negative strand are shown below.</p>
-      <p>Placing the cursor
-      over a motif site will reveal more information about the site
-      including its position <i>p</i>-value.  (See the help
-      for the <i>p</i>-value column for an explanation of position 
-      <i>p</i>-values.)</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_source">
-      <p>The name of the file of sequences input to MEME.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_psp_source">
-      <p>The position specific priors file used by MEME to find the motifs.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_alph">
-      <p>The alphabet used by the sequences.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_count">
-      <p>The number of sequences provided as input to MEME.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_alph_name">
-      <p>The name of the alphabet symbol.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_alph_freq">
-      <p>The frequency of the alphabet symbol in the dataset with a pseudocount
-      so it is never zero.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_alph_bg">
-      <p>The frequency of the alphabet symbol as defined by the background model.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <!-- templates -->
-    <div id="measure_match" class="match"></div>
-    <div class="template pop_block" id="tmpl_block_info">
-      <div>
-        <span class="tvar_logo_pad lflank" style="visibility:hidden;"></span>
-        <span class="tvar_logo"></span>
-      </div>
-      <div class="block_sequence_fragment">
-        <span class="tvar_lflank lflank"></span>
-        <span class="tvar_match match"></span>
-        <span class="tvar_rflank rflank"></span>
-      </div>
-      <table class="block_information">
-        <tr><th>Motif</th><td class="tvar_motif">1</td></tr>
-        <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr>
-        <tr><th>Start</th><td class="tvar_start">23</td></tr>
-        <tr><th>End</th><td class="tvar_end">33</td></tr>
-      </table>
-    </div>
-
-    <div class="template pop_block" id="tmpl_scan_info">
-      <h5>Scanned Site</h5>
-      <div class="tvar_logo"></div>
-      <table class="block_information">
-        <tr><th>Motif</th><td class="tvar_motif">1</td></tr>
-        <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr>
-        <tr><th>Start</th><td class="tvar_start">23</td></tr>
-        <tr><th>End</th><td class="tvar_end">33</td></tr>
-      </table>
-    </div>
-
-    <div class="template box expanded_motif" id="tmpl_motif_expanded">
-      <div style="position: relative; min-height: 20px">
-        <div class="param_box">
-          <span class="param"><span class="tvar_ordinal"></span>.</span>
-        </div>
-        <div class="sym_btn positioned tvar_less" tabindex="0" 
-          title="Show less information.">&#8613;</div>
-        <div class="sym_btn positioned tvar_submit" tabindex="0"
-          title="Submit the motif to another MEME Suite program or download it.">&#8674;</div>
-      </div>
-      <div>
-        <div class="param_box">
-          <span class="param"><i>E</i>-value:</span>
-          <span class="tvar_evalue"></span>
-          <div class="help" data-topic="pop_ev"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Site Count:</span>
-          <span class="tvar_site_count"></span>
-          <div class="help" data-topic="pop_sites"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Width:</span>
-          <span class="tvar_width"></span>
-          <div class="help" data-topic="pop_width"></div>
-        </div>
-      </div>
-      <div class="tabMain base">
-        <div class="tabCenter tvar_logo"></div>
-      </div>
-      <div class="tabArea base">
-        <span class="tvar_tab tab" tabindex="0">Standard</span><span 
-          class="tvar_tab_rc tab middle" tabindex="0">Reverse 
-          Complement</span>
-      </div>
-      <div style="padding: 10px 0">
-        <div class="param_box">
-          <span class="param">Log Likelihood Ratio:</span>
-          <span class="tvar_llr"></span>
-          <div class="help" data-topic="pop_llr"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Information Content:</span>
-          <span class="tvar_ic"></span>
-          <div class="help" data-topic="pop_ic"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Relative Entropy:</span>
-          <span class="tvar_re"></span>
-          <div class="help" data-topic="pop_re"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Bayes Threshold:</span>
-          <span class="tvar_bt"></span>
-          <div class="help" data-topic="pop_bt"></div>
-        </div>
-      </div>
-      <div class="tvar_sites"></div>
-    </div>
-
-
-    <div class="popup_wrapper">
-      <div class="popup" style="display:none; top: -150px;" id="download">
-        <div>
-          <div style="float:right; ">
-            <div id="outpop_close" class="close" tabindex="0">x</div>
-          </div>
-          <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2>
-          <div style="clear:both"></div>
-        </div>
-          <div style="height:100px">
-            <div style="float:right; width: 30px;">
-              <div id="outpop_prev" class="navarrow" tabindex="0">
-                <span class="inactive">&#8679;</span><span class="active">&#11014;</span>
-              </div>
-              <div id="outpop_num" class="navnum"></div>
-              <div id="outpop_next" class="navarrow" tabindex="0">
-                <span class="inactive">&#8681;</span><span class="active">&#11015;</span>
-              </div>
-            </div>
-            <div id="logo_box" style="height: 100px; margin-right: 40px;">
-              <canvas id="outpop_logo" height="100" width="580"></canvas>
-              <canvas id="outpop_logo_rc" class="logo_rc" height="100" width="580"></canvas>
-            </div>
-          </div>
-          <div>
-            <!-- tabs start -->
-            <div class="tabArea top">
-              <span id="outpop_tab_1" class="tab">Submit Motif</span><span
-                id="outpop_tab_2" class="tab middle">Download Motif</span><span 
-                id="outpop_tab_3" class="tab middle">Download Logo</span>
-            </div>
-            <div class="tabMain top">
-              <!-- Submit to another program -->
-              <div id="outpop_pnl_1">
-                <h4 class="compact">Submit to program</h4>
-                <table id="programs" class="programs">
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td>
-                    <td><label for="submit_tomtom">Tomtom</label></td>
-                    <td><label for="submit_tomtom">Find similar motifs in
-                        published libraries or a library you supply.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td>
-                    <td><label for="submit_fimo">FIMO</label></td>
-                    <td><label for="submit_fimo">Find motif occurrences in
-                        sequence data.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="mast" id="submit_mast"></td>
-                    <td><label for="submit_mast">MAST</label></td>
-                    <td><label for="submit_mast">Rank sequences by affinity to
-                        groups of motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td>
-                    <td><label for="submit_gomo">GOMo</label></td>
-                    <td><label for="submit_gomo">Identify possible roles (Gene
-                        Ontology terms) for motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td>
-                    <td><label for="submit_spamo">SpaMo</label></td>
-                    <td><label for="submit_spamo">Find other motifs that are
-                        enriched at specific close spacings which might imply the existance of a complex.</label></td>
-                  </tr>
-                </table>
-              </div>
-              <!-- download text format  -->
-              <div id="outpop_pnl_2">
-                <div>
-                  <label for="text_format">Format:</label>
-                  <select id="text_format">
-                    <option value="0">Count Matrix</option>
-                    <option value="1">Probability Matrix</option>
-                    <option value="2">Minimal MEME</option>
-                    <option value="3">FASTA</option>
-                    <option value="4">Raw</option>
-                  </select>
-                </div>
-                <form id="text_form" method="post" action="">
-                  <script>$("text_form").action = site_url + "/utilities/save_generated_file";</script>
-                  <input type="hidden" id="text_name" name="name" value="motif.txt">
-                  <input type="hidden" name="mime_type" value="text/plain">
-                  <textarea id="outpop_text" name="content"
-                    style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" 
-                    rows="8" readonly="readonly" wrap="off"></textarea>
-                </form>
-              </div>
-              <!-- download logo format -->
-              <div id="outpop_pnl_3">
-                <form id="logo_form" method="post" action="">
-                  <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script>
-                  <input type="hidden" name="program" value="MEME"/>
-                  <input type="hidden" id="logo_motifs" name="motifs" value=""/>
-                  <table>
-                    <tr>
-                      <td><label for="logo_format">Format:</label></td>
-                      <td>
-                        <select id="logo_format" name="png">
-                          <option value="1">PNG (for web)</option>
-                          <option value="0">EPS (for publication)</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_rc">Orientation:</label></td>
-                      <td>
-                        <select id="logo_rc" name="rc1">
-                          <option value="0">Normal</option>
-                          <option value="1" id="logo_rc_option">Reverse Complement</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_ssc">Small Sample Correction:</label></td>
-                      <td>
-                        <input type="hidden" id="logo_err" name="errbars" value="0"/>
-                        <select id="logo_ssc" name="ssc">
-                          <option value="0">Off</option>
-                          <option value="1">On</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_width">Width:</label></td>
-                      <td>
-                        <input type="text" id="logo_width" size="4" placeholder="default" name="width"/>&nbsp;cm
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_height">Height:</label></td>
-                      <td>
-                        <input type="text" id="logo_height" size="4" placeholder="default" name="height"/>&nbsp;cm
-                      </td>
-                    </tr>
-                  </table>
-                </form>
-              </div>
-              <!-- Buttons -->
-              <div>
-                <div style="float:left;">
-                  <input type="button" id="outpop_do" value="Submit" />
-                </div>
-                <div style="float:right;">
-                  <input id="outpop_cancel" type="button" value="Cancel" />
-                </div>
-                <div style="clear:both;"></div>
-              </div>
-            </div>
-        </div>
-      </div>
-    </div>
-
-
-
-    <!-- Page starts here -->
-    <div id="top" class="pad1">
-      <div class="prog_logo big">
-        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABGCAYAAACUsCfoAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9wLHAInL7an9JAAAA8eSURBVHja7ZpZbxv3ucZ/s3AZ7qQkypZELZS3WHKiRJbTFnHqOjZcGzCQBf0A7cUB8glOb89dz30vChRp7xK0aZo4TYq6dtKqSew6iuJWpmPJlrVFFCmKI+7LLJw5F81MFZyec5rTILJaP8AAnAty+Pzf933ebeAhHuIhHuIhHmJPo6TpaeGLfimTydhLS0sUCgWazSbVahXDMOh0Ong8HiKRCAMDAxw+fJhHH31UeFDJ/91/bHp62r558ya6rmOaJuvr6+TzeYrFIoZhAOD1epFlmWAwSDqdZnR0lCNHjjA+Ps7+/fuFPUU8k8nYV69epVKpEA6HuXPnDrOzs7RaLbxeL93d3fj9foLBIB6Ph0ajQaVSAUBRFNLpNI888ggHDhzg3Llzwp4g/vbbb9szMzPE43FyuRwffPAB2WyWnp4ehoaGiMVi2LZNvV6n3W7j8/mIRqN4vV4ajQa1Wo2trS0OHTqEaZo89dRTfO973xMeaOKvvfaaffv2bcLhMCsrK/z+979HVVWOHz/O0NAQxWIRVVVRVRW/348oihiGgSiKxGIxurq6CAQCBINB3n//fcbGxiiXyxw7dowXX3yx1Nvbm3igiBcKhY9u3rw5OTMzQzgc5vbt23zwwQfIsszExAS2bZPP55EkiVAoRCQSIRwOI8sy5XKZ7e1tWq0WnU6HTqfD4OAggUAAVVXpdDo0m01GRkb44Q9/KDxQxH/729/as7Oz+Hw+Pv30U37zm9/g9Xrp6emht7eXYDCI3+/H6/UiCALtdhvLsuh0OkiSRCAQQJZl6vU65XKZ1dVV+vv7SSQS5PN5vF4vhUKBgwcP8qMf/WjXyIs7b+7cuWMvLi4iCAL1ep133nkHXdcZHh4mlUoRDofp7+8nHo9jGAaCIBCPx+nr6yOdTtPX14fH40HTNGRZpqenh76+PrLZLMVikYGBARRFwTRN5ubm+PGPf2zvFnF5583c3BzlchlZlrl16xa1Wo2xsTGi0SiDg4OutUzTJBKJIIoiXq+XQCBAIpEgFAphmiaqqlIoFKjVaoyOjhKJRFhfXycajRKNRunp6WFhYYG33nqLQqHwUTKZPP5VE5ecD5cvX7bv37+Poijkcjl++ctfMjo6ytDQEMlkEo/HQ7lcpt1u4/F4kGUZQRDw+Xz09fVx4MABRkZGSKVSdHV10el0KJVK1Ot14vE4kiRRKpVQFIV4PI5t23z66ad0Op2+K1eu/MeuWVxVVUzTRNd17t27RzKZJJFIEI1GEUWRdruNaZqIoogkSYiiiCiK+P1+AoEA0WiUQ4cOCQCbm5vb5XI5Xi6XWVtbw7ZtZFnG7/e7D1YUhWAwSLVaJZvN2v39/cJXHuOLi4t2sVhEEAS2t7eZn59n//79JBIJwuEwlmXRbDbRdR1BEBAEAcuysCwL2/5LmIriX+Wit7c3EY/HSSQSeDweDMPA4/EQCoWwbRvbtgmFQoTDYUqlErlcbnfE7f79+64gbWxs0G63icViRCIRBEHANE0Mw0CSJLxer0vSUfVKpUKxWGRtbc12UmKr1cI0TQD3t4PBoHtwgUAAv99Ps9kkn8/vjrjlcjlkWabdbrO8vEx3dzfhcJhoNEq9XkfTNERRxOfz4fV6sW0bSZJcBS+VSqytrdFqtbh+/bq9sLBALpdje3sbXddd4jutLwh/8WzLslBVdXeI12o1RFFkc3PTLTFjsRixWAxVVbEsC1mWkSTJdVXnMgyDarWKrusUi0X8fj+WZVGtVimXyxiGgW3bblh4PB78fj/tdhvbthFF0a3tv3Liuq4jiiKFQgFZlolEInR3d6MoConEXytLp1Bx0Ol0sG0bXdfRdZ1arYYgCNi2jaZptFot1zOcQ3LSnxMGzsHvCnHH/RqNBtFoFEmSCIfDAAwNDWFZFu12m0ajgaZpWJbl/oDH4/ncoTii5xBz1N+2bTqdDrIs4/P53MxgWRaapu2exQOBgHsAnU6HdrvN5uYmgUCASCRCJBIhkUhgmibNZpNarUaj0XAt71jfET1RFN1YliTJfUa73SaZTLK1tUWtVkPTNKampnaHuFNGyrKM1+t141bTNGq1GrVazS1EIpEI8XjcLWJqtdrnYthNF58pv23beL1eJEly1VzXder1Oq1Wi2AwiK7ru0PcSSs73bBYLBIMBpEkCdM0qVQq6LpOq9UiHA673Vmn08E0TfdyRM85CNM08Xq9bkoMhULugRqGgd/v3z1Xl2X5c24aDodRVZV4PO7W406/raoqtVqNYDCIz+dDURQ3vp3LuXeEz4nlTqdDOBxG13U3TBRF2b0mJRAI0Gg0EAQBTdPw+/2Uy2VXoJzRkkPEifNWq0UgEHCLEsedLcty1X1nzIdCIRRFoVQqUSqVsCyLYDBIPB7fncotlUq5JaWu6xiGgWmabG1tuanINE0EQXAPwSlk6vU6zWaTdruNpmnud3eWsk6fnkwmMU2Tzc1NVFVFURSi0SjpdHp3iB89ehRRFOnt7XWHCNFolFwu58ar08AYhuEWNH6/H4/H8zlL71R4J5XJskwgECAWi5HP51lZWaHVajE8PEw8Hufw4cO7Q3zfvn0C4E5MNU2jq6uLarVKPp//nPA5hYgzcYlEIoRCIfcQHLd3SDvEPR4PHo+HfD5PPp9HEARGRkYIhUIMDQ0Ju0Ic4NixY3g8Hnp7e8lms8RiMcLhMNlsFk3TXHW3bZtgMOjmfScEvF6vW8s7qczxgGazSSAQ4M9//jOqqlKpVHj88cfx+XyMjY3t7ujp1KlTQrlcdicupVKJkZER1tbWuHfvHqqqEolEiMVitNtt6vW6q+iNRoNms4kkSfh8PtfC0WgURVHo7+9nc3OTjY0N3n33XQYGBkilUiSTSU6ePCnsKnGA559/nkqlwtGjR8nn8/j9fh5//HEsy+LWrVvMz8+j6zqhUAifz4dhGG7z0mq1UFUVXdeJRCIEg0F32loqlbh37x53796lq6sLRVGIRCJMTEzs2pT1c8Qfe+wxYWpqyv1j2WyWVCpFIpGgUqkwNzfHnTt33JTnDCUlSaK7u5v+/n66u7vxeDxun16r1SgUCly/fp3bt29z+vRpBgcHqdVqRKPRB2uh8LOf/cyemZlhYWGBYDBIJBIBoFgs0mw2CYfDxONxfD4fg4ODros7vXWhUKDT6bg5/v3332dlZYWhoSHS6TSnTp1i3759VKtVzpw5w1c9dvpfNymvvPKKff36dbLZLIqiuBVWs9mk0WhgWZbbn4fDYURRRNM0AoEAvb29+Hw+Go0Gly9fZmNjg4mJCcbGxti/f787mJyfn6darTI5OcmJEyeEB4J4sVj8wfT09L/Pzs6SzWbdpWEikXBJGoZBs9kkGo0iyzKmabrLhtXVVTKZDJubm5w9e5YjR44wMDDAd7/7XWF2dtZeXFzkyJEj7pZm//79pFIpenp6vhIP+D8f8NZbb9nr6+ssLy+ztbXl1t5er9fdhxeLRSRJoquri0qlQiaTYXt7m0gkwpkzZ5BlmbGxMV544QX3eR9//LE9Pz/PsWPHuHHjBouLi0iSxMDAAMePH2dqakrYVeIAKysr9u3bt1leXnZn65qmoeu6W9AYhkGj0aBYLGKaJocOHeLRRx8lkUgwOTnpjp4d5HI5++OPP6ZcLjM+Ps61a9dYWFig2Wzi9Xp5/vnnOX36tLCrxHfi1q1b9tLSkuv+9XrdbTEVRSEWi5FMJhkdHWV4eJiDBw/+j8/Y2tr6+WuvvfYdwzBIpVJIkoSqqszPz1Ov17lw4QJf+9rXziYSiau7TvxvoVQqpUul0n2n2/oibz+899579k9/+lPC4TCnTp3i61//Orlcjp/85CdomsbTTz/NiRMn/pvH/CMotrQfyF/GD8Xj8aX/7yEePnx4dnx8fPJ3v/sdiqIwODjI5OSkcOPGDfvNN9/kypUr5PN5MpmMPT4+/qWQ71Z835fZZSSTyeMrKyt2vV7n7t27vPrqq1y7ds1+8sknhT/+8Y/2pUuXuHnzJs1mk6WlJTudTn8p5EUeAAwPDwvPPfccBw4cYHV1lc+KJ3t0dPTVixcvcvDgQebn53n55ZeZmZn5h1fLalv/twfqTaRMJmP/4he/YH19nSNHjnDhwgVisRj37t3jnXfeYWFhgQMHDnD+/HmeeuopYc9b3MH4+LjwrW99C0EQuHXrFtPT09RqNfr7+zlx4gTpdJqNjQ3efPNN3njjDbtYLP5gV1X9y8bly5ft119/nUqlwsmTJzl9+jQej4ePPvqITz75hLW1NYLBIJOTk5w7d46+vr4vzEN+EImfO3dOuHr1qv3666/z3nvvoWkaZ8+e5YknnnBXU5qmcfPmTQzDYG1tzR4cHBT2vMUdTE9P25cuXaJQKDA5OcmFCxfQdZ3Z2VkWFhbY2NhAURRSqRTPPvssY2Njwp62uINvfvObwp/+9Cf7V7/6FTdu3KDT6XD+/HmmpqbcoaaqqszOzmIYxhfK9Q80cYCJiQlhbm7OFgSBubk5vF4vzzzzDBMTE+7CMRgMsrCwwEsvvcS1a9fsb3zjG8KedvWd+OSTT+y3336bubk5JicnOXnyJJZl8eGHH7K2tkahUKDRaLBv3z4uXrzI2bNnhT1tcQdHjx4VMpmM3el0WFxcJBQKMTU1xbFjx6hWqwC0221WVlb49a9/zY0bN+wnn3xS2BN5/O/J88899xzDw8NkMhnm5uaIx+M8/fTT9PT0YFkWg4ODrK6u8sorrzA/P2/veVffidXVVfvdd99lenqa8+fPMzo6iqZp/OEPf2BhYYFWq4Usy4yMjHDx4kX+luXlvUh8aGhImJmZsS3L4vr165imSSqVYt++fbTbbWq1GtVqlWq1yt27d7l//749Ojoq7HniAFNTU8LS0pJdLpe5e/cu6+vrRCIRhoeHqVarrK6uous66+vrZLNZSqVS+rP2eW8TB0in00I2m3XVHqCvr49YLEYikXBfRiqXy+Ryufs7Q1tkj6O/v1/49re/zTPPPIMgCMzPz7sraJ/Ph9/vd/d3pVIp/U9hcQdOnX7p0iU7k8kgiqK76lIUxX19dKerC/wTYXt7+8zm5uaV5eVlNjY2iMfj+P1+hoeH6enpmd35evg/FXEHm1uF7ZXltXgg6EcSPSR7u/+zO9H1ff6VsFWq/pyHeIiHeIh/FfwXjVDdIW9O2PAAAAAASUVORK5CYII=" alt="MEME Logo">
-        <h1>MEME</h1>
-        <h2>Multiple Em for Motif Elicitation</h2>
-      </div>
-      <p>
-        For further information on how to interpret these results or to get a 
-        copy of the MEME software please access 
-        <a href="http://meme-suite.org/">http://meme-suite.org</a>. 
-      </p>
-      <p>If you use MEME in your research, please cite the following paper:<br />
-        <span class="citation">
-          Timothy L. Bailey and Charles Elkan, 
-          "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", 
-          <em>Proceedings of the Second International Conference on Intelligent Systems 
-          for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. 
-          <a href="http://meme-suite.org/doc/ismb94.pdf">[pdf]</a> 
-        </span>
-      </p>
-    </div>
-    <!-- navigation -->
-    <div class="pad2">
-      <a class="jump" href="#motifs_sec">Discovered Motifs</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#sites_sec">Motif Locations</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#inputs_sec">Inputs &amp; Settings</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#info_sec">Program information</a>
-    </div>
-    <!-- alert the user when their browser is not up to the task -->
-    <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript>
-    <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1>
-    <script>
-      if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block";
-    </script>
-    <h2 class="mainh pad2" id="motifs_sec">Discovered Motifs</h2>
-    <div id="motifs" class="box">
-      <p>Please wait... Loading...</p>
-      <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p>
-    </div>
-    <h2 class="mainh pad2" id="sites_sec">Motif Locations</h2>
-    <div id="blocks" class="box">
-      <p>Please wait... Loading...</p>
-      <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p>
-    </div>
-    <h2 class="mainh pad2" id="inputs_sec">Inputs &amp; Settings</h2>
-    <div class="box">
-      <h4>Sequences</h4>
-      <table id="seq_info" class="inputs">
-        <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th>
-          <th class="col_psp">PSP Source <div class="help" data-topic="pop_psp_source"></div></th>
-          <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th>
-          <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th>
-        </tr>
-        <tr>
-          <td id="ins_seq_source"></td>
-          <td id="ins_seq_psp" class="col_psp"></td>
-          <td id="ins_seq_alphabet"></td>
-          <td id="ins_seq_count"></td>
-        </tr>
-      </table>
-      <script>
-      {
-        var db = data.sequence_db;
-        $("ins_seq_source").innerHTML = db.source;
-        $("ins_seq_alphabet").innerHTML = meme_alphabet.get_alphabet_name();
-        $("ins_seq_count").innerHTML = db.sequences.length;
-        if (db.psp) {
-          $("ins_seq_psp").innerHTML = db.psp;
-        }
-        toggle_class($("seq_info"), "hide_psp", !(db.psp));
-      }
-      </script>
-      <h4>Background</h4>
-      <span id="alpha_bg"></span>
-      <script>
-      {
-        $("alpha_bg").appendChild(make_alpha_bg_table(meme_alphabet, data.sequence_db.freqs));
-      }
-      </script>
-      <h4>Other Settings</h4>
-      <table id="tbl_settings" class="inputs hide_advanced">
-        <tr>
-          <th>Motif Site Distribution</th>
-          <td id="opt_mod">
-            <span class="mod_zoops">ZOOPS: Zero or one site per sequence</span>
-            <span class="mod_oops">OOPS: Exactly one site per sequence</span>
-            <span class="mod_anr">ANR: Any number of sites per sequence</span>
-          </td>
-        </tr>
-        <tr>
-          <th>Site Strand Handling</th>
-          <td id="opt_strand">
-            <span class="strand_none">This alphabet only has one strand</span>
-            <span class="strand_given">Sites must be on the given strand</span>
-            <span class="strand_both">Sites may be on either strand</span>
-          </td>
-        </tr>
-        <tr>
-          <th>Maximum Number of Motifs</th>
-          <td id="opt_nmotifs"></td>
-        </tr>
-        <tr>
-          <th>Motif E-value Threshold</th>
-          <td id="opt_evt"></td>
-        </tr>
-        <tr>
-          <th>Minimum Motif Width</th>
-          <td id="opt_minw"></td>
-        </tr>
-        <tr>
-          <th>Maximum Motif Width</th>
-          <td id="opt_maxw"></td>
-        </tr>
-        <tr>
-          <th>Minimum Sites per Motif</th>
-          <td id="opt_minsites"></td>
-        </tr>
-        <tr>
-          <th>Maximum Sites per Motif</th>
-          <td id="opt_maxsites"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Bias on Number of Sites</th>
-          <td id="opt_wnsites"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Sequence Prior</th>
-          <td id="opt_prior">
-            <span class="prior_dirichlet">Simple Dirichlet</span>
-            <span class="prior_dmix">Dirichlets Mix</span>
-            <span class="prior_mega">Mega-weight Dirichlets Mix</span>
-            <span class="prior_megap">Mega-weight Dirichlets Mix Plus</span>
-            <span class="prior_addone">Add One</span>
-          </td>
-        </tr>
-        <tr class="advanced">
-          <th>Sequence Prior Strength</th>
-          <td id="opt_b"></td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Starting Point Source</th>
-          <td id="opt_substring">
-            <span class="substring_on">From substrings in input sequences</span>
-            <span class="substring_off">From strings on command line (-cons)</span>
-          </td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Starting Point Map Type</th>
-          <td id="opt_spmap">
-            <span class="spmap_uni">Uniform</span>
-            <span class="spmap_pam">Point Accepted Mutation</span>
-          </td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Starting Point Fuzz</th>
-          <td id="opt_spfuzz"></td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Maximum Iterations</th>
-          <td id="opt_maxiter"></td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Improvement Threshold</th>
-          <td id="opt_distance"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Trim Gap Open Cost</th>
-          <td id="opt_wg"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Trim Gap Extend Cost</th>
-          <td id="opt_ws"></td>
-        </tr>
-        <tr class="advanced">
-          <th>End Gap Treatment</th>
-          <td id="opt_noendgaps">
-            <span class="noendgaps_on">No cost</span>
-            <span class="noendgaps_off">Same cost as other gaps</span>
-          </td>
-        </tr>
-        <tr>
-          <td colspan="2" style="text-align: center">
-            <a href="javascript:toggle_class(document.getElementById('tbl_settings'), 'hide_advanced')">
-              <span class="show_more">Show Advanced Settings</span>
-              <span class="show_less">Hide Advanced Settings</span>
-            </a>
-          </td>
-        </tr>
-      </table>
-      <script>
-      {
-        $("opt_mod").className = data.options.mod;
-        $("opt_strand").className = (meme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none");
-        $("opt_nmotifs").textContent = data.options.nmotifs;
-        $("opt_evt").textContent = (typeof data.options.evt === "number" ? data.options.evt : "no limit");
-        $("opt_minw").textContent = data.options.minw;
-        $("opt_maxw").textContent = data.options.maxw;
-        $("opt_minsites").textContent = data.options.minsites;
-        $("opt_maxsites").textContent = data.options.maxsites;
-        $("opt_wnsites").textContent = data.options.wnsites;
-        $("opt_spmap").className = data.options.spmap;
-        $("opt_spfuzz").textContent = data.options.spfuzz;
-        $("opt_prior").className = data.options.prior;
-        $("opt_b").textContent = data.options.b;
-        $("opt_maxiter").textContent = data.options.maxiter;
-        $("opt_distance").textContent = data.options.distance;
-        $("opt_wg").textContent = data.options.wg;
-        $("opt_ws").textContent = data.options.ws;
-        $("opt_noendgaps").className = (data.options.noendgaps ? "on" : "off");
-        $("opt_substring").className = (data.options.substring ? "on" : "off");
-      }
-      </script>
-    </div>
-    <!-- list information on this program -->
-    <div id="info_sec" class="bar">
-      <div class="subsection">
-        <h5 id="version">MEME version</h5>
-        <span id="ins_version"></span> 
-        (Release date: <span id="ins_release"></span>)<br>
-      </div>
-      <script>
-        $("ins_version").innerHTML = data["version"];
-        $("ins_release").innerHTML = data["release"];
-      </script>
-      <div class="subsection">
-        <h5 id="reference">Reference</h5>
-        <span class="citation">
-          Timothy L. Bailey and Charles Elkan, 
-          "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", 
-          <em>Proceedings of the Second International Conference on Intelligent Systems 
-          for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. 
-        </span>
-      </div>
-      <div class="subsection">
-        <h5 id="command">Command line</h5>
-        <textarea id="cmd" rows="5" style="width:100%;" readonly="readonly">
-        </textarea>
-        <script>$("cmd").value = data["cmd"].join(" ");</script>
-      </div>
-    </div>
-    
-  </body>
-</html>
--- a/test-data/meme_output_test1.txt	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/meme_output_test1.txt	Wed Dec 11 18:05:15 2019 -0500
@@ -1,325 +1,61 @@
 ********************************************************************************
 MEME - Motif discovery tool
-********************************************************************************
-MEME version 4.12.0 (Release date: Tue Jun 27 16:22:50 2017 -0700)
-
-For further information on how to interpret these results or to get
-a copy of the MEME software please access http://meme-suite.org .
-
-This file may be used as input to the MAST algorithm for searching
-sequence databases for matches to groups of motifs.  MAST is available
-for interactive use and downloading at http://meme-suite.org .
-********************************************************************************
-
-
-********************************************************************************
+MEME version 5.0.5 (Release date: Mon Mar 18 20:12:19 2019 -0700)
 REFERENCE
-********************************************************************************
-If you use this program in your research, please cite:
-
-Timothy L. Bailey and Charles Elkan,
-"Fitting a mixture model by expectation maximization to discover
-motifs in biopolymers", Proceedings of the Second International
-Conference on Intelligent Systems for Molecular Biology, pp. 28-36,
-AAAI Press, Menlo Park, California, 1994.
-********************************************************************************
-
-
-********************************************************************************
 TRAINING SET
-********************************************************************************
-DATAFILE= meme_input_1.fasta
+CONTROL SEQUENCES= --none--
 ALPHABET= ACDEFGHIKLMNPQRSTVWY
 Sequence name            Weight Length  Sequence name            Weight Length  
 -------------            ------ ------  -------------            ------ ------  
 chr21_19617074_19617124_ 1.0000     50  chr21_26934381_26934431_ 1.0000     50  
-chr21_28217753_28217803_ 1.0000     50  chr21_31710037_31710087_ 1.0000     50  
-chr21_31744582_31744632_ 1.0000     50  chr21_31768316_31768366_ 1.0000     50  
-chr21_31914206_31914256_ 1.0000     50  chr21_31933633_31933683_ 1.0000     50  
-chr21_31962741_31962791_ 1.0000     50  chr21_31964683_31964733_ 1.0000     50  
-chr21_31973364_31973414_ 1.0000     50  chr21_31992870_31992920_ 1.0000     50  
-chr21_32185595_32185645_ 1.0000     50  chr21_32202076_32202126_ 1.0000     50  
-chr21_32253899_32253949_ 1.0000     50  chr21_32410820_32410870_ 1.0000     50  
-chr21_36411748_36411798_ 1.0000     50  chr21_37838750_37838800_ 1.0000     50  
-chr21_45705687_45705737_ 1.0000     50  chr21_45971413_45971463_ 1.0000     50  
-chr21_45978668_45978718_ 1.0000     50  chr21_45993530_45993580_ 1.0000     50  
-chr21_46020421_46020471_ 1.0000     50  chr21_46031920_46031970_ 1.0000     50  
-chr21_46046964_46047014_ 1.0000     50  chr21_46057197_46057247_ 1.0000     50  
-chr21_46086869_46086919_ 1.0000     50  chr21_46102103_46102153_ 1.0000     50  
-chr21_47517957_47518007_ 1.0000     50  chr21_47575506_47575556_ 1.0000     50  
-********************************************************************************
-
-********************************************************************************
 COMMAND LINE SUMMARY
-********************************************************************************
-This information can also be useful in the event you wish to report a
-problem with the MEME software.
-
-command: meme meme_input_1.fasta -o meme_test1_out -nostatus -maxsize 1000000 
-
 model:  mod=         zoops    nmotifs=         1    evt=           inf
-object function=  E-value of product of p-values
+objective function:           em=       E-value of product of p-values
+                              starts=   E-value of product of p-values
 width:  minw=            8    maxw=           50
-width:  wg=             11    ws=              1    endgaps=       yes
 nsites: minsites=        2    maxsites=       30    wnsites=       0.8
 theta:  spmap=         pam    spfuzz=        120
-global: substring=     yes    branching=      no    wbranch=        no
 em:     prior=       megap    b=            7500    maxiter=        50
         distance=    1e-05
-data:   n=            1500    N=              30    shuffle=        -1
-
-sample: seed=            0    ctfrac=         -1    maxwords=       -1
+trim:   wg=             11    ws=              1    endgaps=       yes
+data:   n=            1500    N=              30
+sample: seed=            0    hsfrac=          0
+        searchsize=   1500    norand=         no    csites=       1000
 Dirichlet mixture priors file: prior30.plib
 Letter frequencies in dataset:
-A 0.294 C 0.231 D 0.000 E 0.000 F 0.000 G 0.257 H 0.000 I 0.000 K 0.000 
-L 0.000 M 0.000 N 0.000 P 0.000 Q 0.000 R 0.000 S 0.000 T 0.217 V 0.000 
-W 0.000 Y 0.000 
-Background letter frequencies (from dataset with add-one prior applied):
-A 0.291 C 0.229 D 0.001 E 0.001 F 0.001 G 0.255 H 0.001 I 0.001 K 0.001 
-L 0.001 M 0.001 N 0.001 P 0.001 Q 0.001 R 0.001 S 0.001 T 0.215 V 0.001 
-W 0.001 Y 0.001 
-********************************************************************************
-
-
-********************************************************************************
+A 0.294 C 0.231 D 0 E 0 F 0 G 0.257 H 0 I 0 K 0 
+L 0 M 0 N 0 P 0 Q 0 R 0 S 0 T 0.217 V 0 
+W 0 Y 0 
+Background letter frequencies (from file dataset with add-one prior applied):
+A 0.291 C 0.229 D 0.000658 E 0.000658 F 0.000658 G 0.255 H 0.000658 I 0.000658 K 0.000658 
+L 0.000658 M 0.000658 N 0.000658 P 0.000658 Q 0.000658 R 0.000658 S 0.000658 T 0.215 V 0.000658 
+W 0.000658 Y 0.000658 
+Background model order: 0
 MOTIF GGGGTATAAAA MEME-1	width =  11  sites =  25  llr = 239  E-value = 2.4e-011
-********************************************************************************
 --------------------------------------------------------------------------------
 	Motif GGGGTATAAAA MEME-1 Description
---------------------------------------------------------------------------------
-Simplified        A  2323:a:a8a8
-pos.-specific     C  ::3::::::::
-probability       D  :::::::::::
-matrix            E  :::::::::::
-                  F  :::::::::::
-                  G  7746::::::1
-                  H  :::::::::::
-                  I  :::::::::::
-                  K  :::::::::::
-                  L  :::::::::::
-                  M  :::::::::::
-                  N  :::::::::::
-                  P  :::::::::::
-                  Q  :::::::::::
-                  R  :::::::::::
-                  S  :::::::::::
-                  T  1:2:a:a:2::
-                  V  :::::::::::
-                  W  :::::::::::
-                  Y  :::::::::::
-
-         bits   10.6            
-                 9.5            
-                 8.5            
-                 7.4            
-Relative         6.3            
-Entropy          5.3            
-(13.8 bits)      4.2            
-                 3.2            
-                 2.1     * **   
-                 1.1 ** ********
-                 0.0 -----------
-
-Multilevel           GGGGTATAAAA
-consensus            AACA    T  
-sequence                        
-                                
-                                
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGGGTATAAAA MEME-1 sites sorted by position p-value
---------------------------------------------------------------------------------
 Sequence name             Start   P-value               Site  
 -------------             ----- ---------            -----------
 chr21_46046964_46047014_     13  1.06e-06 AAGGCCAGGA GGGGTATAAAA GCCTGAGAGC
-chr21_46057197_46057247_     37  3.41e-06 ACAGGCCCTG GGCATATAAAA GCC       
-chr21_45971413_45971463_     10  3.41e-06  CAGGCCCTG GGCATATAAAA GCCCCAGCAG
-chr21_31964683_31964733_     14  3.41e-06 GATTCACTGA GGCATATAAAA GGCCCTCTGC
-chr21_45993530_45993580_      8  4.00e-06    CCAAGGA GGAGTATAAAA GCCCCACAAA
-chr21_32202076_32202126_     14  5.01e-06 CCACCAGCTT GAGGTATAAAA AGCCCTGTAC
-chr21_46031920_46031970_     16  6.06e-06 ATACCCAGGG AGGGTATAAAA CCTCAGCAGC
-chr21_32410820_32410870_     22  8.67e-06 AATCACTGAG GATGTATAAAA GTCCCAGGGA
-chr21_32185595_32185645_     19  8.67e-06 CACCAGAGCT GGGATATATAA AGAAGGTTCT
-chr21_31992870_31992920_     17  8.67e-06 CACTATTGAA GATGTATAAAA TTTCATTTGC
-chr21_46020421_46020471_      3  1.21e-05         GA GACATATAAAA GCCAACATCC
-chr21_47517957_47518007_     33  1.59e-05 CCGGCGGGGC GGGGTATAAAG GGGGCGG   
-chr21_45978668_45978718_      5  1.59e-05       CAGA GGGGTATAAAG GTTCCGACCA
-chr21_31914206_31914256_     16  1.68e-05 CCCACTACTT AGAGTATAAAA TCATTCTGAG
-chr21_32253899_32253949_     20  2.03e-05 CACCAGCAAG GATATATAAAA GCTCAGGAGT
-chr21_31744582_31744632_     13  3.06e-05 CAGGTCTAAG AGCATATATAA CTTGGAGTCC
-chr21_19617074_19617124_     40  3.06e-05 CCTCGGGACG TGGGTATATAA           
-chr21_45705687_45705737_     38  3.82e-05 CGTGGTCGCG GGGGTATAACA GC        
-chr21_31768316_31768366_      1  3.82e-05          . AACGTATATAA ATGGTCCTGT
-chr21_47575506_47575556_     31  4.02e-05 GCTGCCGGTG AGCGTATAAAG GCCCTGGCG 
-chr21_26934381_26934431_     28  5.52e-05 AGTCACAAGT GAGTTATAAAA GGGTCGCACG
-chr21_31710037_31710087_     15  5.94e-05 CCCAGGTTTC TGAGTATATAA TCGCCGCACC
-chr21_36411748_36411798_     23  6.78e-05 AGTTTCAGTT GGCATCtaaaa attatataac
-chr21_31933633_31933683_      3  2.08e-04         TC AGAGTATATAT AAATGTTCCT
-chr21_31962741_31962791_     14  4.05e-04 TATAACTCAG GTTGGATAAAA TAATTTGTAC
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGGGTATAAAA MEME-1 block diagrams
---------------------------------------------------------------------------------
 SEQUENCE NAME            POSITION P-VALUE  MOTIF DIAGRAM
 -------------            ----------------  -------------
 chr21_46046964_46047014_          1.1e-06  12_[1]_27
-chr21_46057197_46057247_          3.4e-06  36_[1]_3
-chr21_45971413_45971463_          3.4e-06  9_[1]_30
-chr21_31964683_31964733_          3.4e-06  13_[1]_26
-chr21_45993530_45993580_            4e-06  7_[1]_32
-chr21_32202076_32202126_            5e-06  13_[1]_26
-chr21_46031920_46031970_          6.1e-06  15_[1]_24
-chr21_32410820_32410870_          8.7e-06  21_[1]_18
-chr21_32185595_32185645_          8.7e-06  18_[1]_21
-chr21_31992870_31992920_          8.7e-06  16_[1]_23
-chr21_46020421_46020471_          1.2e-05  2_[1]_37
-chr21_47517957_47518007_          1.6e-05  32_[1]_7
-chr21_45978668_45978718_          1.6e-05  4_[1]_35
-chr21_31914206_31914256_          1.7e-05  15_[1]_24
-chr21_32253899_32253949_            2e-05  19_[1]_20
-chr21_31744582_31744632_          3.1e-05  12_[1]_27
-chr21_19617074_19617124_          3.1e-05  39_[1]
-chr21_45705687_45705737_          3.8e-05  37_[1]_2
-chr21_31768316_31768366_          3.8e-05  [1]_39
-chr21_47575506_47575556_            4e-05  30_[1]_9
-chr21_26934381_26934431_          5.5e-05  27_[1]_12
-chr21_31710037_31710087_          5.9e-05  14_[1]_25
-chr21_36411748_36411798_          6.8e-05  22_[1]_17
-chr21_31933633_31933683_          0.00021  2_[1]_37
-chr21_31962741_31962791_           0.0004  13_[1]_26
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGGGTATAAAA MEME-1 in BLOCKS format
---------------------------------------------------------------------------------
 BL   MOTIF GGGGTATAAAA width=11 seqs=25
 chr21_46046964_46047014_ (   13) GGGGTATAAAA  1 
-chr21_46057197_46057247_ (   37) GGCATATAAAA  1 
-chr21_45971413_45971463_ (   10) GGCATATAAAA  1 
-chr21_31964683_31964733_ (   14) GGCATATAAAA  1 
-chr21_45993530_45993580_ (    8) GGAGTATAAAA  1 
-chr21_32202076_32202126_ (   14) GAGGTATAAAA  1 
-chr21_46031920_46031970_ (   16) AGGGTATAAAA  1 
-chr21_32410820_32410870_ (   22) GATGTATAAAA  1 
-chr21_32185595_32185645_ (   19) GGGATATATAA  1 
-chr21_31992870_31992920_ (   17) GATGTATAAAA  1 
-chr21_46020421_46020471_ (    3) GACATATAAAA  1 
-chr21_47517957_47518007_ (   33) GGGGTATAAAG  1 
-chr21_45978668_45978718_ (    5) GGGGTATAAAG  1 
-chr21_31914206_31914256_ (   16) AGAGTATAAAA  1 
-chr21_32253899_32253949_ (   20) GATATATAAAA  1 
-chr21_31744582_31744632_ (   13) AGCATATATAA  1 
-chr21_19617074_19617124_ (   40) TGGGTATATAA  1 
-chr21_45705687_45705737_ (   38) GGGGTATAACA  1 
-chr21_31768316_31768366_ (    1) AACGTATATAA  1 
-chr21_47575506_47575556_ (   31) AGCGTATAAAG  1 
-chr21_26934381_26934431_ (   28) GAGTTATAAAA  1 
-chr21_31710037_31710087_ (   15) TGAGTATATAA  1 
-chr21_36411748_36411798_ (   23) GGCATCTAAAA  1 
-chr21_31933633_31933683_ (    3) AGAGTATATAT  1 
-chr21_31962741_31962791_ (   14) GTTGGATAAAA  1 
-//
-
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGGGTATAAAA MEME-1 position-specific scoring matrix
---------------------------------------------------------------------------------
 log-odds matrix: alength= 20 w= 11 n= 1200 bayes= 5.33554 E= 2.4e-011 
    -32   -680     91     77      7    138    -20     55     64    107     11    150    142     72     87    396   -148    221   -140    -36 
-   -11   -680     89     76      7    137    -21     55     63    107     10    149    141     71     87    396   -239    220   -140    -36 
-   -79     41      4     21     -7     44    -62     42     -5     99      0     99    138     52     42    399    -46    223   -173    -68 
-    11   -677     48     47     -2    127    -43     46     27    101      3    124    138     60     62    397   -235    220   -160    -55 
-  -596   -820     12    -21    -53   -267    -74     37     16     44    -37     98     31      9     19    319    212    127   -193    -95 
-   165   -261     70    110     77   -521     -4    147     95    201     90    121    124     91    107    425   -527    314    -95      8 
-  -838   -990    -89   -149   -151   -841   -161   -117   -113    -66   -209    -68    -69   -129    -91    111    221    -55   -255   -173 
-   176   -858    -79   -103   -115   -717   -148    -95   -108    -17   -162    -61    -12    -95    -69    193   -737     52   -240   -153 
-   134   -686      0     16    -12   -553    -68     44     -8     96     -9     88    124     41     36    384     11    216   -177    -71 
-   165   -261     70    110     77   -521     -4    147     95    201     90    121    124     91    107    425   -527    314    -95      8 
-   147   -614     89    129     93   -121     12    160    113    217    108    144    144    111    125    447   -241    332    -81     22 
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGGGTATAAAA MEME-1 position-specific probability matrix
---------------------------------------------------------------------------------
 letter-probability matrix: alength= 20 w= 11 nsites= 25 E= 2.4e-011 
  0.240000  0.000000  0.000000  0.000000  0.000000  0.680000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.080000  0.000000  0.000000  0.000000 
- 0.280000  0.000000  0.000000  0.000000  0.000000  0.680000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.040000  0.000000  0.000000  0.000000 
- 0.160000  0.320000  0.000000  0.000000  0.000000  0.360000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.160000  0.000000  0.000000  0.000000 
- 0.320000  0.000000  0.000000  0.000000  0.000000  0.640000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.040000  0.000000  0.000000  0.000000 
- 0.000000  0.000000  0.000000  0.000000  0.000000  0.040000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.960000  0.000000  0.000000  0.000000 
- 0.960000  0.040000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000 
- 0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  1.000000  0.000000  0.000000  0.000000 
- 1.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000 
- 0.760000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.240000  0.000000  0.000000  0.000000 
- 0.960000  0.040000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000 
- 0.840000  0.000000  0.000000  0.000000  0.000000  0.120000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.040000  0.000000  0.000000  0.000000 
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGGGTATAAAA MEME-1 regular expression
---------------------------------------------------------------------------------
 [GA][GA][GC][GA]TATA[AT]AA
---------------------------------------------------------------------------------
-
-
-
-
-Time  0.77 secs.
-
-********************************************************************************
-
-
-********************************************************************************
 SUMMARY OF MOTIFS
-********************************************************************************
-
---------------------------------------------------------------------------------
 	Combined block diagrams: non-overlapping sites with p-value < 0.0001
---------------------------------------------------------------------------------
 SEQUENCE NAME            COMBINED P-VALUE  MOTIF DIAGRAM
 -------------            ----------------  -------------
 chr21_19617074_19617124_         1.22e-03  39_[1(3.06e-05)]
-chr21_26934381_26934431_         2.21e-03  27_[1(5.52e-05)]_12
-chr21_28217753_28217803_         7.29e-01  50
-chr21_31710037_31710087_         2.37e-03  14_[1(5.94e-05)]_25
-chr21_31744582_31744632_         1.22e-03  12_[1(3.06e-05)]_27
-chr21_31768316_31768366_         1.53e-03  [1(3.82e-05)]_39
-chr21_31914206_31914256_         6.70e-04  15_[1(1.68e-05)]_24
-chr21_31933633_31933683_         1.81e-03  4_[1(4.54e-05)]_35
-chr21_31962741_31962791_         1.61e-02  50
-chr21_31964683_31964733_         1.36e-04  13_[1(3.41e-06)]_26
-chr21_31973364_31973414_         1.99e-01  50
-chr21_31992870_31992920_         3.47e-04  16_[1(8.67e-06)]_23
-chr21_32185595_32185645_         3.47e-04  18_[1(8.67e-06)]_21
-chr21_32202076_32202126_         2.01e-04  13_[1(5.01e-06)]_26
-chr21_32253899_32253949_         8.11e-04  19_[1(2.03e-05)]_20
-chr21_32410820_32410870_         3.47e-04  21_[1(8.67e-06)]_18
-chr21_36411748_36411798_         2.71e-03  22_[1(6.78e-05)]_17
-chr21_37838750_37838800_         8.23e-02  50
-chr21_45705687_45705737_         1.53e-03  37_[1(3.82e-05)]_2
-chr21_45971413_45971463_         1.36e-04  9_[1(3.41e-06)]_30
-chr21_45978668_45978718_         6.37e-04  4_[1(1.59e-05)]_35
-chr21_45993530_45993580_         1.60e-04  7_[1(4.00e-06)]_32
-chr21_46020421_46020471_         4.83e-04  2_[1(1.21e-05)]_37
-chr21_46031920_46031970_         2.43e-04  15_[1(6.06e-06)]_24
-chr21_46046964_46047014_         4.26e-05  12_[1(1.06e-06)]_27
-chr21_46057197_46057247_         1.36e-04  36_[1(3.41e-06)]_3
-chr21_46086869_46086919_         4.30e-02  50
-chr21_46102103_46102153_         4.30e-02  50
-chr21_47517957_47518007_         6.37e-04  32_[1(1.59e-05)]_7
-chr21_47575506_47575556_         1.61e-03  30_[1(4.02e-05)]_9
---------------------------------------------------------------------------------
-
-********************************************************************************
-
-
-********************************************************************************
 Stopped because requested number of motifs (1) found.
-********************************************************************************
-
-CPU: ThinkPad-T450s
-
-********************************************************************************
--- a/test-data/meme_output_test1.xml	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/meme_output_test1.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -10,136 +10,29 @@
 <!ATTLIST MEME 
   version CDATA #REQUIRED
   release CDATA #REQUIRED
->
 <!-- Training-set elements -->
 <!ELEMENT training_set (alphabet, ambigs, sequence*, letter_frequencies)>
-<!ATTLIST training_set datafile CDATA #REQUIRED length CDATA #REQUIRED>
-<!ELEMENT alphabet (letter*)>
-<!ATTLIST alphabet name CDATA #REQUIRED>
-<!ELEMENT ambigs (letter*)>
-<!ELEMENT letter EMPTY>
-<!ATTLIST letter id ID #REQUIRED>
-<!ATTLIST letter symbol CDATA #REQUIRED>
-<!ATTLIST letter equals CDATA #IMPLIED>
-<!ATTLIST letter aliases CDATA #IMPLIED>
-<!ATTLIST letter complement CDATA #IMPLIED>
-<!ATTLIST letter name CDATA #IMPLIED>
-<!ATTLIST letter colour CDATA #IMPLIED>
-<!ELEMENT sequence EMPTY>
-<!ATTLIST sequence id ID #REQUIRED
                    name CDATA #REQUIRED
                    length CDATA #REQUIRED
                    weight CDATA #REQUIRED
->
 <!ELEMENT letter_frequencies (alphabet_array)>
-
 <!-- Model elements -->
 <!ELEMENT model (
   command_line,
   host,
   type,
   nmotifs,
-  evalue_threshold,
-  object_function,
-  spfun,
-  min_width,
-  max_width,
-  wg,
-  ws,
-  endgaps,
-  minsites,
-  maxsites,
-  wnsites,
-  spmap,
-  spfuzz,
-  prior,
-  beta,
-  maxiter,
-  distance,
-  num_sequences,
-  num_positions,
-  seed,
-  hsfrac,
-  maxwords,
-  maxsize,
-  csites,
-  strands,
-  priors_file,
-  reason_for_stopping,
-  back_order,
-  background_frequencies
 )>
 <!ELEMENT command_line (#PCDATA)*>
 <!ELEMENT host (#PCDATA)*>
 <!ELEMENT type (#PCDATA)*>
 <!ELEMENT nmotifs (#PCDATA)*>
-<!ELEMENT evalue_threshold (#PCDATA)*>
-<!ELEMENT object_function (#PCDATA)*>
-<!ELEMENT spfun (#PCDATA)*>
-<!ELEMENT min_width (#PCDATA)*>
-<!ELEMENT max_width (#PCDATA)*>
-<!ELEMENT wg (#PCDATA)*>
-<!ELEMENT ws (#PCDATA)*>
-<!ELEMENT endgaps (#PCDATA)*>
-<!ELEMENT minsites (#PCDATA)*>
-<!ELEMENT maxsites (#PCDATA)*>
-<!ELEMENT wnsites (#PCDATA)*>
-<!ELEMENT spmap (#PCDATA)*>
-<!ELEMENT spfuzz (#PCDATA)*>
-<!ELEMENT prior (#PCDATA)*>
-<!ELEMENT beta (#PCDATA)*>
-<!ELEMENT maxiter (#PCDATA)*>
-<!ELEMENT distance (#PCDATA)*>
-<!ELEMENT num_sequences (#PCDATA)*>
-<!ELEMENT num_positions (#PCDATA)*>
-<!ELEMENT seed (#PCDATA)*>
-<!ELEMENT hsfrac (#PCDATA)*>
-<!ELEMENT maxwords (#PCDATA)*>
-<!ELEMENT maxsites (#PCDATA)*>
-<!ELEMENT csites (#PCDATA)*>
-<!ELEMENT strands (#PCDATA)*>
-<!ELEMENT priors_file (#PCDATA)*>
-<!ELEMENT reason_for_stopping (#PCDATA)*>
-<!ELEMENT back_order (#PCDATA)*>
-<!ELEMENT background_frequencies (alphabet_array)>
-<!ATTLIST background_frequencies source CDATA #REQUIRED>
-
-<!-- Motif elements -->
-<!ELEMENT motifs (motif*)>
-<!ELEMENT motif (scores, probabilities, regular_expression?, contributing_sites)>
-<!ATTLIST motif id ID #REQUIRED
-                name CDATA #REQUIRED
-                alt CDATA ""
-                width CDATA #REQUIRED
-                sites CDATA #REQUIRED
-                llr CDATA #REQUIRED
-                ic CDATA #REQUIRED
-                re CDATA #REQUIRED
-                bayes_threshold CDATA #REQUIRED
-                e_value CDATA #REQUIRED
-                elapsed_time CDATA #REQUIRED
-                url CDATA ""
->
-<!ELEMENT scores (alphabet_matrix)>
-<!ELEMENT probabilities (alphabet_matrix)>
-<!ELEMENT regular_expression (#PCDATA)*>
-
-<!-- Contributing site elements -->
-<!-- Contributing sites are motif occurences found during the motif discovery phase -->
-<!ELEMENT contributing_sites (contributing_site*)>
-<!ELEMENT contributing_site (left_flank, site, right_flank)>
-<!ATTLIST contributing_site sequence_id IDREF #REQUIRED
-                          position CDATA #REQUIRED
-                          strand (plus|minus|none) 'none'
-                          pvalue CDATA #REQUIRED
->
 <!-- The left_flank contains the sequence for 10 bases to the left of the motif start -->
 <!ELEMENT left_flank (#PCDATA)>
 <!-- The site contains the sequence for the motif instance -->
 <!ELEMENT site (letter_ref*)>
 <!-- The right_flank contains the sequence for 10 bases to the right of the motif end -->
 <!ELEMENT right_flank (#PCDATA)>
-
 <!-- Scanned site elements -->
 <!-- Scanned sites are motif occurences found during the sequence scan phase -->
 <!ELEMENT scanned_sites_summary (scanned_sites*)>
@@ -153,7 +46,6 @@
                         strand (plus|minus|none) 'none'
                         position CDATA #REQUIRED
                         pvalue CDATA #REQUIRED>
-
 <!-- Utility elements -->
 <!-- A reference to a letter in the alphabet -->
 <!ELEMENT letter_ref EMPTY>
@@ -162,643 +54,44 @@
 <!ELEMENT alphabet_array (value*)>
 <!ELEMENT value (#PCDATA)>
 <!ATTLIST value letter_id IDREF #REQUIRED>
-
 <!-- A alphabet_matrix contains one alphabet_array for each position in a motif -->
 <!ELEMENT alphabet_matrix (alphabet_array*)>
-
 ]>
 <!-- Begin document body -->
-<MEME version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700">
-<training_set datafile="meme_input_1.fasta" length="30">
+<MEME version="5.0.5" release="Mon Mar 18 20:12:19 2019 -0700">
 <alphabet name="Protein" like="protein">
 <letter id="A" symbol="A" name="Alanine" colour="0000CC"/>
-<letter id="C" symbol="C" name="Cysteine" colour="0000CC"/>
-<letter id="D" symbol="D" name="Aspartic acid" colour="FF00FF"/>
-<letter id="E" symbol="E" name="Glutamic acid" colour="FF00FF"/>
-<letter id="F" symbol="F" name="Phenylalanine" colour="0000CC"/>
-<letter id="G" symbol="G" name="Glycine" colour="FFB300"/>
-<letter id="H" symbol="H" name="Histidine" colour="FFCCCC"/>
-<letter id="I" symbol="I" name="Isoleucine" colour="0000CC"/>
-<letter id="K" symbol="K" name="Lysine" colour="CC0000"/>
-<letter id="L" symbol="L" name="Leucine" colour="0000CC"/>
-<letter id="M" symbol="M" name="Methionine" colour="0000CC"/>
-<letter id="N" symbol="N" name="Asparagine" colour="008000"/>
-<letter id="P" symbol="P" name="Proline" colour="FFFF00"/>
-<letter id="Q" symbol="Q" name="Glutamine" colour="008000"/>
-<letter id="R" symbol="R" name="Arginine" colour="CC0000"/>
-<letter id="S" symbol="S" name="Serine" colour="008000"/>
-<letter id="T" symbol="T" name="Threonine" colour="008000"/>
-<letter id="V" symbol="V" name="Valine" colour="0000CC"/>
-<letter id="W" symbol="W" name="Tryptophan" colour="0000CC"/>
-<letter id="Y" symbol="Y" name="Tyrosine" colour="33E6CC"/>
-<letter id="X" symbol="X" aliases="*." equals="ACDEFGHIKLMNPQRSTVWY" name="Any amino acid"/>
-<letter id="B" symbol="B" equals="DN" name="Asparagine or Aspartic acid"/>
-<letter id="Z" symbol="Z" equals="EQ" name="Glutamine or Glutamic acid"/>
-<letter id="J" symbol="J" equals="IL" name="Leucine or Isoleucine"/>
 </alphabet>
 <sequence id="sequence_0" name="chr21_19617074_19617124_+" length="50" weight="1.000000" />
-<sequence id="sequence_1" name="chr21_26934381_26934431_+" length="50" weight="1.000000" />
-<sequence id="sequence_2" name="chr21_28217753_28217803_-" length="50" weight="1.000000" />
-<sequence id="sequence_3" name="chr21_31710037_31710087_-" length="50" weight="1.000000" />
-<sequence id="sequence_4" name="chr21_31744582_31744632_-" length="50" weight="1.000000" />
-<sequence id="sequence_5" name="chr21_31768316_31768366_+" length="50" weight="1.000000" />
-<sequence id="sequence_6" name="chr21_31914206_31914256_-" length="50" weight="1.000000" />
-<sequence id="sequence_7" name="chr21_31933633_31933683_-" length="50" weight="1.000000" />
-<sequence id="sequence_8" name="chr21_31962741_31962791_-" length="50" weight="1.000000" />
-<sequence id="sequence_9" name="chr21_31964683_31964733_+" length="50" weight="1.000000" />
-<sequence id="sequence_10" name="chr21_31973364_31973414_+" length="50" weight="1.000000" />
-<sequence id="sequence_11" name="chr21_31992870_31992920_+" length="50" weight="1.000000" />
-<sequence id="sequence_12" name="chr21_32185595_32185645_-" length="50" weight="1.000000" />
-<sequence id="sequence_13" name="chr21_32202076_32202126_-" length="50" weight="1.000000" />
-<sequence id="sequence_14" name="chr21_32253899_32253949_-" length="50" weight="1.000000" />
-<sequence id="sequence_15" name="chr21_32410820_32410870_-" length="50" weight="1.000000" />
-<sequence id="sequence_16" name="chr21_36411748_36411798_-" length="50" weight="1.000000" />
-<sequence id="sequence_17" name="chr21_37838750_37838800_-" length="50" weight="1.000000" />
-<sequence id="sequence_18" name="chr21_45705687_45705737_+" length="50" weight="1.000000" />
-<sequence id="sequence_19" name="chr21_45971413_45971463_-" length="50" weight="1.000000" />
-<sequence id="sequence_20" name="chr21_45978668_45978718_-" length="50" weight="1.000000" />
-<sequence id="sequence_21" name="chr21_45993530_45993580_+" length="50" weight="1.000000" />
-<sequence id="sequence_22" name="chr21_46020421_46020471_+" length="50" weight="1.000000" />
-<sequence id="sequence_23" name="chr21_46031920_46031970_+" length="50" weight="1.000000" />
-<sequence id="sequence_24" name="chr21_46046964_46047014_+" length="50" weight="1.000000" />
-<sequence id="sequence_25" name="chr21_46057197_46057247_+" length="50" weight="1.000000" />
-<sequence id="sequence_26" name="chr21_46086869_46086919_-" length="50" weight="1.000000" />
-<sequence id="sequence_27" name="chr21_46102103_46102153_-" length="50" weight="1.000000" />
-<sequence id="sequence_28" name="chr21_47517957_47518007_+" length="50" weight="1.000000" />
-<sequence id="sequence_29" name="chr21_47575506_47575556_-" length="50" weight="1.000000" />
 <letter_frequencies>
 <alphabet_array>
 <value letter_id="A">0.294</value>
-<value letter_id="C">0.231</value>
-<value letter_id="D">0.000</value>
-<value letter_id="E">0.000</value>
-<value letter_id="F">0.000</value>
-<value letter_id="G">0.257</value>
-<value letter_id="H">0.000</value>
-<value letter_id="I">0.000</value>
-<value letter_id="K">0.000</value>
-<value letter_id="L">0.000</value>
-<value letter_id="M">0.000</value>
-<value letter_id="N">0.000</value>
-<value letter_id="P">0.000</value>
-<value letter_id="Q">0.000</value>
-<value letter_id="R">0.000</value>
-<value letter_id="S">0.000</value>
-<value letter_id="T">0.217</value>
-<value letter_id="V">0.000</value>
-<value letter_id="W">0.000</value>
-<value letter_id="Y">0.000</value>
-</alphabet_array>
 </letter_frequencies>
 </training_set>
 <model>
-<command_line>meme meme_input_1.fasta -o meme_test1_out -nostatus -maxsize 1000000 </command_line>
-<host>ThinkPad-T450s</host>
-<type>zoops</type>
-<nmotifs>1</nmotifs>
-<evalue_threshold>inf</evalue_threshold>
-<object_function>E-value of product of p-values</object_function>
-<use_llr>0</use_llr>
-<min_width>8</min_width>
-<max_width>50</max_width>
-<wg>11</wg>
-<ws>1</ws>
-<endgaps>yes</endgaps>
-<substring>yes</substring>
-<minsites>2</minsites>
-<maxsites>30</maxsites>
-<wnsites>0.8</wnsites>
-<spmap>pam</spmap>
-<spfuzz>120</spfuzz>
-<prior>megap</prior>
-<beta>7500</beta>
-<maxiter>50</maxiter>
-<distance>1e-05</distance>
-<num_sequences>30</num_sequences>
-<num_positions>1500</num_positions>
-<seed>0</seed>
-<ctfrac>-1</ctfrac>
-<maxwords>-1</maxwords>
-<strands>none</strands>
-<priors_file>prior30.plib</priors_file>
-<reason_for_stopping>Stopped because requested number of motifs (1) found.</reason_for_stopping>
-<background_frequencies source="dataset with add-one prior applied">
-<alphabet_array>
-<value letter_id="A">0.291</value>
-<value letter_id="C">0.229</value>
-<value letter_id="D">0.001</value>
-<value letter_id="E">0.001</value>
-<value letter_id="F">0.001</value>
-<value letter_id="G">0.255</value>
-<value letter_id="H">0.001</value>
-<value letter_id="I">0.001</value>
-<value letter_id="K">0.001</value>
-<value letter_id="L">0.001</value>
-<value letter_id="M">0.001</value>
-<value letter_id="N">0.001</value>
-<value letter_id="P">0.001</value>
-<value letter_id="Q">0.001</value>
-<value letter_id="R">0.001</value>
-<value letter_id="S">0.001</value>
-<value letter_id="T">0.215</value>
-<value letter_id="V">0.001</value>
-<value letter_id="W">0.001</value>
-<value letter_id="Y">0.001</value>
-</alphabet_array>
-</background_frequencies>
-</model>
-<motifs>
-<motif id="motif_1" name="GGGGTATAAAA" alt="MEME-1" width="11" sites="25" ic="40.0" re="13.8" llr="239" e_value="2.4e-011" bayes_threshold="5.33554" elapsed_time="0.772000">
 <scores>
 <alphabet_matrix>
-<alphabet_array>
 <value letter_id="A">-32</value>
-<value letter_id="C">-680</value>
-<value letter_id="D">91</value>
-<value letter_id="E">77</value>
-<value letter_id="F">7</value>
-<value letter_id="G">138</value>
-<value letter_id="H">-20</value>
-<value letter_id="I">55</value>
-<value letter_id="K">64</value>
-<value letter_id="L">107</value>
-<value letter_id="M">11</value>
-<value letter_id="N">150</value>
-<value letter_id="P">142</value>
-<value letter_id="Q">72</value>
-<value letter_id="R">87</value>
-<value letter_id="S">396</value>
-<value letter_id="T">-148</value>
-<value letter_id="V">221</value>
-<value letter_id="W">-140</value>
-<value letter_id="Y">-36</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">-11</value>
-<value letter_id="C">-680</value>
-<value letter_id="D">89</value>
-<value letter_id="E">76</value>
-<value letter_id="F">7</value>
-<value letter_id="G">137</value>
-<value letter_id="H">-21</value>
-<value letter_id="I">55</value>
-<value letter_id="K">63</value>
-<value letter_id="L">107</value>
-<value letter_id="M">10</value>
-<value letter_id="N">149</value>
-<value letter_id="P">141</value>
-<value letter_id="Q">71</value>
-<value letter_id="R">87</value>
-<value letter_id="S">396</value>
-<value letter_id="T">-239</value>
-<value letter_id="V">220</value>
-<value letter_id="W">-140</value>
-<value letter_id="Y">-36</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">-79</value>
-<value letter_id="C">41</value>
-<value letter_id="D">4</value>
-<value letter_id="E">21</value>
-<value letter_id="F">-7</value>
-<value letter_id="G">44</value>
-<value letter_id="H">-62</value>
-<value letter_id="I">42</value>
-<value letter_id="K">-5</value>
-<value letter_id="L">99</value>
-<value letter_id="M">0</value>
-<value letter_id="N">99</value>
-<value letter_id="P">138</value>
-<value letter_id="Q">52</value>
-<value letter_id="R">42</value>
-<value letter_id="S">399</value>
-<value letter_id="T">-46</value>
-<value letter_id="V">223</value>
-<value letter_id="W">-173</value>
-<value letter_id="Y">-68</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">11</value>
-<value letter_id="C">-677</value>
-<value letter_id="D">48</value>
-<value letter_id="E">47</value>
-<value letter_id="F">-2</value>
-<value letter_id="G">127</value>
-<value letter_id="H">-43</value>
-<value letter_id="I">46</value>
-<value letter_id="K">27</value>
-<value letter_id="L">101</value>
-<value letter_id="M">3</value>
-<value letter_id="N">124</value>
-<value letter_id="P">138</value>
-<value letter_id="Q">60</value>
-<value letter_id="R">62</value>
-<value letter_id="S">397</value>
-<value letter_id="T">-235</value>
-<value letter_id="V">220</value>
-<value letter_id="W">-160</value>
-<value letter_id="Y">-55</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">-596</value>
-<value letter_id="C">-820</value>
-<value letter_id="D">12</value>
-<value letter_id="E">-21</value>
-<value letter_id="F">-53</value>
-<value letter_id="G">-267</value>
-<value letter_id="H">-74</value>
-<value letter_id="I">37</value>
-<value letter_id="K">16</value>
-<value letter_id="L">44</value>
-<value letter_id="M">-37</value>
-<value letter_id="N">98</value>
-<value letter_id="P">31</value>
-<value letter_id="Q">9</value>
-<value letter_id="R">19</value>
-<value letter_id="S">319</value>
-<value letter_id="T">212</value>
-<value letter_id="V">127</value>
-<value letter_id="W">-193</value>
-<value letter_id="Y">-95</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">165</value>
-<value letter_id="C">-261</value>
-<value letter_id="D">70</value>
-<value letter_id="E">110</value>
-<value letter_id="F">77</value>
-<value letter_id="G">-521</value>
-<value letter_id="H">-4</value>
-<value letter_id="I">147</value>
-<value letter_id="K">95</value>
-<value letter_id="L">201</value>
-<value letter_id="M">90</value>
-<value letter_id="N">121</value>
-<value letter_id="P">124</value>
-<value letter_id="Q">91</value>
-<value letter_id="R">107</value>
-<value letter_id="S">425</value>
-<value letter_id="T">-527</value>
-<value letter_id="V">314</value>
-<value letter_id="W">-95</value>
-<value letter_id="Y">8</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">-838</value>
-<value letter_id="C">-990</value>
-<value letter_id="D">-89</value>
-<value letter_id="E">-149</value>
-<value letter_id="F">-151</value>
-<value letter_id="G">-841</value>
-<value letter_id="H">-161</value>
-<value letter_id="I">-117</value>
-<value letter_id="K">-113</value>
-<value letter_id="L">-66</value>
-<value letter_id="M">-209</value>
-<value letter_id="N">-68</value>
-<value letter_id="P">-69</value>
-<value letter_id="Q">-129</value>
-<value letter_id="R">-91</value>
-<value letter_id="S">111</value>
-<value letter_id="T">221</value>
-<value letter_id="V">-55</value>
-<value letter_id="W">-255</value>
-<value letter_id="Y">-173</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">176</value>
-<value letter_id="C">-858</value>
-<value letter_id="D">-79</value>
-<value letter_id="E">-103</value>
-<value letter_id="F">-115</value>
-<value letter_id="G">-717</value>
-<value letter_id="H">-148</value>
-<value letter_id="I">-95</value>
-<value letter_id="K">-108</value>
-<value letter_id="L">-17</value>
-<value letter_id="M">-162</value>
-<value letter_id="N">-61</value>
-<value letter_id="P">-12</value>
-<value letter_id="Q">-95</value>
-<value letter_id="R">-69</value>
-<value letter_id="S">193</value>
-<value letter_id="T">-737</value>
-<value letter_id="V">52</value>
-<value letter_id="W">-240</value>
-<value letter_id="Y">-153</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">134</value>
-<value letter_id="C">-686</value>
-<value letter_id="D">0</value>
-<value letter_id="E">16</value>
-<value letter_id="F">-12</value>
-<value letter_id="G">-553</value>
-<value letter_id="H">-68</value>
-<value letter_id="I">44</value>
-<value letter_id="K">-8</value>
-<value letter_id="L">96</value>
-<value letter_id="M">-9</value>
-<value letter_id="N">88</value>
-<value letter_id="P">124</value>
-<value letter_id="Q">41</value>
-<value letter_id="R">36</value>
-<value letter_id="S">384</value>
-<value letter_id="T">11</value>
-<value letter_id="V">216</value>
-<value letter_id="W">-177</value>
-<value letter_id="Y">-71</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">165</value>
-<value letter_id="C">-261</value>
-<value letter_id="D">70</value>
-<value letter_id="E">110</value>
-<value letter_id="F">77</value>
-<value letter_id="G">-521</value>
-<value letter_id="H">-4</value>
-<value letter_id="I">147</value>
-<value letter_id="K">95</value>
-<value letter_id="L">201</value>
-<value letter_id="M">90</value>
-<value letter_id="N">121</value>
-<value letter_id="P">124</value>
-<value letter_id="Q">91</value>
-<value letter_id="R">107</value>
-<value letter_id="S">425</value>
-<value letter_id="T">-527</value>
-<value letter_id="V">314</value>
-<value letter_id="W">-95</value>
-<value letter_id="Y">8</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">147</value>
-<value letter_id="C">-614</value>
-<value letter_id="D">89</value>
-<value letter_id="E">129</value>
-<value letter_id="F">93</value>
-<value letter_id="G">-121</value>
-<value letter_id="H">12</value>
-<value letter_id="I">160</value>
-<value letter_id="K">113</value>
-<value letter_id="L">217</value>
-<value letter_id="M">108</value>
-<value letter_id="N">144</value>
-<value letter_id="P">144</value>
-<value letter_id="Q">111</value>
-<value letter_id="R">125</value>
-<value letter_id="S">447</value>
-<value letter_id="T">-241</value>
-<value letter_id="V">332</value>
-<value letter_id="W">-81</value>
-<value letter_id="Y">22</value>
-</alphabet_array>
-</alphabet_matrix>
-</scores>
-<probabilities>
-<alphabet_matrix>
-<alphabet_array>
 <value letter_id="A">0.240000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.680000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.080000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.280000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.680000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.040000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.160000</value>
-<value letter_id="C">0.320000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.360000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.160000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.320000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.640000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.040000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.000000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.040000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.960000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.960000</value>
-<value letter_id="C">0.040000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.000000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.000000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">1.000000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">1.000000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.000000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.760000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.240000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.960000</value>
-<value letter_id="C">0.040000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.000000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.840000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="D">0.000000</value>
-<value letter_id="E">0.000000</value>
-<value letter_id="F">0.000000</value>
-<value letter_id="G">0.120000</value>
-<value letter_id="H">0.000000</value>
-<value letter_id="I">0.000000</value>
-<value letter_id="K">0.000000</value>
-<value letter_id="L">0.000000</value>
-<value letter_id="M">0.000000</value>
-<value letter_id="N">0.000000</value>
-<value letter_id="P">0.000000</value>
-<value letter_id="Q">0.000000</value>
-<value letter_id="R">0.000000</value>
-<value letter_id="S">0.000000</value>
-<value letter_id="T">0.040000</value>
-<value letter_id="V">0.000000</value>
-<value letter_id="W">0.000000</value>
-<value letter_id="Y">0.000000</value>
-</alphabet_array>
 </alphabet_matrix>
 </probabilities>
 <regular_expression>
@@ -809,484 +102,17 @@
 <left_flank>AAGGCCAGGA</left_flank>
 <site>
 <letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
 </site>
 <right_flank>GCCTGAGAGC</right_flank>
 </contributing_site>
 <contributing_site sequence_id="sequence_25" position="36" strand="none" pvalue="3.41e-06" >
 <left_flank>ACAGGCCCTG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
 <right_flank>GCC</right_flank>
 </contributing_site>
 <contributing_site sequence_id="sequence_19" position="9" strand="none" pvalue="3.41e-06" >
 <left_flank>CAGGCCCTG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
 <right_flank>GCCCCAGCAG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_9" position="13" strand="none" pvalue="3.41e-06" >
-<left_flank>GATTCACTGA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GGCCCTCTGC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_21" position="7" strand="none" pvalue="4.00e-06" >
-<left_flank>CCAAGGA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GCCCCACAAA</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_13" position="13" strand="none" pvalue="5.01e-06" >
-<left_flank>CCACCAGCTT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>AGCCCTGTAC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_23" position="15" strand="none" pvalue="6.06e-06" >
-<left_flank>ATACCCAGGG</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>CCTCAGCAGC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_15" position="21" strand="none" pvalue="8.67e-06" >
-<left_flank>AATCACTGAG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GTCCCAGGGA</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_12" position="18" strand="none" pvalue="8.67e-06" >
-<left_flank>CACCAGAGCT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>AGAAGGTTCT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_11" position="16" strand="none" pvalue="8.67e-06" >
-<left_flank>CACTATTGAA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TTTCATTTGC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_22" position="2" strand="none" pvalue="1.21e-05" >
-<left_flank>GA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GCCAACATCC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_28" position="32" strand="none" pvalue="1.59e-05" >
-<left_flank>CCGGCGGGGC</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
-<right_flank>GGGGCGG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_20" position="4" strand="none" pvalue="1.59e-05" >
-<left_flank>CAGA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
-<right_flank>GTTCCGACCA</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_6" position="15" strand="none" pvalue="1.68e-05" >
-<left_flank>CCCACTACTT</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TCATTCTGAG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_14" position="19" strand="none" pvalue="2.03e-05" >
-<left_flank>CACCAGCAAG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GCTCAGGAGT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_4" position="12" strand="none" pvalue="3.06e-05" >
-<left_flank>CAGGTCTAAG</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>CTTGGAGTCC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_0" position="39" strand="none" pvalue="3.06e-05" >
-<left_flank>CCTCGGGACG</left_flank>
-<site>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank></right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_18" position="37" strand="none" pvalue="3.82e-05" >
-<left_flank>CGTGGTCGCG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_5" position="0" strand="none" pvalue="3.82e-05" >
-<left_flank></left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>ATGGTCCTGT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_29" position="30" strand="none" pvalue="4.02e-05" >
-<left_flank>GCTGCCGGTG</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
-<right_flank>GCCCTGGCG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_1" position="27" strand="none" pvalue="5.52e-05" >
-<left_flank>AGTCACAAGT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GGGTCGCACG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_3" position="14" strand="none" pvalue="5.94e-05" >
-<left_flank>CCCAGGTTTC</left_flank>
-<site>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TCGCCGCACC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_16" position="22" strand="none" pvalue="6.78e-05" >
-<left_flank>AGTTTCAGTT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>attatataac</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_7" position="2" strand="none" pvalue="2.08e-04" >
-<left_flank>TC</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-</site>
-<right_flank>AAATGTTCCT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_8" position="13" strand="none" pvalue="4.05e-04" >
-<left_flank>TATAACTCAG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TAATTTGTAC</right_flank>
-</contributing_site>
-</contributing_sites>
-</motif>
-</motifs>
-<scanned_sites_summary p_thresh="0.0001">
-<scanned_sites sequence_id="sequence_0" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="39" pvalue="3.06e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_1" pvalue="2.21e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="27" pvalue="5.52e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_2" pvalue="7.29e-01" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_3" pvalue="2.37e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="14" pvalue="5.94e-05"/>
-</scanned_sites>
 <scanned_sites sequence_id="sequence_4" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="12" pvalue="3.06e-05"/>
-</scanned_sites>
 <scanned_sites sequence_id="sequence_5" pvalue="1.53e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="0" pvalue="3.82e-05"/>
-</scanned_sites>
 <scanned_sites sequence_id="sequence_6" pvalue="6.70e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="15" pvalue="1.68e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_7" pvalue="1.81e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="4" pvalue="4.54e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_8" pvalue="1.61e-02" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_9" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="13" pvalue="3.41e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_10" pvalue="1.99e-01" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_11" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="16" pvalue="8.67e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_12" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="18" pvalue="8.67e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_13" pvalue="2.01e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="13" pvalue="5.01e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_14" pvalue="8.11e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="19" pvalue="2.03e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_15" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="21" pvalue="8.67e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_16" pvalue="2.71e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="22" pvalue="6.78e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_17" pvalue="8.23e-02" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_18" pvalue="1.53e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="37" pvalue="3.82e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_19" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="9" pvalue="3.41e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_20" pvalue="6.37e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="4" pvalue="1.59e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_21" pvalue="1.60e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="7" pvalue="4.00e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_22" pvalue="4.83e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="2" pvalue="1.21e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_23" pvalue="2.43e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="15" pvalue="6.06e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_24" pvalue="4.26e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="12" pvalue="1.06e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_25" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="36" pvalue="3.41e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_26" pvalue="4.30e-02" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_27" pvalue="4.30e-02" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_28" pvalue="6.37e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="32" pvalue="1.59e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_29" pvalue="1.61e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="30" pvalue="4.02e-05"/>
-</scanned_sites>
-</scanned_sites_summary>
 </MEME>
--- a/test-data/meme_output_test2.html	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/meme_output_test2.html	Wed Dec 11 18:05:15 2019 -0500
@@ -7,7931 +7,21 @@
       // @JSON_VAR data
       var data = {
         "program": "MEME",
-        "version": "4.12.0",
-        "release": "Tue Jun 27 16:22:50 2017 -0700",
+        "version": "5.0.5",
+        "release": "Mon Mar 18 20:12:19 2019 -0700",
         "stop_reason": "Stopped because requested number of motifs (1) found.",
         "cmd": [
-          "meme", "meme_input_1.fasta", "-o", "meme_test2_out", "-nostatus",
-          "-maxsize", "1000000", "-sf", "Galaxy_FASTA_Input", "-dna", "-mod",
-          "zoops", "-nmotifs", "1", "-wnsites", "0.8", "-minw", "8", "-maxw",
-          "50", "-wg", "11", "-ws", "1", "-maxiter", "50", "-distance",
-          "0.001", "-prior", "dirichlet", "-b", "0.01", "-plib",
-          "prior30.plib", "-spmap", "uni", "-spfuzz", "0.5"
+          "meme",
+          "-o",
+          "-nostatus", "-maxsize", "1000000", "-sf", "Galaxy_FASTA_Input",
+          "-dna", "-mod", "zoops", "-nmotifs", "1", "-wnsites", "0.8",
+          "-minw", "8", "-maxw", "50", "-wg", "11", "-ws", "1", "-maxiter",
+          "50", "-distance", "0.001", "-prior", "dirichlet", "-b", "0.01",
+          "-plib",
+          "-spmap", "uni", "-spfuzz", "0.5"
         ],
-        "options": {
-          "mod": "zoops",
-          "revcomp": false,
-          "nmotifs": 1,
-          "minw": 8,
-          "maxw": 50,
-          "minsites": 2,
-          "maxsites": 30,
-          "wnsites": 0.8,
-          "spmap": "uni",
-          "spfuzz": 0.5,
-          "maxwords": -1,
-          "prior": "dirichlet",
-          "b": 0.01,
-          "maxiter": 50,
-          "distance": 0.001,
-          "wg": 11,
-          "ws": 1,
-          "noendgaps": false,
-          "substring": true
-        },
-        "alphabet": {
-          "name": "DNA",
-          "like": "dna",
-          "ncore": 4,
-          "symbols": [
-            {
-              "symbol": "A",
-              "name": "Adenine",
-              "colour": "CC0000",
-              "complement": "T"
-            }, {
-              "symbol": "C",
-              "name": "Cytosine",
-              "colour": "0000CC",
-              "complement": "G"
-            }, {
-              "symbol": "G",
-              "name": "Guanine",
-              "colour": "FFB300",
-              "complement": "C"
-            }, {
-              "symbol": "T",
-              "aliases": "U",
-              "name": "Thymine",
-              "colour": "008000",
-              "complement": "A"
-            }, {
-              "symbol": "N",
-              "aliases": "X.",
-              "name": "Any base",
-              "equals": "ACGT"
-            }, {
-              "symbol": "V",
-              "name": "Not T",
-              "equals": "ACG"
-            }, {
-              "symbol": "H",
-              "name": "Not G",
-              "equals": "ACT"
-            }, {
-              "symbol": "D",
-              "name": "Not C",
-              "equals": "AGT"
-            }, {
-              "symbol": "B",
-              "name": "Not A",
-              "equals": "CGT"
-            }, {
-              "symbol": "M",
-              "name": "Amino",
-              "equals": "AC"
-            }, {
-              "symbol": "R",
-              "name": "Purine",
-              "equals": "AG"
-            }, {
-              "symbol": "W",
-              "name": "Weak",
-              "equals": "AT"
-            }, {
-              "symbol": "S",
-              "name": "Strong",
-              "equals": "CG"
-            }, {
-              "symbol": "Y",
-              "name": "Pyrimidine",
-              "equals": "CT"
-            }, {
-              "symbol": "K",
-              "name": "Keto",
-              "equals": "GT"
-            }
-          ]
-        },
-        "background": {
-          "freqs": [0.294, 0.231, 0.257, 0.217]
-        },
-        "sequence_db": {
-          "source": "Galaxy_FASTA_Input",
-          "psp_source": "prior30.plib",
-          "freqs": [0.294, 0.231, 0.257, 0.217],
-          "sequences": [
-            {
-              "name": "chr21_19617074_19617124_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_26934381_26934431_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_28217753_28217803_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31710037_31710087_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31744582_31744632_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31768316_31768366_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31914206_31914256_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31933633_31933683_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31962741_31962791_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31964683_31964733_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31973364_31973414_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_31992870_31992920_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32185595_32185645_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32202076_32202126_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32253899_32253949_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_32410820_32410870_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_36411748_36411798_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_37838750_37838800_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45705687_45705737_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45971413_45971463_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45978668_45978718_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_45993530_45993580_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46020421_46020471_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46031920_46031970_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46046964_46047014_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46057197_46057247_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46086869_46086919_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_46102103_46102153_-",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_47517957_47518007_+",
-              "length": 50,
-              "weight": 1.000000
-            }, {
-              "name": "chr21_47575506_47575556_-",
-              "length": 50,
-              "weight": 1.000000
-            }
-          ]
-        },
         "motifs": [
-          {
-            "db": 0,
-            "id": "GGSRTATAAAA",
-            "alt": "MEME-1",
-            "len": 11,
-            "nsites": 30,
-            "evalue": "5.1e-040",
-            "ic": 13.0,
-            "re": 12.2,
-            "llr": 254,
-            "bt": 5.2854,
-            "time": 0.376000,
-            "psm": [
-              [-14, -179, 114, -112], [3, -1155, 137, -270], 
-              [-114, 20, 86, -71], [3, -279, 122, -170], 
-              [-1155, -1155, -295, 215], [156, -179, -1155, -170], 
-              [-1155, -1155, -1155, 220], [172, -279, -1155, -1155], 
-              [125, -1155, -1155, 46], [167, -179, -1155, -1155], 
-              [144, -1155, -63, -270]
-            ],
-            "pwm": [
-              [0.266667, 0.066667, 0.566667, 0.100000], 
-              [0.300000, 0.000000, 0.666667, 0.033333], 
-              [0.133333, 0.266667, 0.466667, 0.133333], 
-              [0.300000, 0.033333, 0.600000, 0.066667], 
-              [0.000000, 0.000000, 0.033333, 0.966667], 
-              [0.866667, 0.066667, 0.000000, 0.066667], 
-              [0.000000, 0.000000, 0.000000, 1.000000], 
-              [0.966667, 0.033333, 0.000000, 0.000000], 
-              [0.700000, 0.000000, 0.000000, 0.300000], 
-              [0.933333, 0.066667, 0.000000, 0.000000], 
-              [0.800000, 0.000000, 0.166667, 0.033333]
-            ],
-            "sites": [
-              {
-                "seq": 24,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 4.51e-07,
-                "lflank": "AAGGCCAGGA",
-                "match": "GGGGTATAAAA",
-                "rflank": "GCCTGAGAGC"
-              }, {
-                "seq": 23,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 2.22e-06,
-                "lflank": "ATACCCAGGG",
-                "match": "AGGGTATAAAA",
-                "rflank": "CCTCAGCAGC"
-              }, {
-                "seq": 13,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 2.74e-06,
-                "lflank": "CCACCAGCTT",
-                "match": "GAGGTATAAAA",
-                "rflank": "AGCCCTGTAC"
-              }, {
-                "seq": 25,
-                "pos": 36,
-                "rc": false,
-                "pvalue": 4.86e-06,
-                "lflank": "ACAGGCCCTG",
-                "match": "GGCATATAAAA",
-                "rflank": "GCC"
-              }, {
-                "seq": 21,
-                "pos": 7,
-                "rc": false,
-                "pvalue": 4.86e-06,
-                "lflank": "CCAAGGA",
-                "match": "GGAGTATAAAA",
-                "rflank": "GCCCCACAAA"
-              }, {
-                "seq": 19,
-                "pos": 9,
-                "rc": false,
-                "pvalue": 4.86e-06,
-                "lflank": "CAGGCCCTG",
-                "match": "GGCATATAAAA",
-                "rflank": "GCCCCAGCAG"
-              }, {
-                "seq": 9,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 4.86e-06,
-                "lflank": "GATTCACTGA",
-                "match": "GGCATATAAAA",
-                "rflank": "GGCCCTCTGC"
-              }, {
-                "seq": 28,
-                "pos": 32,
-                "rc": false,
-                "pvalue": 6.48e-06,
-                "lflank": "CCGGCGGGGC",
-                "match": "GGGGTATAAAG",
-                "rflank": "GGGGCGG"
-              }, {
-                "seq": 20,
-                "pos": 4,
-                "rc": false,
-                "pvalue": 6.48e-06,
-                "lflank": "CAGA",
-                "match": "GGGGTATAAAG",
-                "rflank": "GTTCCGACCA"
-              }, {
-                "seq": 12,
-                "pos": 18,
-                "rc": false,
-                "pvalue": 6.48e-06,
-                "lflank": "CACCAGAGCT",
-                "match": "GGGATATATAA",
-                "rflank": "AGAAGGTTCT"
-              }, {
-                "seq": 15,
-                "pos": 21,
-                "rc": false,
-                "pvalue": 1.38e-05,
-                "lflank": "AATCACTGAG",
-                "match": "GATGTATAAAA",
-                "rflank": "GTCCCAGGGA"
-              }, {
-                "seq": 11,
-                "pos": 16,
-                "rc": false,
-                "pvalue": 1.38e-05,
-                "lflank": "CACTATTGAA",
-                "match": "GATGTATAAAA",
-                "rflank": "TTTCATTTGC"
-              }, {
-                "seq": 0,
-                "pos": 39,
-                "rc": false,
-                "pvalue": 1.41e-05,
-                "lflank": "CCTCGGGACG",
-                "match": "TGGGTATATAA",
-                "rflank": ""
-              }, {
-                "seq": 6,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 1.61e-05,
-                "lflank": "CCCACTACTT",
-                "match": "AGAGTATAAAA",
-                "rflank": "TCATTCTGAG"
-              }, {
-                "seq": 22,
-                "pos": 2,
-                "rc": false,
-                "pvalue": 1.95e-05,
-                "lflank": "GA",
-                "match": "GACATATAAAA",
-                "rflank": "GCCAACATCC"
-              }, {
-                "seq": 14,
-                "pos": 17,
-                "rc": false,
-                "pvalue": 1.95e-05,
-                "lflank": "CCCACCAGCA",
-                "match": "AGGATATATAA",
-                "rflank": "AAGCTCAGGA"
-              }, {
-                "seq": 18,
-                "pos": 37,
-                "rc": false,
-                "pvalue": 2.16e-05,
-                "lflank": "CGTGGTCGCG",
-                "match": "GGGGTATAACA",
-                "rflank": "GC"
-              }, {
-                "seq": 29,
-                "pos": 30,
-                "rc": false,
-                "pvalue": 3.04e-05,
-                "lflank": "GCTGCCGGTG",
-                "match": "AGCGTATAAAG",
-                "rflank": "GCCCTGGCG"
-              }, {
-                "seq": 4,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 3.04e-05,
-                "lflank": "CAGGTCTAAG",
-                "match": "AGCATATATAA",
-                "rflank": "CTTGGAGTCC"
-              }, {
-                "seq": 5,
-                "pos": 0,
-                "rc": false,
-                "pvalue": 3.67e-05,
-                "lflank": "",
-                "match": "AACGTATATAA",
-                "rflank": "ATGGTCCTGT"
-              }, {
-                "seq": 1,
-                "pos": 27,
-                "rc": false,
-                "pvalue": 3.93e-05,
-                "lflank": "AGTCACAAGT",
-                "match": "GAGTTATAAAA",
-                "rflank": "GGGTCGCACG"
-              }, {
-                "seq": 7,
-                "pos": 4,
-                "rc": false,
-                "pvalue": 5.65e-05,
-                "lflank": "TCAG",
-                "match": "AGTATATATAA",
-                "rflank": "ATGTTCCTGT"
-              }, {
-                "seq": 3,
-                "pos": 14,
-                "rc": false,
-                "pvalue": 6.24e-05,
-                "lflank": "CCCAGGTTTC",
-                "match": "TGAGTATATAA",
-                "rflank": "TCGCCGCACC"
-              }, {
-                "seq": 16,
-                "pos": 22,
-                "rc": false,
-                "pvalue": 7.15e-05,
-                "lflank": "AGTTTCAGTT",
-                "match": "GGCATCTAAAA",
-                "rflank": "attatataac"
-              }, {
-                "seq": 27,
-                "pos": 36,
-                "rc": false,
-                "pvalue": 1.39e-04,
-                "lflank": "TGCCTGGGTC",
-                "match": "CAGGTATAAAG",
-                "rflank": "GCT"
-              }, {
-                "seq": 26,
-                "pos": 37,
-                "rc": false,
-                "pvalue": 1.39e-04,
-                "lflank": "TGCCTGGGCC",
-                "match": "CAGGTATAAAG",
-                "rflank": "GC"
-              }, {
-                "seq": 17,
-                "pos": 2,
-                "rc": false,
-                "pvalue": 4.81e-04,
-                "lflank": "ga",
-                "match": "TGGTTTTATAA",
-                "rflank": "ggggcctcac"
-              }, {
-                "seq": 8,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 8.57e-04,
-                "lflank": "TATAACTCAG",
-                "match": "GTTGGATAAAA",
-                "rflank": "TAATTTGTAC"
-              }, {
-                "seq": 10,
-                "pos": 7,
-                "rc": false,
-                "pvalue": 1.47e-03,
-                "lflank": "aaactta",
-                "match": "AAACTCTATAA",
-                "rflank": "acttaaaact"
-              }, {
-                "seq": 2,
-                "pos": 26,
-                "rc": false,
-                "pvalue": 2.64e-03,
-                "lflank": "GGTGGGGGTG",
-                "match": "GGGGTTTCACT",
-                "rflank": "GGTCCACTAT"
-              }
-            ]
-          }
-        ],
-        "scan": [
-          {
-            "pvalue": 5.63e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 39,
-                "rc": false,
-                "pvalue": 1.41e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.57e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 27,
-                "rc": false,
-                "pvalue": 3.93e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.00e-01,
-            "sites": []
-          }, {
-            "pvalue": 2.49e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 14,
-                "rc": false,
-                "pvalue": 6.24e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.22e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 3.04e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.47e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 0,
-                "rc": false,
-                "pvalue": 3.67e-05
-              }
-            ]
-          }, {
-            "pvalue": 6.45e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 1.61e-05
-              }
-            ]
-          }, {
-            "pvalue": 2.26e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 4,
-                "rc": false,
-                "pvalue": 5.65e-05
-              }
-            ]
-          }, {
-            "pvalue": 3.37e-02,
-            "sites": []
-          }, {
-            "pvalue": 1.95e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 4.86e-06
-              }
-            ]
-          }, {
-            "pvalue": 5.73e-02,
-            "sites": []
-          }, {
-            "pvalue": 5.52e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 16,
-                "rc": false,
-                "pvalue": 1.38e-05
-              }
-            ]
-          }, {
-            "pvalue": 2.59e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 18,
-                "rc": false,
-                "pvalue": 6.48e-06
-              }
-            ]
-          }, {
-            "pvalue": 1.10e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 13,
-                "rc": false,
-                "pvalue": 2.74e-06
-              }
-            ]
-          }, {
-            "pvalue": 7.78e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 17,
-                "rc": false,
-                "pvalue": 1.95e-05
-              }
-            ]
-          }, {
-            "pvalue": 5.52e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 21,
-                "rc": false,
-                "pvalue": 1.38e-05
-              }
-            ]
-          }, {
-            "pvalue": 2.85e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 22,
-                "rc": false,
-                "pvalue": 7.15e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.90e-02,
-            "sites": []
-          }, {
-            "pvalue": 8.63e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 37,
-                "rc": false,
-                "pvalue": 2.16e-05
-              }
-            ]
-          }, {
-            "pvalue": 1.95e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 9,
-                "rc": false,
-                "pvalue": 4.86e-06
-              }
-            ]
-          }, {
-            "pvalue": 2.59e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 4,
-                "rc": false,
-                "pvalue": 6.48e-06
-              }
-            ]
-          }, {
-            "pvalue": 1.95e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 7,
-                "rc": false,
-                "pvalue": 4.86e-06
-              }
-            ]
-          }, {
-            "pvalue": 7.78e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 2,
-                "rc": false,
-                "pvalue": 1.95e-05
-              }
-            ]
-          }, {
-            "pvalue": 8.89e-05,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 15,
-                "rc": false,
-                "pvalue": 2.22e-06
-              }
-            ]
-          }, {
-            "pvalue": 1.80e-05,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 12,
-                "rc": false,
-                "pvalue": 4.51e-07
-              }
-            ]
-          }, {
-            "pvalue": 1.95e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 36,
-                "rc": false,
-                "pvalue": 4.86e-06
-              }
-            ]
-          }, {
-            "pvalue": 5.54e-03,
-            "sites": []
-          }, {
-            "pvalue": 5.54e-03,
-            "sites": []
-          }, {
-            "pvalue": 2.59e-04,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 32,
-                "rc": false,
-                "pvalue": 6.48e-06
-              }
-            ]
-          }, {
-            "pvalue": 1.22e-03,
-            "sites": [
-              {
-                "motif": 0,
-                "pos": 30,
-                "rc": false,
-                "pvalue": 3.04e-05
-              }
-            ]
-          }
         ]
       };
     </script>
-    <script>
 var site_url = "http://meme-suite.org";
-</script>
-    <script>
-
-/*
- * $
- *
- * Shorthand function for getElementById
- */
-function $(el) {
-  return document.getElementById(el);
-}
-
-
-/*
- * See http://stackoverflow.com/a/5450113/66387
- * Does string multiplication like the perl x operator.
- */
-function string_mult(pattern, count) {
-    if (count < 1) return '';
-    var result = '';
-    while (count > 1) {
-        if (count & 1) result += pattern;
-        count >>= 1, pattern += pattern;
-    }
-    return result + pattern;
-}
-
-/*
- * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript
- * Slightly modified with information from
- * https://developer.mozilla.org/en/DOM/window.location
- */
-function parse_params() {
-  "use strict";
-  var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v;
-  search = window.location.search;
-  queryStart = search.indexOf("?") + 1;
-  queryEnd   = search.indexOf("#") + 1 || search.length + 1;
-  query      = search.slice(queryStart, queryEnd - 1);
-
-  if (query === search || query === "") return {};
-
-  params  = {};
-  nvPairs = query.replace(/\+/g, " ").split("&");
-
-  for (i = 0; i < nvPairs.length; i++) {
-    nv = nvPairs[i].split("=");
-    n  = decodeURIComponent(nv[0]);
-    v  = decodeURIComponent(nv[1]);
-    // allow a name to be used multiple times
-    // storing each value in the array
-    if (!(n in params)) {
-      params[n] = [];
-    }
-    params[n].push(nv.length === 2 ? v : null);
-  }
-  return params;
-}
-
-/*
- * coords
- *
- * Calculates the x and y offset of an element.
- * From http://www.quirksmode.org/js/findpos.html
- * with alterations to take into account scrolling regions
- */
-function coords(elem) {
-  var myX = myY = 0;
-  if (elem.getBoundingClientRect) {
-    var rect;
-    rect = elem.getBoundingClientRect();
-    myX = rect.left + ((typeof window.pageXOffset !== "undefined") ?
-        window.pageXOffset : document.body.scrollLeft);
-    myY = rect.top + ((typeof window.pageYOffset !== "undefined") ?
-        window.pageYOffset : document.body.scrollTop);
-  } else {
-    // this fall back doesn't properly handle absolutely positioned elements
-    // inside a scrollable box
-    var node;
-    if (elem.offsetParent) {
-      // subtract all scrolling
-      node = elem;
-      do {
-        myX -= node.scrollLeft ? node.scrollLeft : 0;
-        myY -= node.scrollTop ? node.scrollTop : 0;
-      } while (node = node.parentNode);
-      // this will include the page scrolling (which is unwanted) so add it back on
-      myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft;
-      myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop;
-      // sum up offsets
-      node = elem;
-      do {
-        myX += node.offsetLeft;
-        myY += node.offsetTop;
-      } while (node = node.offsetParent);
-    }
-  }
-  return [myX, myY];
-}
-
-/*
- * position_popup
- *
- * Positions a popup relative to an anchor element.
- *
- * The avaliable positions are:
- * 0 - Centered below the anchor.
- */
-function position_popup(anchor, popup, position) {
-  "use strict";
-  var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h;
-  var a_xy, spacer, margin, scrollbar, page_w;
-  // define constants
-  spacer = 5;
-  margin = 15;
-  scrollbar = 15;
-  // define the positions and widths
-  a_xy = coords(anchor);
-  a_x = a_xy[0];
-  a_y = a_xy[1];
-  a_w = anchor.offsetWidth;
-  a_h = anchor.offsetHeight;
-  p_w = popup.offsetWidth;
-  p_h = popup.offsetHeight;
-  page_w = null;
-  if (window.innerWidth) {
-    page_w = window.innerWidth;
-  } else if (document.body) {
-    page_w = document.body.clientWidth;
-  }
-  // check the position type is defined
-  if (typeof position !== "number") {
-    position = 0;
-  }
-  // calculate the popup position
-  switch (position) {
-    case 1:
-      p_x = a_x + a_w + spacer;
-      p_y = a_y + (a_h / 2) - (p_h / 2);
-      break;
-    case 0:
-    default:
-      p_x = a_x + (a_w / 2) - (p_w / 2);
-      p_y = a_y + a_h + spacer;
-      break;
-  }
-  // constrain the popup position
-  if (p_x < margin) {
-    p_x = margin;
-  } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) {
-    p_x = page_w - margin - scrollbar - p_w;
-  }
-  if (p_y < margin) {
-    p_y = margin;
-  }
-  // position the popup
-  popup.style.left = p_x + "px";
-  popup.style.top = p_y + "px";
-}
-
-function lookup_help_popup(popup_id) {
-  var _body, pop, info;
-  pop = document.getElementById(popup_id);
-  if (pop == null) {
-    _body = document.getElementsByTagName("body")[0];
-    pop = document.createElement("div");
-    pop.className = "pop_content";
-    pop.id = popup_id;
-    pop.style.backgroundColor = "#FFC";
-    pop.style.borderColor = "black";
-    info = document.createElement("p");
-    info.style.fontWeight = "bold";
-    info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\"."));
-    pop.appendChild(info);
-    // this might cause problems with the menu, but as this only happens
-    // when something is already wrong I don't think that's too much of a problem
-    _body.insertBefore(pop, _body.firstChild);
-  }
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) {
-    if (!/\bauto_buttons\b/.test(pop.className)) {
-      pop.className += " auto_buttons";
-      var back_btn_sec = document.createElement("div");
-      back_btn_sec.className = "nested_only pop_back_sec";
-      var back_btn = document.createElement("span");
-      back_btn.className = "pop_back";
-      back_btn.appendChild(document.createTextNode("<< back"));
-      back_btn.addEventListener("click", function(e) {
-        help_return();
-      }, false);
-      back_btn_sec.appendChild(back_btn);
-      pop.insertBefore(back_btn_sec, pop.firstChild);
-      var close_btn_sec = document.createElement("div");
-      close_btn_sec.className = "pop_close_sec";
-      var close_btn = document.createElement("span");
-      close_btn.className = "pop_close";
-      close_btn.appendChild(document.createTextNode("close"));
-      close_btn.addEventListener("click", function(e) {
-        help_popup();
-      }, false);
-      close_btn_sec.appendChild(close_btn);
-      pop.appendChild(close_btn_sec);
-    }
-  }
-  return pop;
-}
-
-/*
- * help_popup
- *
- * Moves around help pop-ups so they appear
- * below an activator.
- */
-function help_popup(activator, popup_id) {
-  "use strict";
-  var pop;
-  // set default values
-  if (typeof help_popup.popup === "undefined") {
-    help_popup.popup = [];
-  }
-  if (typeof help_popup.activator === "undefined") {
-    help_popup.activator = null;
-  }
-  var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (typeof(activator) == "undefined") { // no activator so hide
-    if (last_pop != null) {
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-    }
-    return;
-  }
-  pop = lookup_help_popup(popup_id);
-  if (pop == last_pop) {
-    if (activator == help_popup.activator) {
-      //hide popup (as we've already shown it for the current help button)
-      last_pop.style.display = 'none';
-      help_popup.popup = [];
-      return; // toggling complete!
-    }
-  } else if (last_pop != null) {
-    //activating different popup so hide current one
-    last_pop.style.display = 'none';
-  }
-  help_popup.popup = [pop];
-  help_popup.activator = activator;
-  toggle_class(pop, "nested", false);
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = 'block';
-  position_popup(activator, pop);
-}
-
-/*
- * help_refine
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_refine(popup_id) {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not refine a help popup when one is not shown!");
-  }
-  var pop = lookup_help_popup(popup_id);
-  var last_pop = help_popup.popup[help_popup.popup.length - 1];
-  if (pop == last_pop) return; // slightly odd, but no real cause for alarm
-  help_popup.popup.push(pop);
-  toggle_class(pop, "nested", true);
-  last_pop.style.display = "none";
-  //must make the popup visible to measure it or it has zero width
-  pop.style.display = "block";
-  position_popup(help_popup.activator, pop);
-}
-
-/*
- * help_return
- * 
- * Intended for links within a help popup. Stores a stack of state so
- * you can go back.
- */
-function help_return() {
-  if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) {
-    throw new Error("Can not return to a earlier help popup when one is not shown!");
-  }
-  var last_pop = help_popup.popup.pop();
-  last_pop.style.display = "none";
-  var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null);
-  if (pop != null) {
-    toggle_class(pop, "nested", help_popup.popup.length > 1);
-    pop.style.display = "block";
-    position_popup(help_popup.activator, pop);
-  } else {
-    help_popup.activator = null;
-  }
-}
-
-/*
- * update_scroll_pad
- *
- * Creates padding at the bottom of the page to allow
- * scrolling of anything into view.
- */
-function update_scroll_pad() {
-  var page, pad;
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  pad = $("scrollpad");
-  if (pad === null) {
-    pad = document.createElement("div");
-    pad.id = 'scrollpad';
-    document.getElementsByTagName('body')[0].appendChild(pad);
-  }
-  pad.style.height = Math.abs(page.clientHeight - 100) + "px";
-}
-
-function substitute_classes(node, remove, add) {
-  "use strict";
-  var list, all, i, cls, classes;
-  list = node.className.split(/\s+/);
-  all = {};
-  for (i = 0; i < list.length; i++) {
-    if (list[i].length > 0) all[list[i]] = true;
-  }
-  for (i = 0; i < remove.length; i++) {
-    if (all.hasOwnProperty(remove[i])) {
-      delete all[remove[i]];
-    }
-  }
-  for (i = 0; i < add.length; i++) {
-    all[add[i]] = true;
-  }
-  classes = "";
-  for (cls in all) {
-    classes += cls + " ";
-  }
-  node.className = classes;
-}
-
-/*
- * toggle_class
- *
- * Adds or removes a class from the node. If the parameter 'enabled' is not 
- * passed then the existence of the class will be toggled, otherwise it will be
- * included if enabled is true.
- */
-function toggle_class(node, cls, enabled) {
-  var classes = node.className;
-  var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/);
-  var found = false;
-  for (var i = 0; i < list.length; i++) {
-    if (list[i] == cls) {
-      list.splice(i, 1);
-      i--;
-      found = true;
-    }
-  }
-  if (typeof enabled == "undefined") {
-    if (!found) list.push(cls);
-  } else {
-    if (enabled) list.push(cls);
-  }
-  node.className = list.join(" ");
-}
-
-/*
- * find_child
- *
- * Searches child nodes in depth first order and returns the first it finds
- * with the className specified.
- * TODO replace with querySelector
- */
-function find_child(node, className) {
-  var pattern;
-  if (node == null || typeof node !== "object") {
-    return null;
-  }
-  if (typeof className === "string") {
-    pattern = new RegExp("\\b" + className + "\\b");
-  } else {
-    pattern = className;
-  }
-  if (node.nodeType == Node.ELEMENT_NODE && 
-      pattern.test(node.className)) {
-    return node;
-  } else {
-    var result = null;
-    for (var i = 0; i < node.childNodes.length; i++) {
-      result = find_child(node.childNodes[i], pattern);
-      if (result != null) break;
-    }
-    return result;
-  }
-}
-
-/*
- * find_parent
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the className specified.
- */
-function find_parent(node, className) {
-  var pattern;
-  pattern = new RegExp("\\b" + className + "\\b");
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && 
-        pattern.test(node.className)) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * find_parent_tag
- *
- * Searches parent nodes outwards from the node and returns the first it finds
- * with the tag name specified. HTML tags should be specified in upper case.
- */
-function find_parent_tag(node, tag_name) {
-  do {
-    if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) {
-      return node;
-    }
-  } while (node = node.parentNode);
-  return null;
-}
-
-/*
- * __toggle_help
- *
- * Uses the 'topic' property of the this object to
- * toggle display of a help topic.
- *
- * This function is not intended to be called directly.
- */
-function __toggle_help(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-
-  help_popup(this, this.getAttribute("data-topic"));
-}
-
-function setup_help_button(button) {
-  "use strict";
-  var topic;
-  if (button.hasAttribute("data-topic")) {
-    topic = button.getAttribute("data-topic");
-    if (document.getElementById(topic) != null) {
-      button.tabIndex = "0"; // make keyboard selectable
-      button.addEventListener("click", function() {
-        help_popup(button, topic);
-      }, false);
-      button.addEventListener("keydown", function(e) {
-        // toggle only on Enter or Spacebar, let other keys do their thing
-        if (e.keyCode !== 13 && e.keyCode !== 32) return;
-        // stop a submit or something like that
-        e.preventDefault();
-        help_popup(button, topic);
-      }, false);
-    } else {
-      button.style.visibility = "hidden";
-    }
-  }
-  button.className += " active";
-}
-
-/*
- * help_button
- *
- * Makes a help button for the passed topic.
- */
-function help_button(topic) {
-  var btn = document.createElement("div");
-  btn.className = "help";
-  btn.setAttribute("data-topic", topic);
-  setup_help_button(btn);
-  return btn;
-}
-
-/*
- * prepare_download
- *
- * Sets the attributes of a link to setup a file download using the given content.
- * If no link is provided then create one and click it.
- */
-function prepare_download(content, mimetype, filename, link) {
-  "use strict";
-  // if no link is provided then create one and click it
-  var click_link = false;
-  if (!link) {
-    link = document.createElement("a");
-    click_link = true;
-  }
-  try {
-    // Use a BLOB to convert the text into a data URL.
-    // We could do this manually with a base 64 conversion.
-    // This will only be supported on modern browsers,
-    // hence the try block.
-    var blob = new Blob([content], {type: mimetype});
-    var reader = new FileReader();
-    reader.onloadend = function() {
-      // If we're lucky the browser will also support the download
-      // attribute which will let us suggest a file name to save the link.
-      // Otherwise it is likely that the filename will be unintelligible. 
-      link.setAttribute("download", filename);
-      link.href = reader.result;
-      if (click_link) {
-        // must add the link to click it
-        document.body.appendChild(link);
-        link.click();
-        document.body.removeChild(link);
-      }
-    }
-    reader.readAsDataURL(blob);
-  } catch (error) {
-    if (console && console.log) console.log(error);
-    // probably an old browser
-    link.href = "";
-    link.visible = false;
-  }
-}
-
-/*
- * add_cell
- *
- * Add a cell to the table row.
- */
-function add_cell(row, node, cls, click_action) {
-  var cell = row.insertCell(row.cells.length);
-  if (node) cell.appendChild(node);
-  if (cls && cls !== "") cell.className = cls;
-  if (click_action) cell.addEventListener("click", click_action, false);
-}
-
-/*
- * add_header_cell
- *
- * Add a header cell to the table row.
- */
-function add_header_cell(row, node, help_topic, cls, colspan) {
-  var th = document.createElement("th");
-  if (node) th.appendChild(node);
-  if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic));
-  if (cls && cls !== "") th.className = cls;
-  if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan;
-  row.appendChild(th);
-}
-
-/*
- * add_text_cell
- *
- * Add a text cell to the table row.
- */
-function add_text_cell(row, text, cls, action) {
-  var node = null;
-  if (typeof(text) != 'undefined') node = document.createTextNode(text);
-  add_cell(row, node, cls, action);
-}
-
-/*
- * add_text_header_cell
- *
- * Add a text header cell to the table row.
- */
-function add_text_header_cell(row, text, help_topic, cls, action, colspan) {
-  var node = null;
-  if (typeof(text) != 'undefined') {
-    var nbsp = (help_topic ? "\u00A0" : "");
-    var str = "" + text;
-    var parts = str.split(/\n/);
-    if (parts.length === 1) {
-      if (action) {
-        node = document.createElement("span");
-        node.appendChild(document.createTextNode(str + nbsp));
-      } else {
-        node = document.createTextNode(str + nbsp);
-      }
-    } else {
-      node = document.createElement("span");
-      for (var i = 0; i < parts.length; i++) {
-        if (i !== 0) {
-          node.appendChild(document.createElement("br"));
-        }
-        node.appendChild(document.createTextNode(parts[i]));
-      }
-    }
-    if (action) {
-      node.addEventListener("click", action, false);
-      node.style.cursor = "pointer";
-    }
-  }
-  add_header_cell(row, node, help_topic, cls, colspan);
-}
-
-function setup_help() {
-  "use strict";
-  var help_buttons, i;
-  help_buttons = document.querySelectorAll(".help:not(.active)");
-  for (i = 0; i < help_buttons.length; i++) {
-    setup_help_button(help_buttons[i]);
-  }
-}
-
-function setup_scrollpad() {
-  "use strict";
-  if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) {
-    window.addEventListener("resize", update_scroll_pad, false);
-    update_scroll_pad();
-  }
-}
-
-// anon function to avoid polluting global scope
-(function() {
-  "use strict";
-  window.addEventListener("load", function load(evt) {
-    window.removeEventListener("load", load, false);
-    setup_help();
-    setup_scrollpad();
-  }, false);
-})();
-
-/*
- *  make_link
- *
- *  Creates a text node and if a URL is specified it surrounds it with a link.
- *  If the URL doesn't begin with "http://" it automatically adds it, as
- *  relative links don't make much sense in this context.
- */
-function make_link(text, url) {
-  var textNode = null;
-  var link = null;
-  if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text);
-  if (typeof url === "string") {
-    if (url.indexOf("//") == -1) {
-      url = "http://" + url;
-    }
-    link = document.createElement('a');
-    link.href = url;
-    if (textNode) link.appendChild(textNode);
-    return link;
-  }
-  return textNode;
-}
-</script>
-    <script>
-      // 
-      // return true if any part of the passed element is visible in the viewport
-      //
-      function element_in_viewport(elem) {
-        var rect;
-        try {
-          rect = elem.getBoundingClientRect();
-        } catch (e) {
-          return false;
-        }
-        return (
-            rect.top < (window.innerHeight || document.body.clientHeight) &&
-            rect.bottom > 0 &&
-            rect.left < (window.innerWidth || document.body.clientWidth) &&
-            rect.right > 0
-            );
-      }
-
-      //
-      // Functions to delay a drawing task until it is required or it would not lag the display to do so
-      //
-
-      // a list of items still to be drawn
-      var drawable_list = [];
-      // the delay between drawing objects that are not currently visible
-      var draw_delay = 1;
-      // the delay after a user interaction
-      var user_delay = 300;
-      // the delay after a user has stopped scrolling and is viewing the stuff drawn on the current page
-      var stop_delay = 300;
-      // the timer handle; allows resetting of the timer after user interactions
-      var draw_timer = null;
-
-      //
-      // Drawable
-      //
-      // elem - a page element which defines the position on the page that drawing is to be done
-      // task - an object with the method run which takes care of painting the object
-      //
-      var Drawable = function(elem, task) {
-        this.elem = elem;
-        this.task = task;
-      }
-
-      //
-      // Drawable.is_visible
-      //
-      // Determines if the element is visible in the viewport
-      //
-      Drawable.prototype.is_visible = function() {
-        return element_in_viewport(this.elem);
-      }
-
-      //
-      // Drawable.run
-      //
-      // Run the task held by the drawable
-      Drawable.prototype.run = function() {
-        if (this.task) this.task.run();
-        this.task = null;
-      }
-
-      //
-      // Drawable.run
-      //
-      // Run the task iff visible
-      // returns true if the task ran or has already run
-      Drawable.prototype.run_visible = function() {
-        if (this.task) {
-          if (element_in_viewport(this.elem)) {
-            this.task.run();
-            this.task = null;
-            return true;
-          }
-          return false;
-        } else {
-          return true;
-        }
-      }
-
-      //
-      // draw_on_screen
-      //
-      // Checks each drawable object and draws those on screen.
-      //
-      function draw_on_screen() {
-        var found = false;
-        for (var i = 0; i < drawable_list.length; i++) {
-          if (drawable_list[i].run_visible()) {
-            drawable_list.splice(i--, 1);
-            found = true;
-          }
-        }
-        return found;
-      }
-
-      //
-      // process_draw_tasks
-      //
-      // Called on a delay to process the next avaliable
-      // draw task.
-      //
-      function process_draw_tasks() {
-        var delay = draw_delay;
-        draw_timer = null;
-        if (drawable_list.length == 0) return; //no more tasks
-        if (draw_on_screen()) {
-          delay = stop_delay; //give the user a chance to scroll
-        } else {
-          //get next task
-          var drawable = drawable_list.shift();
-          drawable.task.run();
-        }
-        //allow UI updates between tasks
-        draw_timer = window.setTimeout("process_draw_tasks()", delay);
-      }
-
-      //
-      // delayed_process_draw_tasks
-      //
-      // Call process_draw_tasks after a short delay.
-      // The delay serves to group multiple redundant events.       
-      // Should be set as event handler for onscroll and onresize.
-      //
-      function delayed_process_draw_tasks() {
-        //reset the timer
-        if (drawable_list.length > 0) { 
-          if (draw_timer != null) clearTimeout(draw_timer);
-          draw_timer = window.setTimeout("process_draw_tasks()", user_delay);
-        }
-      }
-
-      //
-      // add_draw_task
-      //
-      // Add a drawing task to be called immediately if it is
-      // visible, or to be called on a delay to reduce stuttering
-      // effect on the web browser.
-      function add_draw_task(elem, task) {
-        drawable = new Drawable(elem, task);
-        if (drawable.is_visible()) {
-          task.run();
-        } else {
-          drawable_list.push(drawable);
-          //reset timer
-          if (draw_timer != null) clearTimeout(draw_timer);
-          draw_timer = window.setTimeout("process_draw_tasks()", user_delay);
-        }
-      }
-
-</script>
-    <script>
-//======================================================================
-// start Alphabet object
-//======================================================================
-var Alphabet = function(alphabet, background) {
-  "use strict";
-  var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background;
-  generate_background = (background == null);
-  if (generate_background) {
-    background = [];
-    for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore;
-  } else if (alphabet.ncore != background.length) {
-    throw new Error("The background length does not match the alphabet length.");
-  }
-  this.name = alphabet.name;
-  this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null);
-  this.ncore = alphabet.ncore;
-  this.symbols = alphabet.symbols;
-  this.background = background;
-  this.genbg = generate_background;
-  this.encode = {};
-  this.encode2core = {};
-  this.complement = {};
-  // check if all symbols are same case
-  var seen_uc = false;
-  var seen_lc = false;
-  var check_case = function (syms) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        if (sym >= 'a' && sym <= 'z') seen_lc = true;
-        else if (sym >= 'A' && sym <= 'Z') seen_uc = true;
-      }
-    }
-  };
-  for (i = 0; i < this.symbols.length; i++) {
-    check_case(this.symbols[i].symbol);
-    check_case(this.symbols[i].aliases);
-  }
-  // now map symbols to indexes
-  var update_array = function(array, syms, index) {
-    var s, sym;
-    if (typeof syms === "string") {
-      for (s = 0; s < syms.length; s++) {
-        sym = syms.charAt(s);
-        array[sym] = index;
-        // when only a single case is used, then encode as case insensitive
-        if (seen_uc != seen_lc) {
-          if (sym >= 'a' && sym <= 'z') {
-            array[sym.toUpperCase()] = index;
-          } else if (sym >= 'A' && sym <= 'Z') {
-            array[sym.toLowerCase()] = index;
-          }
-        }
-      }
-    }
-  }
-  // map core symbols to index
-  for (i = 0; i < this.ncore; i++) {
-    update_array(this.encode2core, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode2core, this.symbols[i].aliases, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-  }
-  // map ambigous symbols to index
-  ambigs = {};
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    update_array(this.encode, this.symbols[i].symbol, i);
-    update_array(this.encode, this.symbols[i].aliases, i);
-    ambigs[this.symbols[i].equals] = i;
-  }
-  // determine complements
-  for (i = 0; i < this.ncore; i++) {
-    complement = this.symbols[i].complement;
-    if (typeof complement === "string") {
-      this.complement[i] = this.encode2core[complement];
-    }
-  }
-  next_symbol:
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    complement = "";
-    for (j = 0; j < this.symbols[i].equals.length; j++) {
-      comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]];
-      if (typeof comp_e_sym !== "number") continue next_symbol;
-      complement += this.symbols[comp_e_sym].symbol;
-    }
-    complement = complement.split("").sort().join("");
-    if (typeof ambigs[complement] === "number") {
-      this.complement[i] = ambigs[complement];
-    }
-  }
-  // determine case insensitivity
-  this.case_insensitive = true;
-  if (seen_uc == seen_lc) {
-    // when there is a mixture of cases it probably won't
-    // be case insensitive but we still need to check
-    loop:
-    for (i = 0; i < this.symbols.length; i++) {
-      sym = this.symbols[i].symbol;
-      if (sym >= 'A' && sym <= 'Z') {
-        if (this.encode[sym.toLowerCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      } else if (sym >= 'a' && sym <= 'z') {
-        if (this.encode[sym.toUpperCase()] != i) {
-          this.case_insensitive = false;
-          break loop;
-        }
-      }
-      aliases = this.symbols[i].aliases;
-      if (aliases != null) {
-        for (j = 0; j < aliases.length; j++) {
-          sym = aliases.charAt(j);
-          if (sym >= 'A' && sym <= 'Z') {
-            if (this.encode[sym.toLowerCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          } else if (sym >= 'a' && sym <= 'z') {
-            if (this.encode[sym.toUpperCase()] != i) {
-              this.case_insensitive = false;
-              break loop;
-            }
-          }
-        }
-      }
-    }
-  }
-  // normalise aliases to remove the prime symbol and eliminate
-  // the alternate cases when the alphabet is case insensitive
-  var seen, out;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym = this.symbols[i].symbol;
-    aliases = this.symbols[i].aliases;
-    if (typeof aliases != "string") aliases = "";
-    seen = {};
-    out = [];
-    if (this.case_insensitive) {
-      sym = sym.toUpperCase();
-      aliases = aliases.toUpperCase();
-    }
-    seen[sym] = true;
-    for (j = 0; j < aliases.length; j++) {
-      if (!seen[aliases.charAt(j)]) {
-        seen[aliases.charAt(j)] = true;
-        out.push(aliases.charAt(j));
-      }
-    }
-    this.symbols[i].aliases = out.sort().join("");
-  }
-};
-// return the name of the alphabet
-Alphabet.prototype.get_alphabet_name = function() {
-  return this.name;
-};
-// return if the alphabet can be complemented
-Alphabet.prototype.has_complement = function() {
-  return (typeof this.symbols[0].complement === "string");
-};
-// return true if an uppercase letter has the same meaning as the lowercase form
-Alphabet.prototype.is_case_insensitive = function() {
-  return this.case_insensitive;
-};
-// return the information content of an alphabet letter
-Alphabet.prototype.get_ic = function() {
-  return Math.log(this.ncore) / Math.LN2;
-};
-// return the count of the core alphabet symbols
-Alphabet.prototype.get_size_core = function() {
-  return this.ncore;
-};
-// return the count of all alphabet symbols
-Alphabet.prototype.get_size_full = function() {
-  return this.symbols.length;
-};
-// return the symbol for the given alphabet index
-Alphabet.prototype.get_symbol = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  return this.symbols[alph_index].symbol;
-};
-// return the aliases for the given alphabet index
-Alphabet.prototype.get_aliases = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  var sym_obj = this.symbols[alph_index];
-  return (sym_obj.aliases != null ? sym_obj.aliases : "");
-};
-// return the name for the given alphabet index
-Alphabet.prototype.get_name = function(alph_index) {
-  "use strict";
-  var sym;
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("Alphabet index out of bounds");
-  }
-  sym = this.symbols[alph_index];
-  return (typeof sym.name === "string" ? sym.name : sym.symbol);
-};
-// return the alphabet it is like or null
-Alphabet.prototype.get_like = function() {
-  "use strict";
-  return this.like;
-};
-// return the index of the complement for the given alphabet index
-Alphabet.prototype.get_complement = function(alph_index) {
-  var comp_e_sym = this.complement[alph_index];
-  if (typeof comp_e_sym === "number") {
-    return comp_e_sym;
-  } else {
-    return -1;
-  }
-};
-// return a string containing the core symbols
-Alphabet.prototype.get_symbols = function() {
-  "use strict";
-  var i, core_symbols;
-  core_symbols = "";
-  for (i = 0; i < this.ncore; i++) {
-    core_symbols += this.symbols[i].symbol;
-  }
-  return core_symbols;
-};
-// return if the background was not a uniform generated background
-Alphabet.prototype.has_bg = function() {
-  "use strict";
-  return !this.genbg;
-};
-// get the background frequency for the index
-Alphabet.prototype.get_bg_freq = function(alph_index) {
-  "use strict";
-  var freq, i, symbols;
-  if (alph_index >= 0) {
-    if (alph_index < this.ncore) {
-      return this.background[alph_index];
-    } else if (alph_index < this.symbols.length) {
-      freq = 0;
-      symbols = this.symbols[alph_index].equals;
-      for (i = 0; i < symbols.length; i++) {
-        freq += this.background[this.encode2core[symbols.charAt(i)]];
-      }
-      return freq;
-    } 
-  }
-  throw new Error("The alphabet index is out of range.");
-};
-// get the colour of the index
-Alphabet.prototype.get_colour = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return "black";
-  }
-  return "#" + this.symbols[alph_index].colour;
-};
-// get the rgb componets of the colour at the index
-Alphabet.prototype.get_rgb = function(alph_index) {
-  "use strict";
-  if (alph_index < 0 || alph_index >= this.symbols.length) {
-    throw new Error("BAD_ALPHABET_INDEX");
-  }
-  if (typeof this.symbols[alph_index].colour != "string") {
-    return {"red": 0, "green": 0, "blue": 0};
-  }
-  var colour = this.symbols[alph_index].colour;
-  var red = parseInt(colour.substr(0, 2), 16) / 255;
-  var green = parseInt(colour.substr(2, 2), 16) / 255;
-  var blue = parseInt(colour.substr(4, 2), 16) / 255;
-  return {"red": red, "green": green, "blue": blue};
-};
-// convert a symbol into the index
-Alphabet.prototype.get_index = function(letter) {
-  "use strict";
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    return -1;
-  }
-  return alph_index;
-};
-// convert a symbol into the list of core indexes that it equals
-Alphabet.prototype.get_indexes = function(letter) {
-  "use strict";
-  var alph_index, comprise_str, i, comprise_list;
-  alph_index = this.encode[letter];
-  if (typeof alph_index === "undefined") {
-    throw new Error("Unknown letter");
-  }
-  comprise_str = this.symbols[alph_index].equals;
-  comprise_list = [];
-  if (typeof comprise_str == "string") {
-    for (i = 0; i < comprise_str.length; i++) {
-      comprise_list.push(this.encode2core[comprise_str.charAt(i)]);
-    }
-  } else {
-    comprise_list.push(alph_index);
-  }
-  return comprise_list;
-};
-// check if a symbol is the primary way of representing the symbol in the alphabet
-Alphabet.prototype.is_prime_symbol = function(letter) {
-  var alph_index;
-  alph_index = this.encode[letter];
-  if (alph_index == null) return false;
-  if (this.is_case_insensitive()) {
-    return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase());
-  } else {
-    return (this.symbols[alph_index].symbol == letter);
-  }
-};
-// compare 2 alphabets
-Alphabet.prototype.equals = function(other) {
-  "use strict";
-  var i, sym1, sym2;
-  // first check that it's actually an alphabet object
-  if (!(typeof other === "object" && other != null && other instanceof Alphabet)) {
-    return false;
-  }
-  // second shortcircuit if it's the same object
-  if (this === other) return true;
-  // compare
-  if (this.name !== other.name) return false;
-  if (this.ncore !== other.ncore) return false;
-  if (this.symbols.length !== other.symbols.length) return false;
-  for (i = 0; i < this.symbols.length; i++) {
-    sym1 = this.symbols[i];
-    sym2 = other.symbols[i];
-    if (sym1.symbol !== sym2.symbol) return false;
-    if (sym1.aliases !== sym2.aliases) return false;
-    if (sym1.name !== sym2.name) return false;
-    if (typeof sym1.colour !== typeof sym2.colour || 
-        (typeof sym1.colour === "string" && typeof sym2.colour === "string" &&
-         parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) {
-      return false;
-    }
-    if (sym1.complement !== sym2.complement) return false;
-    if (sym1.equals !== sym2.equals) return false;
-  }
-  return true;
-};
-Alphabet.prototype.check_core_subset = function(super_alph) {
-  var complement_same = true;
-  var seen_set = {};
-  var sub_i, sub_symbol, super_i, super_symbol;
-  for (sub_i = 0; sub_i < this.ncore; sub_i++) {
-    sub_symbol = this.symbols[sub_i];
-    super_i = super_alph.encode[sub_symbol.symbol]; 
-    if (super_i == null) return 0;
-    super_symbol = super_alph.symbols[super_i];
-    if (seen_set[super_i]) return 0;
-    seen_set[super_i] = true;
-    // check complement
-    if (sub_symbol.complement != null && super_symbol.complement != null) {
-      if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) {
-        complement_same = false;
-      }
-    } else if (sub_symbol.complement != null || super_symbol.complement != null) {
-      complement_same = false;
-    }
-  }
-  return (complement_same ? 1 : -1);
-};
-// convert a sequence to its reverse complement
-Alphabet.prototype.invcomp_seq = function(seq) {
-  "use strict";
-  var syms, i, e_sym, comp_e_sym;
-  if (!this.has_complement()) throw new Error("Alphabet must be complementable");
-  syms = seq.split("");
-  for (i = 0; i < syms.length; i++) {
-    e_sym = this.encode[syms[i]];
-    if (typeof e_sym === "undefined") {
-      e_sym = this.ncore; // wildcard
-    }
-    comp_e_sym = this.complement[e_sym];
-    if (typeof comp_e_sym === "undefined") {
-      comp_e_sym = e_sym; // not complementable
-    }
-    syms[i] = this.symbols[comp_e_sym].symbol;
-  }
-  return syms.reverse().join("");
-};
-// convert the alphabet to the text version
-Alphabet.prototype.as_text = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  function symbol_as_text(sym) {
-    var out;
-    out = sym.symbol;
-    if (typeof sym.name === "string" && sym.name != sym.symbol) {
-      out += " " + name_as_text(sym.name);
-    }
-    if (typeof sym.colour === "string") {
-      out += " " + sym.colour;
-    }
-    return out;
-  }
-  var out, i, j, c, sym;
-  out = "";
-  // output core symbols with 2 way complements
-  for (i = 0; i < this.ncore; i++) {
-    c = this.complement[i];
-    if (typeof c === "number" && i < c && this.complement[c] === i) {
-      out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n";  
-    }
-  }
-  // output core symbols with no complement
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.complement[i] === "undefined") {
-      out += symbol_as_text(this.symbols[i]) + "\n";
-    }
-  }
-  // output ambiguous symbols that have comprising characters
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    if (this.symbols[i].equals.length == 0) break;
-    out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n";
-      }
-    }
-  }
-  // output aliases of core symbols
-  for (i = 0; i < this.ncore; i++) {
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n";
-      }
-    }
-  }
-  // output gap symbols
-  i = this.symbols.length - 1;
-  if (this.symbols[i].equals.length == 0) {
-    out += symbol_as_text(this.symbols[i]) + " =\n";
-    if (typeof this.symbols[i].aliases === "string") {
-      for (j = 0; j < this.symbols[i].aliases.length; j++) {
-        if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue;
-        out += this.symbols[i].aliases.charAt(j) + " =\n";
-      }
-    }
-  }
-  return out;
-};
-// output the alphabet as it appears in minimal MEME format
-Alphabet.prototype.as_meme = function() {
-  "use strict";
-  function name_as_text(name) {
-    var i, c, out;
-    out = "\"";
-    for (i = 0; i < name.length; i++) {
-      c = name.charAt(i);
-      if (c == "\"") {
-        out += "\\\"";
-      } else if (c == "/") {
-        out += "\\/";
-      } else if (c == "\\") {
-        out += "\\\\";
-      } else {
-        out += c;
-      }
-    }
-    out += "\"";
-    return out;
-  }
-  if (this.equals(AlphStd.DNA)) {
-    return "ALPHABET= ACGT\n";
-  } else if (this.equals(AlphStd.PROTEIN)) {
-    return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n";
-  } else {
-    return "ALPHABET" + 
-      (this.name != null ? " " + name_as_text(this.name) : "") + 
-      (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" +
-      this.as_text() + "END ALPHABET\n";
-  }
-};
-
-// Returns a table showing all the letters in the alphabet
-Alphabet.prototype.as_table = function() {
-  "use strict";
-  var i, j, row, th, td, aliases, equals, sym;
-  var table = document.createElement("table");
-  // create the core symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  if (this.has_complement()) {
-    th.appendChild(document.createTextNode("Complement"));
-  }
-  row.appendChild(th);
-  // list the core symbols
-  for (i = 0; i < this.ncore; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].complement != null) {
-      td.style.color = this.get_colour(this.get_index(this.symbols[i].complement));
-      td.appendChild(document.createTextNode(this.symbols[i].complement));
-    }
-    row.appendChild(td);
-  }
-  // create the ambiguous symbol header
-  row = table.insertRow(table.rows.length);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Symbol(s)"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Name"));
-  row.appendChild(th);
-  th = document.createElement("th");
-  th.appendChild(document.createTextNode("Matches"));
-  row.appendChild(th);
-  // list the ambiguous symbols
-  for (i = this.ncore; i < this.symbols.length; i++) {
-    row = table.insertRow(table.rows.length);
-    td = document.createElement("td");
-    if (this.symbols[i].colour != null) {
-      td.style.color = '#' + this.symbols[i].colour;
-    }
-    td.appendChild(document.createTextNode(this.symbols[i].symbol));
-    aliases = this.get_aliases(i);
-    if (aliases.length > 0) {
-      td.appendChild(document.createTextNode(' ' + aliases.split('').join(' ')));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    if (this.symbols[i].name != null) {
-      td.appendChild(document.createTextNode(this.symbols[i].name));
-    }
-    row.appendChild(td);
-    td = document.createElement("td");
-    equals = this.symbols[i].equals.split('');
-    for (j = 0; j < equals.length; j++) {
-      if (j != 0) td.appendChild(document.createTextNode(' '));
-      sym = document.createElement("span");
-      sym.style.color = this.get_colour(this.get_index(equals[j]));
-      sym.appendChild(document.createTextNode(equals[j]));
-      td.appendChild(sym);
-    }
-    row.appendChild(td);
-  }
-  return table;
-};
-
-// returns a dictionary of the colours for EPS
-Alphabet.prototype._as_eps_dict = function() {
-  "use strict";
-  var i, sym, rgb;
-  var out = "/fullColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = this.get_rgb(i);
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  out += "/mutedColourDict <<\n";
-  for (i = 0; i < this.ncore; i++) {
-    sym = this.get_symbol(i);
-    sym = sym.replace(/\\/g, "\\\\");
-    sym = sym.replace(/\(/g, "\\(");
-    sym = sym.replace(/\)/g, "\\)");
-    rgb = Alphabet.lighten_colour(this.get_rgb(i));
-    out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n";
-  }
-  out += ">> def\n";
-  return out;
-};
-
-// return the alphabet name or a list of primary symbols
-Alphabet.prototype.toString = function() {
-  "use strict";
-  if (this.name != null) {
-    return this.name;
-  } else {
-    return this.get_symbols();
-  }
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Helper functions
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-// Convert a colour specified in RGB colourspace values into LAB colourspace
-Alphabet.rgb2lab = function(rgb) {
-  "use strict";
-  var xyzHelper, labHelper;
-  // XYZ helper
-  xyzHelper = function(value) {
-    if (value > 0.0445) {
-      value = (value + 0.055) / 1.055;
-      value = Math.pow(value, 2.4);
-    } else {
-      value /= 12.92;
-    }
-    value *= 100;
-    return value;
-  };
-  // lab helper
-  labHelper = function(value) {
-    if (value > 0.008856) {
-      value = Math.pow(value, 1.0 / 3.0);
-    } else {
-      value = (7.787 * value) + (16.0 / 116.0);
-    }
-    return value;
-  };
-  // convert into XYZ colourspace
-  var c1, c2, c3;
-  if (typeof rgb == "number") {
-    c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0);
-    c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0);
-    c3 = xyzHelper((rgb & 0xFF) / 255.0);
-  } else {
-    c1 = xyzHelper(rgb.red);
-    c2 = xyzHelper(rgb.green);
-    c3 = xyzHelper(rgb.blue);
-  }
-  var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805);
-  var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722);
-  var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505);
-  // convert into Lab colourspace
-  c1 = labHelper(x / 95.047);
-  c2 = labHelper(y / 100.0);
-  c3 = labHelper(z / 108.883);
-  var l = (116.0 * c2) - 16;
-  var a = 500.0 * (c1 - c2);
-  var b = 200.0 * (c2 - c3);
-  return {"l": l, "a": a, "b": b};
-};
-
-// Convert a colour specified in HSV colourspace into RGB colourspace
-Alphabet.hsv2rgb = function(hue, sat, value, output_object) {
-  // achromatic (grey)
-  var r = value;
-  var g = value;
-  var b = value;
-  if (sat != 0) {
-    var h = hue / 60.0;
-    var i = Math.floor(h);
-    var f = h - i;
-    var p = value * (1.0 - sat);
-    var q = value * (1.0 - (sat * f));
-    var t = value * (1.0 - (sat * (1.0 - f)));
-    if (i == 0) {
-      r = value;
-      g = t;
-      b = p;
-    } else if (i == 1) {
-      r = q;
-      g = value;
-      b = p;
-    } else if (i == 2) {
-      r = p;
-      g = value;
-      b = t;
-    } else if (i == 3) {
-      r = p;
-      g = q;
-      b = value;
-    } else if (i == 4) {
-      r = t;
-      g = p;
-      b = value;
-    } else {
-      r = value;
-      g = p;
-      b = q;
-    }
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-// Calculate a distance score between two colours in LAB colourspace
-Alphabet.lab_dist = function(lab1, lab2) {
-  var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a));
-  var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a));
-  var dc = c1 - c2;
-  var dl = lab1.l - lab2.l;
-  var da = lab1.a - lab2.a;
-  var db = lab1.b - lab2.b;
-  // we don't want NaN due to rounding errors so fudge things a bit...
-  var dh = 0;
-  var dh_squared = (da * da) + (db * db) - (dc * dc);
-  if (dh_squared > 0) {
-    dh = Math.sqrt(dh_squared);
-  }
-  var first = dl;
-  var second = dc / (1.0 + (0.045 * c1));
-  var third = dh / (1.0 + (0.015 * c1));
-  return Math.sqrt((first * first) + (second * second) + (third * third));
-};
-
-// convert an RGB value into a HSL value
-Alphabet.rgb2hsl = function(rgb) {
-  "use strict";
-  var min, max, delta, h, s, l, r, g, b;
-  if (typeof rgb == "number") {
-    r = ((rgb >> 16) & 0xFF) / 255.0;
-    g = ((rgb >> 8) & 0xFF) / 255.0;
-    b = (rgb & 0xFF) / 255.0;
-  } else {
-    r = rgb.red;
-    g = rgb.green;
-    b = rgb.blue;
-  }
-  min = Math.min(r, g, b);
-  max = Math.max(r, g, b);
-  delta = max - min;
-  l = min + (delta / 2);
-  if (max == min) {
-    h = 0; // achromatic (grayscale)
-    s = 0;
-  } else {
-    if (l > 0.5) {
-      s = delta / (2 - max - min);
-    } else {
-      s = delta / (max + min);
-    }
-    if (max == r) {
-      h = (g - b) / delta;
-      if (g < b) h += 6;
-    } else if (max == g) {
-      h = ((b - r) / delta) + 2;
-    } else {
-      h = ((r - g) / delta) + 4;
-    }
-    h /= 6;
-  }
-  return {"h": h, "s": s, "l": l};
-};
-
-// convert a HSL value into an RGB value
-Alphabet.hsl2rgb = function(hsl, output_object) {
-  "use strict";
-  function _hue(p, q, t) {
-    "use strict";
-    if (t < 0) t += 1;
-    else if (t > 1) t -= 1;
-    if (t < (1.0 / 6.0)) {
-      return p + ((q - p) * 6.0 * t);
-    } else if (t < 0.5) {
-      return q;
-    } else if (t < (2.0 / 3.0)) {
-      return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0);
-    } else {
-      return p;
-    }
-  }
-  var r, g, b, p, q;
-  if (hsl.s == 0) {
-    // achromatic (grayscale)
-    r = hsl.l;
-    g = hsl.l;
-    b = hsl.l;
-  } else {
-    if (hsl.l < 0.5) {
-      q = hsl.l * (1 + hsl.s);
-    } else {
-      q = hsl.l + hsl.s - (hsl.l * hsl.s);
-    }
-    p = (2 * hsl.l) - q;
-    r = _hue(p, q, hsl.h + (1.0 / 3.0));
-    g = _hue(p, q, hsl.h);
-    b = _hue(p, q, hsl.h - (1.0 / 3.0));
-  }
-  if (output_object) {
-    return {"red": r, "green": g, "blue": b};
-  } else {
-    return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255));
-  }
-};
-
-Alphabet.lighten_colour = function(rgb) {
-  "use strict";
-  var hsl = Alphabet.rgb2hsl(rgb);
-  hsl.l += (1.0 - hsl.l) * 2 / 3;
-  return Alphabet.hsl2rgb(hsl, typeof rgb != "number");
-};
-
-//======================================================================
-// end Alphabet object
-//======================================================================
-
-//======================================================================
-// start StandardAlphabet object
-//======================================================================
-
-// an extension of the alphabet object to support some additional fields 
-// only present in standard alphabets.
-var StandardAlphabet = function(enum_code, enum_name, alphabet_data) {
-  Alphabet.apply(this, [alphabet_data]);
-  this.enum_code = enum_code;
-  this.enum_name = enum_name;
-};
-StandardAlphabet.prototype = Alphabet.prototype;
-StandardAlphabet.prototype.constructor = StandardAlphabet;
-
-// A unique code for this standard alphabet.
-// This code will be a power of 2 to enable creation of bitsets for
-// a selection of standard alphabets.
-StandardAlphabet.prototype.get_code = function() {
-  return this.enum_code;
-};
-
-// A unique name for this standard alphabet.
-// this name will be all upper case and the same as the property that
-// refers to this alphabet in the AlphStd collection.
-StandardAlphabet.prototype.get_enum = function() {
-  return this.enum_name;
-};
-
-//======================================================================
-// end StandardAlphabet object
-//======================================================================
-
-// A collection of standard alphabets.
-var AlphStd = {
-  RNA: new StandardAlphabet(1, "RNA", {
-    "name": "RNA",
-    "like": "RNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300"},
-      {"symbol": "U", "name": "Uracil", "colour": "008000",
-        "aliases": "T"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."},
-      {"symbol": "V", "name": "Not U", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACU"},
-      {"symbol": "D", "name": "Not C", "equals": "AGU"},
-      {"symbol": "B", "name": "Not A", "equals": "CGU"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AU"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"},
-      {"symbol": "K", "name": "Keto", "equals": "GU"}
-    ]
-  }), 
-  DNA: new StandardAlphabet(2, "DNA", {
-    "name": "DNA",
-    "like": "DNA",
-    "ncore": 4,
-    "symbols": [
-      {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"},
-      {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"},
-      {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"},
-      {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A",
-        "aliases": "U"},
-      {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."},
-      {"symbol": "V", "name": "Not T", "equals": "ACG"},
-      {"symbol": "H", "name": "Not G", "equals": "ACT"},
-      {"symbol": "D", "name": "Not C", "equals": "AGT"},
-      {"symbol": "B", "name": "Not A", "equals": "CGT"},
-      {"symbol": "M", "name": "Amino", "equals": "AC"},
-      {"symbol": "R", "name": "Purine", "equals": "AG"},
-      {"symbol": "W", "name": "Weak", "equals": "AT"}, 
-      {"symbol": "S", "name": "Strong", "equals": "CG"},
-      {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"},
-      {"symbol": "K", "name": "Keto", "equals": "GT"}
-    ]
-  }), 
-  PROTEIN: new StandardAlphabet(4, "PROTEIN", {
-    "name": "Protein",
-    "like": "PROTEIN",
-    "ncore": 20,
-    "symbols": [
-      {"symbol": "A", "name": "Alanine", "colour": "0000CC"},
-      {"symbol": "C", "name": "Cysteine", "colour": "0000CC"},
-      {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"},
-      {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"},
-      {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"},
-      {"symbol": "G", "name": "Glycine", "colour": "FFB300"},
-      {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"},
-      {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"},
-      {"symbol": "K", "name": "Lysine", "colour": "CC0000"},
-      {"symbol": "L", "name": "Leucine", "colour": "0000CC"},
-      {"symbol": "M", "name": "Methionine", "colour": "0000CC"},
-      {"symbol": "N", "name": "Asparagine", "colour": "008000"},
-      {"symbol": "P", "name": "Proline", "colour": "FFFF00"},
-      {"symbol": "Q", "name": "Glutamine", "colour": "008000"},
-      {"symbol": "R", "name": "Arginine", "colour": "CC0000"},
-      {"symbol": "S", "name": "Serine", "colour": "008000"},
-      {"symbol": "T", "name": "Threonine", "colour": "008000"},
-      {"symbol": "V", "name": "Valine", "colour": "0000CC"},
-      {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"},
-      {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"},
-      {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."},
-      {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, 
-      {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, 
-      {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"}
-    ]
-  })
-};
-
-//======================================================================
-// start Symbol object
-//======================================================================
-var Symbol = function(alph_index, scale, alphabet) {
-  "use strict";
-  //variable prototype
-  this.symbol = alphabet.get_symbol(alph_index);
-  this.scale = scale;
-  this.colour = alphabet.get_colour(alph_index);
-};
-
-Symbol.prototype.get_symbol = function() {
-  "use strict";
-  return this.symbol;
-};
-
-Symbol.prototype.get_scale = function() {
-  "use strict";
-  return this.scale;
-};
-
-Symbol.prototype.get_colour = function() {
-  "use strict";
-  return this.colour;
-};
-
-Symbol.prototype.toString = function() {
-  "use strict";
-  return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%";
-};
-
-function compare_symbol(sym1, sym2) {
-  "use strict";
-  if (sym1.get_scale() < sym2.get_scale()) {
-    return -1;
-  } else if (sym1.get_scale() > sym2.get_scale()) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-//======================================================================
-// end Symbol object
-//======================================================================
-
-//======================================================================
-// start Pspm object
-//======================================================================
-var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) {
-  "use strict";
-  var row, col, data, row_sum, delta, evalue_re;
-  if (typeof name !== "string") {
-    name = "";
-  }
-  this.name = name;
-  //construct
-  if (matrix instanceof Pspm) {
-    // copy constructor
-    this.alph_length = matrix.alph_length;
-    this.motif_length = matrix.motif_length;
-    this.name = matrix.name;
-    this.alt = matrix.alt;
-    this.nsites = matrix.nsites;
-    this.evalue = matrix.evalue;
-    this.ltrim = matrix.ltrim;
-    this.rtrim = matrix.rtrim;
-    this.pspm = [];
-    for (row = 0; row < matrix.motif_length; row++) {
-      this.pspm[row] = [];
-      for (col = 0; col < matrix.alph_length; col++) {
-        this.pspm[row][col] = matrix.pspm[row][col];
-      }
-    }
-    if (matrix.pssm != null) {
-      this.pssm = [];
-      for (row = 0; row < matrix.motif_length; row++) {
-        this.pspm[row] = [];
-        for (col = 0; col < matrix.alph_length; col++) {
-          this.pssm[row][col] = matrix.pssm[row][col];
-        }
-      }
-    }
-  } else {
-    // check parameters
-    if (ltrim == null) {
-      ltrim = 0;
-    } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) {
-      throw new Error("ltrim must be a non-negative integer, got: " + ltrim);
-    }
-    if (rtrim == null) {
-      rtrim = 0;
-    } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) {
-      throw new Error("rtrim must be a non-negative integer, got: " + rtrim);
-    }
-    if (nsites != null) {
-      if (typeof nsites !== "number" || nsites < 0) {
-        throw new Error("nsites must be a positive number, got: " + nsites);
-      } else if (nsites == 0) {
-        nsites = null;
-      }
-    }
-    if (evalue != null) {
-      if (typeof evalue === "number") {
-        if (evalue < 0) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else if (typeof evalue === "string") {
-        evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-        if (!evalue_re.test(evalue)) {
-          throw new Error("evalue must be a non-negative number, got: " + evalue);
-        }
-      } else {
-        throw new Error("evalue must be a non-negative number, got: " + evalue);
-      }
-    }
-    // set properties
-    this.name = name;
-    this.alt = alt;
-    this.nsites = nsites;
-    this.evalue = evalue;
-    this.ltrim = ltrim;
-    this.rtrim = rtrim;
-    if (typeof matrix === "string") {
-      // string constructor
-      data = parse_pspm_string(matrix);
-      this.alph_length = data["alph_length"];
-      this.motif_length = data["motif_length"];
-      this.pspm = data["pspm"];
-      if (this.evalue == null) {
-        if (data["evalue"] != null) {
-          this.evalue = data["evalue"];
-        } else {
-          this.evalue = 0;
-        }
-      }
-      if (this.nsites == null) {
-        if (typeof data["nsites"] === "number") {
-          this.nsites = data["nsites"];
-        } else {
-          this.nsites = 20;
-        }
-      }
-    } else {
-      // assume pspm is a nested array
-      this.motif_length = matrix.length;
-      this.alph_length = (matrix.length > 0 ? matrix[0].length : 0);
-      if (this.nsites == null) {
-        this.nsites = 20;
-      }
-      if (this.evalue == null) {
-        this.evalue = 0;
-      }
-      this.pspm = [];
-      // copy pspm and check
-      for (row = 0; row < this.motif_length; row++) {
-        if (this.alph_length != matrix[row].length) {
-          throw new Error("COLUMN_MISMATCH");
-        }
-        this.pspm[row] = [];
-        row_sum = 0;
-        for (col = 0; col < this.alph_length; col++) {
-          this.pspm[row][col] = matrix[row][col];
-          row_sum += this.pspm[row][col];
-        }
-        delta = 0.1;
-        if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || 
-            (row_sum < 1 && (1 - row_sum) > delta)) {
-          throw new Error("INVALID_SUM");
-        }
-      }
-      // copy pssm
-      if (pssm != null) {
-        this.pssm = [];
-        for (row = 0; row < this.motif_length; row++) {
-          this.pssm[row] = [];
-          for (col = 0; col < this.alph_length; col++) {
-            this.pssm[row][col] = pssm[row][col];
-          }
-        }
-      }
-    }
-  }
-};
-
-Pspm.prototype.copy = function() {
-  "use strict";
-  return new Pspm(this);
-};
-
-Pspm.prototype.reverse = function() {
-  "use strict";
-  var x, y, temp, temp_trim;
-  //reverse
-  x = 0;
-  y = this.motif_length-1;
-  while (x < y) {
-    temp = this.pspm[x];
-    this.pspm[x] = this.pspm[y];
-    this.pspm[y] = temp;
-    x++;
-    y--;
-  }
-  // reverse pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //reverse
-    x = 0;
-    y = this.motif_length-1;
-    while (x < y) {
-      temp = this.pssm[x];
-      this.pspm[x] = this.pssm[y];
-      this.pssm[y] = temp;
-      x++;
-      y--;
-    }
-  }
-  //swap triming
-  temp_trim = this.ltrim;
-  this.ltrim = this.rtrim;
-  this.rtrim = temp_trim;
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.reverse_complement = function(alphabet) {
-  "use strict";
-  var x, y, temp, i, row, c, temp_trim;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  if (!alphabet.has_complement()) {
-    throw new Error("The specified alphabet can not be complemented.");
-  }
-  // reverse motif
-  this.reverse();
-  //complement
-  for (x = 0; x < this.motif_length; x++) {
-    row = this.pspm[x];
-    for (i = 0; i < row.length; i++) {
-      c = alphabet.get_complement(i);
-      if (c < i) continue;
-      temp = row[i];
-      row[i] = row[c];
-      row[c] = temp;
-    }
-  }
-  // complement pssm (if defined)
-  if (typeof this.pssm !== "undefined") {
-    //complement
-    for (x = 0; x < this.motif_length; x++) {
-      row = this.pssm[x];
-      for (i = 0; i < row.length; i++) {
-        c = alphabet.get_complement(i);
-        if (c < i) continue;
-        temp = row[i];
-        row[i] = row[c];
-        row[c] = temp;
-      }
-    }
-  }
-  return this; //allow function chaining...
-};
-
-Pspm.prototype.get_stack = function(position, alphabet, ssc) {
-  "use strict";
-  var row, stack_ic, alphabet_ic, stack, i, sym;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size of the pspm.");
-  }
-  row = this.pspm[position];
-  stack_ic = this.get_stack_ic(position, alphabet);
-  if (ssc) stack_ic -= this.get_error(alphabet);
-  alphabet_ic = alphabet.get_ic();
-  stack = [];
-  for (i = 0; i < this.alph_length; i++) {
-    sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet);
-    if (sym.get_scale() <= 0) {
-      continue;
-    }
-    stack.push(sym);
-  }
-  stack.sort(compare_symbol);
-  return stack;
-};
-
-Pspm.prototype.get_stack_ic = function(position, alphabet) {
-  "use strict";
-  var row, H, i;
-  if (this.alph_length != alphabet.get_size_core()) {
-    throw new Error("The alphabet size does not match the size fo the pspm.");
-  }
-  row = this.pspm[position];
-  H = 0;
-  for (i = 0; i < this.alph_length; i++) {
-    if (row[i] === 0) {
-      continue;
-    }
-    H -= (row[i] * (Math.log(row[i]) / Math.LN2));
-  }
-  return alphabet.get_ic() - H;
-};
-
-Pspm.prototype.get_error = function(alphabet) {
-  "use strict";
-  if (this.nsites === 0) {
-    return 0;
-  }
-  return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites);
-};
-
-Pspm.prototype.get_motif_length = function() {
-  "use strict";
-  return this.motif_length;
-};
-
-Pspm.prototype.get_alph_length = function() {
-  "use strict";
-  return this.alph_length;
-};
-
-Pspm.prototype.get_left_trim = function() {
-  "use strict";
-  return this.ltrim;
-};
-
-Pspm.prototype.get_right_trim = function() {
-  "use strict";
-  return this.rtrim;
-};
-
-Pspm.prototype.as_best_match = function(alphabet) {
-  "use strict";
-  var match, odds, best_odds, best_index;
-  var i, j;
-  match = "";
-  for (i = 0; i < this.motif_length; i++) {
-    best_index = 0;
-    best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0);
-    for (j = 1; j < this.alph_length; j++) {
-      odds = this.pspm[i][j] / alphabet.get_bg_freq(j);
-      if (odds > best_odds) {
-        best_odds = odds;
-        best_index = j;
-      }
-    }
-    match += alphabet.get_symbol(best_index);
-  }
-  return match;
-};
-
-Pspm.prototype.as_count_matrix = function() {
-  "use strict";
-  var count, count_text, text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      count = Math.round(this.nsites * this.pspm[i][j]);
-      count_text = "" + count;
-      // pad up to length of 4
-      if (count_text.length < 4) {
-        text += (new Array(5 - count_text.length)).join(" ") + count_text;
-      } else {
-        text += count_text;
-      }
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_probability_matrix = function() {
-  "use strict";
-  var text;
-  var i, j;
-  text = "";
-  for (i = 0; i < this.motif_length; i++) {
-    if (i !== 0) {
-      text += "\n";
-    }
-    for (j = 0; j < this.alph_length; j++) {
-      if (j !== 0) {
-        text += " ";
-      }
-      text += this.pspm[i][j].toFixed(6);
-    }
-  }
-  return text; 
-};
-
-Pspm.prototype.as_score_matrix = function(alphabet, pseudo) {
-  "use strict";
-  var me, score, out, row, col, score_text;
-  me = this;
-  if (typeof this.pssm === "undefined") {
-    if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) {
-      throw new Error("The alphabet is required to generate the pssm.");
-    }
-    if (typeof pseudo === "undefined") {
-      pseudo = 0.01;
-    } else if (typeof pseudo !== "number" || pseudo < 0) {
-      throw new Error("Expected positive number for pseudocount");
-    }
-    score = function(row, col) {
-      "use strict";
-      var p, bg, p2;
-      p = me.pspm[row][col];
-      bg = alphabet.get_bg_freq(col);
-      p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo);
-      return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000);
-    };
-  } else {
-    score = function(row, col) {
-      "use strict";
-      return me.pssm[row][col];
-    };
-  }
-  out = "";
-  for (row = 0; row < this.motif_length; row++) {
-    for (col = 0; col < this.alph_length; col++) {
-      if (col !== 0) {
-        out += " ";
-      }
-      score_text = "" + score(row, col);
-      // pad out to 6 characters
-      if (score_text.length < 6) {
-        out += (new Array(7 - score_text.length)).join(" ") + score_text;
-      } else {
-        out += score_text;
-      }
-    }
-    out += "\n";
-  }
-  return out;
-}
-
-Pspm.prototype.as_pspm = function() {
-  "use strict";
-  return "letter-probability matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + " nsites= " + this.nsites + 
-      " E= " + (typeof this.evalue === "number" ? 
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_probability_matrix();
-};
-
-Pspm.prototype.as_pssm = function(alphabet, pseudo) {
-  "use strict";
-  return "log-odds matrix: alength= " + this.alph_length + 
-      " w= " + this.motif_length + 
-      " E= " + (typeof this.evalue == "number" ?
-          this.evalue.toExponential() : this.evalue) + "\n" +
-      this.as_score_matrix(alphabet, pseudo);
-};
-
-Pspm.prototype.as_meme = function(options) {
-  var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands;
-  var out, alen, i;
-  // get the options
-  if (typeof options !== "object" || options === null) {
-    options = {};
-  }
-  with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false);
-  with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false);
-  with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false);
-  if (!with_pspm && !with_pssm) with_pspm = true;
-  if (with_header) {
-    if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) {
-      version = options["version"];
-    } else if (typeof options["version"] === "number") {
-      version = options["version"].toFixed(0);
-    } else {
-      version = "4";
-    }
-    if (typeof options["strands"] === "number" && options["strands"] === 1) {
-      strands = 1;
-    } else {
-      strands = 2;
-    }
-    if (typeof options["bg_source"] === "string") {
-      bg_source = options["bg_source"];
-    } else {
-      bg_source = "unknown source";
-    }
-    if (typeof options["alphabet"] === "object" && options["alphabet"] != null
-        && options["alphabet"] instanceof Alphabet) {
-      alphabet = options["alphabet"];
-    } else {
-      throw new Error("The alphabet is required to generate the header.");
-    }
-  }
-  // now create the output
-  out = "";
-  if (with_header) {
-    out = "MEME version " + version + "\n\n";
-    out += alphabet.as_meme() + "\n";
-    if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified
-      out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n";
-    }
-    out += "Background letter frequencies (from " + bg_source + "):\n";
-    alen = alphabet.get_size_core();
-    for (i = 0; i < alen; i++) {
-      if (i !== 0) {
-        if (i % 9 === 0) { // maximum of nine entries per line
-          out += "\n";
-        } else {
-          out += " ";
-        }
-      }
-      out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3);
-    }
-  }
-  out += "\n\n";
-  out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt);
-  if (with_pssm) {
-    out += "\n\n";
-    out += this.as_pssm(options["alphabet"], options["pseudocount"]);
-  }
-  if (with_pspm) {
-    out += "\n\n";
-    out += this.as_pspm();
-  }
-  return out;
-}
-
-Pspm.prototype.toString = function() {
-  "use strict";
-  var str, i, row;
-  str = "";
-  for (i = 0; i < this.pspm.length; i++) {
-    row = this.pspm[i];
-    str += row.join("\t") + "\n";
-  }
-  return str;
-};
-
-function parse_pspm_properties(str) {
-  "use strict";
-  var parts, i, eqpos, before, after, properties, prop, num, num_re;
-  num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/;
-  parts = trim(str).split(/\s+/);
-  // split up words containing =
-  for (i = 0; i < parts.length;) {
-    eqpos = parts[i].indexOf("=");
-    if (eqpos != -1) {
-      before = parts[i].substr(0, eqpos);
-      after = parts[i].substr(eqpos+1);
-      if (before.length > 0 && after.length > 0) {
-        parts.splice(i, 1, before, "=", after);
-        i += 3;
-      } else if (before.length > 0) {
-        parts.splice(i, 1, before, "=");
-        i += 2;
-      } else if (after.length > 0) {
-        parts.splice(i, 1, "=", after);
-        i += 2;
-      } else {
-        parts.splice(i, 1, "=");
-        i++;
-      }
-    } else {
-      i++;
-    }
-  }
-  properties = {};
-  for (i = 0; i < parts.length; i += 3) {
-    if (parts.length - i < 3) {
-      throw new Error("Expected PSPM property was incomplete. "+
-          "Remaing parts are: " + parts.slice(i).join(" "));
-    }
-    if (parts[i+1] !== "=") {
-      throw new Error("Expected '=' in PSPM property between key and " +
-          "value but got " + parts[i+1]); 
-    }
-    prop = parts[i].toLowerCase();
-    num = parts[i+2];
-    if (!num_re.test(num)) {
-      throw new Error("Expected numeric value for PSPM property '" + 
-          prop + "' but got '" + num + "'");
-    }
-    properties[prop] = num;
-  }
-  return properties;
-}
-
-function parse_pspm_string(pspm_string) {
-  "use strict";
-  var header_re, lines, first_line, line_num, col_num, alph_length, 
-      motif_length, nsites, evalue, pspm, i, line, match, props, parts,
-      j, prob;
-  header_re = /^letter-probability\s+matrix:(.*)$/i;
-  lines = pspm_string.split(/\n/);
-  first_line = true;
-  line_num = 0;
-  col_num = 0;
-  alph_length;
-  motif_length;
-  nsites;
-  evalue;
-  pspm = [];
-  for (i = 0; i < lines.length; i++) {
-    line = trim(lines[i]);
-    if (line.length === 0) { 
-      continue;
-    }
-    // check the first line for a header though allow matrices without it
-    if (first_line) {
-      first_line = false;
-      match = header_re.exec(line);
-      if (match !== null) {
-        props = parse_pspm_properties(match[1]);
-        if (props.hasOwnProperty("alength")) {
-          alph_length = parseFloat(props["alength"]);
-          if (alph_length != 4 && alph_length != 20) {
-            throw new Error("PSPM property alength should be 4 or 20" +
-                " but got " + alph_length);
-          }
-        }
-        if (props.hasOwnProperty("w")) {
-          motif_length = parseFloat(props["w"]);
-          if (motif_length % 1 !== 0 || motif_length < 1) {
-            throw new Error("PSPM property w should be an integer larger " +
-                "than zero but got " + motif_length);
-          }
-        }
-        if (props.hasOwnProperty("nsites")) {
-          nsites = parseFloat(props["nsites"]);
-          if (nsites <= 0) {
-            throw new Error("PSPM property nsites should be larger than " +
-                "zero but got " + nsites);
-          }
-        }
-        if (props.hasOwnProperty("e")) {
-          evalue = props["e"];
-          if (evalue < 0) {
-            throw new Error("PSPM property evalue should be " +
-                "non-negative but got " + evalue);
-          }
-        }
-        continue;
-      }
-    }
-    pspm[line_num] = [];
-    col_num = 0;
-    parts = line.split(/\s+/);
-    for (j = 0; j < parts.length; j++) {
-      prob = parseFloat(parts[j]);
-      if (prob != parts[j] || prob < 0 || prob > 1) {
-        throw new Error("Expected probability but got '" + parts[j] + "'"); 
-      }
-      pspm[line_num][col_num] = prob;
-      col_num++;
-    }
-    line_num++;
-  }
-  if (typeof motif_length === "number") {
-    if (pspm.length != motif_length) {
-      throw new Error("Expected PSPM to have a motif length of " + 
-          motif_length + " but it was actually " + pspm.length);
-    }
-  } else {
-    motif_length = pspm.length;
-  }
-  if (typeof alph_length !== "number") {
-    alph_length = pspm[0].length;
-    if (alph_length != 4 && alph_length != 20) {
-      throw new Error("Expected length of first row in the PSPM to be " +
-          "either 4 or 20 but got " + alph_length);
-    }
-  }
-  for (i = 0; i < pspm.length; i++) {
-    if (pspm[i].length != alph_length) {
-      throw new Error("Expected PSPM row " + i + " to have a length of " + 
-          alph_length + " but the length was " + pspm[i].length);
-    }
-  }
-  return {"pspm": pspm, "motif_length": motif_length, 
-    "alph_length": alph_length, "nsites": nsites, "evalue": evalue};
-}
-//======================================================================
-// end Pspm object
-//======================================================================
-
-//======================================================================
-// start Logo object
-//======================================================================
-
-var Logo = function(alphabet, options) {
-  "use strict";
-  this.alphabet = alphabet;
-  this.fine_text = "";
-  this.x_axis = 1;
-  this.y_axis = true;
-  this.xlate_nsyms = 1;
-  this.xlate_start = null;
-  this.xlate_end = null;
-  this.pspm_list = [];
-  this.pspm_column = [];
-  this.rows = 0;
-  this.columns = 0;
-  if (typeof options === "string") {
-    // the old method signature had fine_text here so we support that
-    this.fine_text = options;
-  } else if (typeof options === "object" && options != null) {
-    this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : "");
-    this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1);
-    if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1;
-    this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true);
-    this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms);
-    this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start);
-    this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end);
-  }
-};
-
-Logo.prototype.add_pspm = function(pspm, column) {
-  "use strict";
-  var col;
-  if (typeof column === "undefined") {
-    column = 0;
-  } else if (column < 0) {
-    throw new Error("Column index out of bounds.");
-  }
-  this.pspm_list[this.rows] = pspm;
-  this.pspm_column[this.rows] = column;
-  this.rows++;
-  col = column + pspm.get_motif_length();
-  if (col > this.columns) {
-    this.columns = col;
-  }
-};
-
-Logo.prototype.get_columns = function() {
-  "use strict";
-  return this.columns;
-};
-
-Logo.prototype.get_xlate_nsyms = function() {
-  "use strict";
-  return this.xlate_nsyms;
-};
-
-Logo.prototype.get_xlate_start = function() {
-  "use strict";
-  return (this.xlate_start != null ? this.xlate_start : 0);
-};
-
-Logo.prototype.get_xlate_end = function() {
-  "use strict";
-  return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms);
-};
-
-Logo.prototype.get_xlate_columns = function() {
-  "use strict";
-  return this.get_xlate_end() - this.get_xlate_start();
-};
-
-Logo.prototype.get_rows = function() {
-  "use strict";
-  return this.rows;
-};
-
-Logo.prototype.get_pspm = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_list[row_index];
-};
-
-Logo.prototype.get_offset = function(row_index) {
-  "use strict";
-  if (row_index < 0 || row_index >= this.rows) {
-    throw new Error("INDEX_OUT_OF_BOUNDS");
-  }
-  return this.pspm_column[row_index];
-};
-
-Logo.prototype._as_eps_data = function(ssc, errbars) {
-  var i, j, pos, stack_pos, pspm, stack, sym, out;
-  out = "";
-  for (i = 0; i < this.rows; i++) {
-    out += "\nStartLine\n";
-    // Indent
-    for (j = 0; j < this.pspm_column[i]; j++) {
-      out += "() startstack\nendstack\n\n";
-    }
-    pspm = this.pspm_list[i];
-    if (pspm.get_left_trim() > 0) {
-      out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n";
-    }
-    for (pos = 0; pos < pspm.get_motif_length(); pos++) {
-      if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour
-        out += "DrawTrimEdge\nRestoreColour\n";
-      } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) {
-        out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n";
-      }
-      out += "(" + (pos + 1) + ") startstack\n";
-      stack = pspm.get_stack(pos, this.alphabet, ssc);
-      for (stack_pos = 0; stack_pos < stack.length; stack_pos++) {
-        sym = stack[stack_pos];
-        out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n";
-      }
-      if (errbars) {
-        out += " " + pspm.get_error(this.alphabet) + " Ibeam\n";
-      }
-      out += "endstack\n\n";
-    }
-    if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) {
-      out += "RestoreColour\n";
-    }
-    out += "EndLine\n";
-  }
-  return out;
-};
-
-Logo.prototype.as_eps = function(options) {
-  "use strict";
-  if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS");
-  if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS");
-  if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS");
-
-  var LOGOHEIGHT = 7.5; // default height of line in cm
-  var cm2pts, height, width, now, ssc, errbars;
-  if (typeof options === "undefined") {
-    options = {};
-  }
-  cm2pts = 72 / 2.54;
-  if (typeof options.logo_height == "number") {
-    height = options.logo_height;
-  } else {
-    height = LOGOHEIGHT * this.rows;
-  }
-  if (typeof options.logo_width == "number") {
-    width = options.logo_width;
-  } else {
-    width = this.columns + 2;
-  }
-  now = new Date();
-  ssc = (typeof options.ssc == "boolean" ? options.ssc : false);
-  errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc);
-  var values = {
-    "LOGOHEIGHT": height,
-    "LOGOWIDTH": width,
-    "BOUNDINGHEIGHT": Math.round(height * cm2pts),
-    "BOUNDINGWIDTH": Math.round(width * cm2pts),
-    "LOGOLINEHEIGHT": (height / this.rows),
-    "CHARSPERLINE": this.columns,
-    "BARBITS": this.alphabet.get_ic(),
-    "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"),
-    "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(),
-    "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0),
-    "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0),
-    "TITLE": (typeof options.title == "string" ? options.title : ""),
-    "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text),
-    "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""),
-    "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"),
-    "SSC": ssc,
-    "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis),
-    "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false),
-    "ERRBAR": errbars,
-    "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false),
-    "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0),
-    "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false),
-    "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"),
-    "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12),
-    "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12),
-    "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6),
-    "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9),
-    "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9),
-    "COLORDICT": this.alphabet._as_eps_dict(),
-    "DATA": this._as_eps_data(ssc, errbars)
-  };
-  // now this requires that the script containing the template has been imported!
-  return motif_logo_template(values);
-};
-
-//======================================================================
-// end Logo object
-//======================================================================
-
-// calculate the exact size (in pixels) of an object drawn on the
-// canvas assuming that the background of the canvas is transparent.
-function canvas_bounds(ctx, cwidth, cheight) {
-  "use strict";
-  var data, r, c, top_line, bottom_line, left_line, right_line, 
-      txt_width, txt_height;
-
-  // extract the image data
-  data = ctx.getImageData(0, 0, cwidth, cheight).data;
-
-  // set initial values
-  top_line = -1; bottom_line = -1; left_line = -1; right_line = -1;
-  txt_width = 0; txt_height = 0;
-
-  // Find the top-most line with a non-transparent pixel
-  for (r = 0; r < cheight; r++) {
-    for (c = 0; c < cwidth; c++) {
-      if (data[r * cwidth * 4 + c * 4 + 3]) {
-        top_line = r;
-        break;
-      }
-    }
-    if (top_line != -1) {
-      break;
-    }
-  }
-  
-  // Only bother looking if we found at least one set pixel... 
-  if (top_line != -1) {
-
-    //find the last line with a non-transparent pixel
-    for (r = cheight-1; r >= top_line; r--) {
-      for(c = 0; c < cwidth; c++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          bottom_line = r;
-          break;
-        }
-      }
-      if (bottom_line != -1) {
-        break;
-      }
-    }
-    // calculate height
-    txt_height = bottom_line - top_line + 1;
-
-    // Find the left-most line with a non-transparent pixel
-    for (c = 0; c < cwidth; c++) {
-      for (r = top_line; r <= bottom_line; r++) {
-        if (data[r * cwidth * 4 + c * 4 + 3]) {
-          left_line = c;
-          break;
-        }
-      }
-      if (left_line != -1) {
-        break;
-      }
-    }
-
-    //find the right most line with a non-transparent pixel
-    for (c = cwidth-1; c >= left_line; c--) {
-      for(r = top_line; r <= bottom_line; r++) {
-        if(data[r * cwidth * 4 + c * 4 + 3]) {
-          right_line = c;
-          break;
-        }
-      }
-      if (right_line != -1) {
-        break;
-      }
-    }
-    txt_width = right_line - left_line + 1;
-  }
-
-  //return the bounds
-  return {bound_top: top_line, bound_bottom: bottom_line, 
-    bound_left: left_line, bound_right: right_line, width: txt_width, 
-    height: txt_height};
-}
-
-//======================================================================
-// start RasterizedAlphabet
-//======================================================================
-
-// Rasterize Alphabet
-// 1) Measure width of text at default font for all symbols in alphabet
-// 2) sort in width ascending
-// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I')
-// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob).
-// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font
-// 6) Draw text onto temp canvas at calculated scale
-// 7) Find bounds of drawn text
-// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger).
-var RasterizedAlphabet = function(alphabet, logo_scale, font, width) {
-  "use strict";
-  var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes,
-      i, sym, size, tenpercent, avg_width, scale, 
-      target_width, target_height;
-  //variable prototypes
-  this.alphabet = alphabet;
-  this.scale = logo_scale;
-  this.sym_cache = {};
-  this.stack_num_cache = [];
-  this.scale_num_cache = [];
-  // size of canvas
-  default_size = 60; // size of measuring canvas
-  safety_pad = 20; // pixels to pad around so we don't miss the edges
-  // create a canvas to do our measuring
-  canvas = document.createElement("canvas");
-  if (!canvas.getContext) throw new Error("No canvas support");
-  canvas.width = default_size + 2 * safety_pad;
-  canvas.height = default_size + 2 * safety_pad;
-  middle = Math.round(canvas.width / 2);
-  baseline = Math.round(canvas.height - safety_pad);
-  ctx = canvas.getContext('2d');
-  if (!supports_text(ctx)) throw new Error("Canvas does not support text");
-  ctx.font = font;
-  ctx.textAlign = "center";
-  ctx.translate(middle, baseline);
-  // list of widths
-  widths = [];
-  sizes = [];
-  //now measure each letter in the alphabet
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    // reset the canvas
-    ctx.clearRect(0, 0, canvas.width, canvas.height);
-    ctx.fillStyle = alphabet.get_colour(i);
-    // draw the test text
-    ctx.fillText(alphabet.get_symbol(i), 0, 0);
-    //measure
-    size = canvas_bounds(ctx, canvas.width, canvas.height);
-    if (size.width === 0) throw new Error("Invisible symbol!");
-    widths.push(size.width);
-    sizes[i] = size;
-  }
-  //sort the widths
-  widths.sort(function(a,b) {return a - b;});
-  //drop 10% of the items off each end
-  tenpercent = Math.floor(widths.length / 10);
-  for (i = 0; i < tenpercent; ++i) {
-    widths.pop();
-    widths.shift();
-  }
-  //calculate average width
-  avg_width = 0;
-  for (i = 0; i < widths.length; ++i) {
-    avg_width += widths[i];
-  }
-  avg_width /= widths.length;
-  // calculate the target width
-  target_width = width * this.scale * 2;
-  // calculate scales
-  for (i = 0; i < alphabet.get_size_core(); ++i) {
-    sym = alphabet.get_symbol(i);
-    size = sizes[i];
-    // calculate scale
-    scale = target_width / Math.max(avg_width, size.width);
-    // estimate scaled height
-    target_height = size.height * scale;
-    // create an appropriately sized canvas
-    canvas = document.createElement("canvas");
-    canvas.width = target_width;
-    canvas.height = target_height + safety_pad * 2;
-    // calculate the middle
-    middle = Math.round(canvas.width / 2);
-    // calculate the baseline
-    baseline = Math.round(canvas.height - safety_pad);
-    // get the context and prepare to draw the rasterized text
-    ctx = canvas.getContext('2d');
-    ctx.font = font;
-    ctx.fillStyle = alphabet.get_colour(i);
-    ctx.textAlign = "center";
-    ctx.translate(middle, baseline);
-    ctx.save();
-    ctx.scale(scale, scale);
-    // draw the text
-    ctx.fillText(sym, 0, 0);
-    ctx.restore();
-    this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)};
-  }
-};
-
-RasterizedAlphabet.prototype.get_alphabet = function() {
-  return this.alphabet;
-};
-
-RasterizedAlphabet.prototype.get_scale = function() {
-  return this.scale;
-};
-
-RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) {
-  "use strict";
-  var entry, image, size;
-  entry = this.sym_cache[letter];
-  image = entry.image;
-  size = entry.size;
-  ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight);
-};
-
-RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) {
-  var image, image_ctx, text_length;
-  if (index >= this.stack_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.save();
-    image_ctx.font = font;
-    text_length = image_ctx.measureText("" + (index + 1)).width;
-    image_ctx.restore();
-    // resize the canvas to fit
-    image.width = Math.ceil(stack_width);
-    image.height = Math.ceil(text_length);
-    // draw the text
-    image_ctx = image.getContext('2d');
-    image_ctx.translate(Math.round(stack_width / 2), 0);
-    image_ctx.font = font;
-    image_ctx.textBaseline = "middle";
-    image_ctx.textAlign = "right";
-    image_ctx.rotate(-(Math.PI / 2));
-    image_ctx.fillText("" + (index + 1), 0, 0);
-    this.stack_num_cache[index] = image;
-  } else {
-    image = this.stack_num_cache[index];
-  }
-  ctx.drawImage(image, 0, 0);
-}
-
-RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) {
-  var image, image_ctx, text_size, m_length;
-  if (num >= this.scale_num_cache.length) {
-    image = document.createElement("canvas");
-    // measure the text
-    image_ctx = image.getContext('2d');
-    image_ctx.font = font;
-    text_size = image_ctx.measureText("" + num);
-    if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) {
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent);
-    } else {
-      // measure width of 'm' to approximate height, we double it later anyway
-      m_length = image_ctx.measureText("m").width;
-      // resize the canvas to fit
-      image.width = Math.ceil(text_size.width);
-      image.height = Math.ceil(2 * m_length);
-      // draw the text
-      image_ctx = image.getContext('2d');
-      image_ctx.font = font;
-      image_ctx.textAlign = "right";
-      image_ctx.textBaseline = "middle";
-      image_ctx.fillText("" + num, image.width, m_length);
-    }
-    this.scale_num_cache[num] = image;
-  } else {
-    image = this.scale_num_cache[num];
-  }
-  ctx.drawImage(image, -image.width, -Math.round(image.height / 2))
-}
-
-//======================================================================
-// end RasterizedAlphabet
-//======================================================================
-
-//======================================================================
-// start LogoMetrics object
-//======================================================================
-
-var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) {
-  "use strict";
-  var i, row_height;
-  //variable prototypes
-  this.pad_top = (has_names ? 5 : 0);
-  this.pad_left = (y_axis ? 10 : 0);
-  this.pad_right = (has_finetext ? 15 : 0);
-  this.pad_bottom = 0;
-  this.pad_middle = 20;
-  this.name_height = 14;
-  this.name_font = "bold " + this.name_height + "px Times, sans-serif";
-  this.name_spacer = 0;
-  this.y_axis = y_axis;
-  this.y_label = "bits";
-  this.y_label_height = 12;
-  this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif";
-  this.y_label_spacer = 3;
-  this.y_num_height = 12;
-  this.y_num_width = 0;
-  this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif";
-  this.y_tic_width = 5;
-  this.stack_pad_left = 0;
-  this.stack_font = "bold 25px Helvetica, sans-serif";
-  this.stack_height = 90;
-  this.stack_width = 26;
-  this.stacks_pad_right = 5;
-  this.x_axis = x_axis;
-  this.x_num_above = 2;
-  this.x_num_height = 12;
-  this.x_num_width = 0;
-  this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif";
-  this.fine_txt_height = 6;
-  this.fine_txt_above = 2;
-  this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif";
-  this.letter_metrics = new Array();
-  this.summed_width = 0;
-  this.summed_height = 0;
-  //calculate the width of the y axis numbers
-  ctx.font = this.y_num_font;
-  for (i = 0; i <= 2; i++) {
-    this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width);
-  }
-  //calculate the width of the x axis numbers (but they are rotated so it becomes height)
-  if (x_axis == 1) {
-    ctx.font = this.x_num_font;
-    for (i = 1; i <= logo_columns; i++) {
-      this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width);
-    }
-  } else if (x_axis == 0) {
-    this.x_num_height = 4;
-    this.x_num_width = 4;
-  } else {
-    this.x_num_height = 0;
-    this.x_num_width = 0;
-  }
-  
-  //calculate how much vertical space we want to draw this
-  //first we add the padding at the top and bottom since that's always there
-  this.summed_height += this.pad_top + this.pad_bottom;
-  //all except the last row have the same amount of space allocated to them
-  if (logo_rows > 1) {
-    row_height = this.stack_height + this.pad_middle;
-    if (has_names) {
-      row_height += this.name_height;
-      //the label is allowed to overlap into the spacer
-      row_height += Math.max(this.y_num_height/2, this.name_spacer); 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    } else {
-      row_height += this.y_num_height/2; 
-      //the label is allowed to overlap the space used by the other label
-      row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); 
-    }
-    this.summed_height += row_height * (logo_rows - 1);
-  }
-  //the last row has the name and fine text below it but no padding
-  this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0);
-
-  var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0);
-  if (has_names) {
-    this.summed_height += fine_txt_total + this.name_height;
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + this.name_spacer);
-  } else {
-    this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), 
-        this.x_num_height + this.x_num_above + fine_txt_total);
-  }
-
-  //calculate how much horizontal space we want to draw this
-  //first add the padding at the left and right since that's always there
-  this.summed_width += this.pad_left + this.pad_right;
-  if (this.y_axis) {
-    //add on the space for the y-axis label
-    this.summed_width += this.y_label_height + this.y_label_spacer;
-    //add on the space for the y-axis
-    this.summed_width += this.y_num_width + this.y_tic_width;
-  }
-  //add on the space for the stacks
-  this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns;
-  //add on the padding after the stacks (an offset from the fine text)
-  this.summed_width += this.stacks_pad_right;
-
-};
-
-//======================================================================
-// end LogoMetrics object
-//======================================================================
-
-//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm
-function image_ok(img) {
-  "use strict";
-  // During the onload event, IE correctly identifies any images that
-  // weren't downloaded as not complete. Others should too. Gecko-based
-  // browsers act like NS4 in that they report this incorrectly.
-  if (!img.complete) {
-    return false;
-  }
-  // However, they do have two very useful properties: naturalWidth and
-  // naturalHeight. These give the true size of the image. If it failed
-  // to load, either of these should be zero.
-  if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) {
-    return false;
-  }
-  // No other way of checking: assume it's ok.
-  return true;
-}
-  
-function supports_text(ctx) {
-  "use strict";
-  if (!ctx.fillText) {
-    return false;
-  }
-  if (!ctx.measureText) {
-    return false;
-  }
-  return true;
-}
-
-//draws the scale, returns the width
-function draw_scale(ctx, metrics, alphabet_ic, raster) {
-  "use strict";
-  var tic_height, i;
-  tic_height = metrics.stack_height / alphabet_ic;
-  ctx.save();
-  ctx.translate(metrics.y_label_height, metrics.y_num_height/2);
-  //draw the axis label
-  ctx.save();
-  ctx.font = metrics.y_label_font;
-  ctx.translate(0, metrics.stack_height/2);
-  ctx.rotate(-(Math.PI / 2));
-  ctx.textAlign = "center";
-  ctx.fillText("bits", 0, 0);
-  ctx.restore();
-
-  ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0);
-
-  //draw the axis tics
-  ctx.save();
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i <= alphabet_ic; i++) {
-    //draw the number
-    ctx.save();
-    ctx.translate(-1, 0);
-    raster.draw_scale_num(ctx, metrics.y_num_font, i);
-    ctx.restore();
-    //draw the tic
-    ctx.fillRect(0, -1, metrics.y_tic_width, 2);
-    //prepare for next tic
-    ctx.translate(0, -tic_height);
-  }
-  ctx.restore();
-
-  ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height)
-
-  ctx.restore();
-}
-
-function draw_stack_num(ctx, metrics, row_index, raster) {
-  "use strict";
-  ctx.save();
-  ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above));
-  if (metrics.x_axis == 1) {
-    raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index);
-  } else if (metrics.x_axis == 0) {
-    // draw dots instead of the numbers (good for small logos)
-    ctx.beginPath();
-    var radius = Math.round(metrics.x_num_height / 2);
-    ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false);
-    ctx.fill();
-  }
-  ctx.restore();
-}
-
-function draw_stack(ctx, metrics, symbols, raster) {
-  "use strict";
-  var preferred_pad, sym_min, i, sym, sym_height, pad;
-  preferred_pad = 0;
-  sym_min = 5;
-
-  ctx.save();//1
-  ctx.translate(0, metrics.stack_height);
-  for (i = 0; i < symbols.length; i++) {
-    sym = symbols[i];
-    sym_height = metrics.stack_height * sym.get_scale();
-    
-    pad = preferred_pad;
-    if (sym_height - pad < sym_min) {
-      pad = Math.min(pad, Math.max(0, sym_height - sym_min));
-    }
-    sym_height -= pad;
-
-    //translate to the correct position
-    ctx.translate(0, -(pad/2 + sym_height));
-
-    //draw
-    raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height);
-    //translate past the padding
-    ctx.translate(0, -(pad/2));
-  }
-  ctx.restore();//1
-}
-
-function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) {
-  "use strict";
-  var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly;
-  dx = x2 - x1;
-  dy = y2 - y1;
-  tlen = Math.pow(dx*dx + dy*dy, 0.5);
-  theta = Math.atan2(dy,dx);
-  mulx = Math.cos(theta);
-  muly = Math.sin(theta);
-  lx = [];
-  ly = [];
-  for (i = 0; i < pattern; ++i) {
-    lx.push(pattern[i] * mulx);
-    ly.push(pattern[i] * muly);
-  }
-  i = start;
-  x = x1;
-  y = y1;
-  len = 0;
-  ctx.beginPath();
-  while (len + pattern[i] < tlen) {
-    ctx.moveTo(x, y);
-    x += lx[i];
-    y += ly[i];
-    ctx.lineTo(x, y);
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-    x += lx[i];
-    y += ly[i];
-    len += pattern[i];
-    i = (i + 1) % pattern.length;
-  }
-  if (len < tlen) {
-    ctx.moveTo(x, y);
-    x += mulx * (tlen - len);
-    y += muly * (tlen - len);
-    ctx.lineTo(x, y);
-  }
-  ctx.stroke();
-}
-
-function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) {
-  "use strict";
-  var left_size = left_end - left_start;
-  var right_size = right_end - right_start;
-  var line_x;
-
-  ctx.save();//s8
-  ctx.fillStyle = "rgb(240, 240, 240)";
-  if (left_size > 0) {
-    ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height);
-  }
-  if (right_size > 0) {
-    ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height);
-  }
-  ctx.fillStyle = "rgb(51, 51, 51)";
-  if (left_size > 0 && left_divider) {
-    line_x = (left_end * metrics.stack_width) - 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  if (right_size > 0 && right_divider) {
-    line_x = (right_start * metrics.stack_width) + 0.5;
-    draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height);
-  }
-  ctx.restore();//s8
-}
-
-function size_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var draw_name, draw_finetext, metrics;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  if (canvas.width !== 0 && canvas.height !== 0) {
-    return;
-  }
-  metrics = new LogoMetrics(canvas.getContext('2d'), 
-      logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height);
-    } else if (canvas.height === 0) {
-      canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width);
-    }
-  }
-}
-
-function draw_logo_on_canvas(logo, canvas, show_names, scale) {
-  "use strict";
-  var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, 
-      offset, col_index, motif_position, ssc;
-  ssc = false;
-  draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1));
-  draw_finetext = (logo.fine_text.length > 0);
-  ctx = canvas.getContext('2d');
-  //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be
-  metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis);
-  if (typeof scale == "number") {
-    //resize the canvas to fit the scaled logo
-    canvas.width = metrics.summed_width * scale;
-    canvas.height = metrics.summed_height * scale;
-  } else {
-    if (canvas.width === 0 && canvas.height === 0) {
-      scale = 1;
-      canvas.width = metrics.summed_width;
-      canvas.height = metrics.summed_height;
-    } else if (canvas.width === 0) {
-      scale = canvas.height / metrics.summed_height;
-      canvas.width = metrics.summed_width * scale;
-    } else if (canvas.height === 0) {
-      scale = canvas.width / metrics.summed_width;
-      canvas.height = metrics.summed_height * scale;
-    } else {
-      scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height);
-    }
-  }
-  // cache the raster based on the assumption that we will be drawing a lot
-  // of logos the same size and alphabet
-  if (typeof draw_logo_on_canvas.raster_cache === "undefined") {
-    draw_logo_on_canvas.raster_cache = [];
-  }
-  for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) {
-    raster = draw_logo_on_canvas.raster_cache[i];
-    if (raster.get_alphabet().equals(logo.alphabet) &&
-        Math.abs(raster.get_scale() - scale) < 0.1) break;
-    raster = null;
-  }
-  if (raster == null) {
-    raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width);
-    draw_logo_on_canvas.raster_cache.push(raster);
-  }
-  ctx = canvas.getContext('2d');
-  ctx.save();//s1
-  ctx.scale(scale, scale);
-  ctx.save();//s2
-  ctx.save();//s7
-  //create margin
-  ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top));
-  for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) {
-    pspm = logo.get_pspm(pspm_i);
-    offset = logo.get_offset(pspm_i);
-    //optionally draw name if this isn't the last row or is the only row 
-    if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) {
-      ctx.save();//s4
-      ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height));
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s4
-      ctx.translate(0, Math.round(metrics.name_height + 
-          Math.min(0, metrics.name_spacer - metrics.y_num_height/2)));
-    }
-    //draw scale
-    if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster);
-    ctx.save();//s5
-    //translate across past the scale
-    if (logo.y_axis) {
-      ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + 
-        metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2));
-    }
-    //draw the trimming background
-    if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) {
-      var left_start = offset * logo.get_xlate_nsyms();
-      var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms();
-      var left_divider = true;
-      if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) {
-        // no overlap
-        left_start = 0;
-        left_end = 0;
-        left_divider = false;
-      } else {
-        if (left_start < logo.get_xlate_start()) {
-          left_start = logo.get_xlate_start();
-        }
-        if (left_end > logo.get_xlate_end()) {
-          left_end = logo.get_xlate_end();
-          left_divider = false;
-        }
-        left_start -= logo.get_xlate_start();
-        left_end -= logo.get_xlate_start();
-        if (left_end < left_start) {
-          left_start = 0;
-          left_end = 0;
-          left_divider = false;
-        }
-      }
-      var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms();
-      //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms());
-      var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms());
-      var right_divider = true;
-      if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) {
-        // no overlap
-        right_start = 0;
-        right_end = 0;
-        right_divider = false;
-      } else {
-        if (right_start < logo.get_xlate_start()) {
-          right_start = logo.get_xlate_start();
-          right_divider = false;
-        }
-        if (right_end > logo.get_xlate_end()) {
-          right_end = logo.get_xlate_end();
-        }
-        right_start -= logo.get_xlate_start();
-        right_end -= logo.get_xlate_start();
-        if (right_end < right_start) {
-          right_start = 0;
-          right_end = 0;
-          right_divider = false;
-        }
-      }
-      draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider);
-    }
-    //draw letters
-    var xlate_col;
-    for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) {
-      ctx.translate(metrics.stack_pad_left,0);
-      col_index = Math.floor(xlate_col / logo.get_xlate_nsyms());
-      if (xlate_col % logo.get_xlate_nsyms() == 0) {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          motif_position = col_index - offset;
-          draw_stack_num(ctx, metrics, motif_position, raster);
-          draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster);
-        }
-      } else {
-        if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) {
-          ctx.save();// s5.1
-          ctx.translate(0, Math.round(metrics.stack_height));
-          // TODO draw a dot or dash or something to indicate continuity of the motif
-          ctx.restore(); //s5.1
-        }
-      }
-      ctx.translate(Math.round(metrics.stack_width), 0);
-    }
-    ctx.restore();//s5
-    ////optionally draw name if this is the last row but isn't the only row 
-    if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer));
-
-      ctx.save();//s6
-      ctx.translate(metrics.summed_width/2, metrics.name_height);
-      ctx.font = metrics.name_font;
-      ctx.textAlign = "center";
-      ctx.fillText(pspm.name, 0, 0);
-      ctx.restore();//s6
-      ctx.translate(0, metrics.name_height);
-    } else {
-      //translate vertically past the stack and axis's        
-      ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + 
-          Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width));
-    }
-    //if not the last row then add middle padding
-    if (pspm_i != (logo.get_rows() -1)) {
-      ctx.translate(0, metrics.pad_middle);
-    }
-  }
-  ctx.restore();//s7
-  if (logo.fine_text.length > 0) {
-    ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom);
-    ctx.font = metrics.fine_txt_font;
-    ctx.textAlign = "right";
-    ctx.fillText(logo.fine_text, 0,0);
-  }
-  ctx.restore();//s2
-  ctx.restore();//s1
-}
-
-function create_canvas(c_width, c_height, c_id, c_title, c_display) {
-  "use strict";
-  var canvas = document.createElement("canvas");
-  //check for canvas support before attempting anything
-  if (!canvas.getContext) {
-    return null;
-  }
-  var ctx = canvas.getContext('2d');
-  //check for html5 text drawing support
-  if (!supports_text(ctx)) {
-    return null;
-  }
-  //size the canvas
-  canvas.width = c_width;
-  canvas.height = c_height;
-  canvas.id = c_id;
-  canvas.title = c_title;
-  canvas.style.display = c_display;
-  return canvas;
-}
-
-function logo_1(alphabet, fine_text, pspm) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  logo.add_pspm(pspm);
-  return logo;
-}
-
-function logo_2(alphabet, fine_text, target, query, query_offset) {
-  "use strict";
-  var logo = new Logo(alphabet, fine_text);
-  if (query_offset < 0) {
-    logo.add_pspm(target, -query_offset);
-    logo.add_pspm(query);
-  } else {
-    logo.add_pspm(target);
-    logo.add_pspm(query, query_offset);
-  }      
-  return logo;
-}
-
-/*
- * Specifies an alternate source for an image.
- * If the image with the image_id specified has
- * not loaded then a generated logo will be used 
- * to replace it.
- *
- * Note that the image must either have dimensions
- * or a scale must be set.
- */
-function alternate_logo(logo, image_id, scale) {
-  "use strict";
-  var image = document.getElementById(image_id);
-  if (!image) {
-    alert("Can't find specified image id (" +  image_id + ")");
-    return;
-  }
-  //if the image has loaded then there is no reason to use the canvas
-  if (image_ok(image)) {
-    return;
-  }
-  //the image has failed to load so replace it with a canvas if we can.
-  var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the image with the canvas
-  image.parentNode.replaceChild(canvas, image);
-}
-
-/*
- * Specifes that the element with the specified id
- * should be replaced with a generated logo.
- */
-function replace_logo(logo, replace_id, scale, title_txt, display_style) {
-  "use strict";
-  var element = document.getElementById(replace_id);
-  if (!replace_id) {
-    alert("Can't find specified id (" + replace_id + ")");
-    return;
-  }
-  //found the element!
-  var canvas = create_canvas(50, 120, replace_id, title_txt, display_style);
-  if (canvas === null) {
-    return;
-  }
-  //draw the logo on the canvas
-  draw_logo_on_canvas(logo, canvas, null, scale);
-  //replace the element with the canvas
-  element.parentNode.replaceChild(canvas, element);
-}
-
-/*
- * Fast string trimming implementation found at
- * http://blog.stevenlevithan.com/archives/faster-trim-javascript
- *
- * Note that regex is good at removing leading space but
- * bad at removing trailing space as it has to first go through
- * the whole string.
- */
-function trim (str) {
-  "use strict";
-  var ws, i;
-  str = str.replace(/^\s\s*/, '');
-  ws = /\s/; i = str.length;
-  while (ws.test(str.charAt(--i)));
-  return str.slice(0, i + 1);
-}
-</script>
-    <script>
-
-// PRIVATE GLOBAL (uhoh)
-var _block_colour_lookup = {};
-
-function block_colour(index) {
-  function hsl2rgb(hue, saturation, lightness) {
-    "use strict";
-    function _hue(p, q, t) {
-      "use strict";
-      if (t < 0) t += 1;
-      else if (t > 1) t -= 1;
-      if (t < (1.0 / 6.0)) {
-        return p + ((q - p) * 6.0 * t);
-      } else if (t < 0.5) {
-        return q;
-      } else if (t < (2.0 / 3.0)) {
-        return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0);
-      } else {
-        return p;
-      }
-    }
-    function _pad_hex(value) {
-      var hex = Math.round(value * 255).toString(16);
-      if (hex.length < 2) hex = "0" + hex;
-      return hex;
-    }
-    var r, g, b, p, q;
-    if (saturation == 0) {
-      // achromatic (grayscale)
-      r = lightness;
-      g = lightness;
-      b = lightness;
-    } else {
-      if (lightness < 0.5) {
-        q = lightness * (1 + saturation);
-      } else {
-        q = lightness + saturation - (lightness * saturation);
-      }
-      p = (2 * lightness) - q;
-      r = _hue(p, q, hue + (1.0 / 3.0));
-      g = _hue(p, q, hue);
-      b = _hue(p, q, hue - (1.0 / 3.0));
-    }
-    return "#" + _pad_hex(r) + _pad_hex(g) + _pad_hex(b);
-  }
-  if (typeof index !== "number" || index % 1 !== 0 || index < 0) return "#000000";
-  // check for override
-  if (_block_colour_lookup[index] == null) {
-    var start = 0; //red
-    var sat = 100;
-    var light = 50;
-    var divisions = 1 << Math.ceil(Math.log(index + 1) / Math.LN2);
-    hue = start + (360 / divisions) * ((index - (divisions >> 1)) * 2 + 1);
-    // colour input fields only support values in the form #RRGGBB
-    _block_colour_lookup[index] = hsl2rgb(hue / 360, sat / 100, light / 100);
-  }
-  return _block_colour_lookup[index];
-}
-
-function set_block_colour(index, new_colour) {
-  _block_colour_lookup[index] = new_colour;
-  var blocks = document.querySelectorAll("div.block_motif[data-colour-index=\"" + index + "\"]");
-  var i;
-  for (i = 0; i < blocks.length; i++) {
-    blocks[i].style.backgroundColor = new_colour;
-  }
-  var swatches = document.querySelectorAll("div.legend_swatch[data-colour-index=\"" + index + "\"]");
-  var picker;
-  for (i = 0; i < swatches.length; i++) {
-    swatches[i].style.backgroundColor = new_colour;
-    picker = swatches[i].querySelector("input[type=\"color\"]");
-    if (picker != null) picker.value = new_colour;
-  }
-}
-
-function make_block_legend_entry(motif_name, motif_colour_index) {
-  if (typeof make_block_legend_entry.has_colour_picker !== "boolean") {
-    // test if colour picker is supported, based off Modernizer
-    // see http://stackoverflow.com/a/7787648/66387
-    make_block_legend_entry.has_colour_picker = (function() {
-      var doc_ele = document.documentElement;
-      // We first check to see if the type we give it sticks..
-      var input_ele = document.createElement('input');
-      input_ele.setAttribute('type', 'color');
-      var value_ok = input_ele.type !== 'text';
-      if (value_ok) {
-        // If the type does, we feed it a textual value, which shouldn't be valid.
-        // If the value doesn't stick, we know there's input sanitization which infers a custom UI
-        var smile = ':)';
-        input_ele.value = smile;
-        input_ele.style.cssText = 'position:absolute;visibility:hidden;';
-        // chuck into DOM and force reflow for Opera bug in 11.00
-        // github.com/Modernizr/Modernizr/issues#issue/159
-        doc_ele.appendChild(input_ele);
-        doc_ele.offsetWidth;
-        value_ok = input_ele.value != smile;
-        doc_ele.removeChild(input_ele);
-      }
-      return value_ok;
-    })();
-  }
-  var entry = document.createElement("div");
-  entry.className = "legend_entry";
-  var swatch;
-  swatch = document.createElement("div");
-  swatch.className = "legend_swatch";
-  swatch.setAttribute("data-colour-index", motif_colour_index);
-  swatch.style.backgroundColor = block_colour(motif_colour_index);
-  if (make_block_legend_entry.has_colour_picker) {
-    var picker = document.createElement("input");
-    picker.type = "color";
-    picker.value = block_colour(motif_colour_index);
-    picker.addEventListener("change", function(e) {
-      set_block_colour(motif_colour_index, picker.value);
-    }, false);
-    swatch.addEventListener("click", function(e) {
-      picker.click();
-    }, false);
-    swatch.appendChild(picker);
-  }
-  entry.appendChild(swatch);
-  var name = document.createElement("div");
-  name.className = "legend_text";
-  name.appendChild(document.createTextNode(motif_name));
-  entry.appendChild(name);
-  return entry;
-}
-
-function make_block_ruler(max_len) {
-  var container = document.createElement("div");
-  container.className = "block_container";
-  var step;
-  if (max_len < 50) {
-    step = 1;
-  } else if (max_len < 100) {
-    step = 2;
-  } else if (max_len < 200) {
-    step = 4;
-  } else if (max_len < 500) {
-    step = 10;
-  } else if (max_len < 1000) {
-    step = 20;
-  } else if (max_len < 2000) {
-    step = 40;
-  } else if (max_len < 5000) {
-    step = 100;
-  } else if (max_len < 10000) {
-    step = 200;
-  } else if (max_len < 20000) {
-    step = 400;
-  } else {
-    step = Math.floor(max_len / 20000) * 400;
-  }
-  var peroid;
-  if (max_len < 10) {
-    peroid = 1;
-  } else if (max_len < 20) {
-    peroid = 2;
-  } else {
-    peroid = 5;
-  }
-  var i, cycle, offset, tic, label;
-  for (i = 0, cycle = 0; i < max_len; i += step, cycle = (cycle + 1) % peroid) {
-    offset = "" + ((i / max_len) * 100) + "%";
-    tic = document.createElement("div");
-    tic.style.left = offset;
-    tic.className = (cycle == 0 ? "tic_major" : "tic_minor");
-    container.appendChild(tic);
-    if (cycle == 0) {
-      label = document.createElement("div");
-      label.className = "tic_label";
-      label.style.left = offset;
-      label.appendChild(document.createTextNode(i));
-      container.appendChild(label);
-    }
-  }
-  return container;
-}
-
-function _calculate_block_needle_drag_pos(e, data) {
-  var mouse;
-  e = e || window.event;
-  if (e.pageX || ev.pageY) {
-    mouse = {"x": e.pageX, "y": e.pageY};
-  } else {
-    mouse = {
-      x:e.clientX + document.body.scrollLeft - document.body.clientLeft, 
-      y:e.clientY + document.body.scrollTop  - document.body.clientTop 
-    };
-  }
-  var cont = data.container;
-  var dragable_length = cont.clientWidth - 
-    (cont.style.paddingLeft ? cont.style.paddingLeft : 0) -
-    (cont.style.paddingRight ? cont.style.paddingRight : 0);
-  //I believe that the offset parent is the body
-  //otherwise I would need to make this recursive
-  //maybe clientLeft would work, but the explanation of
-  //it is hard to understand and it apparently doesn't work
-  //in firefox 2.
-  var diff = mouse.x - cont.offsetLeft;
-  if (diff < 0) diff = 0;
-  if (diff > dragable_length) diff = dragable_length;
-  var pos = Math.round(diff / dragable_length * data.max);
-  if (pos > data.len) pos = data.len;
-  return pos;
-}
-
-function _update_block_needle_drag(e, data, done) {
-  "use strict";
-  var pos = _calculate_block_needle_drag_pos(e, data);
-  // read the needle positions
-  var left = parseInt(data.llabel.textContent, 10) - data.off - 1;
-  var right = parseInt(data.rlabel.textContent, 10) - data.off;
-  // validate needle positions
-  if (left >= data.len) left = data.len - 1;
-  if (left < 0) left = 0;
-  if (right > data.len) right = data.len;
-  if (right <= left) right = left + 1;
-  // calculate the new needle positions
-  if (data.moveboth) {
-    var size = right - left;
-    if (data.isleft) {
-      if ((pos + size) > data.len) pos = data.len - size;
-      left = pos;
-      right = pos + size;
-    } else {
-      if ((pos - size) < 0) pos = size;
-      left = pos - size;
-      right = pos;
-    }
-  } else {
-    if (data.isleft) {
-      if (pos >= right) pos = right - 1;
-      left = pos;
-    } else {
-      if (pos <= left) pos = left + 1;
-      right = pos;
-    }
-  }
-  // update the needle positions
-  data.lneedle.style.left = "" + (left / data.max * 100) + "%";
-  data.llabel.textContent = "" + (left + data.off + 1);
-  data.rneedle.style.left = "" + (right / data.max * 100) + "%";
-  data.rlabel.textContent = "" + (right + data.off);
-  data.handler(left, right, done);
-}
-
-function _make_block_needle_drag_start_handler(isleft, data) {
-  return function (e) {
-    data.isleft = isleft;
-    data.moveboth = !(e.shiftKey);
-    document.addEventListener("mousemove", data.drag_during, false);
-    document.addEventListener("mouseup", data.drag_end, false);
-  };
-}
-
-function _make_block_needle_drag_end_handler(data) {
-  return function (e) {
-    document.removeEventListener("mousemove", data.drag_during, false);
-    document.removeEventListener("mouseup", data.drag_end, false);
-    _update_block_needle_drag(e, data, true);
-  };
-}
-
-function _make_block_needle_drag_during_handler(data) {
-  return function (e) {
-    _update_block_needle_drag(e, data, false);
-  };
-}
-
-// private function used by make_block_container
-function _make_block_needle(isleft, value, data) {
-  var vbar = document.createElement('div');
-  vbar.className = "block_needle " + (isleft ? "left" : "right");
-  vbar.style.left = "" + (value / data.max * 100)+ "%";
-  var label = document.createElement('div');
-  label.className = "block_handle " + (isleft ? "left" : "right");
-  // The needles sit between the sequence positions, so the left one sits at the
-  // start and the right at the end. This is why 1 is added to the displayed
-  // value for a left handle as the user doesn't need to know about this detail
-  label.textContent = "" + (isleft ? value + data.off + 1 : value + data.off);
-  label.unselectable = "on"; // so IE and Opera don't select the text, others are done in css
-  label.title = "Drag to move the displayed range. Hold shift and drag to change " + (isleft ? "lower" : "upper") + " bound of the range.";
-  vbar.appendChild(label);
-  if (isleft) {
-    data.lneedle = vbar;
-    data.llabel = label;
-  } else {
-    data.rneedle = vbar;
-    data.rlabel = label;
-  }
-  label.addEventListener("mousedown", _make_block_needle_drag_start_handler(isleft, data), false);
-  return vbar;
-}
-
-function make_block_container(is_stranded, has_both_strands, max_len, show_len, offset, range_handler) {
-  offset = (offset != null ? offset : 0);
-  // make the container for the block diagram
-  var container = document.createElement("div");
-  container.className = "block_container";
-  container.setAttribute("data-max", max_len);
-  container.setAttribute("data-off", offset);
-  if (is_stranded) {
-    var plus = document.createElement("div");
-    plus.appendChild(document.createTextNode("+"));
-    plus.className = "block_plus_sym";
-    container.appendChild(plus);
-    if (has_both_strands) {
-      var minus = document.createElement("div");
-      minus.appendChild(document.createTextNode("-"));
-      minus.className = "block_minus_sym";
-      container.appendChild(minus);
-    }
-  }
-  var rule = document.createElement("div");
-  rule.className = "block_rule";
-  rule.style.width = ((show_len / max_len) * 100) + "%";
-  container.appendChild(rule);
-  if (range_handler != null) {
-    var range_data = {
-      "max": max_len,
-      "len": show_len,
-      "off": offset,
-      "handler": range_handler,
-      "container": container,
-      "lneedle": null, "llabel": null,
-      "rneedle": null, "rlabel": null,
-      "isleft": false, "moveboth" : false
-    };
-    range_data.drag_during = _make_block_needle_drag_during_handler(range_data);
-    range_data.drag_end = _make_block_needle_drag_end_handler(range_data);
-    container.appendChild(_make_block_needle(false, 1, range_data)); // add right first so z-index works
-    container.appendChild(_make_block_needle(true, 0, range_data));
-  }
-  return container;
-}
-
-function make_block_label(container, max_len, pos, length, message) {
-  "use strict";
-  var label = document.createElement("div");
-  label.className = "block_label";
-  label.style.left = (((pos + (length / 2)) / max_len) * 100) + "%";
-  label.appendChild(document.createTextNode(message));
-  container.appendChild(label);
-}
-
-function make_block(container, max_len,
-    site_pos, site_len, site_pvalue, site_rc, site_colour_index, site_secondary) {
-  "use strict";
-  var block_height, block, block_region1, block_region2;
-  var max_block_height = 12;
-  var max_pvalue = 1e-10;
-  // calculate the height of the block
-  block_height = (site_pvalue < max_pvalue ? max_block_height : 
-      (Math.log(site_pvalue) / Math.log(max_pvalue)) * max_block_height);
-  if (block_height < 1) block_height = 1;
-  // create a block to represent the motif
-  block = document.createElement("div");
-  block.className = "block_motif" + (site_secondary ? " scanned_site" : "") + (site_rc ? " bottom" : " top");
-  block.style.left = ((site_pos / max_len) * 100) + "%";
-  block.style.top = (!site_rc ? max_block_height - block_height : 
-      max_block_height + 1) + "px";
-  block.style.width = ((site_len / max_len) * 100) + "%";
-  block.style.height = block_height + "px";
-  block.style.backgroundColor = block_colour(site_colour_index);
-  block.setAttribute("data-colour-index", site_colour_index);
-  // add to container
-  container.appendChild(block);
-  var activator = function (e) {
-    toggle_class(block, "active", true);
-    var new_e = new e.constructor(e.type, e);
-    block.dispatchEvent(new_e);
-  };
-  var deactivator = function (e) {
-    toggle_class(block, "active", false);
-    var new_e = new e.constructor(e.type, e);
-    block.dispatchEvent(new_e);
-  }
-  // create a larger region to detect mouseover for the block
-  block_region1 = document.createElement("div");
-  block_region1.className = "block_region top" + 
-    (site_secondary ? " scanned_site" : "") + (site_rc ? "" : " main");
-  block_region1.style.left = block.style.left;
-  block_region1.style.width = block.style.width;
-  block_region1.addEventListener('mouseover', activator, false);
-  block_region1.addEventListener('mouseout', deactivator, false);
-  container.appendChild(block_region1);
-  block_region2 = document.createElement("div");
-  block_region2.className = "block_region bottom" + 
-    (site_secondary ? " scanned_site" : "") + (site_rc ? " main" : "");
-  block_region2.style.left = block.style.left;
-  block_region2.style.width = block.style.width;
-  block_region2.addEventListener('mouseover', activator, false);
-  block_region2.addEventListener('mouseout', deactivator, false);
-  container.appendChild(block_region2);
-  return block;
-}
-
-function set_block_needle_positions(containingNode, start, end) {
-  var container, lneedle, llabel, rneedle, rlabel, max, off, left, right;
-  container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container"));
-  max = parseInt(container.getAttribute("data-max"), 10);
-  off = parseInt(container.getAttribute("data-off"), 10);
-  left = start - off;
-  right = end - off;
-  lneedle = containingNode.querySelector(".block_needle.left");
-  llabel = lneedle.querySelector(".block_handle.left");
-  rneedle = containingNode.querySelector(".block_needle.right");
-  rlabel = rneedle.querySelector(".block_handle.right");
-  // update the needle positions
-  lneedle.style.left = "" + (left / max * 100) + "%";
-  llabel.textContent = "" + (left + off + 1);
-  rneedle.style.left = "" + (right / max * 100) + "%";
-  rlabel.textContent = "" + (right + off);
-}
-
-function get_block_needle_positions(containingNode) {
-  var container, llabel, rlabel, max, off, left, right;
-  container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container"));
-  max = parseInt(container.getAttribute("data-max"), 10);
-  off = parseInt(container.getAttribute("data-off"), 10);
-  llabel = containingNode.querySelector(".block_needle.left > .block_handle.left");
-  rlabel = containingNode.querySelector(".block_needle.right > .block_handle.right");
-  left = parseInt(llabel.textContent, 10) - off - 1;
-  right = parseInt(rlabel.textContent, 10) - off;
-  return {"start": left + off, "end": right + off};
-}
-</script>
-    <script>
-function make_alpha_bg_table(alph, freqs) {
-  function colour_symbol(index) {
-    var span = document.createElement("span");
-    span.appendChild(document.createTextNode(alph.get_symbol(index)));
-    span.style.color = alph.get_colour(index);
-    span.className = "alpha_symbol";
-    return span;
-  }
-  var table, thead, tbody, row, th, span, i;
-  // create table
-  table = document.createElement("table");
-  table.className = "alpha_bg_table";
-  // create header
-  thead = document.createElement("thead");
-  table.appendChild(thead);
-  row = thead.insertRow(thead.rows.length);
-  if (alph.has_complement()) {
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq");
-    if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "");
-    if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg");
-    if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-  } else {
-    add_text_header_cell(row, "");
-    add_text_header_cell(row, "Name", "pop_alph_name");
-    if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq");
-    if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg");
-  }
-  // add alphabet entries
-  tbody = document.createElement("tbody");
-  table.appendChild(tbody);
-  if (alph.has_complement()) {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      var c = alph.get_complement(i);
-      if (i > c) continue;
-      row = tbody.insertRow(tbody.rows.length);
-      add_text_cell(row, alph.get_name(i));
-      if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3));
-      if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3));
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, "~");
-      add_cell(row, colour_symbol(c)); 
-      if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(c).toFixed(3));
-      if (freqs != null) add_text_cell(row, "" + freqs[c].toFixed(3));
-      add_text_cell(row, alph.get_name(c));
-    }
-  } else {
-    for (i = 0; i < alph.get_size_core(); i++) {
-      row = tbody.insertRow(tbody.rows.length);
-      add_cell(row, colour_symbol(i)); 
-      add_text_cell(row, alph.get_name(i));
-      if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3));
-      if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3));
-    }
-  }
-  return table;
-}
-
-</script>
-    <script>
-var current_motif = 0;
-var meme_alphabet = new Alphabet(data.alphabet, data.background.freqs);
-
-var DelayLogoTask = function(logo, canvas) {
-  this.logo = logo;
-  this.canvas = canvas;
-};
-
-DelayLogoTask.prototype.run = function () {
-  draw_logo_on_canvas(this.logo, this.canvas, false);
-};
-
-function motif_pspm(index) {
-  var motif, pwm, psm, name, ltrim, rtrim, nsites, evalue;
-  // get motif
-  motif = data["motifs"][index];
-  // get motif paramters
-  pwm = motif["pwm"]; 
-  psm = motif["psm"];
-  name = "" + (index + 1); ltrim = 0; rtrim = 0; 
-  nsites = motif["nsites"]; evalue = motif["evalue"];
-  // make pspm
-  return new Pspm(pwm, name, ltrim, rtrim, nsites, evalue, psm);
-}
-
-function motif_count_matrix(index) {
-  return motif_pspm(index).as_count_matrix();
-}
-
-function motif_prob_matrix(index) {
-  return motif_pspm(index).as_probability_matrix();
-}
-
-function motif_minimal_meme(index) {
-  return motif_pspm(index).as_meme({
-    "with_header": true, 
-    "with_pspm": true,
-    "with_pssm": true,
-    "version": data["version"],
-    "alphabet": meme_alphabet,
-    "strands": (meme_alphabet.has_complement() && data.options.revcomp ? 2 : 1)
-  });
-}
-
-function motif_fasta(index) {
-  "use strict";
-  var motif, sites, site, seq, sequences, sequence, i, num, counter, out;
-  counter = {};
-  sequences = data["sequence_db"]["sequences"];
-  motif = data["motifs"][index];
-  sites = motif["sites"];
-  out = "";
-  for (i = 0; i < sites.length; i++) {
-    site = sites[i];
-    seq = site["seq"];
-    sequence = sequences[seq];
-    counter[seq] = (num = counter[seq]) ? (++num) : (num = 1); // inc counter
-    if (i !== 0) {out += "\n";}
-    out += ">" + sequence["name"] + "_site_" + num + " offset= " + site["pos"] + 
-      (site["rc"] ? " RC\n" : "\n");
-    out += site["match"];
-  }
-  return out;
-}
-
-function motif_raw(index) {
-  "use strict";
-  var sites, i, out;
-  sites = data["motifs"][index]["sites"];
-  out = "";
-  for (i = 0; i < sites.length; i++) {
-    if (i !== 0) {out += "\n";}
-    out += sites[i]["match"];
-  }
-  return out;
-}
-
-function clone_template(template) {
-  "use strict";
-  var node, help_btns, i, button;
-  node = $(template).cloneNode(true);
-  toggle_class(node, "template", false);
-  node.id = "";
-  help_btns = node.querySelectorAll(".help");
-  for (i = 0; i < help_btns.length; i++) {
-    button = help_btns[i];
-    if (button.hasAttribute("data-topic")) {
-      button.tabIndex = "0";
-      button.addEventListener("click", __toggle_help, false);
-      button.addEventListener("keydown", __toggle_help, false);
-    }
-  }
-  return node;
-}
-
-function set_tvar(template, tvar, value) {
-  var node;
-  node = find_child(template, tvar);
-  if (node === null) {
-    throw new Error("Template does not contain variable " + tvar);
-  }
-  node.innerHTML = "";
-  if (typeof value !== "object") {
-    node.appendChild(document.createTextNode(value));
-  } else {
-    node.appendChild(value);
-  }
-}
-
-function make_logo(alphabet, pspm, rc, offset, className) {
-  if (rc) pspm = pspm.copy().reverse_complement(alphabet);
-  var logo = new Logo(alphabet, "");
-  logo.add_pspm(pspm, offset);
-  var canvas = document.createElement('canvas');
-  canvas.height = 50;
-  canvas.width = 0;
-  canvas.className = className;
-  size_logo_on_canvas(logo, canvas, false);
-  add_draw_task(canvas, new DelayLogoTask(logo, canvas));
-  return canvas;
-}
-
-function make_small_logo(alphabet, pspm, options) {
-  if (typeof options === "undefined") options = {};
-  if (options.rc) pspm = pspm.copy().reverse_complement(alphabet);
-  var logo = new Logo(alphabet, {x_axis: false, y_axis: false});
-  logo.add_pspm(pspm, (typeof options.offset === "number" ? options.offset : 0));
-  var canvas = document.createElement('canvas');
-  if (typeof options.className === "string") canvas.className = options.className;
-  if (typeof options.width === "number" && options.width > 0) {
-    canvas.height = 0;
-    canvas.width = options.width;
-    draw_logo_on_canvas(logo, canvas, false);
-  } else {
-    draw_logo_on_canvas(logo, canvas, false, 1/3);
-  }
-  return canvas;
-}
-
-function make_large_logo(alphabet, pspm, rc, offset, className) {
-  if (rc) pspm = pspm.copy().reverse_complement(alphabet);
-  var logo = new Logo(alphabet, "");
-  logo.add_pspm(pspm, offset);
-  var canvas = document.createElement('canvas');
-  canvas.height = 200;
-  canvas.width = 0;
-  canvas.className = className;
-  size_logo_on_canvas(logo, canvas, false);
-  add_draw_task(canvas, new DelayLogoTask(logo, canvas));
-  return canvas;
-}
-
-function make_sym_btn(symbol, title, action) {
-  var box;
-  box = document.createElement("div");
-  box.tabIndex = 0;
-  box.className = "sym_btn";
-  box.appendChild(document.createTextNode(symbol));
-  box.title = title;
-  box.addEventListener('click', action, false);
-  box.addEventListener('keydown', action, false);
-  return box;
-}
-
-function make_seq(alphabet, seq) {
-  var i, j, letter, lbox, sbox;
-  sbox = document.createElement("span");
-  for (i = 0; i < seq.length; i = j) {
-    letter = seq.charAt(i);
-    for (j = i+1; j < seq.length; j++) {
-      if (seq.charAt(j) !== letter) {
-        break;
-      }
-    }
-    lbox = document.createElement("span");
-    lbox.style.color = alphabet.get_colour(alphabet.get_index(letter));
-    lbox.appendChild(document.createTextNode(seq.substring(i, j)));
-    sbox.appendChild(lbox);
-  }
-  return sbox;
-}
-
-//
-// make_pv_text
-//
-// Returns the string p-value, with the p italicised.
-///
-function make_pv_text() {
-  var pv_text = document.createElement("span");
-  var pv_italic_text = document.createElement("span");
-  pv_italic_text.appendChild(document.createTextNode("p"));
-  pv_italic_text.style.fontStyle = "italic";
-  pv_text.appendChild(pv_italic_text);
-  pv_text.appendChild(document.createTextNode("-value"));
-  return pv_text;
-}
-
-function append_site_entries(tbody, motif, site_index, count) {
-  "use strict";
-  var i, end;
-  var sites, site, sequences, sequence;
-  var rbody;
-  if (typeof count !== "number") {
-    count = 20;
-  }
-  sequences = data["sequence_db"]["sequences"];
-  sites = motif["sites"];
-  end = Math.min(site_index + count, sites.length);
-  for (i = site_index; i < end; i++) {
-    site = sites[i];
-    sequence = sequences[site["seq"]];
-
-    rbody = tbody.insertRow(tbody.rows.length);
-    add_text_cell(rbody, "" + (site["seq"] + 1) + ".", "site_num");
-    add_text_cell(rbody, sequence["name"], "site_name");
-    add_text_cell(rbody, site["rc"] ? "-" : "+", "site_strand");
-    add_text_cell(rbody, site["pos"] + 1, "site_start");
-    add_text_cell(rbody, site["pvalue"].toExponential(2), "site_pvalue");
-    add_text_cell(rbody, site["lflank"], "site lflank");
-    add_cell(rbody, make_seq(meme_alphabet, site["match"]), "site match");
-    add_text_cell(rbody, site["rflank"], "site rflank");
-  }
-  return i;
-}
-
-function make_site_entries() {
-  "use strict";
-  var region;
-  region = this;
-  if (region.data_site_index >= region.data_motif["sites"].length) {
-    // all sites created
-    region.removeEventListener('scroll', make_site_entries, false);
-    return;
-  }
-  // if there's still 100 pixels to scroll than don't do anything yet
-  if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) {
-    return;
-  }
-
-  region.data_site_index = append_site_entries(
-      find_child(region, "sites_tbl").tBodies[0], 
-      region.data_motif, region.data_site_index, 20
-    ); 
-}
-
-function make_sites(motif) {
-  "use strict";
-  function add_site_header(row, title, nopad, help_topic, tag_class) {
-    var div, divcp, th;
-    th = document.createElement("th");
-    div = document.createElement("div");
-    div.className = "sites_th_inner";
-    if (typeof title !== "object") {
-      title = document.createTextNode("" + title);
-    }
-    div.appendChild(title);
-    if (help_topic) {
-      div.appendChild(document.createTextNode("\xA0"));
-      div.appendChild(help_button(help_topic));
-    }
-    divcp = div.cloneNode(true);
-    divcp.className = "sites_th_hidden";
-    th.appendChild(div);
-    th.appendChild(divcp);
-    if (nopad) {
-      th.className = "nopad";
-    }
-    if (tag_class) {
-      th.className += " " + tag_class;
-    }
-    row.appendChild(th);
-  }
-  var outer_tbl, inner_tbl, tbl, thead, tbody, rhead;
-
-  outer_tbl = document.createElement("div");
-  outer_tbl.className = "sites_outer";
-
-  inner_tbl = document.createElement("div");
-  inner_tbl.className = "sites_inner";
-  outer_tbl.appendChild(inner_tbl);
-
-  tbl = document.createElement("table");
-  tbl.className = "sites_tbl";
-  inner_tbl.appendChild(tbl);
-
-  thead = document.createElement("thead");
-  tbl.appendChild(thead);
-  tbody = document.createElement("tbody");
-  tbl.appendChild(tbody);
-
-  rhead = thead.insertRow(thead.rows.length);
-  add_site_header(rhead, "", true);
-  add_site_header(rhead, "Name", false, "pop_seq_name");
-  add_site_header(rhead, "Strand", false, "pop_site_strand", "site_strand_title");
-  add_site_header(rhead, "Start", false, "pop_site_start");
-  add_site_header(rhead, make_pv_text(), false, "pop_site_pvalue");
-  add_site_header(rhead, "", false);
-  add_site_header(rhead, "Sites", true, "pop_site_match");
-  add_site_header(rhead, "", false);
-
-  inner_tbl.data_motif = motif;
-  inner_tbl.data_site_index = append_site_entries(tbody, motif, 0, 20);
-  if (inner_tbl.data_site_index < motif["sites"].length) {
-    inner_tbl.addEventListener('scroll', make_site_entries, false);
-  }
-  return outer_tbl;
-}
-
-function make_motif_table_entry(row, alphabet, ordinal, motif, colw) {
-  "use strict";
-  function ev_sig(evalue_str) {
-    "use strict";
-    var ev_re, match, sig, exp, num;
-    ev_re = /^(.*)e(.*)$/;
-    if (match = ev_re.exec(evalue_str)) {
-      sig = parseFloat(match[1]);
-      exp = parseInt(match[2]);
-      if (exp >= 0) {
-        return false;
-      } else if (exp <= -3) {
-        return true;
-      } else {
-        return sig * Math.pow(10, exp) <= 0.05;
-      }
-    }
-    return true;
-  }
-  function make_preview(alphabet, motif) {
-    "use strict";
-    var pspm, preview, preview_rc;
-    var box, btn_box, logo_box, btn_plus, btn_minus;
-    if (motif["preview_logo"]) {
-      preview = motif["preview_logo"];
-      preview_rc = motif["preview_logo_rc"];
-    } else {
-      pspm = new Pspm(motif["pwm"]);
-      preview = make_logo(alphabet, pspm);
-      motif["preview_logo"] = preview;
-      if (alphabet.has_complement()) {
-        preview_rc = make_logo(alphabet, pspm, true, 0, "logo_rc");
-        motif["preview_logo_rc"] = preview_rc;
-      }
-    }
-    if (preview_rc) {
-      btn_plus = document.createElement("div");
-      btn_plus.appendChild(document.createTextNode("+"));
-      btn_plus.className = "preview_btn plus";
-      btn_plus.tabIndex = "0";
-      btn_plus.addEventListener("click", action_btn_rc, false);
-      btn_plus.addEventListener("keydown", action_btn_rc, false);
-      btn_minus = document.createElement("div");
-      btn_minus.appendChild(document.createTextNode("-"));
-      btn_minus.className = "preview_btn minus";
-      btn_minus.tabIndex = "0";
-      btn_minus.addEventListener("click", action_btn_rc, false);
-      btn_minus.addEventListener("keydown", action_btn_rc, false);
-      btn_box = document.createElement("div");
-      btn_box.className = "preview_btn_box";
-      btn_box.appendChild(btn_plus);
-      btn_box.appendChild(btn_minus);
-    }
-    logo_box = document.createElement("div");
-    logo_box.className = "preview_logo_box";
-    logo_box.appendChild(preview);
-    if (preview_rc) logo_box.appendChild(preview_rc);
-    box = document.createElement("div");
-    box.className = "preview_box";
-    if (preview_rc) box.appendChild(btn_box);
-    box.appendChild(logo_box);
-    if (preview_rc) {
-      if (motif["rc"]) {
-        btn_minus.className += " active";
-        logo_box.className += " show_rc_logo";
-      } else {
-        btn_plus.className += " active";
-      }
-    }
-    return box;
-  }
-  var pspm, preview, preview_rc, c;
-  row.data_motif = motif;
-  row.data_ordinal = ordinal;
-  if (!ev_sig(motif["evalue"])) {
-    row.style.opacity = 0.4;
-  }
-  add_text_cell(row, "" + ordinal + ".", "motif_ordinal");
-  add_cell(row, make_preview(alphabet, motif), "motif_logo");
-  add_text_cell(row, motif["evalue"], "motif_evalue");
-  add_text_cell(row, motif["nsites"], "motif_nsites");
-  add_text_cell(row, motif["len"], "motif_width");
-  add_cell(row, make_sym_btn("\u21A7", "Show more information.", 
-        action_show_more), "motif_more");
-  add_cell(row, 
-      make_sym_btn("\u21E2", 
-        "Submit the motif to another MEME Suite program or download it.",
-        action_show_outpop), 
-      "motif_submit");
-  if (colw) {
-    for (c = 0; c < row.cells.length; c++) {
-      row.cells[c].style.minWidth = colw[c] + "px";
-    }
-  }
-}
-
-function make_motifs_table(alphabet, start_ordinal, motifs, colw, stop_reason) {
-  var i, j;
-  var tbl, thead, tbody, tfoot, row, preview;
-  var motif, pspm;
-
-  tbl = document.createElement("table");
-  
-  thead = document.createElement("thead");
-  tbl.appendChild(thead);
-  tbody = document.createElement("tbody");
-  tbl.appendChild(tbody);
-  tfoot = document.createElement("tfoot");
-  tbl.appendChild(tfoot);
-
-  row = thead.insertRow(thead.rows.length);
-  add_text_header_cell(row, "", "", "motif_ordinal");
-  add_text_header_cell(row, "Logo", "", "motif_logo");
-  add_text_header_cell(row, "E-value", "pop_ev", "motif_evalue");
-  add_text_header_cell(row, "Sites", "pop_sites", "motif_nsites");
-  add_text_header_cell(row, "Width", "pop_width", "motif_width");
-  add_text_header_cell(row, "More", "pop_more", "motif_more");
-  add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit");
-
-  for (i = 0; i < motifs.length; i++) {
-    row = tbody.insertRow(tbody.rows.length);
-    make_motif_table_entry(row, alphabet, start_ordinal + i, motifs[i], colw);
-  }
-
-  row = tfoot.insertRow(tfoot.rows.length);
-  add_text_header_cell(row, stop_reason, "", "stop_reason", "", 6);
-
-  return tbl;
-}
-
-function make_expanded_motif(alphabet, ordinal, motif, less_x, submit_x) {
-  "use strict";
-  var box, pspm, logo_box, large_logo, large_logo_rc, tab_logo, tab_logo_rc;
-  var btn, offset, norc;
-
-  box = clone_template("tmpl_motif_expanded");
-  box.data_motif = motif;
-  box.data_ordinal = ordinal;
-
-  pspm = new Pspm(motif["pwm"]);
-  if (typeof motif["rc"] !== "boolean") {
-    motif["rc"] = false;
-  }
-  if (motif["large_logo"]) {
-    large_logo = motif["large_logo"];
-    large_logo_rc = motif["large_logo_rc"];
-  } else {
-    large_logo = make_large_logo(alphabet, pspm, false, 0);
-    motif["large_logo"] = large_logo;
-    if (alphabet.has_complement()) {
-      large_logo_rc = make_large_logo(alphabet, pspm, true, 0, "logo_rc");
-      motif["large_logo_rc"] = large_logo_rc;
-    }
-  }
-  norc = (large_logo_rc == null);
-  toggle_class(box, "norc", norc);
-
-  logo_box = find_child(box, "tvar_logo");
-  logo_box.appendChild(large_logo);
-  if (large_logo_rc) logo_box.appendChild(large_logo_rc);
-  toggle_class(logo_box, "show_rc_logo", motif["rc"]);
-
-  tab_logo = find_child(box, "tvar_tab");
-  tab_logo_rc = find_child(box, "tvar_tab_rc");
-
-  toggle_class(tab_logo, "activeTab", !motif["rc"]);
-  toggle_class(tab_logo_rc, "activeTab", motif["rc"]);
-
-  tab_logo.addEventListener('click', action_rc_tab, false);
-  tab_logo.addEventListener('keydown', action_rc_tab, false);
-  tab_logo_rc.addEventListener('click', action_rc_tab, false);
-  tab_logo_rc.addEventListener('keydown', action_rc_tab, false);
-
-  set_tvar(box, "tvar_ordinal", ordinal); 
-  set_tvar(box, "tvar_evalue", motif["evalue"]);
-  set_tvar(box, "tvar_width", motif["len"]);
-  set_tvar(box, "tvar_site_count", motif["nsites"]);
-  set_tvar(box, "tvar_llr", motif["llr"]);
-  set_tvar(box, "tvar_ic", motif["ic"]);
-  set_tvar(box, "tvar_re", motif["re"]);
-  set_tvar(box, "tvar_bt", motif["bt"]);
-  set_tvar(box, "tvar_sites", make_sites(motif));
-
-  offset = 32; // 1* 5px padding + 2 * 10px padding + 2 * 2px border + 3px ??
-
-  btn = find_child(box, "tvar_less");
-  btn.style.left = (less_x - offset) + "px";
-  btn.addEventListener('click', action_show_less, false);
-  btn.addEventListener('keydown', action_show_less, false);
-  btn = find_child(box, "tvar_submit");
-  btn.style.left = (submit_x - offset) + "px";
-  btn.addEventListener('click', action_show_outpop, false);
-  btn.addEventListener('keydown', action_show_outpop, false);
-  return box;
-}
-
-
-//
-//
-///
-function make_motifs() {
-  "use strict";
-  function pixel_value(str_in) {
-    "use strict";
-    var px_re, match;
-    px_re = /^(\d+)px$/;
-    if (match = px_re.exec(str_in)) {
-      return parseInt(match[1], 10);
-    }
-    return 0;
-  }
-  var container, tbl;
-  var colw, r, row, c, cell, cell_style, pad_left, pad_right;
-
-  // make the motifs table
-  container = $("motifs");
-  container.innerHTML = ""; // clear content
-
-  tbl = make_motifs_table(meme_alphabet, 1, data["motifs"], colw, data["stop_reason"]);
-  container.appendChild(tbl);
-
-  // measure table column widths
-  colw = [];
-  row = tbl.tBodies[0].rows[0];
-  for (c = 0; c < row.cells.length; c++) {
-    var padLeft, padRight;
-    cell = row.cells[c];
-    cell_style = window.getComputedStyle(cell, null);
-    pad_left = pixel_value(cell_style.getPropertyValue("padding-left"));
-    pad_right = pixel_value(cell_style.getPropertyValue("padding-right"));
-    colw[c] = cell.clientWidth - pad_left - pad_right;
-    if (typeof colw[c] !== "number" || colw[c] < 0) {
-      colw[c] = 1;
-    }
-  }
-
-  // set minimum table column widths on each row so later when we remove rows it still aligns
-  for (r = 0; r < tbl.tBodies[0].rows.length; r++) {
-    row = tbl.tBodies[0].rows[r];
-    for (c = 0; c < row.cells.length; c++) {
-      row.cells[c].style.minWidth = colw[c] + "px";
-    }
-  }
-
-  // store the table column widths so we can create rows latter with the same minimums
-  container.data_colw = colw;
-
-  // calculate the x offset for the buttons
-  row = tbl.tBodies[0].rows[0];
-  container.data_more_x = coords(find_child(find_child(row, "motif_more"), "sym_btn"))[0];
-  container.data_submit_x = coords(find_child(find_child(row, "motif_submit"), "sym_btn"))[0];
-
-  draw_on_screen();
-}
-
-function make_meme_block(container, max_seq_len, is_scan, site) {
-  "use strict";
-  var motif = data.motifs[site.motif];
-  var block = make_block(container, max_seq_len, site.pos, motif.len,
-      site.pvalue, site.rc, site.motif, is_scan);
-  var handler = (is_scan ?
-      make_scan_popup(site, motif, block) :
-      make_block_popup(site, motif, block));
-  block.addEventListener("mouseover", handler, false);
-  block.addEventListener("mouseout", handler, false);
-}
-
-function append_blocks_entries(tbody, seq_index, count) {
-  "use strict";
-  var i, end, j;
-  var max_pvalue, max_block_height, max_seq_len, sequences;
-  var sequence, sites, scans, scan;
-  var container, plus, minus, rule, row;
-  // define some constants
-  max_seq_len = data.sequence_db.max_length;
-  // determine how many to load
-  end = Math.min(seq_index + count, data.sequence_db.sequences.length);
-  for (i = seq_index; i < end; i++) {
-    // get the sequence
-    sequence = data.sequence_db.sequences[i];
-    // make the containers for the block diagram
-    container = make_block_container(meme_alphabet.has_complement(),
-        data.options.revcomp, max_seq_len, sequence.length);
-    // create blocks for the motif sites
-    sites = sequence["sites"];
-    for (j = 0; j < sites.length; j++)
-      make_meme_block(container, max_seq_len, false, sites[j]);
-    // create blocks for the scanned sites
-    scan = data.scan[i];
-    for (j = 0; j < scan.sites.length; j++)
-      make_meme_block(container, max_seq_len, true, scan.sites[j]);
-    // create a row for the sequence
-    row = tbody.insertRow(tbody.rows.length);
-    toggle_class(row, "empty_seq", sites.length == 0 && scan.sites.length == 0);
-    toggle_class(row, "only_scan", sites.length == 0 && scan.sites.length > 0);
-    add_text_cell(row, (i + 1) + ".", "blockdiag_num");
-    add_text_cell(row, sequence["name"], "blockdiag_name");
-    add_text_cell(row, scan["pvalue"].toExponential(2), "blockdiag_pvalue");
-    add_cell(row, container, "block_td"); 
-  }
-  return end;
-}
-
-function make_blocks_entries() {
-  "use strict";
-  var region;
-  region = this;
-  if (region.data_blocks_index >= data["sequence_db"]["sequences"].length) {
-    // all sites created
-    region.removeEventListener('scroll', make_blocks_entries, false);
-    return;
-  }
-  // if there's still 100 pixels to scroll than don't do anything yet
-  if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) {
-    return;
-  }
-
-  region.data_blocks_index = append_blocks_entries(
-      find_child(region, "blocks_tbl").tBodies[0], 
-      region.data_blocks_index, 20
-    ); 
-}
-
-function make_blocks() {
-  "use strict";
-  function add_seqs_filter(container, id, checked, label_text, help_topic) {
-    "use strict";
-    var label, radio;
-    radio = document.createElement("input");
-    radio.type = "radio";
-    radio.name = "seqs_display";
-    radio.id = id;
-    radio.checked = checked;
-    radio.addEventListener('click', action_seqs_filter, false);
-    label = document.createElement("label");
-    label.appendChild(document.createTextNode(label_text));
-    label.htmlFor = id;
-    container.appendChild(radio);
-    container.appendChild(label);
-    if (help_topic) {
-      container.appendChild(document.createTextNode("\xA0"));
-      container.appendChild(help_button(help_topic));
-    }
-  }
-  function add_blocks_header(row, title, nopad, help_topic) {
-    "use strict";
-    var div, divcp, th;
-    th = document.createElement("th");
-    div = document.createElement("div");
-    div.className = "blocks_th_inner";
-    if (typeof title !== "object") {
-      title = document.createTextNode("" + title);
-    }
-    div.appendChild(title);
-    if (help_topic) {
-      div.appendChild(document.createTextNode("\xA0"));
-      div.appendChild(help_button(help_topic));
-    }
-    divcp = div.cloneNode(true);
-    divcp.className = "blocks_th_hidden";
-    th.appendChild(div);
-    th.appendChild(divcp);
-    if (nopad) {
-      th.className = "nopad";
-    }
-    row.appendChild(th);
-  }
-  var container;
-  var page, view_height, outer_tbl, inner_tbl, tbl, thead, tbody, rhead;
-  var in_view, i, seq_count;
-  
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  view_height = Math.max(page.clientHeight - 300, 300);
-
-  container = $("blocks");
-  toggle_class(container, "hide_empty_seqs", true);
-  toggle_class(container, "hide_only_scan", true);
-  container.innerHTML = "";
-  add_seqs_filter(container, "rdo_sites_only", true, "Only Motif Sites", "pop_motif_sites");
-  add_seqs_filter(container, "rdo_sites_and_scan", false, "Motif Sites+Scanned Sites", "pop_scanned_sites");
-  add_seqs_filter(container, "rdo_all_seqs", false, "All Sequences", "pop_all_sequences");
-
-  outer_tbl = document.createElement("div");
-  outer_tbl.className = "blocks_outer";
-
-  inner_tbl = document.createElement("div");
-  inner_tbl.id = "blocks_scroll";
-  inner_tbl.className = "blocks_inner";
-  inner_tbl.style.maxHeight = view_height + "px";
-  outer_tbl.appendChild(inner_tbl);
-
-  tbl = document.createElement("table");
-  tbl.className = "blocks_tbl";
-  inner_tbl.appendChild(tbl);
-
-  thead = document.createElement("thead");
-  tbl.appendChild(thead);
-  tbody = document.createElement("tbody");
-  tbl.appendChild(tbody);
-
-  rhead = thead.insertRow(thead.rows.length);
-  add_blocks_header(rhead, "", true);
-  add_blocks_header(rhead, "Name", false, "pop_seq_name");
-  add_blocks_header(rhead, make_pv_text(), false, "pop_seq_pvalue");
-  add_blocks_header(rhead, "Motif Location", false, "pop_motif_location");
-
-  container.appendChild(outer_tbl);
-
-  
-  seq_count = data["sequence_db"]["sequences"].length;
-  in_view = Math.max(Math.ceil(view_height / 25), 1);
-  i = append_blocks_entries(tbody, 0, in_view);
-
-  while (i < seq_count && inner_tbl.scrollHeight - (inner_tbl.scrollTop + inner_tbl.offsetHeight) < 400) {
-    i = append_blocks_entries(tbody, i, 20);
-  }
-  inner_tbl.data_blocks_index = i;
-  if (i < seq_count) {
-    inner_tbl.addEventListener('scroll', make_blocks_entries, false);
-  }
-}
-
-function make_scan_popup(site, motif) {
-  return function (e) {
-    "use strict";
-    var pop, xy, padding, edge_padding, pop_left, pop_top, page_width;
-    var lflank, match, rflank, pspm;
-    if (!e) var e = window.event;
-    pop = make_scan_popup.pop;
-    if (e.type === "mouseover") {
-      if (pop) return;
-      pop = clone_template("tmpl_scan_info");
-      pspm = new Pspm(motif.pwm);
-      if (site.rc) pspm.reverse_complement(meme_alphabet);
-      set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"className": "scan_logo"}));
-      set_tvar(pop, "tvar_motif", motif.id);
-      set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2));
-      set_tvar(pop, "tvar_start", site.pos + 1);
-      set_tvar(pop, "tvar_end", site.pos + motif.len);
-
-      document.body.appendChild(pop);
-      position_popup(this, pop);
-      make_scan_popup.pop = pop;
-    } else if (e.type === "mouseout") {
-      if (pop) {
-        pop.parentNode.removeChild(pop);
-        make_scan_popup.pop = null;
-      }
-    }
-  };
-}
-
-function make_block_popup(site, motif, block) {
-  return function (e) {
-    "use strict";
-    var pop;
-    var lflank, match, rflank, pspm, ruler, match_seq, match_width;
-    if (!e) var e = window.event;
-    pop = make_block_popup.pop;
-    if (e.type === "mouseover") {
-      if (pop) return;
-      pop = clone_template("tmpl_block_info");
-      pspm = new Pspm(motif.pwm);
-      if (site.rc) { // must be dna
-        pspm.reverse_complement(meme_alphabet);
-        lflank = meme_alphabet.invcomp_seq(site.rflank);
-        match = meme_alphabet.invcomp_seq(site.match);
-        rflank = meme_alphabet.invcomp_seq(site.lflank);
-      } else {
-        lflank = site.lflank;
-        match = site.match;
-        rflank = site.rflank;
-      }
-      ruler = document.getElementById("measure_match");
-      match_seq = make_seq(meme_alphabet, match);
-      ruler.innerHTML = "";
-      ruler.appendChild(match_seq);
-      match_width = ruler.clientWidth;
-      ruler.removeChild(match_seq);
-      set_tvar(pop, "tvar_lflank", lflank);
-      set_tvar(pop, "tvar_match", match_seq);
-      set_tvar(pop, "tvar_rflank", rflank);
-      set_tvar(pop, "tvar_logo_pad", lflank);
-      set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"width": match_width}));
-      set_tvar(pop, "tvar_motif", motif.id);
-      set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2));
-      set_tvar(pop, "tvar_start", site.pos + 1);
-      set_tvar(pop, "tvar_end", site.pos + motif.len);
-
-      document.body.appendChild(pop);
-      position_popup(block, pop);
-      make_block_popup.pop = pop;
-    } else if (e.type === "mouseout") {
-      if (pop) {
-        pop.parentNode.removeChild(pop);
-        make_block_popup.pop = null;
-      }
-    }
-  };
-}
-
-function update_outpop_format(index) {
-  switch(parseInt($("text_format").value)) {
-    case 0: // count matrix
-      $("outpop_text").value = motif_count_matrix(index);
-      $("text_name").value = "motif_" + (index + 1) + "_counts.txt";
-      break;
-    case 1: // prob matrix
-      $("outpop_text").value = motif_prob_matrix(index);
-      $("text_name").value = "motif_" + (index + 1) + "_freqs.txt";
-      break;
-    case 2: // minimal meme
-      $("outpop_text").value = motif_minimal_meme(index);
-      $("text_name").value = "motif_" + (index + 1) + ".txt";
-      break;
-    case 3: // fasta
-      $("outpop_text").value = motif_fasta(index);
-      $("text_name").value = "motif_" + (index + 1) + "_fasta.txt";
-      break;
-    case 4: // raw
-      $("outpop_text").value = motif_raw(index);
-      $("text_name").value = "motif_" + (index + 1) + "_raw.txt";
-      break;
-    default:
-      throw new Error("Unknown motif format");
-  }
-}
-
-function update_outpop_motif(index) {
-  "use strict";
-  var motifs, motif, pspm, logo, canvas, num;
-  motifs = data["motifs"];
-  if (index < 0 || index >= motifs.length) {return;}
-  current_motif = index;
-  motif = motifs[index];
-  pspm = new Pspm(motif["pwm"]);
-  logo = new Logo(meme_alphabet, "");
-  logo.add_pspm(pspm, 0);
-  canvas = $("outpop_logo");
-  canvas.width = canvas.width; // clear canvas
-  draw_logo_on_canvas(logo, canvas, false);
-  if (meme_alphabet.has_complement()) {
-    pspm.reverse_complement(meme_alphabet);
-    logo = new Logo(meme_alphabet, "");
-    canvas = $("outpop_logo_rc");
-    canvas.width = canvas.width; // clear canvas
-    draw_logo_on_canvas(logo, canvas, false);
-  }
-  num = $("outpop_num");
-  num.innerHTML = "";
-  num.appendChild(document.createTextNode("" + (index + 1)));
-  update_outpop_format(index);
-}
-
-//
-// action_show_more
-//
-// Show more information on the motif.
-///
-function action_show_more(e) {
-  var node, tr, tbody, table, container, motif, ordinal;
-  var expanded_motif;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  // find the row that contains the cell
-  node = this;
-  do {
-    if (node.tagName === "TR") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find row!?");
-  tr = node;
-  // get info
-  motif = tr.data_motif;
-  ordinal = tr.data_ordinal;
-  // find tbody
-  do {
-    if (node.tagName === "TBODY") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find tbody!?");
-  tbody = node;
-  // find table
-  do {
-    if (node.tagName === "TABLE") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find table!?");
-  table = node;
-  // find container
-  container = node.parentNode;
-  // make a expanded motif
-  motif["expanded"] = true;
-  expanded_motif = make_expanded_motif(meme_alphabet, ordinal, motif, 
-      container.data_more_x, container.data_submit_x);
-  // now determine how to place it
-  if (tbody.rows.length === 1) {
-    // only us in the table so the table can be replaced
-    container.replaceChild(expanded_motif, table);
-  } else if (tbody.rows[0] === tr) {
-    // first row, so remove and insert an expanded motif before
-    table.deleteRow(tr.rowIndex);
-    container.insertBefore(expanded_motif, table);
-  } else if (tbody.rows[tbody.rows.length -1] === tr) {
-    // last row, so remove and insert an expanded motif after
-    table.deleteRow(tr.rowIndex);
-    container.insertBefore(expanded_motif, table.nextSibling);
-  } else {
-    var table2, tbody2;
-    table2 = table.cloneNode(false);
-    table2.appendChild(table.tHead.cloneNode(true));
-    tbody2 = table.tBodies[0].cloneNode(false);
-    table2.appendChild(tbody2);
-    container.insertBefore(table2, table.nextSibling);
-    for (i = tbody.rows.length - 1; i >= 0; i--) {
-      row = tbody.rows[i];
-      row.parentNode.removeChild(row);
-      if (row === tr) {
-        break;
-      }
-      tbody2.insertBefore(row, tbody2.rows[0]);
-    }
-    container.insertBefore(expanded_motif, table2);
-  }
-  find_child(expanded_motif, "tvar_less").focus();
-}
-
-//
-// action_show_less
-//
-// Show less information on the motif.
-///
-function action_show_less(e) {
-  var btn;
-  var expanded_motif, container, motif, ordinal, colw, focus_target;
-  var table, tbody, tbody2, row, table_before, table_after;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  btn = this;
-  // find expanded motif
-  expanded_motif = find_parent(btn, "expanded_motif");
-  if (!expanded_motif) throw new Error("Expected expanded motif.");
-  // find the container
-  container = expanded_motif.parentNode;
-  // get data
-  motif = expanded_motif.data_motif;
-  ordinal = expanded_motif.data_ordinal;
-  colw = container.data_colw;
-  // get the table before
-  table_before = expanded_motif.previousSibling;
-  if (table_before && table_before.tagName !== "TABLE") {
-    table_before = null;
-  }
-  // get the table after
-  table_after = expanded_motif.nextSibling;
-  if (table_after && table_after.tagName !== "TABLE") {
-    table_after = null;
-  }
-  // see if there is a table below or above that we can put this in.
-  // if there is a table both below and above then add this motif and
-  // all ones below to the above table
-  motif["expanded"] = false;
-  if (table_before && table_after) {
-    tbody = table_before.tBodies[0];
-    row = tbody.insertRow(tbody.rows.length);
-    make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw);
-    focus_target = find_child(row.cells[5], "sym_btn");
-    container.removeChild(expanded_motif);
-    tbody2 = table_after.tBodies[0];
-    while (tbody2.rows.length > 0) {
-      row = tbody2.rows[0];
-      row.parentNode.removeChild(row);
-      tbody.appendChild(row);
-    }
-    container.removeChild(table_after);
-  } else if (table_before) {
-    tbody = table_before.tBodies[0];
-    row = tbody.insertRow(tbody.rows.length);
-    make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw);
-    focus_target = find_child(row.cells[5], "sym_btn");
-    container.removeChild(expanded_motif);
-  } else if (table_after) {
-    tbody = table_after.tBodies[0];
-    row = tbody.insertRow(0);
-    make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw);
-    focus_target = find_child(row.cells[5], "sym_btn");
-    container.removeChild(expanded_motif);
-  } else {
-    //no table above or below!
-    // make a new table
-    table = make_motifs_table(meme_alphabet, ordinal, [motif], colw, data["stop_reason"]);
-    focus_target = find_child(table.tBodies[0].rows[0].cells[5], "sym_btn");
-    container.replaceChild(table, expanded_motif);
-  }
-  focus_target.focus();
-}
-
-function action_show_outpop(e) {
-  "use strict";
-  function init() {
-    "use strict";
-    var close_btn, next_btn, prev_btn, cancel_btn, do_btn;
-    var tab1, tab2, tab3;
-    var pnl1, pnl2, pnl3;
-    var format_list;
-    var tbl_submit, inputs, i, default_prog;
-    close_btn = $("outpop_close");
-    close_btn.addEventListener("click", action_hide_outpop, false);
-    close_btn.addEventListener("keydown", action_hide_outpop, false);
-    next_btn = $("outpop_next");
-    next_btn.addEventListener("click", action_outpop_next, false);
-    next_btn.addEventListener("keydown", action_outpop_next, false);
-    prev_btn = $("outpop_prev");
-    prev_btn.addEventListener("click", action_outpop_prev, false);
-    prev_btn.addEventListener("keydown", action_outpop_prev, false);
-    cancel_btn = $("outpop_cancel");
-    cancel_btn.addEventListener("click", action_hide_outpop, false);
-    do_btn = $("outpop_do");
-    do_btn.addEventListener("click", action_outpop_submit, false);
-    tab1 = $("outpop_tab_1");
-    tab1.tabIndex = 0;
-    tab1.addEventListener("click", action_outpop_tab, false);
-    tab1.addEventListener("keydown", action_outpop_tab, false);
-    tab2 = $("outpop_tab_2");
-    tab2.tabIndex = 0;
-    tab2.addEventListener("click", action_outpop_tab, false);
-    tab2.addEventListener("keydown", action_outpop_tab, false);
-    tab3 = $("outpop_tab_3");
-    tab3.tabIndex = 0;
-    tab3.addEventListener("click", action_outpop_tab, false);
-    tab3.addEventListener("keydown", action_outpop_tab, false);
-    pnl1 = $("outpop_pnl_1");
-    pnl2 = $("outpop_pnl_2");
-    pnl3 = $("outpop_pnl_3");
-    toggle_class(tab1, "activeTab", true);
-    toggle_class(tab2, "activeTab", false);
-    toggle_class(tab3, "activeTab", false);
-    pnl1.style.display = "block";
-    pnl2.style.display = "none";
-    pnl3.style.display = "none";
-    format_list = $("text_format");
-    format_list.addEventListener("change", action_outpop_format, false);
-    // setup program selection
-    tbl_submit = $("programs");
-    // when not dna, hide the inputs for programs that require dna motifs
-    toggle_class(tbl_submit, "alphabet_dna", meme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets
-    // add a click listener for the radio buttons
-    inputs = tbl_submit.querySelectorAll("input[type='radio']");
-    for (i = 0; i < inputs.length; i++) {
-      inputs[i].addEventListener("click", action_outpop_program, false);
-    }
-    // ensure that a default program option is selected for DNA and Protein
-    default_prog = document.getElementById(meme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); //TODO FIXME Tomtom might require a more strict definition of DNA
-    default_prog.checked = true;
-    action_outpop_program.call(default_prog);
-    // disable reverse-complement when not DNA
-    $("logo_rc_option").disabled = !meme_alphabet.has_complement(); 
-    // set errorbars on when ssc is on
-    $("logo_ssc").addEventListener("change", action_outpop_ssc, false);
-  }
-  var node;
-  // store the focused element
-  action_hide_outpop.last_active = document.activeElement;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  // hide the help popup
-  help_popup();
-  // on first load initilize the popup
-  if (!action_show_outpop.ready) {
-    init();
-    action_show_outpop.ready = true;
-  }
-  // load the motif logo
-  node = this;
-  do {
-    if (/\bexpanded_motif\b/.test(node.className) || node.tagName === "TR") break;
-  } while (node = node.parentNode);
-  if (node === null) throw new Error("Expected node!");
-  update_outpop_motif(node.data_ordinal - 1);
-  // display the download popup
-  $("grey_out_page").style.display = "block";
-  $("download").style.display = "block";
-  $("outpop_close").focus();
-}
-
-function action_hide_outpop(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  $("download").style.display = "none";
-  $("grey_out_page").style.display = "none";
-  if (typeof action_hide_outpop.last_active !== "undefined") {
-    action_hide_outpop.last_active.focus();
-  }
-}
-
-function action_outpop_next(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif + 1);
-}
-
-function action_outpop_prev(e) {
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  update_outpop_motif(current_motif - 1);
-}
-
-function action_outpop_program() {
-  "use strict";
-  var table, tr, rows, i;
-  tr = find_parent_tag(this, "TR");
-  table = find_parent_tag(tr, "TABLE");
-  rows = table.querySelectorAll("tr");
-  for (i = 0; i < rows.length; i++) {
-    toggle_class(rows[i], "selected", rows[i] === tr);
-  }
-}
-
-function action_outpop_ssc() {
-  "use strict";
-  $("logo_err").value = $("logo_ssc").value;
-}
-
-function action_outpop_submit(e) {
-  "use strict";
-  var form, input, program, motifs;
-  // find out which program is selected
-  var radios, i;
-  radios = document.getElementsByName("program");
-  program = "fimo"; // default to fimo, since it works with all alphabet types
-  for (i = 0; i < radios.length; i++) {
-    if (radios[i].checked) program = radios[i].value;
-  }
-
-  motifs = motif_minimal_meme(current_motif);
-  form = document.createElement("form");
-  form.setAttribute("method", "post");
-  form.setAttribute("action", site_url + "/tools/" + program);
-  
-  input = document.createElement("input");
-  input.setAttribute("type", "hidden");
-  input.setAttribute("name", "motifs_embed");
-  input.setAttribute("value", motifs);
-  form.appendChild(input);
-
-  document.body.appendChild(form);
-  form.submit();
-  document.body.removeChild(form);
-}
-
-function action_outpop_download_motif(e) {
-  $("text_form").submit();
-}
-
-function action_outpop_download_logo(e) {
-  "use strict";
-  $("logo_motifs").value = motif_minimal_meme(current_motif);
-  $("logo_form").submit();
-}
-
-function action_btn_rc(e) {
-  "use strict";
-  var node, tr, motif, box, logo_box, tab_st, tab_rc, rc;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  node = this;
-  do {
-    if (node.tagName === "TR") break;
-  } while (node = node.parentNode);
-  if (!node) throw new Error("Expected to find row!?");
-  tr = node;
-  // get info
-  motif = tr.data_motif;
-  box = find_parent(this, "preview_box");
-  logo_box = find_child(box, "preview_logo_box");
-  tab_st = find_child(box, "plus");
-  tab_rc = find_child(box, "minus");
-  rc = (this === tab_rc);
-  motif["rc"] = rc;
-  toggle_class(logo_box, "show_rc_logo", rc);
-  toggle_class(tab_st, "active", !rc);
-  toggle_class(tab_rc, "active", rc);
-}
-
-function action_rc_tab(e) {
-  "use strict";
-  var box, logo_box, tab_st, tab_rc, rc;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  box = find_parent(this, "expanded_motif");
-  logo_box = find_child(box, "tvar_logo");
-  tab_st = find_child(box, "tvar_tab");
-  tab_rc = find_child(box, "tvar_tab_rc");
-  rc = (this === tab_rc);
-  box.data_motif["rc"] = rc;
-  toggle_class(logo_box, "show_rc_logo", rc);
-  toggle_class(tab_st, "activeTab", !rc);
-  toggle_class(tab_rc, "activeTab", rc);
-}
-
-function action_outpop_tab(e) {
-  "use strict";
-  var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn;
-  if (!e) e = window.event;
-  if (e.type === "keydown") {
-    if (e.keyCode !== 13 && e.keyCode !== 32) {
-      return;
-    }
-    // stop a submit or something like that
-    e.preventDefault();
-  }
-  tab1 = $("outpop_tab_1");
-  tab2 = $("outpop_tab_2");
-  tab3 = $("outpop_tab_3");
-  pnl1 = $("outpop_pnl_1");
-  pnl2 = $("outpop_pnl_2");
-  pnl3 = $("outpop_pnl_3");
-  do_btn = $("outpop_do");
-
-  toggle_class(tab1, "activeTab", (this === tab1));
-  toggle_class(tab2, "activeTab", (this === tab2));
-  toggle_class(tab3, "activeTab", (this === tab3));
-  pnl1.style.display = ((this === tab1) ? "block" : "none");
-  pnl2.style.display = ((this === tab2) ? "block" : "none");
-  pnl3.style.display = ((this === tab3) ? "block" : "none");
-  do_btn.value = ((this === tab1) ? "Submit" : "Download");
-  do_btn.removeEventListener("click", action_outpop_submit, false);
-  do_btn.removeEventListener("click", action_outpop_download_logo, false);
-  do_btn.removeEventListener("click", action_outpop_download_motif, false);
-  if (this === tab1) {
-    do_btn.addEventListener("click", action_outpop_submit, false);
-  } else if (this === tab2) {
-    do_btn.addEventListener("click", action_outpop_download_motif, false);
-  } else {
-    do_btn.addEventListener("click", action_outpop_download_logo, false);
-  }
-}
-
-function action_seqs_filter() {
-  "use strict";
-  var block_container;
-  block_container = $("blocks");
-  if ($("rdo_all_seqs").checked) {
-    toggle_class(block_container, "hide_empty_seqs", false);
-    toggle_class(block_container, "hide_only_scan", false);
-  } else if ($("rdo_sites_and_scan").checked) {
-    toggle_class(block_container, "hide_empty_seqs", true);
-    toggle_class(block_container, "hide_only_scan", false);
-  } else if ($("rdo_sites_only").checked) {
-    toggle_class(block_container, "hide_empty_seqs", true);
-    toggle_class(block_container, "hide_only_scan", true);
-  }
-}
-
-function action_outpop_format() {
-  update_outpop_format(current_motif);
-}
-
-//
-// page_loaded
-//
-// Called when the page has loaded for the first time.
-///
-function page_loaded() {
-  post_load_setup();
-}
-
-//
-// page_loaded
-//
-// Called when a cached page is reshown.
-///
-function page_shown(e) {
-  if (e.persisted) post_load_setup();
-}
-
-//
-// page_loaded
-//
-// Called when the page is resized
-///
-function page_resized() {
-  var page, blocks_scroll;
-  update_scroll_pad();
-  page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
-  blocks_scroll = $("blocks_scroll");
-  if (blocks_scroll) {
-    blocks_scroll.style.maxHeight = Math.max(page.clientHeight - 300, 300) + "px";
-  }
-}
-
-//
-// pre_load_setup
-//
-// Run before the page is displayed
-///
-function pre_load_setup() {
-  var start, hue, sat, light, divisions;
-  var i, j, motifs, motif, sites, site, sequences, sequence;
-  var max_seq_len;
-  motifs = data["motifs"];
-  sequences = data["sequence_db"]["sequences"];
-  max_seq_len = 1;
-  for (i = 0; i < sequences.length; i++) {
-    sequence = sequences[i];
-    sequence["sites"] = [];
-    if (sequence["length"] > max_seq_len) {
-      max_seq_len = sequence["length"];
-    }
-  }
-  data["sequence_db"]["max_length"] = max_seq_len;
-  // use hsl colours
-  start = 0; //red
-  sat = 100;
-  light = 50;
-  for (i = 0; i < motifs.length; i++) {
-    motif = motifs[i];
-    // give the motif a colour
-    divisions = 1 << Math.ceil(Math.log(i + 1) / Math.LN2);
-    hue = start + (360 / divisions) * ((i - (divisions >> 1)) * 2 + 1);
-    motif["colour"] = "hsl(" + hue + ", " + sat + "%, " + light + "%)";
-    // associate sites with sequences as well 
-    // to make generating the block diagram easier
-    sites = motif["sites"];
-    for (j = 0; j < sites.length; j++) {
-      site = sites[j];
-      sequence = sequences[site["seq"]];
-      // record the motif index
-      site["motif"] = i;
-      // add the site to the sequence
-      sequence["sites"].push(site);
-    }
-  }
-}
-
-//
-// post_load_setup
-//
-// Run when the page has loaded, or been reloaded.
-//
-function post_load_setup() {
-  update_scroll_pad();
-  if (data["motifs"].length > 0) {
-    make_motifs();
-    make_blocks();
-  } else {
-    $("motifs").innerHTML = "<p>No significant motifs found!</p>"; // clear content
-    $("motifs").innerHTML += "<p><b>" + data["stop_reason"] + "</b></p>";
-    $("blocks").innerHTML = "<p>No significant motifs found!</p>";
-  }
-}
-
-pre_load_setup();
-</script>
-    <style>
-/* The following is the content of meme.css */
-body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;}
-
-div.help {
-  display: inline-block;
-  margin: 0px;
-  padding: 0px;
-  width: 12px;
-  height: 13px;
-  cursor: pointer;
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==);
-}
-
-div.help:hover {
-  background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==);
-}
-
-p.spaced { line-height: 1.8em;}
-
-span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;}
-
-p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-td.jump { font-size: 13px; color: #ffffff; background-color: #00666a;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps;
-  font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0;
-  font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal;
-  margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal;
-  margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;}
-
-h5 {margin: 0px}
-
-a.help { font-size: 9px; font-style: normal; text-transform: uppercase;
-  font-family: Georgia, "Times New Roman", Times, serif;}
-
-div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;}
-
-div.pad1 { margin: 10px 5px;}
-
-div.pad2 { margin: 25px 5px 5px;}
-h2.pad2 { padding: 25px 5px 5px;}
-
-div.pad3 { padding: 5px 0px 10px 30px;}
-
-div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;}
-
-div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; }
-
-div.subsection {margin:25px 0px;}
-
-img {border:0px none;}
-
-th.majorth {text-align:left;}
-th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;}
-th.actionth {font-weight:normal; text-align:left;}
-
-.explain h5 {font-size:1em; margin-left: 1em;}
-
-div.doc {margin-left: 2em; margin-bottom: 3em;}
-
-th.trainingset {
-  border-bottom: thin dashed black; 
-  font-weight:normal; 
-  padding:0px 10px;
-}
-div.pop_content {
-  position:absolute;
-  z-index:50;
-  width:300px;
-  padding: 5px;
-  background: #E4ECEC;
-  font-size: 12px;
-  font-family: Arial;
-  border-style: double;
-  border-width: 3px;
-  border-color: #AA2244;
-  display:none;
-}
-
-div.pop_content > *:first-child {
-  margin-top: 0px;
-}
-
-div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, 
-div.pop_content h5, div.pop_content h6, div.pop_content p {
-  margin: 0px;
-}
-
-div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, 
-div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 {
-  margin-top: 5px;
-}
-
-div.pop_content p + p {
-  margin-top: 5px;
-}
-
-div.pop_content > *:last-child {
-  margin-bottom: 0px;
-}
-
-div.pop_content div.pop_close {
-  /* old definition */
-  float:right;
-  bottom: 0;
-}
-
-div.pop_content span.pop_close, div.pop_content span.pop_back {
-  display: inline-block;
-  border: 2px outset #661429;
-  background-color: #CCC;
-  padding-left: 1px;
-  padding-right: 1px;
-  padding-top: 0px;
-  padding-bottom: 0px;
-  cursor: pointer;
-  color: #AA2244; /*#661429;*/
-  font-weight: bold;
-}
-
-div.pop_content span.pop_close:active, div.pop_content span.pop_back:active {
-  border-style: inset;
-}
-
-div.pop_content span.pop_close {
-  float:right;
-  /*border: 2px outset #AA002B;*/
-  /*color: #AA2244;*/
-}
-
-div.pop_content:not(.nested) .nested_only {
-  display: none;
-}
-
-div.pop_back_sec {
-  margin-bottom: 5px;
-}
-
-div.pop_close_sec {
-  margin-top: 5px;
-}
-
-table.hide_advanced tr.advanced {
-  display: none;
-}
-span.show_more {
-  display: none;
-}
-table.hide_advanced span.show_more {
-  display: inline;
-}
-table.hide_advanced span.show_less {
-  display: none;
-}
-
-
-/*****************************************************************************
- * Program logo styling
- ****************************************************************************/
-div.prog_logo {
-  border-bottom: 0.25em solid #0f5f60;
-  height: 4.5em;
-  width: 24em;
-  display:inline-block;
-}
-div.prog_logo img {
-  float:left;
-  width: 4em;
-  border-style: none;
-  margin-right: 0.2em;
-}
-div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited {
-  margin:0;
-  padding:0;
-  font-family: Arial, Helvetica,  sans-serif;
-  font-size: 3.2em;
-  line-height: 1em;
-  vertical-align: top;
-  display: block;
-  color: #026666;
-  letter-spacing: -0.06em;
-  text-shadow: 0.04em 0.06em 0.05em #666;
-}
-div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited {
-  display: block;
-  margin:0;
-  padding:0;
-  font-family: Helvetica, sans-serif;
-  font-size: 0.9em;
-  line-height: 1em;
-  letter-spacing: -0.06em;
-  color: black;
-}
-
-div.big.prog_logo {
-  font-size: 18px;
-}
-
-</style>
-    <style>
-.block_td {
-  height:25px;
-}
-.block_container {
-  position:relative;
-  box-sizing: border-box;
-  height: 25px;
-  padding: 0px;
-  margin: 0px;
-  margin-left: 1em;
-}
-.block_label {
-  position: absolute; 
-  display: inline-block;
-  padding: 3px;
-  z-index: 4;
-  top: 6px;
-  height: 12px;
-  line-height: 12px;
-  font-size: 12px;
-  background-color: white;
-  border: 1px solid black;
-  -moz-border-radius: 12px;
-  -webkit-border-radius: 12px;
-  border-radius: 12px;
-  transform: translateX(-50%);
-}
-.block_motif {
-  position: absolute; 
-  z-index: 3;
-  top: 0px;
-  box-sizing: border-box;
-  border: 1px solid black;
-  height: 12px;
-  background-color: cyan;
-}
-.block_motif.top {
-  border-bottom-width: 0;
-}
-.block_motif.bottom {
-  border-top-width: 0;
-}
-.block_motif.scanned_site {
-  opacity: 0.3;
-}
-.block_motif.scanned_site.active {
-  opacity: 0.9;
-}
-.block_region {
-  position:absolute; 
-  z-index:6; 
-  height:25px; 
-  top:0px; 
-}
-.block_region.main {
-  z-index:8;
-}
-.block_region.scanned_site {
-  z-index:5;
-}
-.block_region.scanned_site.main {
-  z-index:7;
-}
-.block_region.top {
-  height:13px;
-}
-.block_region.bottom {
-  height:13px;
-  top:12px;
-}
-.block_rule {
-  position:absolute;
-  z-index:2;
-  width:100%;
-  height:1px;
-  top:12px;
-  left:0px;
-  background-color:gray;
-}
-.block_plus_sym {
-  position:absolute;
-  z-index:4;
-  line-height:12px;
-  top:0px;
-  left:-1em;
-}
-.block_minus_sym {
-  position:absolute;
-  z-index:4;
-  line-height:12px;
-  top:13px;
-  left:-1em;
-}
-
-.tic_major {
-  position:absolute;
-  top:0em;
-  height:0.5em;
-  width: 2px;
-  margin-left: -1px;
-  background-color: blue;
-}
-.tic_minor {
-  position:absolute;
-  top:0em;
-  height:0.2em;
-  width: 1px;
-  margin-left: -0.5px;
-  background-color: blue;
-}
-.tic_label {
-  position:absolute;
-  display: inline-block;
-  top:0.5em;
-  height: 1em;
-  color: blue;
-  transform: translateX(-50%);
-}
-
-.block_needle {
-  position:absolute;
-  z-index:4;
-  height:30px; 
-  width:1px; 
-  top:-2px; 
-  background-color:gray;
-}
-.block_needle.right {
-  height: 60px;
-}
-.block_handle {
-  position: absolute; 
-  display: inline-block;
-  z-index: 5; 
-  top: 27px; 
-  min-width: 3ex;
-  text-align: center;
-  font-size: 12px;
-  line-height: 12px;
-  transform: translateX(-50%);
-  background-color: LightGrey; 
-  border:3px outset grey;
-  cursor: pointer;
-  -webkit-user-select: none; /* Chrome/Safari */        
-  -moz-user-select: none; /* Firefox */
-  -ms-user-select: none; /* IE10+ */
-  /* Rules below not implemented in browsers yet */
-  -o-user-select: none;
-  user-select: none;
-}
-.block_handle.right {
-  top: 47px;
-}
-
-.legend_container {
-  text-align: right;
-}
-.legend_entry {
-  display: inline-block;
-  padding: 5px;
-}
-div.legend_swatch {
-  box-sizing: border-box;
-  width: 15px;
-  height: 15px;
-  border: 1px solid black;
-  background-color: cyan;
-  float: left;
-}
-div.legend_swatch input {
-  display: none;
-}
-.legend_text {
-  line-height: 15px;
-  margin-left: 20px;
-}
-</style>
-    <style>
-/* meme output specific css */
-
-div.pop_block {
-  position:absolute;
-  z-index:5;
-  padding: 5px;
-  border: 1px solid black;
-  display: inline-block;
-  background-color: white;
-}
-
-#measure_match {
-  position: absolute;
-  visibility: hidden;
-  height: auto;
-  width: auto;
-  white-space: nowrap;
-}
-
-div.template {
-  position: absolute;
-  z-index: 1;
-  left: 0;
-  top: 0;
-  visibility: hidden;
-}
-
-table.block_information {
-  margin-left: auto;
-  margin-right: auto;
-}
-
-table.block_information * th {
-  text-align: right;
-}
-
-*.hide_empty_seqs * tr.empty_seq {
-  display: none;
-}
-
-*.hide_only_scan * tr.only_scan {
-  display: none;
-}
-
-*.hide_only_scan * div.scanned_site {
-  display: none;
-}
-
-td.symaction {
-  text-align: center;
-  text-decoration: underline;
-  font-size: 20px;
-  cursor: pointer;
-}
-div.sym_btn {
-  display:inline-block;
-  text-decoration: underline;
-  cursor: pointer;
-  font-size: 20px;
-  line-height:20px; 
-  text-align: center;
-  width: 20px;
-  height: 20px;
-  color: blue;
-}
-div.sym_btn:hover {
-  color: white;
-  background-color: blue;
-}
-
-div.sym_btn.positioned {
-  position: absolute;
-  top: 0px;
-}
-
-div.actionbutton { 
-  display:inline-block;
-  cursor: pointer;
-  font-size: 18px;
-  line-height:20px; 
-  padding: 5px; 
-  margin: 10px 0; 
-  border: 1px solid black;
-}
-
-div.actionbutton:hover {
-  color:#FFF;
-  background-color:#000;
-}
-
-div.param_box {
-  display: inline-block;
-  margin-right: 20px;
-}
-
-span.param {
-  font-weight: bold;
-}
-
-div.box + div.box {
-  margin-top: 5px;
-}
-
-div.sites_outer {
-  position: relative;
-  padding-top: 20px; /* height of header */
-  display: inline-block;
-}
-
-div.sites_inner {
-  overflow-x: hidden;
-  overflow-y: auto;
-  max-height: 200px;
-}
-table.sites_tbl {
-  border-collapse: collapse;
-}
-
-div.sites_th_inner {
-  position: absolute;
-  top: 0;
-  line-height: 20px; /* height of header */
-  text-align: left;
-  padding-left: 5px;
-}
-th.nopad div.sites_th_inner {
-  padding-left: 0;
-}
-div.sites_th_hidden {
-  visibility: hidden;
-  height: 0;
-  padding: 0 10px;
-}
-th.nopad div.sites_th_hidden {
-  padding: 0;
-}
-div.sites_inner * th {
-  height: 0;
-}
-
-table.sites_tbl {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.site_num {
-  text-align: right;
-}
-.site_name {
-  padding:0px 5px; 
-  text-align:left;
-}
-.site_strand {
-  padding:0px 5px; 
-  text-align:center;
-}
-.norc .site_strand, .norc .site_strand_title {
-  display: none;
-}
-.site_start {
-  padding:0px 15px; 
-  text-align: right;
-}
-.site_pvalue {
-  text-align:center; 
-  padding:0px 15px; 
-  text-align:right;
-  white-space: nowrap;
-}
-.lflank, .rflank, .match, .alpha_symbol {
-  font-weight:bold; 
-  font-size:15px; 
-  font-family: 'Courier New', Courier, monospace;
-  color:gray; 
-}
-
-.site.lflank {
-  text-align:right; 
-  padding-right:5px; 
-  color:gray;
-}
-.site.match {
-  text-align:center; 
-}
-.site.rflank {
-  text-align:left; 
-  padding-left:5px; 
-  padding-right: 20px;
-}
-
-th.stop_reason {
-  text-align: left;
-  padding-right: 10px;
-}
-
-th.motif_ordinal {
-
-}
-td.motif_ordinal {
-  text-align: right;
-  padding-right: 10px;
-}
-th.motif_logo {
-  padding-right: 10px;
-}
-td.motif_logo {
-  padding-right: 10px;
-}
-th.motif_evalue {
-  text-align:right;
-  padding-right: 10px;
-}
-td.motif_evalue {
-  text-align: right;
-  white-space: nowrap;
-  padding-right: 20px;
-}
-th.motif_nsites {
-  text-align: right;
-  padding-right: 10px;
-}
-td.motif_nsites {
-  text-align: right;
-  padding-right: 20px;
-}
-th.motif_width {
-  text-align: right;
-  padding-right: 5px;
-}
-td.motif_width {
-  text-align: right;
-  padding-right: 15px;
-}
-th.motif_more {
-  padding: 0 5px;
-}
-td.motif_more {
-  text-align: center;
-  padding: 0 5px;
-}
-th.motif_submit {
-  padding: 0 5px;
-}
-td.motif_submit {
-  text-align: center;
-  padding: 0 5px;
-}
-th.motif_download {
-  padding-left: 5px;
-}
-td.motif_download {
-  text-align: center;
-  padding-left: 5px;
-}
-
-
-div.tabArea {
-  font-size: 80%;
-  font-weight: bold;
-}
-
-.norc div.tabArea {
-  display: none;
-}
-
-span.tab, span.tab:visited {
-  cursor: pointer;
-  color: #888;
-  background-color: #ddd;
-  border: 2px solid #ccc;
-  padding: 2px 1em;
-  text-decoration: none;
-}
-span.tab.middle {
-  border-left-width: 0px;
-}
-div.tabArea.base span.tab {
-  border-top-width: 0px;
-}
-div.tabArea.top span.tab {
-  border-bottom-width: 0px;
-}
-
-span.tab:hover {
-  background-color: #bbb;
-  border-color: #bbb;
-  color: #666;
-}
-span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited {
-  background-color: white;
-  color: black;
-  cursor: default;
-}
-div.tabMain {
-  border: 2px solid #ccc;
-  background-color: white;
-  padding: 10px;
-}
-div.tabMain.base {
-  margin-top: 5px;
-  display: inline-block;
-  max-width: 98%;
-}
-
-div.tabMain.top {
-  margin-bottom: 5px;
-}
-
-div.tabCenter {
-  max-width: 100%;
-  overflow-x: auto;
-  height: 200px;
-  overflow-y: hidden;
-}
-
-canvas.logo_rc {
-  display:none;
-}
-.show_rc_logo > canvas {
-  display: none;
-}
-.show_rc_logo > canvas.logo_rc {
-  display: block;
-}
-
-canvas.scan_logo {
-  margin-left: 10px;
-}
-
-div.blocks_outer {
-  position: relative;
-  padding-top: 20px; /* height of header */
-}
-
-div.blocks_inner {
-  overflow-x: hidden;
-  overflow-y: auto;
-  max-height: 200px;
-}
-table.blocks_tbl {
-  border-collapse: collapse;
-  width: 100%;
-}
-
-div.blocks_th_inner {
-  position: absolute;
-  top: 0;
-  line-height: 20px; /* height of header */
-  text-align: left;
-  padding-left: 5px;
-}
-th.nopad div.blocks_th_inner {
-  padding-left: 0;
-}
-div.blocks_th_hidden {
-  visibility: hidden;
-  height: 0;
-  padding: 0 10px;
-}
-th.nopad div.blocks_th_hidden {
-  padding: 0;
-}
-div.blocks_inner * th {
-  height: 0;
-}
-
-table.blocks_tbl {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-td.block_td {
-  width: 99%;
-}
-
-*.blockdiag_num {
-  text-align: right;
-}
-
-td.blockdiag_name {
-  text-align: left;
-  padding:0px 10px; 
-}
-
-td.blockdiag_pvalue {
-  padding:0px 10px; 
-  text-align:right;
-  white-space: nowrap;
-}
-
-div.preview_btn {
-  border: 2px solid white;
-  height: 16px;
-  width: 16px;
-  font-size: 12px;
-  line-height: 16px;
-  text-align: center;
-  cursor: pointer;
-}
-div.preview_btn + div.preview_btn {
-  margin-top: 3px;
-}
-
-div.preview_btn.active {
-  border: 2px solid black;
-  cursor: default;
-}
-
-div.preview_btn:hover {
-  background-color: black;
-  color: white;
-  border-color: black;
-}
-
-div.preview_btn.active:hover {
-  background-color: white;
-  color: black;
-  border-color: black;
-}
-
-
-div.preview_btn_box {
-  position: absolute;
-  left: 0px;
-  top: 0px;
-  padding: 3px;
-}
-
-div.preview_logo_box {
-  height: 50px;
-  overflow-y: hidden;
-}
-
-div.preview_btn_box + div.preview_logo_box {
-  margin-left: 25px;
-}
-
-div.preview_box {
-  position: relative;
-}
-
-div.grey_background {
-  position:fixed; 
-  z-index: 8;
-  background-color: #000;
-  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
-  opacity: 0.5;
-  left: 0;
-  top: 0;
-  width: 100%;
-  height: 100%;
-}
-
-div.popup_wrapper {
-  position:fixed; 
-  z-index:9;
-  width:100%; 
-  height:0; 
-  top:50%; 
-  left:0;
-}
-
-div.popup {
-  width: 600px; 
-  z-index:9;
-  margin-left: auto;
-  margin-right: auto;
-  padding: 5px;
-  background-color: #FFF;
-  border-style: double;
-  border-width: 5px;
-  border-color: #00666a;
-  position:relative; 
-}
-div.close {
-  cursor: pointer;
-  border: 1px solid black; 
-  width:15px; 
-  height:15px; 
-  line-height:15px; /* this causes vertical centering */
-  text-align:center; 
-  background-color:#FFF; 
-  color:#000; 
-  font-size:15px;
-  font-family:monospace;
-}
-
-div.close:hover {
-  color:#FFF;
-  background-color:#000; 
-}
-
-div.navnum {
-  width:100%; 
-  height:20px; 
-  line-height:20px; 
-  text-align:center; 
-  font-size:medium;
-}
-
-div.navarrow {
-  font-size: 30px;
-  text-decoration:none;
-  cursor: pointer;
-  -moz-user-select: none;  
-  -webkit-user-select: none;  
-  -ms-user-select: none;
-}
-
-div.navarrow > span.inactive {
-  display: inline;
-}
-div.navarrow > span.active {
-  display: none;
-}
-
-div.navarrow:hover > span.active {
-  display: inline;
-}
-div.navarrow:hover > span.inactive {
-  display: none;
-}
-
-table.programs {
-  width: 100%;
-}
-
-table.programs tr {
-  background-color: #EFE;
-}
-
-table.programs tr.selected {
-  background-color: #262;
-  color: #FFF;
-}
-
-table.programs tr.dna_only {
-  display: none;
-}
-
-table.programs.alphabet_dna tr.dna_only {
-  display: table-row;
-}
-
-div.programs_scroll {
-  width: 100%; 
-  height: 90px; 
-  overflow-y: auto; 
-  overflow-x: hidden;
-  margin: 0 auto; 
-}
-table.inputs, table.alpha_bg_table {
-  margin-top: 20px;
-  border-collapse:collapse;
-}
-table.inputs * td, table.inputs * th, table.alpha_bg_table * td, table.alpha_bg_table * th {
-  padding-left: 15px;
-  padding-right: 15px;
-  padding-top: 1px;
-  padding-bottom: 1px;
-}
-
-table.hide_psp td.col_psp, table.hide_psp th.col_psp {
-  display: none;
-}
-
-/* program settings */
-span.mod_oops, span.mod_zoops, span.mod_anr {
-  display: none;
-}
-td.oops span.mod_oops,td.zoops span.mod_zoops, td.anr span.mod_anr  {
-  display: inline;
-}
-span.strand_none, span.strand_given, span.strand_both {
-  display: none;
-}
-td.none span.strand_none, td.given span.strand_given, td.both span.strand_both {
-  display: inline;
-}
-span.spmap_uni, span.spmap_pam {
-  display: none;
-}
-td.uni span.spmap_uni, td.pam span.spmap_pam {
-  display: inline;
-}
-span.prior_dirichlet, span.prior_dmix, span.prior_mega, span.prior_megap, span.prior_addone {
-  display: none;
-}
-td.dirichlet span.prior_dirichlet, td.dmix span.prior_dmix, td.mega span.prior_mega,
-td.megap span.prior_megap, td.addone span.prior_addone {
-  display: inline;
-}
-span.noendgaps_on, span.noendgaps_off {
-  display: none;
-}
-td.on span.noendgaps_on, td.off span.noendgaps_off {
-  display: inline;
-}
-span.substring_on, span.substring_off {
-  display: none;
-}
-td.on span.substring_on, td.off span.substring_off {
-  display: inline;
-}
-</style>
-  </head>
-  <body onload="page_loaded()" onpageshow="page_shown(event)" onresize="page_resized()">
-    <!--  -->
-    <div id="grey_out_page" class="grey_background" style="display:none;">
-    </div>
-    <!-- Help popups -->
-    <div class="pop_content" id="pop_">
-      <p>Help poup.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_ev">
-      <p>The statistical significance of the motif. MEME usually finds the most
-      statistically significant (low E-value) motifs first. It is unusual to
-      consider a motif with an E-value larger than 0.05 significant so, as an
-      additional indicator, MEME displays these partially transparent.</p> 
-      <p>The E-value of a motif is based on its log likelihood ratio, width,
-      sites, the background letter frequencies (given in the command line
-      summary), and the size of the training set.</p>
-      <p>The E-value is an estimate of the expected number of motifs with the
-      given log likelihood ratio (or higher), and with the same width and site
-      count, that one would find in a similarly sized set of random
-      sequences (sequences where each position is independent and letters are
-      chosen according to the background letter frequencies).</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_sites">
-      <p>The number of sites contributing to the construction of the motif.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_width">
-      <p>The width of the motif. Each motif describes a pattern of a fixed
-      width, as no gaps are allowed in MEME motifs.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_more">
-      <p>Click on the blue symbol below to reveal more information about this motif.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_submit_dl">
-      <p>Click on the blue symbol below to reveal options allowing you
-      to submit this motif to another MEME Suite motif analysis program, to download this
-      motif in various text formats, or to download a sequence "logo" of
-      this motif PNG or EPS format.</p>
-      <h5>Supported Programs</h5>
-      <dl>
-        <dt>Tomtom</dt>
-        <dd>Tomtom is a tool for searching for similar known motifs. 
-          [<a href="http://meme-suite.org/doc/tomtom.html?man_type=web">manual</a>]</dd>
-        <dt>MAST</dt>
-        <dd>MAST is a tool for searching biological sequence databases for 
-          sequences that contain one or more of a group of known motifs.
-          [<a href="http://meme-suite.org/doc/mast.html?man_type=web">manual</a>]</dd>
-        <dt>FIMO</dt>
-        <dd>FIMO is a tool for searching biological sequence databases for 
-          sequences that contain one or more known motifs.
-          [<a href="http://meme-suite.org/doc/fimo.html?man_type=web">manual</a>]</dd>
-        <dt>GOMO</dt>
-        <dd>GOMO is a tool for identifying possible roles (Gene Ontology 
-          terms) for DNA binding motifs.
-          [<a href="http://meme-suite.org/doc/gomo.html?man_type=web">manual</a>]</dd>
-        <dt>SpaMo</dt>
-        <dd>SpaMo is a tool for inferring possible transcription factor
-          complexes by finding motifs with enriched spacings.
-          [<a href="http://meme-suite.org/doc/spamo.html?man_type=web">manual</a>]</dd>
-      </dl>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_llr">
-      <p>The log likelihood ratio of the motif.The log likelihood ratio is the 
-      logarithm of the ratio of the probability of the occurrences of the motif
-      given the motif model (likelihood given the motif) versus their
-      probability given the background model (likelihood given the null model).
-      (Normally the background model is a 0-order Markov model using the
-      background letter frequencies, but higher order Markov models may be
-      specified via the -bfile option to MEME.).</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_ic">
-      <p>The information content of the motif in bits. It is equal to the sum
-      of the uncorrected information content, R(), in the columns of the pwm.
-      This is equal relative entropy of the motif relative to a uniform
-      background frequency model.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_re">
-      <p>The relative entropy of the motif.</p>
-
-      <p style="font-family: monospace;">re = llr / (sites * ln(2))</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_bt">
-      <p>The Bayes Threshold.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_strand">
-      <p>The strand used for the motif site.</p>
-      <dl>
-        <dt>+</dt>
-        <dd>The motif site was found in the sequence as it was supplied.</dd>
-        <dt>-</dt>
-        <dd>The motif site was found in the reverse complement of the supplied sequence.</dd>
-      </dl>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_start">
-      <p>The position in the sequence where the motif site starts. If a motif
-      started right at the begining of a sequence it would be described as
-      starting at position 1.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_pvalue">
-      <p>The probability that an equal or better site would be found in a
-      random sequence of the same length conforming to the background letter
-      frequencies.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_site_match">
-      <p>A motif site with the 10 flanking letters on either side.</p> 
-      <p>When the site is not on the given strand then the site
-      and both flanks are reverse complemented so they align.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_name">
-      <p>The name of the sequences as given in the FASTA file.</p>
-      <p>The number to the left of the sequence name is the ordinal
-      of the sequence.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_motif_sites">
-      <p>These are the motif sites predicted by MEME and used to build the motif.</p>
-      <p>These sites are shown in solid color and hovering the cursor
-      over a site will reveal details about the site.  Only sequences
-      that contain a motif site are shown.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_scanned_sites">
-      <p>These are the motif sites predicted by MEME plus
-      any additional sites detected using a motif scanning
-      algorithm.</p>
-      <p>These MEME sites are shown in solid color and 
-      additional scanned sites are shown in transparent color.
-      Hovering the cursor over a site will reveal details about the site.
-      Only sequences containing a predicted or scanned motif site are shown.</p>
-      <p>The scanned sites are predicted using a
-      log-odds scoring matrix constructed from the MEME sites.
-      Only scanned sites with position <i>p</i>-values less
-      than 0.0001 are shown.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_all_sequences">
-      <p>These are the same sites as shown by selecting the
-      "Motif Sites + Scanned Sites" button except that all
-      sequences, including those with no sites, are included
-      in the diagram.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_pvalue">
-      <p>This is the combined match <i>p</i>-value.</p>
-      <p>The combined match <i>p</i>-value is defined as the probability that a
-      random sequence (with the same length and conforming to the background) 
-      would have position <i>p</i>-values such that the product is smaller
-      or equal to the value calulated for the sequence under test.</p>
-      <p>The position <i>p</i>-value is defined as the probability that a
-      random sequence (with the same length and conforming to the background)
-      would have a match to the motif under test with a score greater or equal
-      to the largest found in the sequence under test.</p>
-      <p>Hovering your mouse over a motif site in the motif location 
-      block diagram will show its position <i>p</i>-value and other information
-      about the site.</p>
-       
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_motif_location">
-      <p>This diagram shows the location of motif sites.</p>
-      <p>Each block shows the position and strength of a motif
-      site.  The height of a block gives an indication of the 
-      significance of the site as taller blocks are more significant. 
-      The height is calculated to be proportional to the negative 
-      logarithm of the <i>p</i>-value of the site, truncated at 
-      the height for a <i>p</i>-value of 1e-10.</p>
-      <p>For complementable alphabets (like DNA), sites on the 
-      positive strand are shown above the line,
-      sites on the negative strand are shown below.</p>
-      <p>Placing the cursor
-      over a motif site will reveal more information about the site
-      including its position <i>p</i>-value.  (See the help
-      for the <i>p</i>-value column for an explanation of position 
-      <i>p</i>-values.)</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_seq_source">
-      <p>The name of the file of sequences input to MEME.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_psp_source">
-      <p>The position specific priors file used by MEME to find the motifs.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_alph">
-      <p>The alphabet used by the sequences.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_seq_count">
-      <p>The number of sequences provided as input to MEME.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <div class="pop_content" id="pop_alph_name">
-      <p>The name of the alphabet symbol.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_alph_freq">
-      <p>The frequency of the alphabet symbol in the dataset with a pseudocount
-      so it is never zero.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-    <div class="pop_content" id="pop_alph_bg">
-      <p>The frequency of the alphabet symbol as defined by the background model.</p>
-      <div style="float:right; bottom:0px;">[ 
-        <a href="javascript:help_popup()">close</a> ]</div>
-    </div>
-
-    <!-- templates -->
-    <div id="measure_match" class="match"></div>
-    <div class="template pop_block" id="tmpl_block_info">
-      <div>
-        <span class="tvar_logo_pad lflank" style="visibility:hidden;"></span>
-        <span class="tvar_logo"></span>
-      </div>
-      <div class="block_sequence_fragment">
-        <span class="tvar_lflank lflank"></span>
-        <span class="tvar_match match"></span>
-        <span class="tvar_rflank rflank"></span>
-      </div>
-      <table class="block_information">
-        <tr><th>Motif</th><td class="tvar_motif">1</td></tr>
-        <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr>
-        <tr><th>Start</th><td class="tvar_start">23</td></tr>
-        <tr><th>End</th><td class="tvar_end">33</td></tr>
-      </table>
-    </div>
-
-    <div class="template pop_block" id="tmpl_scan_info">
-      <h5>Scanned Site</h5>
-      <div class="tvar_logo"></div>
-      <table class="block_information">
-        <tr><th>Motif</th><td class="tvar_motif">1</td></tr>
-        <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr>
-        <tr><th>Start</th><td class="tvar_start">23</td></tr>
-        <tr><th>End</th><td class="tvar_end">33</td></tr>
-      </table>
-    </div>
-
-    <div class="template box expanded_motif" id="tmpl_motif_expanded">
-      <div style="position: relative; min-height: 20px">
-        <div class="param_box">
-          <span class="param"><span class="tvar_ordinal"></span>.</span>
-        </div>
-        <div class="sym_btn positioned tvar_less" tabindex="0" 
-          title="Show less information.">&#8613;</div>
-        <div class="sym_btn positioned tvar_submit" tabindex="0"
-          title="Submit the motif to another MEME Suite program or download it.">&#8674;</div>
-      </div>
-      <div>
-        <div class="param_box">
-          <span class="param"><i>E</i>-value:</span>
-          <span class="tvar_evalue"></span>
-          <div class="help" data-topic="pop_ev"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Site Count:</span>
-          <span class="tvar_site_count"></span>
-          <div class="help" data-topic="pop_sites"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Width:</span>
-          <span class="tvar_width"></span>
-          <div class="help" data-topic="pop_width"></div>
-        </div>
-      </div>
-      <div class="tabMain base">
-        <div class="tabCenter tvar_logo"></div>
-      </div>
-      <div class="tabArea base">
-        <span class="tvar_tab tab" tabindex="0">Standard</span><span 
-          class="tvar_tab_rc tab middle" tabindex="0">Reverse 
-          Complement</span>
-      </div>
-      <div style="padding: 10px 0">
-        <div class="param_box">
-          <span class="param">Log Likelihood Ratio:</span>
-          <span class="tvar_llr"></span>
-          <div class="help" data-topic="pop_llr"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Information Content:</span>
-          <span class="tvar_ic"></span>
-          <div class="help" data-topic="pop_ic"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Relative Entropy:</span>
-          <span class="tvar_re"></span>
-          <div class="help" data-topic="pop_re"></div>
-        </div>
-        <div class="param_box">
-          <span class="param">Bayes Threshold:</span>
-          <span class="tvar_bt"></span>
-          <div class="help" data-topic="pop_bt"></div>
-        </div>
-      </div>
-      <div class="tvar_sites"></div>
-    </div>
-
-
-    <div class="popup_wrapper">
-      <div class="popup" style="display:none; top: -150px;" id="download">
-        <div>
-          <div style="float:right; ">
-            <div id="outpop_close" class="close" tabindex="0">x</div>
-          </div>
-          <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2>
-          <div style="clear:both"></div>
-        </div>
-          <div style="height:100px">
-            <div style="float:right; width: 30px;">
-              <div id="outpop_prev" class="navarrow" tabindex="0">
-                <span class="inactive">&#8679;</span><span class="active">&#11014;</span>
-              </div>
-              <div id="outpop_num" class="navnum"></div>
-              <div id="outpop_next" class="navarrow" tabindex="0">
-                <span class="inactive">&#8681;</span><span class="active">&#11015;</span>
-              </div>
-            </div>
-            <div id="logo_box" style="height: 100px; margin-right: 40px;">
-              <canvas id="outpop_logo" height="100" width="580"></canvas>
-              <canvas id="outpop_logo_rc" class="logo_rc" height="100" width="580"></canvas>
-            </div>
-          </div>
-          <div>
-            <!-- tabs start -->
-            <div class="tabArea top">
-              <span id="outpop_tab_1" class="tab">Submit Motif</span><span
-                id="outpop_tab_2" class="tab middle">Download Motif</span><span 
-                id="outpop_tab_3" class="tab middle">Download Logo</span>
-            </div>
-            <div class="tabMain top">
-              <!-- Submit to another program -->
-              <div id="outpop_pnl_1">
-                <h4 class="compact">Submit to program</h4>
-                <table id="programs" class="programs">
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td>
-                    <td><label for="submit_tomtom">Tomtom</label></td>
-                    <td><label for="submit_tomtom">Find similar motifs in
-                        published libraries or a library you supply.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td>
-                    <td><label for="submit_fimo">FIMO</label></td>
-                    <td><label for="submit_fimo">Find motif occurrences in
-                        sequence data.</label></td>
-                  </tr>
-                  <tr>
-                    <td><input type="radio" name="program" value="mast" id="submit_mast"></td>
-                    <td><label for="submit_mast">MAST</label></td>
-                    <td><label for="submit_mast">Rank sequences by affinity to
-                        groups of motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td>
-                    <td><label for="submit_gomo">GOMo</label></td>
-                    <td><label for="submit_gomo">Identify possible roles (Gene
-                        Ontology terms) for motifs.</label></td>
-                  </tr>
-                  <tr class="dna_only">
-                    <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td>
-                    <td><label for="submit_spamo">SpaMo</label></td>
-                    <td><label for="submit_spamo">Find other motifs that are
-                        enriched at specific close spacings which might imply the existance of a complex.</label></td>
-                  </tr>
-                </table>
-              </div>
-              <!-- download text format  -->
-              <div id="outpop_pnl_2">
-                <div>
-                  <label for="text_format">Format:</label>
-                  <select id="text_format">
-                    <option value="0">Count Matrix</option>
-                    <option value="1">Probability Matrix</option>
-                    <option value="2">Minimal MEME</option>
-                    <option value="3">FASTA</option>
-                    <option value="4">Raw</option>
-                  </select>
-                </div>
-                <form id="text_form" method="post" action="">
-                  <script>$("text_form").action = site_url + "/utilities/save_generated_file";</script>
-                  <input type="hidden" id="text_name" name="name" value="motif.txt">
-                  <input type="hidden" name="mime_type" value="text/plain">
-                  <textarea id="outpop_text" name="content"
-                    style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" 
-                    rows="8" readonly="readonly" wrap="off"></textarea>
-                </form>
-              </div>
-              <!-- download logo format -->
-              <div id="outpop_pnl_3">
-                <form id="logo_form" method="post" action="">
-                  <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script>
-                  <input type="hidden" name="program" value="MEME"/>
-                  <input type="hidden" id="logo_motifs" name="motifs" value=""/>
-                  <table>
-                    <tr>
-                      <td><label for="logo_format">Format:</label></td>
-                      <td>
-                        <select id="logo_format" name="png">
-                          <option value="1">PNG (for web)</option>
-                          <option value="0">EPS (for publication)</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_rc">Orientation:</label></td>
-                      <td>
-                        <select id="logo_rc" name="rc1">
-                          <option value="0">Normal</option>
-                          <option value="1" id="logo_rc_option">Reverse Complement</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_ssc">Small Sample Correction:</label></td>
-                      <td>
-                        <input type="hidden" id="logo_err" name="errbars" value="0"/>
-                        <select id="logo_ssc" name="ssc">
-                          <option value="0">Off</option>
-                          <option value="1">On</option>
-                        </select>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_width">Width:</label></td>
-                      <td>
-                        <input type="text" id="logo_width" size="4" placeholder="default" name="width"/>&nbsp;cm
-                      </td>
-                    </tr>
-                    <tr>
-                      <td><label for="logo_height">Height:</label></td>
-                      <td>
-                        <input type="text" id="logo_height" size="4" placeholder="default" name="height"/>&nbsp;cm
-                      </td>
-                    </tr>
-                  </table>
-                </form>
-              </div>
-              <!-- Buttons -->
-              <div>
-                <div style="float:left;">
-                  <input type="button" id="outpop_do" value="Submit" />
-                </div>
-                <div style="float:right;">
-                  <input id="outpop_cancel" type="button" value="Cancel" />
-                </div>
-                <div style="clear:both;"></div>
-              </div>
-            </div>
-        </div>
-      </div>
-    </div>
-
-
-
-    <!-- Page starts here -->
-    <div id="top" class="pad1">
-      <div class="prog_logo big">
-        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABGCAYAAACUsCfoAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9wLHAInL7an9JAAAA8eSURBVHja7ZpZbxv3ucZ/s3AZ7qQkypZELZS3WHKiRJbTFnHqOjZcGzCQBf0A7cUB8glOb89dz30vChRp7xK0aZo4TYq6dtKqSew6iuJWpmPJlrVFFCmKI+7LLJw5F81MFZyec5rTILJaP8AAnAty+Pzf933ebeAhHuIhHuIhHmJPo6TpaeGLfimTydhLS0sUCgWazSbVahXDMOh0Ong8HiKRCAMDAxw+fJhHH31UeFDJ/91/bHp62r558ya6rmOaJuvr6+TzeYrFIoZhAOD1epFlmWAwSDqdZnR0lCNHjjA+Ps7+/fuFPUU8k8nYV69epVKpEA6HuXPnDrOzs7RaLbxeL93d3fj9foLBIB6Ph0ajQaVSAUBRFNLpNI888ggHDhzg3Llzwp4g/vbbb9szMzPE43FyuRwffPAB2WyWnp4ehoaGiMVi2LZNvV6n3W7j8/mIRqN4vV4ajQa1Wo2trS0OHTqEaZo89dRTfO973xMeaOKvvfaaffv2bcLhMCsrK/z+979HVVWOHz/O0NAQxWIRVVVRVRW/348oihiGgSiKxGIxurq6CAQCBINB3n//fcbGxiiXyxw7dowXX3yx1Nvbm3igiBcKhY9u3rw5OTMzQzgc5vbt23zwwQfIsszExAS2bZPP55EkiVAoRCQSIRwOI8sy5XKZ7e1tWq0WnU6HTqfD4OAggUAAVVXpdDo0m01GRkb44Q9/KDxQxH/729/as7Oz+Hw+Pv30U37zm9/g9Xrp6emht7eXYDCI3+/H6/UiCALtdhvLsuh0OkiSRCAQQJZl6vU65XKZ1dVV+vv7SSQS5PN5vF4vhUKBgwcP8qMf/WjXyIs7b+7cuWMvLi4iCAL1ep133nkHXdcZHh4mlUoRDofp7+8nHo9jGAaCIBCPx+nr6yOdTtPX14fH40HTNGRZpqenh76+PrLZLMVikYGBARRFwTRN5ubm+PGPf2zvFnF5583c3BzlchlZlrl16xa1Wo2xsTGi0SiDg4OutUzTJBKJIIoiXq+XQCBAIpEgFAphmiaqqlIoFKjVaoyOjhKJRFhfXycajRKNRunp6WFhYYG33nqLQqHwUTKZPP5VE5ecD5cvX7bv37+Poijkcjl++ctfMjo6ytDQEMlkEo/HQ7lcpt1u4/F4kGUZQRDw+Xz09fVx4MABRkZGSKVSdHV10el0KJVK1Ot14vE4kiRRKpVQFIV4PI5t23z66ad0Op2+K1eu/MeuWVxVVUzTRNd17t27RzKZJJFIEI1GEUWRdruNaZqIoogkSYiiiCiK+P1+AoEA0WiUQ4cOCQCbm5vb5XI5Xi6XWVtbw7ZtZFnG7/e7D1YUhWAwSLVaJZvN2v39/cJXHuOLi4t2sVhEEAS2t7eZn59n//79JBIJwuEwlmXRbDbRdR1BEBAEAcuysCwL2/5LmIriX+Wit7c3EY/HSSQSeDweDMPA4/EQCoWwbRvbtgmFQoTDYUqlErlcbnfE7f79+64gbWxs0G63icViRCIRBEHANE0Mw0CSJLxer0vSUfVKpUKxWGRtbc12UmKr1cI0TQD3t4PBoHtwgUAAv99Ps9kkn8/vjrjlcjlkWabdbrO8vEx3dzfhcJhoNEq9XkfTNERRxOfz4fV6sW0bSZJcBS+VSqytrdFqtbh+/bq9sLBALpdje3sbXddd4jutLwh/8WzLslBVdXeI12o1RFFkc3PTLTFjsRixWAxVVbEsC1mWkSTJdVXnMgyDarWKrusUi0X8fj+WZVGtVimXyxiGgW3bblh4PB78fj/tdhvbthFF0a3tv3Liuq4jiiKFQgFZlolEInR3d6MoConEXytLp1Bx0Ol0sG0bXdfRdZ1arYYgCNi2jaZptFot1zOcQ3LSnxMGzsHvCnHH/RqNBtFoFEmSCIfDAAwNDWFZFu12m0ajgaZpWJbl/oDH4/ncoTii5xBz1N+2bTqdDrIs4/P53MxgWRaapu2exQOBgHsAnU6HdrvN5uYmgUCASCRCJBIhkUhgmibNZpNarUaj0XAt71jfET1RFN1YliTJfUa73SaZTLK1tUWtVkPTNKampnaHuFNGyrKM1+t141bTNGq1GrVazS1EIpEI8XjcLWJqtdrnYthNF58pv23beL1eJEly1VzXder1Oq1Wi2AwiK7ru0PcSSs73bBYLBIMBpEkCdM0qVQq6LpOq9UiHA673Vmn08E0TfdyRM85CNM08Xq9bkoMhULugRqGgd/v3z1Xl2X5c24aDodRVZV4PO7W406/raoqtVqNYDCIz+dDURQ3vp3LuXeEz4nlTqdDOBxG13U3TBRF2b0mJRAI0Gg0EAQBTdPw+/2Uy2VXoJzRkkPEifNWq0UgEHCLEsedLcty1X1nzIdCIRRFoVQqUSqVsCyLYDBIPB7fncotlUq5JaWu6xiGgWmabG1tuanINE0EQXAPwSlk6vU6zWaTdruNpmnud3eWsk6fnkwmMU2Tzc1NVFVFURSi0SjpdHp3iB89ehRRFOnt7XWHCNFolFwu58ar08AYhuEWNH6/H4/H8zlL71R4J5XJskwgECAWi5HP51lZWaHVajE8PEw8Hufw4cO7Q3zfvn0C4E5MNU2jq6uLarVKPp//nPA5hYgzcYlEIoRCIfcQHLd3SDvEPR4PHo+HfD5PPp9HEARGRkYIhUIMDQ0Ju0Ic4NixY3g8Hnp7e8lms8RiMcLhMNlsFk3TXHW3bZtgMOjmfScEvF6vW8s7qczxgGazSSAQ4M9//jOqqlKpVHj88cfx+XyMjY3t7ujp1KlTQrlcdicupVKJkZER1tbWuHfvHqqqEolEiMVitNtt6vW6q+iNRoNms4kkSfh8PtfC0WgURVHo7+9nc3OTjY0N3n33XQYGBkilUiSTSU6ePCnsKnGA559/nkqlwtGjR8nn8/j9fh5//HEsy+LWrVvMz8+j6zqhUAifz4dhGG7z0mq1UFUVXdeJRCIEg0F32loqlbh37x53796lq6sLRVGIRCJMTEzs2pT1c8Qfe+wxYWpqyv1j2WyWVCpFIpGgUqkwNzfHnTt33JTnDCUlSaK7u5v+/n66u7vxeDxun16r1SgUCly/fp3bt29z+vRpBgcHqdVqRKPRB2uh8LOf/cyemZlhYWGBYDBIJBIBoFgs0mw2CYfDxONxfD4fg4ODros7vXWhUKDT6bg5/v3332dlZYWhoSHS6TSnTp1i3759VKtVzpw5w1c9dvpfNymvvPKKff36dbLZLIqiuBVWs9mk0WhgWZbbn4fDYURRRNM0AoEAvb29+Hw+Go0Gly9fZmNjg4mJCcbGxti/f787mJyfn6darTI5OcmJEyeEB4J4sVj8wfT09L/Pzs6SzWbdpWEikXBJGoZBs9kkGo0iyzKmabrLhtXVVTKZDJubm5w9e5YjR44wMDDAd7/7XWF2dtZeXFzkyJEj7pZm//79pFIpenp6vhIP+D8f8NZbb9nr6+ssLy+ztbXl1t5er9fdhxeLRSRJoquri0qlQiaTYXt7m0gkwpkzZ5BlmbGxMV544QX3eR9//LE9Pz/PsWPHuHHjBouLi0iSxMDAAMePH2dqakrYVeIAKysr9u3bt1leXnZn65qmoeu6W9AYhkGj0aBYLGKaJocOHeLRRx8lkUgwOTnpjp4d5HI5++OPP6ZcLjM+Ps61a9dYWFig2Wzi9Xp5/vnnOX36tLCrxHfi1q1b9tLSkuv+9XrdbTEVRSEWi5FMJhkdHWV4eJiDBw/+j8/Y2tr6+WuvvfYdwzBIpVJIkoSqqszPz1Ov17lw4QJf+9rXziYSiau7TvxvoVQqpUul0n2n2/oibz+899579k9/+lPC4TCnTp3i61//Orlcjp/85CdomsbTTz/NiRMn/pvH/CMotrQfyF/GD8Xj8aX/7yEePnx4dnx8fPJ3v/sdiqIwODjI5OSkcOPGDfvNN9/kypUr5PN5MpmMPT4+/qWQ71Z835fZZSSTyeMrKyt2vV7n7t27vPrqq1y7ds1+8sknhT/+8Y/2pUuXuHnzJs1mk6WlJTudTn8p5EUeAAwPDwvPPfccBw4cYHV1lc+KJ3t0dPTVixcvcvDgQebn53n55ZeZmZn5h1fLalv/twfqTaRMJmP/4he/YH19nSNHjnDhwgVisRj37t3jnXfeYWFhgQMHDnD+/HmeeuopYc9b3MH4+LjwrW99C0EQuHXrFtPT09RqNfr7+zlx4gTpdJqNjQ3efPNN3njjDbtYLP5gV1X9y8bly5ft119/nUqlwsmTJzl9+jQej4ePPvqITz75hLW1NYLBIJOTk5w7d46+vr4vzEN+EImfO3dOuHr1qv3666/z3nvvoWkaZ8+e5YknnnBXU5qmcfPmTQzDYG1tzR4cHBT2vMUdTE9P25cuXaJQKDA5OcmFCxfQdZ3Z2VkWFhbY2NhAURRSqRTPPvssY2Njwp62uINvfvObwp/+9Cf7V7/6FTdu3KDT6XD+/HmmpqbcoaaqqszOzmIYxhfK9Q80cYCJiQlhbm7OFgSBubk5vF4vzzzzDBMTE+7CMRgMsrCwwEsvvcS1a9fsb3zjG8KedvWd+OSTT+y3336bubk5JicnOXnyJJZl8eGHH7K2tkahUKDRaLBv3z4uXrzI2bNnhT1tcQdHjx4VMpmM3el0WFxcJBQKMTU1xbFjx6hWqwC0221WVlb49a9/zY0bN+wnn3xS2BN5/O/J88899xzDw8NkMhnm5uaIx+M8/fTT9PT0YFkWg4ODrK6u8sorrzA/P2/veVffidXVVfvdd99lenqa8+fPMzo6iqZp/OEPf2BhYYFWq4Usy4yMjHDx4kX+luXlvUh8aGhImJmZsS3L4vr165imSSqVYt++fbTbbWq1GtVqlWq1yt27d7l//749Ojoq7HniAFNTU8LS0pJdLpe5e/cu6+vrRCIRhoeHqVarrK6uous66+vrZLNZSqVS+rP2eW8TB0in00I2m3XVHqCvr49YLEYikXBfRiqXy+Ryufs7Q1tkj6O/v1/49re/zTPPPIMgCMzPz7sraJ/Ph9/vd/d3pVIp/U9hcQdOnX7p0iU7k8kgiqK76lIUxX19dKerC/wTYXt7+8zm5uaV5eVlNjY2iMfj+P1+hoeH6enpmd35evg/FXEHm1uF7ZXltXgg6EcSPSR7u/+zO9H1ff6VsFWq/pyHeIiHeIh/FfwXjVDdIW9O2PAAAAAASUVORK5CYII=" alt="MEME Logo">
-        <h1>MEME</h1>
-        <h2>Multiple Em for Motif Elicitation</h2>
-      </div>
-      <p>
-        For further information on how to interpret these results or to get a 
-        copy of the MEME software please access 
-        <a href="http://meme-suite.org/">http://meme-suite.org</a>. 
-      </p>
-      <p>If you use MEME in your research, please cite the following paper:<br />
-        <span class="citation">
-          Timothy L. Bailey and Charles Elkan, 
-          "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", 
-          <em>Proceedings of the Second International Conference on Intelligent Systems 
-          for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. 
-          <a href="http://meme-suite.org/doc/ismb94.pdf">[pdf]</a> 
-        </span>
-      </p>
-    </div>
-    <!-- navigation -->
-    <div class="pad2">
-      <a class="jump" href="#motifs_sec">Discovered Motifs</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#sites_sec">Motif Locations</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#inputs_sec">Inputs &amp; Settings</a>
-      &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a class="jump" href="#info_sec">Program information</a>
-    </div>
-    <!-- alert the user when their browser is not up to the task -->
-    <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript>
-    <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1>
-    <script>
-      if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block";
-    </script>
-    <h2 class="mainh pad2" id="motifs_sec">Discovered Motifs</h2>
-    <div id="motifs" class="box">
-      <p>Please wait... Loading...</p>
-      <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p>
-    </div>
-    <h2 class="mainh pad2" id="sites_sec">Motif Locations</h2>
-    <div id="blocks" class="box">
-      <p>Please wait... Loading...</p>
-      <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p>
-    </div>
-    <h2 class="mainh pad2" id="inputs_sec">Inputs &amp; Settings</h2>
-    <div class="box">
-      <h4>Sequences</h4>
-      <table id="seq_info" class="inputs">
-        <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th>
-          <th class="col_psp">PSP Source <div class="help" data-topic="pop_psp_source"></div></th>
-          <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th>
-          <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th>
-        </tr>
-        <tr>
-          <td id="ins_seq_source"></td>
-          <td id="ins_seq_psp" class="col_psp"></td>
-          <td id="ins_seq_alphabet"></td>
-          <td id="ins_seq_count"></td>
-        </tr>
-      </table>
-      <script>
-      {
-        var db = data.sequence_db;
-        $("ins_seq_source").innerHTML = db.source;
-        $("ins_seq_alphabet").innerHTML = meme_alphabet.get_alphabet_name();
-        $("ins_seq_count").innerHTML = db.sequences.length;
-        if (db.psp) {
-          $("ins_seq_psp").innerHTML = db.psp;
-        }
-        toggle_class($("seq_info"), "hide_psp", !(db.psp));
-      }
-      </script>
-      <h4>Background</h4>
-      <span id="alpha_bg"></span>
-      <script>
-      {
-        $("alpha_bg").appendChild(make_alpha_bg_table(meme_alphabet, data.sequence_db.freqs));
-      }
-      </script>
-      <h4>Other Settings</h4>
-      <table id="tbl_settings" class="inputs hide_advanced">
-        <tr>
-          <th>Motif Site Distribution</th>
-          <td id="opt_mod">
-            <span class="mod_zoops">ZOOPS: Zero or one site per sequence</span>
-            <span class="mod_oops">OOPS: Exactly one site per sequence</span>
-            <span class="mod_anr">ANR: Any number of sites per sequence</span>
-          </td>
-        </tr>
-        <tr>
-          <th>Site Strand Handling</th>
-          <td id="opt_strand">
-            <span class="strand_none">This alphabet only has one strand</span>
-            <span class="strand_given">Sites must be on the given strand</span>
-            <span class="strand_both">Sites may be on either strand</span>
-          </td>
-        </tr>
-        <tr>
-          <th>Maximum Number of Motifs</th>
-          <td id="opt_nmotifs"></td>
-        </tr>
-        <tr>
-          <th>Motif E-value Threshold</th>
-          <td id="opt_evt"></td>
-        </tr>
-        <tr>
-          <th>Minimum Motif Width</th>
-          <td id="opt_minw"></td>
-        </tr>
-        <tr>
-          <th>Maximum Motif Width</th>
-          <td id="opt_maxw"></td>
-        </tr>
-        <tr>
-          <th>Minimum Sites per Motif</th>
-          <td id="opt_minsites"></td>
-        </tr>
-        <tr>
-          <th>Maximum Sites per Motif</th>
-          <td id="opt_maxsites"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Bias on Number of Sites</th>
-          <td id="opt_wnsites"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Sequence Prior</th>
-          <td id="opt_prior">
-            <span class="prior_dirichlet">Simple Dirichlet</span>
-            <span class="prior_dmix">Dirichlets Mix</span>
-            <span class="prior_mega">Mega-weight Dirichlets Mix</span>
-            <span class="prior_megap">Mega-weight Dirichlets Mix Plus</span>
-            <span class="prior_addone">Add One</span>
-          </td>
-        </tr>
-        <tr class="advanced">
-          <th>Sequence Prior Strength</th>
-          <td id="opt_b"></td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Starting Point Source</th>
-          <td id="opt_substring">
-            <span class="substring_on">From substrings in input sequences</span>
-            <span class="substring_off">From strings on command line (-cons)</span>
-          </td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Starting Point Map Type</th>
-          <td id="opt_spmap">
-            <span class="spmap_uni">Uniform</span>
-            <span class="spmap_pam">Point Accepted Mutation</span>
-          </td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Starting Point Fuzz</th>
-          <td id="opt_spfuzz"></td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Maximum Iterations</th>
-          <td id="opt_maxiter"></td>
-        </tr>
-        <tr class="advanced">
-          <th>EM Improvement Threshold</th>
-          <td id="opt_distance"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Trim Gap Open Cost</th>
-          <td id="opt_wg"></td>
-        </tr>
-        <tr class="advanced">
-          <th>Trim Gap Extend Cost</th>
-          <td id="opt_ws"></td>
-        </tr>
-        <tr class="advanced">
-          <th>End Gap Treatment</th>
-          <td id="opt_noendgaps">
-            <span class="noendgaps_on">No cost</span>
-            <span class="noendgaps_off">Same cost as other gaps</span>
-          </td>
-        </tr>
-        <tr>
-          <td colspan="2" style="text-align: center">
-            <a href="javascript:toggle_class(document.getElementById('tbl_settings'), 'hide_advanced')">
-              <span class="show_more">Show Advanced Settings</span>
-              <span class="show_less">Hide Advanced Settings</span>
-            </a>
-          </td>
-        </tr>
-      </table>
-      <script>
-      {
-        $("opt_mod").className = data.options.mod;
-        $("opt_strand").className = (meme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none");
-        $("opt_nmotifs").textContent = data.options.nmotifs;
-        $("opt_evt").textContent = (typeof data.options.evt === "number" ? data.options.evt : "no limit");
-        $("opt_minw").textContent = data.options.minw;
-        $("opt_maxw").textContent = data.options.maxw;
-        $("opt_minsites").textContent = data.options.minsites;
-        $("opt_maxsites").textContent = data.options.maxsites;
-        $("opt_wnsites").textContent = data.options.wnsites;
-        $("opt_spmap").className = data.options.spmap;
-        $("opt_spfuzz").textContent = data.options.spfuzz;
-        $("opt_prior").className = data.options.prior;
-        $("opt_b").textContent = data.options.b;
-        $("opt_maxiter").textContent = data.options.maxiter;
-        $("opt_distance").textContent = data.options.distance;
-        $("opt_wg").textContent = data.options.wg;
-        $("opt_ws").textContent = data.options.ws;
-        $("opt_noendgaps").className = (data.options.noendgaps ? "on" : "off");
-        $("opt_substring").className = (data.options.substring ? "on" : "off");
-      }
-      </script>
-    </div>
-    <!-- list information on this program -->
-    <div id="info_sec" class="bar">
-      <div class="subsection">
-        <h5 id="version">MEME version</h5>
-        <span id="ins_version"></span> 
-        (Release date: <span id="ins_release"></span>)<br>
-      </div>
-      <script>
-        $("ins_version").innerHTML = data["version"];
-        $("ins_release").innerHTML = data["release"];
-      </script>
-      <div class="subsection">
-        <h5 id="reference">Reference</h5>
-        <span class="citation">
-          Timothy L. Bailey and Charles Elkan, 
-          "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", 
-          <em>Proceedings of the Second International Conference on Intelligent Systems 
-          for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. 
-        </span>
-      </div>
-      <div class="subsection">
-        <h5 id="command">Command line</h5>
-        <textarea id="cmd" rows="5" style="width:100%;" readonly="readonly">
-        </textarea>
-        <script>$("cmd").value = data["cmd"].join(" ");</script>
-      </div>
-    </div>
-    
-  </body>
-</html>
--- a/test-data/meme_output_test2.txt	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/meme_output_test2.txt	Wed Dec 11 18:05:15 2019 -0500
@@ -1,88 +1,36 @@
 ********************************************************************************
 MEME - Motif discovery tool
-********************************************************************************
-MEME version 4.12.0 (Release date: Tue Jun 27 16:22:50 2017 -0700)
-
-For further information on how to interpret these results or to get
-a copy of the MEME software please access http://meme-suite.org .
-
-This file may be used as input to the MAST algorithm for searching
-sequence databases for matches to groups of motifs.  MAST is available
-for interactive use and downloading at http://meme-suite.org .
-********************************************************************************
-
-
-********************************************************************************
+MEME version 5.0.5 (Release date: Mon Mar 18 20:12:19 2019 -0700)
 REFERENCE
-********************************************************************************
-If you use this program in your research, please cite:
-
-Timothy L. Bailey and Charles Elkan,
-"Fitting a mixture model by expectation maximization to discover
-motifs in biopolymers", Proceedings of the Second International
-Conference on Intelligent Systems for Molecular Biology, pp. 28-36,
-AAAI Press, Menlo Park, California, 1994.
-********************************************************************************
-
-
-********************************************************************************
 TRAINING SET
-********************************************************************************
-DATAFILE= Galaxy_FASTA_Input
+PRIMARY SEQUENCES= Galaxy_FASTA_Input
+CONTROL SEQUENCES= --none--
 ALPHABET= ACGT
 Sequence name            Weight Length  Sequence name            Weight Length  
 -------------            ------ ------  -------------            ------ ------  
 chr21_19617074_19617124_ 1.0000     50  chr21_26934381_26934431_ 1.0000     50  
-chr21_28217753_28217803_ 1.0000     50  chr21_31710037_31710087_ 1.0000     50  
-chr21_31744582_31744632_ 1.0000     50  chr21_31768316_31768366_ 1.0000     50  
-chr21_31914206_31914256_ 1.0000     50  chr21_31933633_31933683_ 1.0000     50  
-chr21_31962741_31962791_ 1.0000     50  chr21_31964683_31964733_ 1.0000     50  
-chr21_31973364_31973414_ 1.0000     50  chr21_31992870_31992920_ 1.0000     50  
-chr21_32185595_32185645_ 1.0000     50  chr21_32202076_32202126_ 1.0000     50  
-chr21_32253899_32253949_ 1.0000     50  chr21_32410820_32410870_ 1.0000     50  
-chr21_36411748_36411798_ 1.0000     50  chr21_37838750_37838800_ 1.0000     50  
-chr21_45705687_45705737_ 1.0000     50  chr21_45971413_45971463_ 1.0000     50  
-chr21_45978668_45978718_ 1.0000     50  chr21_45993530_45993580_ 1.0000     50  
-chr21_46020421_46020471_ 1.0000     50  chr21_46031920_46031970_ 1.0000     50  
-chr21_46046964_46047014_ 1.0000     50  chr21_46057197_46057247_ 1.0000     50  
-chr21_46086869_46086919_ 1.0000     50  chr21_46102103_46102153_ 1.0000     50  
-chr21_47517957_47518007_ 1.0000     50  chr21_47575506_47575556_ 1.0000     50  
-********************************************************************************
-
-********************************************************************************
 COMMAND LINE SUMMARY
-********************************************************************************
-This information can also be useful in the event you wish to report a
-problem with the MEME software.
-
-command: meme meme_input_1.fasta -o meme_test2_out -nostatus -maxsize 1000000 -sf Galaxy_FASTA_Input -dna -mod zoops -nmotifs 1 -wnsites 0.8 -minw 8 -maxw 50 -wg 11 -ws 1 -maxiter 50 -distance 0.001 -prior dirichlet -b 0.01 -plib prior30.plib -spmap uni -spfuzz 0.5 
-
 model:  mod=         zoops    nmotifs=         1    evt=           inf
-object function=  E-value of product of p-values
+objective function:           em=       E-value of product of p-values
+                              starts=   E-value of product of p-values
+strands: +
 width:  minw=            8    maxw=           50
-width:  wg=             11    ws=              1    endgaps=       yes
 nsites: minsites=        2    maxsites=       30    wnsites=       0.8
 theta:  spmap=         uni    spfuzz=        0.5
-global: substring=     yes    branching=      no    wbranch=        no
 em:     prior=   dirichlet    b=            0.01    maxiter=        50
         distance=    0.001
-data:   n=            1500    N=              30    shuffle=        -1
-strands: +
-sample: seed=            0    ctfrac=         -1    maxwords=       -1
-Dirichlet mixture priors file: prior30.plib
+trim:   wg=             11    ws=              1    endgaps=       yes
+data:   n=            1500    N=              30
+sample: seed=            0    hsfrac=          0
+        searchsize=   1500    norand=         no    csites=       1000
+Dirichlet mixture priors file:
 Letter frequencies in dataset:
 A 0.294 C 0.231 G 0.257 T 0.217 
-Background letter frequencies (from dataset with add-one prior applied):
+Background letter frequencies (from file dataset with add-one prior applied):
 A 0.294 C 0.231 G 0.257 T 0.217 
-********************************************************************************
-
-
-********************************************************************************
+Background model order: 0
 MOTIF GGSRTATAAAA MEME-1	width =  11  sites =  30  llr = 254  E-value = 5.1e-040
-********************************************************************************
---------------------------------------------------------------------------------
 	Motif GGSRTATAAAA MEME-1 Description
---------------------------------------------------------------------------------
 Simplified        A  3313:9:a798
 pos.-specific     C  1:3::1:::1:
 probability       G  6756::::::2
@@ -103,124 +51,17 @@
 Multilevel           GGGGTATAAAA
 consensus            AACA    T  
 sequence                        
-                                
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGSRTATAAAA MEME-1 sites sorted by position p-value
---------------------------------------------------------------------------------
 Sequence name             Start   P-value               Site  
--------------             ----- ---------            -----------
 chr21_46046964_46047014_     13  4.51e-07 AAGGCCAGGA GGGGTATAAAA GCCTGAGAGC
-chr21_46031920_46031970_     16  2.22e-06 ATACCCAGGG AGGGTATAAAA CCTCAGCAGC
-chr21_32202076_32202126_     14  2.74e-06 CCACCAGCTT GAGGTATAAAA AGCCCTGTAC
-chr21_46057197_46057247_     37  4.86e-06 ACAGGCCCTG GGCATATAAAA GCC       
-chr21_45993530_45993580_      8  4.86e-06    CCAAGGA GGAGTATAAAA GCCCCACAAA
-chr21_45971413_45971463_     10  4.86e-06  CAGGCCCTG GGCATATAAAA GCCCCAGCAG
-chr21_31964683_31964733_     14  4.86e-06 GATTCACTGA GGCATATAAAA GGCCCTCTGC
-chr21_47517957_47518007_     33  6.48e-06 CCGGCGGGGC GGGGTATAAAG GGGGCGG   
-chr21_45978668_45978718_      5  6.48e-06       CAGA GGGGTATAAAG GTTCCGACCA
-chr21_32185595_32185645_     19  6.48e-06 CACCAGAGCT GGGATATATAA AGAAGGTTCT
-chr21_32410820_32410870_     22  1.38e-05 AATCACTGAG GATGTATAAAA GTCCCAGGGA
-chr21_31992870_31992920_     17  1.38e-05 CACTATTGAA GATGTATAAAA TTTCATTTGC
-chr21_19617074_19617124_     40  1.41e-05 CCTCGGGACG TGGGTATATAA           
-chr21_31914206_31914256_     16  1.61e-05 CCCACTACTT AGAGTATAAAA TCATTCTGAG
-chr21_46020421_46020471_      3  1.95e-05         GA GACATATAAAA GCCAACATCC
-chr21_32253899_32253949_     18  1.95e-05 CCCACCAGCA AGGATATATAA AAGCTCAGGA
-chr21_45705687_45705737_     38  2.16e-05 CGTGGTCGCG GGGGTATAACA GC        
-chr21_47575506_47575556_     31  3.04e-05 GCTGCCGGTG AGCGTATAAAG GCCCTGGCG 
-chr21_31744582_31744632_     13  3.04e-05 CAGGTCTAAG AGCATATATAA CTTGGAGTCC
-chr21_31768316_31768366_      1  3.67e-05          . AACGTATATAA ATGGTCCTGT
-chr21_26934381_26934431_     28  3.93e-05 AGTCACAAGT GAGTTATAAAA GGGTCGCACG
-chr21_31933633_31933683_      5  5.65e-05       TCAG AGTATATATAA ATGTTCCTGT
-chr21_31710037_31710087_     15  6.24e-05 CCCAGGTTTC TGAGTATATAA TCGCCGCACC
-chr21_36411748_36411798_     23  7.15e-05 AGTTTCAGTT GGCATCtaaaa attatataac
-chr21_46102103_46102153_     37  1.39e-04 TGCCTGGGTC CAGGTATAAAG GCT       
-chr21_46086869_46086919_     38  1.39e-04 TGCCTGGGCC CAGGTATAAAG GC        
-chr21_37838750_37838800_      3  4.81e-04         ga tggttttataa ggggcctcac
-chr21_31962741_31962791_     14  8.57e-04 TATAACTCAG GTTGGATAAAA TAATTTGTAC
-chr21_31973364_31973414_      8  1.47e-03    aaactta aaactctataa acttaaaact
-chr21_28217753_28217803_     27  2.64e-03 GGTGGGGGTG GGGGTTTCACT GGTCCACTAT
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGSRTATAAAA MEME-1 block diagrams
---------------------------------------------------------------------------------
 SEQUENCE NAME            POSITION P-VALUE  MOTIF DIAGRAM
 -------------            ----------------  -------------
 chr21_46046964_46047014_          4.5e-07  12_[+1]_27
-chr21_46031920_46031970_          2.2e-06  15_[+1]_24
-chr21_32202076_32202126_          2.7e-06  13_[+1]_26
-chr21_46057197_46057247_          4.9e-06  36_[+1]_3
-chr21_45993530_45993580_          4.9e-06  7_[+1]_32
-chr21_45971413_45971463_          4.9e-06  9_[+1]_30
-chr21_31964683_31964733_          4.9e-06  13_[+1]_26
-chr21_47517957_47518007_          6.5e-06  32_[+1]_7
-chr21_45978668_45978718_          6.5e-06  4_[+1]_35
-chr21_32185595_32185645_          6.5e-06  18_[+1]_21
-chr21_32410820_32410870_          1.4e-05  21_[+1]_18
-chr21_31992870_31992920_          1.4e-05  16_[+1]_23
-chr21_19617074_19617124_          1.4e-05  39_[+1]
-chr21_31914206_31914256_          1.6e-05  15_[+1]_24
-chr21_46020421_46020471_          1.9e-05  2_[+1]_37
-chr21_32253899_32253949_          1.9e-05  17_[+1]_22
-chr21_45705687_45705737_          2.2e-05  37_[+1]_2
-chr21_47575506_47575556_            3e-05  30_[+1]_9
-chr21_31744582_31744632_            3e-05  12_[+1]_27
-chr21_31768316_31768366_          3.7e-05  [+1]_39
-chr21_26934381_26934431_          3.9e-05  27_[+1]_12
-chr21_31933633_31933683_          5.6e-05  4_[+1]_35
-chr21_31710037_31710087_          6.2e-05  14_[+1]_25
-chr21_36411748_36411798_          7.1e-05  22_[+1]_17
-chr21_46102103_46102153_          0.00014  36_[+1]_3
-chr21_46086869_46086919_          0.00014  37_[+1]_2
-chr21_37838750_37838800_          0.00048  2_[+1]_37
-chr21_31962741_31962791_          0.00086  13_[+1]_26
-chr21_31973364_31973414_           0.0015  7_[+1]_32
-chr21_28217753_28217803_           0.0026  26_[+1]_13
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGSRTATAAAA MEME-1 in BLOCKS format
---------------------------------------------------------------------------------
 BL   MOTIF GGSRTATAAAA width=11 seqs=30
 chr21_46046964_46047014_ (   13) GGGGTATAAAA  1 
-chr21_46031920_46031970_ (   16) AGGGTATAAAA  1 
-chr21_32202076_32202126_ (   14) GAGGTATAAAA  1 
-chr21_46057197_46057247_ (   37) GGCATATAAAA  1 
-chr21_45993530_45993580_ (    8) GGAGTATAAAA  1 
-chr21_45971413_45971463_ (   10) GGCATATAAAA  1 
-chr21_31964683_31964733_ (   14) GGCATATAAAA  1 
-chr21_47517957_47518007_ (   33) GGGGTATAAAG  1 
-chr21_45978668_45978718_ (    5) GGGGTATAAAG  1 
-chr21_32185595_32185645_ (   19) GGGATATATAA  1 
-chr21_32410820_32410870_ (   22) GATGTATAAAA  1 
-chr21_31992870_31992920_ (   17) GATGTATAAAA  1 
-chr21_19617074_19617124_ (   40) TGGGTATATAA  1 
-chr21_31914206_31914256_ (   16) AGAGTATAAAA  1 
-chr21_46020421_46020471_ (    3) GACATATAAAA  1 
-chr21_32253899_32253949_ (   18) AGGATATATAA  1 
-chr21_45705687_45705737_ (   38) GGGGTATAACA  1 
-chr21_47575506_47575556_ (   31) AGCGTATAAAG  1 
-chr21_31744582_31744632_ (   13) AGCATATATAA  1 
-chr21_31768316_31768366_ (    1) AACGTATATAA  1 
-chr21_26934381_26934431_ (   28) GAGTTATAAAA  1 
-chr21_31933633_31933683_ (    5) AGTATATATAA  1 
-chr21_31710037_31710087_ (   15) TGAGTATATAA  1 
-chr21_36411748_36411798_ (   23) GGCATCTAAAA  1 
-chr21_46102103_46102153_ (   37) CAGGTATAAAG  1 
-chr21_46086869_46086919_ (   38) CAGGTATAAAG  1 
-chr21_37838750_37838800_ (    3) TGGTTTTATAA  1 
-chr21_31962741_31962791_ (   14) GTTGGATAAAA  1 
-chr21_31973364_31973414_ (    8) AAACTCTATAA  1 
-chr21_28217753_28217803_ (   27) GGGGTTTCACT  1 
-//
-
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGSRTATAAAA MEME-1 position-specific scoring matrix
---------------------------------------------------------------------------------
 log-odds matrix: alength= 4 w= 11 n= 1200 bayes= 5.2854 E= 5.1e-040 
    -14   -179    114   -112 
      3  -1155    137   -270 
@@ -233,87 +74,13 @@
    125  -1155  -1155     46 
    167   -179  -1155  -1155 
    144  -1155    -63   -270 
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGSRTATAAAA MEME-1 position-specific probability matrix
---------------------------------------------------------------------------------
 letter-probability matrix: alength= 4 w= 11 nsites= 30 E= 5.1e-040 
  0.266667  0.066667  0.566667  0.100000 
- 0.300000  0.000000  0.666667  0.033333 
- 0.133333  0.266667  0.466667  0.133333 
- 0.300000  0.033333  0.600000  0.066667 
- 0.000000  0.000000  0.033333  0.966667 
- 0.866667  0.066667  0.000000  0.066667 
- 0.000000  0.000000  0.000000  1.000000 
- 0.966667  0.033333  0.000000  0.000000 
- 0.700000  0.000000  0.000000  0.300000 
- 0.933333  0.066667  0.000000  0.000000 
- 0.800000  0.000000  0.166667  0.033333 
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
 	Motif GGSRTATAAAA MEME-1 regular expression
---------------------------------------------------------------------------------
 [GA][GA][GC][GA]TATA[AT]AA
---------------------------------------------------------------------------------
-
-
-
-
-Time  0.38 secs.
-
-********************************************************************************
-
-
-********************************************************************************
 SUMMARY OF MOTIFS
-********************************************************************************
-
---------------------------------------------------------------------------------
 	Combined block diagrams: non-overlapping sites with p-value < 0.0001
---------------------------------------------------------------------------------
 SEQUENCE NAME            COMBINED P-VALUE  MOTIF DIAGRAM
--------------            ----------------  -------------
 chr21_19617074_19617124_         5.63e-04  39_[+1(1.41e-05)]
-chr21_26934381_26934431_         1.57e-03  27_[+1(3.93e-05)]_12
-chr21_28217753_28217803_         1.00e-01  50
-chr21_31710037_31710087_         2.49e-03  14_[+1(6.24e-05)]_25
-chr21_31744582_31744632_         1.22e-03  12_[+1(3.04e-05)]_27
-chr21_31768316_31768366_         1.47e-03  [+1(3.67e-05)]_39
-chr21_31914206_31914256_         6.45e-04  15_[+1(1.61e-05)]_24
-chr21_31933633_31933683_         2.26e-03  4_[+1(5.65e-05)]_35
-chr21_31962741_31962791_         3.37e-02  50
-chr21_31964683_31964733_         1.95e-04  13_[+1(4.86e-06)]_26
-chr21_31973364_31973414_         5.73e-02  50
-chr21_31992870_31992920_         5.52e-04  16_[+1(1.38e-05)]_23
-chr21_32185595_32185645_         2.59e-04  18_[+1(6.48e-06)]_21
-chr21_32202076_32202126_         1.10e-04  13_[+1(2.74e-06)]_26
-chr21_32253899_32253949_         7.78e-04  17_[+1(1.95e-05)]_22
-chr21_32410820_32410870_         5.52e-04  21_[+1(1.38e-05)]_18
-chr21_36411748_36411798_         2.85e-03  22_[+1(7.15e-05)]_17
-chr21_37838750_37838800_         1.90e-02  50
-chr21_45705687_45705737_         8.63e-04  37_[+1(2.16e-05)]_2
-chr21_45971413_45971463_         1.95e-04  9_[+1(4.86e-06)]_30
-chr21_45978668_45978718_         2.59e-04  4_[+1(6.48e-06)]_35
-chr21_45993530_45993580_         1.95e-04  7_[+1(4.86e-06)]_32
-chr21_46020421_46020471_         7.78e-04  2_[+1(1.95e-05)]_37
-chr21_46031920_46031970_         8.89e-05  15_[+1(2.22e-06)]_24
-chr21_46046964_46047014_         1.80e-05  12_[+1(4.51e-07)]_27
-chr21_46057197_46057247_         1.95e-04  36_[+1(4.86e-06)]_3
-chr21_46086869_46086919_         5.54e-03  50
-chr21_46102103_46102153_         5.54e-03  50
-chr21_47517957_47518007_         2.59e-04  32_[+1(6.48e-06)]_7
-chr21_47575506_47575556_         1.22e-03  30_[+1(3.04e-05)]_9
---------------------------------------------------------------------------------
-
-********************************************************************************
-
-
-********************************************************************************
 Stopped because requested number of motifs (1) found.
-********************************************************************************
-
-CPU: ThinkPad-T450s
-
-********************************************************************************
--- a/test-data/meme_output_test2.xml	Thu May 17 14:10:48 2018 -0400
+++ b/test-data/meme_output_test2.xml	Wed Dec 11 18:05:15 2019 -0500
@@ -10,975 +10,73 @@
 <!ATTLIST MEME 
   version CDATA #REQUIRED
   release CDATA #REQUIRED
->
 <!-- Training-set elements -->
 <!ELEMENT training_set (alphabet, ambigs, sequence*, letter_frequencies)>
-<!ATTLIST training_set datafile CDATA #REQUIRED length CDATA #REQUIRED>
+<!ATTLIST training_set primary_sequences CDATA #REQUIRED primary_count CDATA #REQUIRED primary_positions CDATA #REQUIRED
+  control_sequences CDATA "" control_count CDATA "" control_positions CDATA "">
 <!ELEMENT alphabet (letter*)>
 <!ATTLIST alphabet name CDATA #REQUIRED>
-<!ELEMENT ambigs (letter*)>
-<!ELEMENT letter EMPTY>
-<!ATTLIST letter id ID #REQUIRED>
-<!ATTLIST letter symbol CDATA #REQUIRED>
-<!ATTLIST letter equals CDATA #IMPLIED>
-<!ATTLIST letter aliases CDATA #IMPLIED>
-<!ATTLIST letter complement CDATA #IMPLIED>
-<!ATTLIST letter name CDATA #IMPLIED>
-<!ATTLIST letter colour CDATA #IMPLIED>
-<!ELEMENT sequence EMPTY>
-<!ATTLIST sequence id ID #REQUIRED
-                   name CDATA #REQUIRED
-                   length CDATA #REQUIRED
-                   weight CDATA #REQUIRED
->
 <!ELEMENT letter_frequencies (alphabet_array)>
-
 <!-- Model elements -->
 <!ELEMENT model (
   command_line,
   host,
   type,
   nmotifs,
-  evalue_threshold,
-  object_function,
-  spfun,
-  min_width,
-  max_width,
-  wg,
-  ws,
-  endgaps,
-  minsites,
-  maxsites,
-  wnsites,
-  spmap,
-  spfuzz,
-  prior,
-  beta,
-  maxiter,
-  distance,
-  num_sequences,
-  num_positions,
-  seed,
-  hsfrac,
-  maxwords,
-  maxsize,
-  csites,
-  strands,
-  priors_file,
-  reason_for_stopping,
-  back_order,
-  background_frequencies
 )>
 <!ELEMENT command_line (#PCDATA)*>
-<!ELEMENT host (#PCDATA)*>
-<!ELEMENT type (#PCDATA)*>
-<!ELEMENT nmotifs (#PCDATA)*>
-<!ELEMENT evalue_threshold (#PCDATA)*>
-<!ELEMENT object_function (#PCDATA)*>
-<!ELEMENT spfun (#PCDATA)*>
-<!ELEMENT min_width (#PCDATA)*>
-<!ELEMENT max_width (#PCDATA)*>
-<!ELEMENT wg (#PCDATA)*>
-<!ELEMENT ws (#PCDATA)*>
-<!ELEMENT endgaps (#PCDATA)*>
-<!ELEMENT minsites (#PCDATA)*>
-<!ELEMENT maxsites (#PCDATA)*>
-<!ELEMENT wnsites (#PCDATA)*>
-<!ELEMENT spmap (#PCDATA)*>
-<!ELEMENT spfuzz (#PCDATA)*>
-<!ELEMENT prior (#PCDATA)*>
-<!ELEMENT beta (#PCDATA)*>
-<!ELEMENT maxiter (#PCDATA)*>
-<!ELEMENT distance (#PCDATA)*>
-<!ELEMENT num_sequences (#PCDATA)*>
-<!ELEMENT num_positions (#PCDATA)*>
-<!ELEMENT seed (#PCDATA)*>
-<!ELEMENT hsfrac (#PCDATA)*>
-<!ELEMENT maxwords (#PCDATA)*>
-<!ELEMENT maxsites (#PCDATA)*>
-<!ELEMENT csites (#PCDATA)*>
-<!ELEMENT strands (#PCDATA)*>
-<!ELEMENT priors_file (#PCDATA)*>
-<!ELEMENT reason_for_stopping (#PCDATA)*>
-<!ELEMENT back_order (#PCDATA)*>
-<!ELEMENT background_frequencies (alphabet_array)>
-<!ATTLIST background_frequencies source CDATA #REQUIRED>
-
-<!-- Motif elements -->
 <!ELEMENT motifs (motif*)>
 <!ELEMENT motif (scores, probabilities, regular_expression?, contributing_sites)>
-<!ATTLIST motif id ID #REQUIRED
-                name CDATA #REQUIRED
-                alt CDATA ""
-                width CDATA #REQUIRED
-                sites CDATA #REQUIRED
-                llr CDATA #REQUIRED
-                ic CDATA #REQUIRED
-                re CDATA #REQUIRED
-                bayes_threshold CDATA #REQUIRED
-                e_value CDATA #REQUIRED
-                elapsed_time CDATA #REQUIRED
-                url CDATA ""
->
-<!ELEMENT scores (alphabet_matrix)>
-<!ELEMENT probabilities (alphabet_matrix)>
-<!ELEMENT regular_expression (#PCDATA)*>
-
-<!-- Contributing site elements -->
-<!-- Contributing sites are motif occurences found during the motif discovery phase -->
-<!ELEMENT contributing_sites (contributing_site*)>
-<!ELEMENT contributing_site (left_flank, site, right_flank)>
-<!ATTLIST contributing_site sequence_id IDREF #REQUIRED
-                          position CDATA #REQUIRED
-                          strand (plus|minus|none) 'none'
-                          pvalue CDATA #REQUIRED
->
 <!-- The left_flank contains the sequence for 10 bases to the left of the motif start -->
 <!ELEMENT left_flank (#PCDATA)>
 <!-- The site contains the sequence for the motif instance -->
 <!ELEMENT site (letter_ref*)>
 <!-- The right_flank contains the sequence for 10 bases to the right of the motif end -->
 <!ELEMENT right_flank (#PCDATA)>
-
 <!-- Scanned site elements -->
 <!-- Scanned sites are motif occurences found during the sequence scan phase -->
 <!ELEMENT scanned_sites_summary (scanned_sites*)>
-<!ATTLIST scanned_sites_summary p_thresh CDATA #REQUIRED>
-<!ELEMENT scanned_sites (scanned_site*)>
-<!ATTLIST scanned_sites sequence_id IDREF #REQUIRED
-                        pvalue CDATA #REQUIRED
-                        num_sites CDATA #REQUIRED>
-<!ELEMENT scanned_site EMPTY>
-<!ATTLIST scanned_site  motif_id IDREF #REQUIRED
-                        strand (plus|minus|none) 'none'
-                        position CDATA #REQUIRED
-                        pvalue CDATA #REQUIRED>
-
-<!-- Utility elements -->
-<!-- A reference to a letter in the alphabet -->
-<!ELEMENT letter_ref EMPTY>
-<!ATTLIST letter_ref letter_id IDREF #REQUIRED>
-<!-- A alphabet-array contains one floating point value for each letter in an alphabet -->
-<!ELEMENT alphabet_array (value*)>
-<!ELEMENT value (#PCDATA)>
-<!ATTLIST value letter_id IDREF #REQUIRED>
-
-<!-- A alphabet_matrix contains one alphabet_array for each position in a motif -->
-<!ELEMENT alphabet_matrix (alphabet_array*)>
-
-]>
-<!-- Begin document body -->
-<MEME version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700">
-<training_set datafile="Galaxy_FASTA_Input" length="30">
+<training_set primary_sequences="Galaxy_FASTA_Input" primary_count="30" primary_positions="1500" control_sequences="--none--" control_count="0" control_positions="0">
 <alphabet name="DNA" like="dna">
 <letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/>
-<letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/>
-<letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/>
-<letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/>
-<letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/>
-<letter id="V" symbol="V" equals="ACG" name="Not T"/>
-<letter id="H" symbol="H" equals="ACT" name="Not G"/>
-<letter id="D" symbol="D" equals="AGT" name="Not C"/>
-<letter id="B" symbol="B" equals="CGT" name="Not A"/>
-<letter id="M" symbol="M" equals="AC" name="Amino"/>
-<letter id="R" symbol="R" equals="AG" name="Purine"/>
-<letter id="W" symbol="W" equals="AT" name="Weak"/>
-<letter id="S" symbol="S" equals="CG" name="Strong"/>
-<letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/>
-<letter id="K" symbol="K" equals="GT" name="Keto"/>
-</alphabet>
 <sequence id="sequence_0" name="chr21_19617074_19617124_+" length="50" weight="1.000000" />
-<sequence id="sequence_1" name="chr21_26934381_26934431_+" length="50" weight="1.000000" />
-<sequence id="sequence_2" name="chr21_28217753_28217803_-" length="50" weight="1.000000" />
-<sequence id="sequence_3" name="chr21_31710037_31710087_-" length="50" weight="1.000000" />
-<sequence id="sequence_4" name="chr21_31744582_31744632_-" length="50" weight="1.000000" />
-<sequence id="sequence_5" name="chr21_31768316_31768366_+" length="50" weight="1.000000" />
-<sequence id="sequence_6" name="chr21_31914206_31914256_-" length="50" weight="1.000000" />
-<sequence id="sequence_7" name="chr21_31933633_31933683_-" length="50" weight="1.000000" />
-<sequence id="sequence_8" name="chr21_31962741_31962791_-" length="50" weight="1.000000" />
-<sequence id="sequence_9" name="chr21_31964683_31964733_+" length="50" weight="1.000000" />
-<sequence id="sequence_10" name="chr21_31973364_31973414_+" length="50" weight="1.000000" />
-<sequence id="sequence_11" name="chr21_31992870_31992920_+" length="50" weight="1.000000" />
-<sequence id="sequence_12" name="chr21_32185595_32185645_-" length="50" weight="1.000000" />
-<sequence id="sequence_13" name="chr21_32202076_32202126_-" length="50" weight="1.000000" />
-<sequence id="sequence_14" name="chr21_32253899_32253949_-" length="50" weight="1.000000" />
-<sequence id="sequence_15" name="chr21_32410820_32410870_-" length="50" weight="1.000000" />
-<sequence id="sequence_16" name="chr21_36411748_36411798_-" length="50" weight="1.000000" />
-<sequence id="sequence_17" name="chr21_37838750_37838800_-" length="50" weight="1.000000" />
-<sequence id="sequence_18" name="chr21_45705687_45705737_+" length="50" weight="1.000000" />
-<sequence id="sequence_19" name="chr21_45971413_45971463_-" length="50" weight="1.000000" />
-<sequence id="sequence_20" name="chr21_45978668_45978718_-" length="50" weight="1.000000" />
-<sequence id="sequence_21" name="chr21_45993530_45993580_+" length="50" weight="1.000000" />
-<sequence id="sequence_22" name="chr21_46020421_46020471_+" length="50" weight="1.000000" />
-<sequence id="sequence_23" name="chr21_46031920_46031970_+" length="50" weight="1.000000" />
-<sequence id="sequence_24" name="chr21_46046964_46047014_+" length="50" weight="1.000000" />
-<sequence id="sequence_25" name="chr21_46057197_46057247_+" length="50" weight="1.000000" />
-<sequence id="sequence_26" name="chr21_46086869_46086919_-" length="50" weight="1.000000" />
-<sequence id="sequence_27" name="chr21_46102103_46102153_-" length="50" weight="1.000000" />
-<sequence id="sequence_28" name="chr21_47517957_47518007_+" length="50" weight="1.000000" />
-<sequence id="sequence_29" name="chr21_47575506_47575556_-" length="50" weight="1.000000" />
-<letter_frequencies>
-<alphabet_array>
-<value letter_id="A">0.294</value>
-<value letter_id="C">0.231</value>
 <value letter_id="G">0.257</value>
 <value letter_id="T">0.217</value>
 </alphabet_array>
-</letter_frequencies>
-</training_set>
 <model>
-<command_line>meme meme_input_1.fasta -o meme_test2_out -nostatus -maxsize 1000000 -sf Galaxy_FASTA_Input -dna -mod zoops -nmotifs 1 -wnsites 0.8 -minw 8 -maxw 50 -wg 11 -ws 1 -maxiter 50 -distance 0.001 -prior dirichlet -b 0.01 -plib prior30.plib -spmap uni -spfuzz 0.5 </command_line>
-<host>ThinkPad-T450s</host>
 <type>zoops</type>
-<nmotifs>1</nmotifs>
-<evalue_threshold>inf</evalue_threshold>
-<object_function>E-value of product of p-values</object_function>
-<use_llr>0</use_llr>
-<min_width>8</min_width>
-<max_width>50</max_width>
-<wg>11</wg>
-<ws>1</ws>
-<endgaps>yes</endgaps>
-<substring>yes</substring>
-<minsites>2</minsites>
-<maxsites>30</maxsites>
-<wnsites>0.8</wnsites>
-<spmap>uni</spmap>
-<spfuzz>0.5</spfuzz>
-<prior>dirichlet</prior>
-<beta>0.01</beta>
-<maxiter>50</maxiter>
-<distance>0.001</distance>
-<num_sequences>30</num_sequences>
-<num_positions>1500</num_positions>
-<seed>0</seed>
-<ctfrac>-1</ctfrac>
-<maxwords>-1</maxwords>
-<strands>forward</strands>
-<priors_file>prior30.plib</priors_file>
-<reason_for_stopping>Stopped because requested number of motifs (1) found.</reason_for_stopping>
-<background_frequencies source="dataset with add-one prior applied">
-<alphabet_array>
-<value letter_id="A">0.294</value>
-<value letter_id="C">0.231</value>
-<value letter_id="G">0.257</value>
-<value letter_id="T">0.217</value>
-</alphabet_array>
-</background_frequencies>
-</model>
-<motifs>
-<motif id="motif_1" name="GGSRTATAAAA" alt="MEME-1" width="11" sites="30" ic="13.0" re="12.2" llr="254" e_value="5.1e-040" bayes_threshold="5.2854" elapsed_time="0.376000">
 <scores>
 <alphabet_matrix>
 <alphabet_array>
 <value letter_id="A">-14</value>
-<value letter_id="C">-179</value>
-<value letter_id="G">114</value>
-<value letter_id="T">-112</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">3</value>
-<value letter_id="C">-1155</value>
-<value letter_id="G">137</value>
-<value letter_id="T">-270</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">-114</value>
-<value letter_id="C">20</value>
-<value letter_id="G">86</value>
-<value letter_id="T">-71</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">3</value>
-<value letter_id="C">-279</value>
-<value letter_id="G">122</value>
-<value letter_id="T">-170</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">-1155</value>
-<value letter_id="C">-1155</value>
-<value letter_id="G">-295</value>
-<value letter_id="T">215</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">156</value>
-<value letter_id="C">-179</value>
-<value letter_id="G">-1155</value>
-<value letter_id="T">-170</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">-1155</value>
-<value letter_id="C">-1155</value>
-<value letter_id="G">-1155</value>
-<value letter_id="T">220</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">172</value>
-<value letter_id="C">-279</value>
-<value letter_id="G">-1155</value>
-<value letter_id="T">-1155</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">125</value>
-<value letter_id="C">-1155</value>
-<value letter_id="G">-1155</value>
-<value letter_id="T">46</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">167</value>
-<value letter_id="C">-179</value>
-<value letter_id="G">-1155</value>
-<value letter_id="T">-1155</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">144</value>
-<value letter_id="C">-1155</value>
-<value letter_id="G">-63</value>
-<value letter_id="T">-270</value>
-</alphabet_array>
-</alphabet_matrix>
-</scores>
-<probabilities>
-<alphabet_matrix>
-<alphabet_array>
 <value letter_id="A">0.266667</value>
-<value letter_id="C">0.066667</value>
-<value letter_id="G">0.566667</value>
-<value letter_id="T">0.100000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.300000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="G">0.666667</value>
-<value letter_id="T">0.033333</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.133333</value>
-<value letter_id="C">0.266667</value>
-<value letter_id="G">0.466667</value>
-<value letter_id="T">0.133333</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.300000</value>
-<value letter_id="C">0.033333</value>
-<value letter_id="G">0.600000</value>
-<value letter_id="T">0.066667</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.000000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="G">0.033333</value>
-<value letter_id="T">0.966667</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.866667</value>
-<value letter_id="C">0.066667</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="T">0.066667</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.000000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="T">1.000000</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.966667</value>
-<value letter_id="C">0.033333</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="T">0.000000</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.700000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="T">0.300000</value>
-</alphabet_array>
-<alphabet_array>
-<value letter_id="A">0.933333</value>
-<value letter_id="C">0.066667</value>
-<value letter_id="G">0.000000</value>
-<value letter_id="T">0.000000</value>
-</alphabet_array>
-<alphabet_array>
 <value letter_id="A">0.800000</value>
-<value letter_id="C">0.000000</value>
-<value letter_id="G">0.166667</value>
-<value letter_id="T">0.033333</value>
-</alphabet_array>
-</alphabet_matrix>
-</probabilities>
-<regular_expression>
-[GA][GA][GC][GA]TATA[AT]AA
-</regular_expression>
-<contributing_sites>
 <contributing_site sequence_id="sequence_24" position="12" strand="plus" pvalue="4.51e-07" >
 <left_flank>AAGGCCAGGA</left_flank>
-<site>
 <letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
 <right_flank>GCCTGAGAGC</right_flank>
-</contributing_site>
 <contributing_site sequence_id="sequence_23" position="15" strand="plus" pvalue="2.22e-06" >
-<left_flank>ATACCCAGGG</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>CCTCAGCAGC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_13" position="13" strand="plus" pvalue="2.74e-06" >
-<left_flank>CCACCAGCTT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>AGCCCTGTAC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_25" position="36" strand="plus" pvalue="4.86e-06" >
-<left_flank>ACAGGCCCTG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GCC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_21" position="7" strand="plus" pvalue="4.86e-06" >
-<left_flank>CCAAGGA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GCCCCACAAA</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_19" position="9" strand="plus" pvalue="4.86e-06" >
-<left_flank>CAGGCCCTG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GCCCCAGCAG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_9" position="13" strand="plus" pvalue="4.86e-06" >
-<left_flank>GATTCACTGA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GGCCCTCTGC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_28" position="32" strand="plus" pvalue="6.48e-06" >
-<left_flank>CCGGCGGGGC</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
-<right_flank>GGGGCGG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_20" position="4" strand="plus" pvalue="6.48e-06" >
-<left_flank>CAGA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
 <letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
-<right_flank>GTTCCGACCA</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_12" position="18" strand="plus" pvalue="6.48e-06" >
-<left_flank>CACCAGAGCT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>AGAAGGTTCT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_15" position="21" strand="plus" pvalue="1.38e-05" >
-<left_flank>AATCACTGAG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GTCCCAGGGA</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_11" position="16" strand="plus" pvalue="1.38e-05" >
-<left_flank>CACTATTGAA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TTTCATTTGC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_0" position="39" strand="plus" pvalue="1.41e-05" >
-<left_flank>CCTCGGGACG</left_flank>
-<site>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank></right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_6" position="15" strand="plus" pvalue="1.61e-05" >
-<left_flank>CCCACTACTT</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TCATTCTGAG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_22" position="2" strand="plus" pvalue="1.95e-05" >
-<left_flank>GA</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GCCAACATCC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_14" position="17" strand="plus" pvalue="1.95e-05" >
-<left_flank>CCCACCAGCA</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>AAGCTCAGGA</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_18" position="37" strand="plus" pvalue="2.16e-05" >
+<contributing_site sequence_id="sequence_13" position="13" strand="plus" pvalue="2.74e-06" >
+<right_flank>AGCCCTGTAC</right_flank>
+<contributing_site sequence_id="sequence_25" position="36" strand="plus" pvalue="4.86e-06" >
 <left_flank>CGTGGTCGCG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-</site>
 <right_flank>GC</right_flank>
-</contributing_site>
 <contributing_site sequence_id="sequence_29" position="30" strand="plus" pvalue="3.04e-05" >
 <left_flank>GCTGCCGGTG</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
 <right_flank>GCCCTGGCG</right_flank>
-</contributing_site>
 <contributing_site sequence_id="sequence_4" position="12" strand="plus" pvalue="3.04e-05" >
-<left_flank>CAGGTCTAAG</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>CTTGGAGTCC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_5" position="0" strand="plus" pvalue="3.67e-05" >
-<left_flank></left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>ATGGTCCTGT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_1" position="27" strand="plus" pvalue="3.93e-05" >
-<left_flank>AGTCACAAGT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>GGGTCGCACG</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_7" position="4" strand="plus" pvalue="5.65e-05" >
-<left_flank>TCAG</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>ATGTTCCTGT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_3" position="14" strand="plus" pvalue="6.24e-05" >
-<left_flank>CCCAGGTTTC</left_flank>
-<site>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TCGCCGCACC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_16" position="22" strand="plus" pvalue="7.15e-05" >
-<left_flank>AGTTTCAGTT</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>attatataac</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_27" position="36" strand="plus" pvalue="1.39e-04" >
-<left_flank>TGCCTGGGTC</left_flank>
-<site>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
-<right_flank>GCT</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_26" position="37" strand="plus" pvalue="1.39e-04" >
-<left_flank>TGCCTGGGCC</left_flank>
-<site>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="G"/>
-</site>
-<right_flank>GC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_17" position="2" strand="plus" pvalue="4.81e-04" >
-<left_flank>ga</left_flank>
-<site>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>ggggcctcac</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_8" position="13" strand="plus" pvalue="8.57e-04" >
-<left_flank>TATAACTCAG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>TAATTTGTAC</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_10" position="7" strand="plus" pvalue="1.47e-03" >
-<left_flank>aaactta</left_flank>
-<site>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="A"/>
-</site>
-<right_flank>acttaaaact</right_flank>
-</contributing_site>
-<contributing_site sequence_id="sequence_2" position="26" strand="plus" pvalue="2.64e-03" >
-<left_flank>GGTGGGGGTG</left_flank>
-<site>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="G"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="T"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="A"/>
-<letter_ref letter_id="C"/>
-<letter_ref letter_id="T"/>
-</site>
-<right_flank>GGTCCACTAT</right_flank>
-</contributing_site>
-</contributing_sites>
-</motif>
-</motifs>
 <scanned_sites_summary p_thresh="0.0001">
 <scanned_sites sequence_id="sequence_0" pvalue="5.63e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="39" pvalue="1.41e-05"/>
-</scanned_sites>
 <scanned_sites sequence_id="sequence_1" pvalue="1.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="27" pvalue="3.93e-05"/>
-</scanned_sites>
 <scanned_sites sequence_id="sequence_2" pvalue="1.00e-01" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_3" pvalue="2.49e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="14" pvalue="6.24e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_4" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="12" pvalue="3.04e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_5" pvalue="1.47e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="0" pvalue="3.67e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_6" pvalue="6.45e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="1.61e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_7" pvalue="2.26e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="5.65e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_8" pvalue="3.37e-02" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_9" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="4.86e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_10" pvalue="5.73e-02" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_11" pvalue="5.52e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="16" pvalue="1.38e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_12" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="6.48e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_13" pvalue="1.10e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="2.74e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_14" pvalue="7.78e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="17" pvalue="1.95e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_15" pvalue="5.52e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="21" pvalue="1.38e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_16" pvalue="2.85e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="22" pvalue="7.15e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_17" pvalue="1.90e-02" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_18" pvalue="8.63e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="37" pvalue="2.16e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_19" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="9" pvalue="4.86e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_20" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="6.48e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_21" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="7" pvalue="4.86e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_22" pvalue="7.78e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="2" pvalue="1.95e-05"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_23" pvalue="8.89e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="2.22e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_24" pvalue="1.80e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="12" pvalue="4.51e-07"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_25" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="36" pvalue="4.86e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_26" pvalue="5.54e-03" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_27" pvalue="5.54e-03" num_sites="0"></scanned_sites>
-<scanned_sites sequence_id="sequence_28" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="32" pvalue="6.48e-06"/>
-</scanned_sites>
-<scanned_sites sequence_id="sequence_29" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="30" pvalue="3.04e-05"/>
-</scanned_sites>
-</scanned_sites_summary>
 </MEME>