diff --git a/TestON/RobotTests/README b/TestON/RobotTests/README
index 482101e..3481fa9 100644
--- a/TestON/RobotTests/README
+++ b/TestON/RobotTests/README
@@ -2,7 +2,7 @@
 
 Pre-conditions to running this test is Robot Framework + external robot libraries:
 
-pip install pybot
+pip install robotframework
 pip install robotframework-ride
 pip install robotframework-requests
 pip install robotframework-sshlibrary
diff --git a/TestON/RobotTests/ScalePOC.robot b/TestON/RobotTests/ScalePOC.robot
index 4627753..a70c6a2 100644
--- a/TestON/RobotTests/ScalePOC.robot
+++ b/TestON/RobotTests/ScalePOC.robot
@@ -16,13 +16,14 @@
 ${CONTROLLER_USER}    %{ONOS_USER}
 ${MININET_USER}    %{ONOS_USER}
 ##USER_HOME used for public key
-${USER_HOME}    /home/fedora
+${USER_HOME}    %{HOME}
 ##ONOS_HOME is where the onos dist will be deployed on the controller vm
 ${ONOS_HOME}    /opt/onos
 ${RESTCONFPORT}    8181
 ${LINUX_PROMPT}    $
 ##SWITCHES_RESULT_FILE and JENKINS_WORKSPACE can be configurable...read overriding variables in README
 ##SWITCHES_RESULT_FILE is used to plot data. you can use a jenkins post job for this or do it manually
+##NOTE: This file must exist otherwise the test will fail when trying to write to this file
 ${SWITCHES_RESULT_FILE}    ${USER_HOME}/workspace/tools/switches.csv
 ${JENKINS_WORKSPACE}    ${USER_HOME}/workspace/ONOS-Stable/
 ${prompt_timeout}    30s
diff --git a/TestON/RobotTests/log.html b/TestON/RobotTests/log.html
new file mode 100644
index 0000000..6721cc7
--- /dev/null
+++ b/TestON/RobotTests/log.html
@@ -0,0 +1,2066 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta http-equiv="Pragma" content="no-cache">
+<meta http-equiv="Expires" content="-1">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta content="Robot Framework 2.8.7 (Python 2.7.10 on linux2)" name="Generator">
+<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
+<style media="all" type="text/css">
+/* Generic and misc styles */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size: 0.8em;
+    color: black;
+    padding: 6px;
+    background: white;
+}
+table {
+    table-layout: fixed;
+    word-wrap: break-word;
+    empty-cells: show;
+    font-size: 1em;
+}
+th, td {
+    vertical-align: top;
+}
+br {
+    mso-data-placement: same-cell; /* maintain line breaks in Excel */
+}
+a, a:link, a:visited {
+    text-decoration: none;
+    color: blue;
+}
+a > img {
+    border: 1px solid blue !important;
+}
+a:hover, a:active {
+    text-decoration: underline;
+    color: purple;
+}
+.parent-name {
+    font-size: 0.7em;
+    letter-spacing: -0.07em;
+}
+.message {
+    white-space: pre-wrap;
+}
+/* Headers */
+#header {
+    width: 65em;
+    height: 3em;
+    margin: 6px 0;
+}
+h1 {
+    float: left;
+    margin: 0 0 0.5em 0;
+    width: 75%;
+}
+h2 {
+    clear: left;
+}
+#generated {
+    float: right;
+    text-align: right;
+    font-size: 0.9em;
+    white-space: nowrap;
+}
+/* Documentation headers */
+.doc > h2 {
+    font-size: 1.2em;
+}
+.doc > h3 {
+    font-size: 1.1em;
+}
+.doc > h4 {
+    font-size: 1.0em;
+}
+/* Status text colors -- !important allows using them in links */
+.error, .fail {
+    color: red !important;
+    font-weight: bold;
+}
+.pass {
+    color: #009900 !important;
+}
+.warn {
+    color: #FFCC00 !important;
+    font-weight: bold;
+}
+.not-run {
+    color: #444444 !important;
+}
+/* Top right header */
+#top-right-header {
+    position: fixed;
+    top: 0;
+    right: 0;
+    z-index: 1000;
+    width: 12em;
+    text-align: center;
+}
+#report-or-log-link a {
+    display: block;
+    background: black;
+    color: white;
+    text-decoration: none;
+    letter-spacing: 0.1em;
+    padding: 0.3em 0;
+    border-bottom-left-radius: 4px;
+}
+#report-or-log-link a:hover {
+    color: yellow;
+}
+#log-level-selector {
+    padding: 0.3em 0;
+    font-size: 0.9em;
+    border-bottom-left-radius: 4px;
+    background: lightgray;
+}
+/* Statistics table */
+.statistics {
+    width: 65em;
+    border-collapse: collapse;
+    empty-cells: show;
+    margin-bottom: 1em;
+}
+.statistics tr:hover {
+    background: #ECECF7;
+    cursor: pointer;
+}
+.statistics th, .statistics td {
+    border: 1px solid black;
+    padding: 0.1em 0.3em;
+}
+.statistics th {
+    background-color: #DCDCF0;
+    padding: 0.2em 0.3em;
+}
+.statistics td {
+    vertical-align: middle;
+}
+.stats-col-stat {
+    width: 4.5em;
+    text-align: center;
+}
+.stats-col-elapsed {
+    width: 5.5em;
+    text-align: center;
+}
+.stats-col-graph {
+    width: 9em;
+}
+th.stats-col-graph:hover {
+    cursor: default;
+}
+.stat-name {
+    float: left;
+}
+.stat-name a, .stat-name span {
+    font-weight: bold;
+}
+.tag-links {
+    font-size: 0.9em;
+    float: right;
+    margin-top: 0.05em;
+}
+.tag-links span {
+    margin-left: 0.2em;
+}
+/* Statistics graph */
+.graph, .empty-graph {
+    border: 1px solid black;
+    width: auto;
+    height: 7px;
+    padding: 0;
+    background: red;
+}
+.empty-graph {
+    background: #E9E9E9;
+}
+.pass-bar, .fail-bar {
+    float: left;
+    height: 100%;
+}
+.pass-bar {
+    background: #00F000;
+}
+/* Tablesorter - adapted from provided Blue Skin */
+.tablesorter-header {
+    background-image: url(data:image/gif;base64,R0lGODlhCwAJAIAAAH9/fwAAACH5BAEAAAEALAAAAAALAAkAAAIRjAOnBr3cnIr0WUjTrC9e9BQAOw==);
+    background-repeat: no-repeat;
+    background-position: center right;
+    cursor: pointer;
+}
+.tablesorter-header:hover {
+    background-color: #B8C8E3;
+}
+.tablesorter-headerAsc {
+    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlBWnFr3cnIr0WQOyBmvzp13CpxQAOw==);
+    background-color: #B8C8E3 !important;
+}
+.tablesorter-headerDesc {
+    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlAWnBr3cnIr0WROyDmvzp13CpxQAOw==);
+    background-color: #B8C8E3 !important;
+}
+.sorter-false {
+    background-image: none;
+    cursor: default;
+}
+.sorter-false:hover {
+    background-color: #DCDCF0;
+}
+</style>
+<style media="all" type="text/css">
+/* Icons are from Open Iconic <https://useiconic.com/open/>.
+   Licensed under the MIT License. */
+/* Containers */
+.suite, .test, #errors {
+    border: 1px solid gray;
+    padding: 0.3em 0.2em;
+    margin: 0.2em 0;
+}
+.test {
+    border-style: dashed;
+}
+#errors, .messages, .metadata {
+    width: 100%;
+    border-spacing: 0;
+}
+.children {
+    display: none;
+    margin-left: 1.4em;
+}
+.suite, .test, .keyword {
+    margin-left: -0.2em;
+}
+#s1, .suite > .children > .keyword {
+    margin-left: 0;
+}
+/* Suite, test and kw headers */
+.element-header {
+    border: 1px solid transparent;
+    border-radius: 2px;
+    position: relative;
+}
+.element-header:hover {
+    cursor: pointer;
+    background-color: #ECECF7;
+    border-color: #BCBCD7;
+}
+.element-header-toggle {
+    position: absolute;
+    left: 3px;
+    top: 4px;
+    background-repeat: no-repeat;
+    background-position: center;
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAQAAABKxSfDAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeCR0JChSkZz20AAAAGklEQVQI12NgQAKMDKzInP8IDhOqMk4G7AAANQwBE427PYUAAAAASUVORK5CYII=);
+    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0wIDB2Mmg4di0yaC04eiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzKSIgLz4KPC9zdmc+), none;
+    height: 10px;
+    width: 10px;
+    background-size: 6px 6px;
+    border: 1px solid black;
+    border-radius: 2px;
+}
+.closed > .element-header-toggle {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAQAAABKxSfDAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeCR0JCDHdVYtxAAAAM0lEQVQI103MMQqAMBQFwVHyITaB3P+W1sKzSBC3mW6hRFw0pUB5DvF1bu9FN0RM3X/wAk98CUnvFTakAAAAAElFTkSuQmCC);
+    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0zIDB2M2gtM3YyaDN2M2gydi0zaDN2LTJoLTN2LTNoLTJ6IiAvPgo8L3N2Zz4=), none;
+}
+.element-header:hover > .element-header-toggle {
+    background-color: yellow;
+}
+.element-header-right:hover ~ .element-header-toggle {
+    background-color: transparent;
+}
+.element-header-left {
+    padding: 3px 80px 3px 20px;
+}
+.element-header-right {
+    position: absolute;
+    right: 0;
+    top: 0;
+    padding: 3px;
+    cursor: default;
+}
+.name {
+    font-weight: bold;
+}
+.elapsed {
+    float: right;
+    color: #808080;
+    padding-left: 1em;
+}
+.link {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHlJREFUGJVtzrEJwmAQBtCn6ASuIKTIBhY2gmghBiJYB1udwk10B8FJbKMBcQFbtbkfJHrVwfu+4/idJR64Y9H7E3higj5O3S8Y44ApLnjhnXCNGhV2yNGggDJwiC02gavUbpDFvscRo4QdXOMKDHBufz3HLYKzNn4AbSkV3fncGQYAAAAASUVORK5CYII=);
+    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik01Ljg4LjAzYy0uMTguMDEtLjM2LjAzLS41My4wOS0uMjcuMS0uNTMuMjUtLjc1LjQ3YS41LjUgMCAxIDAgLjY5LjY5Yy4xMS0uMTEuMjQtLjE3LjM4LS4yMi4zNS0uMTIuNzgtLjA3IDEuMDYuMjIuMzkuMzkuMzkgMS4wNCAwIDEuNDRsLTEuNSAxLjVjLS40NC40NC0uOC40OC0xLjA2LjQ3LS4yNi0uMDEtLjQxLS4xMy0uNDEtLjEzYS41LjUgMCAxIDAtLjUuODhzLjM0LjIyLjg0LjI1Yy41LjAzIDEuMi0uMTYgMS44MS0uNzhsMS41LTEuNWMuNzgtLjc4Ljc4LTIuMDQgMC0yLjgxLS4yOC0uMjgtLjYxLS40NS0uOTctLjUzLS4xOC0uMDQtLjM4LS4wNC0uNTYtLjAzem0tMiAyLjMxYy0uNS0uMDItMS4xOS4xNS0xLjc4Ljc1bC0xLjUgMS41Yy0uNzguNzgtLjc4IDIuMDQgMCAyLjgxLjU2LjU2IDEuMzYuNzIgMi4wNi40Ny4yNy0uMS41My0uMjUuNzUtLjQ3YS41LjUgMCAxIDAtLjY5LS42OWMtLjExLjExLS4yNC4xNy0uMzguMjItLjM1LjEyLS43OC4wNy0xLjA2LS4yMi0uMzktLjM5LS4zOS0xLjA0IDAtMS40NGwxLjUtMS41Yy40LS40Ljc1LS40NSAxLjAzLS40NC4yOC4wMS40Ny4wOS40Ny4wOWEuNS41IDAgMSAwIC40NC0uODhzLS4zNC0uMi0uODQtLjIyeiIKICAvPgo8L3N2Zz4=), none;
+}
+.expand {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAADtJREFUGJVjYCACKDAwMByA0ljFDjAwMPxnYGB4ABVQgLL/Q+VQBB6gseGmIivCkERXhFUSWRFOSawAAEl7E3uv1iMcAAAAAElFTkSuQmCC);
+    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0xLjUgMGwtMS41IDEuNSA0IDQgNC00LTEuNS0xLjUtMi41IDIuNS0yLjUtMi41eiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxKSIgLz4KPC9zdmc+), none;
+}
+.collapse {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAC5JREFUGJVjYCARNEAxTsn/UIyhCFkSQxG6ThQ+C5IpjWhG1yNb4YDFTdjEMAEACi8Q++9Y9TAAAAAASUVORK5CYII=);
+    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik00IDBsLTQgNCAxLjUgMS41IDIuNS0yLjUgMi41IDIuNSAxLjUtMS41LTQtNHoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMSkiIC8+Cjwvc3ZnPg==), none;
+}
+.expand, .collapse, .link {
+    float: left;
+    display: block;
+    visibility: hidden;
+    margin: 0 4px;
+    height: 14px;
+    width: 14px;
+    background-size: 8px 8px;
+    background-repeat: no-repeat;
+    background-position: center;
+    border: 1px solid black;
+    border-radius: 2px;
+}
+.link {
+    background-size: 10px 10px;
+}
+.element-header:hover a {
+    visibility: visible;
+}
+.expand:hover, .collapse:hover, .link:hover {
+    background-color: yellow;
+}
+/* Messages and errors */
+.messages {
+    font-family: monospace;
+    font-size: 1.1em;
+}
+.message-row {
+    height: 20px;
+}
+.time {
+    width: 8em;
+}
+.error-time {
+    width: 11em;
+    white-space: nowrap;
+}
+.level {
+    width: 4.5em;
+    text-align: center;
+}
+.select-message {
+    width: 24px;
+}
+.select-message > div {
+    float: right;
+    margin-right: 2px;
+    height: 16px;
+    width: 16px;
+    background-size: 12px 12px;
+    background-repeat: no-repeat;
+    background-position: center;
+}
+.message-row:hover .select-message div {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeCR0MOzhWKZQOAAAASUlEQVQY032PsRHAIAwDX9BkicD+W8UMEqegAQJWKZ/+3sLZJhFGQEZzNaIa4ibh66En867VNaIeoP5WppNuIGoAlOm3g5VC1AdYeQv1BZPRSgAAAABJRU5ErkJggg==);
+    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0wIDB2MWg4di0xaC04em0wIDJ2MWg2di0xaC02em0wIDJ2MWg4di0xaC04em0wIDJ2MWg2di0xaC02eiIgLz4KPC9zdmc+), none;
+    border: 1px solid black;
+    border-radius: 2px;
+}
+.select-message:hover div {
+    background-color: yellow;
+    cursor: pointer;
+}
+/* Message tables - these MUST NOT be combined together because otherwise
+   dynamically altering them based on visible log level is not possible. */
+.trace-message {
+    display: table;
+}
+.debug-message {
+    display: table;
+}
+/* Metadata */
+.metadata th {
+    width: 12.5em;
+    text-align: left;
+    white-space: nowrap;
+    padding: 0;
+}
+.metadata td {
+    padding: 0.2em;
+}
+.keyword-metadata {
+    font-size: 0.9em;
+}
+/* Custom styles for statistics */
+#total-stats tr:hover, #tag-stats tr:hover {
+    cursor: default;
+}
+</style>
+<style media="print" type="text/css">
+body {
+    background: white !important;
+    padding: 0;
+    font-size: 8pt;
+}
+a:link, a:visited {
+    color: black;
+}
+#header {
+    width: auto;
+}
+.details, .statistics {
+    width: 100%;
+}
+#generated-ago, #top-right-header, #normal-selector, #search-buttons,
+.folding-button, .expand, .hidden, .details-col-toggle {
+    display: none;
+}
+.element-header-text, .children {
+    margin: 0;
+}
+#test-details {
+    border-collapse: collapse;
+    table-layout: auto;
+}
+#test-details th, #test-details td {
+    border: 1px solid black;
+}
+.details-col-header {
+    padding: 0;
+}
+#print-selector {
+    display: table-cell;
+}
+.tablesorter-header {
+    background-image: none;
+    background: #DCDCF0 !important;
+}
+</style>
+<style media="all" type="text/css">
+#javascript-disabled {
+    width: 600px;
+    margin: 100px auto 0 auto;
+    padding: 20px;
+    color: #2A2A2E;
+    border: 1px solid #9A9A9E;
+    background: #FAFAFF;
+}
+#javascript-disabled h1 {
+    width: 100%;
+    float: none;
+}
+#javascript-disabled ul {
+    font-size: 1.2em;
+}
+#javascript-disabled li {
+    margin: 0.5em 0;
+}
+#javascript-disabled b {
+    font-style: italic;
+}
+</style>
+<style media="all" type="text/css">
+.doc > * {
+    margin: 0.7em 1em 0.1em 1em;
+    padding: 0;
+}
+.doc > p, .doc > h1, .doc > h2, .doc > h3, .doc > h4 {
+    margin: 0.7em 0 0.1em 0;
+}
+.doc > *:first-child {
+    margin-top: 0.1em;
+}
+.doc table {
+    border: 1px solid gray;
+    background: transparent;
+    border-collapse: collapse;
+    empty-cells: show;
+    font-size: 0.9em;
+}
+.doc table th, .doc table td {
+    border: 1px solid gray;
+    background: transparent;
+    padding: 0.1em 0.3em;
+    height: 1.2em;
+}
+.doc table th {
+    text-align: center;
+    letter-spacing: 0.1em;
+}
+.doc pre {
+    font-size: 1.1em;
+    letter-spacing: 0.05em;
+    background: #F4F4FF;
+}
+.doc code {
+    padding: 0 0.2em;
+    letter-spacing: 0.05em;
+    background: #F4F4FF;
+}
+.doc li {
+    list-style-position: inside;
+    list-style-type: square;
+}
+.doc img {
+    border: 1px solid gray;
+}
+.doc hr {
+    background: gray;
+    height: 1px;
+    border: 0;
+}
+</style>
+<script type="text/javascript">
+var LEVELS = {TRACE: 0, DEBUG: 1, INFO: 2, WARN: 3, FAIL: 4, NONE: 5};
+function toggleSuite(suiteId) {
+    toggleElement(suiteId, ['keyword', 'suite', 'test']);
+}
+function toggleTest(testId) {
+    toggleElement(testId, ['keyword']);
+}
+function toggleKeyword(kwId) {
+    toggleElement(kwId, ['keyword', 'message']);
+}
+function toggleElement(elementId, childrenNames) {
+    var element = $('#' + elementId);
+    var children = element.children('.children');
+    children.toggle(100, '', function () {
+        element.children('.element-header').toggleClass('closed');
+    });
+    populateChildren(elementId, children, childrenNames);
+}
+function populateChildren(elementId, childElement, childrenNames) {
+    if (!childElement.hasClass('populated')) {
+        var element = window.testdata.findLoaded(elementId);
+        var callback = drawCallback(element, childElement, childrenNames);
+        element.callWhenChildrenReady(callback);
+        childElement.addClass('populated');
+    }
+}
+function drawCallback(element, childElement, childrenNames) {
+    return function () {
+        util.map(childrenNames, function (childName) {
+            var children = element[childName + 's']();
+            var template = childName + 'Template';
+            util.map(children, function (child) {
+                $.tmpl(template, child).appendTo(childElement);
+            });
+        });
+    }
+}
+function expandSuite(suite) {
+    if (suite.status == "PASS")
+        expandElement(suite);
+    else
+        expandCriticalFailed(suite);
+}
+function expandElement(item) {
+    var element = $('#' + item.id);
+    var children = element.children('.children');
+    // .css is faster than .show and .show w/ callback is terribly slow
+    children.css({'display': 'block'});
+    populateChildren(item.id, children, item.childrenNames);
+    element.children('.element-header').removeClass('closed');
+}
+function expandElementWithId(elementid) {
+    expandElement(window.testdata.findLoaded(elementid));
+}
+function expandCriticalFailed(element) {
+    if (element.status == "FAIL") {
+        window.elementsToExpand = [element];
+        window.expandDecider = function (e) {
+            return e.status == "FAIL" && (e.isCritical === undefined || e.isCritical);
+        };
+        expandRecursively();
+    }
+}
+function expandAll(elementId) {
+    window.elementsToExpand = [window.testdata.findLoaded(elementId)];
+    window.expandDecider = function () { return true; };
+    expandRecursively();
+}
+function expandRecursively() {
+    if (!window.elementsToExpand.length)
+        return;
+    var element = window.elementsToExpand.pop();
+    if (!element || elementHiddenByUser(element.id)) {
+        window.elementsToExpand = [];
+        return;
+    }
+    expandElement(element);
+    element.callWhenChildrenReady(function () {
+        var children = element.children();
+        for (var i = children.length-1; i >= 0; i--) {
+            if (window.expandDecider(children[i]))
+                window.elementsToExpand.push(children[i]);
+        }
+        if (window.elementsToExpand.length)
+            setTimeout(expandRecursively, 0);
+    });
+}
+function elementHiddenByUser(id) {
+    var element = $('#' + id);
+    return !element.is(":visible");
+}
+function collapseAll(id) {
+    var element = $('#' + id);
+    element.find('.children').css({'display': 'none'});
+    element.find('.element-header').addClass('closed');
+}
+function logLevelSelected(level) {
+    var anchors = getViewAnchorElements();
+    setMessageVisibility(level);
+    scrollToShortestVisibleAnchorElement(anchors);
+}
+function getViewAnchorElements() {
+    var elem1 = $(document.elementFromPoint(100, 0));
+    var elem2 = $(document.elementFromPoint(100, 20));
+    return [elem1, elem2];
+}
+function scrollToShortestVisibleAnchorElement(anchors) {
+    anchors = util.map(anchors, closestVisibleParent);
+    var shortest = anchors[0];
+    for (var i = 1; i < anchors.length; i++)
+        if (shortest.height() > anchors[i].height())
+            shortest = anchors[i];
+    shortest.get()[0].scrollIntoView(true);
+}
+function setMessageVisibility(level) {
+    level = parseInt(level);
+    changeClassDisplay(".trace-message", level <= LEVELS.TRACE);
+    changeClassDisplay(".debug-message", level <= LEVELS.DEBUG);
+    changeClassDisplay(".info-message", level <= LEVELS.INFO);
+}
+function closestVisibleParent(elem) {
+    while (!elem.is(":visible"))
+        elem = elem.parent();
+    return elem;
+}
+function changeClassDisplay(clazz, visible) {
+    var styles = document.styleSheets;
+    for (var i = 0; i < styles.length; i++) {
+        var rules = getRules(styles[i]);
+        if (rules === null)
+            continue;
+        for (var j = 0; j < rules.length; j++)
+            if (rules[j].selectorText === clazz)
+                rules[j].style.display = visible ? "table" : "none";
+    }
+}
+function getRules(style) {
+    // With Chrome external CSS files seem to have only null roles and with
+    // Firefox accessing rules can result to security error.
+    // Neither of these are a problem on with generated logs.
+    try {
+        return style.cssRules || style.rules;
+    } catch (e) {
+        return null;
+    }
+}
+function selectMessage(parentId) {
+    var element = $('#' + parentId).find('.message').get(0);
+    selectText(element);
+}
+function selectText(element) {
+    // Based on http://stackoverflow.com/questions/985272
+    var range, selection;
+    if (document.body.createTextRange) {  // IE 8
+        range = document.body.createTextRange();
+        range.moveToElementText(element);
+        range.select();
+    } else if (window.getSelection) {  // Others
+        selection = window.getSelection();
+        range = document.createRange();
+        range.selectNodeContents(element);
+        selection.removeAllRanges();
+        selection.addRange(range);
+    }
+}
+function LogLevelController(minLevel, defaultLevel) {
+    minLevel = LEVELS[minLevel];
+    defaultLevel = LEVELS[defaultLevel];
+    function showLogLevelSelector() {
+        return minLevel < LEVELS.INFO;
+    }
+    function defaultLogLevel() {
+        if (minLevel > defaultLevel)
+            return minLevel;
+        return defaultLevel;
+    }
+    function showTrace() {
+        return minLevel == LEVELS.TRACE;
+    }
+    return {
+        showLogLevelSelector: showLogLevelSelector,
+        defaultLogLevel: defaultLogLevel,
+        showTrace: showTrace
+    };
+}
+</script>
+<script type="text/javascript">
+/*! jQuery v1.8.3 jquery.com | jquery.org/license */
+(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window);
+</script>
+<script type="text/javascript">
+/*
+ * jQuery Templates Plugin 1.0.0pre
+ * http://github.com/jquery/jquery-tmpl
+ * Requires jQuery 1.4.2
+ *
+ * Copyright Software Freedom Conservancy, Inc.
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ */
+(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
+</script>
+<script type="text/javascript">
+/*!
+* TableSorter 2.7.8 min - Client-side table sorting with ease!
+* Copyright (c) 2007 Christian Bach
+*/
+!function(j){j.extend({tablesorter:new function(){function e(d){"undefined"!==typeof console&&"undefined"!==typeof console.log?console.log(d):alert(d)}function u(d,c){e(d+" ("+((new Date).getTime()-c.getTime())+"ms)")}function p(d,c,a){if(!c)return"";var b=d.config,g=b.textExtraction,f="",f="simple"===g?b.supportsTextContent?c.textContent:j(c).text():"function"===typeof g?g(c,d,a):"object"===typeof g&&g.hasOwnProperty(a)?g[a](c,d,a):b.supportsTextContent?c.textContent:j(c).text();return j.trim(f)} function h(d){var c=d.config,a=c.$tbodies=c.$table.children("tbody:not(."+c.cssInfoBlock+")"),b,q,f,l,j,n,k="";if(0===a.length)return c.debug?e("*Empty table!* Not building a parser cache"):"";a=a[0].rows;if(a[0]){b=[];q=a[0].cells.length;for(f=0;f<q;f++){l=c.$headers.filter(":not([colspan])");l=l.add(c.$headers.filter('[colspan="1"]')).filter('[data-column="'+f+'"]:last');j=c.headers[f];n=g.getParserById(g.getData(l,j,"sorter"));c.empties[f]=g.getData(l,j,"empty")||c.emptyTo||(c.emptyToBottom?"bottom": "top");c.strings[f]=g.getData(l,j,"string")||c.stringTo||"max";if(!n)a:{l=d;j=a;n=-1;for(var u=f,x=void 0,t=g.parsers.length,y=!1,m="",x=!0;""===m&&x;)n++,j[n]?(y=j[n].cells[u],m=p(l,y,u),l.config.debug&&e("Checking if value was empty on row "+n+", column: "+u+": "+m)):x=!1;for(x=1;x<t;x++)if(g.parsers[x].is&&g.parsers[x].is(m,l,y)){n=g.parsers[x];break a}n=g.parsers[0]}c.debug&&(k+="column:"+f+"; parser:"+n.id+"; string:"+c.strings[f]+"; empty: "+c.empties[f]+"\n");b.push(n)}}c.debug&&e(k);return b} function s(d){var c=d.tBodies,a=d.config,b,q,f=a.parsers,l,v,n,k,h,x,t,m=[];a.cache={};if(!f)return a.debug?e("*Empty table!* Not building a cache"):"";a.debug&&(t=new Date);a.showProcessing&&g.isProcessing(d,!0);for(k=0;k<c.length;k++)if(a.cache[k]={row:[],normalized:[]},!j(c[k]).hasClass(a.cssInfoBlock)){b=c[k]&&c[k].rows.length||0;q=c[k].rows[0]&&c[k].rows[0].cells.length||0;for(v=0;v<b;++v)if(h=j(c[k].rows[v]),x=[],h.hasClass(a.cssChildRow))a.cache[k].row[a.cache[k].row.length-1]=a.cache[k].row[a.cache[k].row.length- 1].add(h);else{a.cache[k].row.push(h);for(n=0;n<q;++n)if(l=p(d,h[0].cells[n],n),l=f[n].format(l,d,h[0].cells[n],n),x.push(l),"numeric"===(f[n].type||"").toLowerCase())m[n]=Math.max(Math.abs(l),m[n]||0);x.push(a.cache[k].normalized.length);a.cache[k].normalized.push(x)}a.cache[k].colMax=m}a.showProcessing&&g.isProcessing(d);a.debug&&u("Building cache for "+b+" rows",t)}function m(d,c){var a=d.config,b=d.tBodies,q=[],f=a.cache,e,v,n,k,h,p,m,y,s,r,E;if(f[0]){a.debug&&(E=new Date);for(y=0;y<b.length;y++)if(e= j(b[y]),!e.hasClass(a.cssInfoBlock)){h=g.processTbody(d,e,!0);e=f[y].row;v=f[y].normalized;k=(n=v.length)?v[0].length-1:0;for(p=0;p<n;p++)if(r=v[p][k],q.push(e[r]),!a.appender||!a.removeRows){s=e[r].length;for(m=0;m<s;m++)h.append(e[r][m])}g.processTbody(d,h,!1)}a.appender&&a.appender(d,q);a.debug&&u("Rebuilt table",E);c||g.applyWidget(d);j(d).trigger("sortEnd",d)}}function F(d){var c,a,b,g=d.config,f=g.sortList,e=[g.cssAsc,g.cssDesc],h=j(d).find("tfoot tr").children().removeClass(e.join(" "));g.$headers.removeClass(e.join(" ")); b=f.length;for(c=0;c<b;c++)if(2!==f[c][1]&&(d=g.$headers.not(".sorter-false").filter('[data-column="'+f[c][0]+'"]'+(1===b?":last":"")),d.length))for(a=0;a<d.length;a++)d[a].sortDisabled||(d.eq(a).addClass(e[f[c][1]]),h.length&&h.filter('[data-column="'+f[c][0]+'"]').eq(a).addClass(e[f[c][1]]))}function G(d){var c=0,a=d.config,b=a.sortList,g=b.length,f=d.tBodies.length,e,h,n,k,p,m,t,r,s;if(!a.serverSideSorting&&a.cache[0]){a.debug&&(e=new Date);for(n=0;n<f;n++)p=a.cache[n].colMax,s=(m=a.cache[n].normalized)&& m[0]?m[0].length-1:0,m.sort(function(f,e){for(h=0;h<g;h++){k=b[h][0];r=b[h][1];t=/n/i.test(a.parsers&&a.parsers[k]?a.parsers[k].type||"":"")?"Numeric":"Text";t+=0===r?"":"Desc";/Numeric/.test(t)&&a.strings[k]&&(c="boolean"===typeof a.string[a.strings[k]]?(0===r?1:-1)*(a.string[a.strings[k]]?-1:1):a.strings[k]?a.string[a.strings[k]]||0:0);var l=j.tablesorter["sort"+t](d,f[k],e[k],k,p[k],c);if(l)return l}return f[s]-e[s]});a.debug&&u("Sorting on "+b.toString()+" and dir "+r+" time",e)}}function C(d, c){d.trigger("updateComplete");"function"===typeof c&&c(d[0])}function I(d,c,a){!1!==c?d.trigger("sorton",[d[0].config.sortList,function(){C(d,a)}]):C(d,a)}var g=this;g.version="2.7.8";g.parsers=[];g.widgets=[];g.defaults={theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,headers:{},ignoreCase:!0, sortForce:null,sortList:[],sortAppend:null,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",textExtraction:"simple",textSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,initialized:null,tableClass:"tablesorter",cssAsc:"tablesorter-headerAsc",cssChildRow:"tablesorter-childRow",cssDesc:"tablesorter-headerDesc",cssHeader:"tablesorter-header",cssHeaderRow:"tablesorter-headerRow",cssIcon:"tablesorter-icon",cssInfoBlock:"tablesorter-infoOnly", cssProcessing:"tablesorter-processing",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]};g.benchmark=u;g.construct=function(d){return this.each(function(){if(!this.tHead||0===this.tBodies.length||!0===this.hasInitialized)return this.config&&this.config.debug?e("stopping initialization! No thead, tbody or tablesorter has already been initialized"):"";var c=j(this),a=this,b,q,f,l="",v,n,k,C,x=j.metadata; a.hasInitialized=!1;a.config={};b=j.extend(!0,a.config,g.defaults,d);j.data(a,"tablesorter",b);b.debug&&j.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===j("<span>x</span>")[0].textContent;b.supportsDataObject=1.4<=parseFloat(j.fn.jquery);b.string={max:1,min:-1,"max+":1,"max-":-1,zero:0,none:0,"null":0,top:!0,bottom:!1};/tablesorter\-/.test(c.attr("class"))||(l=""!==b.theme?" tablesorter-"+b.theme:"");b.$table=c.addClass(b.tableClass+l);b.$tbodies=c.children("tbody:not(."+b.cssInfoBlock+ ")");var t=[],y={},O=0,R=j(a).find("thead:eq(0), tfoot").children("tr"),E,K,z,A,P,D,L,S,T,H;for(E=0;E<R.length;E++){P=R[E].cells;for(K=0;K<P.length;K++){A=P[K];D=A.parentNode.rowIndex;L=D+"-"+A.cellIndex;S=A.rowSpan||1;T=A.colSpan||1;"undefined"===typeof t[D]&&(t[D]=[]);for(z=0;z<t[D].length+1;z++)if("undefined"===typeof t[D][z]){H=z;break}y[L]=H;O=Math.max(H,O);j(A).attr({"data-column":H});for(z=D;z<D+S;z++){"undefined"===typeof t[z]&&(t[z]=[]);L=t[z];for(A=H;A<H+T;A++)L[A]="x"}}}a.config.columns= O;var M,B,Q,U,N,J,V,w=a.config;w.headerList=[];w.headerContent=[];w.debug&&(V=new Date);U=w.cssIcon?'<i class="'+w.cssIcon+'"></i>':"";t=j(a).find(w.selectorHeaders).each(function(a){B=j(this);M=w.headers[a];w.headerContent[a]=this.innerHTML;N=w.headerTemplate.replace(/\{content\}/g,this.innerHTML).replace(/\{icon\}/g,U);w.onRenderTemplate&&(Q=w.onRenderTemplate.apply(B,[a,N]))&&"string"===typeof Q&&(N=Q);this.innerHTML='<div class="tablesorter-header-inner">'+N+"</div>";w.onRenderHeader&&w.onRenderHeader.apply(B, [a]);this.column=y[this.parentNode.rowIndex+"-"+this.cellIndex];var b=g.getData(B,M,"sortInitialOrder")||w.sortInitialOrder;this.order=/^d/i.test(b)||1===b?[1,0,2]:[0,1,2];this.count=-1;"false"===g.getData(B,M,"sorter")?(this.sortDisabled=!0,B.addClass("sorter-false")):B.removeClass("sorter-false");this.lockedOrder=!1;J=g.getData(B,M,"lockedOrder")||!1;"undefined"!==typeof J&&!1!==J&&(this.order=this.lockedOrder=/^d/i.test(J)||1===J?[1,1,1]:[0,0,0]);B.addClass((this.sortDisabled?"sorter-false ":" ")+ w.cssHeader);w.headerList[a]=this;B.parent().addClass(w.cssHeaderRow)});a.config.debug&&(u("Built headers:",V),e(t));b.$headers=t;if(a.config.widthFixed&&0===j(a).find("colgroup").length){var W=j("<colgroup>"),X=j(a).width();j("tr:first td",a.tBodies[0]).each(function(){W.append(j("<col>").css("width",parseInt(1E3*(j(this).width()/X),10)/10+"%"))});j(a).prepend(W)}b.parsers=h(a);b.delayInit||s(a);b.$headers.find("*")[j.fn.addBack?"addBack":"andSelf"]().filter(b.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter").bind("mousedown.tablesorter mouseup.tablesorter", function(d,e){var h=(this.tagName.match("TH|TD")?j(this):j(this).parents("th, td").filter(":last"))[0];if(1!==(d.which||d.button))return!1;if("mousedown"===d.type)return C=(new Date).getTime(),"INPUT"===d.target.tagName?"":!b.cancelSelection;if(!0!==e&&250<(new Date).getTime()-C)return!1;b.delayInit&&!b.cache&&s(a);if(!h.sortDisabled){c.trigger("sortStart",a);l=!d[b.sortMultiSortKey];h.count=d[b.sortResetKey]?2:(h.count+1)%(b.sortReset?3:2);b.sortRestart&&(q=h,b.$headers.each(function(){if(this!== q&&(l||!j(this).is("."+b.cssDesc+",."+b.cssAsc)))this.count=-1}));q=h.column;if(l){b.sortList=[];if(null!==b.sortForce){v=b.sortForce;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}k=h.order[h.count];if(2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k])}else if(b.sortAppend&&1<b.sortList.length&&g.isValueInArray(b.sortAppend[0][0],b.sortList)&&b.sortList.pop(),g.isValueInArray(q,b.sortList))for(f=0;f<b.sortList.length;f++)n=b.sortList[f],k=b.headerList[n[0]], n[0]===q&&(n[1]=k.order[k.count],2===n[1]&&(b.sortList.splice(f,1),k.count=-1));else if(k=h.order[h.count],2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k]);if(null!==b.sortAppend){v=b.sortAppend;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}c.trigger("sortBegin",a);setTimeout(function(){F(a);G(a);m(a)},1)}});b.cancelSelection&&b.$headers.each(function(){this.onselectstart=function(){return!1}});c.unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(".tablesorter ")).bind("sortReset.tablesorter", function(){b.sortList=[];F(a);G(a);m(a)}).bind("update.tablesorter updateRows.tablesorter",function(d,f,g){j(b.selectorRemove,a).remove();b.parsers=h(a);s(a);I(c,f,g)}).bind("updateCell.tablesorter",function(d,f,g,e){var q,h,l;q=c.find("tbody");d=q.index(j(f).parents("tbody").filter(":last"));var k=j(f).parents("tr").filter(":last");f=j(f)[0];q.length&&0<=d&&(h=q.eq(d).find("tr").index(k),l=f.cellIndex,q=a.config.cache[d].normalized[h].length-1,a.config.cache[d].row[a.config.cache[d].normalized[h][q]]= k,a.config.cache[d].normalized[h][l]=b.parsers[l].format(p(a,f,l),a,f,l),I(c,g,e))}).bind("addRows.tablesorter",function(d,g,e,q){var j=g.filter("tr").length,l=[],k=g[0].cells.length,n=c.find("tbody").index(g.closest("tbody"));b.parsers||(b.parsers=h(a));for(d=0;d<j;d++){for(f=0;f<k;f++)l[f]=b.parsers[f].format(p(a,g[d].cells[f],f),a,g[d].cells[f],f);l.push(b.cache[n].row.length);b.cache[n].row.push([g[d]]);b.cache[n].normalized.push(l);l=[]}I(c,e,q)}).bind("sorton.tablesorter",function(b,d,f,g){c.trigger("sortStart", this);var e,q,l,h=a.config;b=d||h.sortList;h.sortList=[];j.each(b,function(a,b){e=[parseInt(b[0],10),parseInt(b[1],10)];if(l=h.headerList[e[0]])h.sortList.push(e),q=j.inArray(e[1],l.order),l.count=0<=q?q:e[1]%(h.sortReset?3:2)});F(a);G(a);m(a,g);"function"===typeof f&&f(a)}).bind("appendCache.tablesorter",function(b,c,d){m(a,d);"function"===typeof c&&c(a)}).bind("applyWidgetId.tablesorter",function(c,d){g.getWidgetById(d).format(a,b,b.widgetOptions)}).bind("applyWidgets.tablesorter",function(b,c){g.applyWidget(a, c)}).bind("refreshWidgets.tablesorter",function(b,c,d){g.refreshWidgets(a,c,d)}).bind("destroy.tablesorter",function(b,c,d){g.destroy(a,c,d)});b.supportsDataObject&&"undefined"!==typeof c.data().sortlist?b.sortList=c.data().sortlist:x&&(c.metadata()&&c.metadata().sortlist)&&(b.sortList=c.metadata().sortlist);g.applyWidget(a,!0);0<b.sortList.length?c.trigger("sorton",[b.sortList,{},!b.initWidgets]):b.initWidgets&&g.applyWidget(a);b.showProcessing&&c.unbind("sortBegin.tablesorter sortEnd.tablesorter").bind("sortBegin.tablesorter sortEnd.tablesorter", function(b){g.isProcessing(a,"sortBegin"===b.type)});a.hasInitialized=!0;b.debug&&g.benchmark("Overall initialization time",j.data(a,"startoveralltimer"));c.trigger("tablesorter-initialized",a);"function"===typeof b.initialized&&b.initialized(a)})};g.isProcessing=function(d,c,a){var b=d.config;d=a||j(d).find("."+b.cssHeader);c?(0<b.sortList.length&&(d=d.filter(function(){return this.sortDisabled?!1:g.isValueInArray(parseFloat(j(this).attr("data-column")),b.sortList)})),d.addClass(b.cssProcessing)): d.removeClass(b.cssProcessing)};g.processTbody=function(d,c,a){if(a)return c.before('<span class="tablesorter-savemyplace"/>'),d=j.fn.detach?c.detach():c.remove();d=j(d).find("span.tablesorter-savemyplace");c.insertAfter(d);d.remove()};g.clearTableBody=function(d){d.config.$tbodies.empty()};g.destroy=function(d,c,a){if(d.hasInitialized){g.refreshWidgets(d,!0,!0);var b=j(d),e=d.config,f=b.find("thead:first"),h=f.find("tr."+e.cssHeaderRow).removeClass(e.cssHeaderRow),u=b.find("tfoot:first > tr").children("th, td"); f.find("tr").not(h).remove();b.removeData("tablesorter").unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave sortBegin sortEnd ".split(" ").join(".tablesorter "));e.$headers.add(u).removeClass(e.cssHeader+" "+e.cssAsc+" "+e.cssDesc).removeAttr("data-column");h.find(e.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter");h.children().each(function(a){j(this).html(e.headerContent[a])});!1!==c&&b.removeClass(e.tableClass+ " tablesorter-"+e.theme);d.hasInitialized=!1;"function"===typeof a&&a(d)}};g.regex=[/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,/^0x[0-9a-f]+$/i];g.sortText=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo],h=g.regex;if(""===c&&0!==f)return"boolean"===typeof f?f?-1:1:-f||-1;if(""===a&&0!==f)return"boolean"===typeof f? f?1:-1:f||1;if("function"===typeof e.textSorter)return e.textSorter(c,a,d,b);d=c.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");b=a.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");c=parseInt(c.match(h[2]),16)||1!==d.length&&c.match(h[1])&&Date.parse(c);if(a=parseInt(a.match(h[2]),16)||c&&a.match(h[1])&&Date.parse(a)||null){if(c<a)return-1;if(c>a)return 1}e=Math.max(d.length,b.length);for(c=0;c<e;c++){a=isNaN(d[c])?d[c]||0:parseFloat(d[c])|| 0;h=isNaN(b[c])?b[c]||0:parseFloat(b[c])||0;if(isNaN(a)!==isNaN(h))return isNaN(a)?1:-1;typeof a!==typeof h&&(a+="",h+="");if(a<h)return-1;if(a>h)return 1}return 0};g.sortTextDesc=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo];return""===c&&0!==f?"boolean"===typeof f?f?-1:1:f||1:""===a&&0!==f?"boolean"===typeof f?f?1:-1:-f||-1:"function"===typeof e.textSorter?e.textSorter(a,c,d,b):g.sortText(d,a,c)};g.getTextValue=function(d,c,a){if(c){var b=d.length,e=c+a; for(c=0;c<b;c++)e+=d.charCodeAt(c);return a*e}return 0};g.sortNumeric=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b?b?-1:1:-b||-1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:b||1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return c-a};g.sortNumericDesc=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b? b?-1:1:b||1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:-b||-1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return a-c};g.characterEquivalents={a:"\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5",A:"\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5",c:"\u00e7\u0107\u010d",C:"\u00c7\u0106\u010c",e:"\u00e9\u00e8\u00ea\u00eb\u011b\u0119",E:"\u00c9\u00c8\u00ca\u00cb\u011a\u0118",i:"\u00ed\u00ec\u0130\u00ee\u00ef\u0131",I:"\u00cd\u00cc\u0130\u00ce\u00cf",o:"\u00f3\u00f2\u00f4\u00f5\u00f6", O:"\u00d3\u00d2\u00d4\u00d5\u00d6",ss:"\u00df",SS:"\u1e9e",u:"\u00fa\u00f9\u00fb\u00fc\u016f",U:"\u00da\u00d9\u00db\u00dc\u016e"};g.replaceAccents=function(d){var c,a="[",b=g.characterEquivalents;if(!g.characterRegex){g.characterRegexArray={};for(c in b)"string"===typeof c&&(a+=b[c],g.characterRegexArray[c]=RegExp("["+b[c]+"]","g"));g.characterRegex=RegExp(a+"]")}if(g.characterRegex.test(d))for(c in b)"string"===typeof c&&(d=d.replace(g.characterRegexArray[c],c));return d};g.isValueInArray=function(d, c){var a,b=c.length;for(a=0;a<b;a++)if(c[a][0]===d)return!0;return!1};g.addParser=function(d){var c,a=g.parsers.length,b=!0;for(c=0;c<a;c++)g.parsers[c].id.toLowerCase()===d.id.toLowerCase()&&(b=!1);b&&g.parsers.push(d)};g.getParserById=function(d){var c,a=g.parsers.length;for(c=0;c<a;c++)if(g.parsers[c].id.toLowerCase()===d.toString().toLowerCase())return g.parsers[c];return!1};g.addWidget=function(d){g.widgets.push(d)};g.getWidgetById=function(d){var c,a,b=g.widgets.length;for(c=0;c<b;c++)if((a= g.widgets[c])&&a.hasOwnProperty("id")&&a.id.toLowerCase()===d.toLowerCase())return a};g.applyWidget=function(d,c){var a=d.config,b=a.widgetOptions,e=a.widgets.sort().reverse(),f,h,m,n=e.length;h=j.inArray("zebra",a.widgets);0<=h&&(a.widgets.splice(h,1),a.widgets.push("zebra"));a.debug&&(f=new Date);for(h=0;h<n;h++)(m=g.getWidgetById(e[h]))&&(!0===c&&m.hasOwnProperty("init")?m.init(d,m,a,b):!c&&m.hasOwnProperty("format")&&m.format(d,a,b));a.debug&&u("Completed "+(!0===c?"initializing":"applying")+ " widgets",f)};g.refreshWidgets=function(d,c,a){var b,h=d.config,f=h.widgets,l=g.widgets,m=l.length;for(b=0;b<m;b++)if(l[b]&&l[b].id&&(c||0>j.inArray(l[b].id,f)))h.debug&&e("Refeshing widgets: Removing "+l[b].id),l[b].hasOwnProperty("remove")&&l[b].remove(d,h,h.widgetOptions);!0!==a&&g.applyWidget(d,c)};g.getData=function(d,c,a){var b="";d=j(d);var e,f;if(!d.length)return"";e=j.metadata?d.metadata():!1;f=" "+(d.attr("class")||"");"undefined"!==typeof d.data(a)||"undefined"!==typeof d.data(a.toLowerCase())? b+=d.data(a)||d.data(a.toLowerCase()):e&&"undefined"!==typeof e[a]?b+=e[a]:c&&"undefined"!==typeof c[a]?b+=c[a]:" "!==f&&f.match(" "+a+"-")&&(b=f.match(RegExp(" "+a+"-(\\w+)"))[1]||"");return j.trim(b)};g.formatFloat=function(d,c){if("string"!==typeof d||""===d)return d;var a;d=(c&&c.config?!1!==c.config.usNumberFormat:"undefined"!==typeof c?c:1)?d.replace(/,/g,""):d.replace(/[\s|\.]/g,"").replace(/,/g,".");/^\s*\([.\d]+\)/.test(d)&&(d=d.replace(/^\s*\(/,"-").replace(/\)/,""));a=parseFloat(d);return isNaN(a)? j.trim(d):a};g.isDigit=function(d){return isNaN(d)?/^[\-+(]?\d+[)]?$/.test(d.toString().replace(/[,.'"\s]/g,"")):!0}}});var h=j.tablesorter;j.fn.extend({tablesorter:h.construct});h.addParser({id:"text",is:function(){return!0},format:function(e,u){var p=u.config;e=j.trim(p.ignoreCase?e.toLocaleLowerCase():e);return p.sortLocaleCompare?h.replaceAccents(e):e},type:"text"});h.addParser({id:"currency",is:function(e){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((e|| "").replace(/[,. ]/g,""))},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"ipAddress",is:function(e){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(e)},format:function(e,j){var p,r=e.split("."),s="",m=r.length;for(p=0;p<m;p++)s+=("00"+r[p]).slice(-3);return h.formatFloat(s,j)},type:"numeric"});h.addParser({id:"url",is:function(e){return/^(https?|ftp|file):\/\//.test(e)},format:function(e){return j.trim(e.replace(/(https?|ftp|file):\/\//, ""))},type:"text"});h.addParser({id:"isoDate",is:function(e){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(e)},format:function(e,j){return h.formatFloat(""!==e?(new Date(e.replace(/-/g,"/"))).getTime()||"":"",j)},type:"numeric"});h.addParser({id:"percent",is:function(e){return/(\d\s?%|%\s?\d)/.test(e)},format:function(e,j){return h.formatFloat(e.replace(/%/g,""),j)},type:"numeric"});h.addParser({id:"usLongDate",is:function(e){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(e)|| /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(e)},format:function(e,j){return h.formatFloat((new Date(e.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"shortDate",is:function(e){return/^(\d{1,2}|\d{4})[\/\-\,\.\s+]\d{1,2}[\/\-\.\,\s+](\d{1,2}|\d{4})$/.test(e)},format:function(e,j,p,r){p=j.config;var s=p.headerList[r],m=s.shortDateFormat;"undefined"===typeof m&&(m=s.shortDateFormat=h.getData(s,p.headers[r],"dateFormat")||p.dateFormat);e=e.replace(/\s+/g," ").replace(/[\-|\.|\,]/g, "/");"mmddyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===m&&(e=e.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3"));return h.formatFloat((new Date(e)).getTime()||"",j)},type:"numeric"});h.addParser({id:"time",is:function(e){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(e)},format:function(e,j){return h.formatFloat((new Date("2000/01/01 "+e.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"digit",is:function(e){return h.isDigit(e)},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"metadata",is:function(){return!1},format:function(e,h,p){e=h.config;e=!e.parserMetadataName?"sortValue":e.parserMetadataName;return j(p).metadata()[e]},type:"numeric"});h.addWidget({id:"zebra",format:function(e,u,p){var r,s,m,F,G,C,I=RegExp(u.cssChildRow,"i"),g=u.$tbodies;u.debug&&(G= new Date);for(e=0;e<g.length;e++)r=g.eq(e),C=r.children("tr").length,1<C&&(m=0,r=r.children("tr:visible"),r.each(function(){s=j(this);I.test(this.className)||m++;F=0===m%2;s.removeClass(p.zebra[F?1:0]).addClass(p.zebra[F?0:1])}));u.debug&&h.benchmark("Applying Zebra widget",G)},remove:function(e,h){var p,r,s=h.$tbodies,m=(h.widgetOptions.zebra||["even","odd"]).join(" ");for(p=0;p<s.length;p++)r=j.tablesorter.processTbody(e,s.eq(p),!0),r.children().removeClass(m),j.tablesorter.processTbody(e,r,!1)}})}(jQuery);
+</script>
+<script type="text/javascript">
+/*
+    Copyright 2008-2013
+        Matthias Ehmann,
+        Michael Gerhaeuser,
+        Carsten Miller,
+        Bianca Valentin,
+        Alfred Wassermann,
+        Peter Wilfahrt
+    Dual licensed under the Apache License Version 2.0, or LGPL Version 3 licenses.
+    You should have received a copy of the GNU Lesser General Public License
+    along with JSXCompressor.  If not, see <http://www.gnu.org/licenses/>.
+    You should have received a copy of the Apache License along with JSXCompressor.
+    If not, see <http://www.apache.org/licenses/>.
+*/
+(function(){var e,r,n;(function(t){function o(e,r){return y.call(e,r)}function i(e,r){var n,t,o,i,u,f,a,c,s,l,p=r&&r.split("/"),d=k.map,g=d&&d["*"]||{};if(e&&"."===e.charAt(0))if(r){for(p=p.slice(0,p.length-1),e=p.concat(e.split("/")),c=0;e.length>c;c+=1)if(l=e[c],"."===l)e.splice(c,1),c-=1;else if(".."===l){if(1===c&&(".."===e[2]||".."===e[0]))break;c>0&&(e.splice(c-1,2),c-=2)}e=e.join("/")}else 0===e.indexOf("./")&&(e=e.substring(2));if((p||g)&&d){for(n=e.split("/"),c=n.length;c>0;c-=1){if(t=n.slice(0,c).join("/"),p)for(s=p.length;s>0;s-=1)if(o=d[p.slice(0,s).join("/")],o&&(o=o[t])){i=o,u=c;break}if(i)break;!f&&g&&g[t]&&(f=g[t],a=c)}!i&&f&&(i=f,u=a),i&&(n.splice(0,u,i),e=n.join("/"))}return e}function u(e,r){return function(){return d.apply(t,v.call(arguments,0).concat([e,r]))}}function f(e){return function(r){return i(r,e)}}function a(e){return function(r){b[e]=r}}function c(e){if(o(m,e)){var r=m[e];delete m[e],C[e]=!0,p.apply(t,r)}if(!o(b,e)&&!o(C,e))throw Error("No "+e);return b[e]}function s(e){var r,n=e?e.indexOf("!"):-1;return n>-1&&(r=e.substring(0,n),e=e.substring(n+1,e.length)),[r,e]}function l(e){return function(){return k&&k.config&&k.config[e]||{}}}var p,d,g,h,b={},m={},k={},C={},y=Object.prototype.hasOwnProperty,v=[].slice;g=function(e,r){var n,t=s(e),o=t[0];return e=t[1],o&&(o=i(o,r),n=c(o)),o?e=n&&n.normalize?n.normalize(e,f(r)):i(e,r):(e=i(e,r),t=s(e),o=t[0],e=t[1],o&&(n=c(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:n}},h={require:function(e){return u(e)},exports:function(e){var r=b[e];return r!==void 0?r:b[e]={}},module:function(e){return{id:e,uri:"",exports:b[e],config:l(e)}}},p=function(e,r,n,i){var f,s,l,p,d,k,y=[];if(i=i||e,"function"==typeof n){for(r=!r.length&&n.length?["require","exports","module"]:r,d=0;r.length>d;d+=1)if(p=g(r[d],i),s=p.f,"require"===s)y[d]=h.require(e);else if("exports"===s)y[d]=h.exports(e),k=!0;else if("module"===s)f=y[d]=h.module(e);else if(o(b,s)||o(m,s)||o(C,s))y[d]=c(s);else{if(!p.p)throw Error(e+" missing "+s);p.p.load(p.n,u(i,!0),a(s),{}),y[d]=b[s]}l=n.apply(b[e],y),e&&(f&&f.exports!==t&&f.exports!==b[e]?b[e]=f.exports:l===t&&k||(b[e]=l))}else e&&(b[e]=n)},e=r=d=function(e,r,n,o,i){return"string"==typeof e?h[e]?h[e](r):c(g(e,r).f):(e.splice||(k=e,r.splice?(e=r,r=n,n=null):e=t),r=r||function(){},"function"==typeof n&&(n=o,o=i),o?p(t,e,r,n):setTimeout(function(){p(t,e,r,n)},4),d)},d.config=function(e){return k=e,k.deps&&d(k.deps,k.callback),d},n=function(e,r,n){r.splice||(n=r,r=[]),o(b,e)||o(m,e)||(m[e]=[e,r,n])},n.amd={jQuery:!0}})(),n("../node_modules/almond/almond",function(){}),n("jxg",[],function(){var e={};return"object"!=typeof JXG||JXG.extend||(e=JXG),e.extend=function(e,r,n,t){var o,i;n=n||!1,t=t||!1;for(o in r)(!n||n&&r.hasOwnProperty(o))&&(i=t?o.toLowerCase():o,e[i]=r[o])},e.extend(e,{boards:{},readers:{},elements:{},registerElement:function(e,r){e=e.toLowerCase(),this.elements[e]=r},registerReader:function(e,r){var n,t;for(n=0;r.length>n;n++)t=r[n].toLowerCase(),"function"!=typeof this.readers[t]&&(this.readers[t]=e)},shortcut:function(e,r){return function(){return e[r].apply(this,arguments)}},getRef:function(e,r){return e.select(r)},getReference:function(e,r){return e.select(r)},debugInt:function(){var e,r;for(e=0;arguments.length>e;e++)r=arguments[e],"object"==typeof window&&window.console&&console.log?console.log(r):"object"==typeof document&&document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=r+"<br/>")},debugWST:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&(e.debugInt("stacktrace"),e.debugInt(r.stack.split("\n").slice(1).join("\n")))},debugLine:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&e.debugInt("Called from",r.stack.split("\n").slice(2,3).join("\n"))},debug:function(){e.debugInt.apply(this,arguments)}}),e}),n("utils/zip",["jxg"],function(e){var r=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],t=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],i=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=256;return e.Util=e.Util||{},e.Util.Unzip=function(a){function c(){return q+=8,N>R?a[R++]:-1}function s(){T=1}function l(){var e;return q++,e=1&T,T>>=1,0===T&&(T=c(),e=1&T,T=128|T>>1),e}function p(e){for(var n=0,t=e;t--;)n=n<<1|l();return e&&(n=r[n]>>8-e),n}function d(){L=0}function g(e){A++,E[L++]=e,z.push(String.fromCharCode(e)),32768===L&&(L=0)}function h(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function b(){for(;;){if(H[P]>=w)return-1;if(U[H[P]]===P)return H[P]++;H[P]++}}function m(){var e,r=F[X];if(17===P)return-1;if(X++,P++,e=b(),e>=0)r.b0=e;else if(r.b0=32768,m())return-1;if(e=b(),e>=0)r.b1=e,r.jump=null;else if(r.b1=32768,r.jump=F[X],r.jumppos=X,m())return-1;return P--,0}function k(e,r,n){var t;for(F=e,X=0,U=n,w=r,t=0;17>t;t++)H[t]=0;return P=0,m()?-1:0}function C(e){for(var r,n,t,o=0,i=e[o];;)if(t=l()){if(!(32768&i.b1))return i.b1;for(i=i.jump,r=e.length,n=0;r>n;n++)if(e[n]===i){o=n;break}}else{if(!(32768&i.b0))return i.b0;o++,i=e[o]}}function y(){var f,a,b,m,y,v,j,A,x,U,w,S,z,I,O,B,N;do if(f=l(),b=p(2),0===b)for(s(),U=c(),U|=c()<<8,S=c(),S|=c()<<8,65535&(U^~S)&&e.debug("BlockLen checksum mismatch\n");U--;)a=c(),g(a);else if(1===b)for(;;)if(y=r[p(7)]>>1,y>23?(y=y<<1|l(),y>199?(y-=128,y=y<<1|l()):(y-=48,y>143&&(y+=136))):y+=256,256>y)g(y);else{if(256===y)break;for(y-=257,x=p(t[y])+n[y],y=r[p(5)]>>3,i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y],y=0;x>y;y++)a=E[32767&L-w],g(a)}else if(2===b){for(j=Array(320),I=257+p(5),O=1+p(5),B=4+p(4),y=0;19>y;y++)j[y]=0;for(y=0;B>y;y++)j[u[y]]=p(3);for(x=J.length,m=0;x>m;m++)J[m]=new h;if(k(J,19,j,0))return d(),1;for(z=I+O,m=0,N=-1;z>m;)if(N++,y=C(J),16>y)j[m++]=y;else if(16===y){if(y=3+p(2),m+y>z)return d(),1;for(v=m?j[m-1]:0;y--;)j[m++]=v}else{if(y=17===y?3+p(3):11+p(7),m+y>z)return d(),1;for(;y--;)j[m++]=0}for(x=G.length,m=0;x>m;m++)G[m]=new h;if(k(G,I,j,0))return d(),1;for(x=G.length,m=0;x>m;m++)J[m]=new h;for(A=[],m=I;j.length>m;m++)A[m-I]=j[m];if(k(J,O,A,0))return d(),1;for(;;)if(y=C(G),y>=256){if(y-=256,0===y)break;for(y-=1,x=p(t[y])+n[y],y=C(J),i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y];x--;)a=E[32767&L-w],g(a)}else g(y)}while(!f);return d(),s(),0}function v(){var e,r,n,t,o,i,u,a,s=[];if(z=[],B=!1,s[0]=c(),s[1]=c(),120===s[0]&&218===s[1]&&(y(),O[I]=[z.join(""),"geonext.gxt"],I++),31===s[0]&&139===s[1]&&(S(),O[I]=[z.join(""),"file"],I++),80===s[0]&&75===s[1]&&(B=!0,s[2]=c(),s[3]=c(),3===s[2]&&4===s[3])){for(s[0]=c(),s[1]=c(),j=c(),j|=c()<<8,a=c(),a|=c()<<8,c(),c(),c(),c(),u=c(),u|=c()<<8,u|=c()<<16,u|=c()<<24,i=c(),i|=c()<<8,i|=c()<<16,i|=c()<<24,o=c(),o|=c()<<8,o|=c()<<16,o|=c()<<24,t=c(),t|=c()<<8,n=c(),n|=c()<<8,e=0,M=[];t--;)r=c(),"/"===r|":"===r?e=0:f-1>e&&(M[e++]=String.fromCharCode(r));for(x||(x=M),e=0;n>e;)r=c(),e++;A=0,8===a&&(y(),O[I]=Array(2),O[I][0]=z.join(""),O[I][1]=M.join(""),I++),S()}}var j,A,x,U,w,S,z=[],I=0,O=[],E=Array(32768),L=0,B=!1,N=a.length,R=0,T=1,q=0,G=Array(288),J=Array(32),X=0,F=null,P=(Array(64),Array(64),0),H=Array(17),M=[];H[0]=0,S=function(){var e,r,n,t,o,i,u=[];if(8&j&&(u[0]=c(),u[1]=c(),u[2]=c(),u[3]=c(),80===u[0]&&75===u[1]&&7===u[2]&&8===u[3]?(e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24):e=u[0]|u[1]<<8|u[2]<<16|u[3]<<24,r=c(),r|=c()<<8,r|=c()<<16,r|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24),B&&v(),u[0]=c(),8===u[0]){if(j=c(),c(),c(),c(),c(),c(),t=c(),4&j)for(u[0]=c(),u[2]=c(),P=u[0]+256*u[1],o=0;P>o;o++)c();if(8&j)for(o=0,M=[],i=c();i;)("7"===i||":"===i)&&(o=0),f-1>o&&(M[o++]=i),i=c();if(16&j)for(i=c();i;)i=c();2&j&&(c(),c()),y(),e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24,B&&v()}},e.Util.Unzip.prototype.unzipFile=function(e){var r;for(this.unzip(),r=0;O.length>r;r++)if(O[r][1]===e)return O[r][0];return""},e.Util.Unzip.prototype.unzip=function(){return v(),O}},e.Util}),n("utils/encoding",["jxg"],function(e){var r=0,n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];return e.Util=e.Util||{},e.Util.UTF8={encode:function(e){var r,n,t="",o=e.length;if(e=e.replace(/\r\n/g,"\n"),"function"==typeof unescape&&"function"==typeof encodeURIComponent)return unescape(encodeURIComponent(e));for(r=0;o>r;r++)n=e.charCodeAt(r),128>n?t+=String.fromCharCode(n):n>127&&2048>n?(t+=String.fromCharCode(192|n>>6),t+=String.fromCharCode(128|63&n)):(t+=String.fromCharCode(224|n>>12),t+=String.fromCharCode(128|63&n>>6),t+=String.fromCharCode(128|63&n));return t},decode:function(e){var t,o,i,u=0,f=0,a=r,c=[],s=e.length,l=[];for(t=0;s>t;t++)o=e.charCodeAt(t),i=n[o],f=a!==r?63&o|f<<6:255>>i&o,a=n[256+a+i],a===r&&(f>65535?c.push(55232+(f>>10),56320+(1023&f)):c.push(f),u++,0===u%1e4&&(l.push(String.fromCharCode.apply(null,c)),c=[]));return l.push(String.fromCharCode.apply(null,c)),l.join("")},asciiCharCodeAt:function(e,r){var n=e.charCodeAt(r);if(n>255)switch(n){case 8364:n=128;break;case 8218:n=130;break;case 402:n=131;break;case 8222:n=132;break;case 8230:n=133;break;case 8224:n=134;break;case 8225:n=135;break;case 710:n=136;break;case 8240:n=137;break;case 352:n=138;break;case 8249:n=139;break;case 338:n=140;break;case 381:n=142;break;case 8216:n=145;break;case 8217:n=146;break;case 8220:n=147;break;case 8221:n=148;break;case 8226:n=149;break;case 8211:n=150;break;case 8212:n=151;break;case 732:n=152;break;case 8482:n=153;break;case 353:n=154;break;case 8250:n=155;break;case 339:n=156;break;case 382:n=158;break;case 376:n=159;break;default:}return n}},e.Util.UTF8}),n("utils/base64",["jxg","utils/encoding"],function(e,r){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.Util=e.Util||{},e.Util.Base64={encode:function(e){var t,o,i,u,f,a,c,s=[],l=0;for(e=r.encode(e);e.length>l;)t=e.charCodeAt(l++),o=e.charCodeAt(l++),i=e.charCodeAt(l++),u=t>>2,f=(3&t)<<4|o>>4,a=(15&o)<<2|i>>6,c=63&i,isNaN(o)?a=c=64:isNaN(i)&&(c=64),s.push([n.charAt(u),n.charAt(f),n.charAt(a),n.charAt(c)].join(""));return s.join("")},decode:function(e,t){var o,i,u,f,a,c,s,l=[],p=0,d=e.length;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");d>p;)f=n.indexOf(e.charAt(p++)),a=n.indexOf(e.charAt(p++)),c=n.indexOf(e.charAt(p++)),s=n.indexOf(e.charAt(p++)),o=f<<2|a>>4,i=(15&a)<<4|c>>2,u=(3&c)<<6|s,l.push(String.fromCharCode(o)),64!==c&&l.push(String.fromCharCode(i)),64!==s&&l.push(String.fromCharCode(u));return l=l.join(""),t&&(l=r.decode(l)),l},decodeAsArray:function(e){var r,n=this.decode(e),t=[],o=n.length;for(r=0;o>r;r++)t[r]=n.charCodeAt(r);return t}},e.Util.Base64}),n("../build/compressor.deps.js",["jxg","utils/zip","utils/base64"],function(e,r,n){return e.decompress=function(e){return unescape(new r.Unzip(n.decodeAsArray(e)).unzip()[0][0])},e}),window.JXG=r("../build/compressor.deps.js")})();
+</script>
+<script type="text/javascript">
+window.fileLoading = (function () {
+    var fileLoadingCallbacks = {};
+    var timestamp = new Date().getTime();
+    function loadKeywordsFile(filename, callback) {
+        fileLoadingCallbacks[filename] = callback;
+        var script = document.createElement('script');
+        script.type = 'text/javascript';
+        // timestamp as an argument to prevent browsers from caching scripts
+        // see: http://stackoverflow.com/questions/866619/how-to-force-ie-to-reload-javascript
+        script.src = filename+'?time='+timestamp;
+        document.getElementsByTagName("head")[0].appendChild(script);
+    }
+    function getCallbackHandlerForKeywords(parent) {
+        var callableList = [];
+        return function (callable) {
+            if (!parent.isChildrenLoaded) {
+                callableList.push(callable);
+                if (callableList.length == 1) {
+                    loadKeywordsFile(parent.childFileName, function () {
+                        parent.isChildrenLoaded = true;
+                        for (var i = 0; i < callableList.length; i++) {
+                            callableList[i]();
+                        }
+                    });
+                }
+            } else {
+                callable();
+            }
+        }
+    }
+    function notifyFileLoaded(filename) {
+        fileLoadingCallbacks[filename]();
+    }
+    return {
+        getCallbackHandlerForKeywords: getCallbackHandlerForKeywords,
+        notify: notifyFileLoaded
+    }
+}());
+</script>
+<script type="text/javascript">
+window.model = (function () {
+    function Suite(data) {
+        var suite = createModelObject(data);
+        suite.source = data.source;
+        suite.relativeSource = data.relativeSource;
+        suite.fullName = data.parent ? data.parent.fullName + '.' + data.name : data.name;
+        setStats(suite, data.statistics);
+        suite.metadata = data.metadata;
+        suite.populateKeywords = createIterablePopulator('Keyword');
+        suite.populateTests = createIterablePopulator('Test');
+        suite.populateSuites = createIterablePopulator('Suite');
+        suite.childrenNames = ['keyword', 'suite', 'test'];
+        suite.callWhenChildrenReady = function (callable) { callable(); };
+        suite.message = data.message;
+        suite.children = function () {
+            return suite.keywords().concat(suite.tests()).concat(suite.suites());
+        };
+        suite.searchTests = function (predicate) {
+            var tests = [];
+            var suites = this.suites();
+            for (var i in suites)
+                tests = tests.concat(suites[i].searchTests(predicate));
+            return tests.concat(util.filter(this.tests(), predicate));
+        };
+        suite.searchTestsInSuite = function (pattern, matcher) {
+            if (!matcher)
+                matcher = util.Matcher(pattern);
+            if (matcher.matchesAny([suite.fullName, suite.name]))
+                return suite.allTests();
+            var tests = [];
+            var suites = this.suites();
+            for (var i in suites)
+                tests = tests.concat(suites[i].searchTestsInSuite(pattern, matcher));
+            return tests;
+        }
+        suite.searchTestsByTag = function (tag) {
+            return suite.searchTests(function (test) {
+                if (tag.combined)
+                    return containsTagPattern(test.tags, tag.combined);
+                return containsTag(test.tags, tag.label);
+            });
+        };
+        suite.findSuiteByName = function (name) {
+            return findSuiteByName(suite, name);
+        };
+        suite.allTests = function () {
+            return suite.searchTests(function (test) {
+                return true;
+            });
+        };
+        suite.criticalTests = function () {
+            return suite.searchTests(function (test) {
+                return test.isCritical;
+            });
+        };
+        return suite;
+    }
+    function containsTag(testTags, tagname) {
+        testTags = util.map(testTags, util.normalize);
+        return util.contains(testTags, util.normalize(tagname));
+    }
+    function containsTagPattern(testTags, pattern) {
+        var patterns;
+        if (pattern.indexOf('NOT') != -1) {
+            patterns = pattern.split('NOT');
+            return containsTagPattern(testTags, patterns[0]) &&
+                util.all(util.map(patterns.slice(1), function (p) {
+                    return !containsTagPattern(testTags, p);
+                }));
+        }
+        if (pattern.indexOf('OR') != -1) {
+            patterns = pattern.split('OR');
+            return util.any(util.map(patterns, function (p) {
+                return containsTagPattern(testTags, p);
+            }));
+        }
+        if (pattern.indexOf('AND') != -1) {
+            patterns = pattern.split('AND');
+            return util.all(util.map(patterns, function (p) {
+                return containsTagPattern(testTags, p);
+            }));
+        }
+        return util.Matcher(pattern).matchesAny(testTags);
+    }
+    function findSuiteByName(suite, name) {
+        if (suite.fullName == name)
+            return suite;
+        var subSuites = suite.suites();
+        for (var i in subSuites) {
+            var match = findSuiteByName(subSuites[i], name);
+            if (match)
+                return match;
+        }
+        return null;
+    }
+    function setStats(suite, stats) {
+        for (var name in stats) {
+            suite[name] = stats[name];
+        }
+    }
+    function createModelObject(data) {
+        return {
+            name: data.name,
+            doc: data.doc,
+            status: data.status,
+            times: data.times,
+            id: data.parent ? data.parent.id + '-' + data.id : data.id
+        };
+    }
+    function Test(data) {
+        var test = createModelObject(data);
+        test.fullName = data.parent.fullName + '.' + test.name;
+        test.formatParentName = function () { return util.formatParentName(test); };
+        test.timeout = data.timeout;
+        test.populateKeywords = createIterablePopulator('Keyword');
+        test.childrenNames = ['keyword'];
+        test.isChildrenLoaded = data.isChildrenLoaded;
+        test.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(test);
+        test.children = function () {
+            if (test.isChildrenLoaded)
+                return test.keywords();
+        };
+        test.isCritical = data.isCritical;
+        test.tags = data.tags;
+        test.message = data.message;
+        test.matchesTagPattern = function (pattern) {
+            return containsTagPattern(test.tags, pattern);
+        };
+        test.matchesNamePattern = function (pattern) {
+            return util.Matcher(pattern).matchesAny([test.name, test.fullName]);
+        };
+        return test;
+    }
+    function Keyword(data) {
+        var kw = createModelObject(data);
+        kw.type = data.type;
+        kw.arguments = data.args;
+        kw.timeout = data.timeout;
+        kw.populateMessages = createIterablePopulator('Message');
+        kw.populateKeywords = createIterablePopulator('Keyword');
+        kw.childrenNames = ['keyword', 'message'];
+        kw.isChildrenLoaded = data.isChildrenLoaded;
+        kw.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(kw);
+        kw.children = function () {
+            if (kw.isChildrenLoaded)
+                return kw.keywords();
+        };
+        return kw;
+    }
+    function Message(level, date, text, link) {
+        return {
+            level: level,
+            time: util.timeFromDate(date),
+            date: util.dateFromDate(date),
+            text: text,
+            link: link
+        };
+    }
+    function Times(timedata) {
+        var start = timedata[0];
+        var end = timedata[1];
+        var elapsed = timedata[2];
+        return {
+            elapsedMillis: elapsed,
+            elapsedTime: util.formatElapsed(elapsed),
+            startTime: util.dateTimeFromDate(start),
+            endTime:  util.dateTimeFromDate(end)
+        };
+    }
+    function createIterablePopulator(name) {
+        return function (populator) {
+            populateIterable(this, name, populator);
+        };
+    }
+    function populateIterable(obj, name, populator) {
+        name = name.toLowerCase() + 's';
+        obj[name] = createGetAllFunction(populator.numberOfItems, populator.creator);
+    }
+    function createGetAllFunction(numberOfElements, creator) {
+        var cached = null;
+        return function () {
+            if (cached === null) {
+                cached = [];
+                for (var i = 0; i < numberOfElements(); i++) {
+                    cached.push(creator(i));
+                }
+            }
+            return cached;
+        };
+    }
+    return {
+        Suite: Suite,
+        Test: Test,
+        Keyword: Keyword,
+        Message: Message,
+        Times: Times,
+        containsTag: containsTag,  // Exposed for tests
+        containsTagPattern: containsTagPattern  // Exposed for tests
+    };
+}());
+window.stats = (function () {
+    function Statistics(totalElems, tagElems, suiteElems) {
+        return {total: util.map(totalElems, totalStatElem),
+                tag:   util.map(tagElems, tagStatElem),
+                suite: util.map(suiteElems, suiteStatElem)};
+    }
+    function statElem(stat) {
+        stat.total = stat.pass + stat.fail;
+        var percents = calculatePercents(stat.total, stat.pass, stat.fail);
+        stat.passPercent = percents[0];
+        stat.failPercent = percents[1];
+        var widths = calculateWidths(stat.passPercent, stat.failPercent);
+        stat.passWidth = widths[0];
+        stat.failWidth = widths[1];
+        return stat;
+    }
+    function totalStatElem(data) {
+        var stat = statElem(data);
+        stat.type = stat.label == 'Critical Tests' ? 'critical' : 'all';
+        return stat;
+    }
+    function tagStatElem(data) {
+        var stat = statElem(data);
+        stat.links = parseLinks(stat.links);
+        return stat;
+    }
+    function suiteStatElem(data) {
+        var stat = statElem(data);
+        stat.fullName = stat.label;
+        stat.formatParentName = function () { return util.formatParentName(stat); };
+        // compatibility with RF 2.5 outputs
+        if (!stat.name)
+            stat.name = stat.label.split('.').pop();
+        return stat;
+    }
+    function parseLinks(linksData) {
+        if (!linksData)
+            return [];
+        return util.map(linksData.split(':::'), function (link) {
+                var index = link.indexOf(':');
+                return {title: link.slice(0, index), url: link.slice(index+1)};
+            });
+    }
+    function calculatePercents(total, passed, failed) {
+        if (total == 0)
+            return [0.0, 0.0];
+        var pass = 100.0 * passed / total;
+        var fail = 100.0 * failed / total;
+        if (pass > 0 && pass < 0.1)
+            return [0.1, 99.9];
+        if (fail > 0 && fail < 0.1)
+            return [99.9, 0.1];
+        return [Math.round(pass*10)/10, Math.round(fail*10)/10];
+    }
+    function calculateWidths(num1, num2) {
+        if (num1 + num2 == 0)
+            return [0.0, 0.0];
+        // Make small percentages better visible
+        if (num1 > 0 && num1 < 1)
+            return [1.0, 99.0];
+        if (num2 > 0 && num2 < 1)
+            return [99.0, 1.0];
+        // Handle situation where both are rounded up
+        while (num1 + num2 > 100) {
+            if (num1 > num2)
+                num1 -= 0.1;
+            if (num2 > num1)
+                num2 -= 0.1;
+        }
+        return [num1, num2];
+    }
+    return {
+        Statistics: Statistics
+    };
+}());
+</script>
+<script type="text/javascript">
+window.util = function () {
+    function map(elems, func) {
+        var ret = [];
+        for (var i = 0, len = elems.length; i < len; i++) {
+            ret[i] = func(elems[i]);
+        }
+        return ret;
+    }
+    function filter(elems, predicate) {
+        var ret = [];
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (predicate(elems[i]))
+                ret.push(elems[i]);
+        }
+        return ret;
+    }
+    function all(elems) {
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (!elems[i])
+                return false;
+        }
+        return true;
+    }
+    function any(elems) {
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (elems[i])
+                return elems[i];
+        }
+        return false;
+    }
+    function contains(elems, e) {
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (elems[i] == e)
+                return true;
+        }
+        return false;
+    }
+    function last(items) {
+        return items[items.length-1];
+    }
+    function unescape(string) {
+        return string.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
+    }
+    function escape(string) {
+        return string.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+    }
+    function normalize(string) {
+        return string.toLowerCase().replace(/ /g, '').replace(/_/g, '');
+    }
+    function regexpEscape(string) {
+        return string.replace(/[-[\]{}()+?*.,\\^$|#]/g, "\\$&");
+    }
+    function Matcher(pattern) {
+        pattern = regexpEscape(normalize(pattern));
+        var rePattern = '^' + pattern.replace(/\\\?/g, '.').replace(/\\\*/g, '[\\s\\S]*') + '$';
+        var regexp = new RegExp(rePattern);
+        function matches(string) {
+            return regexp.test(normalize(string));
+        }
+        return {
+            matches: matches,
+            matchesAny: function (strings) {
+                for (var i = 0, len = strings.length; i < len; i++)
+                    if (matches(strings[i]))
+                        return true;
+                return false;
+            }
+        };
+    }
+    function formatParentName(item) {
+        var parentName = item.fullName.slice(0, item.fullName.length - item.name.length);
+        return parentName.replace(/\./g, ' . ');
+    }
+    function timeFromDate(date) {
+        if (!date)
+            return 'N/A';
+        return formatTime(date.getHours(), date.getMinutes(),
+                          date.getSeconds(), date.getMilliseconds());
+    }
+    function dateFromDate(date) {
+        if (!date)
+            return 'N/A';
+        return padTo(date.getFullYear(), 4) +
+               padTo(date.getMonth() + 1, 2) +
+               padTo(date.getDate(), 2);
+    }
+    function dateTimeFromDate(date) {
+        if (!date)
+            return 'N/A';
+        return dateFromDate(date) + ' ' + timeFromDate(date);
+    }
+    function formatTime(hours, minutes, seconds, milliseconds) {
+        return padTo(hours, 2) + ':' +
+               padTo(minutes, 2) + ':' +
+               padTo(seconds, 2) + '.' +
+               padTo(milliseconds, 3);
+    }
+    function formatElapsed(elapsed) {
+        var millis = elapsed;
+        var hours = Math.floor(millis / (60 * 60 * 1000));
+        millis -= hours * 60 * 60 * 1000;
+        var minutes = Math.floor(millis / (60 * 1000));
+        millis -= minutes * 60 * 1000;
+        var seconds = Math.floor(millis / 1000);
+        millis -= seconds * 1000;
+        return formatTime(hours, minutes, seconds, millis);
+    }
+    function padTo(number, len) {
+        var numString = number + "";
+        while (numString.length < len) numString = "0" + numString;
+        return numString;
+    }
+    function timestamp(millis) {
+        // used also by tools that do not set window.output.baseMillis
+        var base = window.output ? window.output.baseMillis : 0;
+        return new Date(base + millis);
+    }
+    function createGeneratedAgoString(generatedMillis) {
+        generatedMillis = timestamp(generatedMillis);
+        function timeString(time, shortUnit) {
+            var unit = {y: 'year', d: 'day', h: 'hour', m: 'minute',
+                        s: 'second'}[shortUnit];
+            var end = time == 1 ? ' ' : 's ';
+            return time + ' ' + unit + end;
+        }
+        function compensateLeapYears(days, years) {
+            // Not a perfect algorithm but ought to be enough
+            return days - Math.floor(years / 4);
+        }
+        var generated = Math.round(generatedMillis / 1000);
+        var current = Math.round(new Date().getTime() / 1000);
+        var elapsed = current - generated;
+        var prefix = '';
+        if (elapsed < 0) {
+            prefix = '- ';
+            elapsed = Math.abs(elapsed);
+        }
+        var secs  = elapsed % 60;
+        var mins  = Math.floor(elapsed / 60) % 60;
+        var hours = Math.floor(elapsed / (60*60)) % 24;
+        var days  = Math.floor(elapsed / (60*60*24)) % 365;
+        var years = Math.floor(elapsed / (60*60*24*365));
+        if (years) {
+            days = compensateLeapYears(days, years);
+            return prefix + timeString(years, 'y') + timeString(days, 'd');
+        } else if (days) {
+            return prefix + timeString(days, 'd') + timeString(hours, 'h');
+        } else if (hours) {
+            return prefix + timeString(hours, 'h') + timeString(mins, 'm');
+        } else if (mins) {
+            return prefix + timeString(mins, 'm') + timeString(secs, 's');
+        } else {
+            return prefix + timeString(secs, 's');
+        }
+    }
+    function parseQueryString(query) {
+        var result = {};
+        if (!query)
+            return result;
+        var params = query.split('&');
+        var parts;
+        function decode(item) {
+            return decodeURIComponent(item.replace('+', ' '));
+        }
+        for (var i = 0, len = params.length; i < len; i++) {
+            parts = params[i].split('=');
+            result[decode(parts.shift())] = decode(parts.join('='));
+        }
+        return result;
+    }
+    return {
+        map: map,
+        filter: filter,
+        all: all,
+        any: any,
+        contains: contains,
+        last: last,
+        escape: escape,
+        unescape: unescape,
+        normalize: normalize,
+        regexpEscape: regexpEscape,
+        Matcher: Matcher,
+        formatParentName: formatParentName,
+        timeFromDate: timeFromDate,
+        dateFromDate: dateFromDate,
+        dateTimeFromDate: dateTimeFromDate,
+        formatElapsed: formatElapsed,
+        timestamp: timestamp,
+        createGeneratedAgoString: createGeneratedAgoString,
+        parseQueryString: parseQueryString
+    };
+}();
+</script>
+<script type="text/javascript">
+window.testdata = function () {
+    var elementsById = {};
+    var idCounter = 0;
+    var _statistics = null;
+    var LEVELS = ['TRACE', 'DEBUG', 'INFO', 'WARN', 'FAIL', 'ERROR'];
+    var STATUSES = ['FAIL', 'PASS', 'NOT_RUN'];
+    var KEYWORDS = ['KEYWORD', 'SETUP', 'TEARDOWN', 'FOR', 'VAR'];
+    function addElement(elem) {
+        if (!elem.id)
+            elem.id = uniqueId();
+        elementsById[elem.id] = elem;
+        return elem;
+    }
+    function uniqueId() {
+        idCounter++;
+        return 'element-id-' + idCounter;
+    }
+    function times(stats) {
+        var startMillis = stats[1];
+        var elapsed = stats[2];
+        if (startMillis === null)
+            return [null, null, elapsed];
+        return [util.timestamp(startMillis),
+                util.timestamp(startMillis + elapsed),
+                elapsed];
+    }
+    function message(element, strings) {
+        return addElement(model.Message(LEVELS[element[1]],
+                                        util.timestamp(element[0]),
+                                        strings.get(element[2]),
+                                        strings.get(element[3])));
+    }
+    function parseStatus(stats) {
+        return STATUSES[stats[0]];
+    }
+    function childCreator(parent, childType) {
+        return function (elem, strings, index) {
+            return addElement(childType(parent, elem, strings, index));
+        };
+    }
+    function createKeyword(parent, element, strings, index) {
+        var kw = model.Keyword({
+            parent: parent,
+            type: KEYWORDS[element[0]],
+            id: 'k' + (index + 1),
+            name: strings.get(element[1]),
+            timeout: strings.get(element[2]),
+            args: strings.get(element[4]),
+            doc: function () {
+                var doc = strings.get(element[3]);
+                this.doc = function () { return doc; };
+                return doc;
+            },
+            status: parseStatus(element[5], strings),
+            times: model.Times(times(element[5])),
+            isChildrenLoaded: typeof(element[6]) !== 'number'
+        });
+        lazyPopulateKeywordsFromFile(kw, element[6], strings);
+        kw.populateMessages(Populator(element[7], strings, message));
+        return kw;
+    }
+    function lazyPopulateKeywordsFromFile(parent, keywordsOrIndex, strings) {
+        if (parent.isChildrenLoaded) {
+            var keywords = keywordsOrIndex;
+            parent.populateKeywords(Populator(keywords, strings, childCreator(parent, createKeyword)));
+        } else {
+            var index = keywordsOrIndex;
+            parent.childFileName = window.settings['splitLogBase'] + '-' + index + '.js';
+            parent.populateKeywords(SplitLogPopulator(keywordsOrIndex, childCreator(parent, createKeyword)));
+        }
+    }
+    function tags(taglist, strings) {
+        return util.map(taglist, strings.get);
+    }
+    function createTest(parent, element, strings, index) {
+        var statusElement = element[5];
+        var test = model.Test({
+            parent: parent,
+            id: 't' + (index + 1),
+            name: strings.get(element[0]),
+            doc: function () {
+                var doc = strings.get(element[3]);
+                this.doc = function () { return doc; };
+                return doc;
+            },
+            timeout: strings.get(element[1]),
+            isCritical: element[2],
+            status: parseStatus(statusElement),
+            message: function () {
+                var msg = createMessage(statusElement, strings);
+                this.message = function () { return msg; };
+                return msg;
+            },
+            times: model.Times(times(statusElement)),
+            tags: tags(element[4], strings),
+            isChildrenLoaded: typeof(element[6]) !== 'number'
+        });
+        lazyPopulateKeywordsFromFile(test, element[6], strings);
+        return test;
+    }
+    function createMessage(statusElement, strings) {
+        return statusElement.length == 4 ? strings.get(statusElement[3]) : '';
+    }
+    function createSuite(parent, element, strings, index) {
+        var statusElement = element[5];
+        var suite = model.Suite({
+            parent: parent,
+            id: 's' + ((index || 0) + 1),
+            name: strings.get(element[0]),
+            source: strings.get(element[1]),
+            relativeSource: strings.get(element[2]),
+            doc: function () {
+                var doc = strings.get(element[3]);
+                this.doc = function () { return doc; };
+                return doc;
+            },
+            status: parseStatus(statusElement),
+            message: function () {
+                var msg = createMessage(statusElement, strings);
+                this.message = function () { return msg; };
+                return msg;
+            },
+            times: model.Times(times(statusElement)),
+            statistics: suiteStats(util.last(element)),
+            metadata: parseMetadata(element[4], strings)
+        });
+        suite.populateKeywords(Populator(element[8], strings, childCreator(suite, createKeyword)));
+        suite.populateTests(Populator(element[7], strings, childCreator(suite, createTest)));
+        suite.populateSuites(Populator(element[6], strings, childCreator(suite, createSuite)));
+        return suite;
+    }
+    function parseMetadata(data, strings) {
+        var metadata = [];
+        for (var i=0; i<data.length; i+=2) {
+            metadata.push([strings.get(data[i]), strings.get(data[i+1])]);
+        }
+        return metadata;
+    }
+    function suiteStats(stats) {
+        return {
+            total: stats[0],
+            totalPassed: stats[1],
+            totalFailed: stats[0] - stats[1],
+            critical: stats[2],
+            criticalPassed: stats[3],
+            criticalFailed: stats[2] - stats[3]
+        };
+    }
+    function Populator(items, strings, creator) {
+        return {
+            numberOfItems: function () {
+                return items.length;
+            },
+            creator: function (index) {
+                return creator(items[index], strings, index);
+            }
+        };
+    }
+    function SplitLogPopulator(structureIndex, creator) {
+        return {
+            numberOfItems: function () {
+                return window['keywords'+structureIndex].length;
+            },
+            creator: function (index) {
+                return creator(window['keywords'+structureIndex][index],
+                               StringStore(window['strings'+structureIndex]),
+                               index);
+            }
+        };
+    }
+    function suite() {
+        var elem = window.output.suite;
+        if (elementsById[elem.id])
+            return elem;
+        var root = addElement(createSuite(null, elem, StringStore(window.output.strings)));
+        window.output.suite = root;
+        return root;
+    }
+    function findLoaded(id) {
+        return elementsById[id];
+    }
+    function ensureLoaded(id, callback) {
+        var ids = id.split('-');
+        var root = suite();
+        ids.shift();
+        loadItems(ids, root, [root.id], callback);
+    }
+    function loadItems(ids, current, result, callback) {
+        if (!ids.length) {
+            callback(result);
+            return;
+        }
+        current.callWhenChildrenReady(function () {
+            var id = ids.shift();
+            var type = id[0];
+            var index = parseInt(id.substring(1)) - 1;
+            var item = selectFrom(current, type, index);
+            result.push(item.id);
+            loadItems(ids, item, result, callback);
+        });
+    }
+    function selectFrom(element, type, index) {
+        if (type === 'k') {
+            return element.keywords()[index];
+        } else if (type === 't') {
+            return element.tests()[index];
+        } else {
+            return element.suites()[index];
+        }
+    }
+    function errorIterator() {
+        return {
+            next: function () {
+                return message(window.output.errors.shift(),
+                               StringStore(window.output.strings));
+            },
+            hasNext: function () {
+                return window.output.errors.length > 0;
+            }
+        };
+    }
+    function statistics() {
+        if (!_statistics) {
+            var statData = window.output.stats;
+            _statistics = stats.Statistics(statData[0], statData[1], statData[2]);
+        }
+        return _statistics;
+    }
+    function StringStore(strings) {
+        function getText(id) {
+            var text = strings[id];
+            if (!text)
+                return '';
+            if (text[0] == '*')
+                return text.substring(1);
+            var extracted = extract(text);
+            strings[id] = '*' + extracted;
+            return extracted;
+        }
+        function extract(text) {
+            var decoded = JXG.Util.Base64.decodeAsArray(text);
+            var extracted = (new JXG.Util.Unzip(decoded)).unzip()[0][0];
+            return JXG.Util.UTF8.decode(extracted);
+        }
+        function get(id) {
+            if (id === null) return null;
+            return getText(id);
+        }
+        return {get: get};
+    }
+    return {
+        suite: suite,
+        errorIterator: errorIterator,
+        findLoaded: findLoaded,
+        ensureLoaded: ensureLoaded,
+        statistics: statistics,
+        StringStore: StringStore,  // exposed for tests
+        LEVELS: LEVELS
+    };
+}();
+</script>
+<script type="text/javascript">
+function removeJavaScriptDisabledWarning() {
+    // Not using jQuery here for maximum speed
+    document.getElementById('javascript-disabled').style.display = 'none';
+}
+function addJavaScriptDisabledWarning(error) {
+    if (window.console)
+        console.error('Opening failed: ' + error.name + ': ' + error.message);
+    document.getElementById('javascript-disabled').style.display = 'block';
+}
+function initLayout(suiteName, type) {
+    parseTemplates();
+    setTitle(suiteName, type);
+    addHeader();
+    addReportOrLogLink(type);
+}
+function parseTemplates() {
+    $('script[type="text/x-jquery-tmpl"]').map(function (idx, elem) {
+        $.template(elem.id, elem.text);
+    });
+}
+function setTitle(suiteName, type) {
+    var givenTitle = window.settings.title;
+    var title = givenTitle ? givenTitle : suiteName + " Test " + type;
+    document.title = util.unescape(title);
+}
+function addHeader() {
+    $.tmpl('<h1>${title}</h1>' +
+           '<div id="generated">' +
+             '<span>Generated<br>${generated}</span><br>' +
+             '<span id="generated-ago">${ago} ago</span>' +
+           '</div>' +
+           '<div id="top-right-header">' +
+             '<div id="report-or-log-link"><a href="#"></a></div>' +
+           '</div>', {
+        generated: window.output.generatedTimestamp,
+        ago: util.createGeneratedAgoString(window.output.generatedMillis),
+        title: document.title
+    }).appendTo($('#header'));
+}
+function addReportOrLogLink(myType) {
+    var url;
+    var text;
+    var container = $('#report-or-log-link');
+    if (myType == 'Report') {
+        url = window.settings.logURL;
+        text = 'LOG';
+    } else {
+        url = window.settings.reportURL;
+        text = 'REPORT';
+    }
+    if (url) {
+        container.find('a').attr('href', url);
+        container.find('a').text(text);
+    } else {
+        container.remove();
+    }
+}
+function addStatistics() {
+    var statHeaders =
+        '<th class="stats-col-stat">Total</th>' +
+        '<th class="stats-col-stat">Pass</th>' +
+        '<th class="stats-col-stat">Fail</th>' +
+        '<th class="stats-col-elapsed">Elapsed</th>' +
+        '<th class="stats-col-graph">Pass / Fail</th>';
+    var statTable =
+        '<h2>Test Statistics</h2>' +
+        '<table class="statistics" id="total-stats"><thead><tr>' +
+        '<th class="stats-col-name">Total Statistics</th>' + statHeaders +
+        '</tr></thead></table>' +
+        '<table class="statistics" id="tag-stats"><thead><tr>' +
+        '<th class="stats-col-name">Statistics by Tag</th>' + statHeaders +
+        '</tr></thead></table>' +
+        '<table class="statistics" id="suite-stats"><thead><tr>' +
+        '<th class="stats-col-name">Statistics by Suite</th>' + statHeaders +
+        '</tr></thead></table>';
+    $(statTable).appendTo('#statistics-container');
+    util.map(['total', 'tag', 'suite'], addStatTable);
+    addTooltipsToElapsedTimes();
+    enableStatisticsSorter();
+}
+function addTooltipsToElapsedTimes() {
+    $('.stats-col-elapsed').attr('title',
+        'Total execution time of these test cases. ' +
+        'Excludes suite setups and teardowns.');
+    $('#suite-stats').find('.stats-col-elapsed').attr('title',
+        'Total execution time of this test suite.');
+}
+function enableStatisticsSorter() {
+    $.tablesorter.addParser({
+        id: 'statName',
+        type: 'numeric',
+        is: function(s) {
+            return false;  // do not auto-detect
+        },
+        format: function(string, table, cell, cellIndex) {
+            // Rows have class in format 'row-<index>'.
+            var index = $(cell).parent().attr('class').substring(4);
+            return parseInt(index);
+        }
+    });
+    $(".statistics").tablesorter({
+        sortInitialOrder: 'desc',
+        headers: {0: {sorter:'statName', sortInitialOrder: 'asc'},
+                  5: {sorter: false}}
+    });
+}
+function addStatTable(tableName) {
+    var stats = window.testdata.statistics()[tableName];
+    if (tableName == 'tag' && stats.length == 0) {
+        renderNoTagStatTable();
+    } else {
+        renderStatTable(tableName, stats);
+    }
+}
+function renderNoTagStatTable() {
+    $('<tbody><tr class="row-0">' +
+        '<td class="stats-col-name">No Tags</td>' +
+        '<td class="stats-col-stat"></td>' +
+        '<td class="stats-col-stat"></td>' +
+        '<td class="stats-col-stat"></td>' +
+        '<td class="stats-col-elapsed"></td>' +
+        '<td class="stats-col-graph">' +
+          '<div class="empty-graph"></div>' +
+        '</td>' +
+      '</tr></tbody>').appendTo('#tag-stats');
+}
+function renderStatTable(tableName, stats) {
+    var template = tableName + 'StatisticsRowTemplate';
+    var tbody = $('<tbody></tbody>');
+    for (var i = 0, len = stats.length; i < len; i++) {
+        $.tmpl(template, stats[i], {index: i}).appendTo(tbody);
+    }
+    tbody.appendTo('#' + tableName + '-stats');
+}
+$.template('statColumnsTemplate',
+    '<td class="stats-col-stat">${total}</td>' +
+    '<td class="stats-col-stat">${pass}</td>' +
+    '<td class="stats-col-stat">${fail}</td>' +
+    '<td class="stats-col-elapsed">${elapsed}</td>' +
+    '<td class="stats-col-graph">' +
+      '{{if total}}' +
+      '<div class="graph">' +
+        '<div class="pass-bar" style="width: ${passWidth}%" title="${passPercent}%"></div>' +
+        '<div class="fail-bar" style="width: ${failWidth}%" title="${failPercent}%"></div>' +
+      '</div>' +
+      '{{else}}' +
+      '<div class="empty-graph"></div>' +
+      '{{/if}}' +
+    '</td>'
+);
+$.template('suiteStatusMessageTemplate',
+    '${critical} critical test, ' +
+    '${criticalPassed} passed, ' +
+    '<span class="{{if criticalFailed}}fail{{else}}pass{{/if}}">${criticalFailed} failed</span><br>' +
+    '${total} test total, ' +
+    '${totalPassed} passed, ' +
+    '<span class="{{if totalFailed}}fail{{else}}pass{{/if}}">${totalFailed} failed</span>'
+);
+// For complete cross-browser experience..
+// http://www.quirksmode.org/js/events_order.html
+function stopPropagation(event) {
+    var event = event || window.event;
+    event.cancelBubble = true;
+    if (event.stopPropagation)
+        event.stopPropagation();
+}
+</script>
+<script type="text/javascript">
+window.output = {};
+</script>
+<script type="text/javascript">
+window.sPart0 = [[4,31,0,0,0,[1,35488,9689],[[0,32,0,33,34,[1,35488,7454],[[0,35,0,36,37,[1,35489,0],[],[]],[0,35,0,36,38,[1,35489,1],[],[]],[0,39,0,40,41,[1,35490,1],[],[[35491,2,42]]],[0,43,0,44,45,[1,35491,0],[],[[35491,2,42]]],[0,46,0,47,48,[1,35492,357],[],[[35492,2,49],[35849,2,50]]],[0,51,0,52,53,[1,35849,55],[],[[35904,2,54]]],[0,55,0,56,57,[1,35904,1036],[],[[36940,2,58]]],[0,59,0,60,61,[1,36941,6001],[],[[42942,2,62]]]],[]],[0,63,0,64,65,[1,42943,529],[[0,65,0,66,0,[1,42943,529],[[3,67,0,0,0,[1,42944,528],[[4,68,0,0,0,[1,42944,528],[[0,69,0,0,70,[1,42944,528],[[0,71,0,72,73,[1,42945,506],[[0,74,0,75,76,[1,42946,0],[],[[42946,2,77]]],[0,78,0,40,79,[1,42947,0],[],[[42947,2,80]]],[0,46,0,47,81,[1,42948,366],[],[[42948,2,82],[43313,2,83]]],[0,51,0,52,84,[1,43314,20],[],[[43334,2,85]]],[0,86,0,56,87,[1,43334,1],[],[[43335,2,88],[43335,2,89]]],[0,90,0,91,0,[1,43335,115],[],[]],[0,74,0,75,92,[1,43450,0],[],[[43450,2,88]]]],[[43451,2,93]]],[0,94,0,95,96,[1,43451,0],[],[]],[0,97,0,98,99,[1,43452,18],[],[[43470,2,100],[43470,2,101]]],[0,74,0,75,102,[1,43470,1],[],[[43471,2,103]]],[0,104,0,105,106,[1,43471,0],[],[[43471,2,107]]]],[]]],[]]],[]]],[]]],[[43472,2,108],[43472,2,109]]],[0,110,0,111,112,[1,43472,1],[],[]],[0,63,0,64,113,[1,43473,15],[[0,114,0,115,116,[1,43474,14],[[0,117,0,118,34,[1,43474,14],[[3,67,0,0,0,[1,43475,13],[[4,68,0,0,0,[1,43475,13],[[0,119,0,120,121,[1,43475,8],[[0,97,0,98,122,[1,43476,6],[],[[43482,2,100],[43482,2,101]]],[0,74,0,75,102,[1,43482,1],[],[[43483,2,103]]]],[[43483,2,101]]],[0,74,0,75,102,[1,43483,1],[],[[43484,2,103]]],[0,104,0,105,106,[1,43484,0],[],[[43484,2,107]]],[0,123,0,124,102,[1,43485,0],[],[[43485,2,125]]],[0,126,0,127,102,[1,43485,1],[],[[43486,2,128]]],[0,129,0,130,131,[1,43486,1],[],[[43487,2,132],[43487,2,133]]],[0,134,0,135,136,[1,43487,1],[],[[43487,2,137]]]],[]]],[]]],[]]],[]]],[[43488,2,108],[43488,2,109]]],[0,110,0,111,112,[1,43488,1],[],[]],[0,63,0,64,138,[1,43489,38],[[0,114,0,115,139,[1,43489,38],[[0,140,0,141,0,[1,43490,36],[[3,67,0,0,0,[1,43491,35],[[4,68,0,0,0,[1,43491,35],[[0,119,0,120,121,[1,43491,8],[[0,97,0,98,122,[1,43492,6],[],[[43498,2,100],[43498,2,101]]],[0,74,0,75,102,[1,43498,1],[],[[43499,2,103]]]],[[43499,2,101]]],[0,74,0,75,102,[1,43499,1],[],[[43500,2,103]]],[0,104,0,105,106,[1,43500,1],[],[[43500,2,107]]],[0,123,0,124,102,[1,43501,0],[],[[43501,2,125]]],[0,126,0,127,102,[1,43501,1],[],[[43502,2,128]]],[0,142,0,0,143,[1,43502,24],[[0,129,0,130,144,[1,43503,1],[],[[43504,2,132],[43504,2,133]]],[3,145,0,0,0,[1,43504,22],[[4,146,0,0,0,[1,43504,3],[[0,147,0,148,149,[1,43505,0],[],[[43505,2,150]]],[0,151,0,152,153,[1,43505,1],[],[[43506,2,154]]],[0,104,0,105,155,[1,43506,0],[],[[43506,2,156]]]],[]],[4,157,0,0,0,[1,43507,2],[[0,147,0,148,149,[1,43507,0],[],[[43507,2,158]]],[0,151,0,152,153,[1,43508,0],[],[[43508,2,154]]],[0,104,0,105,155,[1,43508,1],[],[[43509,2,156]]]],[]],[4,159,0,0,0,[1,43509,2],[[0,147,0,148,149,[1,43509,0],[],[[43510,2,160]]],[0,151,0,152,153,[1,43510,0],[],[[43510,2,154]]],[0,104,0,105,155,[1,43510,1],[],[[43511,2,156]]]],[]],[4,161,0,0,0,[1,43511,2],[[0,147,0,148,149,[1,43511,1],[],[[43512,2,162]]],[0,151,0,152,153,[1,43512,0],[],[[43513,2,154]]],[0,104,0,105,155,[1,43513,0],[],[[43513,2,156]]]],[]],[4,163,0,0,0,[1,43513,2],[[0,147,0,148,149,[1,43514,0],[],[[43514,2,164]]],[0,151,0,152,153,[1,43514,1],[],[[43515,2,154]]],[0,104,0,105,155,[1,43515,0],[],[[43515,2,156]]]],[]],[4,165,0,0,0,[1,43515,2],[[0,147,0,148,149,[1,43516,0],[],[[43516,2,166]]],[0,151,0,152,153,[1,43516,1],[],[[43517,2,154]]],[0,104,0,105,155,[1,43517,0],[],[[43517,2,156]]]],[]],[4,167,0,0,0,[1,43518,2],[[0,147,0,148,149,[1,43518,0],[],[[43518,2,168]]],[0,151,0,152,153,[1,43519,0],[],[[43519,2,154]]],[0,104,0,105,155,[1,43519,1],[],[[43519,2,156]]]],[]],[4,169,0,0,0,[1,43520,2],[[0,147,0,148,149,[1,43520,0],[],[[43520,2,170]]],[0,151,0,152,153,[1,43521,0],[],[[43521,2,154]]],[0,104,0,105,155,[1,43521,1],[],[[43522,2,156]]]],[]],[4,171,0,0,0,[1,43522,2],[[0,147,0,148,149,[1,43522,0],[],[[43523,2,172]]],[0,151,0,152,153,[1,43523,0],[],[[43523,2,154]]],[0,104,0,105,155,[1,43523,1],[],[[43524,2,156]]]],[]],[4,173,0,0,0,[1,43524,2],[[0,147,0,148,149,[1,43524,1],[],[[43525,2,174]]],[0,151,0,152,153,[1,43525,0],[],[[43525,2,154]]],[0,104,0,105,155,[1,43525,1],[],[[43526,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[43527,2,108],[43527,2,109]]],[0,110,0,111,112,[1,43527,0],[],[]],[0,63,0,64,175,[1,43528,37],[[0,114,0,115,176,[1,43528,37],[[0,177,0,178,179,[1,43529,36],[[3,67,0,0,0,[1,43529,36],[[4,68,0,0,0,[1,43529,36],[[0,119,0,120,121,[1,43530,7],[[0,97,0,98,122,[1,43530,6],[],[[43536,2,100],[43536,2,101]]],[0,74,0,75,102,[1,43537,0],[],[[43537,2,103]]]],[[43537,2,101]]],[0,74,0,75,102,[1,43538,0],[],[[43538,2,103]]],[0,104,0,105,106,[1,43538,1],[],[[43539,2,107]]],[0,123,0,124,102,[1,43539,0],[],[[43539,2,125]]],[0,126,0,127,102,[1,43540,0],[],[[43540,2,128]]],[0,180,0,0,181,[1,43541,23],[[0,129,0,130,144,[1,43542,0],[],[[43542,2,132],[43542,2,133]]],[3,145,0,0,0,[1,43542,22],[[4,146,0,0,0,[1,43542,2],[[0,147,0,148,149,[1,43543,0],[],[[43543,2,150]]],[0,151,0,152,182,[1,43543,1],[],[[43544,2,183]]],[0,104,0,105,184,[1,43544,0],[],[[43544,2,185]]]],[]],[4,157,0,0,0,[1,43545,2],[[0,147,0,148,149,[1,43545,0],[],[[43545,2,158]]],[0,151,0,152,182,[1,43546,0],[],[[43546,2,183]]],[0,104,0,105,184,[1,43546,1],[],[[43546,2,185]]]],[]],[4,159,0,0,0,[1,43547,2],[[0,147,0,148,149,[1,43547,0],[],[[43547,2,160]]],[0,151,0,152,182,[1,43548,0],[],[[43548,2,183]]],[0,104,0,105,184,[1,43548,1],[],[[43549,2,185]]]],[]],[4,161,0,0,0,[1,43549,2],[[0,147,0,148,149,[1,43549,1],[],[[43550,2,162]]],[0,151,0,152,182,[1,43550,0],[],[[43550,2,183]]],[0,104,0,105,184,[1,43551,0],[],[[43551,2,185]]]],[]],[4,163,0,0,0,[1,43551,3],[[0,147,0,148,149,[1,43551,1],[],[[43552,2,164]]],[0,151,0,152,182,[1,43552,1],[],[[43553,2,183]]],[0,104,0,105,184,[1,43553,0],[],[[43553,2,185]]]],[]],[4,165,0,0,0,[1,43554,2],[[0,147,0,148,149,[1,43554,0],[],[[43554,2,166]]],[0,151,0,152,182,[1,43555,0],[],[[43555,2,183]]],[0,104,0,105,184,[1,43555,1],[],[[43555,2,185]]]],[]],[4,167,0,0,0,[1,43556,2],[[0,147,0,148,149,[1,43556,0],[],[[43556,2,168]]],[0,151,0,152,182,[1,43557,0],[],[[43557,2,183]]],[0,104,0,105,184,[1,43557,1],[],[[43558,2,185]]]],[]],[4,169,0,0,0,[1,43558,2],[[0,147,0,148,149,[1,43558,1],[],[[43559,2,170]]],[0,151,0,152,182,[1,43559,0],[],[[43559,2,183]]],[0,104,0,105,184,[1,43559,1],[],[[43560,2,185]]]],[]],[4,171,0,0,0,[1,43560,2],[[0,147,0,148,149,[1,43560,1],[],[[43561,2,172]]],[0,151,0,152,182,[1,43561,0],[],[[43561,2,183]]],[0,104,0,105,184,[1,43562,0],[],[[43562,2,185]]]],[]],[4,173,0,0,0,[1,43562,2],[[0,147,0,148,149,[1,43562,1],[],[[43563,2,174]]],[0,151,0,152,182,[1,43563,0],[],[[43564,2,183]]],[0,104,0,105,184,[1,43564,0],[],[[43564,2,185]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[43565,2,108],[43565,2,109]]],[0,110,0,111,112,[1,43565,1],[],[]],[0,63,0,64,186,[1,43566,11],[[0,114,0,115,187,[1,43566,11],[[0,188,0,189,190,[1,43567,10],[[3,67,0,0,0,[1,43568,9],[[4,68,0,0,0,[1,43568,9],[[0,119,0,120,191,[1,43568,6],[[0,97,0,98,122,[1,43569,4],[],[[43573,2,100],[43573,2,101]]],[0,74,0,75,102,[1,43573,1],[],[[43574,2,192]]]],[[43574,2,101]]],[0,74,0,75,102,[1,43574,1],[],[[43575,2,192]]],[0,193,0,194,195,[1,43575,1],[],[[43576,2,196]]],[0,197,0,194,198,[1,43576,0],[],[[43576,2,199]]],[0,104,0,105,200,[1,43577,0],[],[[43577,2,201]]]],[]]],[]]],[]]],[]]],[[43578,2,108],[43578,2,109]]],[0,110,0,111,112,[1,43578,0],[],[]],[0,63,0,64,202,[1,43579,63],[[0,114,0,115,203,[1,43579,63],[[0,204,0,205,0,[1,43579,63],[[3,67,0,0,0,[1,43580,62],[[4,68,0,0,0,[1,43580,61],[[0,119,0,120,206,[1,43580,9],[[0,97,0,98,122,[1,43581,7],[],[[43588,2,100],[43588,2,101]]],[0,74,0,75,102,[1,43588,1],[],[[43589,2,207]]]],[[43589,2,101]]],[0,126,0,127,102,[1,43589,1],[],[[43590,2,208]]],[0,129,0,130,209,[1,43591,0],[],[[43591,2,210],[43591,2,211]]],[0,74,0,75,102,[1,43591,1],[],[[43592,2,207]]],[0,119,0,120,212,[1,43592,37],[[0,97,0,98,122,[1,43593,34],[],[[43627,2,100],[43627,2,101]]],[0,74,0,75,102,[1,43628,1],[],[[43628,2,213]]]],[[43629,2,101]]],[0,126,0,127,102,[1,43629,2],[],[[43631,2,214]]],[0,129,0,130,215,[1,43632,0],[],[[43632,2,216],[43632,2,217]]],[0,74,0,75,102,[1,43632,1],[],[[43633,2,213]]],[0,119,0,120,218,[1,43633,6],[[0,97,0,98,122,[1,43634,4],[],[[43638,2,100],[43638,2,101]]],[0,74,0,75,102,[1,43638,1],[],[[43639,2,219]]]],[[43639,2,101]]],[0,126,0,127,102,[1,43639,1],[],[[43640,2,220]]],[0,129,0,130,221,[1,43640,1],[],[[43641,2,222],[43641,2,223]]],[0,74,0,75,102,[1,43641,0],[],[[43641,2,219]]]],[]]],[]]],[]]],[]]],[[43642,2,108],[43642,2,109]]],[0,63,0,64,224,[1,43642,108],[[0,114,0,115,225,[1,43643,107],[[0,226,0,227,0,[1,43643,107],[[3,67,0,0,0,[1,43644,105],[[4,68,0,0,0,[1,43644,105],[[0,119,0,120,121,[1,43644,8],[[0,97,0,98,122,[1,43645,6],[],[[43651,2,100],[43651,2,101]]],[0,74,0,75,102,[1,43651,0],[],[[43651,2,103]]]],[[43652,2,101]]],[0,104,0,105,106,[1,43652,1],[],[[43652,2,107]]],[0,126,0,127,102,[1,43653,0],[],[[43653,2,128]]],[0,228,0,0,229,[1,43654,95],[[0,129,0,130,144,[1,43655,0],[],[[43655,2,132],[43655,2,133]]],[0,230,0,231,0,[1,43655,1],[],[[43656,2,232]]],[3,145,0,0,0,[1,43656,27],[[4,146,0,0,0,[1,43656,2],[[0,233,0,148,149,[1,43656,1],[],[[43657,2,234]]],[0,235,0,152,236,[1,43657,0],[],[[43657,2,237]]],[0,238,0,239,240,[1,43657,1],[],[]],[0,74,0,75,241,[1,43658,0],[],[[43658,2,242]]]],[]],[4,157,0,0,0,[1,43659,2],[[0,233,0,148,149,[1,43659,0],[],[[43659,2,243]]],[0,235,0,152,236,[1,43660,0],[],[[43660,2,244]]],[0,238,0,239,240,[1,43660,0],[],[]],[0,74,0,75,241,[1,43661,0],[],[[43661,2,245]]]],[]],[4,159,0,0,0,[1,43661,3],[[0,233,0,148,149,[1,43661,1],[],[[43662,2,246]]],[0,235,0,152,236,[1,43662,0],[],[[43663,2,247]]],[0,238,0,239,240,[1,43663,0],[],[]],[0,74,0,75,241,[1,43663,1],[],[[43664,2,248]]]],[]],[4,161,0,0,0,[1,43664,2],[[0,233,0,148,149,[1,43664,0],[],[[43665,2,249]]],[0,235,0,152,236,[1,43665,0],[],[[43665,2,250]]],[0,238,0,239,240,[1,43665,1],[],[]],[0,74,0,75,241,[1,43666,0],[],[[43666,2,251]]]],[]],[4,163,0,0,0,[1,43666,3],[[0,233,0,148,149,[1,43667,0],[],[[43667,2,252]]],[0,235,0,152,236,[1,43667,1],[],[[43668,2,253]]],[0,238,0,239,240,[1,43668,0],[],[]],[0,74,0,75,241,[1,43669,0],[],[[43669,2,254]]]],[]],[4,165,0,0,0,[1,43669,3],[[0,233,0,148,149,[1,43669,1],[],[[43670,2,255]]],[0,235,0,152,236,[1,43670,1],[],[[43671,2,256]]],[0,238,0,239,240,[1,43671,0],[],[]],[0,74,0,75,241,[1,43671,1],[],[[43672,2,257]]]],[]],[4,167,0,0,0,[1,43672,3],[[0,233,0,148,149,[1,43672,1],[],[[43673,2,258]]],[0,235,0,152,236,[1,43673,0],[],[[43673,2,259]]],[0,238,0,239,240,[1,43674,0],[],[]],[0,74,0,75,241,[1,43674,0],[],[[43674,2,260]]]],[]],[4,169,0,0,0,[1,43675,2],[[0,233,0,148,149,[1,43675,0],[],[[43675,2,261]]],[0,235,0,152,236,[1,43676,0],[],[[43676,2,262]]],[0,238,0,239,240,[1,43676,1],[],[]],[0,74,0,75,241,[1,43677,0],[],[[43677,2,263]]]],[]],[4,171,0,0,0,[1,43677,3],[[0,233,0,148,149,[1,43677,1],[],[[43678,2,264]]],[0,235,0,152,236,[1,43678,0],[],[[43679,2,265]]],[0,238,0,239,240,[1,43679,0],[],[]],[0,74,0,75,241,[1,43679,1],[],[[43680,2,266]]]],[]],[4,173,0,0,0,[1,43680,2],[[0,233,0,148,149,[1,43680,1],[],[[43681,2,267]]],[0,235,0,152,236,[1,43681,0],[],[[43681,2,268]]],[0,238,0,239,240,[1,43681,1],[],[]],[0,74,0,75,241,[1,43682,0],[],[[43682,2,269]]]],[]]],[]],[0,129,0,130,241,[1,43683,0],[],[[43683,2,132],[43683,2,133]]],[3,270,0,0,0,[1,43683,66],[[4,271,0,0,0,[1,43683,7],[[0,119,0,120,272,[1,43684,6],[[0,97,0,98,122,[1,43685,4],[],[[43688,2,100],[43689,2,101]]],[0,74,0,75,102,[1,43689,0],[],[[43689,2,273]]]],[[43690,2,101]]],[0,74,0,75,102,[1,43690,0],[],[[43690,2,273]]]],[]],[4,274,0,0,0,[1,43690,7],[[0,119,0,120,272,[1,43691,5],[[0,97,0,98,122,[1,43692,3],[],[[43695,2,100],[43695,2,101]]],[0,74,0,75,102,[1,43695,1],[],[[43696,2,275]]]],[[43696,2,101]]],[0,74,0,75,102,[1,43696,1],[],[[43697,2,275]]]],[]],[4,276,0,0,0,[1,43697,6],[[0,119,0,120,272,[1,43697,5],[[0,97,0,98,122,[1,43698,3],[],[[43701,2,100],[43702,2,101]]],[0,74,0,75,102,[1,43702,0],[],[[43702,2,277]]]],[[43703,2,101]]],[0,74,0,75,102,[1,43703,0],[],[[43703,2,277]]]],[]],[4,278,0,0,0,[1,43703,7],[[0,119,0,120,272,[1,43703,6],[[0,97,0,98,122,[1,43704,4],[],[[43708,2,100],[43708,2,101]]],[0,74,0,75,102,[1,43708,0],[],[[43708,2,279]]]],[[43709,2,101]]],[0,74,0,75,102,[1,43709,0],[],[[43709,2,279]]]],[]],[4,280,0,0,0,[1,43710,7],[[0,119,0,120,272,[1,43710,6],[[0,97,0,98,122,[1,43711,4],[],[[43715,2,100],[43715,2,101]]],[0,74,0,75,102,[1,43716,0],[],[[43716,2,281]]]],[[43716,2,101]]],[0,74,0,75,102,[1,43717,0],[],[[43717,2,281]]]],[]],[4,282,0,0,0,[1,43717,6],[[0,119,0,120,272,[1,43717,6],[[0,97,0,98,122,[1,43718,4],[],[[43722,2,100],[43722,2,101]]],[0,74,0,75,102,[1,43722,0],[],[[43722,2,283]]]],[[43723,2,101]]],[0,74,0,75,102,[1,43723,0],[],[[43723,2,283]]]],[]],[4,284,0,0,0,[1,43724,5],[[0,119,0,120,272,[1,43724,5],[[0,97,0,98,122,[1,43725,3],[],[[43728,2,100],[43728,2,101]]],[0,74,0,75,102,[1,43728,0],[],[[43728,2,285]]]],[[43729,2,101]]],[0,74,0,75,102,[1,43729,0],[],[[43729,2,285]]]],[]],[4,286,0,0,0,[1,43730,6],[[0,119,0,120,272,[1,43730,5],[[0,97,0,98,122,[1,43731,3],[],[[43734,2,100],[43734,2,101]]],[0,74,0,75,102,[1,43735,0],[],[[43735,2,287]]]],[[43735,2,101]]],[0,74,0,75,102,[1,43736,0],[],[[43736,2,287]]]],[]],[4,288,0,0,0,[1,43736,7],[[0,119,0,120,272,[1,43736,6],[[0,97,0,98,122,[1,43737,4],[],[[43741,2,100],[43741,2,101]]],[0,74,0,75,102,[1,43741,1],[],[[43742,2,289]]]],[[43742,2,101]]],[0,74,0,75,102,[1,43742,1],[],[[43743,2,289]]]],[]],[4,290,0,0,0,[1,43743,6],[[0,119,0,120,272,[1,43743,5],[[0,97,0,98,122,[1,43744,3],[],[[43747,2,100],[43747,2,101]]],[0,74,0,75,102,[1,43748,0],[],[[43748,2,291]]]],[[43748,2,101]]],[0,74,0,75,102,[1,43749,0],[],[[43749,2,291]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[43750,2,108],[43750,2,109]]],[0,63,0,64,292,[1,43750,570],[[0,114,0,115,293,[1,43751,569],[[0,294,0,295,0,[1,43751,569],[[0,296,0,297,45,[1,43752,0],[],[]],[0,298,0,299,0,[1,43752,1],[],[]],[0,51,0,52,300,[1,43753,4],[],[[43757,2,300]]],[0,86,0,56,57,[1,43757,185],[],[[43941,2,301],[43942,2,302]]],[0,74,0,75,92,[1,43942,1],[],[[43943,2,301]]],[0,51,0,52,303,[1,43943,3],[],[[43946,2,303]]],[0,86,0,56,57,[1,43946,23],[],[[43969,2,304],[43969,2,305]]],[0,74,0,75,92,[1,43969,1],[],[[43969,2,304]]],[0,51,0,52,306,[1,43970,6],[],[[43975,2,306]]],[0,86,0,56,57,[1,43976,312],[],[[44288,2,307],[44289,2,308]]],[0,74,0,75,92,[1,44289,0],[],[[44289,2,307]]],[0,51,0,52,309,[1,44289,5],[],[[44293,2,309]]],[0,86,0,56,57,[1,44294,25],[],[[44319,2,310],[44319,2,311]]],[0,74,0,75,92,[1,44319,1],[],[[44320,2,310]]]],[]]],[]]],[[44320,2,108],[44320,2,109]]],[0,312,0,313,0,[1,44321,806],[[0,35,0,36,314,[1,44321,1],[],[]],[0,296,0,297,45,[1,44322,0],[],[]],[0,298,0,299,0,[1,44322,1],[],[]],[0,51,0,52,315,[1,44323,3],[],[[44325,2,315]]],[0,55,0,56,87,[1,44326,686],[],[[45012,2,316]]],[0,90,0,91,0,[1,45012,115],[],[]]],[]],[0,63,0,64,317,[1,45127,37],[[0,114,0,115,318,[1,45128,36],[[0,319,0,320,0,[1,45128,36],[[3,67,0,0,0,[1,45129,35],[[4,68,0,0,0,[1,45129,35],[[0,119,0,120,121,[1,45129,8],[[0,97,0,98,122,[1,45130,5],[],[[45135,2,100],[45136,2,101]]],[0,74,0,75,102,[1,45136,0],[],[[45136,2,321]]]],[[45137,2,101]]],[0,74,0,75,102,[1,45137,0],[],[[45137,2,321]]],[0,104,0,105,106,[1,45138,0],[],[[45138,2,107]]],[0,123,0,124,102,[1,45138,1],[],[[45139,2,322]]],[0,126,0,127,102,[1,45139,0],[],[[45140,2,323]]],[0,142,0,0,324,[1,45140,24],[[0,129,0,130,144,[1,45141,1],[],[[45141,2,132],[45142,2,133]]],[3,145,0,0,0,[1,45142,22],[[4,146,0,0,0,[1,45142,2],[[0,147,0,148,149,[1,45142,1],[],[[45143,2,325]]],[0,151,0,152,153,[1,45143,0],[],[[45143,2,326]]],[0,104,0,105,155,[1,45144,0],[],[[45144,2,156]]]],[]],[4,157,0,0,0,[1,45144,2],[[0,147,0,148,149,[1,45144,1],[],[[45145,2,327]]],[0,151,0,152,153,[1,45145,0],[],[[45145,2,326]]],[0,104,0,105,155,[1,45146,0],[],[[45146,2,156]]]],[]],[4,159,0,0,0,[1,45146,2],[[0,147,0,148,149,[1,45146,1],[],[[45147,2,328]]],[0,151,0,152,153,[1,45147,1],[],[[45148,2,326]]],[0,104,0,105,155,[1,45148,0],[],[[45148,2,156]]]],[]],[4,161,0,0,0,[1,45148,3],[[0,147,0,148,149,[1,45149,0],[],[[45149,2,329]]],[0,151,0,152,153,[1,45149,1],[],[[45150,2,326]]],[0,104,0,105,155,[1,45150,0],[],[[45150,2,156]]]],[]],[4,163,0,0,0,[1,45151,2],[[0,147,0,148,149,[1,45151,0],[],[[45151,2,330]]],[0,151,0,152,153,[1,45152,0],[],[[45152,2,326]]],[0,104,0,105,155,[1,45152,1],[],[[45153,2,156]]]],[]],[4,165,0,0,0,[1,45153,2],[[0,147,0,148,149,[1,45153,0],[],[[45154,2,331]]],[0,151,0,152,153,[1,45154,0],[],[[45154,2,326]]],[0,104,0,105,155,[1,45154,1],[],[[45155,2,156]]]],[]],[4,167,0,0,0,[1,45155,2],[[0,147,0,148,149,[1,45155,1],[],[[45156,2,332]]],[0,151,0,152,153,[1,45156,0],[],[[45156,2,326]]],[0,104,0,105,155,[1,45157,0],[],[[45157,2,156]]]],[]],[4,169,0,0,0,[1,45157,2],[[0,147,0,148,149,[1,45157,1],[],[[45158,2,333]]],[0,151,0,152,153,[1,45158,0],[],[[45158,2,326]]],[0,104,0,105,155,[1,45159,0],[],[[45159,2,156]]]],[]],[4,171,0,0,0,[1,45159,2],[[0,147,0,148,149,[1,45159,1],[],[[45160,2,334]]],[0,151,0,152,153,[1,45160,1],[],[[45161,2,326]]],[0,104,0,105,155,[1,45161,0],[],[[45161,2,156]]]],[]],[4,173,0,0,0,[1,45161,2],[[0,147,0,148,149,[1,45162,0],[],[[45162,2,335]]],[0,151,0,152,153,[1,45162,1],[],[[45163,2,326]]],[0,104,0,105,155,[1,45163,0],[],[[45163,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[45164,2,108],[45164,2,109]]],[0,110,0,111,112,[1,45165,0],[],[]],[0,63,0,64,336,[1,45165,11],[[0,114,0,115,337,[1,45166,10],[[0,338,0,339,340,[1,45166,9],[[3,67,0,0,0,[1,45167,8],[[4,68,0,0,0,[1,45167,8],[[0,119,0,120,191,[1,45167,5],[[0,97,0,98,122,[1,45168,3],[],[[45171,2,100],[45171,2,101]]],[0,74,0,75,102,[1,45172,0],[],[[45172,2,341]]]],[[45172,2,101]]],[0,74,0,75,102,[1,45173,0],[],[[45173,2,341]]],[0,193,0,194,195,[1,45173,1],[],[[45174,2,342]]],[0,197,0,194,198,[1,45174,0],[],[[45175,2,343]]],[0,104,0,105,344,[1,45175,0],[],[[45175,2,345]]]],[]]],[]]],[]]],[]]],[[45176,2,108],[45176,2,109]]],[0,110,0,111,112,[1,45176,0],[],[]],[0,346,0,347,34,[1,45177,0],[],[[45177,2,348],[45177,2,349]]]],[]],[4,350,0,0,0,[1,45177,12502],[[0,32,0,351,34,[1,45178,8386],[[0,35,0,36,37,[1,45178,1],[],[]],[0,35,0,36,38,[1,45179,0],[],[]],[0,39,0,40,41,[1,45179,1],[],[[45180,2,352]]],[0,43,0,44,45,[1,45181,0],[],[[45181,2,352]]],[0,46,0,47,48,[1,45181,345],[],[[45182,2,49],[45526,2,353]]],[0,51,0,52,53,[1,45527,72],[],[[45599,2,354]]],[0,55,0,56,57,[1,45599,1963],[],[[47562,2,355]]],[0,59,0,60,61,[1,47562,6002],[],[[53563,2,62]]]],[]],[0,63,0,64,65,[1,53564,572],[[0,65,0,66,0,[1,53565,571],[[3,67,0,0,0,[1,53565,571],[[4,68,0,0,0,[1,53566,570],[[0,69,0,0,70,[1,53566,570],[[0,71,0,72,73,[1,53567,558],[[0,74,0,75,76,[1,53568,0],[],[[53568,2,77]]],[0,78,0,40,79,[1,53568,1],[],[[53569,2,356]]],[0,46,0,47,81,[1,53569,422],[],[[53570,2,82],[53991,2,357]]],[0,51,0,52,84,[1,53991,18],[],[[54009,2,85]]],[0,86,0,56,87,[1,54010,0],[],[[54010,2,88],[54010,2,89]]],[0,90,0,91,0,[1,54011,114],[],[]],[0,74,0,75,92,[1,54125,0],[],[[54125,2,88]]]],[[54126,2,93]]],[0,94,0,95,96,[1,54126,0],[],[]],[0,97,0,98,99,[1,54126,8],[],[[54134,2,100],[54134,2,101]]],[0,74,0,75,102,[1,54134,1],[],[[54134,2,358]]],[0,104,0,105,106,[1,54135,0],[],[[54135,2,107]]]],[]]],[]]],[]]],[]]],[[54136,2,108],[54136,2,109]]],[0,110,0,111,112,[1,54137,0],[],[]],[0,63,0,64,113,[1,54137,16],[[0,114,0,115,116,[1,54138,15],[[0,117,0,118,34,[1,54138,15],[[3,67,0,0,0,[1,54139,14],[[4,68,0,0,0,[1,54139,14],[[0,119,0,120,121,[1,54139,9],[[0,97,0,98,122,[1,54140,7],[],[[54147,2,100],[54147,2,101]]],[0,74,0,75,102,[1,54147,1],[],[[54148,2,358]]]],[[54148,2,101]]],[0,74,0,75,102,[1,54148,1],[],[[54149,2,358]]],[0,104,0,105,106,[1,54149,1],[],[[54149,2,107]]],[0,123,0,124,102,[1,54150,0],[],[[54150,2,359]]],[0,126,0,127,102,[1,54150,1],[],[[54151,2,360]]],[0,129,0,130,131,[1,54151,1],[],[[54152,2,361],[54152,2,362]]],[0,134,0,135,136,[1,54152,1],[],[[54153,2,137]]]],[]]],[]]],[]]],[]]],[[54153,2,108],[54153,2,109]]],[0,110,0,111,112,[1,54154,0],[],[]],[0,63,0,64,138,[1,54154,59],[[0,114,0,115,139,[1,54155,58],[[0,140,0,141,0,[1,54155,57],[[3,67,0,0,0,[1,54156,56],[[4,68,0,0,0,[1,54156,56],[[0,119,0,120,121,[1,54156,7],[[0,97,0,98,122,[1,54157,5],[],[[54162,2,100],[54162,2,101]]],[0,74,0,75,102,[1,54163,0],[],[[54163,2,358]]]],[[54164,2,101]]],[0,74,0,75,102,[1,54164,0],[],[[54164,2,358]]],[0,104,0,105,106,[1,54165,0],[],[[54165,2,107]]],[0,123,0,124,102,[1,54165,1],[],[[54166,2,359]]],[0,126,0,127,102,[1,54166,1],[],[[54167,2,360]]],[0,142,0,0,143,[1,54167,45],[[0,129,0,130,144,[1,54168,0],[],[[54168,2,361],[54168,2,362]]],[3,145,0,0,0,[1,54169,43],[[4,146,0,0,0,[1,54169,2],[[0,147,0,148,149,[1,54169,0],[],[[54169,2,363]]],[0,151,0,152,153,[1,54170,0],[],[[54170,2,154]]],[0,104,0,105,155,[1,54170,1],[],[[54171,2,156]]]],[]],[4,157,0,0,0,[1,54171,2],[[0,147,0,148,149,[1,54171,0],[],[[54172,2,364]]],[0,151,0,152,153,[1,54172,0],[],[[54172,2,154]]],[0,104,0,105,155,[1,54172,1],[],[[54173,2,156]]]],[]],[4,159,0,0,0,[1,54173,2],[[0,147,0,148,149,[1,54173,1],[],[[54174,2,365]]],[0,151,0,152,153,[1,54174,1],[],[[54175,2,154]]],[0,104,0,105,155,[1,54175,0],[],[[54175,2,156]]]],[]],[4,161,0,0,0,[1,54175,3],[[0,147,0,148,149,[1,54176,0],[],[[54176,2,366]]],[0,151,0,152,153,[1,54176,1],[],[[54177,2,154]]],[0,104,0,105,155,[1,54177,0],[],[[54177,2,156]]]],[]],[4,163,0,0,0,[1,54178,2],[[0,147,0,148,149,[1,54178,0],[],[[54178,2,367]]],[0,151,0,152,153,[1,54179,0],[],[[54179,2,154]]],[0,104,0,105,155,[1,54179,1],[],[[54180,2,156]]]],[]],[4,165,0,0,0,[1,54180,2],[[0,147,0,148,149,[1,54180,0],[],[[54181,2,368]]],[0,151,0,152,153,[1,54181,0],[],[[54181,2,154]]],[0,104,0,105,155,[1,54181,1],[],[[54182,2,156]]]],[]],[4,167,0,0,0,[1,54182,2],[[0,147,0,148,149,[1,54182,1],[],[[54183,2,369]]],[0,151,0,152,153,[1,54183,0],[],[[54183,2,154]]],[0,104,0,105,155,[1,54184,0],[],[[54184,2,156]]]],[]],[4,169,0,0,0,[1,54184,2],[[0,147,0,148,149,[1,54184,1],[],[[54185,2,370]]],[0,151,0,152,153,[1,54185,0],[],[[54186,2,154]]],[0,104,0,105,155,[1,54186,0],[],[[54186,2,156]]]],[]],[4,171,0,0,0,[1,54186,2],[[0,147,0,148,149,[1,54187,0],[],[[54187,2,371]]],[0,151,0,152,153,[1,54187,1],[],[[54188,2,154]]],[0,104,0,105,155,[1,54188,0],[],[[54188,2,156]]]],[]],[4,173,0,0,0,[1,54189,2],[[0,147,0,148,149,[1,54189,0],[],[[54189,2,372]]],[0,151,0,152,153,[1,54190,0],[],[[54190,2,154]]],[0,104,0,105,155,[1,54190,1],[],[[54190,2,156]]]],[]],[4,373,0,0,0,[1,54191,2],[[0,147,0,148,149,[1,54191,0],[],[[54191,2,374]]],[0,151,0,152,153,[1,54192,0],[],[[54192,2,154]]],[0,104,0,105,155,[1,54192,1],[],[[54193,2,156]]]],[]],[4,375,0,0,0,[1,54193,2],[[0,147,0,148,149,[1,54193,0],[],[[54194,2,376]]],[0,151,0,152,153,[1,54194,0],[],[[54194,2,154]]],[0,104,0,105,155,[1,54194,1],[],[[54195,2,156]]]],[]],[4,377,0,0,0,[1,54195,2],[[0,147,0,148,149,[1,54195,1],[],[[54196,2,378]]],[0,151,0,152,153,[1,54196,0],[],[[54196,2,154]]],[0,104,0,105,155,[1,54197,0],[],[[54197,2,156]]]],[]],[4,379,0,0,0,[1,54197,2],[[0,147,0,148,149,[1,54197,1],[],[[54198,2,380]]],[0,151,0,152,153,[1,54198,0],[],[[54198,2,154]]],[0,104,0,105,155,[1,54199,0],[],[[54199,2,156]]]],[]],[4,381,0,0,0,[1,54199,2],[[0,147,0,148,149,[1,54199,1],[],[[54200,2,382]]],[0,151,0,152,153,[1,54200,0],[],[[54201,2,154]]],[0,104,0,105,155,[1,54201,0],[],[[54201,2,156]]]],[]],[4,383,0,0,0,[1,54201,2],[[0,147,0,148,149,[1,54202,0],[],[[54202,2,384]]],[0,151,0,152,153,[1,54202,1],[],[[54203,2,154]]],[0,104,0,105,155,[1,54203,0],[],[[54203,2,156]]]],[]],[4,385,0,0,0,[1,54204,2],[[0,147,0,148,149,[1,54204,0],[],[[54204,2,386]]],[0,151,0,152,153,[1,54204,1],[],[[54205,2,154]]],[0,104,0,105,155,[1,54205,0],[],[[54205,2,156]]]],[]],[4,387,0,0,0,[1,54206,2],[[0,147,0,148,149,[1,54206,0],[],[[54206,2,388]]],[0,151,0,152,153,[1,54207,0],[],[[54207,2,154]]],[0,104,0,105,155,[1,54207,1],[],[[54208,2,156]]]],[]],[4,389,0,0,0,[1,54208,2],[[0,147,0,148,149,[1,54208,0],[],[[54209,2,390]]],[0,151,0,152,153,[1,54209,0],[],[[54209,2,154]]],[0,104,0,105,155,[1,54209,1],[],[[54210,2,156]]]],[]],[4,391,0,0,0,[1,54210,2],[[0,147,0,148,149,[1,54210,1],[],[[54211,2,392]]],[0,151,0,152,153,[1,54211,0],[],[[54211,2,154]]],[0,104,0,105,155,[1,54211,1],[],[[54212,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[54213,2,108],[54213,2,109]]],[0,110,0,111,112,[1,54213,0],[],[]],[0,63,0,64,175,[1,54214,58],[[0,114,0,115,176,[1,54214,58],[[0,177,0,178,179,[1,54215,57],[[3,67,0,0,0,[1,54215,57],[[4,68,0,0,0,[1,54216,56],[[0,119,0,120,121,[1,54216,7],[[0,97,0,98,122,[1,54217,5],[],[[54222,2,100],[54222,2,101]]],[0,74,0,75,102,[1,54223,0],[],[[54223,2,358]]]],[[54223,2,101]]],[0,74,0,75,102,[1,54224,0],[],[[54224,2,358]]],[0,104,0,105,106,[1,54224,1],[],[[54225,2,107]]],[0,123,0,124,102,[1,54225,1],[],[[54226,2,359]]],[0,126,0,127,102,[1,54226,0],[],[[54227,2,360]]],[0,180,0,0,181,[1,54227,45],[[0,129,0,130,144,[1,54228,0],[],[[54228,2,361],[54228,2,362]]],[3,145,0,0,0,[1,54228,43],[[4,146,0,0,0,[1,54229,2],[[0,147,0,148,149,[1,54229,0],[],[[54229,2,363]]],[0,151,0,152,182,[1,54230,0],[],[[54230,2,183]]],[0,104,0,105,184,[1,54230,1],[],[[54230,2,185]]]],[]],[4,157,0,0,0,[1,54231,2],[[0,147,0,148,149,[1,54231,0],[],[[54231,2,364]]],[0,151,0,152,182,[1,54232,0],[],[[54232,2,183]]],[0,104,0,105,184,[1,54232,1],[],[[54233,2,185]]]],[]],[4,159,0,0,0,[1,54233,2],[[0,147,0,148,149,[1,54233,1],[],[[54234,2,365]]],[0,151,0,152,182,[1,54234,0],[],[[54234,2,183]]],[0,104,0,105,184,[1,54234,1],[],[[54235,2,185]]]],[]],[4,161,0,0,0,[1,54235,2],[[0,147,0,148,149,[1,54235,1],[],[[54236,2,366]]],[0,151,0,152,182,[1,54236,0],[],[[54236,2,183]]],[0,104,0,105,184,[1,54237,0],[],[[54237,2,185]]]],[]],[4,163,0,0,0,[1,54237,2],[[0,147,0,148,149,[1,54237,1],[],[[54238,2,367]]],[0,151,0,152,182,[1,54238,0],[],[[54239,2,183]]],[0,104,0,105,184,[1,54239,0],[],[[54239,2,185]]]],[]],[4,165,0,0,0,[1,54239,2],[[0,147,0,148,149,[1,54239,1],[],[[54240,2,368]]],[0,151,0,152,182,[1,54240,1],[],[[54241,2,183]]],[0,104,0,105,184,[1,54241,0],[],[[54241,2,185]]]],[]],[4,167,0,0,0,[1,54241,3],[[0,147,0,148,149,[1,54242,0],[],[[54242,2,369]]],[0,151,0,152,182,[1,54242,1],[],[[54243,2,183]]],[0,104,0,105,184,[1,54243,0],[],[[54243,2,185]]]],[]],[4,169,0,0,0,[1,54244,2],[[0,147,0,148,149,[1,54244,0],[],[[54244,2,370]]],[0,151,0,152,182,[1,54245,0],[],[[54245,2,183]]],[0,104,0,105,184,[1,54245,1],[],[[54245,2,185]]]],[]],[4,171,0,0,0,[1,54246,2],[[0,147,0,148,149,[1,54246,0],[],[[54246,2,371]]],[0,151,0,152,182,[1,54247,0],[],[[54247,2,183]]],[0,104,0,105,184,[1,54247,1],[],[[54248,2,185]]]],[]],[4,173,0,0,0,[1,54248,2],[[0,147,0,148,149,[1,54248,0],[],[[54249,2,372]]],[0,151,0,152,182,[1,54249,0],[],[[54249,2,183]]],[0,104,0,105,184,[1,54249,1],[],[[54250,2,185]]]],[]],[4,373,0,0,0,[1,54250,2],[[0,147,0,148,149,[1,54250,1],[],[[54251,2,374]]],[0,151,0,152,182,[1,54251,0],[],[[54252,2,183]]],[0,104,0,105,184,[1,54252,0],[],[[54252,2,185]]]],[]],[4,375,0,0,0,[1,54252,2],[[0,147,0,148,149,[1,54253,0],[],[[54253,2,376]]],[0,151,0,152,182,[1,54253,1],[],[[54254,2,183]]],[0,104,0,105,184,[1,54254,0],[],[[54254,2,185]]]],[]],[4,377,0,0,0,[1,54254,2],[[0,147,0,148,149,[1,54255,0],[],[[54255,2,378]]],[0,151,0,152,182,[1,54255,1],[],[[54256,2,183]]],[0,104,0,105,184,[1,54256,0],[],[[54256,2,185]]]],[]],[4,379,0,0,0,[1,54257,2],[[0,147,0,148,149,[1,54257,0],[],[[54257,2,380]]],[0,151,0,152,182,[1,54258,0],[],[[54258,2,183]]],[0,104,0,105,184,[1,54258,1],[],[[54258,2,185]]]],[]],[4,381,0,0,0,[1,54259,2],[[0,147,0,148,149,[1,54259,0],[],[[54259,2,382]]],[0,151,0,152,182,[1,54260,0],[],[[54260,2,183]]],[0,104,0,105,184,[1,54260,1],[],[[54261,2,185]]]],[]],[4,383,0,0,0,[1,54261,2],[[0,147,0,148,149,[1,54261,0],[],[[54262,2,384]]],[0,151,0,152,182,[1,54262,0],[],[[54262,2,183]]],[0,104,0,105,184,[1,54262,1],[],[[54263,2,185]]]],[]],[4,385,0,0,0,[1,54263,2],[[0,147,0,148,149,[1,54263,1],[],[[54264,2,386]]],[0,151,0,152,182,[1,54264,0],[],[[54264,2,183]]],[0,104,0,105,184,[1,54264,1],[],[[54265,2,185]]]],[]],[4,387,0,0,0,[1,54265,2],[[0,147,0,148,149,[1,54265,1],[],[[54266,2,388]]],[0,151,0,152,182,[1,54266,0],[],[[54266,2,183]]],[0,104,0,105,184,[1,54267,0],[],[[54267,2,185]]]],[]],[4,389,0,0,0,[1,54267,2],[[0,147,0,148,149,[1,54267,1],[],[[54268,2,390]]],[0,151,0,152,182,[1,54268,0],[],[[54268,2,183]]],[0,104,0,105,184,[1,54269,0],[],[[54269,2,185]]]],[]],[4,391,0,0,0,[1,54269,2],[[0,147,0,148,149,[1,54269,1],[],[[54270,2,392]]],[0,151,0,152,182,[1,54270,1],[],[[54271,2,183]]],[0,104,0,105,184,[1,54271,0],[],[[54271,2,185]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[54272,2,108],[54272,2,109]]],[0,110,0,111,112,[1,54272,1],[],[]],[0,63,0,64,186,[1,54273,11],[[0,114,0,115,187,[1,54273,11],[[0,188,0,189,190,[1,54274,10],[[3,67,0,0,0,[1,54275,9],[[4,68,0,0,0,[1,54276,8],[[0,119,0,120,191,[1,54276,5],[[0,97,0,98,122,[1,54277,3],[],[[54280,2,100],[54280,2,101]]],[0,74,0,75,102,[1,54280,1],[],[[54281,2,393]]]],[[54281,2,101]]],[0,74,0,75,102,[1,54281,1],[],[[54282,2,393]]],[0,193,0,194,195,[1,54282,0],[],[[54283,2,394]]],[0,197,0,194,198,[1,54283,0],[],[[54283,2,199]]],[0,104,0,105,200,[1,54284,0],[],[[54284,2,201]]]],[]]],[]]],[]]],[]]],[[54285,2,108],[54285,2,109]]],[0,110,0,111,112,[1,54285,0],[],[]],[0,63,0,64,202,[1,54285,58],[[0,114,0,115,203,[1,54286,57],[[0,204,0,205,0,[1,54286,57],[[3,67,0,0,0,[1,54287,56],[[4,68,0,0,0,[1,54287,56],[[0,119,0,120,206,[1,54287,8],[[0,97,0,98,122,[1,54288,5],[],[[54293,2,100],[54294,2,101]]],[0,74,0,75,102,[1,54294,0],[],[[54294,2,395]]]],[[54295,2,101]]],[0,126,0,127,102,[1,54295,1],[],[[54296,2,396]]],[0,129,0,130,209,[1,54296,1],[],[[54296,2,397],[54297,2,398]]],[0,74,0,75,102,[1,54297,0],[],[[54297,2,395]]],[0,119,0,120,212,[1,54298,31],[[0,97,0,98,122,[1,54299,28],[],[[54326,2,100],[54327,2,101]]],[0,74,0,75,102,[1,54327,1],[],[[54328,2,399]]]],[[54329,2,101]]],[0,126,0,127,102,[1,54329,3],[],[[54333,2,400]]],[0,129,0,130,215,[1,54333,1],[],[[54333,2,401],[54334,2,402]]],[0,74,0,75,102,[1,54334,1],[],[[54334,2,399]]],[0,119,0,120,218,[1,54335,6],[[0,97,0,98,122,[1,54336,4],[],[[54340,2,100],[54340,2,101]]],[0,74,0,75,102,[1,54340,0],[],[[54340,2,219]]]],[[54341,2,101]]],[0,126,0,127,102,[1,54341,0],[],[[54342,2,220]]],[0,129,0,130,221,[1,54342,0],[],[[54342,2,222],[54342,2,223]]],[0,74,0,75,102,[1,54343,0],[],[[54343,2,219]]]],[]]],[]]],[]]],[]]],[[54344,2,108],[54344,2,109]]],[0,63,0,64,224,[1,54344,190],[[0,114,0,115,225,[1,54344,190],[[0,226,0,227,0,[1,54345,189],[[3,67,0,0,0,[1,54345,189],[[4,68,0,0,0,[1,54346,187],[[0,119,0,120,121,[1,54346,7],[[0,97,0,98,122,[1,54347,5],[],[[54352,2,100],[54352,2,101]]],[0,74,0,75,102,[1,54352,1],[],[[54353,2,358]]]],[[54353,2,101]]],[0,104,0,105,106,[1,54353,1],[],[[54354,2,107]]],[0,126,0,127,102,[1,54354,1],[],[[54355,2,360]]],[0,228,0,0,229,[1,54355,178],[[0,129,0,130,144,[1,54356,1],[],[[54356,2,361],[54357,2,362]]],[0,230,0,231,0,[1,54357,0],[],[[54357,2,232]]],[3,145,0,0,0,[1,54357,54],[[4,146,0,0,0,[1,54357,3],[[0,233,0,148,149,[1,54358,0],[],[[54358,2,403]]],[0,235,0,152,236,[1,54358,1],[],[[54359,2,237]]],[0,238,0,239,240,[1,54359,0],[],[]],[0,74,0,75,241,[1,54360,0],[],[[54360,2,242]]]],[]],[4,157,0,0,0,[1,54360,3],[[0,233,0,148,149,[1,54360,1],[],[[54361,2,404]]],[0,235,0,152,236,[1,54361,0],[],[[54361,2,405]]],[0,238,0,239,240,[1,54362,0],[],[]],[0,74,0,75,241,[1,54362,1],[],[[54362,2,406]]]],[]],[4,159,0,0,0,[1,54363,2],[[0,233,0,148,149,[1,54363,0],[],[[54363,2,407]]],[0,235,0,152,236,[1,54364,0],[],[[54364,2,408]]],[0,238,0,239,240,[1,54364,1],[],[]],[0,74,0,75,241,[1,54365,0],[],[[54365,2,409]]]],[]],[4,161,0,0,0,[1,54365,3],[[0,233,0,148,149,[1,54366,0],[],[[54366,2,410]]],[0,235,0,152,236,[1,54366,1],[],[[54367,2,411]]],[0,238,0,239,240,[1,54367,0],[],[]],[0,74,0,75,241,[1,54367,1],[],[[54368,2,412]]]],[]],[4,163,0,0,0,[1,54368,3],[[0,233,0,148,149,[1,54368,1],[],[[54369,2,413]]],[0,235,0,152,236,[1,54369,0],[],[[54369,2,414]]],[0,238,0,239,240,[1,54370,0],[],[]],[0,74,0,75,241,[1,54370,0],[],[[54370,2,415]]]],[]],[4,165,0,0,0,[1,54371,2],[[0,233,0,148,149,[1,54371,0],[],[[54371,2,416]]],[0,235,0,152,236,[1,54372,0],[],[[54372,2,417]]],[0,238,0,239,240,[1,54372,0],[],[]],[0,74,0,75,241,[1,54373,0],[],[[54373,2,418]]]],[]],[4,167,0,0,0,[1,54373,3],[[0,233,0,148,149,[1,54373,1],[],[[54374,2,419]]],[0,235,0,152,236,[1,54374,0],[],[[54375,2,420]]],[0,238,0,239,240,[1,54375,0],[],[]],[0,74,0,75,241,[1,54375,1],[],[[54376,2,421]]]],[]],[4,169,0,0,0,[1,54376,3],[[0,233,0,148,149,[1,54376,1],[],[[54377,2,422]]],[0,235,0,152,236,[1,54377,1],[],[[54378,2,244]]],[0,238,0,239,240,[1,54378,0],[],[]],[0,74,0,75,241,[1,54379,0],[],[[54379,2,423]]]],[]],[4,171,0,0,0,[1,54379,3],[[0,233,0,148,149,[1,54379,1],[],[[54380,2,424]]],[0,235,0,152,236,[1,54380,0],[],[[54380,2,425]]],[0,238,0,239,240,[1,54381,0],[],[]],[0,74,0,75,241,[1,54381,1],[],[[54381,2,426]]]],[]],[4,173,0,0,0,[1,54382,2],[[0,233,0,148,149,[1,54382,0],[],[[54382,2,427]]],[0,235,0,152,236,[1,54383,0],[],[[54383,2,428]]],[0,238,0,239,240,[1,54383,1],[],[]],[0,74,0,75,241,[1,54384,0],[],[[54384,2,429]]]],[]],[4,373,0,0,0,[1,54384,3],[[0,233,0,148,149,[1,54385,0],[],[[54385,2,430]]],[0,235,0,152,236,[1,54385,1],[],[[54386,2,247]]],[0,238,0,239,240,[1,54386,0],[],[]],[0,74,0,75,241,[1,54386,1],[],[[54387,2,431]]]],[]],[4,375,0,0,0,[1,54387,3],[[0,233,0,148,149,[1,54387,1],[],[[54388,2,432]]],[0,235,0,152,236,[1,54388,0],[],[[54388,2,250]]],[0,238,0,239,240,[1,54389,0],[],[]],[0,74,0,75,241,[1,54389,1],[],[[54389,2,433]]]],[]],[4,377,0,0,0,[1,54390,2],[[0,233,0,148,149,[1,54390,0],[],[[54390,2,434]]],[0,235,0,152,236,[1,54391,0],[],[[54391,2,253]]],[0,238,0,239,240,[1,54391,1],[],[]],[0,74,0,75,241,[1,54392,0],[],[[54392,2,435]]]],[]],[4,379,0,0,0,[1,54392,3],[[0,233,0,148,149,[1,54393,0],[],[[54393,2,436]]],[0,235,0,152,236,[1,54393,1],[],[[54394,2,437]]],[0,238,0,239,240,[1,54394,0],[],[]],[0,74,0,75,241,[1,54394,1],[],[[54395,2,438]]]],[]],[4,381,0,0,0,[1,54395,3],[[0,233,0,148,149,[1,54395,1],[],[[54396,2,439]]],[0,235,0,152,236,[1,54396,0],[],[[54396,2,256]]],[0,238,0,239,240,[1,54397,0],[],[]],[0,74,0,75,241,[1,54397,1],[],[[54397,2,440]]]],[]],[4,383,0,0,0,[1,54398,2],[[0,233,0,148,149,[1,54398,0],[],[[54398,2,441]]],[0,235,0,152,236,[1,54399,0],[],[[54399,2,442]]],[0,238,0,239,240,[1,54399,1],[],[]],[0,74,0,75,241,[1,54400,0],[],[[54400,2,443]]]],[]],[4,385,0,0,0,[1,54400,3],[[0,233,0,148,149,[1,54400,1],[],[[54401,2,444]]],[0,235,0,152,236,[1,54401,1],[],[[54402,2,259]]],[0,238,0,239,240,[1,54402,0],[],[]],[0,74,0,75,241,[1,54402,1],[],[[54403,2,445]]]],[]],[4,387,0,0,0,[1,54403,3],[[0,233,0,148,149,[1,54403,1],[],[[54404,2,446]]],[0,235,0,152,236,[1,54404,0],[],[[54404,2,262]]],[0,238,0,239,240,[1,54405,0],[],[]],[0,74,0,75,241,[1,54405,1],[],[[54406,2,447]]]],[]],[4,389,0,0,0,[1,54406,2],[[0,233,0,148,149,[1,54406,0],[],[[54407,2,448]]],[0,235,0,152,236,[1,54407,0],[],[[54407,2,265]]],[0,238,0,239,240,[1,54407,1],[],[]],[0,74,0,75,241,[1,54408,0],[],[[54408,2,449]]]],[]],[4,391,0,0,0,[1,54408,3],[[0,233,0,148,149,[1,54409,0],[],[[54409,2,450]]],[0,235,0,152,236,[1,54409,1],[],[[54410,2,268]]],[0,238,0,239,240,[1,54410,0],[],[]],[0,74,0,75,241,[1,54411,0],[],[[54411,2,451]]]],[]]],[]],[0,129,0,130,241,[1,54411,1],[],[[54412,2,361],[54412,2,362]]],[3,270,0,0,0,[1,54412,121],[[4,271,0,0,0,[1,54412,6],[[0,119,0,120,272,[1,54412,5],[[0,97,0,98,122,[1,54413,3],[],[[54416,2,100],[54416,2,101]]],[0,74,0,75,102,[1,54417,0],[],[[54417,2,452]]]],[[54417,2,101]]],[0,74,0,75,102,[1,54418,0],[],[[54418,2,452]]]],[]],[4,453,0,0,0,[1,54418,6],[[0,119,0,120,272,[1,54418,5],[[0,97,0,98,122,[1,54419,3],[],[[54422,2,100],[54422,2,101]]],[0,74,0,75,102,[1,54422,1],[],[[54423,2,454]]]],[[54423,2,101]]],[0,74,0,75,102,[1,54423,1],[],[[54424,2,454]]]],[]],[4,455,0,0,0,[1,54424,5],[[0,119,0,120,272,[1,54424,5],[[0,97,0,98,122,[1,54425,3],[],[[54427,2,100],[54428,2,101]]],[0,74,0,75,102,[1,54428,0],[],[[54428,2,456]]]],[[54429,2,101]]],[0,74,0,75,102,[1,54429,0],[],[[54429,2,456]]]],[]],[4,457,0,0,0,[1,54429,6],[[0,119,0,120,272,[1,54430,5],[[0,97,0,98,122,[1,54431,3],[],[[54434,2,100],[54434,2,101]]],[0,74,0,75,102,[1,54434,0],[],[[54434,2,458]]]],[[54435,2,101]]],[0,74,0,75,102,[1,54435,0],[],[[54435,2,458]]]],[]],[4,459,0,0,0,[1,54436,6],[[0,119,0,120,272,[1,54436,5],[[0,97,0,98,122,[1,54437,3],[],[[54440,2,100],[54440,2,101]]],[0,74,0,75,102,[1,54440,0],[],[[54440,2,460]]]],[[54441,2,101]]],[0,74,0,75,102,[1,54441,0],[],[[54441,2,460]]]],[]],[4,461,0,0,0,[1,54442,6],[[0,119,0,120,272,[1,54442,5],[[0,97,0,98,122,[1,54443,3],[],[[54446,2,100],[54446,2,101]]],[0,74,0,75,102,[1,54447,0],[],[[54447,2,462]]]],[[54447,2,101]]],[0,74,0,75,102,[1,54448,0],[],[[54448,2,462]]]],[]],[4,463,0,0,0,[1,54448,6],[[0,119,0,120,272,[1,54448,5],[[0,97,0,98,122,[1,54449,3],[],[[54452,2,100],[54452,2,101]]],[0,74,0,75,102,[1,54453,0],[],[[54453,2,464]]]],[[54453,2,101]]],[0,74,0,75,102,[1,54454,0],[],[[54454,2,464]]]],[]],[4,274,0,0,0,[1,54454,7],[[0,119,0,120,272,[1,54454,6],[[0,97,0,98,122,[1,54455,4],[],[[54459,2,100],[54459,2,101]]],[0,74,0,75,102,[1,54459,1],[],[[54460,2,465]]]],[[54460,2,101]]],[0,74,0,75,102,[1,54460,1],[],[[54461,2,465]]]],[]],[4,466,0,0,0,[1,54461,6],[[0,119,0,120,272,[1,54461,5],[[0,97,0,98,122,[1,54462,3],[],[[54465,2,100],[54465,2,101]]],[0,74,0,75,102,[1,54465,1],[],[[54465,2,467]]]],[[54466,2,101]]],[0,74,0,75,102,[1,54466,1],[],[[54466,2,467]]]],[]],[4,468,0,0,0,[1,54467,6],[[0,119,0,120,272,[1,54467,5],[[0,97,0,98,122,[1,54468,3],[],[[54471,2,100],[54471,2,101]]],[0,74,0,75,102,[1,54471,0],[],[[54471,2,469]]]],[[54472,2,101]]],[0,74,0,75,102,[1,54472,0],[],[[54472,2,469]]]],[]],[4,276,0,0,0,[1,54473,5],[[0,119,0,120,272,[1,54473,5],[[0,97,0,98,122,[1,54474,3],[],[[54476,2,100],[54477,2,101]]],[0,74,0,75,102,[1,54477,0],[],[[54477,2,470]]]],[[54478,2,101]]],[0,74,0,75,102,[1,54478,0],[],[[54478,2,470]]]],[]],[4,278,0,0,0,[1,54479,6],[[0,119,0,120,272,[1,54479,5],[[0,97,0,98,122,[1,54480,3],[],[[54483,2,100],[54483,2,101]]],[0,74,0,75,102,[1,54483,1],[],[[54484,2,471]]]],[[54484,2,101]]],[0,74,0,75,102,[1,54484,1],[],[[54485,2,471]]]],[]],[4,280,0,0,0,[1,54485,6],[[0,119,0,120,272,[1,54485,5],[[0,97,0,98,122,[1,54486,3],[],[[54489,2,100],[54489,2,101]]],[0,74,0,75,102,[1,54489,1],[],[[54490,2,472]]]],[[54490,2,101]]],[0,74,0,75,102,[1,54490,1],[],[[54491,2,472]]]],[]],[4,473,0,0,0,[1,54491,6],[[0,119,0,120,272,[1,54491,5],[[0,97,0,98,122,[1,54492,3],[],[[54495,2,100],[54495,2,101]]],[0,74,0,75,102,[1,54495,1],[],[[54496,2,474]]]],[[54496,2,101]]],[0,74,0,75,102,[1,54496,1],[],[[54497,2,474]]]],[]],[4,282,0,0,0,[1,54497,6],[[0,119,0,120,272,[1,54497,5],[[0,97,0,98,122,[1,54498,3],[],[[54501,2,100],[54501,2,101]]],[0,74,0,75,102,[1,54501,1],[],[[54502,2,475]]]],[[54502,2,101]]],[0,74,0,75,102,[1,54502,1],[],[[54503,2,475]]]],[]],[4,476,0,0,0,[1,54503,6],[[0,119,0,120,272,[1,54503,5],[[0,97,0,98,122,[1,54504,3],[],[[54507,2,100],[54507,2,101]]],[0,74,0,75,102,[1,54507,1],[],[[54508,2,477]]]],[[54508,2,101]]],[0,74,0,75,102,[1,54508,1],[],[[54509,2,477]]]],[]],[4,284,0,0,0,[1,54509,6],[[0,119,0,120,272,[1,54509,5],[[0,97,0,98,122,[1,54510,3],[],[[54513,2,100],[54513,2,101]]],[0,74,0,75,102,[1,54513,1],[],[[54513,2,478]]]],[[54514,2,101]]],[0,74,0,75,102,[1,54514,1],[],[[54514,2,478]]]],[]],[4,286,0,0,0,[1,54515,6],[[0,119,0,120,272,[1,54515,5],[[0,97,0,98,122,[1,54516,3],[],[[54519,2,100],[54519,2,101]]],[0,74,0,75,102,[1,54519,1],[],[[54520,2,479]]]],[[54520,2,101]]],[0,74,0,75,102,[1,54520,1],[],[[54521,2,479]]]],[]],[4,288,0,0,0,[1,54521,6],[[0,119,0,120,272,[1,54521,5],[[0,97,0,98,122,[1,54522,3],[],[[54525,2,100],[54525,2,101]]],[0,74,0,75,102,[1,54526,0],[],[[54526,2,480]]]],[[54526,2,101]]],[0,74,0,75,102,[1,54527,0],[],[[54527,2,480]]]],[]],[4,290,0,0,0,[1,54527,6],[[0,119,0,120,272,[1,54527,5],[[0,97,0,98,122,[1,54528,3],[],[[54531,2,100],[54531,2,101]]],[0,74,0,75,102,[1,54532,0],[],[[54532,2,481]]]],[[54532,2,101]]],[0,74,0,75,102,[1,54533,0],[],[[54533,2,481]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[54534,2,108],[54534,2,109]]],[0,63,0,64,292,[1,54534,1280],[[0,114,0,115,293,[1,54535,1279],[[0,294,0,295,0,[1,54535,1279],[[0,296,0,297,45,[1,54536,0],[],[]],[0,298,0,299,0,[1,54536,1],[],[]],[0,51,0,52,300,[1,54537,4],[],[[54541,2,300]]],[0,86,0,56,57,[1,54542,469],[],[[55011,2,482],[55012,2,483]]],[0,74,0,75,92,[1,55012,1],[],[[55012,2,482]]],[0,51,0,52,303,[1,55013,4],[],[[55017,2,303]]],[0,86,0,56,57,[1,55017,48],[],[[55065,2,484],[55065,2,485]]],[0,74,0,75,92,[1,55065,1],[],[[55065,2,484]]],[0,51,0,52,306,[1,55066,5],[],[[55071,2,306]]],[0,86,0,56,57,[1,55072,689],[],[[55761,2,486],[55762,2,308]]],[0,74,0,75,92,[1,55762,0],[],[[55762,2,486]]],[0,51,0,52,309,[1,55763,2],[],[[55765,2,309]]],[0,86,0,56,57,[1,55766,47],[],[[55813,2,487],[55813,2,311]]],[0,74,0,75,92,[1,55813,1],[],[[55814,2,487]]]],[]]],[]]],[[55815,2,108],[55815,2,109]]],[0,312,0,313,0,[1,55815,1791],[[0,35,0,36,314,[1,55816,0],[],[]],[0,296,0,297,45,[1,55816,0],[],[]],[0,298,0,299,0,[1,55817,0],[],[]],[0,51,0,52,315,[1,55817,2],[],[[55819,2,315]]],[0,55,0,56,87,[1,55820,1671],[],[[57491,2,488]]],[0,90,0,91,0,[1,57492,114],[],[]]],[]],[0,63,0,64,317,[1,57606,60],[[0,114,0,115,318,[1,57607,59],[[0,319,0,320,0,[1,57607,59],[[3,67,0,0,0,[1,57608,58],[[4,68,0,0,0,[1,57608,58],[[0,119,0,120,121,[1,57609,8],[[0,97,0,98,122,[1,57609,7],[],[[57616,2,100],[57616,2,101]]],[0,74,0,75,102,[1,57616,1],[],[[57617,2,489]]]],[[57617,2,101]]],[0,74,0,75,102,[1,57617,1],[],[[57618,2,489]]],[0,104,0,105,106,[1,57618,1],[],[[57618,2,107]]],[0,123,0,124,102,[1,57619,0],[],[[57619,2,490]]],[0,126,0,127,102,[1,57619,1],[],[[57620,2,491]]],[0,142,0,0,324,[1,57620,46],[[0,129,0,130,144,[1,57621,1],[],[[57622,2,361],[57622,2,362]]],[3,145,0,0,0,[1,57622,44],[[4,146,0,0,0,[1,57622,2],[[0,147,0,148,149,[1,57622,1],[],[[57623,2,492]]],[0,151,0,152,153,[1,57623,1],[],[[57624,2,326]]],[0,104,0,105,155,[1,57624,0],[],[[57624,2,156]]]],[]],[4,157,0,0,0,[1,57624,3],[[0,147,0,148,149,[1,57625,0],[],[[57625,2,493]]],[0,151,0,152,153,[1,57625,1],[],[[57626,2,326]]],[0,104,0,105,155,[1,57626,0],[],[[57626,2,156]]]],[]],[4,159,0,0,0,[1,57627,2],[[0,147,0,148,149,[1,57627,0],[],[[57627,2,494]]],[0,151,0,152,153,[1,57628,0],[],[[57628,2,326]]],[0,104,0,105,155,[1,57628,1],[],[[57629,2,156]]]],[]],[4,161,0,0,0,[1,57629,2],[[0,147,0,148,149,[1,57629,0],[],[[57630,2,495]]],[0,151,0,152,153,[1,57630,0],[],[[57630,2,326]]],[0,104,0,105,155,[1,57630,1],[],[[57631,2,156]]]],[]],[4,163,0,0,0,[1,57631,2],[[0,147,0,148,149,[1,57631,1],[],[[57632,2,496]]],[0,151,0,152,153,[1,57632,1],[],[[57633,2,326]]],[0,104,0,105,155,[1,57633,0],[],[[57633,2,156]]]],[]],[4,165,0,0,0,[1,57633,3],[[0,147,0,148,149,[1,57634,0],[],[[57634,2,497]]],[0,151,0,152,153,[1,57634,1],[],[[57635,2,326]]],[0,104,0,105,155,[1,57635,0],[],[[57635,2,156]]]],[]],[4,167,0,0,0,[1,57636,2],[[0,147,0,148,149,[1,57636,0],[],[[57636,2,498]]],[0,151,0,152,153,[1,57637,0],[],[[57637,2,326]]],[0,104,0,105,155,[1,57637,1],[],[[57637,2,156]]]],[]],[4,169,0,0,0,[1,57638,2],[[0,147,0,148,149,[1,57638,0],[],[[57638,2,499]]],[0,151,0,152,153,[1,57639,0],[],[[57639,2,326]]],[0,104,0,105,155,[1,57639,1],[],[[57640,2,156]]]],[]],[4,171,0,0,0,[1,57640,2],[[0,147,0,148,149,[1,57640,0],[],[[57641,2,500]]],[0,151,0,152,153,[1,57641,0],[],[[57641,2,326]]],[0,104,0,105,155,[1,57641,1],[],[[57642,2,156]]]],[]],[4,173,0,0,0,[1,57642,2],[[0,147,0,148,149,[1,57642,1],[],[[57643,2,501]]],[0,151,0,152,153,[1,57643,0],[],[[57643,2,326]]],[0,104,0,105,155,[1,57644,0],[],[[57644,2,156]]]],[]],[4,373,0,0,0,[1,57644,2],[[0,147,0,148,149,[1,57644,1],[],[[57645,2,502]]],[0,151,0,152,153,[1,57645,0],[],[[57645,2,326]]],[0,104,0,105,155,[1,57646,0],[],[[57646,2,156]]]],[]],[4,375,0,0,0,[1,57646,2],[[0,147,0,148,149,[1,57647,0],[],[[57647,2,503]]],[0,151,0,152,153,[1,57647,1],[],[[57648,2,326]]],[0,104,0,105,155,[1,57648,0],[],[[57648,2,156]]]],[]],[4,377,0,0,0,[1,57648,3],[[0,147,0,148,149,[1,57649,0],[],[[57649,2,504]]],[0,151,0,152,153,[1,57649,1],[],[[57650,2,326]]],[0,104,0,105,155,[1,57650,0],[],[[57650,2,156]]]],[]],[4,379,0,0,0,[1,57651,2],[[0,147,0,148,149,[1,57651,0],[],[[57651,2,505]]],[0,151,0,152,153,[1,57652,0],[],[[57652,2,326]]],[0,104,0,105,155,[1,57652,1],[],[[57652,2,156]]]],[]],[4,381,0,0,0,[1,57653,2],[[0,147,0,148,149,[1,57653,0],[],[[57653,2,506]]],[0,151,0,152,153,[1,57654,0],[],[[57654,2,326]]],[0,104,0,105,155,[1,57654,1],[],[[57655,2,156]]]],[]],[4,383,0,0,0,[1,57655,2],[[0,147,0,148,149,[1,57655,1],[],[[57656,2,507]]],[0,151,0,152,153,[1,57656,0],[],[[57656,2,326]]],[0,104,0,105,155,[1,57656,1],[],[[57657,2,156]]]],[]],[4,385,0,0,0,[1,57657,2],[[0,147,0,148,149,[1,57657,1],[],[[57658,2,508]]],[0,151,0,152,153,[1,57658,0],[],[[57658,2,326]]],[0,104,0,105,155,[1,57659,0],[],[[57659,2,156]]]],[]],[4,387,0,0,0,[1,57659,2],[[0,147,0,148,149,[1,57659,1],[],[[57660,2,509]]],[0,151,0,152,153,[1,57660,0],[],[[57661,2,326]]],[0,104,0,105,155,[1,57661,0],[],[[57661,2,156]]]],[]],[4,389,0,0,0,[1,57661,3],[[0,147,0,148,149,[1,57662,0],[],[[57662,2,510]]],[0,151,0,152,153,[1,57662,1],[],[[57663,2,326]]],[0,104,0,105,155,[1,57663,0],[],[[57663,2,156]]]],[]],[4,391,0,0,0,[1,57664,2],[[0,147,0,148,149,[1,57664,0],[],[[57664,2,511]]],[0,151,0,152,153,[1,57665,0],[],[[57665,2,326]]],[0,104,0,105,155,[1,57665,1],[],[[57665,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[57666,2,108],[57667,2,109]]],[0,110,0,111,112,[1,57667,0],[],[]],[0,63,0,64,336,[1,57667,11],[[0,114,0,115,337,[1,57668,10],[[0,338,0,339,340,[1,57668,10],[[3,67,0,0,0,[1,57669,8],[[4,68,0,0,0,[1,57669,8],[[0,119,0,120,191,[1,57669,5],[[0,97,0,98,122,[1,57670,3],[],[[57673,2,100],[57674,2,101]]],[0,74,0,75,102,[1,57674,0],[],[[57674,2,512]]]],[[57675,2,101]]],[0,74,0,75,102,[1,57675,0],[],[[57675,2,512]]],[0,193,0,194,195,[1,57675,1],[],[[57676,2,342]]],[0,197,0,194,198,[1,57676,1],[],[[57677,2,343]]],[0,104,0,105,344,[1,57677,0],[],[[57677,2,345]]]],[]]],[]]],[]]],[]]],[[57678,2,108],[57678,2,109]]],[0,110,0,111,112,[1,57678,1],[],[]],[0,346,0,347,34,[1,57679,0],[],[[57679,2,348],[57679,2,513]]]],[]]];
+</script>
+<script type="text/javascript">
+window.output["suite"] = [1,2,3,4,[],[1,0,60951],[],[[5,0,1,6,[7],[1,35479,22203],[[0,8,0,9,10,[1,35481,1],[],[[35482,2,11]]],[0,12,0,13,14,[1,35484,22196],[[0,15,0,16,17,[1,35485,0],[],[[35485,2,18]]],[0,19,0,20,21,[1,35486,0],[],[[35486,2,22],[35486,2,23]]],[0,24,0,20,25,[1,35486,1],[],[[35486,2,22],[35487,2,26]]],[0,27,0,20,28,[1,35487,0],[],[[35487,2,22],[35487,2,29]]],[3,30,0,0,0,[1,35487,22192],window.sPart0,[]]],[[57680,2,514]]],[0,74,0,75,515,[1,57680,1],[],[[57680,2,516]]],[0,8,0,9,517,[1,57681,0],[],[[57681,2,11]]]]]],[[1,518,0,519,520,[1,197,35282],[[0,521,0,522,0,[1,200,2],[[0,523,0,231,524,[1,201,0],[],[[201,2,525]]],[0,43,0,44,526,[1,202,0],[],[[202,2,525]]]],[]],[0,527,0,528,529,[1,202,11960],[],[[210,2,530],[12163,2,531]]],[0,134,0,135,532,[1,12164,1],[],[[12165,2,107]]],[3,67,0,0,0,[1,12165,4683],[[4,68,0,0,0,[1,12165,4683],[[0,527,0,528,533,[1,12165,4680],[],[[12174,2,534],[16846,2,531]]],[0,134,0,135,532,[1,16847,1],[],[[16847,2,107]]]],[]]],[]],[0,535,0,536,0,[1,16848,17],[[0,537,0,538,539,[1,16849,0],[],[[16849,2,540]]],[3,67,0,0,0,[1,16850,14],[[4,68,0,0,0,[1,16850,14],[[0,541,0,542,543,[1,16850,14],[],[[16863,2,544]]]],[]]],[]]],[]],[0,114,0,115,545,[1,16865,18613],[[0,546,0,547,0,[0,16866,10],[[3,67,0,0,0,[0,16866,10],[[4,68,0,0,0,[0,16867,9],[[0,119,0,120,121,[0,16867,9],[[0,97,0,98,122,[0,16868,7],[],[[16873,2,548],[16874,2,100],[16875,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,18878,6],[[3,67,0,0,0,[0,18879,4],[[4,68,0,0,0,[0,18879,4],[[0,119,0,120,121,[0,18880,3],[[0,97,0,98,122,[0,18880,3],[],[[18882,2,550],[18882,2,100],[18883,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,20886,5],[[3,67,0,0,0,[0,20887,4],[[4,68,0,0,0,[0,20887,4],[[0,119,0,120,121,[0,20887,4],[[0,97,0,98,122,[0,20888,3],[],[[20889,2,551],[20890,2,100],[20890,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,22893,5],[[3,67,0,0,0,[0,22894,4],[[4,68,0,0,0,[0,22894,4],[[0,119,0,120,121,[0,22895,3],[[0,97,0,98,122,[0,22895,3],[],[[22896,2,552],[22897,2,100],[22898,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,24900,137],[[3,67,0,0,0,[0,24901,136],[[4,68,0,0,0,[0,24901,136],[[0,119,0,120,121,[1,24902,133],[[0,97,0,98,122,[1,24902,131],[],[[24903,2,553],[25033,2,100],[25033,2,554]]],[0,74,0,75,102,[1,25034,0],[],[[25034,2,555]]]],[[25035,2,554]]],[0,104,0,105,106,[0,25035,2],[],[[25035,2,107],[25037,4,556]]]],[]]],[]]],[]],[0,546,0,547,0,[0,27040,15],[[3,67,0,0,0,[0,27040,15],[[4,68,0,0,0,[0,27041,13],[[0,119,0,120,121,[1,27041,12],[[0,97,0,98,122,[1,27042,10],[],[[27052,2,100],[27052,2,557]]],[0,74,0,75,102,[1,27053,0],[],[[27053,2,0]]]],[[27053,2,557]]],[0,104,0,105,106,[0,27054,0],[],[[27054,2,107],[27054,4,558]]]],[]]],[]]],[]],[0,546,0,547,0,[0,29057,13],[[3,67,0,0,0,[0,29058,12],[[4,68,0,0,0,[0,29058,12],[[0,119,0,120,121,[1,29058,11],[[0,97,0,98,122,[1,29059,9],[],[[29068,2,100],[29068,2,557]]],[0,74,0,75,102,[1,29068,1],[],[[29068,2,0]]]],[[29069,2,557]]],[0,104,0,105,106,[0,29069,1],[],[[29070,2,107],[29070,4,558]]]],[]]],[]]],[]],[0,546,0,547,0,[0,31073,130],[[3,67,0,0,0,[0,31073,130],[[4,68,0,0,0,[0,31074,129],[[0,119,0,120,121,[1,31074,128],[[0,97,0,98,122,[1,31075,126],[],[[31201,2,100],[31201,2,559]]],[0,74,0,75,102,[1,31201,1],[],[[31202,2,560]]]],[[31202,2,559]]],[0,104,0,105,106,[0,31202,1],[],[[31203,2,107],[31203,4,561]]]],[]]],[]]],[]],[0,546,0,547,0,[0,33206,248],[[3,67,0,0,0,[0,33206,248],[[4,68,0,0,0,[0,33207,246],[[0,119,0,120,121,[1,33207,245],[[0,97,0,98,122,[1,33208,243],[],[[33451,2,100],[33451,2,559]]],[0,74,0,75,102,[1,33452,0],[],[[33452,2,560]]]],[[33452,2,559]]],[0,104,0,105,106,[0,33453,0],[],[[33453,2,107],[33453,4,561]]]],[]]],[]]],[]],[0,546,0,547,0,[1,35456,22],[[3,67,0,0,0,[1,35457,21],[[4,68,0,0,0,[1,35457,21],[[0,119,0,120,121,[1,35457,20],[[0,97,0,98,122,[1,35458,18],[],[[35476,2,100],[35476,2,101]]],[0,74,0,75,102,[1,35477,0],[],[[35477,2,562]]]],[[35477,2,101]]],[0,104,0,105,106,[1,35478,0],[],[[35478,2,107]]]],[]]],[]]],[]]],[]]],[]],[2,563,0,564,0,[1,57683,3268],[[0,527,0,528,565,[1,57683,280],[],[[57693,2,566],[57964,2,531]]],[0,527,0,528,567,[1,57964,15],[],[[57974,2,568],[57979,2,531]]],[0,134,0,135,532,[1,57980,1],[],[[57980,2,107]]],[0,527,0,528,569,[1,57981,12],[],[[57989,2,570],[57993,2,531]]],[0,134,0,135,532,[1,57994,1],[],[[57995,2,107]]],[0,571,0,572,0,[1,57995,1930],[[0,573,0,72,574,[1,57996,1929],[[0,74,0,75,76,[1,57997,1],[],[[57998,2,575]]],[0,78,0,40,79,[1,57998,1],[],[[57999,2,576]]],[0,46,0,47,81,[1,58000,348],[],[[58000,2,49],[58347,2,577]]],[0,51,0,52,84,[1,58348,5],[],[[58353,2,578]]],[0,86,0,56,87,[1,58353,1456],[],[[59809,2,579],[59809,2,580]]],[0,90,0,91,0,[1,59810,114],[],[]],[0,74,0,75,92,[1,59924,1],[],[[59925,2,579]]]],[]]],[]],[3,67,0,0,0,[1,59925,1026],[[4,68,0,0,0,[1,59926,1025],[[0,581,0,582,70,[1,59926,1024],[[0,573,0,72,583,[1,59927,519],[[0,74,0,75,76,[1,59928,0],[],[[59928,2,584]]],[0,78,0,40,79,[1,59929,1],[],[[59930,2,585]]],[0,46,0,47,81,[1,59930,378],[],[[59930,2,82],[60307,2,586]]],[0,51,0,52,84,[1,60308,20],[],[[60328,2,587]]],[0,86,0,56,87,[1,60329,2],[],[[60331,2,588],[60331,2,589]]],[0,90,0,91,0,[1,60331,114],[],[]],[0,74,0,75,92,[1,60445,1],[],[[60446,2,588]]]],[]],[0,590,0,40,591,[1,60446,1],[],[]],[0,46,0,47,592,[1,60447,351],[],[[60447,2,82],[60798,2,593]]],[0,594,0,595,596,[1,60798,88],[],[[60874,2,597],[60886,2,598]]],[0,90,0,91,0,[1,60886,64],[],[]]],[]]],[]]],[]]],[]]],[1,1,1,1]];
+</script>
+<script type="text/javascript">
+window.output["strings"] = [];
+</script>
+<script type="text/javascript">
+window.output["strings"] = window.output["strings"].concat(["*","*ScalePOC","*/tmp/ONLabTest/TestON/RobotTests/ScalePOC.robot","*ScalePOC.robot","*<p>ONOS Sanity Test Suite\x3c/p>","*Find Max Switches By Scaling","eNqNUktr40AMvvdXiJ5SKEm6xyUESunCHkpDY9rzxJZjUXlkRrKz6a9fTV4tpIFePIb5pO81s27+h2IF1iC04R/Evl1hAqlBN2Rlgwp1khbuptBHI4aEoWworuHXFCiCGnaa4XfTMRS+pBZm2WSAD5fvCiHlzRU6RZJ+3cDL47KA+8Vf/T2bdPOrWc/+YZq/YqJ6CxUOVCKU4nxA6j8pYWmziUO+wakF6zUDwxCIw4rxEjQJ417P0/2yeHyBUYV16Nl2N9lNGRR33i3EKrDErCOaXzOmm7O9Jp2wrLceSinrSB94kGtfctyTK4yKg//QEVxPjrPXX9Y+rxTTgJAjPor2cmigqg/M23MkU3zXW2hEzQ8XDbWnr6esc62fDs7nTyS1QDDwWRfNOCCDRGgpUnQzo7dEZhi93AQLebgZw7LJNDuy26OKTN9JMh3Dw777MkRYZT9KvAVqO8YWo2GVyazJjDuuoLBB5k99y+J5AU8H+sKjutTp6Zl8YJLLBSl6A1F+XMbEH+V/jw4Wgw==","*done","*OperatingSystem.Append To File","*<p>Appends the given contend to the specified file.\x3c/p>","*${SWITCHES_RESULT_FILE}, Max Switches Linear Topo\\n","*Appended to file '<a href=\"file:///home/fedora/workspace/tools/switches.csv\">/home/fedora/workspace/tools/switches.csv\x3c/a>'","*${max} = Find Max Switches","*<p>Will find out max switches starting from 10 till reaching ${stop} and in steps defined by ${step}\x3c/p>","*${start}, ${end}, ${increments}","*${max-switches} = BuiltIn.Set Variable","*<p>Returns the given values which can then be assigned to a variables.\x3c/p>","*${0}","*${max-switches} = 0","*${start} = BuiltIn.Convert To Integer","*<p>Converts the given item to an integer number.\x3c/p>","*${start}","*Argument types are:\n&lt;type 'unicode'&gt;","*${start} = 10","*${stop} = BuiltIn.Convert To Integer","*${stop}","*${stop} = 20","*${step} = BuiltIn.Convert To Integer","*${step}","*${step} = 10","*${switches} IN RANGE [ ${start} | ${stop+1} | ${step} ]","*${switches} = 10","*Start Mininet Linear","*<p>Start mininet linear topology with 10 nodes\x3c/p>","*${switches}","*BuiltIn.Log To Console","*<p>Logs the given message to the console.\x3c/p>","*\\n","*Starting mininet linear ${switches}","*${mininet_conn_id} = SSHLibrary.Open Connection","*<p>Opens a new SSH connection to the given `host` and `port`.\x3c/p>","*${MININET_IP}, prompt=${LINUX_PROMPT}, timeout=${switches*3}","*${mininet_conn_id} = 1","*BuiltIn.Set Suite Variable","*<p>Makes a variable available everywhere within the scope of the current suite.\x3c/p>","*${mininet_conn_id}","*SSHLibrary.Login With Public Key","*<p>Logs into the SSH server using key-based authentication.\x3c/p>","*${MININET_USER}, ${USER_HOME}/.ssh/id_rsa, any","*Logging into '10.0.0.121:22' as 'fedora'.","*Read output: Last login: Wed Jul  1 17:01:22 2015 from 10.0.0.121\n[fedora@ip-10-0-0-121 ~]$","*SSHLibrary.Write","*<p>Writes the given `text` on the remote machine and appends a newline.\x3c/p>","*sudo mn --controller=remote,ip=${CONTROLLER_IP} --topo linear,${switches} --switch ovsk,protocols=OpenFlow13","*sudo mn --controller=remote,ip=10.0.0.152 --topo linea \nr,10 --switch ovsk,protocols=OpenFlow13","*SSHLibrary.Read Until","*<p>Consumes and returns the server output until `expected` is encountered.\x3c/p>","*mininet&gt;","eNqNkctqwzAQRff5irsqqSnG70e6Kl4VuusXBMf1iDgy6Krk9zsKakm9aXeHGd0DupMkCQY3Hb2xM+zkr6s77xIdvpxOYTSu1rt1WSZ3P5WVnoed5JACUkIqSA1pIC2kg/SQPMN9glfjR5k0xBwswBKswBpswBbswB7chBZjz5rYS/6ku0fspVAoApQKZYBKoQpQK9QBGoUmQKvQBugUugC9Qh8gz4IxU2QR3Syjm1V0s45uNtHNNrrZRTf76OZNqfLbB4bVfpj50/2U9a+u3v3R+U3r43anj7/L/KvLNE1/Z4e318PuYqzRSz/M/vkLhuWIqQ==","*BuiltIn.Sleep","*<p>Pauses the test executed for the given time.\x3c/p>","*6","*Slept 6 seconds","*${status}, ${result} = BuiltIn.Run Keyword And Ignore Error","*<p>Runs the given keyword with the given arguments and ignores possible error.\x3c/p>","*Verify Controllers are Not Dead","*<p>Verifies each controller is not dead by making sure karaf log does not contain \"OutOfMemoryError\" and rest call still returns 200\x3c/p>","*${ip} IN [ @{controller_list} ]","*${ip} = 10.0.0.152","*Verify Controller Is Not Dead","*${ip}","*${response} = Run Command On Remote System","*<p>Reduces the common work of running a command on a remote system to a single higher level robot keyword,\x3c/p>","*${controller}, grep java.lang.OutOfMemoryError /opt/onos/log/karaf.log","*BuiltIn.Log","*<p>Logs the given message with the given level.\x3c/p>","*Attempting to execute ${cmd} on ${remote_system}","*Attempting to execute grep java.lang.OutOfMemoryError /opt/onos/log/karaf.log on 10.0.0.152","*${conn_id} = SSHLibrary.Open Connection","*${remote_system}, prompt=${prompt}, timeout=${prompt_timeout}","*${conn_id} = 2","*${user}, ${USER_HOME}/.ssh/id_rsa, any","*Logging into '10.0.0.152:22' as 'fedora'.","*Read output: Last login: Wed Jul  1 17:01:59 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","*${cmd}","*grep java.lang.OutOfMemoryError /opt/onos/log/karaf.lo \ng","*${output} = SSHLibrary.Read Until","*${LINUX_PROMPT}","*[fedora@ip-10-0-0-152 ~]$","*${output} = [fedora@ip-10-0-0-152 ~]$","*SSHLibrary.Close Connection","*<p>Closes the current connection.\x3c/p>","*${output}","*${response} = [fedora@ip-10-0-0-152 ~]$","*BuiltIn.Should Not Contain","*<p>Fails if `item1` contains `item2` one or more times.\x3c/p>","*${response}, OutOfMemoryError","*${resp} = RequestsLibrary.Get","*<p>* * *   Depricated - See Get Request now   * * *\x3c/p>","*${controller}, /onos/v1/devices","*Deprication Warning  Use Get Request in the future","*${resp} = &lt;Response [200]&gt;","*${resp.content}","eNrN0k1LxDAQBuC/ssy5libp901EsQddsAseRJaYzdpATUoau0jpfzfRkwdzySXtpfO2U+ZhssKJL4LxGdqXFcQJWlDnNvt7UUjAfE3cvuyfu8PNva3pQsVI30YbGv3JE9DKPcPDdX+4fbIffJy1LR8FE5omu06y1IbDxWb7icvd0l+EYYPNZpfhlKTo6l2YvCoy1pQu51rQ0f1DSW5rNtB5FnPnZnQTUSmVoUYoaYdfYdLKKKZcw/7uiMhvh5R8/OlAWepuhFGbl6QuYduSf8EoOjAKBedecB4dOA8EN9gLLqIDF6EbrrxgHB0Yh4JrL5hEByahRxp5wXV04Dp0w40X3EQHbkI3nHnBZXTgMhRMvOAqOnAVeqQLC37dvgG1CLp7","*BuiltIn.Should Be Equal As Strings","*<p>Fails if objects are unequal after converting them to strings.\x3c/p>","*${resp.status_code}, 200","*Argument types are:\n&lt;type 'int'&gt;\n&lt;type 'unicode'&gt;","*${status} = PASS","*${result} = None","*BuiltIn.Exit For Loop If","*<p>Stops executing the enclosing for loop if the `condition` is true.\x3c/p>","*'${status}' == 'FAIL'","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Switch Count, ${switches}","*BuiltIn.Wait Until Keyword Succeeds","*<p>Waits until the specified keyword succeeds or the given timeout expires.\x3c/p>","*${switches*2}, 2s, Ensure Switch Count, ${switches}","*Ensure Switch Count","*<p>Verfies the device count (passed in as arg) on each controller is accurate.\x3c/p>","*${resp} = ONOS Get","*<p>Common keyword to issue GET requests to the controller. Arguments are the session (controller ip) and api path\x3c/p>","*${ip}, devices","*${session}, /onos/v1/${noun}","*BuiltIn.Should Not Be Empty","*<p>Verifies that the given item is not empty.\x3c/p>","*Length is 2423","*${jsondata} = RequestsLibrary.To Json","*<p>Convert a string to a JSON object\x3c/p>","*${jsondata} = {u'devices': [{u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira,...","*${length} = BuiltIn.Get Length","*<p>Returns and logs the length of the given item.\x3c/p>","*${jsondata['devices']}","*Length is 10","*${length} = 10","*BuiltIn.Should Be Equal As Integers","*<p>Fails if objects are unequal after converting them to integers.\x3c/p>","*${length}, ${switch_count}","*Argument types are:\n&lt;type 'int'&gt;\n&lt;type 'int'&gt;","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Switches are Available","*${switches*2}, 2s, Ensure Switches are Available","*Ensure Switches are Available","*<p>Verifies that the switch's availability state is true on all switches through all controllers\x3c/p>","*Check Each Switch Status","*${jsondata}, True","*${jdata['devices']}","*${INDEX} IN RANGE [ 0 | ${length} ]","*${INDEX} = 0","*${data} = Collections.Get From List","*<p>Returns the value specified with an `index` from `list`.\x3c/p>","*${jdata['devices']}, ${INDEX}","*${data} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${status} = Collections.Get From Dictionary","*<p>Returns a value from the given `dictionary` based on the given `key`.\x3c/p>","*${data}, available","*${status} = True","*${status}, ${bool}","*Argument types are:\n&lt;type 'bool'&gt;\n&lt;type 'unicode'&gt;","*${INDEX} = 1","*${data} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46384', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 2","*${data} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46392', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 3","*${data} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46387', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 4","*${data} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46388', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 5","*${data} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46391', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 6","*${data} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46389', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 7","*${data} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46390', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 8","*${data} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46393', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 9","*${data} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46385', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Switch Role, MASTER","*${switches*2}, 2s, Ensure Switch Role, MASTER","*Ensure Switch Role","*<p>Verifies that the controller's role for each switch is MASTER (default in standalone mode)\x3c/p>","*MASTER","*Ensure Role","*${jsondata}, ${role}","*${data}, role","*${status} = MASTER","*${status}, ${role}","*Argument types are:\n&lt;type 'unicode'&gt;\n&lt;type 'unicode'&gt;","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Topology, ${switches}, ${cluster}","*${switches*2}, 2s, Ensure Topology, ${switches}, ${cluster}","*Ensure Topology","*<p>Verifies the devices count through /topoplogy api. Currently, cluster count is inconsistent (Possible bug, will look into it), so the check on that is ignored, but logged\x3c/p>","*${switches}, ${cluster}","*${ip}, topology","*{\"time\":778317929317684,\"devices\":10,\"links\":18,\"clusters\":1}","*${devices} = HttpLibrary.HTTP.Get Json Value","*<p>Get the target node of the JSON document `json_string` specified by `json_pointer`.\x3c/p>","*${resp.content}, /devices","*${devices} = 10","*${clusters} = HttpLibrary.HTTP.Get Json Value","*${resp.content}, /clusters","*${clusters} = 1","*${devices}, ${device_count}","*Argument types are:\n&lt;type 'str'&gt;\n&lt;type 'int'&gt;","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Experiment Links, Hosts, and Flows","*${switches*2}, 2s, Experiment Links, Hosts, and Flows","*Experiment Links, Hosts, and Flows","*<p>Currently this only returns the information the controller has on links, hosts, and flows. Checks can easily be implemented\x3c/p>","*${ip}, links","eNq11D0PgjAQBuD/crODUPpBN4MMrIa4GAeCmBCNENqYGMJ/t2yyGF7jdWvvrnmSa2+ke/u4ObKnkdxQkx2p7wZPlgRt6NI827oJm+5qt8slaQpx5z8q4u8Vaq7wr36O7otDnpUh3/nKzwe7rCyOecgAGQnMkBwMATMSDoaBGSkHQ8MMw8FQMENzMGKYITgYKcyofmKsuXTJEBxPNIY/7Jo2/pshYUbCwUhghuBgKJghORgGZmgORgozDAdDwwzFwcCnaMTBiGDGqrlxnt5Am5MY","eNpTqc4qzs9LSSxJrFWwVaguVc/JzMsuVrdSiAayi4uSgSwgIyW1LDM5FcguVc9PszJABabqOkDxgvyiErACY/VaED+luIQIvWaoeo0geksqCyAaXDyDXJ1DwGqKSxJLIIKOziGeYa4glTidqKenBwBH1D70","*${jsondata['links']}","*Length is 18","*${length} = 18","*${ip}, flows","eNrtm99r2zAQx/8XP2dwJ93pR94GLWxPKyx9GCUML1U2szQOjrtRSv73XdKXFZriDsc7mfhJjhJL+vC9O51yfiyWq/r3tpjePBbVbTEtTEDyHh35gBxMMSnKzeaj9OCk+N7U94c2TIpNU9VN1T4UUwK5JkVb3aX6vj10Vtur1NyV67SW+7a5T5PiNv2qFmn/46JeTuH5Vcow27Zsk/S+v7i4vJD7VbVMTyOVi5+p3R7a3x7a9NRaldv2c0prmRhZ9h7Qh2hY5tGksr07jCxLWm9l+EVb1eunNbYPm/0gn65nV9czGWVTN/LFd3Y3309xmZomyRRv5juZUFqlRVs3++csZKmpqcq/n3E5+/B19uXqUp6S2h+zw4cGmHbz3W7yzzRZCUmnk2R07NmCO+vyTTQtow0vC9NzQJeRMP+/iVN4UZjkMEI4C/ONwgQDL+FksBgJhsGJY/Gax3A6a4kDhdPbeW8ovVI7ZyS2NmQmTK81AFnpcUgZCVPpzugNJM/C7EBT5mgMnl6X1A9J74xah2nQoh1Gl33RZKN2Y2QsecS8cDpUG3+IIAafj52zUesxu5LUJEylNMVrMiIMFM25J5oU1OY/5BhwgAO4vlAy6AznQtKD9yEjkqzWYXYlqcjEA2p1mMaRWH9eNJn05uXSOKxzAJxmLPHneG7elSbrIMlRLUnPzsZsSEZDWvNycOgt5mXhXm9ejp7RxKxwRmOVxh9RZ0Q2A4VzOxav+Ur+I/7Uwundph1PADqW/yBidGdh9pQDdaWpRJdOb/4DFA2cddlT/sPiL8MAO/Yw8gOjyJatTG8YYfZFk7zajZEhkEZeOD2q3RixA2TMx871nnF0JqlImAq85jGagdAPsDGKYy/MZOPBuIGO2eNYTo1ecZghRjIZCZP0mnhHkmdhdsh/bLDOuTPNvraZIs04UNWWG0/9wdEyo0gB7Om9phvP/7zHygkDhMhZCVPziwEMwC5mZudqq4Y701Ri5qz2ONMagjBQ/Zsfe5mrhHMEF1xmOI1er2mI4wBvrfSGUm05IVuwDvISJutNKbvS5DPJZyTnuz/erb1p","*${jsondata} = {u'flows': [{u'life': 0, u'isPermanent': True, u'packets': 0, u'treatment': {u'deferred': [], u'instructions': [{u'type': u'OUTPUT', u'port': -3}]}, u'groupId': 0, u'priority': 40000, u'bytes': 0, u's...","*${jsondata['flows']}","*Length is 50","*${length} = 50","*${ip}, hosts","*{\"hosts\":[]}","*${jsondata} = {u'hosts': []}","*${jsondata['hosts']}","*Length is 0","*${length} = 0","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Check Each Switch Individually","*${switches*2}, 2s, Check Each Switch Individually","*Check Each Switch Individually","*<p>Currently just observe each information the device has. Checks can easily be implemented\x3c/p>","*Check Each Switch","*${jsondata}","*@{dpid_list} = BuiltIn.Create List","*<p>Returns a list containing given items.\x3c/p>","*@{dpid_list} = [ ]","*${devicedata} = Collections.Get From List","*${devicedata} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = Collections.Get From Dictionary","*${devicedata}, id","*${id} = of:000000000000000a","*Collections.Append To List","*<p>Adds `values` to the end of `list`.\x3c/p>","*${dpid_list}, ${id}","*${dpid_list}","*[u'of:000000000000000a']","*${devicedata} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46384', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000001","*[u'of:000000000000000a', u'of:0000000000000001']","*${devicedata} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46392', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000004","*[u'of:000000000000000a', u'of:0000000000000001', u'of:0000000000000004']","*${devicedata} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46387', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000005","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3VY8FAB+2FSA=","*${devicedata} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46388', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000002","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFupB4LAFx6GkA=","*${devicedata} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46391', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000003","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcWD0WABRQH2E=","*${devicedata} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46389', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000008","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4hXosAEdNJIc=","*${devicedata} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46390', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000009","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4BQ5xS/VYAPXdKa4=","*${devicedata} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46393', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000006","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4BQ5xSxziZuqxACAqLtI=","*${devicedata} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46385', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000007","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4BQ5xSxziZjjEzdVjAcXLM/c=","*${i} IN [ @{dpid_list} ]","*${i} = of:000000000000000a","*${ip}, devices/${i}","*{\"id\":\"of:000000000000000a\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"a\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46386\"}}","*${i} = of:0000000000000001","*{\"id\":\"of:0000000000000001\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"1\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46384\"}}","*${i} = of:0000000000000004","*{\"id\":\"of:0000000000000004\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"4\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46392\"}}","*${i} = of:0000000000000005","*{\"id\":\"of:0000000000000005\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"5\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46387\"}}","*${i} = of:0000000000000002","*{\"id\":\"of:0000000000000002\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"2\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46388\"}}","*${i} = of:0000000000000003","*{\"id\":\"of:0000000000000003\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"3\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46391\"}}","*${i} = of:0000000000000008","*{\"id\":\"of:0000000000000008\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"8\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46389\"}}","*${i} = of:0000000000000009","*{\"id\":\"of:0000000000000009\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"9\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46390\"}}","*${i} = of:0000000000000006","*{\"id\":\"of:0000000000000006\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"6\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46393\"}}","*${i} = of:0000000000000007","*{\"id\":\"of:0000000000000007\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"7\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46385\"}}","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Check Mininet at Lower Level","*${switches*2}, 2s, Check Mininet at Lower Level","*Check Mininet at Lower Level","*<p>PoC for executing mininet commands at the lower level\x3c/p>","*SSHLibrary.Switch Connection","*<p>Switches the active connection by index or alias.\x3c/p>","*SSHLibrary.Read","*<p>Consumes and returns everything available on the server output.\x3c/p>","*dpctl dump-flows -O OpenFlow13","eNrNmc1v2jAYh+/9K3KaWsQqf7z+6pTTNE5oTF2lHZG/MkWlgJJMK//9gnaoMFmblDhebhYofvyzH+zXzGazrMbZx5Geq9Xi2/eH9WK5+pFVfr85ZNerBb6lN9n1c+ly9Exu7q4yu9s9lr5tYdQ+Eqj0TMI8c78q3ZS7bc5vKRH1PGu02bTfm2fb9V7bR9/UOTk2zKHxdY5526j91q2Lze73uvJP2b4qd1XZHHI4vnnuNuvmsD/2JKW1mbbHt9f559XXh/vVcvnl/o4zRtkZEWGMCyP7EaEXIvRPHjYv9/37B6o1Ejron46biAIyKBHhqR8xkb88utpfCkEvmpZXAWZHO0hqOxRTngaDlt2DhpdBUwLx7HAWi35EUewwGJyKm8hQOwqi3CkRlZPbcQ5x4bS8bQdNbof1QILkaVI7OEOCB9PAp7RDKirjJjLQDs55YU+JgE5tRwfEhdPyth2Q2g4NROMgeZ7WDguOBasTprSjcErETWSoHc4wEyTCJrdjZIg+drDkdhjRJnW6FlBSOwRVFPoRRbHDClzwuIkMtENAYYJKCNTUdnRA0NgnK57aDkMMK04HzdLWHUI7Rfv9dsexw7ef/Fd7h7CAg0oIJt87OiA4jmyHSG6HKkxwFcHS7h2S4CKohNiUd1aOaQNxExloh6RSyH5E8ewYG6KPHTK1HRYDdv3W4lR2KM5wSjtsgYO9S0BaO7R1YsRE3mfHOQSPbYdKboeUIriKEGntUEgb1I8oih0eqCBxExlohyKY8hETeZcdHRBcRbYDo8R6gDeCBQcJSVL+HcgNVVL2I4qhB0OCgI6byDA9uGEIBcdfMXXh0QVx4bS8CvBUbsutbz78bD79AfHqc+E=","eNqtysEKgyAcgPF7T/E/7FDiJLWVDLx2GjjYYMew9BBFRioUY+8+9w77bj/4Tm8XwxrDByQghMBTOP+pTLX3x7Nrb+oFm13nA3LVUsILyPfRyHJnxTWDwblptEm0TImKC3sRFQYTNx1Gt8iacNZ4DEH3c/owLN2qh8kGL9kP/RGsl7RO8HYxhJAvnsY18A==","*dump","eNqV1E1LwzAYwPG7n6Kn9aKS5MlrhydBPDlQ8AvM4ApdU9bADsPvbjob9yQ5hbJDyp/+CNmTzeC3r272zYF24fdg/YF0lDwuD22m/usJGOebb79t7jb/LQstS1oWW5W3EFpIWoityVseWp60fG0FzVsRWpG0IraQtzK0MmllbEXeqtCqpFWxLfamQ6uTVse22JsJrUlas7ay2Bsly2GQ9DRIzNH2dp8fH+fe7w+Xdjo57/ZumNuuaXeTHV8Gd6bQ/jRzONrBdZSpvw/dz9dzpt2bG+26YNdFFHStwHKBYYHdhHUBmFO0loOcA8wB5qDkeC3Hc45jjmOOl5yq5UTOCcwJzImC06SWkzknMScxJ0uu+s+ock5hTmFOlZys5XTOacxpzOmSM7WcyTmDOYM5U3CGVU82KUabJLNNiuE26MZ7t0fn7bMb/ckNgz1d2n5akHjlCBaQfTBuLzopIV7gsN4Tx37sR+uXxS+Ug993","eNpdysEKQEAQgOG7p5iD3Gx2ZzaxuXsQQinKOMm7G2XTbH//7cuv7eT95Bs6KFYO/XYwzLaVy5HnqrWVebOwL0OHjqiYOED2WyfWKeuirVOLYlFZjLZJLYklZemz3qbWi/XK+mhRW2PMAzJYQjQ=","*links","eNpd0DsOgzAURNE+q6BCpECy3/NXLIGCVaAYKaGJ968ouLC45ehMdYud91rM+K7LPL7q8r22HaZtHbb1+SgCF7jCFe7gDu7hHh7gAR7hEZ7gCZ7hGW4NA5n7oxURFJTuCr/+2t3BFe7hDh7gHh7hAZ7gEZ7hCd6CCBL2w+c4j3Ovf/oBSImv4A==","eNpTqc4vLSkoLalVsFXIMNRNLckwUMspsdZVSy+xLgbzDRU0/L0V/L01uTKM0OSN0OSN0eSN0eRN0ORN0ORN0eRN0eTN0OTN0OTN0eTN0eQt0OT19PQAQkZI/w==","*ports","eNpF0DsKAkEQhOHcU0xkJkx3z9vzLLqgazBzfxSsrc4K/i+qKeH1GTFMuW3rKUOwdGi4TEVURj3jf9mwHzMwIzMyc5bAElkiS84yWCbLZNlZAStkhaw4q2CVrJJVZw2skTWy5qyDdbJO1p1JPF+Nfmvkr+/92I9tXR/r/gVRGmoL","eNpFyjsKgDAQRdHeVUxhazDzSTHgcgQLIUKSSty7AcdJ9R7cM9+51avVBzYoEc6sa99lr0fUaA8VYSpoET3iH79HSp2RMXJGzmgwNsbO2BkPJsbEmTiTwZKxFEJ4AZUyOjE=","*Stop Mininet","*<p>Stop mininet topology\x3c/p>","*Stopping Mininet","*exit","eNpljzsOwjAYg/ecwgNTpFZN390YuAEjYkBp4I8oSVVHYuPslIEBao+29claaxxTnGcfbjCwMaQlTpNbqGwBpX/iAZMPd6p8q79mAT59suKoaMASrMAabMAW7MAeHECzQRSQyEQlBlJCKkgNaSAtpIP0kAHyXR1icMrGxzy55Eb4gD4fuhXn1hsj1enqxrhc9n7OTJF9bEqD13n3Bj01RL8=","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure No Switches are Available","*${switches*2}, 2s, Ensure No Switches are Available","*Ensure No Switches are Available","*<p>Verifies that the switch's availability state is false on all switches through all controllers\x3c/p>","eNrN0k1rxCAQBuC/ssw5G6Lm+7p0aS6bwxZ6KKVY1zRCqiFKlhLy36vtqYd68WI8zSsT5mHc4MZXwbiG9mUDcYMW1NBmfz8KCZivmdvL63P3dHq0NV2pmOj7ZMOBTponsChXwKW/PNj7z2FxhWBiocmhkyy14Xi3WT9zeVivd2HYaDPtMpySFB0/hMmrImNN6XK+CDq5fyjJbc1GqrXQnRvRDUSlVIYaoaSdfYN5UUYx5Rr68xsivx1S8umnA2WpOwijNi9JXcK+J/96UWxeFOrNvd48Nm8e6G2w11vE5i1C91t5vTg2Lw711l4vic1LQt8z8nrr2Lx16H4br7eJzduE7jfzesvYvGWol3i9VWzeKvQ9F9b7un8DGdu3UQ==","*Length is 2413","*${jsondata} = {u'devices': [{u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira...","*${jsondata}, False","*${data} = {u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${status} = False","*${data} = {u'available': False, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46384', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46392', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46387', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46388', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46391', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46389', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46390', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46393', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46385', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure No Switches in Topology, ${cluster}","*${switches*2}, 2s, Ensure No Switches in Topology, ${cluster}","*Ensure No Switches in Topology","*<p>Verifies the topology sees no devices\x3c/p>","*${cluster}","*{\"time\":778322492077022,\"devices\":0,\"links\":0,\"clusters\":0}","*${devices} = 0","*${clusters} = 0","*${devices}, 0","*Argument types are:\n&lt;type 'str'&gt;\n&lt;type 'unicode'&gt;","*${max-switches} = BuiltIn.Convert To String","*<p>Converts the given item to a Unicode string.\x3c/p>","*Argument types are:\n&lt;type 'int'&gt;","*${max-switches} = 10","*${switches} = 20","*<p>Start mininet linear topology with 20 nodes\x3c/p>","*${mininet_conn_id} = 3","*Read output: Last login: Wed Jul  1 17:02:41 2015 from 10.0.0.121\n[fedora@ip-10-0-0-121 ~]$","*sudo mn --controller=remote,ip=10.0.0.152 --topo linea \nr,20 --switch ovsk,protocols=OpenFlow13","eNqtk81qwlAQhfc+xayKlSKZ/MeuiqtCd30C0dQbtAnk3OLr98wkFuvahXC4d/i+OeS6Wq1kO7a72PVH6dt4GcbTYsXDt8PBjvZDH8fhfG7H29MwIGKzCCohlZBJyCUUEkoJlYRaQiNBE/54rxxQTihHlDPKIeWUckw5lyZyS8ali/vQEg4VpIJMkAsKQSmoBLWgERAOwkE4CAfhIByEg3AQDsJxBz93/YnkZdAX3j/LMqQMqYWMIbOQM+QWCobCQslQWqgYKgs1Q22hYWgsaGLExKPDna6GV+erCdQNagp1h5pE3aKmUfeoidRNaip1l5pM3ZaaLTUb0rkJsrkJ8rkJirkJyrkJqrkJ6rkJmrkJvEDjSa9VMO3v+Gl/F0z7u2La3yXT/q6Z9nfRtL+rpv1d5vtbFf8426H/6o4/49/Deui7+oy7Md695P39HYevD+9R7269Xv93bD/eN4vvru/4L3s6xtdfIU3e0w==","*${conn_id} = 4","*Read output: Last login: Wed Jul  1 17:03:04 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","eNrN109LwzAUAPCvMnKuJenftTcRxR104AYeREaapi5Qk9HGDRn77ibz5MF3eZfXXprXpuTHS17aM+v10Sg9s/btzEzPWuaGlv89JEuY/z7ocHPzutrePYa2PEozym4MQT996YRNLl6zp9vN9v4lPPA5TKH5bJSZZLJYWZWG4P4UYuuDtovj5mS82ofYHGNZmqfi5sP4oi65aqoY15ORY3yHszq01V7Os5lXcYxxRNJa56U3zobBn9lhct4pFzusH3Yi/+1hrR6vPQRP4yky0RZVwXN2uST/gnty4B4LbkCwJgfWWHAJgjty4A4JFjBYkQMrbIYLEDyQAw/YDFcQWAhy4OuQEOK8qcEUExRjwWCZFhk9cIZdxQIUc3pijs3xEpzUBTlxga1b8MdWSQ5cYuc0WKg5vVWMXsRgnb52JraIc6w4A1NMT4wFCxAs6FUtgS5b4M7El+TES+ychjemhhy4wWaYg+CKHLjCguFfppocuMZO6Zjh98sPYTZyBA==","*Length is 4838","*${jsondata} = {u'devices': [{u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira,...","*Length is 20","*${length} = 20","*${data} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'd', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46409', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'e', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46405', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'b', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46415', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'c', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46404', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'f', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46416', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'11', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46397', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46399', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'12', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46401', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': True, u'chassisId': u'10', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46398', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${INDEX} = 10","*${data} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46413', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 11","*${data} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46406', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 12","*${data} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46407', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 13","*${data} = {u'available': True, u'chassisId': u'13', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46402', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${INDEX} = 14","*${data} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46412', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 15","*${data} = {u'available': True, u'chassisId': u'14', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46411', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${INDEX} = 16","*${data} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46408', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 17","*${data} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46410', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 18","*${data} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46414', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 19","*${data} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46400', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*{\"time\":778328373894303,\"devices\":20,\"links\":38,\"clusters\":1}","*${devices} = 20","eNq9mDtrw0AQhP/L1inubvWw1QXHhdtg0oQU0ukEJiE21hEIwv89Em4ScoiMyUidHic+NLN7sxrk7fD+2kv1PEh/9lINcjqeo1Sicidt+Dj4MJ4cu8r8PDK5jPf7+G2Fm1+RTyvi52m6+7B73G724/N9rON04X6z3z1txydAjBbGCDdhzL/U6m+MeXDrCBimQTFMzcBwsCiW4Y0AY3QMjBzGKBgYHYphDaNSMrhSlGFRuGANpWA9jNEwvFHAFi0ZX6OFv4ZnYMAWNUoQ5Vp+UMFSumgJe2PFECXAorQMjBzGyBjesLA3HMMbK9gba4YoHSwKIwSmuqguH4ktnL4so31dkyXkjYYhSg2LQrFoCWMUDAy4bxhK32hgDM+oFIUrhdHMbxiXGJE4lTeUMS45eGvT5eeU1NamjEis8Jzils8bqTnFMdLXX1ozhEH5v7GGvcGIxKmNXv9hQHi5fAH4O25R","eNpTqc4qzs9LSSxJrFWwVaguVc/JzMsuVrdSiAayi4uSgSwgIyW1LDM5FcguVc9PszJABSbqOkDxgvyiErACY/VaED+luIQIvaaoeo0geksqCyAaXDyDXJ1DwGqKSxJLIIKOziGeYa4glTidqKenBwBG5D7y","*Length is 38","*${length} = 38","eNrtnV1rG0cUhv/LXqtwzpyPmfFdwabNTWqoc1GCCbK8bkVty6zWLSbov3dWAZOCNx3CaHzGVW68tmLt6uE9n3Nm/Lm7ud38ve1OPn7u1tfdSecCsveo7ANKcN2iWz48vEuv4KL7fdg87q9h0T0M682wHp+6E1l04/qu3zyO+xfW2/N+uFve9/fp+3F47Bfddf/XetVPv9htbk7g3/+W6RbbcTn26dUfT0/PTtP3t+ub/stdlqs/+3G7v756GvsvV7fL7fhr39+nh2IS7wFDRJ9eGId+Od7t75w+zv023X41rjf3Xz7f+PQw3eSXDxfnHy7SXR42Q/qPP9DucnrEm34Y+vSIHy936YH62341bobpfVbpY/bDevn1e5xd/Pzp4rfzs/Qu/fjHxf6HDoR3l7vd4rtJ8sTDCE20STOqeCFQSzT5mSY5tsqTBCm8LE8vAbUhQ399aXJ4UZqsGCE0J014dWmCgxelGVTSEx5emteFpCliVZqaxOljHWnm0XTPNFGdVZ5zXjOFIcF03RxQtmvrHqJIQ7bOVvPNbJLVpNk0zcgxwOF12RciqWQ2BkVmD3V02Rdzma/O8xsxKCB41xxQZzYGRQDP2pCtO6teM5tkNWk24Tlneh4KAtHXoXmVRROfaQZ8GaejYLblERDJ0+Ht/KqMMh15s9lRLslqymyaJoiCb0iXwWwrLrnzGFvzmN5oZpQiEHEIlVqbq2KtTVS7IYjT0/HhTX1VKDlCMes0c0lWk2YGTTVLk4RiaEiXajUEicNUBjXnMsVude6mr4eX5k2p7MjsQqV37LTS4kUeTXqm6Zis8pzvxClCUGoOqN2V30gg5BuydbPTR9kkq0mzCc85Q9NpJD38RAJiIZJoNQZJFOFKMSiTZsbihUO7LtP5FJ6kIWmadZnZJKtJswlDn1m8AA1B4tHQSyWbAoSRKxWWWKi3icGs4yRiCVyh5VHI1DGYjenIQhSOyizUJKb0iiK3o0wfjYb0fJLVlJlh50YTpJS7B3FSZ/AIXal2BxLZzd1jRD38kGEmzP+WJrHNEKRMwNFpQyTJahWUTbKakbdLM1VBMahAcy6TzS6gO4riD5+1IxQq0A1E87lOnBOtNJedSTOnQH/1XHN+WAYogobWgNqtg9ilupK5HVs3Wwflk6wmzSY850xVmZ7RuQoTCVyIpDiznSOHhJUW0LmYyxS0GoPEEXvEI9BivTjmlML7hmzdrtfMJVlNmhk0rS6vCQoiVOpsShZNfabJQef2WtldDuJUp2OFg4+k1LY1o8tBiaQHX6FEL0fSrsvMJVnNyJvQ5YzLdMrJ+ptzmXZzI0oXUOHsjlJtYvFm1ylzSRaQ5v+Aphel2JAure6nFFD0hJZ0meMyxeyGSkEv6GJzQO3u6aep4XH4+nzfpCqycc3s+Gs2yQI94mI07Y6/ogCTJZo5C7+IZmdlyIXkPhsydKtNd0UXmLE5aTq7k9kpQrpKhSUVO5Arqt1eXPKqVOHwvVK2HtVsLy659KgNkRSzvbhcktWMvAldzvXipilDOLrMcnXQ1NysMBfHpdrEZk9+zSZZID0qRlPM1kHMgbgxmnaPyyYJnl1DZm72aPzpj7OQO5p5obUgSRl7qLAWFErtsrJ6gJSQUPCV1oJCsdQoqNny3DGki+aAmj2Ri2TqbmJDtm62qMwmWU2aTXjOOZqB0VdodsRC04Vgdi7beXCVtrJk0swZIwa06zJDjBXy9nLSBLtGnkmymjQzaJqdiaNAqno09HLJZhJnrLSjRUsdIqV2t19EDlDhTza8GZTzW60ChCiNCdNwDQQgFU6EfDso5wN6Lsmjx8wJ6I4hVNoX5L+ieX72/vTd+58+JarfWVey3aP3HIIGbREqRbse1LHECqecvTGVzo56CAEpHC2/aGzKZWpLo1Zi/eXuH7Slj+g=","*${jsondata} = {u'flows': [{u'life': 0, u'isPermanent': True, u'packets': 0, u'treatment': {u'deferred': [], u'instructions': [{u'type': u'OUTPUT', u'port': -3}]}, u'groupId': 0, u'priority': 5, u'bytes': 0, u'state...","*Length is 100","*${length} = 100","*${devicedata} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${devicedata} = {u'available': True, u'chassisId': u'd', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46409', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000d","*[u'of:000000000000000a', u'of:000000000000000d']","*${devicedata} = {u'available': True, u'chassisId': u'e', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46405', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000e","*[u'of:000000000000000a', u'of:000000000000000d', u'of:000000000000000e']","*${devicedata} = {u'available': True, u'chassisId': u'b', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46415', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000b","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPUo8FAC+RFbE=","*${devicedata} = {u'available': True, u'chassisId': u'c', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46404', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000c","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGerB4LAHqAGwI=","*${devicedata} = {u'available': True, u'chassisId': u'f', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46416', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000f","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8TT0WAEUfIFY=","*${devicedata} = {u'available': True, u'chassisId': u'11', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46397', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000011","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oaF6LACPAyV2","*${devicedata} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46399', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9YbqsQBT8iqV","*${devicedata} = {u'available': True, u'chassisId': u'12', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46401', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000012","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY3UYwGT0C+2","*${devicedata} = {u'available': True, u'chassisId': u'10', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46398', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000010","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBuoxwIATs801Q==","*${devicedata} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46413', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMdEPRYAhL459w==","*${devicedata} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46406', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7ipeiwANe8/Gg==","*${devicedata} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46407', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnEj9VgAYl9EOg==","*${devicedata} = {u'available': True, u'chassisId': u'13', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46402', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000013","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hurxwIACeVJXA==","*${devicedata} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46412', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUG+sHgsALJdOfQ==","*${devicedata} = {u'available': True, u'chassisId': u'14', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46411', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000014","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3NBEPRYAymhToA==","*${devicedata} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46408', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRbqsQDjmFjG","*${devicedata} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46410', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRY4xC3VYwF4al3t","*${devicedata} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46414', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRY4xC1xiJupxwIAiNtjEQ==","*${devicedata} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46400', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRY4xC1xiJvhEDdXjwUAFL5oNg==","*{\"id\":\"of:000000000000000a\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"a\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46403\"}}","*${i} = of:000000000000000d","*{\"id\":\"of:000000000000000d\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"d\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46409\"}}","*${i} = of:000000000000000e","*{\"id\":\"of:000000000000000e\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"e\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46405\"}}","*${i} = of:000000000000000b","*{\"id\":\"of:000000000000000b\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"b\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46415\"}}","*${i} = of:000000000000000c","*{\"id\":\"of:000000000000000c\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"c\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46404\"}}","*${i} = of:000000000000000f","*{\"id\":\"of:000000000000000f\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"f\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46416\"}}","*${i} = of:0000000000000011","*{\"id\":\"of:0000000000000011\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"11\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46397\"}}","*{\"id\":\"of:0000000000000001\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"1\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46399\"}}","*${i} = of:0000000000000012","*{\"id\":\"of:0000000000000012\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"12\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46401\"}}","*${i} = of:0000000000000010","*{\"id\":\"of:0000000000000010\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"10\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46398\"}}","*{\"id\":\"of:0000000000000004\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"4\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46413\"}}","*{\"id\":\"of:0000000000000005\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"5\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46406\"}}","*{\"id\":\"of:0000000000000002\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"2\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46407\"}}","*${i} = of:0000000000000013","*{\"id\":\"of:0000000000000013\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"13\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46402\"}}","*{\"id\":\"of:0000000000000003\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"3\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46412\"}}","*${i} = of:0000000000000014","*{\"id\":\"of:0000000000000014\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"14\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46411\"}}","*{\"id\":\"of:0000000000000008\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"8\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46408\"}}","*{\"id\":\"of:0000000000000009\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"9\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46410\"}}","*{\"id\":\"of:0000000000000006\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"6\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46414\"}}","*{\"id\":\"of:0000000000000007\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"7\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46400\"}}","eNrF28tuIkcUBuD9PEWvohmLWHU5py4TsYrilRWiyUhZorpGaDyAgCjjtw8kC0wPRFWtOhS7lhH9129/dFVX++HhYdjz4cdGr3eLp99+/7x8el78MezS9uV1eL944o/yw/D+2yrO2Tfx4eO7IWw2X1bpeMTZ8WVAmoQGZkP8a+cOq816rh6N4vvZcHD+5fi+2bBebl34kg77uTwd+NdD2s8FHA/2aR2X+WXz93KXvg7b3WqzWx1e53D65Fl8WR5et6czGRPC4MLp0/fznxe/fv60eH7+5dNHhSjxu0QCUWlvRonY9UTsnIjdzIOz1bb8/CCdY9rRNmJBVDWik0xliYoa+S+P2217hsD/D/Bw0iF667Bok7wctL3xt8jfjNpwRscjBq7LIpHw8ByiJa6k1kcWNjasZJqPxiFKfMjuPkICcTlotNcHrc6DBqPIeChkWo0S6XvyMFaOrl5o2jZSqUMplUNZIjodV0Ioah3QW4cD4fjloDnrqyNAxLJENDpytJq2kVod0aNv2Mg0HY1DlOjA7jq8Pjb1dtCWmb5zKy2thFEkcUceQfOsRufnfedWGrJ3Zb8lOh+tQ5T4UL19eOExl82t8M13JUM6Hi5aWZaIhkc6/oS2kVodAbht2Mg0HY1DlOjQ3XXY7C9vRzC48VUN50FLAWQ6jOBZlCUi0RHReaBtpFKHkUabho1M0nEtBPV9K9NbR+DAY9lERp8HjUrT6bAKednUhkZHyFyWnX9qI7U6XIi6YSPTdFwJIYh12O46jNGjmxFWdF2XW+Y8K0tEoiOB1IK2kUodVnCpGjYySce1EJJYB2edeUDyGkerYHFjtWXOo1ZgqHgoL60xZYkoeCDTAhxtI3U8lEfGUsNGpvBoHqKIR+8dc8jC+9EqWOme63LlXUy6LBENj6ScpW2klkcAFRs2Mo1H4xBFPER3Ho7xy6mEtdj16hGEAFWWiIQHR88MbSOVPII8VtiwkUk8Woco4tF7xxwZBz1aB996jOY+aw8VrHJYloiGR8hK0zZSy8NF4Rs2Mo1H4xBFPKA7D2PiaFOw9eMTlTwi8wzKEpHwECCDom2kkkcU3LiGjUzi0TpEEQ/sziNHMdoTtLbnfV0VdVbjJyTvysMbgWXnv899XRUtJtuwkWk8roSg3hPkvbfMQRnjxg//Yderh2QuurJEFDzg32c0aRup5CEFV6xhI5N4tA5RxEN355EjG830Zd+1h9RZ2rJENDy8zp62kVoeFn1u2Mg0Ho1DFPHovWkOWnP1dqavHxnHrpMredRhyhKR8LAioKNtpJIHMMdTw0Ym8WgdooiH7c4jYZCXowbZlQconXVZIhoejnlL20gtD510bNjINB6NQxT9p2D3XXODToz3PW7s9ojzqLkSdDxiQFWWiISH48gNbSO1PLKIoWEj03hcCQF0PL6u1qt1Ovzw5+GnfwCLfOn8","eNqtyrEKgzAUQNHdr3hDBw1pMCaVUMjqVLDQQkeJmiEoRswLKKX/3vQfercD9/T2EdeIH9BACIHA4fynsra5P55dc2tfsNl1PiBvG85EAfnuRl3uVXHNYPB+cjaJlyklhbIXJSmMcTPo/KJrpmoeKKDp5/RRWLrVDJPFoMUP/YE26EomBLuMjLEvn3U19A==","eNqVl81qGzEURvd9ill5Nm3Rp39N6KpQsmqggb6AO8QDkxljD2QR+u6RnFGiq7sSwQuZAwfxeY6dw7zd3a/XrTthiK9v43YSA8T39IfuPP37oeHc4Wm7674cPlgZWUlYmdlQsyqyirBqZz1qVkdWE1ZnVtWsiawhrMmsqVkbWUtYm1l2NxdZR1iXWXY3H1lPWL+zQdZsiGwgbMisrlmINIaga4iMW4bftqvGy+sFz/A0H+h+2AeUQjA8LQg6IVTG2T2RRgRdETrj/KppR9AhYTLOr5qmBN0SNuP8qmlN0Dmx7ynBr5oGBV0UPuP8qmlT0FERMs6uKtOqkq4qRcaLqz78fXx8mbbj6bU/X9ZtPa7ztR+6/uE8Lr/m9QWq/99d4+jzOkC6d+/X6+0DgOH3uoz7Qd4Ou0Gi1SBrgywN8tOwHxTR6VadqnWq1KlSp7jOtep0rdOlTpc6zXRKtOpMrTOlzpQ6w3WqVWdrnS11ttRZrmv+MLpa50qdK3WO60Krztc6X+p8qfNMp2WrLtS6UOpCqQtcZ5qfbMEebUGebVEa309U6ZuVvCY0JyBKMKVprgtYXkD6AhIY8MKY5sKAJQakMSCRAa+Maa4MWGZAOgMSGvDS2ObSgKUGpDUgsQGvjW2uDVhuQHoDEhzw4tj2rz+WHJDmgEQHvDq2uTpg2QHpDkh4wMvjmssDlh6Q9oDEB7w+rrk+ktVHkvpIwX5auKI3f8bndRt/rst2Wed5vLz20zlJPn7bySg5RsfnG4O1Kv9T4PaOPE/LtIxbOrwBKHe7EQ==","eNpdyjkKgDAQQNHeU0whdgYnC27YexDFCEIEx0q8uyMYZMLndy+/wkn7STcMUGzUj+Eg8Njx5Uy+6rBSbwj7Og0W67pYqIfst5qtFlZH26bWsDXCms82mFrL1gprozWpdWydsC5aJ61S6gE5z0JF","eNpl0jtqw1AURdE+o3BlnMKg856+eAguNAoRGRI30fwJsQuZ5fKyT7W4a87LtjbH7+1yPn5tl9/HncNpvh7m6+fHWuiFXumV3tJbekfv6D29pw/0gT7SR/pEn+hpBGpcvBFqGBGjYmSMjhEySkbKaBkxo2bkjJ4RNIpG0mhaNC2YPr+s8JVl75X+2Ne9t/RK7+gtvad39IHe00f6QJ/oI/35ZIW3fB1EocbFm2FcqBgZo2OEjJKRMlpGzKgZOaNnBI2ikbRIGkx/bvfbfdn+2x8UHmu4","eNpN0Ttuw1AMRNHeq1CVLoDue/pnPUZiIHEKaf9IAJMz7AjMrXhOhu/fYxxO3u/XFwdxtaMNt7PF2DS2HF9XP/p/1iPryrqy7myKbFI2KZuczZHNymZls7MlskXZomxxtka2KluVrc62yDZlm7LN2R7ZrmxXtjtjzK+Ofuuo8nVGKoAigFNKmhzYA4NQREgSbIJRKCokC3bBMBQZkgbbYByKDsmDfTAQRYgkwkYYiaJEMmEnDEWRIqmwFcaiaLXUatZq0rr9PJ6P5/16+7w+/gAxu9yg","eNqN0LFOwzAUheHdT3EGpkitcp02TTYG3qAjYkCJ4UQEO8q1xNZn5zAgARP2Zv/+dOWmaXCtZduW/ArDVHLdy7qm3cPUIjQ/r7sR65LfPBz/t36/ji38Y6kTkwc3eIR38BP8DO/hF/gAH+GmznRvCkyFKTE1pshUmTJTF/+OpwMWrx5oYAQ78ASewR68gAM4gtIpndIpndIpndIpndIpnd/6Q8kpTOV9W1NNM5YMs2M/aMakv5o9PL6kuezP98t2sPbwtS0abk93nx7GW4A=","eNrN171qwzAQAOBXCZpdo/Nv7DW0NEsypNChlKLIci1wpWCbhBLy7pXSqUNvueXsSSdk7uOks30VnTlbbWbRvl2F7UQrfN/Kv5cSiVi+TyZMHl63L5vnMFZnZUd1HEOwV+NsEjH5OBC7/e4xzH/1UxxYbSeVrLZOpyE4XEJsfzJudT5c7KKHEJtjLEvzFB4+7VLUpdRNFeNmsmqMz/DOhLEe1DzbeRtTjAkp5/yiFutdyP0qTpNfvPZxwf7pA/LfFc6Z8b4CZBpvyKAtqkLm4nZL/vV23Lwd1dugXsPNa6jeEvUeuXmPRC/gXs3Nq6n1LVBvz83bU+tbYV4Abt57RgRw3tRogfmBqV60QUPGzptRTzCgYMkOLKkVXqM7uuAGLqgtC//EKrl5S+qGRlu0ZHeCyQcY7dD3xbwOcE4FZ2iB2YGpXkC9wK5hAbljoa8kueYGXlM3NP5Garh5G2p9JeqtuHkrqhf/Saq5eWvqfo71fb/9ADaKa7A=","*Length is 4818","*${jsondata} = {u'devices': [{u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira...","*${data} = {u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'd', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46409', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'e', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46405', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'b', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46415', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'c', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46404', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'f', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46416', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'11', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46397', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46399', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'12', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46401', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'10', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46398', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46413', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46406', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46407', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'13', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46402', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46412', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'14', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46411', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46408', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46410', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46414', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46400', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*{\"time\":778334956950892,\"devices\":0,\"links\":0,\"clusters\":0}","*${max-switches} = 20","*${max} = 20","*${max}","*20","*${SWITCHES_RESULT_FILE}, ${max}\\n","*ONOS Suite Setup","*<p>Transfers the ONOS dist over to the test vm and start the controller. We will leverage the bash script, \"onos-install\" to do this.\x3c/p>","*${CONTROLLER_IP}, ${CONTROLLER_USER}","*Create Controller IP List","*<p>Creates a list of controller ips for a cluster. When creating a cluster, be sure to set each variable to %{OC} env vars in the variables section\x3c/p>","*@{controller_list} = BuiltIn.Create List","*${CONTROLLER_IP}","*@{controller_list} = [ 10.0.0.152 ]","*@{controller_list}","*${rc} = OperatingSystem.Run And Return Rc","*<p>Runs the given command in the system and returns the return code.\x3c/p>","*onos-package","*Running command 'onos-package 2&gt;&amp;1'","*${rc} = 0","*${rc}, 0","*onos-install -f ${ip}","*Running command 'onos-install -f 10.0.0.152 2&gt;&amp;1'","*Create HTTP Sessions","*<p>Creates an http session with all controllers in the cluster. Session names are set to respective ips.\x3c/p>","*${HEADERS} = Collections.Create Dictionary","*<p>Creates and returns a dictionary based on given items.\x3c/p>","*Content-Type, application/json","*${HEADERS} = {u'Content-Type': u'application/json'}","*RequestsLibrary.Create Session","*<p>Create Session: create a HTTP session to a server\x3c/p>","*${ip}, <a href=\"http://${ip}:${RESTCONFPORT}\">http://${ip}:${RESTCONFPORT}\x3c/a>, headers=${HEADERS}","*Argument types are:\n&lt;type 'bool'&gt;","*60s, 2s, Verify All Controller are up","*Verify All Controller are up","*<p>Verifies each controller is up by issuing a rest call and getting a 200\x3c/p>","*Starting new HTTP connection (1): 10.0.0.152","*ConnectionError: ('Connection aborted.', error(111, 'Connection refused'))","*Starting new HTTP connection (2): 10.0.0.152","*Starting new HTTP connection (3): 10.0.0.152","*Starting new HTTP connection (4): 10.0.0.152","*Starting new HTTP connection (5): 10.0.0.152","*${resp} = &lt;Response [404]&gt;","eNrtVLFugzAQ3fMVJw9s1E2USimELFWqtkODaH7AwDUggU3tCy1/XwyNI6aqWwduunf33tPTSbZXUVhQXXknCheeBShyB2okAQVR4+PHuWwj9qAkoST/2DXIIBtRxAi/iFubMCuENkjR89vB32zu7v0l486OSqrQor3WSsP6dg2viuBRnWVu99wRBjqfZElV3l1Trmz7dDzGsE+SQxJYs1GzcqTGdrFWaYU1iCxDY0p5Aq6kMrxd8hzbsh/eQILCKBmMIj0EgL6m2X4WY38NooFfxuWlMbWohovG6hM15pB2sO0PqfE9Yi9I1AWcD0aOOSBrwHa/ELZc7MIF/LFmwSyYBf9bMDzxyTfH3df8DW3wEFU=","*404 != 200","*${resp} = &lt;Response [401]&gt;","*401 != 200","*${resp} = &lt;Response [503]&gt;","*{\"code\":503,\"message\":\"Service org.onosproject.net.device.DeviceService not found\"}","*503 != 200","*{\"devices\":[]}","*ONOS Suite Teardown","*<p>Stop ONOS on Controller VMs and grabs karaf logs on each controller (put them in /tmp)\x3c/p>","*onos-kill","*Running command 'onos-kill 2&gt;&amp;1'","*cp ${SWITCHES_RESULT_FILE} ${JENKINS_WORKSPACE}","*Running command 'cp /home/fedora/workspace/tools/switches.csv /home/fedora/workspace/ONOS-Stable/ 2&gt;&amp;1'","*rm ${SWITCHES_RESULT_FILE}","*Running command 'rm /home/fedora/workspace/tools/switches.csv 2&gt;&amp;1'","*Clean Mininet System","*<p>Cleans the mininet environment (sudo mn -c)\x3c/p>","*Run Command On Remote System","*${mininet_system}, sudo mn -c, ${CONTROLLER_USER}, ${LINUX_PROMPT}, 600s","*Attempting to execute sudo mn -c on 10.0.0.121","*${conn_id} = 5","*Read output: Last login: Wed Jul  1 17:02:51 2015 from 10.0.0.121\n[fedora@ip-10-0-0-121 ~]$","*sudo mn -c","eNrFUsFq3DAQvfsrhlC6rYNWcW7ZEiiUnnooNKUEzBIca7xWV9YIz9i7h5Jvr2ScjX3qsegympn35klv8jyHH9jRaP0B8FwjM9TkpSfnsGdNTehJqCaXYlNJFSppWYfYz9rTGTk7Wucq5xY4eIPBGwoSCCLmqaYewYm6xDSyooC+cXQy021BNpjwfBJkgc7jGWuwI8Pt+4N8Am1w1H5w7iJC3f1fHSEJSSpUA1c8GJqbr7J8+dW/B3+EpqcOtHQh67vUn0I9xok+n2NHB57jfEuDvIYxv+YjZ+CxKEAG79Hxujj7esQ+1uBiYhYYqjP8ATz0GEARbEwob9Td/noTs4wGNqxN0N7t9GaifOP8/uthwZR+auRa4suV2A6j1PsCnGVRz/0/qiupyUJn/ZGjXyAtQuSXqBsaIoXSPmY2TA3ALZ1W2j+U6mlb7irnh26331+n9rLcGXuwku4fNyvsNPdbNCuNZakcQme99ShxNUwc3FP6tbjfS0vnlt2EfmgHkQQ3dPIzx6sBS9DPKXf/Nb4nOiCr2pa51Z2fN+BFz3edTxO+OKz8EOJKd8Gh4DYrGzTUV59tUMWNSqe4LeBl/+4vjaRONQ==","*${output} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes\nkillall controller ofprotocol ofdatapath ping nox_core lt-nox_core ovs-openflowd ovs-controller udpbwtest mnexec ivs 2&gt; /dev/null\n...","*Get Karaf Logs","*<p>Compresses all the karaf log files on each controler and puts them on your pybot execution machine (in /tmp)\x3c/p>","*${controller}, tar -zcvf /tmp/${SUITE NAME}.${controller}.tar.gz ${ONOS_HOME}/log","*Attempting to execute tar -zcvf /tmp/ScalePOC.10.0.0.152.tar.gz /opt/onos/log on 10.0.0.152","*${conn_id} = 6","*Read output: Last login: Wed Jul  1 17:03:15 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","*tar -zcvf /tmp/ScalePOC.10.0.0.152.tar.gz /opt/onos/lo \ng","*tar: Removing leading `/' from member names\n/opt/onos/log\n[fedora@ip-10-0-0-152 ~]$","*${output} = tar: Removing leading `/' from member names\n/opt/onos/log\n[fedora@ip-10-0-0-152 ~]$","*SSHLibrary.Open Connection","*${controller}, prompt=${LINUX_PROMPT}, timeout=${prompt_timeout}","*${CONTROLLER_USER}, ${USER_HOME}/.ssh/id_rsa, any","*Read output: Last login: Wed Jul  1 17:03:21 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","*SSHLibrary.Get File","*<p>Downloads file(s) from the remote machine to the local machine.\x3c/p>","*/tmp/${SUITE NAME}.${controller}.tar.gz, /tmp/","*[chan 1] Opened sftp connection (server version 3)","*'/tmp/ScalePOC.10.0.0.152.tar.gz' -&gt; '/tmp/ScalePOC.10.0.0.152.tar.gz'"]);
+</script>
+<script type="text/javascript">
+window.output["generatedTimestamp"] = "20150701 17:03:07 GMT 00:00";
+</script>
+<script type="text/javascript">
+window.output["errors"] = [];
+</script>
+<script type="text/javascript">
+window.output["stats"] = [[{"elapsed":"00:00:22","fail":0,"label":"Critical Tests","pass":1},{"elapsed":"00:00:22","fail":0,"label":"All Tests","pass":1}],[{"elapsed":"00:00:22","fail":0,"label":"done","pass":1}],[{"elapsed":"00:01:01","fail":0,"id":"s1","label":"ScalePOC","name":"ScalePOC","pass":1}]];
+</script>
+<script type="text/javascript">
+window.output["generatedMillis"] = 60908;
+</script>
+<script type="text/javascript">
+window.output["baseMillis"] = 1435770126092;
+</script>
+<script type="text/javascript">
+window.settings = {"defaultLevel":"INFO","minLevel":"INFO","reportURL":"report.html","splitLogBase":"log","title":""};
+</script>
+<title></title>
+</head>
+<body>
+<div id="javascript-disabled">
+  <h1>Opening Robot Framework log failed</h1>
+  <ul>
+    <li>Verify that you have <b>JavaScript enabled</b> in your browser.</li>
+    <li>Make sure you are using a <b>modern enough browser</b>. Firefox 3.5, IE 8, or equivalent is required, newer browsers are recommended.</li>
+    <li>Check are there messages in your browser's <b>JavaScript error log</b>. Please report the problem if you suspect you have encountered a bug.</li>
+  </ul>
+</div>
+<script type="text/javascript">removeJavaScriptDisabledWarning();</script>
+
+<div id="header"></div>
+<div id="statistics-container"></div>
+
+<script type="text/javascript">
+$(document).ready(function() {
+    try {
+        var topsuite = window.testdata.suite();
+    } catch (error) {
+        addJavaScriptDisabledWarning(error);
+        return;
+    }
+    initLayout(topsuite.name, 'Log');
+    addStatistics();
+    addErrors();
+    addTestExecutionLog(topsuite);
+    addLogLevelSelector(window.settings['minLevel'], window.settings['defaultLevel']);
+    if (window.location.hash) {
+        makeElementVisible(window.location.hash.substring(1));
+    } else {
+        expandSuite(topsuite);
+    }
+});
+
+function addLogLevelSelector(minLevel, defaultLevel) {
+    var controller = LogLevelController(minLevel, defaultLevel);
+    if (controller.showLogLevelSelector()) {
+        var selector = $.tmpl('logLevelSelectorTemplate', controller);
+        selector.find('select').val(controller.defaultLogLevel());
+        selector.appendTo($('#top-right-header'));
+        $('#report-or-log-link').find('a').css({'border-bottom-left-radius': '0'});
+        setMessageVisibility(controller.defaultLogLevel());
+    }
+}
+
+function addErrors() {
+    var errors = window.testdata.errorIterator();
+    if (errors.hasNext()) {
+        $.tmpl('errorHeaderTemplate').appendTo($('body'));
+        drawErrorsRecursively(errors, $('#errors'));
+    }
+}
+
+function drawErrorsRecursively(errors, target) {
+    var elements = popFromIterator(errors, 10);
+    $.tmpl('errorTemplate', elements).appendTo(target);
+    if (errors.hasNext())
+        setTimeout(function () { drawErrorsRecursively(errors, target); }, 0);
+    else {
+        // Errors may have moved scroll position. Resetting location re-scrolls.
+        if (window.location.hash)
+            window.location.replace(window.location.hash);
+        highlightLinkTarget();
+    }
+}
+
+function highlightLinkTarget() {
+    if (window.location.hash) {
+        var target = $(window.location.hash);
+        highlight(target);
+    }
+}
+
+function highlight(element, color) {
+    if (color === undefined)
+        color = 242;
+    if (color < 255) {
+        element.css({'background-color': 'rgb('+color+','+color+','+color+')'});
+        setTimeout(function () { highlight(element, color+1); }, 300);
+    } else {
+        element.css({'background-color': ''});
+    }
+}
+
+function popFromIterator(iterator, upTo) {
+    var result = [];
+    while (iterator.hasNext() > 0 && result.length < upTo)
+        result.push(iterator.next());
+    return result;
+}
+
+function makeElementVisible(id) {
+    window.testdata.ensureLoaded(id, function (ids) {
+        util.map(ids, expandElementWithId);
+        if (ids.length) {
+            expandCriticalFailed(window.testdata.findLoaded(util.last(ids)));
+            window.location.hash = id;
+            highlightLinkTarget();
+        }
+    });
+}
+
+function addTestExecutionLog(main) {
+    $('body').append($('<h2>Test Execution Log</h2>'),
+                     $.tmpl('suiteTemplate', main));
+}
+</script>
+
+<script type="text/x-jquery-tmpl" id="totalStatisticsRowTemplate">
+  <tr class="row-${$item.index}">
+    <td class="stats-col-name">
+      <div class="stat-name">
+        <span>{{html label}}</span>
+      </div>
+    </td>
+    {{tmpl($data) 'statColumnsTemplate'}}
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="tagStatisticsRowTemplate">
+  <tr class="row-${$item.index}">
+    <td class="stats-col-name" title="{{html doc}}">
+      <div class="stat-name">
+        <span>{{html label}}</span>
+        {{if info}}(${info}){{/if}}
+      </div>
+      <div class="tag-links">
+        {{each links}}
+        <span>[<a href="{{html $value.url}}" title="{{html $value.url}}">{{html $value.title}}</a>]</span>
+        {{/each}}
+      </div>
+    </td>
+    {{tmpl($data) 'statColumnsTemplate'}}
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="suiteStatisticsRowTemplate">
+  <tr onclick="makeElementVisible('${id}')" class="row-${$item.index}">
+    <td class="stats-col-name" title="{{html label}}">
+      <div class="stat-name">
+        <a href="#${id}"><span class="parent-name">{{html formatParentName}}</span>{{html name}}</a>
+      </div>
+    </td>
+    {{tmpl($data) 'statColumnsTemplate'}}
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="errorHeaderTemplate">
+  <h2>Test Execution Errors</h2>
+  <table id="errors"></table>
+</script>
+
+<script type="text/x-jquery-tmpl" id="errorTemplate">
+  <tr id="${id}" class="message-row">
+    <td class="error-time">
+      {{if link}}
+      <a onclick="makeElementVisible('${link}')" href="#${link}" title="Link to details">${date} ${time}</a>
+      {{else}}
+      ${date} ${time}
+      {{/if}}
+    </td>
+    <td class="${level.toLowerCase()} level">${level}</td>
+    <td class="message">{{html text}}</td>
+    <td class="select-message" onclick="javascript:selectMessage('${id}')" title="Select message text">
+      <div></div>
+    </td>
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="suiteTemplate">
+  <div id="${id}" class="suite">
+    <div class="element-header closed" onclick="toggleSuite('${id}')">
+      <div class="element-header-left" title="{{html fullName}}">
+        <span class="elapsed" title="Elapsed time">${times.elapsedTime}</span>
+        <span class="${status.toLowerCase()}">TEST SUITE: </span>
+        <span class="name">{{html name}}</span>
+      </div>
+      <div class="element-header-right" onclick="stopPropagation(event)" title="">
+        <a class="expand" title="Expand all" href="javascript:expandAll('${id}')"></a>
+        <a class="collapse" title="Collapse all" href="javascript:collapseAll('${id}')"></a>
+        <a class="link" title="Link to this suite" href="#${id}" onclick="makeElementVisible('${id}')"></a>
+      </div>
+      <div class="element-header-toggle" title="Toggle visibility"></div>
+    </div>
+    <div class="children">
+      <table class="metadata">
+        <tr>
+          <th>Full Name:</th>
+          <td>{{html fullName}}</td>
+        </tr>
+        {{if doc()}}
+        <tr>
+          <th>Documentation:</th>
+          <td class="doc">{{html doc()}}</td>
+        </tr>
+        {{/if}}
+        {{each metadata}}
+        <tr>
+          <th>{{html $value[0]}}:</th>
+          <td class="doc">{{html $value[1]}}</td>
+        </tr>
+        {{/each}}
+        {{if source}}
+        <tr>
+          <th>Source:</th>
+          {{if relativeSource}}
+          <td><a href="${relativeSource}">{{html source}}</a></td>
+          {{else}}
+          <td>{{html source}}</td>
+          {{/if}}
+        </tr>
+        {{/if}}
+        <tr>
+          <th>Start / End / Elapsed:</th>
+          <td>${times.startTime} / ${times.endTime} / ${times.elapsedTime}</td>
+        </tr>
+        <tr>
+          <th>Status:</th>
+          <td>{{tmpl($data) 'suiteStatusMessageTemplate'}}</td>
+        </tr>
+        {{if message()}}
+        <tr>
+          <th>Message:</th>
+          <td class="message">{{html message()}}</td>
+        </tr>
+        {{/if}}
+      </table>
+    </div>
+  </div>
+</script>
+
+<script type="text/x-jquery-tmpl" id="testTemplate">
+  <div id="${id}" class="test">
+    <div class="element-header closed" onclick="toggleTest('${id}')">
+      <div class="element-header-left" title="{{html fullName}}">
+        <span class="elapsed" title="Elapsed time">${times.elapsedTime}</span>
+        <span class="${status.toLowerCase()}">TEST CASE: </span>
+        <span class="name">{{html name}}</span>
+        {{if !isCritical}}(non-critical){{/if}}
+      </div>
+      <div class="element-header-right" onclick="stopPropagation(event)" title="">
+        <a class="expand" title="Expand all" href="javascript:expandAll('${id}')"></a>
+        <a class="collapse" title="Collapse all" href="javascript:collapseAll('${id}')"></a>
+        <a class="link" title="Link to this test" href="#${id}" onclick="makeElementVisible('${id}')"></a>
+      </div>
+      <div class="element-header-toggle" title="Toggle visibility"></div>
+    </div>
+    <div class="children">
+      <table class="metadata">
+        <tr>
+          <th>Full Name:</th>
+          <td>{{html fullName}}</td>
+        </tr>
+        {{if doc()}}
+        <tr>
+          <th>Documentation:</th>
+          <td class="doc">{{html doc()}}</td>
+        </tr>
+        {{/if}}
+        {{if tags.length}}
+        <tr>
+          <th>Tags:</th>
+          <td>{{html tags.join(', ')}}</td>
+        </tr>
+        {{/if}}
+        {{if timeout}}
+        <tr>
+          <th>Timeout:</th>
+          <td>{{html timeout}}</td>
+        </tr>
+        {{/if}}
+        <tr>
+          <th>Start / End / Elapsed:</th>
+          <td>${times.startTime} / ${times.endTime} / ${times.elapsedTime}</td>
+        </tr>
+        <tr>
+          <th>Status:</th>
+          <td><span class="${status.toLowerCase()}">${status}</span> ({{if isCritical}}critical{{else}}non-critical{{/if}})</td>
+        </tr>
+        {{if message()}}
+        <tr>
+          <th>Message:</th>
+          <td class="message">{{html message()}}</td>
+        </tr>
+        {{/if}}
+      </table>
+    </div>
+  </div>
+</script>
+
+<script type="text/x-jquery-tmpl" id="keywordTemplate">
+  <div id="${id}" class="keyword">
+    <div class="element-header closed" onclick="toggleKeyword('${id}')">
+      <div class="element-header-left" title="{{html name}}">
+        <span class="elapsed" title="Elapsed time">${times.elapsedTime}</span>
+        <span class="${status.toLowerCase()}">${type}: </span>
+        <span class="name">{{html name}}</span>
+        <span class="arg">{{html arguments}}</span>
+      </div>
+      <div class="element-header-right" onclick="stopPropagation(event)">
+        <a class="expand" title="Expand all" href="javascript:expandAll('${id}')"></a>
+        <a class="collapse" title="Collapse all" href="javascript:collapseAll('${id}')"></a>
+        <a class="link" title="Link to this keyword" href="#${id}" onclick="makeElementVisible('${id}')"></a>
+      </div>
+      <div class="element-header-toggle" title="Toggle visibility"></div>
+    </div>
+    <div class="children">
+      <table class="metadata keyword-metadata">
+        {{if doc()}}
+        <tr>
+          <th>Documentation:</th>
+          <td class="doc">{{html doc()}}</td>
+        </tr>
+        {{/if}}
+        {{if timeout}}
+        <tr>
+          <th>Timeout:</th>
+          <td>{{html timeout}}</td>
+        </tr>
+        {{/if}}
+        <tr>
+          <th>Start / End / Elapsed:</th>
+          <td>${times.startTime} / ${times.endTime} / ${times.elapsedTime}</td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</script>
+
+<script type="text/x-jquery-tmpl" id="messageTemplate">
+  <table id="${id}" class="messages ${level.toLowerCase()}-message">
+    <tr class="message-row">
+      <td class="time">${time}</td>
+      <td class="${level.toLowerCase()} level">${level}</td>
+      <td class="message">{{html text}}</td>
+      <td class="select-message" onclick="javascript:selectMessage('${id}')" title="Select message text">
+        <div></div>
+      </td>
+    </tr>
+  </table>
+</script>
+
+<script type="text/x-jquery-tmpl" id="logLevelSelectorTemplate">
+  <div id="log-level-selector">
+  Log level:
+    <select onchange="logLevelSelected(this.options[selectedIndex].value)">
+      <option value="2">INFO</option>
+      <option value="1">DEBUG</option>
+      {{if showTrace()}}<option value="0">TRACE</option>{{/if}}
+    </select>
+  </div>
+</script>
+
+</body>
+</html>
diff --git a/TestON/RobotTests/output.xml b/TestON/RobotTests/output.xml
new file mode 100644
index 0000000..409f32e
--- /dev/null
+++ b/TestON/RobotTests/output.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<robot generated="20150701 17:09:18.724" generator="Robot 2.8.7 (Python 2.7.10 on linux2)">
+<suite source="/tmp/ONLabTest/TestON/RobotTests/ScalePOC.robot" id="s1" name="ScalePOC">
+<kw type="setup" name="ONOS Suite Setup">
+<doc>Transfers the ONOS dist over to the test vm and start the controller. We will leverage the bash script, "onos-install" to do this.</doc>
+<arguments>
+<arg>${CONTROLLER_IP}</arg>
+<arg>${CONTROLLER_USER}</arg>
+</arguments>
+<kw type="kw" name="Create Controller IP List">
+<doc>Creates a list of controller ips for a cluster. When creating a cluster, be sure to set each variable to %{OC} env vars in the variables section</doc>
+<arguments>
+</arguments>
+<kw type="kw" name="@{controller_list} = BuiltIn.Create List">
+<doc>Returns a list containing given items.</doc>
+<arguments>
+<arg>${CONTROLLER_IP}</arg>
+</arguments>
+<msg timestamp="20150701 17:09:18.928" level="INFO">@{controller_list} = [ 10.0.0.152 ]</msg>
+<status status="PASS" endtime="20150701 17:09:18.928" starttime="20150701 17:09:18.928"></status>
+</kw>
+<kw type="kw" name="BuiltIn.Set Suite Variable">
+<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
+<arguments>
+<arg>@{controller_list}</arg>
+</arguments>
+<msg timestamp="20150701 17:09:18.929" level="INFO">@{controller_list} = [ 10.0.0.152 ]</msg>
+<status status="PASS" endtime="20150701 17:09:18.929" starttime="20150701 17:09:18.928"></status>
+</kw>
+<status status="PASS" endtime="20150701 17:09:18.929" starttime="20150701 17:09:18.927"></status>
+</kw>
+<kw type="kw" name="${rc} = OperatingSystem.Run And Return Rc">
+<doc>Runs the given command in the system and returns the return code.</doc>
+<arguments>
+<arg>onos-package</arg>
+</arguments>
+<msg timestamp="20150701 17:09:18.937" level="INFO">Running command 'onos-package 2&gt;&amp;1'</msg>
+<status status="FAIL" endtime="20150701 17:09:21.094" starttime="20150701 17:09:18.929"></status>
+</kw>
+<status status="FAIL" endtime="20150701 17:09:21.100" starttime="20150701 17:09:18.924"></status>
+</kw>
+<test id="s1-t1" name="Find Max Switches By Scaling">
+<doc>Find the max number of switches from 10 until reaching 20 in steps of 10. The following checks are made through REST APIs:
+- Verify device count is correct
+- Verify device status is available
+- Verify device roles are MASTER (default role in case of standalone controller)
+- Verify topology recognizes corret number of devices (Through api "/topology")
+- Observe each device individually
+- Observe links, hosts, and flows through the controller
+- Observe device info at lower level on mininet (Written for PoC). Shows flows, links, and ports. Checks can be easily implemented at that level as well
+- STOP Mininet Topo
+- Verify device count is zero
+- Verify topology sees no devices (Through api "/topology")</doc>
+<tags>
+<tag>done</tag>
+</tags>
+<status status="FAIL" endtime="20150701 17:09:21.103" critical="yes" starttime="20150701 17:09:21.101">Test execution stopped due to a fatal error.</status>
+</test>
+<kw type="teardown" name="ONOS Suite Teardown">
+<doc>Stop ONOS on Controller VMs and grabs karaf logs on each controller (put them in /tmp)</doc>
+<arguments>
+</arguments>
+<kw type="kw" name="${rc} = OperatingSystem.Run And Return Rc">
+<doc>Runs the given command in the system and returns the return code.</doc>
+<arguments>
+<arg>onos-kill</arg>
+</arguments>
+<msg timestamp="20150701 17:09:21.114" level="INFO">Running command 'onos-kill 2&gt;&amp;1'</msg>
+<msg timestamp="20150701 17:09:21.371" level="INFO">${rc} = 1</msg>
+<status status="PASS" endtime="20150701 17:09:21.370" starttime="20150701 17:09:21.105"></status>
+</kw>
+<errors>
+<msg timestamp="20150701 17:09:21.372" level="ERROR">Execution stopped by user.</msg>
+</errors>
+</robot>
diff --git a/TestON/RobotTests/report.html b/TestON/RobotTests/report.html
new file mode 100644
index 0000000..342cfa8
--- /dev/null
+++ b/TestON/RobotTests/report.html
@@ -0,0 +1,2361 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta http-equiv="Pragma" content="no-cache">
+<meta http-equiv="Expires" content="-1">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta content="Robot Framework 2.8.7 (Python 2.7.10 on linux2)" name="Generator">
+<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
+<style media="all" type="text/css">
+/* Generic and misc styles */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size: 0.8em;
+    color: black;
+    padding: 6px;
+    background: white;
+}
+table {
+    table-layout: fixed;
+    word-wrap: break-word;
+    empty-cells: show;
+    font-size: 1em;
+}
+th, td {
+    vertical-align: top;
+}
+br {
+    mso-data-placement: same-cell; /* maintain line breaks in Excel */
+}
+a, a:link, a:visited {
+    text-decoration: none;
+    color: blue;
+}
+a > img {
+    border: 1px solid blue !important;
+}
+a:hover, a:active {
+    text-decoration: underline;
+    color: purple;
+}
+.parent-name {
+    font-size: 0.7em;
+    letter-spacing: -0.07em;
+}
+.message {
+    white-space: pre-wrap;
+}
+/* Headers */
+#header {
+    width: 65em;
+    height: 3em;
+    margin: 6px 0;
+}
+h1 {
+    float: left;
+    margin: 0 0 0.5em 0;
+    width: 75%;
+}
+h2 {
+    clear: left;
+}
+#generated {
+    float: right;
+    text-align: right;
+    font-size: 0.9em;
+    white-space: nowrap;
+}
+/* Documentation headers */
+.doc > h2 {
+    font-size: 1.2em;
+}
+.doc > h3 {
+    font-size: 1.1em;
+}
+.doc > h4 {
+    font-size: 1.0em;
+}
+/* Status text colors -- !important allows using them in links */
+.error, .fail {
+    color: red !important;
+    font-weight: bold;
+}
+.pass {
+    color: #009900 !important;
+}
+.warn {
+    color: #FFCC00 !important;
+    font-weight: bold;
+}
+.not-run {
+    color: #444444 !important;
+}
+/* Top right header */
+#top-right-header {
+    position: fixed;
+    top: 0;
+    right: 0;
+    z-index: 1000;
+    width: 12em;
+    text-align: center;
+}
+#report-or-log-link a {
+    display: block;
+    background: black;
+    color: white;
+    text-decoration: none;
+    letter-spacing: 0.1em;
+    padding: 0.3em 0;
+    border-bottom-left-radius: 4px;
+}
+#report-or-log-link a:hover {
+    color: yellow;
+}
+#log-level-selector {
+    padding: 0.3em 0;
+    font-size: 0.9em;
+    border-bottom-left-radius: 4px;
+    background: lightgray;
+}
+/* Statistics table */
+.statistics {
+    width: 65em;
+    border-collapse: collapse;
+    empty-cells: show;
+    margin-bottom: 1em;
+}
+.statistics tr:hover {
+    background: #ECECF7;
+    cursor: pointer;
+}
+.statistics th, .statistics td {
+    border: 1px solid black;
+    padding: 0.1em 0.3em;
+}
+.statistics th {
+    background-color: #DCDCF0;
+    padding: 0.2em 0.3em;
+}
+.statistics td {
+    vertical-align: middle;
+}
+.stats-col-stat {
+    width: 4.5em;
+    text-align: center;
+}
+.stats-col-elapsed {
+    width: 5.5em;
+    text-align: center;
+}
+.stats-col-graph {
+    width: 9em;
+}
+th.stats-col-graph:hover {
+    cursor: default;
+}
+.stat-name {
+    float: left;
+}
+.stat-name a, .stat-name span {
+    font-weight: bold;
+}
+.tag-links {
+    font-size: 0.9em;
+    float: right;
+    margin-top: 0.05em;
+}
+.tag-links span {
+    margin-left: 0.2em;
+}
+/* Statistics graph */
+.graph, .empty-graph {
+    border: 1px solid black;
+    width: auto;
+    height: 7px;
+    padding: 0;
+    background: red;
+}
+.empty-graph {
+    background: #E9E9E9;
+}
+.pass-bar, .fail-bar {
+    float: left;
+    height: 100%;
+}
+.pass-bar {
+    background: #00F000;
+}
+/* Tablesorter - adapted from provided Blue Skin */
+.tablesorter-header {
+    background-image: url(data:image/gif;base64,R0lGODlhCwAJAIAAAH9/fwAAACH5BAEAAAEALAAAAAALAAkAAAIRjAOnBr3cnIr0WUjTrC9e9BQAOw==);
+    background-repeat: no-repeat;
+    background-position: center right;
+    cursor: pointer;
+}
+.tablesorter-header:hover {
+    background-color: #B8C8E3;
+}
+.tablesorter-headerAsc {
+    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlBWnFr3cnIr0WQOyBmvzp13CpxQAOw==);
+    background-color: #B8C8E3 !important;
+}
+.tablesorter-headerDesc {
+    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlAWnBr3cnIr0WROyDmvzp13CpxQAOw==);
+    background-color: #B8C8E3 !important;
+}
+.sorter-false {
+    background-image: none;
+    cursor: default;
+}
+.sorter-false:hover {
+    background-color: #DCDCF0;
+}
+</style>
+<style media="all" type="text/css">
+/* Generic table styles */
+table {
+    margin: 0 1px;
+    background: white;
+}
+tr {
+    background: white;
+}
+th {
+    background: #DCDCF0;
+    color: black;
+}
+/* Summary and total/tag/suite details */
+.details {
+    border: 1px solid black;
+    border-collapse: collapse;
+    clear: both;
+    width: 65em;
+    margin-bottom: 1em;
+}
+.details th {
+    background: white;
+    width: 10em;
+    white-space: nowrap;
+    text-align: left;
+    vertical-align: top;
+    padding: 0.2em 0.4em;
+}
+.details td {
+    vertical-align: top;
+    padding: 0.2em 0.4em;
+}
+.selector th, .selector td {
+    padding-top: 0.5em;
+    padding-bottom: 0.5em;
+    white-space: normal;
+}
+.first-selector th, .first-selector td{
+    padding-bottom: 0.2em;
+}
+.middle-selector th, .middle-selector td {
+    padding-top: 0.2em;
+    padding-bottom: 0.2em;
+}
+.last-selector th, .last-selector td{
+    padding-top: 0.2em;
+}
+#print-selector {
+    display: none;
+}
+/* Search */
+#search-suite, #search-test, #search-include, #search-exclude {
+    width: 25em;
+}
+#search a:hover {
+    text-decoration: none;
+}
+#search-help div {
+    margin: 0.5em 0.5em 0.7em 0;
+    padding: 0.7em;
+    background: #ECECF7;
+    border: 1px solid #BCBCD7;
+    border-radius: 3px;
+}
+#search-help h3, #search-help p {
+    margin: 0 0 0.7em 0;
+}
+.search-help-examples {
+    table-layout: auto;
+    width: 100%;
+}
+.search-help-examples, .search-help-examples tr,
+.search-help-examples th, .search-help-examples td {
+    background: transparent;
+    margin: 0;
+}
+.search-help-examples th, .search-help-examples td {
+    padding: 0.2em 0.7em 0.2em 0;
+}
+.help-item {
+    width: 10%;
+}
+.help-explanation {
+    width: 65%;
+}
+.help-examples {
+    width: 25%;
+}
+/* Tabs - adapted from http://www.htmldog.com/articles/tabs */
+#detail-tabs {
+    list-style: none;
+    padding: 0;
+    margin: 0 1em;
+}
+.detail-tab {
+    float: left;
+    background: #DCDCF0;
+    border: 1px solid black;
+    border-bottom-width: 0;
+    margin: 0 0.5em 0 0;
+    padding-top: 0.1em;
+    border-radius: 3px 3px 0 0;
+}
+.detail-tab:hover {
+    background: yellow;
+}
+.detail-tab a {
+    color: black;
+    text-decoration: none;
+    font-weight: bold;
+    padding: 0 1em;
+}
+.detail-tab-selected {
+    position: relative;
+    top: 1px;
+    background: white;
+}
+.detail-tab-selected:hover {
+    background: white;
+}
+/* Test details table */
+#test-details {
+    width: 100%;
+    border-spacing: 1px;
+    background-color: black;
+}
+#test-details > tbody > tr:hover {
+    background: #F4F4FF;
+    cursor: pointer;
+}
+#test-details th, #test-details td {
+    padding: 0.2em;
+}
+.details-limited {
+    max-height: 20em;
+    overflow: auto;
+}
+.details-col-header {
+    padding-right: 1em;
+}
+.details-col-toggle {
+    float: left;
+    color: #808080;
+    cursor: pointer;
+}
+.details-col-toggle:hover {
+    color: black;
+}
+.details-col-name {
+    min-width: 20em;
+    font-weight: bold;
+}
+.details-col-doc {
+    min-width: 10em;
+}
+.details-col-tags {
+    min-width: 10em;
+}
+.details-col-crit {
+    width: 3.5em;
+    text-align: center;
+}
+.details-col-status {
+    width: 4.5em;
+    text-align: center;
+}
+.details-col-msg {
+    min-width: 20em;
+}
+.details-col-elapsed {
+    width: 7em;
+    text-align: center;
+}
+.details-col-times {
+    width: 11em;
+    white-space: nowrap;
+    text-align: center;
+}
+.hidden .details-col-header, td.hidden > div {
+    display: none;
+}
+.hidden {
+    width: 13px;
+    min-width: 0;
+    background-image: none;
+}
+th.hidden:hover {
+    background-color: #DCDCF0;
+}
+</style>
+<style media="print" type="text/css">
+body {
+    background: white !important;
+    padding: 0;
+    font-size: 8pt;
+}
+a:link, a:visited {
+    color: black;
+}
+#header {
+    width: auto;
+}
+.details, .statistics {
+    width: 100%;
+}
+#generated-ago, #top-right-header, #normal-selector, #search-buttons,
+.folding-button, .expand, .hidden, .details-col-toggle {
+    display: none;
+}
+.element-header-text, .children {
+    margin: 0;
+}
+#test-details {
+    border-collapse: collapse;
+    table-layout: auto;
+}
+#test-details th, #test-details td {
+    border: 1px solid black;
+}
+.details-col-header {
+    padding: 0;
+}
+#print-selector {
+    display: table-cell;
+}
+.tablesorter-header {
+    background-image: none;
+    background: #DCDCF0 !important;
+}
+</style>
+<style media="all" type="text/css">
+#javascript-disabled {
+    width: 600px;
+    margin: 100px auto 0 auto;
+    padding: 20px;
+    color: #2A2A2E;
+    border: 1px solid #9A9A9E;
+    background: #FAFAFF;
+}
+#javascript-disabled h1 {
+    width: 100%;
+    float: none;
+}
+#javascript-disabled ul {
+    font-size: 1.2em;
+}
+#javascript-disabled li {
+    margin: 0.5em 0;
+}
+#javascript-disabled b {
+    font-style: italic;
+}
+</style>
+<style media="all" type="text/css">
+.doc > * {
+    margin: 0.7em 1em 0.1em 1em;
+    padding: 0;
+}
+.doc > p, .doc > h1, .doc > h2, .doc > h3, .doc > h4 {
+    margin: 0.7em 0 0.1em 0;
+}
+.doc > *:first-child {
+    margin-top: 0.1em;
+}
+.doc table {
+    border: 1px solid gray;
+    background: transparent;
+    border-collapse: collapse;
+    empty-cells: show;
+    font-size: 0.9em;
+}
+.doc table th, .doc table td {
+    border: 1px solid gray;
+    background: transparent;
+    padding: 0.1em 0.3em;
+    height: 1.2em;
+}
+.doc table th {
+    text-align: center;
+    letter-spacing: 0.1em;
+}
+.doc pre {
+    font-size: 1.1em;
+    letter-spacing: 0.05em;
+    background: #F4F4FF;
+}
+.doc code {
+    padding: 0 0.2em;
+    letter-spacing: 0.05em;
+    background: #F4F4FF;
+}
+.doc li {
+    list-style-position: inside;
+    list-style-type: square;
+}
+.doc img {
+    border: 1px solid gray;
+}
+.doc hr {
+    background: gray;
+    height: 1px;
+    border: 0;
+}
+</style>
+<script type="text/javascript">
+/*! jQuery v1.8.3 jquery.com | jquery.org/license */
+(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window);
+</script>
+<script type="text/javascript">
+/*
+ * jQuery Templates Plugin 1.0.0pre
+ * http://github.com/jquery/jquery-tmpl
+ * Requires jQuery 1.4.2
+ *
+ * Copyright Software Freedom Conservancy, Inc.
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ */
+(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
+</script>
+<script type="text/javascript">
+/*!
+* TableSorter 2.7.8 min - Client-side table sorting with ease!
+* Copyright (c) 2007 Christian Bach
+*/
+!function(j){j.extend({tablesorter:new function(){function e(d){"undefined"!==typeof console&&"undefined"!==typeof console.log?console.log(d):alert(d)}function u(d,c){e(d+" ("+((new Date).getTime()-c.getTime())+"ms)")}function p(d,c,a){if(!c)return"";var b=d.config,g=b.textExtraction,f="",f="simple"===g?b.supportsTextContent?c.textContent:j(c).text():"function"===typeof g?g(c,d,a):"object"===typeof g&&g.hasOwnProperty(a)?g[a](c,d,a):b.supportsTextContent?c.textContent:j(c).text();return j.trim(f)} function h(d){var c=d.config,a=c.$tbodies=c.$table.children("tbody:not(."+c.cssInfoBlock+")"),b,q,f,l,j,n,k="";if(0===a.length)return c.debug?e("*Empty table!* Not building a parser cache"):"";a=a[0].rows;if(a[0]){b=[];q=a[0].cells.length;for(f=0;f<q;f++){l=c.$headers.filter(":not([colspan])");l=l.add(c.$headers.filter('[colspan="1"]')).filter('[data-column="'+f+'"]:last');j=c.headers[f];n=g.getParserById(g.getData(l,j,"sorter"));c.empties[f]=g.getData(l,j,"empty")||c.emptyTo||(c.emptyToBottom?"bottom": "top");c.strings[f]=g.getData(l,j,"string")||c.stringTo||"max";if(!n)a:{l=d;j=a;n=-1;for(var u=f,x=void 0,t=g.parsers.length,y=!1,m="",x=!0;""===m&&x;)n++,j[n]?(y=j[n].cells[u],m=p(l,y,u),l.config.debug&&e("Checking if value was empty on row "+n+", column: "+u+": "+m)):x=!1;for(x=1;x<t;x++)if(g.parsers[x].is&&g.parsers[x].is(m,l,y)){n=g.parsers[x];break a}n=g.parsers[0]}c.debug&&(k+="column:"+f+"; parser:"+n.id+"; string:"+c.strings[f]+"; empty: "+c.empties[f]+"\n");b.push(n)}}c.debug&&e(k);return b} function s(d){var c=d.tBodies,a=d.config,b,q,f=a.parsers,l,v,n,k,h,x,t,m=[];a.cache={};if(!f)return a.debug?e("*Empty table!* Not building a cache"):"";a.debug&&(t=new Date);a.showProcessing&&g.isProcessing(d,!0);for(k=0;k<c.length;k++)if(a.cache[k]={row:[],normalized:[]},!j(c[k]).hasClass(a.cssInfoBlock)){b=c[k]&&c[k].rows.length||0;q=c[k].rows[0]&&c[k].rows[0].cells.length||0;for(v=0;v<b;++v)if(h=j(c[k].rows[v]),x=[],h.hasClass(a.cssChildRow))a.cache[k].row[a.cache[k].row.length-1]=a.cache[k].row[a.cache[k].row.length- 1].add(h);else{a.cache[k].row.push(h);for(n=0;n<q;++n)if(l=p(d,h[0].cells[n],n),l=f[n].format(l,d,h[0].cells[n],n),x.push(l),"numeric"===(f[n].type||"").toLowerCase())m[n]=Math.max(Math.abs(l),m[n]||0);x.push(a.cache[k].normalized.length);a.cache[k].normalized.push(x)}a.cache[k].colMax=m}a.showProcessing&&g.isProcessing(d);a.debug&&u("Building cache for "+b+" rows",t)}function m(d,c){var a=d.config,b=d.tBodies,q=[],f=a.cache,e,v,n,k,h,p,m,y,s,r,E;if(f[0]){a.debug&&(E=new Date);for(y=0;y<b.length;y++)if(e= j(b[y]),!e.hasClass(a.cssInfoBlock)){h=g.processTbody(d,e,!0);e=f[y].row;v=f[y].normalized;k=(n=v.length)?v[0].length-1:0;for(p=0;p<n;p++)if(r=v[p][k],q.push(e[r]),!a.appender||!a.removeRows){s=e[r].length;for(m=0;m<s;m++)h.append(e[r][m])}g.processTbody(d,h,!1)}a.appender&&a.appender(d,q);a.debug&&u("Rebuilt table",E);c||g.applyWidget(d);j(d).trigger("sortEnd",d)}}function F(d){var c,a,b,g=d.config,f=g.sortList,e=[g.cssAsc,g.cssDesc],h=j(d).find("tfoot tr").children().removeClass(e.join(" "));g.$headers.removeClass(e.join(" ")); b=f.length;for(c=0;c<b;c++)if(2!==f[c][1]&&(d=g.$headers.not(".sorter-false").filter('[data-column="'+f[c][0]+'"]'+(1===b?":last":"")),d.length))for(a=0;a<d.length;a++)d[a].sortDisabled||(d.eq(a).addClass(e[f[c][1]]),h.length&&h.filter('[data-column="'+f[c][0]+'"]').eq(a).addClass(e[f[c][1]]))}function G(d){var c=0,a=d.config,b=a.sortList,g=b.length,f=d.tBodies.length,e,h,n,k,p,m,t,r,s;if(!a.serverSideSorting&&a.cache[0]){a.debug&&(e=new Date);for(n=0;n<f;n++)p=a.cache[n].colMax,s=(m=a.cache[n].normalized)&& m[0]?m[0].length-1:0,m.sort(function(f,e){for(h=0;h<g;h++){k=b[h][0];r=b[h][1];t=/n/i.test(a.parsers&&a.parsers[k]?a.parsers[k].type||"":"")?"Numeric":"Text";t+=0===r?"":"Desc";/Numeric/.test(t)&&a.strings[k]&&(c="boolean"===typeof a.string[a.strings[k]]?(0===r?1:-1)*(a.string[a.strings[k]]?-1:1):a.strings[k]?a.string[a.strings[k]]||0:0);var l=j.tablesorter["sort"+t](d,f[k],e[k],k,p[k],c);if(l)return l}return f[s]-e[s]});a.debug&&u("Sorting on "+b.toString()+" and dir "+r+" time",e)}}function C(d, c){d.trigger("updateComplete");"function"===typeof c&&c(d[0])}function I(d,c,a){!1!==c?d.trigger("sorton",[d[0].config.sortList,function(){C(d,a)}]):C(d,a)}var g=this;g.version="2.7.8";g.parsers=[];g.widgets=[];g.defaults={theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,headers:{},ignoreCase:!0, sortForce:null,sortList:[],sortAppend:null,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",textExtraction:"simple",textSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,initialized:null,tableClass:"tablesorter",cssAsc:"tablesorter-headerAsc",cssChildRow:"tablesorter-childRow",cssDesc:"tablesorter-headerDesc",cssHeader:"tablesorter-header",cssHeaderRow:"tablesorter-headerRow",cssIcon:"tablesorter-icon",cssInfoBlock:"tablesorter-infoOnly", cssProcessing:"tablesorter-processing",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]};g.benchmark=u;g.construct=function(d){return this.each(function(){if(!this.tHead||0===this.tBodies.length||!0===this.hasInitialized)return this.config&&this.config.debug?e("stopping initialization! No thead, tbody or tablesorter has already been initialized"):"";var c=j(this),a=this,b,q,f,l="",v,n,k,C,x=j.metadata; a.hasInitialized=!1;a.config={};b=j.extend(!0,a.config,g.defaults,d);j.data(a,"tablesorter",b);b.debug&&j.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===j("<span>x</span>")[0].textContent;b.supportsDataObject=1.4<=parseFloat(j.fn.jquery);b.string={max:1,min:-1,"max+":1,"max-":-1,zero:0,none:0,"null":0,top:!0,bottom:!1};/tablesorter\-/.test(c.attr("class"))||(l=""!==b.theme?" tablesorter-"+b.theme:"");b.$table=c.addClass(b.tableClass+l);b.$tbodies=c.children("tbody:not(."+b.cssInfoBlock+ ")");var t=[],y={},O=0,R=j(a).find("thead:eq(0), tfoot").children("tr"),E,K,z,A,P,D,L,S,T,H;for(E=0;E<R.length;E++){P=R[E].cells;for(K=0;K<P.length;K++){A=P[K];D=A.parentNode.rowIndex;L=D+"-"+A.cellIndex;S=A.rowSpan||1;T=A.colSpan||1;"undefined"===typeof t[D]&&(t[D]=[]);for(z=0;z<t[D].length+1;z++)if("undefined"===typeof t[D][z]){H=z;break}y[L]=H;O=Math.max(H,O);j(A).attr({"data-column":H});for(z=D;z<D+S;z++){"undefined"===typeof t[z]&&(t[z]=[]);L=t[z];for(A=H;A<H+T;A++)L[A]="x"}}}a.config.columns= O;var M,B,Q,U,N,J,V,w=a.config;w.headerList=[];w.headerContent=[];w.debug&&(V=new Date);U=w.cssIcon?'<i class="'+w.cssIcon+'"></i>':"";t=j(a).find(w.selectorHeaders).each(function(a){B=j(this);M=w.headers[a];w.headerContent[a]=this.innerHTML;N=w.headerTemplate.replace(/\{content\}/g,this.innerHTML).replace(/\{icon\}/g,U);w.onRenderTemplate&&(Q=w.onRenderTemplate.apply(B,[a,N]))&&"string"===typeof Q&&(N=Q);this.innerHTML='<div class="tablesorter-header-inner">'+N+"</div>";w.onRenderHeader&&w.onRenderHeader.apply(B, [a]);this.column=y[this.parentNode.rowIndex+"-"+this.cellIndex];var b=g.getData(B,M,"sortInitialOrder")||w.sortInitialOrder;this.order=/^d/i.test(b)||1===b?[1,0,2]:[0,1,2];this.count=-1;"false"===g.getData(B,M,"sorter")?(this.sortDisabled=!0,B.addClass("sorter-false")):B.removeClass("sorter-false");this.lockedOrder=!1;J=g.getData(B,M,"lockedOrder")||!1;"undefined"!==typeof J&&!1!==J&&(this.order=this.lockedOrder=/^d/i.test(J)||1===J?[1,1,1]:[0,0,0]);B.addClass((this.sortDisabled?"sorter-false ":" ")+ w.cssHeader);w.headerList[a]=this;B.parent().addClass(w.cssHeaderRow)});a.config.debug&&(u("Built headers:",V),e(t));b.$headers=t;if(a.config.widthFixed&&0===j(a).find("colgroup").length){var W=j("<colgroup>"),X=j(a).width();j("tr:first td",a.tBodies[0]).each(function(){W.append(j("<col>").css("width",parseInt(1E3*(j(this).width()/X),10)/10+"%"))});j(a).prepend(W)}b.parsers=h(a);b.delayInit||s(a);b.$headers.find("*")[j.fn.addBack?"addBack":"andSelf"]().filter(b.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter").bind("mousedown.tablesorter mouseup.tablesorter", function(d,e){var h=(this.tagName.match("TH|TD")?j(this):j(this).parents("th, td").filter(":last"))[0];if(1!==(d.which||d.button))return!1;if("mousedown"===d.type)return C=(new Date).getTime(),"INPUT"===d.target.tagName?"":!b.cancelSelection;if(!0!==e&&250<(new Date).getTime()-C)return!1;b.delayInit&&!b.cache&&s(a);if(!h.sortDisabled){c.trigger("sortStart",a);l=!d[b.sortMultiSortKey];h.count=d[b.sortResetKey]?2:(h.count+1)%(b.sortReset?3:2);b.sortRestart&&(q=h,b.$headers.each(function(){if(this!== q&&(l||!j(this).is("."+b.cssDesc+",."+b.cssAsc)))this.count=-1}));q=h.column;if(l){b.sortList=[];if(null!==b.sortForce){v=b.sortForce;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}k=h.order[h.count];if(2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k])}else if(b.sortAppend&&1<b.sortList.length&&g.isValueInArray(b.sortAppend[0][0],b.sortList)&&b.sortList.pop(),g.isValueInArray(q,b.sortList))for(f=0;f<b.sortList.length;f++)n=b.sortList[f],k=b.headerList[n[0]], n[0]===q&&(n[1]=k.order[k.count],2===n[1]&&(b.sortList.splice(f,1),k.count=-1));else if(k=h.order[h.count],2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k]);if(null!==b.sortAppend){v=b.sortAppend;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}c.trigger("sortBegin",a);setTimeout(function(){F(a);G(a);m(a)},1)}});b.cancelSelection&&b.$headers.each(function(){this.onselectstart=function(){return!1}});c.unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(".tablesorter ")).bind("sortReset.tablesorter", function(){b.sortList=[];F(a);G(a);m(a)}).bind("update.tablesorter updateRows.tablesorter",function(d,f,g){j(b.selectorRemove,a).remove();b.parsers=h(a);s(a);I(c,f,g)}).bind("updateCell.tablesorter",function(d,f,g,e){var q,h,l;q=c.find("tbody");d=q.index(j(f).parents("tbody").filter(":last"));var k=j(f).parents("tr").filter(":last");f=j(f)[0];q.length&&0<=d&&(h=q.eq(d).find("tr").index(k),l=f.cellIndex,q=a.config.cache[d].normalized[h].length-1,a.config.cache[d].row[a.config.cache[d].normalized[h][q]]= k,a.config.cache[d].normalized[h][l]=b.parsers[l].format(p(a,f,l),a,f,l),I(c,g,e))}).bind("addRows.tablesorter",function(d,g,e,q){var j=g.filter("tr").length,l=[],k=g[0].cells.length,n=c.find("tbody").index(g.closest("tbody"));b.parsers||(b.parsers=h(a));for(d=0;d<j;d++){for(f=0;f<k;f++)l[f]=b.parsers[f].format(p(a,g[d].cells[f],f),a,g[d].cells[f],f);l.push(b.cache[n].row.length);b.cache[n].row.push([g[d]]);b.cache[n].normalized.push(l);l=[]}I(c,e,q)}).bind("sorton.tablesorter",function(b,d,f,g){c.trigger("sortStart", this);var e,q,l,h=a.config;b=d||h.sortList;h.sortList=[];j.each(b,function(a,b){e=[parseInt(b[0],10),parseInt(b[1],10)];if(l=h.headerList[e[0]])h.sortList.push(e),q=j.inArray(e[1],l.order),l.count=0<=q?q:e[1]%(h.sortReset?3:2)});F(a);G(a);m(a,g);"function"===typeof f&&f(a)}).bind("appendCache.tablesorter",function(b,c,d){m(a,d);"function"===typeof c&&c(a)}).bind("applyWidgetId.tablesorter",function(c,d){g.getWidgetById(d).format(a,b,b.widgetOptions)}).bind("applyWidgets.tablesorter",function(b,c){g.applyWidget(a, c)}).bind("refreshWidgets.tablesorter",function(b,c,d){g.refreshWidgets(a,c,d)}).bind("destroy.tablesorter",function(b,c,d){g.destroy(a,c,d)});b.supportsDataObject&&"undefined"!==typeof c.data().sortlist?b.sortList=c.data().sortlist:x&&(c.metadata()&&c.metadata().sortlist)&&(b.sortList=c.metadata().sortlist);g.applyWidget(a,!0);0<b.sortList.length?c.trigger("sorton",[b.sortList,{},!b.initWidgets]):b.initWidgets&&g.applyWidget(a);b.showProcessing&&c.unbind("sortBegin.tablesorter sortEnd.tablesorter").bind("sortBegin.tablesorter sortEnd.tablesorter", function(b){g.isProcessing(a,"sortBegin"===b.type)});a.hasInitialized=!0;b.debug&&g.benchmark("Overall initialization time",j.data(a,"startoveralltimer"));c.trigger("tablesorter-initialized",a);"function"===typeof b.initialized&&b.initialized(a)})};g.isProcessing=function(d,c,a){var b=d.config;d=a||j(d).find("."+b.cssHeader);c?(0<b.sortList.length&&(d=d.filter(function(){return this.sortDisabled?!1:g.isValueInArray(parseFloat(j(this).attr("data-column")),b.sortList)})),d.addClass(b.cssProcessing)): d.removeClass(b.cssProcessing)};g.processTbody=function(d,c,a){if(a)return c.before('<span class="tablesorter-savemyplace"/>'),d=j.fn.detach?c.detach():c.remove();d=j(d).find("span.tablesorter-savemyplace");c.insertAfter(d);d.remove()};g.clearTableBody=function(d){d.config.$tbodies.empty()};g.destroy=function(d,c,a){if(d.hasInitialized){g.refreshWidgets(d,!0,!0);var b=j(d),e=d.config,f=b.find("thead:first"),h=f.find("tr."+e.cssHeaderRow).removeClass(e.cssHeaderRow),u=b.find("tfoot:first > tr").children("th, td"); f.find("tr").not(h).remove();b.removeData("tablesorter").unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave sortBegin sortEnd ".split(" ").join(".tablesorter "));e.$headers.add(u).removeClass(e.cssHeader+" "+e.cssAsc+" "+e.cssDesc).removeAttr("data-column");h.find(e.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter");h.children().each(function(a){j(this).html(e.headerContent[a])});!1!==c&&b.removeClass(e.tableClass+ " tablesorter-"+e.theme);d.hasInitialized=!1;"function"===typeof a&&a(d)}};g.regex=[/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,/^0x[0-9a-f]+$/i];g.sortText=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo],h=g.regex;if(""===c&&0!==f)return"boolean"===typeof f?f?-1:1:-f||-1;if(""===a&&0!==f)return"boolean"===typeof f? f?1:-1:f||1;if("function"===typeof e.textSorter)return e.textSorter(c,a,d,b);d=c.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");b=a.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");c=parseInt(c.match(h[2]),16)||1!==d.length&&c.match(h[1])&&Date.parse(c);if(a=parseInt(a.match(h[2]),16)||c&&a.match(h[1])&&Date.parse(a)||null){if(c<a)return-1;if(c>a)return 1}e=Math.max(d.length,b.length);for(c=0;c<e;c++){a=isNaN(d[c])?d[c]||0:parseFloat(d[c])|| 0;h=isNaN(b[c])?b[c]||0:parseFloat(b[c])||0;if(isNaN(a)!==isNaN(h))return isNaN(a)?1:-1;typeof a!==typeof h&&(a+="",h+="");if(a<h)return-1;if(a>h)return 1}return 0};g.sortTextDesc=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo];return""===c&&0!==f?"boolean"===typeof f?f?-1:1:f||1:""===a&&0!==f?"boolean"===typeof f?f?1:-1:-f||-1:"function"===typeof e.textSorter?e.textSorter(a,c,d,b):g.sortText(d,a,c)};g.getTextValue=function(d,c,a){if(c){var b=d.length,e=c+a; for(c=0;c<b;c++)e+=d.charCodeAt(c);return a*e}return 0};g.sortNumeric=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b?b?-1:1:-b||-1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:b||1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return c-a};g.sortNumericDesc=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b? b?-1:1:b||1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:-b||-1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return a-c};g.characterEquivalents={a:"\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5",A:"\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5",c:"\u00e7\u0107\u010d",C:"\u00c7\u0106\u010c",e:"\u00e9\u00e8\u00ea\u00eb\u011b\u0119",E:"\u00c9\u00c8\u00ca\u00cb\u011a\u0118",i:"\u00ed\u00ec\u0130\u00ee\u00ef\u0131",I:"\u00cd\u00cc\u0130\u00ce\u00cf",o:"\u00f3\u00f2\u00f4\u00f5\u00f6", O:"\u00d3\u00d2\u00d4\u00d5\u00d6",ss:"\u00df",SS:"\u1e9e",u:"\u00fa\u00f9\u00fb\u00fc\u016f",U:"\u00da\u00d9\u00db\u00dc\u016e"};g.replaceAccents=function(d){var c,a="[",b=g.characterEquivalents;if(!g.characterRegex){g.characterRegexArray={};for(c in b)"string"===typeof c&&(a+=b[c],g.characterRegexArray[c]=RegExp("["+b[c]+"]","g"));g.characterRegex=RegExp(a+"]")}if(g.characterRegex.test(d))for(c in b)"string"===typeof c&&(d=d.replace(g.characterRegexArray[c],c));return d};g.isValueInArray=function(d, c){var a,b=c.length;for(a=0;a<b;a++)if(c[a][0]===d)return!0;return!1};g.addParser=function(d){var c,a=g.parsers.length,b=!0;for(c=0;c<a;c++)g.parsers[c].id.toLowerCase()===d.id.toLowerCase()&&(b=!1);b&&g.parsers.push(d)};g.getParserById=function(d){var c,a=g.parsers.length;for(c=0;c<a;c++)if(g.parsers[c].id.toLowerCase()===d.toString().toLowerCase())return g.parsers[c];return!1};g.addWidget=function(d){g.widgets.push(d)};g.getWidgetById=function(d){var c,a,b=g.widgets.length;for(c=0;c<b;c++)if((a= g.widgets[c])&&a.hasOwnProperty("id")&&a.id.toLowerCase()===d.toLowerCase())return a};g.applyWidget=function(d,c){var a=d.config,b=a.widgetOptions,e=a.widgets.sort().reverse(),f,h,m,n=e.length;h=j.inArray("zebra",a.widgets);0<=h&&(a.widgets.splice(h,1),a.widgets.push("zebra"));a.debug&&(f=new Date);for(h=0;h<n;h++)(m=g.getWidgetById(e[h]))&&(!0===c&&m.hasOwnProperty("init")?m.init(d,m,a,b):!c&&m.hasOwnProperty("format")&&m.format(d,a,b));a.debug&&u("Completed "+(!0===c?"initializing":"applying")+ " widgets",f)};g.refreshWidgets=function(d,c,a){var b,h=d.config,f=h.widgets,l=g.widgets,m=l.length;for(b=0;b<m;b++)if(l[b]&&l[b].id&&(c||0>j.inArray(l[b].id,f)))h.debug&&e("Refeshing widgets: Removing "+l[b].id),l[b].hasOwnProperty("remove")&&l[b].remove(d,h,h.widgetOptions);!0!==a&&g.applyWidget(d,c)};g.getData=function(d,c,a){var b="";d=j(d);var e,f;if(!d.length)return"";e=j.metadata?d.metadata():!1;f=" "+(d.attr("class")||"");"undefined"!==typeof d.data(a)||"undefined"!==typeof d.data(a.toLowerCase())? b+=d.data(a)||d.data(a.toLowerCase()):e&&"undefined"!==typeof e[a]?b+=e[a]:c&&"undefined"!==typeof c[a]?b+=c[a]:" "!==f&&f.match(" "+a+"-")&&(b=f.match(RegExp(" "+a+"-(\\w+)"))[1]||"");return j.trim(b)};g.formatFloat=function(d,c){if("string"!==typeof d||""===d)return d;var a;d=(c&&c.config?!1!==c.config.usNumberFormat:"undefined"!==typeof c?c:1)?d.replace(/,/g,""):d.replace(/[\s|\.]/g,"").replace(/,/g,".");/^\s*\([.\d]+\)/.test(d)&&(d=d.replace(/^\s*\(/,"-").replace(/\)/,""));a=parseFloat(d);return isNaN(a)? j.trim(d):a};g.isDigit=function(d){return isNaN(d)?/^[\-+(]?\d+[)]?$/.test(d.toString().replace(/[,.'"\s]/g,"")):!0}}});var h=j.tablesorter;j.fn.extend({tablesorter:h.construct});h.addParser({id:"text",is:function(){return!0},format:function(e,u){var p=u.config;e=j.trim(p.ignoreCase?e.toLocaleLowerCase():e);return p.sortLocaleCompare?h.replaceAccents(e):e},type:"text"});h.addParser({id:"currency",is:function(e){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((e|| "").replace(/[,. ]/g,""))},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"ipAddress",is:function(e){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(e)},format:function(e,j){var p,r=e.split("."),s="",m=r.length;for(p=0;p<m;p++)s+=("00"+r[p]).slice(-3);return h.formatFloat(s,j)},type:"numeric"});h.addParser({id:"url",is:function(e){return/^(https?|ftp|file):\/\//.test(e)},format:function(e){return j.trim(e.replace(/(https?|ftp|file):\/\//, ""))},type:"text"});h.addParser({id:"isoDate",is:function(e){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(e)},format:function(e,j){return h.formatFloat(""!==e?(new Date(e.replace(/-/g,"/"))).getTime()||"":"",j)},type:"numeric"});h.addParser({id:"percent",is:function(e){return/(\d\s?%|%\s?\d)/.test(e)},format:function(e,j){return h.formatFloat(e.replace(/%/g,""),j)},type:"numeric"});h.addParser({id:"usLongDate",is:function(e){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(e)|| /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(e)},format:function(e,j){return h.formatFloat((new Date(e.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"shortDate",is:function(e){return/^(\d{1,2}|\d{4})[\/\-\,\.\s+]\d{1,2}[\/\-\.\,\s+](\d{1,2}|\d{4})$/.test(e)},format:function(e,j,p,r){p=j.config;var s=p.headerList[r],m=s.shortDateFormat;"undefined"===typeof m&&(m=s.shortDateFormat=h.getData(s,p.headers[r],"dateFormat")||p.dateFormat);e=e.replace(/\s+/g," ").replace(/[\-|\.|\,]/g, "/");"mmddyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===m&&(e=e.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3"));return h.formatFloat((new Date(e)).getTime()||"",j)},type:"numeric"});h.addParser({id:"time",is:function(e){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(e)},format:function(e,j){return h.formatFloat((new Date("2000/01/01 "+e.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"digit",is:function(e){return h.isDigit(e)},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"metadata",is:function(){return!1},format:function(e,h,p){e=h.config;e=!e.parserMetadataName?"sortValue":e.parserMetadataName;return j(p).metadata()[e]},type:"numeric"});h.addWidget({id:"zebra",format:function(e,u,p){var r,s,m,F,G,C,I=RegExp(u.cssChildRow,"i"),g=u.$tbodies;u.debug&&(G= new Date);for(e=0;e<g.length;e++)r=g.eq(e),C=r.children("tr").length,1<C&&(m=0,r=r.children("tr:visible"),r.each(function(){s=j(this);I.test(this.className)||m++;F=0===m%2;s.removeClass(p.zebra[F?1:0]).addClass(p.zebra[F?0:1])}));u.debug&&h.benchmark("Applying Zebra widget",G)},remove:function(e,h){var p,r,s=h.$tbodies,m=(h.widgetOptions.zebra||["even","odd"]).join(" ");for(p=0;p<s.length;p++)r=j.tablesorter.processTbody(e,s.eq(p),!0),r.children().removeClass(m),j.tablesorter.processTbody(e,r,!1)}})}(jQuery);
+</script>
+<script type="text/javascript">
+/*
+    Copyright 2008-2013
+        Matthias Ehmann,
+        Michael Gerhaeuser,
+        Carsten Miller,
+        Bianca Valentin,
+        Alfred Wassermann,
+        Peter Wilfahrt
+    Dual licensed under the Apache License Version 2.0, or LGPL Version 3 licenses.
+    You should have received a copy of the GNU Lesser General Public License
+    along with JSXCompressor.  If not, see <http://www.gnu.org/licenses/>.
+    You should have received a copy of the Apache License along with JSXCompressor.
+    If not, see <http://www.apache.org/licenses/>.
+*/
+(function(){var e,r,n;(function(t){function o(e,r){return y.call(e,r)}function i(e,r){var n,t,o,i,u,f,a,c,s,l,p=r&&r.split("/"),d=k.map,g=d&&d["*"]||{};if(e&&"."===e.charAt(0))if(r){for(p=p.slice(0,p.length-1),e=p.concat(e.split("/")),c=0;e.length>c;c+=1)if(l=e[c],"."===l)e.splice(c,1),c-=1;else if(".."===l){if(1===c&&(".."===e[2]||".."===e[0]))break;c>0&&(e.splice(c-1,2),c-=2)}e=e.join("/")}else 0===e.indexOf("./")&&(e=e.substring(2));if((p||g)&&d){for(n=e.split("/"),c=n.length;c>0;c-=1){if(t=n.slice(0,c).join("/"),p)for(s=p.length;s>0;s-=1)if(o=d[p.slice(0,s).join("/")],o&&(o=o[t])){i=o,u=c;break}if(i)break;!f&&g&&g[t]&&(f=g[t],a=c)}!i&&f&&(i=f,u=a),i&&(n.splice(0,u,i),e=n.join("/"))}return e}function u(e,r){return function(){return d.apply(t,v.call(arguments,0).concat([e,r]))}}function f(e){return function(r){return i(r,e)}}function a(e){return function(r){b[e]=r}}function c(e){if(o(m,e)){var r=m[e];delete m[e],C[e]=!0,p.apply(t,r)}if(!o(b,e)&&!o(C,e))throw Error("No "+e);return b[e]}function s(e){var r,n=e?e.indexOf("!"):-1;return n>-1&&(r=e.substring(0,n),e=e.substring(n+1,e.length)),[r,e]}function l(e){return function(){return k&&k.config&&k.config[e]||{}}}var p,d,g,h,b={},m={},k={},C={},y=Object.prototype.hasOwnProperty,v=[].slice;g=function(e,r){var n,t=s(e),o=t[0];return e=t[1],o&&(o=i(o,r),n=c(o)),o?e=n&&n.normalize?n.normalize(e,f(r)):i(e,r):(e=i(e,r),t=s(e),o=t[0],e=t[1],o&&(n=c(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:n}},h={require:function(e){return u(e)},exports:function(e){var r=b[e];return r!==void 0?r:b[e]={}},module:function(e){return{id:e,uri:"",exports:b[e],config:l(e)}}},p=function(e,r,n,i){var f,s,l,p,d,k,y=[];if(i=i||e,"function"==typeof n){for(r=!r.length&&n.length?["require","exports","module"]:r,d=0;r.length>d;d+=1)if(p=g(r[d],i),s=p.f,"require"===s)y[d]=h.require(e);else if("exports"===s)y[d]=h.exports(e),k=!0;else if("module"===s)f=y[d]=h.module(e);else if(o(b,s)||o(m,s)||o(C,s))y[d]=c(s);else{if(!p.p)throw Error(e+" missing "+s);p.p.load(p.n,u(i,!0),a(s),{}),y[d]=b[s]}l=n.apply(b[e],y),e&&(f&&f.exports!==t&&f.exports!==b[e]?b[e]=f.exports:l===t&&k||(b[e]=l))}else e&&(b[e]=n)},e=r=d=function(e,r,n,o,i){return"string"==typeof e?h[e]?h[e](r):c(g(e,r).f):(e.splice||(k=e,r.splice?(e=r,r=n,n=null):e=t),r=r||function(){},"function"==typeof n&&(n=o,o=i),o?p(t,e,r,n):setTimeout(function(){p(t,e,r,n)},4),d)},d.config=function(e){return k=e,k.deps&&d(k.deps,k.callback),d},n=function(e,r,n){r.splice||(n=r,r=[]),o(b,e)||o(m,e)||(m[e]=[e,r,n])},n.amd={jQuery:!0}})(),n("../node_modules/almond/almond",function(){}),n("jxg",[],function(){var e={};return"object"!=typeof JXG||JXG.extend||(e=JXG),e.extend=function(e,r,n,t){var o,i;n=n||!1,t=t||!1;for(o in r)(!n||n&&r.hasOwnProperty(o))&&(i=t?o.toLowerCase():o,e[i]=r[o])},e.extend(e,{boards:{},readers:{},elements:{},registerElement:function(e,r){e=e.toLowerCase(),this.elements[e]=r},registerReader:function(e,r){var n,t;for(n=0;r.length>n;n++)t=r[n].toLowerCase(),"function"!=typeof this.readers[t]&&(this.readers[t]=e)},shortcut:function(e,r){return function(){return e[r].apply(this,arguments)}},getRef:function(e,r){return e.select(r)},getReference:function(e,r){return e.select(r)},debugInt:function(){var e,r;for(e=0;arguments.length>e;e++)r=arguments[e],"object"==typeof window&&window.console&&console.log?console.log(r):"object"==typeof document&&document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=r+"<br/>")},debugWST:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&(e.debugInt("stacktrace"),e.debugInt(r.stack.split("\n").slice(1).join("\n")))},debugLine:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&e.debugInt("Called from",r.stack.split("\n").slice(2,3).join("\n"))},debug:function(){e.debugInt.apply(this,arguments)}}),e}),n("utils/zip",["jxg"],function(e){var r=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],t=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],i=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=256;return e.Util=e.Util||{},e.Util.Unzip=function(a){function c(){return q+=8,N>R?a[R++]:-1}function s(){T=1}function l(){var e;return q++,e=1&T,T>>=1,0===T&&(T=c(),e=1&T,T=128|T>>1),e}function p(e){for(var n=0,t=e;t--;)n=n<<1|l();return e&&(n=r[n]>>8-e),n}function d(){L=0}function g(e){A++,E[L++]=e,z.push(String.fromCharCode(e)),32768===L&&(L=0)}function h(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function b(){for(;;){if(H[P]>=w)return-1;if(U[H[P]]===P)return H[P]++;H[P]++}}function m(){var e,r=F[X];if(17===P)return-1;if(X++,P++,e=b(),e>=0)r.b0=e;else if(r.b0=32768,m())return-1;if(e=b(),e>=0)r.b1=e,r.jump=null;else if(r.b1=32768,r.jump=F[X],r.jumppos=X,m())return-1;return P--,0}function k(e,r,n){var t;for(F=e,X=0,U=n,w=r,t=0;17>t;t++)H[t]=0;return P=0,m()?-1:0}function C(e){for(var r,n,t,o=0,i=e[o];;)if(t=l()){if(!(32768&i.b1))return i.b1;for(i=i.jump,r=e.length,n=0;r>n;n++)if(e[n]===i){o=n;break}}else{if(!(32768&i.b0))return i.b0;o++,i=e[o]}}function y(){var f,a,b,m,y,v,j,A,x,U,w,S,z,I,O,B,N;do if(f=l(),b=p(2),0===b)for(s(),U=c(),U|=c()<<8,S=c(),S|=c()<<8,65535&(U^~S)&&e.debug("BlockLen checksum mismatch\n");U--;)a=c(),g(a);else if(1===b)for(;;)if(y=r[p(7)]>>1,y>23?(y=y<<1|l(),y>199?(y-=128,y=y<<1|l()):(y-=48,y>143&&(y+=136))):y+=256,256>y)g(y);else{if(256===y)break;for(y-=257,x=p(t[y])+n[y],y=r[p(5)]>>3,i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y],y=0;x>y;y++)a=E[32767&L-w],g(a)}else if(2===b){for(j=Array(320),I=257+p(5),O=1+p(5),B=4+p(4),y=0;19>y;y++)j[y]=0;for(y=0;B>y;y++)j[u[y]]=p(3);for(x=J.length,m=0;x>m;m++)J[m]=new h;if(k(J,19,j,0))return d(),1;for(z=I+O,m=0,N=-1;z>m;)if(N++,y=C(J),16>y)j[m++]=y;else if(16===y){if(y=3+p(2),m+y>z)return d(),1;for(v=m?j[m-1]:0;y--;)j[m++]=v}else{if(y=17===y?3+p(3):11+p(7),m+y>z)return d(),1;for(;y--;)j[m++]=0}for(x=G.length,m=0;x>m;m++)G[m]=new h;if(k(G,I,j,0))return d(),1;for(x=G.length,m=0;x>m;m++)J[m]=new h;for(A=[],m=I;j.length>m;m++)A[m-I]=j[m];if(k(J,O,A,0))return d(),1;for(;;)if(y=C(G),y>=256){if(y-=256,0===y)break;for(y-=1,x=p(t[y])+n[y],y=C(J),i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y];x--;)a=E[32767&L-w],g(a)}else g(y)}while(!f);return d(),s(),0}function v(){var e,r,n,t,o,i,u,a,s=[];if(z=[],B=!1,s[0]=c(),s[1]=c(),120===s[0]&&218===s[1]&&(y(),O[I]=[z.join(""),"geonext.gxt"],I++),31===s[0]&&139===s[1]&&(S(),O[I]=[z.join(""),"file"],I++),80===s[0]&&75===s[1]&&(B=!0,s[2]=c(),s[3]=c(),3===s[2]&&4===s[3])){for(s[0]=c(),s[1]=c(),j=c(),j|=c()<<8,a=c(),a|=c()<<8,c(),c(),c(),c(),u=c(),u|=c()<<8,u|=c()<<16,u|=c()<<24,i=c(),i|=c()<<8,i|=c()<<16,i|=c()<<24,o=c(),o|=c()<<8,o|=c()<<16,o|=c()<<24,t=c(),t|=c()<<8,n=c(),n|=c()<<8,e=0,M=[];t--;)r=c(),"/"===r|":"===r?e=0:f-1>e&&(M[e++]=String.fromCharCode(r));for(x||(x=M),e=0;n>e;)r=c(),e++;A=0,8===a&&(y(),O[I]=Array(2),O[I][0]=z.join(""),O[I][1]=M.join(""),I++),S()}}var j,A,x,U,w,S,z=[],I=0,O=[],E=Array(32768),L=0,B=!1,N=a.length,R=0,T=1,q=0,G=Array(288),J=Array(32),X=0,F=null,P=(Array(64),Array(64),0),H=Array(17),M=[];H[0]=0,S=function(){var e,r,n,t,o,i,u=[];if(8&j&&(u[0]=c(),u[1]=c(),u[2]=c(),u[3]=c(),80===u[0]&&75===u[1]&&7===u[2]&&8===u[3]?(e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24):e=u[0]|u[1]<<8|u[2]<<16|u[3]<<24,r=c(),r|=c()<<8,r|=c()<<16,r|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24),B&&v(),u[0]=c(),8===u[0]){if(j=c(),c(),c(),c(),c(),c(),t=c(),4&j)for(u[0]=c(),u[2]=c(),P=u[0]+256*u[1],o=0;P>o;o++)c();if(8&j)for(o=0,M=[],i=c();i;)("7"===i||":"===i)&&(o=0),f-1>o&&(M[o++]=i),i=c();if(16&j)for(i=c();i;)i=c();2&j&&(c(),c()),y(),e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24,B&&v()}},e.Util.Unzip.prototype.unzipFile=function(e){var r;for(this.unzip(),r=0;O.length>r;r++)if(O[r][1]===e)return O[r][0];return""},e.Util.Unzip.prototype.unzip=function(){return v(),O}},e.Util}),n("utils/encoding",["jxg"],function(e){var r=0,n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];return e.Util=e.Util||{},e.Util.UTF8={encode:function(e){var r,n,t="",o=e.length;if(e=e.replace(/\r\n/g,"\n"),"function"==typeof unescape&&"function"==typeof encodeURIComponent)return unescape(encodeURIComponent(e));for(r=0;o>r;r++)n=e.charCodeAt(r),128>n?t+=String.fromCharCode(n):n>127&&2048>n?(t+=String.fromCharCode(192|n>>6),t+=String.fromCharCode(128|63&n)):(t+=String.fromCharCode(224|n>>12),t+=String.fromCharCode(128|63&n>>6),t+=String.fromCharCode(128|63&n));return t},decode:function(e){var t,o,i,u=0,f=0,a=r,c=[],s=e.length,l=[];for(t=0;s>t;t++)o=e.charCodeAt(t),i=n[o],f=a!==r?63&o|f<<6:255>>i&o,a=n[256+a+i],a===r&&(f>65535?c.push(55232+(f>>10),56320+(1023&f)):c.push(f),u++,0===u%1e4&&(l.push(String.fromCharCode.apply(null,c)),c=[]));return l.push(String.fromCharCode.apply(null,c)),l.join("")},asciiCharCodeAt:function(e,r){var n=e.charCodeAt(r);if(n>255)switch(n){case 8364:n=128;break;case 8218:n=130;break;case 402:n=131;break;case 8222:n=132;break;case 8230:n=133;break;case 8224:n=134;break;case 8225:n=135;break;case 710:n=136;break;case 8240:n=137;break;case 352:n=138;break;case 8249:n=139;break;case 338:n=140;break;case 381:n=142;break;case 8216:n=145;break;case 8217:n=146;break;case 8220:n=147;break;case 8221:n=148;break;case 8226:n=149;break;case 8211:n=150;break;case 8212:n=151;break;case 732:n=152;break;case 8482:n=153;break;case 353:n=154;break;case 8250:n=155;break;case 339:n=156;break;case 382:n=158;break;case 376:n=159;break;default:}return n}},e.Util.UTF8}),n("utils/base64",["jxg","utils/encoding"],function(e,r){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.Util=e.Util||{},e.Util.Base64={encode:function(e){var t,o,i,u,f,a,c,s=[],l=0;for(e=r.encode(e);e.length>l;)t=e.charCodeAt(l++),o=e.charCodeAt(l++),i=e.charCodeAt(l++),u=t>>2,f=(3&t)<<4|o>>4,a=(15&o)<<2|i>>6,c=63&i,isNaN(o)?a=c=64:isNaN(i)&&(c=64),s.push([n.charAt(u),n.charAt(f),n.charAt(a),n.charAt(c)].join(""));return s.join("")},decode:function(e,t){var o,i,u,f,a,c,s,l=[],p=0,d=e.length;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");d>p;)f=n.indexOf(e.charAt(p++)),a=n.indexOf(e.charAt(p++)),c=n.indexOf(e.charAt(p++)),s=n.indexOf(e.charAt(p++)),o=f<<2|a>>4,i=(15&a)<<4|c>>2,u=(3&c)<<6|s,l.push(String.fromCharCode(o)),64!==c&&l.push(String.fromCharCode(i)),64!==s&&l.push(String.fromCharCode(u));return l=l.join(""),t&&(l=r.decode(l)),l},decodeAsArray:function(e){var r,n=this.decode(e),t=[],o=n.length;for(r=0;o>r;r++)t[r]=n.charCodeAt(r);return t}},e.Util.Base64}),n("../build/compressor.deps.js",["jxg","utils/zip","utils/base64"],function(e,r,n){return e.decompress=function(e){return unescape(new r.Unzip(n.decodeAsArray(e)).unzip()[0][0])},e}),window.JXG=r("../build/compressor.deps.js")})();
+</script>
+<script type="text/javascript">
+window.fileLoading = (function () {
+    var fileLoadingCallbacks = {};
+    var timestamp = new Date().getTime();
+    function loadKeywordsFile(filename, callback) {
+        fileLoadingCallbacks[filename] = callback;
+        var script = document.createElement('script');
+        script.type = 'text/javascript';
+        // timestamp as an argument to prevent browsers from caching scripts
+        // see: http://stackoverflow.com/questions/866619/how-to-force-ie-to-reload-javascript
+        script.src = filename+'?time='+timestamp;
+        document.getElementsByTagName("head")[0].appendChild(script);
+    }
+    function getCallbackHandlerForKeywords(parent) {
+        var callableList = [];
+        return function (callable) {
+            if (!parent.isChildrenLoaded) {
+                callableList.push(callable);
+                if (callableList.length == 1) {
+                    loadKeywordsFile(parent.childFileName, function () {
+                        parent.isChildrenLoaded = true;
+                        for (var i = 0; i < callableList.length; i++) {
+                            callableList[i]();
+                        }
+                    });
+                }
+            } else {
+                callable();
+            }
+        }
+    }
+    function notifyFileLoaded(filename) {
+        fileLoadingCallbacks[filename]();
+    }
+    return {
+        getCallbackHandlerForKeywords: getCallbackHandlerForKeywords,
+        notify: notifyFileLoaded
+    }
+}());
+</script>
+<script type="text/javascript">
+window.model = (function () {
+    function Suite(data) {
+        var suite = createModelObject(data);
+        suite.source = data.source;
+        suite.relativeSource = data.relativeSource;
+        suite.fullName = data.parent ? data.parent.fullName + '.' + data.name : data.name;
+        setStats(suite, data.statistics);
+        suite.metadata = data.metadata;
+        suite.populateKeywords = createIterablePopulator('Keyword');
+        suite.populateTests = createIterablePopulator('Test');
+        suite.populateSuites = createIterablePopulator('Suite');
+        suite.childrenNames = ['keyword', 'suite', 'test'];
+        suite.callWhenChildrenReady = function (callable) { callable(); };
+        suite.message = data.message;
+        suite.children = function () {
+            return suite.keywords().concat(suite.tests()).concat(suite.suites());
+        };
+        suite.searchTests = function (predicate) {
+            var tests = [];
+            var suites = this.suites();
+            for (var i in suites)
+                tests = tests.concat(suites[i].searchTests(predicate));
+            return tests.concat(util.filter(this.tests(), predicate));
+        };
+        suite.searchTestsInSuite = function (pattern, matcher) {
+            if (!matcher)
+                matcher = util.Matcher(pattern);
+            if (matcher.matchesAny([suite.fullName, suite.name]))
+                return suite.allTests();
+            var tests = [];
+            var suites = this.suites();
+            for (var i in suites)
+                tests = tests.concat(suites[i].searchTestsInSuite(pattern, matcher));
+            return tests;
+        }
+        suite.searchTestsByTag = function (tag) {
+            return suite.searchTests(function (test) {
+                if (tag.combined)
+                    return containsTagPattern(test.tags, tag.combined);
+                return containsTag(test.tags, tag.label);
+            });
+        };
+        suite.findSuiteByName = function (name) {
+            return findSuiteByName(suite, name);
+        };
+        suite.allTests = function () {
+            return suite.searchTests(function (test) {
+                return true;
+            });
+        };
+        suite.criticalTests = function () {
+            return suite.searchTests(function (test) {
+                return test.isCritical;
+            });
+        };
+        return suite;
+    }
+    function containsTag(testTags, tagname) {
+        testTags = util.map(testTags, util.normalize);
+        return util.contains(testTags, util.normalize(tagname));
+    }
+    function containsTagPattern(testTags, pattern) {
+        var patterns;
+        if (pattern.indexOf('NOT') != -1) {
+            patterns = pattern.split('NOT');
+            return containsTagPattern(testTags, patterns[0]) &&
+                util.all(util.map(patterns.slice(1), function (p) {
+                    return !containsTagPattern(testTags, p);
+                }));
+        }
+        if (pattern.indexOf('OR') != -1) {
+            patterns = pattern.split('OR');
+            return util.any(util.map(patterns, function (p) {
+                return containsTagPattern(testTags, p);
+            }));
+        }
+        if (pattern.indexOf('AND') != -1) {
+            patterns = pattern.split('AND');
+            return util.all(util.map(patterns, function (p) {
+                return containsTagPattern(testTags, p);
+            }));
+        }
+        return util.Matcher(pattern).matchesAny(testTags);
+    }
+    function findSuiteByName(suite, name) {
+        if (suite.fullName == name)
+            return suite;
+        var subSuites = suite.suites();
+        for (var i in subSuites) {
+            var match = findSuiteByName(subSuites[i], name);
+            if (match)
+                return match;
+        }
+        return null;
+    }
+    function setStats(suite, stats) {
+        for (var name in stats) {
+            suite[name] = stats[name];
+        }
+    }
+    function createModelObject(data) {
+        return {
+            name: data.name,
+            doc: data.doc,
+            status: data.status,
+            times: data.times,
+            id: data.parent ? data.parent.id + '-' + data.id : data.id
+        };
+    }
+    function Test(data) {
+        var test = createModelObject(data);
+        test.fullName = data.parent.fullName + '.' + test.name;
+        test.formatParentName = function () { return util.formatParentName(test); };
+        test.timeout = data.timeout;
+        test.populateKeywords = createIterablePopulator('Keyword');
+        test.childrenNames = ['keyword'];
+        test.isChildrenLoaded = data.isChildrenLoaded;
+        test.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(test);
+        test.children = function () {
+            if (test.isChildrenLoaded)
+                return test.keywords();
+        };
+        test.isCritical = data.isCritical;
+        test.tags = data.tags;
+        test.message = data.message;
+        test.matchesTagPattern = function (pattern) {
+            return containsTagPattern(test.tags, pattern);
+        };
+        test.matchesNamePattern = function (pattern) {
+            return util.Matcher(pattern).matchesAny([test.name, test.fullName]);
+        };
+        return test;
+    }
+    function Keyword(data) {
+        var kw = createModelObject(data);
+        kw.type = data.type;
+        kw.arguments = data.args;
+        kw.timeout = data.timeout;
+        kw.populateMessages = createIterablePopulator('Message');
+        kw.populateKeywords = createIterablePopulator('Keyword');
+        kw.childrenNames = ['keyword', 'message'];
+        kw.isChildrenLoaded = data.isChildrenLoaded;
+        kw.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(kw);
+        kw.children = function () {
+            if (kw.isChildrenLoaded)
+                return kw.keywords();
+        };
+        return kw;
+    }
+    function Message(level, date, text, link) {
+        return {
+            level: level,
+            time: util.timeFromDate(date),
+            date: util.dateFromDate(date),
+            text: text,
+            link: link
+        };
+    }
+    function Times(timedata) {
+        var start = timedata[0];
+        var end = timedata[1];
+        var elapsed = timedata[2];
+        return {
+            elapsedMillis: elapsed,
+            elapsedTime: util.formatElapsed(elapsed),
+            startTime: util.dateTimeFromDate(start),
+            endTime:  util.dateTimeFromDate(end)
+        };
+    }
+    function createIterablePopulator(name) {
+        return function (populator) {
+            populateIterable(this, name, populator);
+        };
+    }
+    function populateIterable(obj, name, populator) {
+        name = name.toLowerCase() + 's';
+        obj[name] = createGetAllFunction(populator.numberOfItems, populator.creator);
+    }
+    function createGetAllFunction(numberOfElements, creator) {
+        var cached = null;
+        return function () {
+            if (cached === null) {
+                cached = [];
+                for (var i = 0; i < numberOfElements(); i++) {
+                    cached.push(creator(i));
+                }
+            }
+            return cached;
+        };
+    }
+    return {
+        Suite: Suite,
+        Test: Test,
+        Keyword: Keyword,
+        Message: Message,
+        Times: Times,
+        containsTag: containsTag,  // Exposed for tests
+        containsTagPattern: containsTagPattern  // Exposed for tests
+    };
+}());
+window.stats = (function () {
+    function Statistics(totalElems, tagElems, suiteElems) {
+        return {total: util.map(totalElems, totalStatElem),
+                tag:   util.map(tagElems, tagStatElem),
+                suite: util.map(suiteElems, suiteStatElem)};
+    }
+    function statElem(stat) {
+        stat.total = stat.pass + stat.fail;
+        var percents = calculatePercents(stat.total, stat.pass, stat.fail);
+        stat.passPercent = percents[0];
+        stat.failPercent = percents[1];
+        var widths = calculateWidths(stat.passPercent, stat.failPercent);
+        stat.passWidth = widths[0];
+        stat.failWidth = widths[1];
+        return stat;
+    }
+    function totalStatElem(data) {
+        var stat = statElem(data);
+        stat.type = stat.label == 'Critical Tests' ? 'critical' : 'all';
+        return stat;
+    }
+    function tagStatElem(data) {
+        var stat = statElem(data);
+        stat.links = parseLinks(stat.links);
+        return stat;
+    }
+    function suiteStatElem(data) {
+        var stat = statElem(data);
+        stat.fullName = stat.label;
+        stat.formatParentName = function () { return util.formatParentName(stat); };
+        // compatibility with RF 2.5 outputs
+        if (!stat.name)
+            stat.name = stat.label.split('.').pop();
+        return stat;
+    }
+    function parseLinks(linksData) {
+        if (!linksData)
+            return [];
+        return util.map(linksData.split(':::'), function (link) {
+                var index = link.indexOf(':');
+                return {title: link.slice(0, index), url: link.slice(index+1)};
+            });
+    }
+    function calculatePercents(total, passed, failed) {
+        if (total == 0)
+            return [0.0, 0.0];
+        var pass = 100.0 * passed / total;
+        var fail = 100.0 * failed / total;
+        if (pass > 0 && pass < 0.1)
+            return [0.1, 99.9];
+        if (fail > 0 && fail < 0.1)
+            return [99.9, 0.1];
+        return [Math.round(pass*10)/10, Math.round(fail*10)/10];
+    }
+    function calculateWidths(num1, num2) {
+        if (num1 + num2 == 0)
+            return [0.0, 0.0];
+        // Make small percentages better visible
+        if (num1 > 0 && num1 < 1)
+            return [1.0, 99.0];
+        if (num2 > 0 && num2 < 1)
+            return [99.0, 1.0];
+        // Handle situation where both are rounded up
+        while (num1 + num2 > 100) {
+            if (num1 > num2)
+                num1 -= 0.1;
+            if (num2 > num1)
+                num2 -= 0.1;
+        }
+        return [num1, num2];
+    }
+    return {
+        Statistics: Statistics
+    };
+}());
+</script>
+<script type="text/javascript">
+window.util = function () {
+    function map(elems, func) {
+        var ret = [];
+        for (var i = 0, len = elems.length; i < len; i++) {
+            ret[i] = func(elems[i]);
+        }
+        return ret;
+    }
+    function filter(elems, predicate) {
+        var ret = [];
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (predicate(elems[i]))
+                ret.push(elems[i]);
+        }
+        return ret;
+    }
+    function all(elems) {
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (!elems[i])
+                return false;
+        }
+        return true;
+    }
+    function any(elems) {
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (elems[i])
+                return elems[i];
+        }
+        return false;
+    }
+    function contains(elems, e) {
+        for (var i = 0, len = elems.length; i < len; i++) {
+            if (elems[i] == e)
+                return true;
+        }
+        return false;
+    }
+    function last(items) {
+        return items[items.length-1];
+    }
+    function unescape(string) {
+        return string.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
+    }
+    function escape(string) {
+        return string.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+    }
+    function normalize(string) {
+        return string.toLowerCase().replace(/ /g, '').replace(/_/g, '');
+    }
+    function regexpEscape(string) {
+        return string.replace(/[-[\]{}()+?*.,\\^$|#]/g, "\\$&");
+    }
+    function Matcher(pattern) {
+        pattern = regexpEscape(normalize(pattern));
+        var rePattern = '^' + pattern.replace(/\\\?/g, '.').replace(/\\\*/g, '[\\s\\S]*') + '$';
+        var regexp = new RegExp(rePattern);
+        function matches(string) {
+            return regexp.test(normalize(string));
+        }
+        return {
+            matches: matches,
+            matchesAny: function (strings) {
+                for (var i = 0, len = strings.length; i < len; i++)
+                    if (matches(strings[i]))
+                        return true;
+                return false;
+            }
+        };
+    }
+    function formatParentName(item) {
+        var parentName = item.fullName.slice(0, item.fullName.length - item.name.length);
+        return parentName.replace(/\./g, ' . ');
+    }
+    function timeFromDate(date) {
+        if (!date)
+            return 'N/A';
+        return formatTime(date.getHours(), date.getMinutes(),
+                          date.getSeconds(), date.getMilliseconds());
+    }
+    function dateFromDate(date) {
+        if (!date)
+            return 'N/A';
+        return padTo(date.getFullYear(), 4) +
+               padTo(date.getMonth() + 1, 2) +
+               padTo(date.getDate(), 2);
+    }
+    function dateTimeFromDate(date) {
+        if (!date)
+            return 'N/A';
+        return dateFromDate(date) + ' ' + timeFromDate(date);
+    }
+    function formatTime(hours, minutes, seconds, milliseconds) {
+        return padTo(hours, 2) + ':' +
+               padTo(minutes, 2) + ':' +
+               padTo(seconds, 2) + '.' +
+               padTo(milliseconds, 3);
+    }
+    function formatElapsed(elapsed) {
+        var millis = elapsed;
+        var hours = Math.floor(millis / (60 * 60 * 1000));
+        millis -= hours * 60 * 60 * 1000;
+        var minutes = Math.floor(millis / (60 * 1000));
+        millis -= minutes * 60 * 1000;
+        var seconds = Math.floor(millis / 1000);
+        millis -= seconds * 1000;
+        return formatTime(hours, minutes, seconds, millis);
+    }
+    function padTo(number, len) {
+        var numString = number + "";
+        while (numString.length < len) numString = "0" + numString;
+        return numString;
+    }
+    function timestamp(millis) {
+        // used also by tools that do not set window.output.baseMillis
+        var base = window.output ? window.output.baseMillis : 0;
+        return new Date(base + millis);
+    }
+    function createGeneratedAgoString(generatedMillis) {
+        generatedMillis = timestamp(generatedMillis);
+        function timeString(time, shortUnit) {
+            var unit = {y: 'year', d: 'day', h: 'hour', m: 'minute',
+                        s: 'second'}[shortUnit];
+            var end = time == 1 ? ' ' : 's ';
+            return time + ' ' + unit + end;
+        }
+        function compensateLeapYears(days, years) {
+            // Not a perfect algorithm but ought to be enough
+            return days - Math.floor(years / 4);
+        }
+        var generated = Math.round(generatedMillis / 1000);
+        var current = Math.round(new Date().getTime() / 1000);
+        var elapsed = current - generated;
+        var prefix = '';
+        if (elapsed < 0) {
+            prefix = '- ';
+            elapsed = Math.abs(elapsed);
+        }
+        var secs  = elapsed % 60;
+        var mins  = Math.floor(elapsed / 60) % 60;
+        var hours = Math.floor(elapsed / (60*60)) % 24;
+        var days  = Math.floor(elapsed / (60*60*24)) % 365;
+        var years = Math.floor(elapsed / (60*60*24*365));
+        if (years) {
+            days = compensateLeapYears(days, years);
+            return prefix + timeString(years, 'y') + timeString(days, 'd');
+        } else if (days) {
+            return prefix + timeString(days, 'd') + timeString(hours, 'h');
+        } else if (hours) {
+            return prefix + timeString(hours, 'h') + timeString(mins, 'm');
+        } else if (mins) {
+            return prefix + timeString(mins, 'm') + timeString(secs, 's');
+        } else {
+            return prefix + timeString(secs, 's');
+        }
+    }
+    function parseQueryString(query) {
+        var result = {};
+        if (!query)
+            return result;
+        var params = query.split('&');
+        var parts;
+        function decode(item) {
+            return decodeURIComponent(item.replace('+', ' '));
+        }
+        for (var i = 0, len = params.length; i < len; i++) {
+            parts = params[i].split('=');
+            result[decode(parts.shift())] = decode(parts.join('='));
+        }
+        return result;
+    }
+    return {
+        map: map,
+        filter: filter,
+        all: all,
+        any: any,
+        contains: contains,
+        last: last,
+        escape: escape,
+        unescape: unescape,
+        normalize: normalize,
+        regexpEscape: regexpEscape,
+        Matcher: Matcher,
+        formatParentName: formatParentName,
+        timeFromDate: timeFromDate,
+        dateFromDate: dateFromDate,
+        dateTimeFromDate: dateTimeFromDate,
+        formatElapsed: formatElapsed,
+        timestamp: timestamp,
+        createGeneratedAgoString: createGeneratedAgoString,
+        parseQueryString: parseQueryString
+    };
+}();
+</script>
+<script type="text/javascript">
+window.testdata = function () {
+    var elementsById = {};
+    var idCounter = 0;
+    var _statistics = null;
+    var LEVELS = ['TRACE', 'DEBUG', 'INFO', 'WARN', 'FAIL', 'ERROR'];
+    var STATUSES = ['FAIL', 'PASS', 'NOT_RUN'];
+    var KEYWORDS = ['KEYWORD', 'SETUP', 'TEARDOWN', 'FOR', 'VAR'];
+    function addElement(elem) {
+        if (!elem.id)
+            elem.id = uniqueId();
+        elementsById[elem.id] = elem;
+        return elem;
+    }
+    function uniqueId() {
+        idCounter++;
+        return 'element-id-' + idCounter;
+    }
+    function times(stats) {
+        var startMillis = stats[1];
+        var elapsed = stats[2];
+        if (startMillis === null)
+            return [null, null, elapsed];
+        return [util.timestamp(startMillis),
+                util.timestamp(startMillis + elapsed),
+                elapsed];
+    }
+    function message(element, strings) {
+        return addElement(model.Message(LEVELS[element[1]],
+                                        util.timestamp(element[0]),
+                                        strings.get(element[2]),
+                                        strings.get(element[3])));
+    }
+    function parseStatus(stats) {
+        return STATUSES[stats[0]];
+    }
+    function childCreator(parent, childType) {
+        return function (elem, strings, index) {
+            return addElement(childType(parent, elem, strings, index));
+        };
+    }
+    function createKeyword(parent, element, strings, index) {
+        var kw = model.Keyword({
+            parent: parent,
+            type: KEYWORDS[element[0]],
+            id: 'k' + (index + 1),
+            name: strings.get(element[1]),
+            timeout: strings.get(element[2]),
+            args: strings.get(element[4]),
+            doc: function () {
+                var doc = strings.get(element[3]);
+                this.doc = function () { return doc; };
+                return doc;
+            },
+            status: parseStatus(element[5], strings),
+            times: model.Times(times(element[5])),
+            isChildrenLoaded: typeof(element[6]) !== 'number'
+        });
+        lazyPopulateKeywordsFromFile(kw, element[6], strings);
+        kw.populateMessages(Populator(element[7], strings, message));
+        return kw;
+    }
+    function lazyPopulateKeywordsFromFile(parent, keywordsOrIndex, strings) {
+        if (parent.isChildrenLoaded) {
+            var keywords = keywordsOrIndex;
+            parent.populateKeywords(Populator(keywords, strings, childCreator(parent, createKeyword)));
+        } else {
+            var index = keywordsOrIndex;
+            parent.childFileName = window.settings['splitLogBase'] + '-' + index + '.js';
+            parent.populateKeywords(SplitLogPopulator(keywordsOrIndex, childCreator(parent, createKeyword)));
+        }
+    }
+    function tags(taglist, strings) {
+        return util.map(taglist, strings.get);
+    }
+    function createTest(parent, element, strings, index) {
+        var statusElement = element[5];
+        var test = model.Test({
+            parent: parent,
+            id: 't' + (index + 1),
+            name: strings.get(element[0]),
+            doc: function () {
+                var doc = strings.get(element[3]);
+                this.doc = function () { return doc; };
+                return doc;
+            },
+            timeout: strings.get(element[1]),
+            isCritical: element[2],
+            status: parseStatus(statusElement),
+            message: function () {
+                var msg = createMessage(statusElement, strings);
+                this.message = function () { return msg; };
+                return msg;
+            },
+            times: model.Times(times(statusElement)),
+            tags: tags(element[4], strings),
+            isChildrenLoaded: typeof(element[6]) !== 'number'
+        });
+        lazyPopulateKeywordsFromFile(test, element[6], strings);
+        return test;
+    }
+    function createMessage(statusElement, strings) {
+        return statusElement.length == 4 ? strings.get(statusElement[3]) : '';
+    }
+    function createSuite(parent, element, strings, index) {
+        var statusElement = element[5];
+        var suite = model.Suite({
+            parent: parent,
+            id: 's' + ((index || 0) + 1),
+            name: strings.get(element[0]),
+            source: strings.get(element[1]),
+            relativeSource: strings.get(element[2]),
+            doc: function () {
+                var doc = strings.get(element[3]);
+                this.doc = function () { return doc; };
+                return doc;
+            },
+            status: parseStatus(statusElement),
+            message: function () {
+                var msg = createMessage(statusElement, strings);
+                this.message = function () { return msg; };
+                return msg;
+            },
+            times: model.Times(times(statusElement)),
+            statistics: suiteStats(util.last(element)),
+            metadata: parseMetadata(element[4], strings)
+        });
+        suite.populateKeywords(Populator(element[8], strings, childCreator(suite, createKeyword)));
+        suite.populateTests(Populator(element[7], strings, childCreator(suite, createTest)));
+        suite.populateSuites(Populator(element[6], strings, childCreator(suite, createSuite)));
+        return suite;
+    }
+    function parseMetadata(data, strings) {
+        var metadata = [];
+        for (var i=0; i<data.length; i+=2) {
+            metadata.push([strings.get(data[i]), strings.get(data[i+1])]);
+        }
+        return metadata;
+    }
+    function suiteStats(stats) {
+        return {
+            total: stats[0],
+            totalPassed: stats[1],
+            totalFailed: stats[0] - stats[1],
+            critical: stats[2],
+            criticalPassed: stats[3],
+            criticalFailed: stats[2] - stats[3]
+        };
+    }
+    function Populator(items, strings, creator) {
+        return {
+            numberOfItems: function () {
+                return items.length;
+            },
+            creator: function (index) {
+                return creator(items[index], strings, index);
+            }
+        };
+    }
+    function SplitLogPopulator(structureIndex, creator) {
+        return {
+            numberOfItems: function () {
+                return window['keywords'+structureIndex].length;
+            },
+            creator: function (index) {
+                return creator(window['keywords'+structureIndex][index],
+                               StringStore(window['strings'+structureIndex]),
+                               index);
+            }
+        };
+    }
+    function suite() {
+        var elem = window.output.suite;
+        if (elementsById[elem.id])
+            return elem;
+        var root = addElement(createSuite(null, elem, StringStore(window.output.strings)));
+        window.output.suite = root;
+        return root;
+    }
+    function findLoaded(id) {
+        return elementsById[id];
+    }
+    function ensureLoaded(id, callback) {
+        var ids = id.split('-');
+        var root = suite();
+        ids.shift();
+        loadItems(ids, root, [root.id], callback);
+    }
+    function loadItems(ids, current, result, callback) {
+        if (!ids.length) {
+            callback(result);
+            return;
+        }
+        current.callWhenChildrenReady(function () {
+            var id = ids.shift();
+            var type = id[0];
+            var index = parseInt(id.substring(1)) - 1;
+            var item = selectFrom(current, type, index);
+            result.push(item.id);
+            loadItems(ids, item, result, callback);
+        });
+    }
+    function selectFrom(element, type, index) {
+        if (type === 'k') {
+            return element.keywords()[index];
+        } else if (type === 't') {
+            return element.tests()[index];
+        } else {
+            return element.suites()[index];
+        }
+    }
+    function errorIterator() {
+        return {
+            next: function () {
+                return message(window.output.errors.shift(),
+                               StringStore(window.output.strings));
+            },
+            hasNext: function () {
+                return window.output.errors.length > 0;
+            }
+        };
+    }
+    function statistics() {
+        if (!_statistics) {
+            var statData = window.output.stats;
+            _statistics = stats.Statistics(statData[0], statData[1], statData[2]);
+        }
+        return _statistics;
+    }
+    function StringStore(strings) {
+        function getText(id) {
+            var text = strings[id];
+            if (!text)
+                return '';
+            if (text[0] == '*')
+                return text.substring(1);
+            var extracted = extract(text);
+            strings[id] = '*' + extracted;
+            return extracted;
+        }
+        function extract(text) {
+            var decoded = JXG.Util.Base64.decodeAsArray(text);
+            var extracted = (new JXG.Util.Unzip(decoded)).unzip()[0][0];
+            return JXG.Util.UTF8.decode(extracted);
+        }
+        function get(id) {
+            if (id === null) return null;
+            return getText(id);
+        }
+        return {get: get};
+    }
+    return {
+        suite: suite,
+        errorIterator: errorIterator,
+        findLoaded: findLoaded,
+        ensureLoaded: ensureLoaded,
+        statistics: statistics,
+        StringStore: StringStore,  // exposed for tests
+        LEVELS: LEVELS
+    };
+}();
+</script>
+<script type="text/javascript">
+function removeJavaScriptDisabledWarning() {
+    // Not using jQuery here for maximum speed
+    document.getElementById('javascript-disabled').style.display = 'none';
+}
+function addJavaScriptDisabledWarning(error) {
+    if (window.console)
+        console.error('Opening failed: ' + error.name + ': ' + error.message);
+    document.getElementById('javascript-disabled').style.display = 'block';
+}
+function initLayout(suiteName, type) {
+    parseTemplates();
+    setTitle(suiteName, type);
+    addHeader();
+    addReportOrLogLink(type);
+}
+function parseTemplates() {
+    $('script[type="text/x-jquery-tmpl"]').map(function (idx, elem) {
+        $.template(elem.id, elem.text);
+    });
+}
+function setTitle(suiteName, type) {
+    var givenTitle = window.settings.title;
+    var title = givenTitle ? givenTitle : suiteName + " Test " + type;
+    document.title = util.unescape(title);
+}
+function addHeader() {
+    $.tmpl('<h1>${title}</h1>' +
+           '<div id="generated">' +
+             '<span>Generated<br>${generated}</span><br>' +
+             '<span id="generated-ago">${ago} ago</span>' +
+           '</div>' +
+           '<div id="top-right-header">' +
+             '<div id="report-or-log-link"><a href="#"></a></div>' +
+           '</div>', {
+        generated: window.output.generatedTimestamp,
+        ago: util.createGeneratedAgoString(window.output.generatedMillis),
+        title: document.title
+    }).appendTo($('#header'));
+}
+function addReportOrLogLink(myType) {
+    var url;
+    var text;
+    var container = $('#report-or-log-link');
+    if (myType == 'Report') {
+        url = window.settings.logURL;
+        text = 'LOG';
+    } else {
+        url = window.settings.reportURL;
+        text = 'REPORT';
+    }
+    if (url) {
+        container.find('a').attr('href', url);
+        container.find('a').text(text);
+    } else {
+        container.remove();
+    }
+}
+function addStatistics() {
+    var statHeaders =
+        '<th class="stats-col-stat">Total</th>' +
+        '<th class="stats-col-stat">Pass</th>' +
+        '<th class="stats-col-stat">Fail</th>' +
+        '<th class="stats-col-elapsed">Elapsed</th>' +
+        '<th class="stats-col-graph">Pass / Fail</th>';
+    var statTable =
+        '<h2>Test Statistics</h2>' +
+        '<table class="statistics" id="total-stats"><thead><tr>' +
+        '<th class="stats-col-name">Total Statistics</th>' + statHeaders +
+        '</tr></thead></table>' +
+        '<table class="statistics" id="tag-stats"><thead><tr>' +
+        '<th class="stats-col-name">Statistics by Tag</th>' + statHeaders +
+        '</tr></thead></table>' +
+        '<table class="statistics" id="suite-stats"><thead><tr>' +
+        '<th class="stats-col-name">Statistics by Suite</th>' + statHeaders +
+        '</tr></thead></table>';
+    $(statTable).appendTo('#statistics-container');
+    util.map(['total', 'tag', 'suite'], addStatTable);
+    addTooltipsToElapsedTimes();
+    enableStatisticsSorter();
+}
+function addTooltipsToElapsedTimes() {
+    $('.stats-col-elapsed').attr('title',
+        'Total execution time of these test cases. ' +
+        'Excludes suite setups and teardowns.');
+    $('#suite-stats').find('.stats-col-elapsed').attr('title',
+        'Total execution time of this test suite.');
+}
+function enableStatisticsSorter() {
+    $.tablesorter.addParser({
+        id: 'statName',
+        type: 'numeric',
+        is: function(s) {
+            return false;  // do not auto-detect
+        },
+        format: function(string, table, cell, cellIndex) {
+            // Rows have class in format 'row-<index>'.
+            var index = $(cell).parent().attr('class').substring(4);
+            return parseInt(index);
+        }
+    });
+    $(".statistics").tablesorter({
+        sortInitialOrder: 'desc',
+        headers: {0: {sorter:'statName', sortInitialOrder: 'asc'},
+                  5: {sorter: false}}
+    });
+}
+function addStatTable(tableName) {
+    var stats = window.testdata.statistics()[tableName];
+    if (tableName == 'tag' && stats.length == 0) {
+        renderNoTagStatTable();
+    } else {
+        renderStatTable(tableName, stats);
+    }
+}
+function renderNoTagStatTable() {
+    $('<tbody><tr class="row-0">' +
+        '<td class="stats-col-name">No Tags</td>' +
+        '<td class="stats-col-stat"></td>' +
+        '<td class="stats-col-stat"></td>' +
+        '<td class="stats-col-stat"></td>' +
+        '<td class="stats-col-elapsed"></td>' +
+        '<td class="stats-col-graph">' +
+          '<div class="empty-graph"></div>' +
+        '</td>' +
+      '</tr></tbody>').appendTo('#tag-stats');
+}
+function renderStatTable(tableName, stats) {
+    var template = tableName + 'StatisticsRowTemplate';
+    var tbody = $('<tbody></tbody>');
+    for (var i = 0, len = stats.length; i < len; i++) {
+        $.tmpl(template, stats[i], {index: i}).appendTo(tbody);
+    }
+    tbody.appendTo('#' + tableName + '-stats');
+}
+$.template('statColumnsTemplate',
+    '<td class="stats-col-stat">${total}</td>' +
+    '<td class="stats-col-stat">${pass}</td>' +
+    '<td class="stats-col-stat">${fail}</td>' +
+    '<td class="stats-col-elapsed">${elapsed}</td>' +
+    '<td class="stats-col-graph">' +
+      '{{if total}}' +
+      '<div class="graph">' +
+        '<div class="pass-bar" style="width: ${passWidth}%" title="${passPercent}%"></div>' +
+        '<div class="fail-bar" style="width: ${failWidth}%" title="${failPercent}%"></div>' +
+      '</div>' +
+      '{{else}}' +
+      '<div class="empty-graph"></div>' +
+      '{{/if}}' +
+    '</td>'
+);
+$.template('suiteStatusMessageTemplate',
+    '${critical} critical test, ' +
+    '${criticalPassed} passed, ' +
+    '<span class="{{if criticalFailed}}fail{{else}}pass{{/if}}">${criticalFailed} failed</span><br>' +
+    '${total} test total, ' +
+    '${totalPassed} passed, ' +
+    '<span class="{{if totalFailed}}fail{{else}}pass{{/if}}">${totalFailed} failed</span>'
+);
+// For complete cross-browser experience..
+// http://www.quirksmode.org/js/events_order.html
+function stopPropagation(event) {
+    var event = event || window.event;
+    event.cancelBubble = true;
+    if (event.stopPropagation)
+        event.stopPropagation();
+}
+</script>
+<script type="text/javascript">
+storage = function () {
+    var prefix = 'robot-framework-';
+    function init(user) {
+        prefix += user + '-';
+    }
+    function get(name, defaultValue) {
+        if (!localStorage)
+            return defaultValue;
+        var value = localStorage[prefix + name];
+        if (typeof value === 'undefined')
+            return defaultValue;
+        return value;
+    }
+    function set(name, value) {
+        if (localStorage)
+            localStorage[prefix + name] = value;
+    }
+    return {init: init, get: get, set: set};
+}();
+</script>
+<script type="text/javascript">
+window.output = {};
+</script>
+<script type="text/javascript">
+window.output["suite"] = [1,2,3,4,[],[1,0,60951],[],[[5,0,1,6,[7],[1,35479,22203],[]]],[],[1,1,1,1]];
+</script>
+<script type="text/javascript">
+window.output["strings"] = [];
+</script>
+<script type="text/javascript">
+window.output["strings"] = window.output["strings"].concat(["*","*ScalePOC","*/tmp/ONLabTest/TestON/RobotTests/ScalePOC.robot","*ScalePOC.robot","*<p>ONOS Sanity Test Suite\x3c/p>","*Find Max Switches By Scaling","eNqNUktr40AMvvdXiJ5SKEm6xyUESunCHkpDY9rzxJZjUXlkRrKz6a9fTV4tpIFePIb5pO81s27+h2IF1iC04R/Evl1hAqlBN2Rlgwp1khbuptBHI4aEoWworuHXFCiCGnaa4XfTMRS+pBZm2WSAD5fvCiHlzRU6RZJ+3cDL47KA+8Vf/T2bdPOrWc/+YZq/YqJ6CxUOVCKU4nxA6j8pYWmziUO+wakF6zUDwxCIw4rxEjQJ417P0/2yeHyBUYV16Nl2N9lNGRR33i3EKrDErCOaXzOmm7O9Jp2wrLceSinrSB94kGtfctyTK4yKg//QEVxPjrPXX9Y+rxTTgJAjPor2cmigqg/M23MkU3zXW2hEzQ8XDbWnr6esc62fDs7nTyS1QDDwWRfNOCCDRGgpUnQzo7dEZhi93AQLebgZw7LJNDuy26OKTN9JMh3Dw777MkRYZT9KvAVqO8YWo2GVyazJjDuuoLBB5k99y+J5AU8H+sKjutTp6Zl8YJLLBSl6A1F+XMbEH+V/jw4Wgw==","*done"]);
+</script>
+<script type="text/javascript">
+window.output["generatedTimestamp"] = "20150701 17:03:07 GMT 00:00";
+</script>
+<script type="text/javascript">
+window.output["stats"] = [[{"elapsed":"00:00:22","fail":0,"label":"Critical Tests","pass":1},{"elapsed":"00:00:22","fail":0,"label":"All Tests","pass":1}],[{"elapsed":"00:00:22","fail":0,"label":"done","pass":1}],[{"elapsed":"00:01:01","fail":0,"id":"s1","label":"ScalePOC","name":"ScalePOC","pass":1}]];
+</script>
+<script type="text/javascript">
+window.output["generatedMillis"] = 60908;
+</script>
+<script type="text/javascript">
+window.output["baseMillis"] = 1435770126092;
+</script>
+<script type="text/javascript">
+window.settings = {"background":{"fail":"#FF3333","nonCriticalFail":"#99FF66","pass":"#99FF66"},"logURL":"log.html","title":""};
+</script>
+<title></title>
+</head>
+<body>
+<div id="javascript-disabled">
+  <h1>Opening Robot Framework report failed</h1>
+  <ul>
+    <li>Verify that you have <b>JavaScript enabled</b> in your browser.</li>
+    <li>Make sure you are using a <b>modern enough browser</b>. Firefox 3.5, IE 8, or equivalent is required, newer browsers are recommended.</li>
+    <li>Check are there messages in your browser's <b>JavaScript error log</b>. Please report the problem if you suspect you have encountered a bug.</li>
+  </ul>
+</div>
+<script type="text/javascript">removeJavaScriptDisabledWarning();</script>
+
+<div id="header"></div>
+<div id="statistics-container"></div>
+<div id="test-details-container"></div>
+
+<script type="text/javascript">
+$(document).ready(function () {
+    try {
+        var topsuite = window.testdata.suite();
+    } catch (error) {
+        addJavaScriptDisabledWarning(error);
+        return;
+    }
+    setBackground(topsuite);
+    initLayout(topsuite.name, 'Report');
+    storage.init('report');
+    addSummary(topsuite);
+    addStatistics();
+    addDetails();
+    window.prevLocationHash = '';
+    window.onhashchange = showDetailsByHash;
+});
+
+function setBackground(topsuite) {
+    var color;
+    if (topsuite.criticalFailed)
+        color = window.settings.background.fail;
+    else if (topsuite.totalFailed)
+        color = window.settings.background.nonCriticalFail;
+    else
+        color = window.settings.background.pass;
+    $('body').css('background-color', color);
+}
+
+function addSummary(topsuite) {
+    var opts = {logURL: window.settings.logURL};
+    $.tmpl('summaryTableTemplate', topsuite, opts).insertAfter($('#header'));
+}
+
+function addDetails() {
+    addCustomSortersForDetails();
+    if (window.location.hash)
+        showDetailsByHash();
+    else
+        renderTotalSelector();
+}
+
+function addCustomSortersForDetails() {
+    $.tablesorter.addParser({
+        id: 'criticality',
+        type: 'numeric',
+        is: function(s) {
+            return false;  // do not auto-detect
+        },
+        format: function(s) {
+            return s === 'yes' ? 0 : 1;
+        }
+    });
+    $.tablesorter.addParser({
+        id: 'times',
+        type: 'text',
+        is: function(s) {
+            return false;  // do not auto-detect
+        },
+        format: function(s) {
+            return s.substring(0, 21);  // return only start time
+        }
+    });
+}
+
+function showDetailsByHash() {
+    // Cannot use window.location.hash because Firefox incorrectly decodes it:
+    // http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash
+    var hash = window.location.href.split('#').slice(1).join('#');
+    if (!hash || hash == window.prevLocationHash)
+        return;
+    var parts = hash.split('?');
+    var name = parts.shift();
+    var query = parts.join('?');
+    if (name == 'search') {
+        var params = util.parseQueryString(query);
+        searchExecuted(params.suite || '', params.test || '',
+                       params.include || '', params.exclude || '');
+        return
+    }
+    query = decodeURIComponent(query);
+    var action = {'totals': totalDetailSelected,
+                  'tags':   tagDetailSelected,
+                  'suites': suiteDetailSelected}[name];
+    if (action)
+        action(query);
+}
+
+function totalDetailSelected(name) {
+    renderTotalSelector(name);
+    if (name) {
+        renderTotalDetails(name);
+        updatePrintSelector(name == 'critical' ? 'Critical Tests' : 'All Tests');
+    }
+    scrollToSelector('totals', name);
+}
+
+function renderTotalSelector(name) {
+    var args = {linkTarget: (name) ? 'totals?'+name : 'totals',
+                totalTabStatus: 'detail-tab-selected'};
+    renderSelector(args, 'totalDetailsSelectorTemplate', {selected: name});
+}
+
+function renderTotalDetails(name) {
+    var index = (name == 'critical') ? 0 : 1;
+    var stat = window.testdata.statistics().total[index];
+    var tests = getTotalTests(name);
+    stat.totalTime = calculateTotalTime(tests);
+    $.tmpl('tagOrTotalDetailsTemplate', stat).appendTo('#details-header');
+    drawTestDetailsTable(tests, true);
+}
+
+function updatePrintSelector(name, info) {
+    if (info)
+        name += ' (' + info + ')';
+    $('#print-selector').html(name);
+}
+
+function tagDetailSelected(name) {
+    renderTagSelector(name);
+    if (name) {
+        var tag = findTag(name);
+        if (tag) {
+            renderTagDetails(tag);
+            updatePrintSelector(name, tag.info);
+        }
+    }
+    scrollToSelector('tags', name);
+}
+
+function findTag(name) {
+    var tags = window.testdata.statistics().tag;
+    for (var i = 0, len = tags.length; i < len; i++) {
+        if (tags[i].label == name)
+            return tags[i];
+    }
+    return null;
+}
+
+function renderTagSelector(name) {
+    var args = {linkTarget: (name) ? 'tags?'+name : 'tags',
+                tagTabStatus: 'detail-tab-selected'};
+    var stats = {tags: window.testdata.statistics().tag, selected: name};
+    renderSelector(args, 'tagDetailsSelectorTemplate', stats);
+}
+
+function renderTagDetails(tag) {
+    var tests = getTestsHavingTag(tag);
+    tag.totalTime = calculateTotalTime(tests);
+    $.tmpl('tagOrTotalDetailsTemplate', tag).appendTo('#details-header');
+    drawTestDetailsTable(tests, true);
+}
+
+function suiteDetailSelected(id) {
+    renderSuiteSelector(id);
+    if (id)
+        renderSuiteDetails(id);
+    scrollToSelector('suites', id);
+}
+
+function renderSuiteSelector(id) {
+    var args = {linkTarget: (id) ? 'suites?'+id : 'suites',
+                suiteTabStatus: 'detail-tab-selected'};
+    var stats = {suites: window.testdata.statistics().suite,
+                 selected: id};
+    renderSelector(args, 'suiteDetailsSelectorTemplate', stats);
+}
+
+function renderSuiteDetails(id) {
+    window.testdata.ensureLoaded(id, function (ids) {
+        var suite = window.testdata.findLoaded(id);
+        var opts = {logURL: window.settings.logURL};
+        $.tmpl('suiteDetailsTemplate', suite, opts).appendTo('#details-header');
+        drawTestDetailsTable(suite.allTests(), false);
+        updatePrintSelector(suite.fullName);
+    });
+}
+
+function searchExecuted(suite, test, include, exclude) {
+    renderSearchSelector(suite, test, include, exclude);
+    if (suite || test || include || exclude) {
+        renderSearchDetails(suite, test, include, exclude);
+        scrollToSelector('search' +
+                         '?suite=' + encodeURIComponent(suite) +
+                         '&test=' + encodeURIComponent(test) +
+                         '&include=' + encodeURIComponent(include) +
+                         '&exclude=' + encodeURIComponent(exclude));
+    } else {
+        scrollToSelector('search');
+    }
+}
+
+function renderSearchSelector(suite, test, include, exclude) {
+    var args = {linkTarget: (suite || test || include || exclude) ?
+                            ('search?suite=' + suite + '&test=' + test + '&include=' + include + '&exclude=' + exclude) :
+                            'search',
+                searchTabStatus: 'detail-tab-selected'};
+    var search = {suite: suite, test: test, include: include, exclude: exclude};
+    renderSelector(args, 'searchSelectorTemplate', search);
+}
+
+function renderSearchDetails(suite, test, include, exclude) {
+    var tests = searchTests(util.escape(suite), util.escape(test),
+                            util.escape(include), util.escape(exclude));
+    var passed = calculatePassed(tests);
+    var stats = {total: tests.length,
+                 pass: passed,
+                 fail: tests.length - passed,
+                 totalTime: calculateTotalTime(tests)};
+    $.tmpl('tagOrTotalDetailsTemplate', stats).appendTo('#details-header');
+    drawTestDetailsTable(tests, true);
+}
+
+function searchTests(suitePattern, testPattern, includePattern, excludePattern) {
+    var tests;
+    if (suitePattern)
+        tests = window.testdata.suite().searchTestsInSuite(suitePattern);
+    else
+        tests = window.testdata.suite().allTests();
+    return util.filter(tests, function (test) {
+        if (testPattern && !test.matchesNamePattern(testPattern))
+            return false;
+        if (includePattern && !test.matchesTagPattern(includePattern))
+            return false;
+        return !(excludePattern && test.matchesTagPattern(excludePattern));
+    });
+}
+
+function scrollToSelector(base, query) {
+    $('#test-details-container').css('min-height', $(window).height());
+    var anchor = query ? base + '?' + encodeURIComponent(query) : base;
+    window.location.hash = window.prevLocationHash = anchor;
+}
+
+function renderSelector(args, template, stats) {
+    window.elementsToRender = [];
+    var container = $('#test-details-container');
+    container.empty();
+    $.tmpl('detailsHeaderTemplate', args).appendTo(container);
+    $.tmpl(template, stats).appendTo(container);
+}
+
+function drawTestDetailsTable(tests, sortByStatus) {
+    if (!tests.length)
+        return;
+    renderTestDetailsHeader();
+    window.elementsToRender = tests;
+    var target = $('#test-details').find('tbody');
+    renderTestDetails(sortByStatus, target);
+}
+
+function renderTestDetailsHeader() {
+    var header = $.tmpl('testDetailsTableTemplate');
+    hideHiddenDetailsColumns(header);
+    header.appendTo('#test-details-container');
+}
+
+function sortByStatus(t1, t2) {
+    if (t1.status != t2.status)
+        return t1.status == 'FAIL' ? -1 : 1;
+    if (t1.isCritical != t2.isCritical)
+        return t1.isCritical ? -1 : 1;
+    return t1.fullName < t2.fullName ? -1 : 1;
+}
+
+function getTestsHavingTag(tag) {
+    return window.testdata.suite().searchTestsByTag(tag).sort(sortByStatus);
+}
+
+function getTotalTests(name) {
+    if (name == 'critical')
+        return window.testdata.suite().criticalTests().sort(sortByStatus);
+    return window.testdata.suite().allTests().sort(sortByStatus);
+}
+
+function calculateTotalTime(tests) {
+    var total = 0;
+    for (var i = 0, len = tests.length; i < len; i++)
+        total += tests[i].times.elapsedMillis;
+    return util.formatElapsed(total);
+}
+
+function calculatePassed(tests) {
+    var passed = util.filter(tests, function (test) {
+        return test.status == 'PASS';
+    });
+    return passed.length;
+}
+
+function renderTestDetails(sortByStatus, target) {
+    if (!window.elementsToRender.length)
+        return;
+    var tests = popUpTo(window.elementsToRender, 50);
+    renderTestDetailsRows(tests, target);
+    if (window.elementsToRender.length)
+        setTimeout(function () {renderTestDetails(sortByStatus, target);}, 0);
+    else
+        configureTableSorter(sortByStatus);
+}
+
+function renderTestDetailsRows(tests, target) {
+    var rows = $.tmpl('testDetailsTableRowTemplate', tests,
+                      {logURL: window.settings.logURL});
+    rows.find('a').click(stopPropagation);
+    hideHiddenDetailsColumns(rows);
+    rows.appendTo(target);
+}
+
+function configureTableSorter(sortByStatus) {
+    var config = {headers: {3: {sorter: 'criticality'},
+                            6: {sortInitialOrder: 'desc'},
+                            7: {sorter: 'times'}},
+                  selectorSort: '.details-col-header'};
+    if (sortByStatus)
+        config['sortList'] = [[4, 0], [3, 0]];
+    $('#test-details').tablesorter(config);
+}
+
+function popUpTo(list, upTo) {
+    var result = [];
+    while (list.length > 0 && result.length < upTo)
+        result.push(list.shift());
+    return result;
+}
+
+function toggleDetailsColumn(name) {
+    var column = $('.details-col-' + name);
+    column.toggleClass('hidden');
+    var hidden = column.hasClass('hidden');
+    storage.set(name, hidden ? 'hidden' : 'visible');
+    column.find('.details-col-toggle').html(hidden ? '&hellip;' : '&times;');
+}
+
+function hideHiddenDetailsColumns(elem) {
+    var names = ['doc', 'tags', 'msg', 'elapsed', 'times'];
+    for (var i = 0; i < names.length; i++) {
+        var name = names[i];
+        if (storage.get(name, 'visible') == 'hidden') {
+            var column = elem.find('.details-col-' + name);
+            column.addClass('hidden');
+            column.find('.details-col-toggle').html('&hellip;');
+        }
+    }
+}
+</script>
+
+<script type="text/x-jquery-tmpl" id="summaryTableTemplate">
+  <h2>Summary Information</h2>
+  <table class="details">
+    <tr>
+      <th>Status:</th>
+      {{if criticalFailed}}
+      <td><a href="#totals?critical" onclick="totalDetailSelected('critical')"
+             class="fail">${criticalFailed} critical test{{if criticalFailed != 1}}s{{/if}} failed</a></td>
+      {{else totalFailed}}
+      <td><a href="#totals?critical" onclick="totalDetailSelected('critical')"
+             class="pass">All critical tests passed</a></td>
+      {{else}}
+      <td><a href="#totals?all" onclick="totalDetailSelected('all')"
+             class="pass">All tests passed</a></td>
+      {{/if}}
+    </tr>
+    {{if doc()}}
+    <tr>
+      <th>Documentation:</th>
+      <td class="doc">{{html doc()}}</td>
+    </tr>
+    {{/if}}
+    {{each metadata}}
+    <tr>
+      <th>{{html $value[0]}}:</th>
+      <td class="doc">{{html $value[1]}}</td>
+    </tr>
+    {{/each}}
+    {{if times.startTime != 'N/A'}}
+    <tr>
+      <th>Start Time:</th>
+      <td>${times.startTime}</td>
+    </tr>
+    {{/if}}
+    {{if times.endTime != 'N/A'}}
+    <tr>
+      <th>End Time:</th>
+      <td>${times.endTime}</td>
+    </tr>
+    {{/if}}
+    <tr>
+      <th>Elapsed Time:</th>
+      <td>${times.elapsedTime}</td>
+    </tr>
+    {{if $item.logURL}}
+    <tr>
+      <th>Log File:</th>
+      <td><a href="${$item.logURL}">${$item.logURL}</a></td>
+    </tr>
+    {{/if}}
+  </table>
+</script>
+
+<script type="text/x-jquery-tmpl" id="totalStatisticsRowTemplate">
+  <tr onclick="totalDetailSelected('${type}')" class="row-${$item.index}">
+    <td class="stats-col-name">
+      <div class="stat-name">
+        <a href="#totals?${type}">{{html label}}</a>
+      </div>
+    </td>
+    {{tmpl($data) 'statColumnsTemplate'}}
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="tagStatisticsRowTemplate">
+  <tr onclick="tagDetailSelected('${label}')" class="row-${$item.index}">
+    <td class="stats-col-name" title="{{html doc}}">
+      <div class="stat-name">
+        <a href="#tags?${label}">{{html label}}</a>
+        {{if info}}(${info}){{/if}}
+      </div>
+      <div class="tag-links">
+        {{each links}}
+        <span>[<a href="{{html $value.url}}" onclick="stopPropagation(event)"
+                  title="{{html $value.url}}">{{html $value.title}}</a>]</span>
+        {{/each}}
+      </div>
+    </td>
+    {{tmpl($data) 'statColumnsTemplate'}}
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="suiteStatisticsRowTemplate">
+  <tr onclick="suiteDetailSelected('${id}')" class="row-${$item.index}">
+    <td class="stats-col-name" title="{{html label}}">
+      <div class="stat-name">
+        <a href="#suites?${id}"><span class="parent-name">{{html formatParentName}}</span>{{html name}}</a>
+      </div>
+    </td>
+    {{tmpl($data) 'statColumnsTemplate'}}
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="detailsHeaderTemplate">
+  <h2 id="${linkTarget}">Test Details</h2>
+  <ul id="detail-tabs">
+    <li class="${totalTabStatus} detail-tab">
+      <a href="#totals" onclick="renderTotalSelector()">Totals</a>
+    </li>
+    <li class="${tagTabStatus} detail-tab">
+      <a href="#tags" onclick="renderTagSelector()">Tags</a>
+    </li>
+    <li class="${suiteTabStatus} detail-tab">
+      <a href="#suites" onclick="renderSuiteSelector()">Suites</a>
+    </li>
+    <li class="${searchTabStatus} detail-tab">
+      <a href="#search" onclick="renderSearchSelector()">Search</a>
+    </li>
+  </ul>
+</script>
+
+<script  type="text/x-jquery-tmpl" id="totalDetailsSelectorTemplate">
+  <table class="details" id="details-header">
+    <tr class="selector">
+      <th>Type:</th>
+      <td id="normal-selector">
+        <input id="radio-critical" type="radio" name="totals-radio"
+               onclick="totalDetailSelected('critical')"
+               {{if selected == 'critical'}}checked="checked"{{/if}}>
+        <label for="radio-critical">Critical Tests</label><br>
+        <input id="radio-all" type="radio" name="totals-radio"
+               onclick="totalDetailSelected('all')"
+               {{if selected == 'all'}}checked="checked"{{/if}}>
+        <label for="radio-all">All Tests</label>
+      </td>
+      <td id="print-selector"></td>
+    </tr>
+  </table>
+</script>
+
+<script  type="text/x-jquery-tmpl" id="tagDetailsSelectorTemplate">
+  <table class="details" id="details-header">
+    <tr class="selector">
+      <th>Name:</th>
+      <td id="normal-selector">
+        <select id="tag-detail-selector"
+                onchange="tagDetailSelected(this.options[this.selectedIndex].value)">
+          <option value="">Select tag...</option>
+          {{each tags}}
+          <option value="${$value.label}"
+                  {{if $value.label == selected}}selected="selected"{{/if}}>
+            {{html $value.label}} {{if $value.info}}(${$value.info}){{/if}}
+          </option>
+          {{/each}}
+        </select>
+      </td>
+      <td id="print-selector"></td>
+    </tr>
+  </table>
+</script>
+
+<script  type="text/x-jquery-tmpl" id="suiteDetailsSelectorTemplate">
+  <table class="details" id="details-header">
+    <tr class="selector">
+      <th>Name:</th>
+      <td id="normal-selector">
+        <select id="suite-detail-selector"
+                onchange="suiteDetailSelected(this.options[this.selectedIndex].value)">
+          <option value="">Select suite...</option>
+          {{each suites}}
+          <option value="${$value.id}"
+                  {{if $value.id == selected}}selected="selected"{{/if}}>
+            {{html $value.label}}
+          </option>
+          {{/each}}
+        </select>
+      </td>
+      <td id="print-selector"></td>
+    </tr>
+  </table>
+</script>
+
+<script  type="text/x-jquery-tmpl" id="searchSelectorTemplate">
+  <form action="javascript:void(0)">
+    <table class="details" id="details-header">
+      <tr class="selector first-selector">
+        <th><label for="search-suite">Suite:</label></th>
+        <td><input id="search-suite" type="text" value="${suite}"></td>
+      </tr>
+      <tr class="selector middle-selector">
+        <th><label for="search-test">Test:</label></th>
+        <td><input id="search-test" type="text" value="${test}"></td>
+      </tr>
+      <tr class="selector middle-selector">
+        <th><label for="search-include">Include:</label></th>
+        <td><input id="search-include" type="text" value="${include}"></td>
+      </tr>
+      <tr class="selector middle-selector">
+        <th><label for="search-exclude">Exclude:</label></th>
+        <td><input id="search-exclude" type="text" value="${exclude}"></td>
+      </tr>
+      <tr class="selector last-selector" id="search-buttons">
+        <th></th>
+        <td>
+          <input type="submit" value="Search"
+                 onclick="searchExecuted($('#search-suite').val(),
+                                         $('#search-test').val(),
+                                         $('#search-include').val(),
+                                         $('#search-exclude').val())">
+          <input type="button" value="Clear"
+                 onclick="$('#search-suite').val('');
+                          $('#search-test').val('');
+                          $('#search-include').val('');
+                          $('#search-exclude').val('')">
+          <a href="javascript:void(0)" onclick="$('#search-help').toggle()"
+             title="Toggle search help.">Help</a>
+        </td>
+      </tr>
+      <tr id="search-help" style="display: none">
+        <th></th>
+        <td>
+          <div>
+            <h3>Search fields</h3>
+            <p>
+              Test cases can be searched based on test suite and test case
+              names as well as based on tags. If multiple search criteria are
+              used, only tests matching all of them are included.
+              Search fields have same semantics as <em>&#8209;&#8209;suite</em>,
+              <em>&#8209;&#8209;test</em>, <em>&#8209;&#8209;include</em> and
+              <em>&#8209;&#8209;exclude</em> command line options, respectively.
+            </p>
+            <table class="search-help-examples">
+              <col class="help-item">
+              <col class="help-explanation">
+              <col class="help-examples>
+              <tr>
+                <th>Field</th>
+                <th>Explanation</th>
+                <th>Examples</th>
+              </tr>
+              <tr>
+                <td>Suite</td>
+                <td>
+                  Tests in matching suites are included. The pattern can match
+                  either suite's name or its full name that contains also
+                  parent suite names.
+                </td>
+                <td>My Suite<br>Root.Parent.Sui*</td>
+              </tr>
+              <tr>
+                <td>Test</td>
+                <td>
+                  Matching tests are included. The pattern can match either
+                  test's name or its full name that contains also parent
+                  suite names.
+                </td>
+                <td>Test*<br>Root.Pa*.T???</td>
+              </tr>
+              <tr>
+                <td>Include</td>
+                <td>
+                  Tests that contain matching tags are included.
+                </td>
+                <td>smoke<br>bug-*</td>
+              </tr>
+              <tr>
+                <td>Exclude</td>
+                <td>
+                  Tests that contain matching tags are not included.
+                </td>
+                <td>slow<br>feature-4?</td>
+              </tr>
+            </table>
+            <h3>Patterns</h3>
+            <p>
+              All searches support <em>*</em> and <em>?</em> wildcards and are
+              case, space and underscore insensitive. Tag related searches also
+              support <em>AND</em>, <em>OR</em> and <em>NOT</em> (case-sensitive)
+              combining operators. If operators are used together, their
+              precedence, from highest to lowest, is <em>AND</em>, <em>OR</em>,
+              <em>NOT</em>. See <em>Simple patterns</em> and
+              <em>Tag patterns</em> sections in
+              <a href="http://robotframework.org/robotframework/#user-guide">Robot
+              Framework User Guide</a> version 2.8.4 or newer for more details.
+            </p>
+            <table class="search-help-examples">
+              <col class="help-item">
+              <col class="help-explanation">
+              <col class="help-examples>
+              <tr>
+                <th>Pattern</th>
+                <th>Explanation</th>
+                <th>Examples</th>
+              </tr>
+              <tr>
+                <td>*</td>
+                <td>Matches anything, even an empty string.</td>
+                <td>f*<br>sprint-*</td>
+              </tr>
+              <tr>
+                <td>?</td>
+                <td>Matches any single character.</td>
+                <td>f??<br>sprint-1?</td>
+              </tr>
+              <tr>
+                <td>AND</td>
+                <td>Matches if all patterns match.</td>
+                <td>foo AND bar<br>x AND y* AND z??</td>
+              </tr>
+              <tr>
+                <td>OR</td>
+                <td>Matches if any pattern matches.</td>
+                <td>foo OR bar<br>x OR y* OR z1 AND z2</td>
+              </tr>
+              <tr>
+                <td>NOT</td>
+                <td>Matches if pattern before matches and pattern after does not.</td>
+                <td>foo NOT bar<br>* NOT id-* AND smoke</td>
+              </tr>
+            </table>
+          </div>
+        </td>
+      </tr>
+    </table>
+  </form>
+</script>
+
+<script type="text/x-jquery-tmpl" id="tagOrTotalDetailsTemplate">
+  <tr>
+    <th>Status:</th>
+    <td>${total} total, ${pass} passed, {{if fail}}<span class="fail">${fail} failed</span>{{else}}<span class="pass">0 failed</span>{{/if}}</td>
+  </tr>
+  {{if doc}}
+  <tr>
+    <th>Documentation:</th>
+    <td>{{html doc}}</td>
+  </tr>
+  {{/if}}
+  {{if combined}}
+  <tr>
+    <th>Pattern:</th>
+    <td>{{html combined}}</td>
+  </tr>
+  {{/if}}
+  {{if links}}{{if links.length}}
+  <tr>
+    <th>Links:</th>
+    <td>{{each links}}<a href="{{html $value.url}}"
+                         title="{{html $value.url}}">{{html $value.title}}</a> &nbsp; {{/each}}</td>
+  </tr>
+  {{/if}}{{/if}}
+  <tr>
+    <th>Total Time:</th>
+    <td>${totalTime}</td>
+  </tr>
+</script>
+
+<script type="text/x-jquery-tmpl" id="suiteDetailsTemplate">
+  <tr>
+    <th>Status:</th>
+    <td>{{tmpl($data) 'suiteStatusMessageTemplate'}}</td>
+  </tr>
+  {{if doc()}}
+  <tr>
+    <th>Documentation:</th>
+    <td class="doc">{{html doc()}}</td>
+  </tr>
+  {{/if}}
+  {{each metadata}}
+  <tr>
+    <th>{{html $value[0]}}:</th>
+    <td class="doc">{{html $value[1]}}</td>
+  </tr>
+  {{/each}}
+  {{if message()}}
+  <tr>
+    <th>Message:</th>
+    <td class="message">{{html message()}}</td>
+  </tr>
+  {{/if}}
+  <tr>
+    <th>Start / End Time:</th>
+    <td>${times.startTime} / ${times.endTime}</td>
+  </tr>
+  <tr>
+    <th>Elapsed Time:</th>
+    <td>${times.elapsedTime}</td>
+  </tr>
+  {{if $item.logURL}}
+  <tr>
+    <th>Log File:</th>
+    <td><a href="${$item.logURL}#${id}"
+           title="{{html fullName}}">${$item.logURL}#${id}</a></td>
+  </tr>
+  {{/if}}
+</script>
+
+<script type="text/x-jquery-tmpl" id="testDetailsTableTemplate">
+  <table id="test-details">
+    <thead>
+      <tr>
+        <th class="details-col-name" title="Name">
+          <div class='details-col-header'>Name</div>
+        </th>
+        <th class="details-col-doc" title="Documentation">
+          <div class='details-col-toggle' onclick="toggleDetailsColumn('doc')">&times;</div>
+          <div class='details-col-header'>Documentation</div>
+        </th>
+        <th class="details-col-tags" title="Tags">
+          <div class='details-col-toggle' onclick="toggleDetailsColumn('tags')">&times;</div>
+          <div class='details-col-header'>Tags</div>
+        </th>
+        <th class="details-col-crit" title="Critical">
+          <div class='details-col-header'>Crit.</div>
+        </th>
+        <th class="details-col-status" title="Status">
+          <div class='details-col-header'>Status</div>
+        </th>
+        <th class="details-col-msg" title="Message">
+          <div class='details-col-toggle' onclick="toggleDetailsColumn('msg')">&times;</div>
+          <div class='details-col-header'>Message</div>
+        </th>
+        <th class="details-col-elapsed" title="Elapsed Time">
+          <div class='details-col-toggle' onclick="toggleDetailsColumn('elapsed')">&times;</div>
+          <div class='details-col-header'>Elapsed</div>
+        </th>
+        <th class="details-col-times" title="Start Time / End Time">
+          <div class='details-col-toggle' onclick="toggleDetailsColumn('times')">&times;</div>
+          <div class='details-col-header'>Start / End</div>
+        </th>
+      </tr>
+    </thead>
+    <tbody></tbody>
+  </table>
+</script>
+
+<script type="text/x-jquery-tmpl" id="testDetailsTableRowTemplate">
+  {{if $item.logURL}}
+  <tr onclick="location = '${$item.logURL}#${id}'" title="{{html fullName}}">
+    <td class="details-col-name">
+      <div><a href="${$item.logURL}#${id}"><span class="parent-name">{{html formatParentName}}</span>{{html name}}</a></div>
+    </td>
+  {{else}}
+  <tr title="{{html fullName}}">
+    <td class="details-col-name">
+      <div><span class="parent-name">{{html formatParentName}}</span>{{html name}}</div>
+    </td>
+  {{/if}}
+    <td class="details-col-doc"><div class="doc details-limited">{{html doc()}}</div></td>
+    <td class="details-col-tags"><div>{{html tags.join(', ')}}</div></td>
+    <td class="details-col-crit"><div>{{if isCritical}}yes{{else}}no{{/if}}</div></td>
+    <td class="details-col-status"><div class="${status.toLowerCase()}">${status}</div></td>
+    <td class="details-col-msg"><div class="message details-limited">{{html message()}}</div></td>
+    <td class="details-col-elapsed"><div>${times.elapsedTime}</div></td>
+    <td class="details-col-times"><div>${times.startTime}<br>${times.endTime}</div></td>
+  </tr>
+</script>
+
+</body>
+</html>
