    <footer class="footer">
      <div class="container">
        <div class="row">
          <div class="col-lg-12">
            <p class="text-muted">&copy; 2015 Google</p>
          </div>
        </div>
      </div>
    </footer>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="/assets/js/bootstrap.min.js"></script>

    <script>
      var shiftWindow = function() {
        if (location.hash.length !== 0) {
          window.scrollBy(0, -50);
        }
      };
      window.addEventListener("hashchange", shiftWindow);

      var highlightCurrentSidebarNav = function() {
        var href = location.pathname;
        var item = $('#sidebar-nav [href$="' + href + '"]');
        if (item) {
          var li = item.parent();
          li.addClass("active");

          if (li.parent() && li.parent().is("ul")) {
            do {
              var ul = li.parent();
              if (ul.hasClass("collapse")) {
                ul.collapse("show");
              }
              li = ul.parent();
            } while (li && li.is("li"));
          }
        }
      };

      $(document).ready(function() {
        // Scroll to anchor of location hash, adjusted for fixed navbar.
        window.setTimeout(function() {
          shiftWindow();
        }, 1);

        // Flip the caret when submenu toggles are clicked.
        $(".sidebar-submenu").on("show.bs.collapse", function() {
          var toggle = $('[href$="#' + $(this).attr('id') + '"]');
          if (toggle) {
            toggle.addClass("dropup");
          }
        });
        $(".sidebar-submenu").on("hide.bs.collapse", function() {
          var toggle = $('[href$="#' + $(this).attr('id') + '"]');
          if (toggle) {
            toggle.removeClass("dropup");
          }
        });

        // Highlight the current page on the sidebar nav.
        highlightCurrentSidebarNav();
      });
    </script>

    <!-- Google Analytics tracking code -->
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

      ga('create', 'UA-61082125-1', 'auto');
      ga('send', 'pageview');
    </script>
