blob: 02342ef1091298d529a5916406256a4716f4d45e [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Traffic Server Administration &mdash; Traffic Control 2.1-dev documentation </title>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/theme_overrides.css" type="text/css" />
<link rel="top" title="Traffic Control 2.1-dev documentation" href="../index.html"/>
<link rel="up" title="Administrator’s Guide" href="index.html"/>
<link rel="next" title="Traffic Vault Administration" href="traffic_vault.html"/>
<link rel="prev" title="Traffic Stats Administration" href="traffic_stats.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="/" class="icon icon-home"> Traffic Control
<img src="../_static/tc_logo_c_only.png" class="logo" />
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../basics/index.html">CDN Basics</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../basics/content_delivery_networks.html">Content Delivery Networks</a></li>
<li class="toctree-l2"><a class="reference internal" href="../basics/http_11.html">HTTP 1.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="../basics/caching_proxies.html">Caching Proxies</a></li>
<li class="toctree-l2"><a class="reference internal" href="../basics/cache_revalidation.html">Cache Control Headers and Revalidation</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../overview/index.html">Traffic Control Overview</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../overview/introduction.html">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_ops.html">Traffic Ops</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_portal.html">Traffic Portal</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_router.html">Traffic Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_monitor.html">Traffic Monitor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_stats.html">Traffic Stats</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_server.html">Traffic Server</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_vault.html">Traffic Vault</a></li>
</ul>
</li>
</ul>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Administrator&#8217;s Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="traffic_ops/installation.html">Traffic Ops - Installing</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_ops/default_profiles.html">Traffic Ops - Default Profiles</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_ops/migration_from_10_to_20.html">Traffic Ops - Migrating from 1.x to 2.x</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_ops/configuration.html">Traffic Ops - Configuring</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_ops/using.html">Traffic Ops - Using</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_ops/extensions.html">Managing Traffic Ops Extensions</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_portal.html">Traffic Portal Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_monitor.html">Traffic Monitor Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_monitor_golang.html">Traffic Monitor Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_router.html">Traffic Router Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_stats.html">Traffic Stats Administration</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Traffic Server Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_vault.html">Traffic Vault Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="quick_howto/index.html">Quick How To Guides</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Developer&#8217;s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../development/building.html">Building Traffic Control</a></li>
<li class="toctree-l2"><a class="reference internal" href="../development/traffic_ops.html">Traffic Ops</a></li>
<li class="toctree-l2"><a class="reference internal" href="../development/traffic_portal.html">Traffic Portal</a></li>
<li class="toctree-l2"><a class="reference internal" href="../development/traffic_router.html">Traffic Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="../development/traffic_monitor.html">Traffic Monitor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../development/traffic_monitor_golang.html">Traffic Monitor Golang</a></li>
<li class="toctree-l2"><a class="reference internal" href="../development/traffic_stats.html">Traffic Stats</a></li>
<li class="toctree-l2"><a class="reference internal" href="../development/traffic_server.html">Traffic Server</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../faq/general.html">General</a></li>
<li class="toctree-l2"><a class="reference internal" href="../faq/development.html">Development</a></li>
<li class="toctree-l2"><a class="reference internal" href="../faq/administration.html">Running a Traffic Control CDN</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Traffic Control</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Traffic Control 2.1-dev</a> &raquo;</li>
<li><a href="index.html">Administrator&#8217;s Guide</a> &raquo;</li>
<li>Traffic Server Administration</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/admin/traffic_server.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="traffic_vault.html" class="btn btn-neutral float-right" title="Traffic Vault Administration">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="traffic_stats.html" class="btn btn-neutral" title="Traffic Stats Administration"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<div role="main" class="document">
<div class="section" id="traffic-server-administration">
<h1>Traffic Server Administration<a class="headerlink" href="#traffic-server-administration" title="Permalink to this headline">¶</a></h1>
<div class="section" id="installing-traffic-server">
<h2>Installing Traffic Server<a class="headerlink" href="#installing-traffic-server" title="Permalink to this headline">¶</a></h2>
<ol class="arabic">
<li><p class="first">Get the Traffic Server RPM and the astats RPM.</p>
<p>Sample command:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">wget</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">traffic</span><span class="o">-</span><span class="n">control</span><span class="o">-</span><span class="n">cdn</span><span class="o">.</span><span class="n">net</span><span class="o">/</span><span class="n">downloads</span><span class="o">/</span><span class="mf">1.7</span><span class="o">.</span><span class="mi">0</span><span class="o">/</span><span class="n">RELEASE</span><span class="o">-</span><span class="mf">1.7</span><span class="o">.</span><span class="mi">0</span><span class="o">/</span><span class="n">trafficserver</span><span class="o">-</span><span class="mf">5.3</span><span class="o">.</span><span class="mi">2</span><span class="o">-</span><span class="mf">759.</span><span class="n">ee14bbe</span><span class="o">.</span><span class="n">el6</span><span class="o">.</span><span class="n">x86_64</span><span class="o">.</span><span class="n">rpm</span>
<span class="n">wget</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">traffic</span><span class="o">-</span><span class="n">control</span><span class="o">-</span><span class="n">cdn</span><span class="o">.</span><span class="n">net</span><span class="o">/</span><span class="n">downloads</span><span class="o">/</span><span class="mf">1.6</span><span class="o">.</span><span class="mi">1</span><span class="o">/</span><span class="n">RELEASE</span><span class="o">-</span><span class="mf">1.6</span><span class="o">.</span><span class="mi">1</span><span class="o">/</span><span class="n">astats_over_http</span><span class="o">-</span><span class="mf">1.2</span><span class="o">-</span><span class="mf">8.</span><span class="n">el6</span><span class="o">.</span><span class="n">x86_64</span><span class="o">.</span><span class="n">rpm</span>
</pre></div>
</div>
<p>(astats was not released as part of 1.7, so in this examples 1.6.1 was used)</p>
</li>
<li><p class="first">Install Traffic Server and astats:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">sudo</span> <span class="n">yum</span> <span class="o">-</span><span class="n">y</span> <span class="n">install</span> <span class="n">trafficserver</span><span class="o">-*.</span><span class="n">rpm</span> <span class="n">astats_over_http</span><span class="o">*.</span><span class="n">rpm</span>
</pre></div>
</div>
</li>
<li><p class="first">Add the server using the Traffic Ops web interface:</p>
<ol class="arabic">
<li><p class="first">Select <strong>Servers</strong>.</p>
</li>
<li><p class="first">Scroll to the bottom of the page and click <strong>Add Server</strong>.</p>
</li>
<li><dl class="first docutils">
<dt>Complete the &#8220;Required Info:&#8221; section:</dt>
<dd><ul class="first last simple">
<li>Set &#8216;Interface Name&#8217; to the name of the interface from which traffic server delivers content.</li>
<li>Set &#8216;Type&#8217; to &#8216;MID&#8217; or &#8216;EDGE&#8217;.</li>
</ul>
</dd>
</dl>
</li>
<li><p class="first">Click <strong>Submit</strong>.</p>
</li>
<li><p class="first">Click <strong>Save</strong>.</p>
</li>
<li><p class="first">Click <strong>Online Server</strong>.</p>
</li>
<li><p class="first">Verify that the server status is now listed as <strong>Reported</strong></p>
</li>
</ol>
</li>
<li><p class="first">Install the ORT script and run it in &#8216;badass&#8217; mode to create the initial configuration, see <a class="reference internal" href="#reference-traffic-ops-ort"><span class="std std-ref">Configuring Traffic Server</span></a></p>
</li>
<li><p class="first">Start the service: <code class="docutils literal"><span class="pre">sudo</span> <span class="pre">service</span> <span class="pre">trafficserver</span> <span class="pre">start</span></code></p>
</li>
<li><p class="first">Configure traffic server to start automatically: <code class="docutils literal"><span class="pre">sudo</span> <span class="pre">chkconfig</span> <span class="pre">trafficserver</span> <span class="pre">on</span></code></p>
</li>
<li><p class="first">Verify that the installation is good:</p>
<ol class="arabic simple">
<li>Make sure that the service is running: <code class="docutils literal"><span class="pre">sudo</span> <span class="pre">service</span> <span class="pre">trafficserver</span> <span class="pre">status</span></code></li>
<li>Assuming a traffic monitor is already installed, browse to it, and verify that the traffic server appears in the &#8220;Cahce States&#8221; table, in white.</li>
</ol>
</li>
</ol>
</div>
<div class="section" id="configuring-traffic-server">
<span id="reference-traffic-ops-ort"></span><h2>Configuring Traffic Server<a class="headerlink" href="#configuring-traffic-server" title="Permalink to this headline">¶</a></h2>
<p>All of the Traffic Server application configuration files are generated by Traffic Ops and installed by way of the traffic_ops_ort.pl script.
The traffic_ops_ort.pl should be installed on all caches (by puppet or other non Traffic Ops means), usually in /opt/ort. It is used to do the initial install of the config files when the cache is being deployed, and to keep the config files up to date when the cache is already in service. The usage message of the script is shown below:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ sudo /opt/ort/traffic_ops_ort.pl
Thu May 26 15:52:11 UTC 2016
====-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-====
Usage: ./traffic_ops_ort.pl &lt;Mode&gt; &lt;Log_Level&gt; &lt;Traffic_Ops_URL&gt; &lt;Traffic_Ops_Login&gt; [optional flags]
&lt;Mode&gt; = interactive - asks questions during config process.
&lt;Mode&gt; = report - prints config differences and exits.
&lt;Mode&gt; = badass - attempts to fix all config differences that it can.
&lt;Mode&gt; = syncds - syncs delivery services with what is configured in Traffic Ops.
&lt;Log_Level&gt; =&gt; ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, NONE
&lt;Traffic_Ops_URL&gt; = URL to Traffic Ops host. Example: https://trafficops.company.net
&lt;Traffic_Ops_Login&gt; =&gt; Example: &#39;username:password&#39;
[optional flags]:
dispersion=&lt;time&gt; =&gt; wait a random number between 0 and &lt;time&gt; before starting. Default = 300.
retries=&lt;number&gt; =&gt; retry connection to Traffic Ops URL &lt;number&gt; times. Default = 3.
wait_for_parents=&lt;0|1&gt; =&gt; do not update if parent_pending = 1 in the update json. Default = 1, wait for parents.
====-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-====
$
</pre></div>
</div>
<div class="section" id="installing-the-ort-script">
<h3>Installing the ORT script<a class="headerlink" href="#installing-the-ort-script" title="Permalink to this headline">¶</a></h3>
<ol class="arabic">
<li><p class="first">The ORT script is not a part of the traffic server distribution. In this sample session, we get it manually from github:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">sudo</span> <span class="n">mkdir</span> <span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">ort</span>
<span class="n">sudo</span> <span class="n">wget</span> <span class="o">-</span><span class="n">P</span> <span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">ort</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">raw</span><span class="o">.</span><span class="n">githubusercontent</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">apache</span><span class="o">/</span><span class="n">incubator</span><span class="o">-</span><span class="n">trafficcontrol</span><span class="o">/</span><span class="mf">1.7</span><span class="o">.</span><span class="n">x</span><span class="o">/</span><span class="n">traffic_ops</span><span class="o">/</span><span class="nb">bin</span><span class="o">/</span><span class="n">traffic_ops_ort</span><span class="o">.</span><span class="n">pl</span>
<span class="n">sudo</span> <span class="n">chmod</span> <span class="o">+</span><span class="n">x</span> <span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">ort</span><span class="o">/</span><span class="n">traffic_ops_ort</span><span class="o">.</span><span class="n">pl</span>
</pre></div>
</div>
</li>
<li><p class="first">Install modules required by ORT: <code class="docutils literal"><span class="pre">sudo</span> <span class="pre">yum</span> <span class="pre">-y</span> <span class="pre">install</span> <span class="pre">perl-JSON</span> <span class="pre">perl-Crypt-SSLeay</span></code></p>
</li>
<li><p class="first">For initial configuration or when major changes (like a Profile change) need to be made, run the script in &#8220;badass mode&#8221;. All required rpm packages
will be installed, all Traffic Server config files will be fetched and installed, and (if needed) the Traffic Server application will be restarted.</p>
<p>Example run below:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ sudo /opt/ort/traffic_ops_ort.pl --dispersion=0 badass warn https://ops.$tcDomain admin:admin123
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">First run gives a lot of state errors that are expected. The &#8220;badass&#8221; mode fixes these issue s. Run it a second time, this should be cleaner.
Also, note that many ERROR messages emitted by ORT are actually information messages. Do not panic.</p>
</div>
</li>
<li><p class="first">Create a cron entry for running ort in &#8216;syncds&#8217; mode every 15 minutes.
This makes traffic control check periodically if &#8216;Queue Updates&#8217; was run on Traffic Ops, and it so, get the updated configuration.</p>
<p>Run <code class="docutils literal"><span class="pre">sudo</span> <span class="pre">crontab</span> <span class="pre">-e</span></code> and add the following line</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">*/</span><span class="mi">15</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">ort</span><span class="o">/</span><span class="n">traffic_ops_ort</span><span class="o">.</span><span class="n">pl</span> <span class="n">syncds</span> <span class="n">warn</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">traffops</span><span class="o">.</span><span class="n">kabletown</span><span class="o">.</span><span class="n">net</span> <span class="n">admin</span><span class="p">:</span><span class="n">password</span> <span class="o">--</span><span class="n">login_dispersion</span><span class="o">=</span><span class="mi">30</span> <span class="o">--</span><span class="n">dispersion</span><span class="o">=</span><span class="mi">180</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">tmp</span><span class="o">/</span><span class="n">ort</span><span class="o">/</span><span class="n">syncds</span><span class="o">.</span><span class="n">log</span> <span class="mi">2</span><span class="o">&gt;&amp;</span><span class="mi">1</span>
</pre></div>
</div>
<p>Changing <code class="docutils literal"><span class="pre">https://traffops.kabletown.net</span></code>, <code class="docutils literal"><span class="pre">admin</span></code>, and <code class="docutils literal"><span class="pre">password</span></code> to your CDN URL and credentials.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">By default, running ort on an edge traffic server waits for it&#8217;s parent (mid) servers to download their configuration before
it downloads it&#8217;s own configuration. Because of this, scheduling ort for running every 15 minutes (with 5 minutes default dispersion) means
that it might take up to ~35 minutes for a &#8220;Queue Updates&#8221; operation to affect all traffic servers. To customize this dispersion time, use
the command line option &#8211;dispersion=x where x is the number of seconds for the dispersion period. Servers will select a random number from
within this dispersion period to being pulling down configuration files from Traffic Ops. Another option, &#8211;login_dispersion=x can be used.
This option creates a dispersion period after the job begins during which ORT will wait before logging in and checking Traffic Ops for updates
to the server. This defaults to 0. If use_reval_pending, a.k.a. Rapid Revalidate is enabled, edges will NOT wait for their parents to download
their configuration before downloading their own.</p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>In &#8216;syncds&#8217; mode, the ort script updates only configurations that might be changed as part of normal operations, such as:</p>
<ul class="last simple">
<li>Delivery Services</li>
<li>SSL certificates</li>
<li>Traffic Monitor IP addresses</li>
<li>Logging configuration</li>
<li>Revalidation requests (By default. If Rapid Revalidate is enabled, this will only be checked by using a separate revalidate command in ORT.)</li>
</ul>
</div>
</li>
<li><p class="first">If Rapid Revalidate is enabled in Traffic Ops, create a second cron job for revalidation checks. ORT will not check revalidation files if Rapid Revalidate
is enabled. This setting allows for a separate check to be performed every 60 seconds to verify if a revalidation update has been made.</p>
<p>Run <code class="docutils literal"><span class="pre">sudo</span> <span class="pre">crontab</span> <span class="pre">-e</span></code> and add the following line</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">*/</span><span class="mi">1</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">ort</span><span class="o">/</span><span class="n">traffic_ops_ort</span><span class="o">.</span><span class="n">pl</span> <span class="n">revalidate</span> <span class="n">warn</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">traffops</span><span class="o">.</span><span class="n">kabletown</span><span class="o">.</span><span class="n">net</span> <span class="n">admin</span><span class="p">:</span><span class="n">password</span> <span class="o">--</span><span class="n">login_dispersion</span><span class="o">=</span><span class="mi">30</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">tmp</span><span class="o">/</span><span class="n">ort</span><span class="o">/</span><span class="n">syncds</span><span class="o">.</span><span class="n">log</span> <span class="mi">2</span><span class="o">&gt;&amp;</span><span class="mi">1</span>
</pre></div>
</div>
</li>
</ol>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="traffic_vault.html" class="btn btn-neutral float-right" title="Traffic Vault Administration">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="traffic_stats.html" class="btn btn-neutral" title="Traffic Stats Administration"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'2.1-dev',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: ''
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>