<!-- Copyright 2019 The Flutter Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->

<html>
<head>
  <meta charset="UTF-8">
  <meta name="google-signin-client_id" content="308150028417-vlj9mqlm3gk1d03fb0efif1fu5nagdtt.apps.googleusercontent.com">
  <title>Build Dashboard</title>
  <!-- This application normally gets displayed on a TV that is hard to reach.
  Refreshing this page once a day (in seconds) makes it so the TV stays relatively
  up to date without anyone have to get a ladder to use the TV as a computer.
  -->
  <meta http-equiv="refresh" content="86400">

  <!-- iOS meta tags & icons -->
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="apple-mobile-web-app-title" content="repository">
  <link rel="apple-touch-icon" href="icons/Icon-192.png">

  <!-- Favicon -->
  <link rel="icon" type="image/png" href="favicon.png"/>

  <script src="flutter.js" defer></script>
</head>
<body>
<script>
  window.addEventListener('load', function() {
    window.flutterConfiguration = {
      // Use the local build of CanvasKit rather than the CDN.
      canvasKitBaseUrl: "/canvaskit/"
    };
    _flutter.loader.loadEntrypoint({
      onEntrypointLoaded: async function(engineInitializer) {
        engineInitializer.initializeEngine(
        ).then(function (appRunner) {
          appRunner.runApp();
        });
      }
    })
  });
  (function(w,d,s,g,js,fjs){
    g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(cb){this.q.push(cb)}};
    js=d.createElement(s);fjs=d.getElementsByTagName(s)[0];
    js.src='https://apis.google.com/js/platform.js';
    fjs.parentNode.insertBefore(js,fjs);js.onload=function(){g.load('analytics')};
  }(window,document,'script'));
</script>
</body>
</html>
