<!DOCTYPE html>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at .
http://www.apache.org/licenses/LICENSE-2.0 . Unless required by
applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either express or implied. See the License
for the specific language governing permissions and limitations under
the License. -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <base href="../">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=420, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    
    <!-- Left empty on purpose!-->
    <title></title>

    <!-- Bootstrap -->
    
    <link href="css/bootstrap.min.css" rel="stylesheet" media="all">
    <link href="css/scaffolding.css" rel="stylesheet" media="all">
    <link href="css/modal.css" rel="stylesheet" media="all">
    <link href="css/spinner.css" rel="stylesheet" media="all">
    <link rel="alternate" href="/api/static.lua"/>
    <link rel="stylesheet" href="//cdn.jsdelivr.net/font-hack/2.013/css/hack.min.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  
  <body onload="parse_permalink();">
    <header class="navbar navbar-default" style="margin-bottom: 0px; background: linear-gradient(to bottom, rgba(229,229,229,1) 0%,rgba(191,191,191,1) 100%);">
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header collapse navbar-collapse">
      <a class="navbar-brand" href="./"><span><img src="images/logo_large.png" style="margin-top: -10px !important;" height="30" width="32"/>&nbsp;<span class='hidden-xs title'>Pony Mail!</span></a>
      </div>
      
             
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1" style="float: left;">
      
      <ul class="nav navbar-nav" id="userprefs" style="position: absolute; right: 18px;">
      <li>
        <div title="Enable/disable social rendering" onclick="set_skin_permalink('chatty');" id="chatty_link" > </div>
      </li>
      </ul>
      
    </div>
    
    </div>
    
    </header>
    
    <div class="container-fluid">
       <noscript>
          <div class="bs-callout bs-callout-alert">
            This site requires JavaScript enabled. Please enable it.
          </div>
      </noscript>
      <div class="row">
      
        <div id="emails">
          
        </div>
      </div>
    </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
    <script src="js/config.js"></script>
    <script src="js/wordcloud.js"></script>
    <script src="js/weburl.js"></script>
    <script src="js/d3.min.js"></script>
    <script src="js/ponymail.js"></script>
    <div id="splash" class="splash fade-in"> &nbsp; </div>
    <div style="clear: both;"></div>
  </body>
</html>