http://ibotta.onelink.me/iUfE/8cc13c64?friend_code=pkavcpe

Last Checked: Oct 06, 2023, 13:57 EDT

IP Address: 52.84.150.38
ASN #: AS16509 AMAZON-02, US
Location: Unknown, Unknown, Unknown
URL Reputation:
  • Unknown This URL is not identified as malicious in the PhishTank Database.
  • Unknown PhishCheck thinks this URL is likely not a phish.
  • Unknown OpenPhish: URL not in feed.

Other submissions on 52.84.150.38:

  • https://venmo.com/signup/start?invite_id=6601971a1695ba2eec2d1258&utm_source=pnu&email=noreply2%40admin.shopsail.shop&nr=1&utm_medium=email

Other submissions on onelink.me:

  • https://adidas.onelink.me/ihha/hvzlwuwv

  • http://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature&af_web_dp=http://Yesasia.azzurrofit.com.br/hh/cHJpc2NpbGxhQHllc2FzaWEuY29t

  • http://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature&af_web_dp=https://scc-ac.com/.traceingss/bigqueesns//hyukaf%2F%2F%2F%2FY291cnRuZXkubGFuZ0BhbXludGFncm91cC5jb20=

  • http://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature&af_web_dp=https%3A%2F%2Fhermestravel.ir/dera//lyu4ha6%2F%2F%2F%2Fspam@microsoft.com

  • http://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature&af_web_dp=https%3A%2F%2Ftricoliteenergy.in/a%2Fwp-includes%2F%2F%2Fcode%2Fauth%2F%2Fdyrzie%2F%2F%2Fmjoyce@redsapsolutions.com

  • http://go.onelink.me/

  • http://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature&af_web_dp=https://tmontario.com/email/verification//ffycpr////askted@tea.texas.gov

  • http://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature&af_web_dp=https://q8nhkb.codesandbox.io/#Y2hvbmdrZWF0LnRlb0BmaXNjaGVyLnNn

  • https://go.onelink.me/107872968?pid=InProduct&c=Global_Inte

  • http://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature&af_web_dp=http://Berger-levrault.grupoayres.com.ar/aa/ZnJhbmNpc2NvLmdvbnphbGV6QGJlcmdlci1sZXZyYXVsdC5jb20=

Previous checks:

                               getaddrinfo(whois.godaddy.com/): Name or service not known

                             
  • GET
    200 OK

    https://ibotta.com/img/icons/favicon-32x32.png

  • http://ibotta.onelink.me/iUfE/8cc13c64?friend_code=pkavcpe https://ibotta.com/register?friend_code=pkavcpe&shortlink=8cc13c64&pid=Mobile App&af_channel=Mobile App&source_caller=ui
  • https://authenticate.ibotta.com/authorize?client_id=W4HHfNPAzohygVTKfwDp81634ImWIfoO&scope=openid+profile+email&audience=https%3A%2F%2Fibotta-prod.ibotta.com%2Fapi%2Fv1%2F&redirect_uri=https%3A%2F%2Fibotta.com%2Fhome&screen_hint=signup&app_version=4.292.0%3Aweb_v2%3Achrome&global_session_id=d0c1976d49f346348864cf31cde279ae&early_identifier=63e65271faa3418d87dd324c253d7f3f&response_type=code&response_mode=query&state=THA1bXNEUjF3dUNJMjJ2eEdIMGYuMldBMDlkVlJJNjdycHQxUzU5Yk05Qg%3D%3D&nonce=bHNmRVNnR1dPV28xNTEuSG42d05aYUduaW1vYlA2VHZlWFdlT0VsOVNYZw%3D%3D&code_challenge=5mZ8E7X-CyLOvXiCKr76D-UfFWOEVc6PzEgI3Ejvo34&code_challenge_method=S256&auth0Client=eyJuYW1lIjoiYXV0aDAtc3BhLWpzIiwidmVyc2lvbiI6IjIuMC44In0%3D /u/signup?state=hKFo2SBKemVOWjVSZzR4SXI3MUZmTzk2M2pnT3BuTDljY0k3bKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHBuVm8wbmVUaUtrWEFWQllaTExRT0wtejNpOUJfOVRvo2NpZNkgVzRISGZOUEF6b2h5Z1ZUS2Z3RHA4MTYzNEltV0lmb08
<html><head>    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    
    <meta name="robots" content="noindex, nofollow">
    
    <link rel="shortcut icon" href="https://ibotta.com/img/icons/favicon-32x32.png">
    
    
    <link rel="stylesheet" href="https://cdn.auth0.com/ulp/react-components/1.79.7/css/main.cdn.min.css">
    <style id="custom-styles-container">
      
        




        
          :root {
    --primary-color: #0A7986;
  }
        
      

        
          :root {
    --button-font-color: #ffffff;
  }
        
      

        
          :root {
    --secondary-button-border-color: #c9cace;
    --social-button-border-color: #c9cace;
    --radio-button-border-color: #c9cace;
  }
        
      

        
          :root {
    --secondary-button-text-color: #1e212a;
  }
        
      

        
          :root {
    --link-color: #635dff;
  }
        
      

        
          :root {
    --title-font-color: #1e212a;
  }
        
      

        
          :root {
    --font-default-color: #1e212a;
  }
        
      

        
          :root {
    --widget-background-color: #ffffff;
  }
        
      

        
          :root {
    --box-border-color: #c9cace;
  }
        
      

        
          :root {
    --font-light-color: #65676e;
  }
        
      

        
          :root {
    --input-text-color: #000000;
  }
        
      

        
          :root {
    --input-border-color: #c9cace;
    --border-default-color: #c9cace;
  }
        
      

        
          :root {
    --input-background-color: #ffffff;
  }
        
      

        
          :root {
    --icon-default-color: #65676e;
  }
        
      

        
          :root {
    --error-color: #d03c38;
    --error-text-color: #ffffff;
  }
        
      

        
          :root {
    --success-color: #13a688;
  }
        
      

        
          :root {
    --base-focus-color: #635dff;
    --transparency-focus-color: rgba(99,93,255, 0.15);
  }
        
      

        
          :root {
    --base-hover-color: #000000;
    --transparency-hover-color: rgba(0,0,0, var(--hover-transparency-value));
  }
        
      




        
          
        
      

        
          html, :root {
    font-size: 16px;
    --default-font-size: 16px;
  }
        
      

        
          body {
    --title-font-size: 1.5rem;
    --title-font-weight: var(--font-default-weight);
  }
        
      

        
          .c9bb21f60 {
    font-size: 0.875rem;
    font-weight: var(--font-default-weight);
  }
        
      

        
          .c78e5e8ca {
    font-size: 0.875rem;
    font-weight: var(--font-default-weight);
  }
        
      

        
          .ca2b51953, .ccc0b0e9d {
    font-size: 1rem;
    font-weight: var(--font-default-weight);
  }
        
      

        
          .c0de3a970 {
    font-size: 1rem;
    font-weight: var(--font-default-weight);
  }
        
      

        
          .c42a6e134, .c5e2b34b1, [id^='ulp-container-'] a {
    font-size: 0.875rem;
    font-weight: var(--font-bold-weight) !important;
  }
        
      

        
          
        
      




        
          :root {
    --button-border-width: 1px;
    --social-button-border-width: 1px;
    --radio-border-width: 1px;
  }
        
      

        
          body {
    --button-border-radius: 3px;
    --radio-border-radius: 3px;
  }
        
      

        
          :root {
    --input-border-width: 1px;
  }
        
      

        
          body {
    --input-border-radius: 3px;
  }
        
      

        
          :root {
    --border-radius-outer: 5px;
  }
        
      

        
          :root {
    --box-border-width: 0px;
  }
        
      

        
          
        
      




        
          
    body {
      --logo-alignment: 0 auto;
    }
  
        
      

        
          
    .c94352e24 {
      content: url('https://home.ibotta.com/wp-content/uploads/2019/06/IbottaLogo_Primary_Pink.png');
    }
  
        
      

        
          body {
    --logo-height: 52px;
  }
  .c94352e24 {
    height: var(--logo-height);
  }
  
        
      

        
          
    body {
      --header-alignment: center;
    }
  
        
      

        
          .ce6b29cdc {
    display: flex;
    flex-direction: column;
  }
  .ce6b29cdc form, .ce6b29cdc > .cfe229019 {
    order: 3;
  }
  .ce6b29cdc ._alternate-action {
    order: 4
  }
  .ce6b29cdc > .c1f6f0b94 {
    order: 2;
    margin-bottom: 24px;
  }
  .ce6b29cdc .c3f03605b {
    order: 1;
    margin-top: 0;
  }
        
      




        
          .c2cfefab8 {
    --page-background-alignment: center;
  }
        
      

        
          body {
    --page-background-color: #ffffff;
  }
        
      

        
          
        
      




      
    </style>
    <style>
    /* By default, hide features for javascript-disabled browsing */
    /* We use !important to override any css with higher specificity */
    /* It is also overriden by the styles in <noscript> in the header file */
    .no-js {
      clip: rect(0 0 0 0);
      clip-path: inset(50%);
      height: 1px;
      overflow: hidden;
      position: absolute;
      white-space: nowrap;
      width: 1px;
    }
  </style>
  <noscript>
    <style>
      /* We use !important to override the default for js enabled */
      /* If the display should be other than block, it should be defined specifically here */
      .js-required { display: none !important; }
      .no-js {
        clip: auto;
        clip-path: none;
        height: auto;
        overflow: auto;
        position: static;
        white-space: normal;
        width: var(--prompt-width);
      }
    </style>
  </noscript>
    
<style>
        :root {
            --primary-color: #0A7986;
            --action-primary-color: #0A7986;
            --link-color: #0A7986;
            --success-color: #2FA84F;
            --error-color: #E60A0A;
            --warning-color: #FCC751;
        }

        body {
          min-height: 100%;
          height: fit-content;
          position: relative;
        }

        .logout-link-container {
          position: relative;
          top: -80px;
          z-index: 10;
          left: 0;
          right: 0;
          height: 0;
        }

        .terms-of-use-container {
          position: relative;
          top: -40px;
          z-index: 10;
          left: 0;
          right: 0;
          height: 0;
        }

        .centered-text {
          text-align: center;
          width: 230px;
          margin-left: auto;
          margin-right: auto;
          font-family: museo-sans,sans-serif;
          font-size: 14px;
          font-weight: 400;
        }

        .bold {
          font-weight: 700;
        }

        /* Primary Buttons */
        button[type="submit"][value="default"] {
            border-radius: 40px;
        }
    </style>
    <title>Create Ibotta Account</title>
    <script type="text/javascript" async="" src="https://cdn.quantummetric.com/qscripts/quantum-ibotta.js"></script><script type="text/javascript" async="" src="https://cdn.heapanalytics.com/js/heap-560310507.js"></script><script type="text/javascript">
      window.heap=window.heap||[],heap.load=function(e,t){window.heap.appid=e,window.heap.config=t=t||{};var r=document.createElement("script");r.type="text/javascript",r.async=!0,r.src="https://cdn.heapanalytics.com/js/heap-"+e+".js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(r,a);for(var n=function(e){return function(){heap.push([e].concat(Array.prototype.slice.call(arguments,0)))}},p=["addEventProperties","addUserProperties","clearEventProperties","identify","resetIdentity","removeEventProperty","setEventProperties","track","unsetEventProperty"],o=0;o<p.length;o++)heap[p[o]]=n(p[o])};
      heap.load("560310507");
    </script>
    <script type="text/javascript">
    (function() {
        var qtm = document.createElement('script'); qtm.type = 'text/javascript'; qtm.async = 1;
        qtm.src = 'https://cdn.quantummetric.com/qscripts/quantum-ibotta.js';
        var d = document.getElementsByTagName('script')[0];
        !window.QuantumMetricAPI && d.parentNode.insertBefore(qtm, d);
    })();
    </script>
  </head>
  <body class="_widget-auto-layout"><main class="_widget c5b85f835">
  <section class="cd29aad99 _prompt-box-outer c938f11fd">
    <div class="c32a19885 c702f833c">
      <div class="c68d161e0">
        <header class="cf37a9a3d cd79df7a3">
          <div title="Ibotta" id="custom-prompt-logo" style="width: auto !important; height: 60px !important; position: static !important; margin: auto !important; padding: 0 !important; background-color: transparent !important; background-position: center !important; background-size: contain !important; background-repeat: no-repeat !important"></div>
        
          <img class="c94352e24 c79c04d30" id="prompt-logo-center" src="https://home.ibotta.com/wp-content/uploads/2019/06/IbottaLogo_Primary_Pink.png" alt="Ibotta">
        
          
            <h1 class="ccb272553 c6f751aac">Create Account</h1>
          
        
          <div class="c9bb21f60 ca0e1b138">
            <p class="c5732b6df cd9407822">Get cash back on things you buy every day.</p>
          </div>
        </header>
      
        <div class="c78e5e8ca ce6b29cdc">
          
        
          <form method="POST" class="cfef2bd89 c19d8b1f2" data-form-primary="true">
            <input type="hidden" name="state" value="hKFo2SBKemVOWjVSZzR4SXI3MUZmTzk2M2pnT3BuTDljY0k3bKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHBuVm8wbmVUaUtrWEFWQllaTExRT0wtejNpOUJfOVRvo2NpZNkgVzRISGZOUEF6b2h5Z1ZUS2Z3RHA4MTYzNEltV0lmb08">
          
            
          
            <div class="c906dcf0b c5ec16447">
              <input type="hidden" name="strengthPolicy" value="good">
            
              <input type="hidden" name="complexityOptions.minLength" value="8">
            
              <div class="c906dcf0b cfe229019">
                <div class="c41c00d7d">
                  
                
                  
                
                  
                    <div class="input-wrapper _input-wrapper">
                      <div class="c0bac7a36 c0edf9efd text cb7991844 ce8e3e750" data-action-text="" data-alternate-action-text="">
                        <label class="c0de3a970 no-js cdeb37b3e c3b59843e" for="email">
                          Email address
                        </label>
                      
                        <input class="input cd7c8a32b c3985db40" inputmode="email" name="email" id="email" type="text" value="" required="" autocomplete="username" autocapitalize="none" spellcheck="false">
                      
                        <div class="c0de3a970 js-required cdeb37b3e c3b59843e" data-dynamic-label-for="email" aria-hidden="true">
                          Email address
                        </div>
                      </div>
                    
                      
                    </div>
                  
                
                  <div class="input-wrapper _input-wrapper">
                    <div class="c0bac7a36 c0edf9efd password c710639a9 ce8e3e750" data-action-text="" data-alternate-action-text="">
                      <label class="c0de3a970 no-js cdeb37b3e caf5837f7" for="password">
                        Password
                      </label>
                    
                      <input class="input cd7c8a32b c32a6c7d2" name="password" id="password" type="password" required="" autocomplete="new-password" autocapitalize="none" spellcheck="false">
                    
                      <div class="c0de3a970 js-required cdeb37b3e caf5837f7" data-dynamic-label-for="password" aria-hidden="true">
                        Password
                      </div>
                    
                      <button type="button" class="ca2b51953 ulp-button-icon c71323a42 _button-icon" data-action="toggle">
                        <span aria-hidden="true" class="password-icon-tooltip show-password-tooltip">Show password</span>
                      
                        <span aria-hidden="true" class="password-icon-tooltip hide-password-tooltip hide">Hide password</span>
                      
                        <span class="screen-reader-only password-toggle-label" data-label="show-password">Show password</span>
                      
                        <span class="screen-reader-only password-toggle-label hide" data-label="hide-password">Hide password</span>
                      
                        <span class="c437a665e password js-required" aria-hidden="true"></span>
                      </button>
                    </div>
                  
                    
                  </div>
                
                  
                </div>
              </div>
            
              
                <div class="c63569483 no-arrow c9e696c0d cbd8e9e3a c5aa17318 ccde13e8e c16a8181d hide _hide" aria-live="assertive" aria-atomic="true">
                  
                    
                      <div class="c0666e878">
                        <ul class="ca7e78c35">
                          <li class="ccfc3a53a c192cfb17">
                            
                              <div class="c6aa17e79 ccfc3a53a">
                                <span class="c2f663a07">Your password must contain:</span>
                              
                                <ul class="cd7bcef38">
                                  
                                    <li class="cbc5bd2ef c0f360b55" data-error-code="password-policy-length-at-least">
                                      <span class="c2f663a07">At least 8 characters</span>
                                    
                                      
                                    </li>
                                  
                                    <li class="cbc5bd2ef c0f360b55" data-error-code="password-policy-contains-at-least">
                                      <span class="c2f663a07">At least 3 of the following:</span>
                                    
                                      
                                        <div>
                                          <ul>
                                            
                                              <li class="cbc5bd2ef c0f360b55" data-error-code="password-policy-lower-case">
                                                <span class="c2f663a07">Lower case letters (a-z)</span>
                                              </li>
                                            
                                              <li class="cbc5bd2ef c0f360b55" data-error-code="password-policy-upper-case">
                                                <span class="c2f663a07">Upper case letters (A-Z)</span>
                                              </li>
                                            
                                              <li class="cbc5bd2ef c0f360b55" data-error-code="password-policy-numbers">
                                                <span class="c2f663a07">Numbers (0-9)</span>
                                              </li>
                                            
                                              <li class="cbc5bd2ef c0f360b55" data-error-code="password-policy-special-characters">
                                                <span class="c2f663a07">Special characters (e.g. !@#$%^&amp;*)</span>
                                              </li>
                                            
                                          </ul>
                                        </div>
                                      
                                    </li>
                                  
                                </ul>
                              </div>
                            
                          </li>
                        </ul>
                      </div>
                    
                  
                </div>
              
            </div>
          
            <div id="custom-field-1"></div>
          
            
          
            <div class="c4b4939bc">
              
                <button type="submit" name="action" value="default" class="ca2b51953 c5b6f24d3 c71323a42 c4e6b1cde c28f8b09b" data-action-button-primary="true">Continue</button>
              
            </div>
          </form>
        
          <div class="ulp-alternate-action  _alternate-action ">
            
          
            <p class="c5732b6df cd9407822 c9c23f85b">Already have an account?
              <a class="c5e2b34b1 c0c9d0159" href="/u/login?state=hKFo2SBKemVOWjVSZzR4SXI3MUZmTzk2M2pnT3BuTDljY0k3bKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHBuVm8wbmVUaUtrWEFWQllaTExRT0wtejNpOUJfOVRvo2NpZNkgVzRISGZOUEF6b2h5Z1ZUS2Z3RHA4MTYzNEltV0lmb08" aria-label="">Log in</a>
            </p>
          
            
          </div>
        
          
            <div class="c9c373412 c1f6f0b94">
              <span>Or</span>
            </div>
          
            <div class="ce7ef4684 c3f03605b">
              
            
              
                <form method="post" data-provider="apple" class="ccc0b0e9d ca80c81ec c84b052c1" data-form-secondary="true">
                  <input type="hidden" name="state" value="hKFo2SBKemVOWjVSZzR4SXI3MUZmTzk2M2pnT3BuTDljY0k3bKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHBuVm8wbmVUaUtrWEFWQllaTExRT0wtejNpOUJfOVRvo2NpZNkgVzRISGZOUEF6b2h5Z1ZUS2Z3RHA4MTYzNEltV0lmb08">
                
                  <input type="hidden" name="connection" value="apple">
                
                  <button type="submit" class="cbee182ee c8780f2ca cc55e6ae6" data-provider="apple" data-action-button-secondary="true">
                    
                      <span class="c9456b69c ccda86e2b" data-provider="apple"></span>
                    
                  
                    <span class="cdbd01db0">Continue with Apple</span>
                  </button>
                </form>
              
                <form method="post" data-provider="google" class="ccc0b0e9d ca80c81ec cf3eb4715" data-form-secondary="true">
                  <input type="hidden" name="state" value="hKFo2SBKemVOWjVSZzR4SXI3MUZmTzk2M2pnT3BuTDljY0k3bKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHBuVm8wbmVUaUtrWEFWQllaTExRT0wtejNpOUJfOVRvo2NpZNkgVzRISGZOUEF6b2h5Z1ZUS2Z3RHA4MTYzNEltV0lmb08">
                
                  <input type="hidden" name="connection" value="google-oauth2">
                
                  <button type="submit" class="cbee182ee c8780f2ca c4d6d7b0a" data-provider="google" data-action-button-secondary="true">
                    
                      <span class="c9456b69c ccda86e2b" data-provider="google"></span>
                    
                  
                    <span class="cdbd01db0">Continue with Google</span>
                  </button>
                </form>
              
                <form method="post" data-provider="facebook" class="ccc0b0e9d ca80c81ec c89527f3b" data-form-secondary="true">
                  <input type="hidden" name="state" value="hKFo2SBKemVOWjVSZzR4SXI3MUZmTzk2M2pnT3BuTDljY0k3bKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHBuVm8wbmVUaUtrWEFWQllaTExRT0wtejNpOUJfOVRvo2NpZNkgVzRISGZOUEF6b2h5Z1ZUS2Z3RHA4MTYzNEltV0lmb08">
                
                  <input type="hidden" name="connection" value="facebook">
                
                  <button type="submit" class="cbee182ee c8780f2ca c4e26b094" data-provider="facebook" data-action-button-secondary="true">
                    
                      <span class="c9456b69c ccda86e2b" data-provider="facebook"></span>
                    
                  
                    <span class="cdbd01db0">Continue with Facebook</span>
                  </button>
                </form>
              
            
              
            </div>
          
        </div>
      </div>
    </div>
  
    
  </section>
</main>
<script id="client-scripts" type="text/javascript">
!function(){function utils(){var n={};return n.exports=function(t,s){var r={};function a(n,e){if(n.classList)return n.classList.add(e);var t=n.className.split(" ");-1===t.indexOf(e)&&(t.push(e),n.className=t.join(" "))}function o(n,e,t,r){return n.addEventListener(e,t,r)}function i(n){return"string"==typeof n}function u(n,e){if(n.classList)return n.classList.remove(e);var t=n.className.split(" "),r=t.indexOf(e);-1!==r&&(t.splice(r,1),n.className=t.join(" "))}function c(n,e){return n.getAttribute(e)}function l(n,e,t){return n.setAttribute(e,t)}var n=["text","number"],e="select,textarea,"+n.map(function(n){return'input[type="'+n+'"]'}).join(",");return{addClass:a,toggleClass:function(n,e,t){if(!0===t||!1===t)return r=n,s=e,!0!==t?u(r,s):a(r,s);var r,s;if(n.classList)return n.classList.toggle(e);var o=n.className.split(" "),i=o.indexOf(e);-1!==i?o.splice(i,1):o.push(e),n.className=o.join(" ")},hasClass:function(n,e){return n.classList?n.classList.contains(e):-1!==n.className.split(" ").indexOf(e)},addClickListener:function(n,e){return o(n,"click",e)},addEventListener:o,getAttribute:c,getElementById:function(n){return s.getElementById(n)},getParent:function(n){return n.parentNode},isString:i,loadScript:function(n,e){var t=s.createElement("script");for(var r in e)r.startsWith("data-")?t.dataset[r.replace("data-","")]=e[r]:t[r]=e[r];t.src=n,s.body.appendChild(t)},poll:function(n){var o=n.interval||2e3,e=n.url||t.location.href,i=n.condition||function(){return!0},a=n.onSuccess||function(){},u=n.onError||function(){};return setTimeout(function r(){var s=new XMLHttpRequest;return s.open("GET",e),s.setRequestHeader("Accept","application/json"),s.onload=function(){if(200===s.status){var n="application/json"===s.getResponseHeader("Content-Type").split(";")[0]?JSON.parse(s.responseText):s.responseText;return i(n)?a():setTimeout(r,o)}if(429!==s.status)return u({status:s.status,responseText:s.responseText});var e=1e3*Number.parseInt(s.getResponseHeader("X-RateLimit-Reset")),t=e-(new Date).getTime();return setTimeout(r,o<t?t:o)},s.send()},o)},querySelector:function(n,e){return i(n)?s.querySelector(n):n.querySelector(e)},querySelectorAll:function(n,e){var t=i(n)?s.querySelectorAll(n):n.querySelectorAll(e);return Array.prototype.slice.call(t)},removeClass:u,removeElement:function(n){return n.remove()},setAttribute:l,removeAttribute:function(n,e){return n.removeAttribute(e)},swapAttributes:function(n,e,t){var r=c(n,e),s=c(n,t);l(n,t,r),l(n,e,s)},setGlobalFlag:function(n,e){r[n]=!!e},getGlobalFlag:function(n){return!!r[n]},preventFormSubmit:function(n){n.stopPropagation(),n.preventDefault()},matchMedia:function(n){return"function"!=typeof t.matchMedia&&t.matchMedia(n).matches},dispatchEvent:function(n,e,t){var r;"function"!=typeof Event?(r=s.createEvent("Event")).initCustomEvent(e,t,!1):r=new Event(e,{bubbles:t}),n.dispatchEvent(r)},timeoutPromise:function(n,s){return new Promise(function(e,t){var r=setTimeout(function(){t(new Error("timeoutPromise: promise timed out"))},n);s.then(function(n){clearTimeout(r),e(n)},function(n){clearTimeout(r),t(n)})})},createMutationObserver:function(n){return"undefined"==typeof MutationObserver?null:new MutationObserver(n)},consoleWarn:function(){(console.warn||console.log).apply(console,arguments)},setTimeout:setTimeout,globalWindow:t,SUPPORTED_INPUT_TYPES:n,ELEMENT_TYPE_SELECTOR:e}},n.exports}function passwordSheriffBundle(){var module={exports:function(){return function(t){var r={};function s(n){if(r[n])return r[n].exports;var e=r[n]={i:n,l:!1,exports:{}};return t[n].call(e.exports,e,e.exports,s),e.l=!0,e.exports}return s.m=t,s.c=r,s.d=function(n,e,t){s.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},s.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},s.t=function(e,n){if(1&n&&(e=s(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(s.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)s.d(t,r,function(n){return e[n]}.bind(null,r));return t},s.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return s.d(e,"a",e),e},s.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},s.p="",s(s.s="./src/index.js")}({"./node_modules/inherits/inherits_browser.js":function(module,exports){eval("if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n\n//# sourceURL=webpack:///./node_modules/inherits/inherits_browser.js?")},"./node_modules/process/browser.js":function(module,exports){eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?")},"./node_modules/util/support/isBufferBrowser.js":function(module,exports){eval("module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n\n//# sourceURL=webpack:///./node_modules/util/support/isBufferBrowser.js?")},"./node_modules/util/util.js":function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ \"./node_modules/util/support/isBufferBrowser.js\");\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb, null, ret) },\n            function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./node_modules/util/util.js?")},"./node_modules/webpack/buildin/global.js":function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?')},"./src/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PasswordSheriff", function() { return PasswordSheriff; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PasswordPolicy", function() { return PasswordPolicy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "charsets", function() { return charsets; });\n\nvar charsets = __webpack_require__(/*! ./lib/rules/contains */ "./src/lib/rules/contains.js").charsets;\n\nvar upperCase         = charsets.upperCase;\nvar lowerCase         = charsets.lowerCase;\nvar numbers           = charsets.numbers;\nvar specialCharacters = charsets.specialCharacters;\n\nvar PasswordPolicy = __webpack_require__(/*! ./lib/policy */ "./src/lib/policy.js");\n\nvar none =  new PasswordPolicy({\n  length: { minLength: 1 }\n});\n\nvar low = new PasswordPolicy({\n  length: { minLength: 6 }\n});\n\nvar fair = new PasswordPolicy({\n  length: { minLength: 8 },\n  contains: {\n    expressions: [lowerCase, upperCase, numbers]\n  }\n});\n\nvar good = new PasswordPolicy({\n  length: { minLength: 8 },\n  containsAtLeast: {\n    atLeast: 3,\n    expressions: [lowerCase, upperCase, numbers, specialCharacters]\n  }\n});\n\nvar excellent = new PasswordPolicy({\n  length: { minLength: 10 },\n  containsAtLeast: {\n    atLeast: 3,\n    expressions: [lowerCase, upperCase, numbers, specialCharacters]\n  },\n  identicalChars: { max: 2 }\n});\n\nvar policiesByName = {\n  none:       none,\n  low:        low,\n  fair:       fair,\n  good:       good,\n  excellent:  excellent\n};\n\n/**\n * Creates a password policy.\n *\n * @param {String} policyName Name of policy to use.\n */\n\nfunction PasswordSheriff(policyName) {\n  var policy = policiesByName[policyName] || policiesByName.none;\n\n  return {\n    /**\n     * Checks that a password meets this policy\n     *\n     * @method check\n     * @param {String} password\n     */\n    check: function (password) {\n      return policy.check(password);\n    },\n    /**\n     * @method assert\n     * Asserts that a passord meets this policy else throws an exception.\n     *\n     * @param {String} password\n     */\n    assert: function (password) {\n      return policy.assert(password);\n    },\n\n    missing: function (password) {\n      return policy.missing(password);\n    },\n\n    missingAsMarkdown: function (password) {\n      return policy.missingAsMarkdown(password);\n    },\n\n    explain: function () {\n      return policy.explain();\n    },\n\n    /**\n     * Friendly string representation of the policy\n     * @method toString\n     */\n    toString: function () {\n      return policy.toString();\n    }\n  };\n};\n\n\n\n\n// module.exports = PasswordSheriff;\n// module.exports.PasswordPolicy = PasswordPolicy;\n// module.exports.charsets = charsets;\n\n// module.exports.rulesToApply = rulesToApply;\n\n\n//# sourceURL=webpack:///./src/index.js?')},"./src/lib/helper.js":function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(global) {var _ = {};\nvar root = typeof self == 'object' && self.self === self && self ||\n            typeof global == 'object' && global.global === global && global ||\n            this ||\n            {};\nvar nativeIsArray = Array.isArray;\nvar nativeKeys = Object.keys;\nvar ObjProto = Object.prototype;\nvar toString = ObjProto.toString;\n\nvar shallowProperty = function(key) {\n  return function(obj) {\n    return obj == null ? void 0 : obj[key];\n  };\n};\n\nvar MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\nvar getLength = shallowProperty('length');\nvar isArrayLike = function(collection) {\n  var length = getLength(collection);\n  return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n};\n\n// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\nvar typeNames = ['Arguments', 'Function', 'String', 'Number'];\nfunction loopAsign(name) {\n  _['is' + name] = function(obj) {\n    return toString.call(obj) === '[object ' + name + ']';\n  };\n}\nfor (var a = 0; a < typeNames.length; a++) {\n  loopAsign(typeNames[a]);\n}\n\nvar nodelist = root.document && root.document.childNodes;\nif ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n  _.isFunction = function(obj) {\n    return typeof obj == 'function' || false;\n  };\n}\n\n_.identity = function(value) {\n  return value;\n};\n\n_.keys = function(obj) {\n  if (!_.isObject(obj)) return [];\n  if (nativeKeys) return nativeKeys(obj);\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n\n_.isObject = function(obj) {\n  var type = typeof obj;\n  return type === 'function' || type === 'object' && !!obj;\n};\n\n_.isArray = nativeIsArray || function(obj) {\n  return toString.call(obj) === '[object Array]';\n};\n\n_.isEmpty = function(obj) {\n  if (obj == null) return true;\n  if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n  return _.keys(obj).length === 0;\n};\n\n_.isNaN = function(obj) {\n  return _.isNumber(obj) && isNaN(obj);\n};\n\nmodule.exports = _;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/lib/helper.js?")},"./src/lib/policy.js":function(module,exports,__webpack_require__){eval("var format = __webpack_require__(/*! util */ \"./node_modules/util/util.js\").format;\n\nvar PasswordPolicyError = __webpack_require__(/*! ./policy_error */ \"./src/lib/policy_error.js\");\n\nfunction isString(value) {\n  return typeof value === 'string' || value instanceof String;\n}\n\nvar defaultRuleset = {\n  length:           __webpack_require__(/*! ./rules/length */ \"./src/lib/rules/length.js\"),\n  contains:         __webpack_require__(/*! ./rules/contains */ \"./src/lib/rules/contains.js\"),\n  containsAtLeast:  __webpack_require__(/*! ./rules/containsAtLeast */ \"./src/lib/rules/containsAtLeast.js\"),\n  identicalChars:   __webpack_require__(/*! ./rules/identicalChars */ \"./src/lib/rules/identicalChars.js\"),\n};\n\nfunction flatDescriptions (descriptions, index) {\n  if (!descriptions.length) {\n    return '';\n  }\n\n  function flatSingleDescription (description, index) {\n    var spaces = (new Array(index+1)).join(' ');\n    var result = spaces + '* ';\n    if (description.format) {\n      result += format.apply(null, [description.message].concat(description.format));\n    } else {\n      result += description.message;\n    }\n\n    if (description.items) {\n      result += '\\n' + spaces + flatDescriptions(description.items, index + 1);\n    }\n    return result;\n  }\n\n  var firstDescription = flatSingleDescription(descriptions[0], index);\n\n  descriptions = descriptions.slice(1).reduce(function (result, description) {\n    result += '\\n' + flatSingleDescription(description, index);\n\n    return result;\n  }, firstDescription);\n\n  return descriptions;\n}\n\n/**\n * Creates a PasswordPolicy which is a set of rules.\n *\n * @class PasswordPolicy\n * @constructor\n */\nfunction PasswordPolicy(rules, ruleset) {\n  this.rules = rules;\n  this.ruleset = ruleset || defaultRuleset;\n\n  this._reduce(function (result, ruleOptions, rule) {\n    rule.validate(ruleOptions);\n  });\n}\n\nPasswordPolicy.prototype = {};\n\nPasswordPolicy.prototype._reduce = function (fn, value) {\n  var self = this;\n  return Object.keys(this.rules).reduce(function (result, ruleName) {\n    var ruleOptions = self.rules[ruleName];\n    var rule = self.ruleset[ruleName];\n\n    return fn(result, ruleOptions, rule);\n\n  }, value);\n};\n\nPasswordPolicy.prototype._applyRules = function (password) {\n  return this._reduce(function (result, ruleOptions, rule) {\n    // If previous result was false as this an &&, then nothing to do here!\n    if (!result) {\n      return false;\n    }\n\n    if (!rule) {\n      return false;\n    }\n\n    return rule.assert(ruleOptions, password);\n  }, true);\n};\n\nPasswordPolicy.prototype.missing = function (password) {\n  return this._reduce(function (result, ruleOptions, rule) {\n    var missingRule = rule.missing(ruleOptions, password);\n    result.rules.push(missingRule);\n    result.verified = result.verified && !!missingRule.verified;\n    return result;\n  }, {rules: [], verified: true});\n};\n\nPasswordPolicy.prototype.explain = function () {\n  return this._reduce(function (result, ruleOptions, rule) {\n    result.push(rule.explain(ruleOptions));\n    return result;\n  }, []);\n};\n\nPasswordPolicy.prototype.missingAsMarkdown = function (password) {\n  return flatDescriptions(this.missing(password), 1);\n};\n\nPasswordPolicy.prototype.toString = function () {\n  var descriptions = this.explain();\n  return flatDescriptions(descriptions, 0);\n};\n\nPasswordPolicy.prototype.check = function (password) {\n  if (!isString(password)) {\n    return false;\n  }\n\n  return this._applyRules(password);\n};\n\nPasswordPolicy.prototype.assert = function (password) {\n  if (!this.check(password)) {\n    throw new PasswordPolicyError('Password does not meet password policy');\n  }\n};\n\nmodule.exports = PasswordPolicy;\n\n\n//# sourceURL=webpack:///./src/lib/policy.js?")},"./src/lib/policy_error.js":function(module,exports){eval("/**\n * Error thrown when asserting a policy against a password.\n *\n * @class PasswordPolicyError\n * @constructor\n *\n * @param {String} msg Descriptive message of the error\n */\nfunction PasswordPolicyError(msg) {\n  var err = Error.call(this, msg);\n  err.name = 'PasswordPolicyError';\n  return err;\n}\n\nmodule.exports = PasswordPolicyError;\n\n\n//# sourceURL=webpack:///./src/lib/policy_error.js?")},"./src/lib/rules/contains.js":function(module,exports,__webpack_require__){eval("var _ = __webpack_require__(/*! ../helper */ \"./src/lib/helper.js\");\n\n/* OWASP Special Characters: https://www.owasp.org/index.php/Password_special_characters */\nvar specialCharacters = [' ', '!', '\"', '#', '\\\\$', '%', '&', '\\'', '\\\\(', '\\\\)', '\\\\*', '\\\\+', ',', '-', '\\\\.', '/', ':', ';', '<', '=', '>', '\\\\?', '@', '\\\\[', '\\\\\\\\', '\\\\]', '\\\\^', '_','`','{','\\\\|', '}','~'].join('|');\n\nvar specialCharactersRegexp = new RegExp(specialCharacters);\n\nmodule.exports = {\n  validate: function (options) {\n    if (!_.isObject(options)) {\n      throw new Error('options should be an object');\n    }\n\n    if (!_.isArray(options.expressions) || _.isEmpty(options.expressions)) {\n      throw new Error('contains expects expressions to be a non-empty array');\n    }\n\n    var ok = options.expressions.every(function (expression) {\n      return _.isFunction(expression.explain) && _.isFunction(expression.test);\n    });\n\n    if (!ok) {\n      throw new Error('contains expressions are invalid: An explain and a test function should be provided');\n    }\n    return true;\n  },\n  explain: function (options) {\n    return {\n      message: 'Should contain:',\n      code: 'shouldContain',\n      items: options.expressions.map(function (expression) {\n        return expression.explain();\n      })\n    };\n  },\n  missing: function (options, password) {\n    var expressions = options.expressions.map(function (expression) {\n      var explained = expression.explain();\n      explained.verified = expression.test(password);\n      return explained;\n    });\n\n    var verified = expressions.every(function (expression) {\n      return expression.verified;\n    });\n\n    return {\n      message: 'Should contain:',\n      code: 'shouldContain',\n      verified: verified,\n      items: expressions\n    };\n  },\n  assert: function (options, password) {\n    if (!password) {\n      return false;\n    }\n\n    return options.expressions.every(function (expression) {\n      var result = expression.test(password);\n      return result;\n    });\n  },\n  charsets: {\n    upperCase: {\n      explain: function () { return {\n        message: 'upper case letters (A-Z)',\n        code: 'upperCase'\n      }; },\n      test: function (password) { return /[A-Z]/.test(password); }\n    },\n    lowerCase: {\n      explain: function () { return {\n        message: 'lower case letters (a-z)',\n        code: 'lowerCase'\n      }; },\n      test: function (password) { return /[a-z]/.test(password); }\n    },\n    specialCharacters: {\n      explain: function () { return {\n        message: 'special characters (e.g. !@#$%^&*)',\n        code: 'specialCharacters'\n      }; },\n      test: function (password) { return specialCharactersRegexp.test(password); }\n    },\n    numbers: {\n      explain: function () { return {\n        message: 'numbers (i.e. 0-9)',\n        code: 'numbers'\n      }; },\n      test: function (password) { return /\\d/.test(password); }\n    }\n  }\n};\n\n\n//# sourceURL=webpack:///./src/lib/rules/contains.js?")},"./src/lib/rules/containsAtLeast.js":function(module,exports,__webpack_require__){eval("var _ = __webpack_require__(/*! ../helper */ \"./src/lib/helper.js\");\n\nvar contains = __webpack_require__(/*! ./contains */ \"./src/lib/rules/contains.js\");\n\nfunction createIntroMessage() {\n  return 'Contain at least %d of the following %d types of characters:';\n}\n\nmodule.exports = {\n  // TODO validate atLeast to be a number > 0 and expressions to be a list of at least 1\n  validate: function (options) {\n    if (!_.isObject(options)) {\n      throw new Error('options should be an object');\n    }\n\n    if (!_.isNumber(options.atLeast) || _.isNaN(options.atLeast) || options.atLeast < 1) {\n      throw new Error('atLeast should be a valid, non-NaN number, greater than 0');\n    }\n\n    if (!_.isArray(options.expressions) || _.isEmpty(options.expressions)) {\n      throw new Error('expressions should be an non-empty array');\n    }\n\n    if (options.expressions.length < options.atLeast) {\n      throw new Error('expressions length should be greater than atLeast');\n    }\n\n    var ok = options.expressions.every(function (expression) {\n      return _.isFunction(expression.explain) && _.isFunction(expression.test);\n    });\n\n    if (!ok) {\n      throw new Error('containsAtLeast expressions are invalid: An explain and a test function should be provided');\n    }\n\n    return true;\n  },\n  explain: function (options) {\n    return {\n      message: createIntroMessage(),\n      code: 'containsAtLeast',\n      format: [options.atLeast, options.expressions.length],\n      items: options.expressions.map(function (x) { return x.explain(); })\n    };\n  },\n  missing: function (options, password) {\n    var expressions = options.expressions && options.expressions.map(function (expression) {\n      var explained = expression.explain();\n      explained.verified = expression.test(password);\n      return explained;\n    });\n\n    var verifiedCount = expressions.reduce(function (val, ex) { return val + !!ex.verified; }, 0);\n    var verified = verifiedCount >= options.atLeast;\n\n    return {\n      message: createIntroMessage(),\n      code: 'containsAtLeast',\n      format: [options.atLeast, options.expressions.length],\n      items: expressions,\n      verified: verified\n    };\n  },\n  assert: function (options, password) {\n    if (!password) {\n      return false;\n    }\n\n    var workingExpressions = options.expressions.filter(function (expression) {\n      return expression.test(password);\n    });\n\n    return workingExpressions.length >= options.atLeast;\n  },\n  charsets: contains.charsets\n};\n\n\n//# sourceURL=webpack:///./src/lib/rules/containsAtLeast.js?")},"./src/lib/rules/identicalChars.js":function(module,exports,__webpack_require__){eval("var _ = __webpack_require__(/*! ../helper */ \"./src/lib/helper.js\");\n\nfunction assert(options, password) {\n  if (!password) {\n    return false;\n  }\n\n  var i, current = {c: null, count: 0};\n\n  for (i = 0; i < password.length; i++) {\n    if (current.c !== password[i]) {\n      current.c = password[i];\n      current.count = 1;\n    } else {\n      current.count++;\n    }\n\n    if (current.count > options.max) {\n      return false;\n    }\n  }\n\n  return true;\n}\nfunction explain (options, verified) {\n    var example = (new Array(options.max+2)).join('a');\n    var d = {\n      message: 'No more than %d identical characters in a row (e.g., \"%s\" not allowed)',\n      code: 'identicalChars',\n      format: [options.max, example]\n    };\n    if (verified !== undefined) {\n      d.verified = verified;\n    }\n    return d;\n  }\n\nmodule.exports = {\n  validate: function (options) {\n    if (!_.isObject(options)) {\n      throw new Error('options should be an object');\n    }\n\n    if (!_.isNumber(options.max) || _.isNaN(options.max) || options.max < 1 ) {\n      throw new Error('max should be a number greater than 1');\n    }\n\n    return true;\n  },\n  explain: explain,\n  missing: function (options, password) {\n    return explain(options, assert(options, password));\n  },\n  assert: assert\n};\n\n\n//# sourceURL=webpack:///./src/lib/rules/identicalChars.js?")},"./src/lib/rules/length.js":function(module,exports,__webpack_require__){eval("var _ = __webpack_require__(/*! ../helper */ \"./src/lib/helper.js\");\n\n/* A rule should contain explain and rule methods */\n// TODO explain explain\n// TODO explain missing\n// TODO explain assert\n\nfunction assert (options, password) {\n  return !!password && options.minLength <= password.length;\n}\n\nfunction explain(options) {\n  if (options.minLength === 1) {\n    return {\n      message: 'Non-empty password required',\n      code: 'nonEmpty'\n    };\n  }\n\n  return {\n    message: 'At least %d characters in length',\n    format: [options.minLength],\n    code: 'lengthAtLeast'\n  };\n}\n\nmodule.exports = {\n  validate: function (options) {\n    if (!_.isObject(options)) {\n      throw new Error('options should be an object');\n    }\n\n    if (!_.isNumber(options.minLength) || _.isNaN(options.minLength)) {\n      throw new Error('length expects minLength to be a non-zero number');\n    }\n\n    return true;\n  },\n  explain: explain,\n  missing: function (options, password) {\n    var explained = explain(options);\n    explained.verified = !!assert(options, password);\n    return explained;\n  },\n  assert: assert\n};\n\n\n//# sourceURL=webpack:///./src/lib/rules/length.js?")}})}};return module.exports}function showHidePassword(){var n={};return n.exports=function(r,n,i,a,u,c,l){n("div.c0bac7a36.password").forEach(function(n){var s,o,e=r(n,"input"),t=r(n,'[data-action="toggle"]');i(n,(s=e,o=t,function(n){if(n.target.classList.contains("ulp-button-icon")){if(s.type="password"===s.type?"text":"password",o){var e=o.querySelector(".show-password-tooltip"),t=o.querySelector(".hide-password-tooltip");e&&c(e,"hide"),t&&c(t,"hide")}var r=l(s);"text"===s.type?a(r,"show"):u(r,"show")}}))})},n.exports}function passwordPolicies(){var n={};return n.exports=function(n,a,e,t,r,u,c,s,o,i,l){var p,f,d,m,h,g,b,y,v,w,x=n(),_=x.PasswordPolicy,j=(p=x.charsets,f=a,d=p.upperCase,m=p.lowerCase,h=p.numbers,g=p.specialCharacters,b={none:{length:{minLength:1}},low:{length:{minLength:6}},fair:{length:{minLength:8},contains:{expressions:[m,d,h]}},good:{length:{minLength:8},containsAtLeast:{atLeast:3,expressions:[m,d,h,g]}},excellent:{length:{minLength:10},containsAtLeast:{atLeast:3,expressions:[m,d,h,g]},identicalChars:{max:2}}},y=f('input[name="complexityOptions.minLength"][type="hidden"]').value,v={complexityOptions:{minLength:y&&parseInt(y)},strengthPolicy:f('input[name="strengthPolicy"][type="hidden"]').value||"none"},!!(w=b[v.strengthPolicy])&&(v.complexityOptions&&v.complexityOptions.minLength&&!isNaN(v.complexityOptions.minLength)&&(w.length.minLength=v.complexityOptions.minLength),w)),k=new _(j);if(j){var E=a("form.cfef2bd89"),T=e('input[type="password"]'),S=e("div.c0bac7a36.password"),O=T[0]||!1,P=a(".c63569483.ccde13e8e");a("li.c192cfb17"),a("div.c6aa17e79"),O&&E&&P&&(s(O,"input",C),s(O,"keyup",A),s(E,"submit",function(n){var e=o("submitted");i("submitted",!0),N();var t,r,s=A();if(r=(t={event:n,passwordIsValid:s}).event,!t.passwordIsValid&&(r.stopPropagation(),r.preventDefault(),O.focus(),1))return i("submitted",!1),C(),T.forEach(function(n){c(n,"c7606795c")}),void S.forEach(function(n){c(n,"c0f360b55")});e&&l(n)}))}else console.error("ERROR: Couldn't find a matching password policy, disabling password policy validation.");function C(n){t(P,"data-shown")||(u(P,"hide"),c(P,"cbd8e9e3a"),r(P,"data-shown",!0))}function A(n){var e=O.value,t=k.missing(e);return function n(e){if(e)for(var t=0;t<e.length;t++){var r=e[t],s='.c63569483 ul li[data-error-code="password-policy-'+r.code.split(/([A-Z])/).map(function(n){return n.toLowerCase()}).map(function(n,e){return e%2==1?"-"+n:n}).join("")+'"]',o=a(s);if(o){u(o,"c0f360b55"),u(o,"c9f29bf8d");var i=r.verified?"c9f29bf8d":"c0f360b55";c(o,i)}r.items&&n(r.items)}}(t.rules),t.verified&&N(),t.verified}function N(){T.forEach(function(n){u(n,"c7606795c")}),S.forEach(function(n){u(n,"c0f360b55")})}},n.exports}function inputFocus(){var n={};return n.exports=function(r,n,s,o,i,a,u,c,t,l){function p(n){var e=n.target,t=a(e);e.value||l(e,"data-autofilled")?o(t,"ca87d3287"):i(t,"ca87d3287")}function f(n){var e=n.target;"onAutoFillStart"===n.animationName&&(t(e,"data-autofilled",!0),c(n.target,"change",!0),s(e,"keyup",d,{once:!0}))}function d(n){var e=n.target;t(e,"data-autofilled","")}if(r("body._simple-labels"))return n(".c0de3a970.no-js").forEach(function(n){i(n,"no-js")}),void n(".c0de3a970.js-required").forEach(function(n){o(n,"hide")});n(".c0bac7a36:not(.c52a1651b):not(disabled)").forEach(function(n){o(n,"ce8e3e750");var e,t=r(n,".input");t.value&&o(n,"ca87d3287"),s(n,"change",p),s(t,"blur",p),s(t,"animationstart",f),e=t,u(function(){e.value&&c(e,"change",!0)},100)})},n.exports}function loadCaptcha(){var n={},h="recaptcha_v2",g="recaptcha_enterprise",b="hcaptcha",y="friendly_captcha",v="arkose";return n.exports=function(n,e,t,r){var s,o,i,a=e("div[data-captcha-sitekey]"),u=e("div[data-captcha-sitekey] input");function c(){return e(function(){switch(p()){case h:case g:return"#ulp-recaptcha";case b:return"#ulp-hcaptcha";case y:return"#ulp-friendly-captcha";case v:return"#ulp-arkose"}}())}function l(){return a.getAttribute("data-captcha-lang")}function p(){return a.getAttribute("data-captcha-provider")}function f(){return a.getAttribute("data-captcha-sitekey")}function d(){return document.querySelector('form[data-form-primary="true"]')}function m(n){return u.value=n}a&&(s="captchaCallback_"+Math.floor(1000001*Math.random()),o=p(),i={async:!0,defer:!0},window[s]=o===v?(i["data-callback"]=s,function(n){var e;e=n,d().addEventListener("submit",function(n){e.run(),n.preventDefault()}),n.setConfig({onCompleted:function(n){m(n.token),d().submit()}})}):function(){delete window[s],function(){var n=function(){switch(p()){case h:return window.grecaptcha;case g:return window.grecaptcha.enterprise;case b:return window.hcaptcha;case y:return window.friendlyChallenge;case v:return window.arkose}}();if(p()===y)var e=new n.WidgetInstance(c(),{sitekey:f(),language:l(),doneCallback:function(n){m(n)}});else var e=n.render(c(),{sitekey:f(),"expired-callback":function(){m(""),t(a,"c0f360b55"),n.reset(e)},callback:function(n){m(n),r(a,"c0f360b55")}})}()},o===y&&(i.onload=window[s]),n(function(n,e,t,r){switch(p()){case h:return"https://www.recaptcha.net/recaptcha/api.js?render=explicit&hl="+n+"&onload="+e;case g:return"https://www.recaptcha.net/recaptcha/enterprise.js?render=explicit&hl="+n+"&onload="+e;case b:return"https://js.hcaptcha.com/1/api.js?render=explicit&hl="+n+"&onload="+e;case y:return"https://cdn.jsdelivr.net/npm/friendly-challenge@0.9.12/widget.min.js";case v:return"https://"+t+".arkoselabs.com/v2/"+r+"/api.js"}}(l(),s,a.getAttribute("data-captcha-client-subdomain"),f()),i))},n.exports}function ulpFieldStyling(){var n={};return n.exports=function(t,n,r,s,o,i,a,e,u){function c(n){var e=n.target,t=i(e);e.value?s(t,"ca87d3287"):o(t,"ca87d3287")}function l(n){var e=n.target,t=i(e);s(t,"focus")}function p(n){var e=n.target,t=i(e);o(t,"focus")}function f(){n("[id^='ulp-container-'] .ulp-field").forEach(function(n){if(!a(n,"ce8e3e750")){var e=t(n,u);e&&(s(n,"ce8e3e750"),e.value&&s(n,"ca87d3287"),r(e,"change",c),r(e,"focus",l),r(e,"blur",p))}})}var d=n("[id^='ulp-container-']");if(d&&d.length){var m=e(f);if(m)for(var h=0;h<d.length;h++)m.observe(d[h],{childList:!0,subtree:!0});f()}},n.exports}function ulpFieldValidation(){var n={};return n.exports=function(r,i,s,o,a,u,c,e,l,p,n){var f=!1,d=n+',input[type="checkbox"]';function m(n){var e=a(n,"data-ulp-validation-function"),t=o(n);return{functionName:e,element:r(t,d),parent:t}}function t(n){var s=[],o=[];return i(n,"[data-ulp-validation-function]").forEach(function(n){var e=m(n),t=[];if(e.element){if("input"===e.element.tagName.toLowerCase()){var r=a(e.element,"type");"c1539f487"!==r&&-1===p.indexOf(r)&&t.push("Unsupported input type: "+r)}}else t.push("Could not find element");c[e.functionName]||t.push("Could not find function with name: "+e.functionName),t.length?o=o.concat(t):s.push(n)}),o.length&&e(o.join("\r\n")),s}function h(n,e,t){var r=m(n),s=(0,c[r.functionName])(r.element,e,t);u(n,"ulp-validator-error",!s);var o=i(r.parent,".ulp-validator-error");return u(r.parent,"ulp-error",!!o.length),s}function g(e){var t=m(e),n=(a(e,"data-ulp-validation-event-listeners")||"").replace(/\s/g,"").split(",").filter(function(n){return!!n});n.length&&n.forEach(function(n){s(t.element,n,function(){h(e,f,n)})})}function b(n,e){f=!0;var t=e.filter(function(n){return!h(n,f,"submit")});if(t.length){l(n);var r=m(t[0]);r.element.focus({preventScroll:!0}),r.parent.scrollIntoView({behavior:"smooth"})}}function y(){var n=r('form[data-form-primary="true"]'),e=t(n);0!==e.length&&(e.forEach(function(n){g(n)}),s(n,"submit",function(n){b(n,e)}))}function v(){var n=i("[id^='ulp-container-']");n&&n.length&&y()}return v(),[d,m,t,h,g,b,y,v]},n.exports}var _utils=utils()(window,document),_passwordSheriffBundle=passwordSheriffBundle();showHidePassword()(_utils.querySelector,_utils.querySelectorAll,_utils.addClickListener,_utils.addClass,_utils.removeClass,_utils.toggleClass,_utils.getParent),passwordPolicies()(_passwordSheriffBundle,_utils.querySelector,_utils.querySelectorAll,_utils.getAttribute,_utils.setAttribute,_utils.removeClass,_utils.addClass,_utils.addEventListener,_utils.getGlobalFlag,_utils.setGlobalFlag,_utils.preventFormSubmit),inputFocus()(_utils.querySelector,_utils.querySelectorAll,_utils.addEventListener,_utils.addClass,_utils.removeClass,_utils.getParent,_utils.setTimeout,_utils.dispatchEvent,_utils.setAttribute,_utils.getAttribute),loadCaptcha()(_utils.loadScript,_utils.querySelector,_utils.addClass,_utils.removeClass),ulpFieldStyling()(_utils.querySelector,_utils.querySelectorAll,_utils.addEventListener,_utils.addClass,_utils.removeClass,_utils.getParent,_utils.hasClass,_utils.createMutationObserver,_utils.ELEMENT_TYPE_SELECTOR),ulpFieldValidation()(_utils.querySelector,_utils.querySelectorAll,_utils.addEventListener,_utils.getParent,_utils.getAttribute,_utils.toggleClass,_utils.globalWindow,_utils.consoleWarn,_utils.preventFormSubmit,_utils.SUPPORTED_INPUT_TYPES,_utils.ELEMENT_TYPE_SELECTOR)}();
</script>


    <div class="terms-of-use-container">
      <div class="centered-text">
        By using Ibotta you agree to the
        <a href="https://legal.ibotta.com/policies?name=ibotta-terms-of-use" class="" data-ol-has-click-handler="">Terms of Use</a>
        and
        <a href="https://legal.ibotta.com/policies?name=ibotta-privacy-policy" class="" data-ol-has-click-handler="">Privacy Policy</a>
      </div>
    </div>
  
</body></html>

                             

Screenshot: