<commit_before><!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
  <!-- Begin of favicon list -->
  <link rel="apple-touch-icon-precomposed" sizes="57x57" href="assets/res/favicon/apple-touch-icon-57x57.png" />
  <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/res/favicon/apple-touch-icon-114x114.png" />
  <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/res/favicon/apple-touch-icon-72x72.png" />
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/res/favicon/apple-touch-icon-144x144.png" />
  <link rel="apple-touch-icon-precomposed" sizes="60x60" href="assets/res/favicon/apple-touch-icon-60x60.png" />
  <link rel="apple-touch-icon-precomposed" sizes="120x120" href="assets/res/favicon/apple-touch-icon-120x120.png" />
  <link rel="apple-touch-icon-precomposed" sizes="76x76" href="assets/res/favicon/apple-touch-icon-76x76.png" />
  <link rel="apple-touch-icon-precomposed" sizes="152x152" href="assets/res/favicon/apple-touch-icon-152x152.png" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-196x196.png" sizes="196x196" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-96x96.png" sizes="96x96" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-32x32.png" sizes="32x32" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-16x16.png" sizes="16x16" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-128.png" sizes="128x128" />
  <meta name="application-name" content="&nbsp;"/>
  <meta name="msapplication-TileColor" content="#FFFFFF" />
  <meta name="msapplication-TileImage" content="assets/res/favicon/mstile-144x144.png" />
  <meta name="msapplication-square70x70logo" content="assets/res/favicon/mstile-70x70.png" />
  <meta name="msapplication-square150x150logo" content="assets/res/favicon/mstile-150x150.png" />
  <meta name="msapplication-wide310x150logo" content="assets/res/favicon/mstile-310x150.png" />
  <meta name="msapplication-square310x310logo" content="assets/res/favicon/mstile-310x310.png" />
  <!-- End of favicon list -->


  <meta charset="UTF-8">
  <title>好室友™</title>
  <meta name="description" content="湾区好室友™(haoshiyou.org)租房平台：我们致力于为旧金山湾区的朋友们构建一个友好可信的租房和室友匹配平台。现有微信系列租房群、Facebook Group、网站、Android、iOS app等。" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <meta name="format-detection" content="telephone=no">
  <meta name="msapplication-tap-highlight" content="no">

  <script>
    if (window.document.documentMode) {
      // polyfill IE11 in a blocking way
      var s = document.createElement('script');
      s.src = 'build/polyfills.js';
      document.head.appendChild(s);
    } else if (!Object.assign) {
      // polyfill other non-evergreen browsers in a blocking way
      var polyfillUrl = "https://cdn.polyfill.io/v2/polyfill.min.js?features=default,Array.prototype.find&flags=gated&unknown=polyfill";
      // send a blocking XHR to fetch the polyfill
      // then append it to the document so that its eval-ed synchronously
      // this is required because the method used for IE is not reliable with other non-evergreen browsers
      var xhr = new XMLHttpRequest();
      xhr.addEventListener("load", function() {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        var code = this.responseText;
        s.appendChild(document.createTextNode(code));
        document.head.appendChild(s);
      });
      xhr.open("GET", polyfillUrl, false);
      xhr.send();
    }
  </script>

  <!-- Google Tag Manager -->
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
          new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
          j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
          'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  })(window,document,'script','dataLayer','GTM-PVD5TJ');</script>
  <!-- End Google Tag Manager -->

  <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', 'https://www.google-analytics.com/analytics.js', 'ga');

  </script>
  <link rel="manifest" href="manifest.json">
  <meta name="theme-color" content="#00A4FF">
  <!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="<KEY>" crossorigin="anonymous">-->

  <link rel="stylesheet" href="assets/viewerjs/viewer.min.css">
  <link rel="stylesheet" href="build/main.css">


  <!-- un-comment this code to enable service worker-->
  <!--<script>-->
    <!--if ('serviceWorker' in navigator) {-->
      <!--navigator.serviceWorker.register('service-worker.js')-->
        <!--.then(() => console.log('service worker installed.'))-->
        <!--.catch(err => console.log('Error', err));-->
    <!--}-->
  <!--</script>-->
</head>
<body>
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PVD5TJ"
                    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <!-- this Ionic's root component and where the app will load -->
  <ion-app></ion-app>
  <script src="assets/viewerjs/viewer.min.js"></script>
  <!-- Google Maps Javascript SDK -->
  <!-- Aaha(xinbenlv): this Google API Key has to be ether "iOS Key" or "Android Key" instead of "Browser Key",
       otherwise, a device loading Google Maps will fail with RefererNotAllowedMapError -->
  <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDilZ69sI7zcszD1XWZ6oeV4IW8rufebMY"></script>

  <!-- TODO(xinbenlv): consider switch to use Browserify to bundle the underscore js from npm package
  <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>-->
  <!-- Auth0.js script -->
  <script src="https://cdn.auth0.com/w2/auth0-7.4.min.js"></script>

  <!-- Auth0 Lock script -->
  <script src="https://cdn.auth0.com/js/lock/10.6/lock.min.js"></script>

  <!-- cordova.js required for cordova apps -->
  <script src="cordova.js"></script>

  <script src='assets/thirdparty/qrcode.min.js' type='text/javascript'></script>
  <!-- jQuery and Cloudinary -->
  <script src='assets/jquery/jquery.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.ui.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.iframe-transport.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.fileupload.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.cloudinary.min.js' type='text/javascript'></script>
  <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="<KEY>" crossorigin="anonymous"></script>-->
  <!--<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="<KEY>" crossorigin="anonymous"></script>-->

  <!-- ZOOM.js https://github.com/fat/zoom.js/ -->
  <script src="assets/zoomjs/transition.js" type='text/javascript'></script>
  <link href="assets/zoomjs/zoom.css" rel="stylesheet">
  <script src="assets/zoomjs/zoom.js" type='text/javascript'></script>

  <script src="build/bootstrap.min.js"></script>
  <!-- The polyfills js is generated during the build process -->
  <script src="build/polyfills.js"></script>
  <!-- all code from node_modules directory is here -->
  <script src="build/vendor.js"></script>
  <!-- The bundle js is generated during the build process -->
  <script src="build/main.js"></script>
</body>
</html>
<commit_msg>Add search JSON-LD<commit_after><!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
  <!-- Begin of favicon list -->
  <link rel="apple-touch-icon-precomposed" sizes="57x57" href="assets/res/favicon/apple-touch-icon-57x57.png" />
  <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/res/favicon/apple-touch-icon-114x114.png" />
  <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/res/favicon/apple-touch-icon-72x72.png" />
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/res/favicon/apple-touch-icon-144x144.png" />
  <link rel="apple-touch-icon-precomposed" sizes="60x60" href="assets/res/favicon/apple-touch-icon-60x60.png" />
  <link rel="apple-touch-icon-precomposed" sizes="120x120" href="assets/res/favicon/apple-touch-icon-120x120.png" />
  <link rel="apple-touch-icon-precomposed" sizes="76x76" href="assets/res/favicon/apple-touch-icon-76x76.png" />
  <link rel="apple-touch-icon-precomposed" sizes="152x152" href="assets/res/favicon/apple-touch-icon-152x152.png" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-196x196.png" sizes="196x196" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-96x96.png" sizes="96x96" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-32x32.png" sizes="32x32" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-16x16.png" sizes="16x16" />
  <link rel="icon" type="image/png" href="assets/res/favicon/favicon-128.png" sizes="128x128" />
  <meta name="application-name" content="&nbsp;"/>
  <meta name="msapplication-TileColor" content="#FFFFFF" />
  <meta name="msapplication-TileImage" content="assets/res/favicon/mstile-144x144.png" />
  <meta name="msapplication-square70x70logo" content="assets/res/favicon/mstile-70x70.png" />
  <meta name="msapplication-square150x150logo" content="assets/res/favicon/mstile-150x150.png" />
  <meta name="msapplication-wide310x150logo" content="assets/res/favicon/mstile-310x150.png" />
  <meta name="msapplication-square310x310logo" content="assets/res/favicon/mstile-310x310.png" />
  <!-- End of favicon list -->


  <meta charset="UTF-8">
  <title>好室友™</title>
  <meta name="description" content="湾区好室友™(haoshiyou.org)租房平台：我们致力于为旧金山湾区的朋友们构建一个友好可信的租房和室友匹配平台。现有微信系列租房群、Facebook Group、网站、Android、iOS app等。" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <meta name="format-detection" content="telephone=no">
  <meta name="msapplication-tap-highlight" content="no">

  <script>
    if (window.document.documentMode) {
      // polyfill IE11 in a blocking way
      var s = document.createElement('script');
      s.src = 'build/polyfills.js';
      document.head.appendChild(s);
    } else if (!Object.assign) {
      // polyfill other non-evergreen browsers in a blocking way
      var polyfillUrl = "https://cdn.polyfill.io/v2/polyfill.min.js?features=default,Array.prototype.find&flags=gated&unknown=polyfill";
      // send a blocking XHR to fetch the polyfill
      // then append it to the document so that its eval-ed synchronously
      // this is required because the method used for IE is not reliable with other non-evergreen browsers
      var xhr = new XMLHttpRequest();
      xhr.addEventListener("load", function() {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        var code = this.responseText;
        s.appendChild(document.createTextNode(code));
        document.head.appendChild(s);
      });
      xhr.open("GET", polyfillUrl, false);
      xhr.send();
    }
  </script>

  <!-- Google Tag Manager -->
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
          new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
          j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
          'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  })(window,document,'script','dataLayer','GTM-PVD5TJ');</script>
  <!-- End Google Tag Manager -->

  <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', 'https://www.google-analytics.com/analytics.js', 'ga');

  </script>
  <link rel="manifest" href="manifest.json">
  <meta name="theme-color" content="#00A4FF">
  <!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="<KEY>" crossorigin="anonymous">-->

  <link rel="stylesheet" href="assets/viewerjs/viewer.min.css">
  <link rel="stylesheet" href="build/main.css">


  <!-- un-comment this code to enable service worker-->
  <!--<script>-->
    <!--if ('serviceWorker' in navigator) {-->
      <!--navigator.serviceWorker.register('service-worker.js')-->
        <!--.then(() => console.log('service worker installed.'))-->
        <!--.catch(err => console.log('Error', err));-->
    <!--}-->
  <!--</script>-->
</head>
<body>
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PVD5TJ"
                    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <!-- this Ionic's root component and where the app will load -->
  <ion-app></ion-app>
  <script src="assets/viewerjs/viewer.min.js"></script>
  <!-- Google Maps Javascript SDK -->
  <!-- Aaha(xinbenlv): this Google API Key has to be ether "iOS Key" or "Android Key" instead of "Browser Key",
       otherwise, a device loading Google Maps will fail with RefererNotAllowedMapError -->
  <script src="https://maps.googleapis.com/maps/api/js?key=<KEY>"></script>

  <!-- TODO(xinbenlv): consider switch to use Browserify to bundle the underscore js from npm package
  <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>-->
  <!-- Auth0.js script -->
  <script src="https://cdn.auth0.com/w2/auth0-7.4.min.js"></script>

  <!-- Auth0 Lock script -->
  <script src="https://cdn.auth0.com/js/lock/10.6/lock.min.js"></script>

  <!-- cordova.js required for cordova apps -->
  <script src="cordova.js"></script>

  <script src='assets/thirdparty/qrcode.min.js' type='text/javascript'></script>
  <!-- jQuery and Cloudinary -->
  <script src='assets/jquery/jquery.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.ui.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.iframe-transport.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.fileupload.min.js' type='text/javascript'></script>
  <script src='assets/jquery/jquery.cloudinary.min.js' type='text/javascript'></script>
  <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="<KEY>" crossorigin="anonymous"></script>-->
  <!--<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="<KEY>" crossorigin="anonymous"></script>-->

  <!-- ZOOM.js https://github.com/fat/zoom.js/ -->
  <script src="assets/zoomjs/transition.js" type='text/javascript'></script>
  <link href="assets/zoomjs/zoom.css" rel="stylesheet">
  <script src="assets/zoomjs/zoom.js" type='text/javascript'></script>

  <script src="build/bootstrap.min.js"></script>
  <!-- The polyfills js is generated during the build process -->
  <script src="build/polyfills.js"></script>
  <!-- all code from node_modules directory is here -->
  <script src="build/vendor.js"></script>
  <!-- The bundle js is generated during the build process -->
  <script src="build/main.js"></script>
</body>
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "WebSite",
  "url": "https://www.haoshiyou.org/",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "http://www.haoshiyou.org/search?q={search_term_string}",
    "query-input": "required name=search_term_string"
  }
}
</script>

</html>

{'fraction_non_alphanumeric': 0.19571865443425077, 'fraction_numerical': 0.027339449541284404, 'mean_word_length': 3.95785324439054, 'pattern_counts': {'":': 7, '<': 258, '<?xml version=': 0, '>': 262, 'https://': 25, 'lorem ipsum': 0, 'www.': 8, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7523627', 'n_tokens_mistral': 6049, 'n_tokens_neox': 5686, 'n_words': 933}