<!DOCTYPE html><html><head>
  <base href="/">

  <!-- APP Description -->
  <meta charset="UTF-8">
  <meta content="IE=Edge" http-equiv="X-UA-Compatible">
  <meta name="description" content="Digitizing Mzansi one process at a time. Discover essential Mzansi apps to streamline your personal and professional life. Simplify your daily tasks with our user-friendly solutions.">

  <!-- iOS meta tags & icons -->
  <meta name="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="MIH">

  <link rel="apple-touch-icon" href="icons/apple-touch-icon.png">

  <!-- Favicon -->
  <link rel="icon" href="favicon.ico">

  <title>Mzansi Innovation Hub</title>
  <link rel="manifest" href="manifest.json">

  <!-- test stuff for speed -->
  <link rel="preconnect" href="https://cdnjs.cloudflare.com">
  <link rel="prefetch" href="flutter_bootstrap.js">

  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">


  <!-- Splash screen -->
  
  
  <script src="install_pwa.js" defer=""></script>
  <!-- Splash screen -->
  <!-- <script>
    var dartPdfJsBaseUrl = "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.2.146/";
  </script> -->
  <!--------------------->
  <style id="splash-screen-style">
    html {
      height: 100%
    }

    body {
      margin: 0;
      min-height: 100%;
      background-color: #3A4454;
          background-size: 100% 100%;
    }

    .center {
      margin: 0;
      position: absolute;
      top: 50%;
      left: 50%;
      -ms-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
    }

    .contain {
      display:block;
      width:100%; height:100%;
      object-fit: contain;
    }

    .stretch {
      display:block;
      width:100%; height:100%;
    }

    .cover {
      display:block;
      width:100%; height:100%;
      object-fit: cover;
    }

    .bottom {
      position: absolute;
      bottom: 0;
      left: 50%;
      -ms-transform: translate(-50%, 0);
      transform: translate(-50%, 0);
    }

    .bottomLeft {
      position: absolute;
      bottom: 0;
      left: 0;
    }

    .bottomRight {
      position: absolute;
      bottom: 0;
      right: 0;
    }
  </style>
  <script id="splash-screen-script">
    function removeSplashFromWeb() {
      document.getElementById("splash")?.remove();
      document.getElementById("splash-branding")?.remove();
      document.body.style.background = "transparent";
    }
  </script>
</head>

<body>
  <picture id="splash-branding">
    <source srcset="splash/img/branding-1x.png 1x, splash/img/branding-2x.png 2x, splash/img/branding-3x.png 3x, splash/img/branding-4x.png 4x" media="(prefers-color-scheme: light)">
    <source srcset="splash/img/branding-dark-1x.png 1x, splash/img/branding-dark-2x.png 2x, splash/img/branding-dark-3x.png 3x, splash/img/branding-dark-4x.png 4x" media="(prefers-color-scheme: dark)">
    <img class="bottom" aria-hidden="true" src="splash/img/branding-1x.png" alt="">
  </picture>
  <picture id="splash">
      <source srcset="splash/img/light-1x.png 1x, splash/img/light-2x.png 2x, splash/img/light-3x.png 3x, splash/img/light-4x.png 4x" media="(prefers-color-scheme: light)">
      <source srcset="splash/img/dark-1x.png 1x, splash/img/dark-2x.png 2x, splash/img/dark-3x.png 3x, splash/img/dark-4x.png 4x" media="(prefers-color-scheme: dark)">
      <img class="center" aria-hidden="true" src="splash/img/light-1x.png" alt="">
  </picture>
  
  

  <!-- Versioning -->
  <!-- <script src="flutter.js" defer></script> -->

  <!-- <script defer>
    //var serviceWorkerVersion = '{{flutter_service_worker_version}}';

    window.addEventListener('load', function (env) {
      {{flutter_js}}
      {{flutter_build_config}}
      _flutter.loader.load({
        serviceWorker: {
          serviceWorkerVersion: {{flutter_service_worker_version}},
        },
      onEntrypointLoaded: function (engineInitializer) {
        engineInitializer.initializeEngine().then(function (appRunner) {
          appRunner.runApp();
        });
      }
      });
    });
  </script> -->

  <script defer="">
    var serviceWorkerVersion = '{{flutter_service_worker_version}}';
    var scriptLoaded = false;
    function loadMainDartJs() {
      console.log('Loading app...');
      if (scriptLoaded) {
        return;
      }
      scriptLoaded = true;
      {{flutter_js}}
      {{flutter_build_config}}
      _flutter.loader.load({
        serviceWorker: {
          serviceWorkerVersion: serviceWorkerVersion,
        },
        onEntrypointLoaded: function (engineInitializer) {
          engineInitializer.initializeEngine().then(function (appRunner) {
            appRunner.runApp();
          });
        }
      });
    }

    if ('serviceWorker' in navigator) {
      var startLoad = new Date();
      // Service workers are supported. Use them.
      window.addEventListener('load', function () {
        // Wait for registration to finish before dropping the <script> tag.
        // Otherwise, the browser will load the script multiple times,
        // potentially different versions.
        var serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion;
        navigator.serviceWorker.register(serviceWorkerUrl)
          .then((reg) => {

            function waitForActivation(serviceWorker) {
              serviceWorker.addEventListener('statechange', () => {
                if (serviceWorker.state == 'activated') {
                  console.log('Installed new service worker.');
                  loadMainDartJs();
                }
              });
            }

            console.log('Active Service Worker URL: ' + reg.active.scriptURL);
            const currentSWVersion = reg.active.scriptURL.split("=")[1].replaceAll("%22", "");;
            console.log('Active Service Worker Version: ' + serviceWorkerVersion.replaceAll("\"", ""));
            console.log('Latest Service Worker Version: ' + currentSWVersion);
            const isMatch = currentSWVersion === serviceWorkerVersion.replaceAll("\"", "");
            console.log('Latest Service Worker Installed: ' + isMatch);

            if (!reg.active && (reg.installing || reg.waiting)) {
              // No active web worker and we have installed or are installing
              // one for the first time. Simply wait for it to activate.
              console.log('No Service Worker Available - Installing New Service Worker.');
              waitForActivation(reg.installing || reg.waiting);
            } else if (!isMatch) {
              // When the app updates the serviceWorkerVersion changes, so we
              // need to ask the service worker to update.
              console.log('New service worker available.');
              reg.update();
              waitForActivation(reg.installing);
            } else {
              // Existing service worker is still good.
              console.log('Service Worker up-to-date, Loading app.');
              loadMainDartJs();
            }
          });

        // If service worker doesn't succeed in a reasonable amount of time,
        // fallback to plaint <script> tag.
        setTimeout(() => {
          if (!scriptLoaded) {
            console.warn(
              'Failed to load app from a service worker. Falling back to plain <script> tag.',
            );
            loadMainDartJs();
          }
        }, 4000);
        var finishLoad = new Date();
        var loadTime = (finishLoad.getTime() - startLoad.getTime());
        console.log("Load Time: " + loadTime);
      });



      if (navigator.serviceWorker.state == 'activated') {
        console.log('Installed new service worker.');
        loadMainDartJs();
        // if there's an existing controller (previous Service Worker), show the prompt 
        // you can tweak this and delay the notification once the page is load you can show a notification and ask for a new refresh
        if (navigator.serviceWorker.controller) {
          // you have a better UI here, reloading is not a great user experince here.
          const confirmed = alert('New version of the app is available. Refresh now');
          if (confirmed == true) {
            window.location.reload();
          }
        }
      }

    }
    else {
      // Service workers not supported. Just drop the <script> tag.
      console.log('Service Not Supported.');
      loadMainDartJs();
    }

  </script>



<script id="pdfjs-lib" src="//cdnjs.cloudflare.com/ajax/libs/pdf.js/3.2.146/pdf.min.js" defer=""></script>
<script id="pdfjs-worker" type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pdf.js/3.2.146/pdf.worker.min.js" defer=""></script>
<!--------------------->

</body><!-- File Picker & PDF viewer --></html>